foldkit 0.146.0 → 0.147.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/customElement/index.d.ts.map +1 -1
- package/dist/customElement/index.js +23 -0
- package/dist/experimental/index.d.ts +1 -0
- package/dist/experimental/index.d.ts.map +1 -1
- package/dist/experimental/index.js +1 -0
- package/dist/experimental/machine/machine.d.ts +22 -3
- package/dist/experimental/machine/machine.d.ts.map +1 -1
- package/dist/experimental/machine/machine.js +8 -0
- package/dist/experimental/server/entry.d.ts +73 -0
- package/dist/experimental/server/entry.d.ts.map +1 -0
- package/dist/experimental/server/entry.js +41 -0
- package/dist/experimental/server/host.d.ts +42 -0
- package/dist/experimental/server/host.d.ts.map +1 -0
- package/dist/experimental/server/host.js +169 -0
- package/dist/experimental/server/index.d.ts +5 -0
- package/dist/experimental/server/index.d.ts.map +1 -0
- package/dist/experimental/server/index.js +4 -0
- package/dist/experimental/server/public.d.ts +3 -0
- package/dist/experimental/server/public.d.ts.map +1 -0
- package/dist/experimental/server/public.js +1 -0
- package/dist/experimental/server/serialize.d.ts +33 -0
- package/dist/experimental/server/serialize.d.ts.map +1 -0
- package/dist/experimental/server/serialize.js +563 -0
- package/dist/experimental/server/server.d.ts +201 -0
- package/dist/experimental/server/server.d.ts.map +1 -0
- package/dist/experimental/server/server.js +423 -0
- package/dist/experimental/server/template.d.ts +45 -0
- package/dist/experimental/server/template.d.ts.map +1 -0
- package/dist/experimental/server/template.js +182 -0
- package/dist/html/index.d.ts +5 -0
- package/dist/html/index.d.ts.map +1 -1
- package/dist/html/index.js +38 -4
- package/dist/hydrate.d.ts +4 -0
- package/dist/hydrate.d.ts.map +1 -0
- package/dist/hydrate.js +522 -0
- package/dist/hydrationMarker.d.ts +10 -0
- package/dist/hydrationMarker.d.ts.map +1 -0
- package/dist/hydrationMarker.js +9 -0
- package/dist/runtime/public.d.ts +2 -2
- package/dist/runtime/public.d.ts.map +1 -1
- package/dist/runtime/public.js +1 -1
- package/dist/runtime/runtime.d.ts +75 -36
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +209 -71
- package/dist/snabbdom/h.d.ts +1 -0
- package/dist/snabbdom/h.d.ts.map +1 -1
- package/dist/snabbdom/h.js +85 -4
- package/dist/snabbdom/tovnode.d.ts.map +1 -1
- package/dist/snabbdom/tovnode.js +5 -1
- package/dist/tagName.d.ts +6 -0
- package/dist/tagName.d.ts.map +1 -0
- package/dist/tagName.js +11 -0
- package/dist/vdom.d.ts.map +1 -1
- package/dist/vdom.js +25 -1
- package/package.json +8 -1
package/dist/tagName.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Extracts the tag name from a snabbdom selector, dropping any `#id` or
|
|
2
|
+
* `.class` suffix. Foldkit builds bare-tag selectors, so in practice this
|
|
3
|
+
* returns the selector unchanged, but the id/class handling keeps it correct
|
|
4
|
+
* for any selector snabbdom itself would accept. */
|
|
5
|
+
export const tagNameFromSelector = (selector) => {
|
|
6
|
+
const hashIndex = selector.indexOf('#');
|
|
7
|
+
const dotIndex = selector.indexOf('.');
|
|
8
|
+
const hashEnd = hashIndex > 0 ? hashIndex : selector.length;
|
|
9
|
+
const dotEnd = dotIndex > 0 ? dotIndex : selector.length;
|
|
10
|
+
return selector.slice(0, Math.min(hashEnd, dotEnd));
|
|
11
|
+
};
|
package/dist/vdom.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vdom.d.ts","sourceRoot":"","sources":["../src/vdom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAa,MAAM,QAAQ,CAAA;AAG1C,OAAO,EACL,KAAK,KAAK,EAQV,OAAO,EACR,MAAM,qBAAqB,CAAA;AAE5B,YAAY,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"vdom.d.ts","sourceRoot":"","sources":["../src/vdom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAa,MAAM,QAAQ,CAAA;AAG1C,OAAO,EACL,KAAK,KAAK,EAQV,OAAO,EACR,MAAM,qBAAqB,CAAA;AAE5B,YAAY,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,CAAA;AASlB,eAAO,MAAM,KAAK,uEAOhB,CAAA;AAsBF,eAAO,MAAM,cAAc,gBAAuB,CAAA;AA2ClD;;;;mBAImB;AACnB,eAAO,MAAM,kBAAkB,GAC7B,MAAM,KAAK,EACX,OAAM,GAAG,CAAC,MAAM,CAAa,KAC5B,KAA0B,CAAA;AAE7B;;;;;mBAKmB;AACnB,eAAO,MAAM,oBAAoB,GAC/B,MAAM,KAAK,EACX,OAAM,GAAG,CAAC,MAAM,CAAa,KAC5B,KAMF,CAAA;AAoBD,eAAO,MAAM,YAAY,GACvB,mBAAmB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EACvC,WAAW,KAAK,GAAG,IAAI,EACvB,WAAW,WAAW,EACtB,OAAO,GAAG,CAAC,MAAM,CAAC,KACjB,KASF,CAAA"}
|
package/dist/vdom.js
CHANGED
|
@@ -2,6 +2,13 @@ import { Option, Predicate } from 'effect';
|
|
|
2
2
|
import { propsModule } from './propsModule.js';
|
|
3
3
|
import { attributesModule, classModule, datasetModule, eventListenersModule, h, init, styleModule, toVNode, } from './snabbdom/index.js';
|
|
4
4
|
export { toVNode };
|
|
5
|
+
// NOTE: module order is load-bearing for hydration. `attributesModule` must run
|
|
6
|
+
// before `propsModule`. When a controlled input is adopted, the seeded server
|
|
7
|
+
// `value` attribute is removed by the attrs module first, which resets
|
|
8
|
+
// `elm.value`; only then does the props module reassert the model value, its
|
|
9
|
+
// `elm[key] !== cur` guard now seeing a cleared value. In the reverse order the
|
|
10
|
+
// props write is skipped as a no-op and the later attribute removal blanks the
|
|
11
|
+
// input. The controlled-input hydration tests fail if this order is changed.
|
|
5
12
|
export const patch = init([
|
|
6
13
|
attributesModule,
|
|
7
14
|
classModule,
|
|
@@ -85,12 +92,29 @@ export const dedupeMemoizedResult = (root, seen = new Set()) => {
|
|
|
85
92
|
const nextChildren = dedupeChildList(root.children, seen);
|
|
86
93
|
return nextChildren === undefined ? root : { ...root, children: nextChildren };
|
|
87
94
|
};
|
|
95
|
+
// NOTE: a fresh boot builds the whole tree so snabbdom fires every insert hook,
|
|
96
|
+
// which is what runs Mounts. Patching `toVNode(container)` directly would let
|
|
97
|
+
// snabbdom reuse a container whose existing DOM happens to match the new tree (a
|
|
98
|
+
// fresh `run` over server-rendered DOM, or an HMR restore), leaving those hooks
|
|
99
|
+
// unfired and Mounts unattached. Patching against a comment placed where the
|
|
100
|
+
// container was is never `sameVnode` with an element, so `createElm` builds the
|
|
101
|
+
// tree fresh and replaces the container, exactly as a boot into an empty
|
|
102
|
+
// container does.
|
|
103
|
+
const patchFreshInto = (container, nextVNode) => {
|
|
104
|
+
const parent = container.parentNode;
|
|
105
|
+
if (parent === null) {
|
|
106
|
+
return patch(toVNode(container), nextVNode);
|
|
107
|
+
}
|
|
108
|
+
const placeholder = container.ownerDocument.createComment('');
|
|
109
|
+
parent.replaceChild(placeholder, container);
|
|
110
|
+
return patch(toVNode(placeholder), nextVNode);
|
|
111
|
+
};
|
|
88
112
|
export const __patchVNode = (maybeCurrentVNode, nextVNode, container, seen) => {
|
|
89
113
|
const dedupedVNode = Predicate.isNotNull(nextVNode)
|
|
90
114
|
? dedupeSharedVNodes(nextVNode, seen)
|
|
91
115
|
: h('!');
|
|
92
116
|
return Option.match(maybeCurrentVNode, {
|
|
93
|
-
onNone: () =>
|
|
117
|
+
onNone: () => patchFreshInto(container, dedupedVNode),
|
|
94
118
|
onSome: currentVNode => patch(currentVNode, dedupedVNode),
|
|
95
119
|
});
|
|
96
120
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "foldkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.147.0",
|
|
4
4
|
"description": "A TypeScript frontend framework, built on Effect and architected like Elm",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -47,6 +47,10 @@
|
|
|
47
47
|
"types": "./dist/experimental/machine/public.d.ts",
|
|
48
48
|
"import": "./dist/experimental/machine/public.js"
|
|
49
49
|
},
|
|
50
|
+
"./experimental/server": {
|
|
51
|
+
"types": "./dist/experimental/server/public.d.ts",
|
|
52
|
+
"import": "./dist/experimental/server/public.js"
|
|
53
|
+
},
|
|
50
54
|
"./html": {
|
|
51
55
|
"types": "./dist/html/public.d.ts",
|
|
52
56
|
"import": "./dist/html/public.js"
|
|
@@ -153,6 +157,9 @@
|
|
|
153
157
|
"dist",
|
|
154
158
|
"THIRD-PARTY-NOTICES.md"
|
|
155
159
|
],
|
|
160
|
+
"dependencies": {
|
|
161
|
+
"parse5": "^8.0.1"
|
|
162
|
+
},
|
|
156
163
|
"peerDependencies": {
|
|
157
164
|
"effect": "4.0.0-rc.109"
|
|
158
165
|
},
|