Skip to content

Commit ed4a214

Browse files
committed
fix erroneous fragment duplication
1 parent baeca52 commit ed4a214

File tree

10 files changed

+41
-44
lines changed

10 files changed

+41
-44
lines changed

package.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"@tsplus/stdlib": "0.1.8",
4141
"@types/node": "^18.0.0",
4242
"@types/rimraf": "^3.0.2",
43+
"@types/webpack": "5.28.0",
4344
"@typescript-eslint/eslint-plugin": "^5.29.0",
4445
"@typescript-eslint/parser": "^5.29.0",
4546
"babel-plugin-annotate-pure-calls": "^0.4.0",
@@ -56,10 +57,13 @@
5657
"madge": "^5.0.1",
5758
"picocolors": "^1.0.0",
5859
"rimraf": "^3.0.2",
60+
"ts-loader": "9.3.0",
5961
"typescript": "^4.7.4",
6062
"ultra-runner": "^3.10.5",
6163
"vite": "^2.9.12",
62-
"vitest": "0.15.2"
64+
"vitest": "0.15.2",
65+
"webpack": "5.73.0",
66+
"webpack-cli": "4.10.0"
6367
},
6468
"resolutions": {
6569
"eslint-plugin-codegen": "patch:eslint-plugin-codegen@npm:0.16.1#.yarn/patches/eslint-plugin-codegen-npm-0.16.1-87770191cd"

packages/html/.babel.mjs.json

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
{
2-
"plugins": [
3-
[
4-
"replace-import-extension",
5-
{
6-
"extMapping": {
7-
".js": ".mjs"
8-
}
9-
}
10-
],
11-
[
12-
"annotate-pure-calls"
13-
]
14-
]
2+
"plugins": [
3+
[
4+
"replace-import-extension",
5+
{
6+
"extMapping": {
7+
".js": ".mjs"
8+
}
9+
}
10+
],
11+
[
12+
"annotate-pure-calls"
13+
]
14+
]
1515
}

packages/html/_src/data/Hole/operations/toEntry.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ export function toEntry(
1111

1212
return TemplateCache.getOrElseEffect(self.template, TemplateCache.set(self.template, self.toTemplate)).flatMap((
1313
template
14-
) =>
15-
template.updates.flatMap((updates) =>
16-
Entry(self.type, self.template, template.toDocumentFragment, updates.toImmutableArray)
14+
) => {
15+
const fragment = template.toDocumentFragment
16+
17+
return template.updates(fragment).flatMap((updates) =>
18+
Entry(self.type, self.template, fragment, updates.toImmutableArray)
1719
)
18-
)
20+
})
1921
}

packages/html/_src/data/Template/operations/updates.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ function anyContent(
369369
}).as(_)
370370
).catchAll(() => Effect.succeed(() => document.createTextNode(String(newValue)))).asSome()
371371
).flatMap((_) => Effect.fromMaybe(_).mapError(() => new Template.NoTextNodeException())).flatMap((text) =>
372-
nodesRef.updateEffect((nodes) => diff(comment, nodes, [text]))
372+
nodesRef.updateAndGetEffect((nodes) => diff(comment, nodes, [text]))
373373
).as(newValue).asSome()
374374
)
375375
}
@@ -695,10 +695,11 @@ function handlers(
695695
}
696696

697697
/**
698-
* @tsplus getter ets/Template updates
698+
* @tsplus fluent ets/Template updates
699699
*/
700700
export function updates(
701-
self: Template
701+
self: Template,
702+
fragment: DocumentFragment
702703
): Effect<
703704
never,
704705
Template.InvalidElementException | Template.MissingNodeException,
@@ -721,5 +722,5 @@ export function updates(
721722
> {
722723
concreteTemplate(self)
723724
// relate an update handler per each node that needs one
724-
return Chunk.from(self.nodes).mapEffect(handlers(self.toDocumentFragment))
725+
return Chunk.from(self.nodes).mapEffect(handlers(fragment))
725726
}

packages/html/_src/data/Wire/operations/valueOf.ts

-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ export function valueOf(
99
concreteWire(self)
1010

1111
return self.fragment.updateSomeAndGetEffect((fragment) => {
12-
console.log(fragment.childNodes.length, self.nodes.length, self.nodes)
1312
if (fragment.childNodes.length !== self.nodes.length) {
1413
return Maybe.some(Effect.succeed(() => fragment.append(...self.nodes)).as(fragment))
1514
}

packages/html/_src/render.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,9 @@ export function render<A extends Element, R, E, B extends (Hole | HTMLOrSVGEleme
8585
// (wires are basically persistent fragments facades with special behavior)
8686
return (Wire.isWire(wire.value) ?
8787
wire.value.valueOf :
88-
Effect.succeed(wire.value.valueOf() as Node)).flatMap((node) => {
89-
console.log(where, node)
90-
return Effect.succeed(() => where.replaceChildren(node))
91-
}).as(where)
88+
Effect.succeed(wire.value.valueOf() as Node)).flatMap((node) =>
89+
Effect.succeed(() => where.replaceChildren(node))
90+
).as(where)
9291
}
9392
return Effect.succeed(where)
9493
}

packages/html/_test/global.d.ts

-4
This file was deleted.

packages/html/package.json

+3-7
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
},
1010
"scripts": {
1111
"clean": "yarn org:rimraf build tsbuildinfo dist",
12-
"build-cjs": "yarn org:babel build/esm --config-file ./.babel.cjs.json --out-dir build/cjs --out-file-extension .js --source-maps",
13-
"build-mjs": "yarn org:babel build/esm --config-file ./.babel.mjs.json --out-dir build/mjs --out-file-extension .mjs --source-maps",
12+
"build-cjs": "yarn org:babel build/esm --config-file ./.babel.cjs.json --out-dir build/cjs --out-file-extension .js --source-maps inline",
13+
"build-mjs": "yarn org:babel build/esm --config-file ./.babel.mjs.json --out-dir build/mjs --out-file-extension .mjs --source-maps inline",
1414
"build-post": "yarn org:build-utils pack-v3",
1515
"build-pack": "yarn org:tsc -b tsconfig.json && yarn org:concurrently \"yarn build-cjs\" \"yarn build-mjs\" && yarn build-post",
1616
"lint": "yarn org:eslint . --ext .ts,.tsx",
@@ -43,11 +43,7 @@
4343
"@tsplus/stdlib": "0.1.8"
4444
},
4545
"devDependencies": {
46-
"@types/node": "18.0.0",
47-
"@types/webpack": "5.28.0",
48-
"ts-loader": "9.3.0",
49-
"webpack": "5.73.0",
50-
"webpack-cli": "4.10.0"
46+
"@types/node": "18.0.0"
5147
},
5248
"tsplus": {
5349
"typeDir": "./build/dts"

packages/html/webpack.config.cjs webpack.config.cjs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module.exports = {
44
experiments: {
55
outputModule: true
66
},
7-
entry: path.resolve(__dirname, "./_src/render.ts"),
7+
entry: path.resolve(__dirname, "./packages/html/_src/render.ts"),
88
module: {
99
rules: [
1010
{
@@ -31,7 +31,7 @@ module.exports = {
3131
},
3232
devtool: "inline-source-map",
3333
output: {
34-
path: path.resolve(__dirname, "./build/web"),
34+
path: path.resolve(__dirname, "./packages/html/build/web"),
3535
filename: "index.js",
3636
library: {
3737
type: "module"

yarn.lock

+4-4
Original file line numberDiff line numberDiff line change
@@ -638,10 +638,6 @@ __metadata:
638638
"@effect/core": 0.0.5
639639
"@tsplus/stdlib": 0.1.8
640640
"@types/node": 18.0.0
641-
"@types/webpack": 5.28.0
642-
ts-loader: 9.3.0
643-
webpack: 5.73.0
644-
webpack-cli: 4.10.0
645641
languageName: unknown
646642
linkType: soft
647643

@@ -2893,6 +2889,7 @@ __metadata:
28932889
"@tsplus/stdlib": 0.1.8
28942890
"@types/node": ^18.0.0
28952891
"@types/rimraf": ^3.0.2
2892+
"@types/webpack": 5.28.0
28962893
"@typescript-eslint/eslint-plugin": ^5.29.0
28972894
"@typescript-eslint/parser": ^5.29.0
28982895
babel-plugin-annotate-pure-calls: ^0.4.0
@@ -2909,10 +2906,13 @@ __metadata:
29092906
madge: ^5.0.1
29102907
picocolors: ^1.0.0
29112908
rimraf: ^3.0.2
2909+
ts-loader: 9.3.0
29122910
typescript: ^4.7.4
29132911
ultra-runner: ^3.10.5
29142912
vite: ^2.9.12
29152913
vitest: 0.15.2
2914+
webpack: 5.73.0
2915+
webpack-cli: 4.10.0
29162916
languageName: unknown
29172917
linkType: soft
29182918

0 commit comments

Comments
 (0)