@barefootjs/client 0.26.3 → 0.27.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/dist/reactive.d.ts.map +1 -1
- package/dist/runtime/claim-slots.d.ts +157 -0
- package/dist/runtime/claim-slots.d.ts.map +1 -0
- package/dist/runtime/component.d.ts +29 -17
- package/dist/runtime/component.d.ts.map +1 -1
- package/dist/runtime/dynamic-text.d.ts +24 -1
- package/dist/runtime/dynamic-text.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +4 -4
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +206 -206
- package/dist/runtime/loop-markers.d.ts +26 -0
- package/dist/runtime/loop-markers.d.ts.map +1 -0
- package/dist/runtime/patch-leaf.d.ts +17 -0
- package/dist/runtime/patch-leaf.d.ts.map +1 -0
- package/dist/runtime/standalone.js +206 -206
- package/package.json +2 -2
- package/src/reactive.ts +2 -1
- package/src/runtime/claim-slots.ts +449 -0
- package/src/runtime/component.ts +39 -69
- package/src/runtime/dynamic-text.ts +24 -1
- package/src/runtime/index.ts +17 -6
- package/src/runtime/insert.ts +1 -1
- package/src/runtime/loop-markers.ts +100 -0
- package/src/runtime/patch-leaf.ts +41 -0
- package/dist/runtime/client-marker.d.ts +0 -21
- package/dist/runtime/client-marker.d.ts.map +0 -1
- package/dist/runtime/list.d.ts +0 -21
- package/dist/runtime/list.d.ts.map +0 -1
- package/dist/runtime/reconcile-elements.d.ts +0 -44
- package/dist/runtime/reconcile-elements.d.ts.map +0 -1
- package/src/runtime/client-marker.ts +0 -46
- package/src/runtime/list.ts +0 -47
- package/src/runtime/reconcile-elements.ts +0 -391
package/dist/reactive.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;GAIG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAA;AAE3D,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI;IACtB,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,uDAAuD;IACvD,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI;CAC1C,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,CAAA;AAClC,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,GAAG,SAAS,CAAA;AAC7C,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;AAavC,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;AAEvD;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,sFAAsF;IACtF,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACnD,mEAAmE;IACnE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1D,gFAAgF;IAChF,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7D,iDAAiD;IACjD,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAAA;IAC9D,2CAA2C;IAC3C,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,+DAA+D;IAC/D,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1D;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC3D,kDAAkD;IAClD,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,oEAAoE;IACpE,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,2CAA2C;IAC3C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChD,iDAAiD;IACjD,OAAO,IAAI,IAAI,CAAA;CAChB;AAiBD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAE/D;AAED,iEAAiE;AACjE,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIvD;AA8DD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAmF3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,cAAyB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claim-plan interpreter and claimed-slot primitives (slot unification
|
|
3
|
+
* Steps A2/A3, `spec/slot-unification.md` §4/§5).
|
|
4
|
+
*
|
|
5
|
+
* This module is the ONE claim mechanism the spec's §4 target architecture
|
|
6
|
+
* describes: a compile-time `ClaimPlan` (per-slot child-index paths from a
|
|
7
|
+
* claim root down to the slot's anchor comment) is resolved ONCE — either
|
|
8
|
+
* eagerly (`claimSlots`) or lazily on first write (`lazySlots`) — and every
|
|
9
|
+
* later write goes through the held reference, never re-scanning the DOM.
|
|
10
|
+
* As of A3 the compiler emits claim plans for every content slot; the
|
|
11
|
+
* `patchSlotRange` and `updateClientMarker` mechanisms it superseded are
|
|
12
|
+
* deleted. `$t`/text-effect writes and `__bfText` are ALSO superseded for
|
|
13
|
+
* every emission site but one — see `dynamic-text.ts`'s docstring for the
|
|
14
|
+
* one deliberately-deferred case (`emitDynamicTextUpdates`'s
|
|
15
|
+
* `conditionalElems` path).
|
|
16
|
+
*
|
|
17
|
+
* Anchors are still the existing `<!--bf:sN-->…<!--/-->` marker pairs — SSR
|
|
18
|
+
* bytes are unchanged in Step A (§5, §6) so the new client claims against
|
|
19
|
+
* known-good SSR output. A path is only required to be valid AT THE MOMENT
|
|
20
|
+
* OF CLAIM (§2): once a 'text' Text node or a 'markup' boundary pair is
|
|
21
|
+
* held, subsequent writes never consult the path or the marker again, so a
|
|
22
|
+
* sibling slot's later variable-length change cannot invalidate anything
|
|
23
|
+
* already claimed.
|
|
24
|
+
*
|
|
25
|
+
* Kind contracts (mirroring the mechanisms being superseded — this is the
|
|
26
|
+
* "one slot concept with an identity contract" of §4):
|
|
27
|
+
* - 'text': held ref is the Text node immediately after the anchor
|
|
28
|
+
* comment, CREATED if SSR emitted an empty value (`textNodeAfterComment`,
|
|
29
|
+
* exactly `$t`'s `tAfter` behavior). Writes are a `nodeValue` assignment
|
|
30
|
+
* — the Text node's identity never changes, which is the guarantee
|
|
31
|
+
* effect closures and `mapArray`'s same-key path rely on.
|
|
32
|
+
* - 'markup': held ref is BOTH boundary comments (start = anchor, end =
|
|
33
|
+
* the matching `<!--/-->` found by a nesting-depth walk (any further
|
|
34
|
+
* `bf:`-prefixed comment along the way opens a nested region). A string
|
|
35
|
+
* write clears everything strictly between the boundaries and inserts
|
|
36
|
+
* freshly `<template>`-parsed HTML before the end comment; a `Node`
|
|
37
|
+
* write clears the range and splices the node in by identity (the
|
|
38
|
+
* `__bfText` live-Node case). The boundaries themselves are never
|
|
39
|
+
* removed, so the range stays writeable on every later write. Because
|
|
40
|
+
* the end ref is already held, a write never needs to re-walk for
|
|
41
|
+
* nesting depth — only the CLAIM does.
|
|
42
|
+
*
|
|
43
|
+
* Warn-don't-guess (§4, "one ownership rule"): a path that fails to resolve
|
|
44
|
+
* to its slot's own `bf:sN` comment — out of range, or shape drift where
|
|
45
|
+
* the path now lands on some other node — falls back to a marker scan
|
|
46
|
+
* within the claim root, using the same ownership rule as `query.ts`'s `$t`:
|
|
47
|
+
* a `bf:sN` comment owned by a nested `bf-s` scope (a child component's own
|
|
48
|
+
* same-numbered slot — ids are
|
|
49
|
+
* assigned per component, so collisions are expected) is never a candidate
|
|
50
|
+
* — UNLESS the id is `^`-prefixed (`BF_PARENT_OWNED_PREFIX`), meaning the
|
|
51
|
+
* marker is content the claiming component itself authored and merely
|
|
52
|
+
* forwarded through one or more descendants' `children` (see
|
|
53
|
+
* `findOwnedMarker`'s docstring); for those the ownership walk is skipped
|
|
54
|
+
* outright, matching `query.ts`'s `$()`. If neither the path nor the
|
|
55
|
+
* fallback scan finds an owned marker, that one slot is dropped with a
|
|
56
|
+
* `console.warn` and the rest of the plan still claims — never guess a
|
|
57
|
+
* boundary, and never let one bad slot sink its siblings. An EMPTY path
|
|
58
|
+
* (`[]`) skips straight to the scan without that first warning — the
|
|
59
|
+
* compiler emits `path: []` deliberately when a slot's position can't be
|
|
60
|
+
* statically pathed (slot unification A3), so a miss there is expected, not
|
|
61
|
+
* drift; only a non-empty path that fails to resolve signals a real shape
|
|
62
|
+
* mismatch worth warning about.
|
|
63
|
+
*
|
|
64
|
+
* Row-pristine lazy claim (§3(a)): `lazySlots` touches NOTHING until the
|
|
65
|
+
* first write, and that first write claims the WHOLE plan at once (not just
|
|
66
|
+
* the slot being written) — so no earlier write into one slot can shift a
|
|
67
|
+
* sibling slot's still-unclaimed path out from under it. A row that never
|
|
68
|
+
* updates never pays for a claim at all. `claimSlots` is the eager escape
|
|
69
|
+
* hatch for callers that cannot honor that invariant (streaming/portal
|
|
70
|
+
* paths that mutate row content before any write would occur, per §6's
|
|
71
|
+
* risk note) — it claims every slot in the plan immediately.
|
|
72
|
+
*
|
|
73
|
+
* Dedup, no trust-first-run (slot unification A3 follow-up): a 'markup'
|
|
74
|
+
* slot's write door holds a `last` value alongside its boundary refs. Every
|
|
75
|
+
* write — INCLUDING THE FIRST — clears-and-inserts unless the new string
|
|
76
|
+
* equals `last`, in which case the DOM touch is skipped. `last` starts
|
|
77
|
+
* `undefined`, which never equals a `String(...)`-coerced value, so the
|
|
78
|
+
* first write can never dedup away; it always patches. A `Node` write is
|
|
79
|
+
* deduped by identity (mirrors `__bfText`'s `value === current` check) and,
|
|
80
|
+
* like the string case, is never skipped on the first write — a freshly
|
|
81
|
+
* `createComponent`-built element is a distinct object from whatever the
|
|
82
|
+
* SSR markup rendered, so it always splices. 'text' writes stay a plain
|
|
83
|
+
* `nodeValue` assignment (already idempotent, per §5's design note) — no
|
|
84
|
+
* dedup state needed.
|
|
85
|
+
*
|
|
86
|
+
* The first write is never skipped on the assumption that the claimed
|
|
87
|
+
* range already matches SSR/CSR content ("trust-first-run") — that
|
|
88
|
+
* assumption only holds for a preamble-region row whose SSR content and
|
|
89
|
+
* the effect's mount-time recomputation are both derived from the exact
|
|
90
|
+
* same source data, so they cannot disagree. It is false in general: any
|
|
91
|
+
* markup slot whose value comes from client-only state that the server
|
|
92
|
+
* cannot see — `createSignal(readFromLocalStorage())`, a client-side region
|
|
93
|
+
* swap adopting HTML the server rendered from a different default — can
|
|
94
|
+
* genuinely differ from the SSR/CSR content on the very first write, and
|
|
95
|
+
* skipping that first write would silently leave the stale SSR default on
|
|
96
|
+
* screen until the NEXT change (regression pin: site/ui's
|
|
97
|
+
* `admin-gallery.spec.ts` cross-page time-range persistence test). So every
|
|
98
|
+
* write unconditionally applies unless deduped by value/identity — never
|
|
99
|
+
* because it happens to be the first one — for every 'markup' caller,
|
|
100
|
+
* including the preamble-region case (which only loses a same-value
|
|
101
|
+
* redundant-patch skip on mount, not correctness).
|
|
102
|
+
*/
|
|
103
|
+
/**
|
|
104
|
+
* A slot's compile-time descriptor. `path` is the list of child indices
|
|
105
|
+
* from the claim root to the slot's ANCHOR NODE — in Step A that anchor is
|
|
106
|
+
* always the existing `<!--bf:sN-->` start comment (markers are still
|
|
107
|
+
* emitted; Step B may point paths at other node kinds), so resolution
|
|
108
|
+
* walks `childNodes` by index with no assumption about the target's
|
|
109
|
+
* `nodeType` until the kind-specific claim inspects it. `id` is kept for
|
|
110
|
+
* diagnostics and as the marker-scan fallback's search key.
|
|
111
|
+
*/
|
|
112
|
+
export interface SlotSpec {
|
|
113
|
+
id: string;
|
|
114
|
+
kind: 'text' | 'markup';
|
|
115
|
+
path: readonly number[];
|
|
116
|
+
/**
|
|
117
|
+
* Slot unification Step B (`spec/slot-unification.md` §3(b), §5 Step B):
|
|
118
|
+
* true when NO `<!--bf:id-->…<!--/-->` marker was emitted for this slot at
|
|
119
|
+
* all — `path` is then a path to the slot's POSITION itself (the LAST
|
|
120
|
+
* index is this slot's own index within its parent's `childNodes`, not an
|
|
121
|
+
* anchor comment to search from). Only ever set for `kind: 'text'` — a
|
|
122
|
+
* `'markup'` slot always keeps its markers (an empty-able range needs a
|
|
123
|
+
* physical anchor to splice into; see `spec/slot-unification.md` §3(b)
|
|
124
|
+
* case (ii)). Resolution CREATES a Text node at that position if SSR
|
|
125
|
+
* rendered the slot empty (nothing to adopt there yet) — see `claimOne`.
|
|
126
|
+
* The compiler emits this only when it has already proven the position
|
|
127
|
+
* safe (`client-only-elision.ts`); the runtime never re-derives it.
|
|
128
|
+
*/
|
|
129
|
+
markerless?: boolean;
|
|
130
|
+
}
|
|
131
|
+
export type ClaimPlan = readonly SlotSpec[];
|
|
132
|
+
/**
|
|
133
|
+
* The result of claiming a plan: a write door keyed by slot id. Writing an
|
|
134
|
+
* id that failed to claim (or was never in the plan) warns and no-ops —
|
|
135
|
+
* one bad/missing slot never breaks any other slot's writes.
|
|
136
|
+
*/
|
|
137
|
+
export interface ClaimedSlots {
|
|
138
|
+
write(id: string, value: unknown): void;
|
|
139
|
+
}
|
|
140
|
+
/** `lazySlots`'s per-write function — the same shape `ClaimedSlots.write` has. */
|
|
141
|
+
export type SlotWriter = (id: string, value: unknown) => void;
|
|
142
|
+
/**
|
|
143
|
+
* Claim every slot in `plan` against `root` NOW. Escape hatch for callers
|
|
144
|
+
* that cannot honor the row-pristine invariant `lazySlots` relies on
|
|
145
|
+
* (streaming/portal paths that may mutate row content before any write
|
|
146
|
+
* would naturally occur, per §6) — claim eagerly there instead.
|
|
147
|
+
*/
|
|
148
|
+
export declare function claimSlots(root: Element, plan: ClaimPlan): ClaimedSlots;
|
|
149
|
+
/**
|
|
150
|
+
* Lazy wrapper honoring the row-pristine invariant (§3(a)): nothing touches
|
|
151
|
+
* `root`'s DOM until the first write, and that first write claims the
|
|
152
|
+
* WHOLE plan at once — so no earlier write into a sibling slot can shift
|
|
153
|
+
* this row's still-unclaimed paths first. A row that never updates never
|
|
154
|
+
* pays for a claim at all.
|
|
155
|
+
*/
|
|
156
|
+
export declare function lazySlots(root: Element, plan: ClaimPlan): SlotWriter;
|
|
157
|
+
//# sourceMappingURL=claim-slots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-slots.d.ts","sourceRoot":"","sources":["../../src/runtime/claim-slots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqGG;AAMH;;;;;;;;GAQG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;IACvB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IACvB;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,QAAQ,EAAE,CAAA;AAwB3C;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;CACxC;AAED,kFAAkF;AAClF,MAAM,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;AA0P7D;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,YAAY,CAOvE;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,UAAU,CAMpE"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* BarefootJS - Component Creation
|
|
3
3
|
*
|
|
4
4
|
* Functions for dynamically creating component instances at runtime.
|
|
5
|
-
* Used by
|
|
5
|
+
* Used by mapArray()/mapArrayAnchored() when rendering components in loops.
|
|
6
6
|
*/
|
|
7
7
|
import type { ComponentDef } from './types.ts';
|
|
8
8
|
export declare function setParentScopeId(id: string | null): void;
|
|
@@ -44,16 +44,6 @@ export interface CreateComponentSlotInfo {
|
|
|
44
44
|
mount: string;
|
|
45
45
|
}
|
|
46
46
|
export declare function createComponent(nameOrDef: string | ComponentDef, props?: Record<string, unknown>, key?: string | number, slot?: CreateComponentSlotInfo): HTMLElement;
|
|
47
|
-
/**
|
|
48
|
-
* Get the props stored for a component element.
|
|
49
|
-
* Used by reconcileList to pass props to an existing element.
|
|
50
|
-
*/
|
|
51
|
-
export declare function getComponentProps(element: HTMLElement): Record<string, unknown> | undefined;
|
|
52
|
-
/**
|
|
53
|
-
* Get the props update function for an element.
|
|
54
|
-
* Used by reconcileList to update props when reusing an element.
|
|
55
|
-
*/
|
|
56
|
-
export declare function getPropsUpdateFn(element: HTMLElement): ((props: Record<string, unknown>) => void) | undefined;
|
|
57
47
|
/**
|
|
58
48
|
* Render a child component's template to an HTML string.
|
|
59
49
|
* Used by compiler-generated template functions when a stateless component
|
|
@@ -105,14 +95,36 @@ export declare function escapeAttr(value: unknown): string;
|
|
|
105
95
|
*
|
|
106
96
|
* A nullish value renders as empty text — the JSX/Solid semantics the Hono
|
|
107
97
|
* SSR reference follows (`{undefined}` / `{null}` produce no text), and
|
|
108
|
-
* what the reactive text-update path already does (`
|
|
109
|
-
* `
|
|
110
|
-
* escape site used to stringify `undefined` /
|
|
111
|
-
* "undefined" / "null" text, so a bare `{props.x}` on
|
|
112
|
-
* diverged from SSR at first paint (#2137). Non-nullish
|
|
113
|
-
* `0` and `false`) keep their `String()` form, matching
|
|
98
|
+
* what the reactive text-update path already does (`claim-slots.ts`'s
|
|
99
|
+
* `writeText`/`writeMarkup` and `dynamic-text.ts` all `String(value ?? '')`).
|
|
100
|
+
* Only this initial-render escape site used to stringify `undefined` /
|
|
101
|
+
* `null` into literal "undefined" / "null" text, so a bare `{props.x}` on
|
|
102
|
+
* an absent prop diverged from SSR at first paint (#2137). Non-nullish
|
|
103
|
+
* values (including `0` and `false`) keep their `String()` form, matching
|
|
104
|
+
* the reactive path.
|
|
114
105
|
*/
|
|
115
106
|
export declare function escapeText(value: unknown): string;
|
|
107
|
+
/**
|
|
108
|
+
* `escapeText`'s counterpart for a claimed 'markup' slot's REACTIVE write
|
|
109
|
+
* (slot unification A3 follow-up), where the value is a plain-JS expression
|
|
110
|
+
* that may resolve to either a string or a live `Node` (e.g. `{cond &&
|
|
111
|
+
* logo(id)}`, a hoisted `renderNode` callback, #1213). `writeMarkup`
|
|
112
|
+
* (`claim-slots.ts`) inserts a string via `<template>.innerHTML =`, which —
|
|
113
|
+
* unlike the old `__bfText`'s plain `Text.nodeValue =` assignment — DOES
|
|
114
|
+
* interpret HTML, so a raw un-escaped string is an injection/corruption
|
|
115
|
+
* risk exactly where the initial SSR/CSR TEMPLATE already calls
|
|
116
|
+
* `escapeText` on the same expression (`html-template.ts`'s
|
|
117
|
+
* `escapeTextSlotExpr`). A live `Node`, by contrast, must pass through
|
|
118
|
+
* untouched — `escapeText(node)` would stringify it to garbage, and
|
|
119
|
+
* `writeMarkup`'s own `instanceof Node` check needs the real object to
|
|
120
|
+
* splice in by identity. This is the single call every "dynamic JSX/text
|
|
121
|
+
* slot, value may be a Node" emission site (`emit-reactive.ts`,
|
|
122
|
+
* `stringify/loop-child-arm.ts`, `stringify/insert.ts`) wraps the value in
|
|
123
|
+
* before handing it to a 'markup' writer — NOT the preamble-region case
|
|
124
|
+
* (`stringify/loop.ts`), whose value is already-built HTML from a nested
|
|
125
|
+
* compiled render and must stay unescaped.
|
|
126
|
+
*/
|
|
127
|
+
export declare function escapeTextOrNode(value: unknown): string | Node;
|
|
116
128
|
/**
|
|
117
129
|
* Parse an HTML string into a DocumentFragment, safely escaping ">" in
|
|
118
130
|
* attribute values. All code that sets innerHTML on dynamic HTML should
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/runtime/component.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAS9C,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAExD;
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/runtime/component.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAS9C,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAExD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;;;GAGG;AACH;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAA;IACd,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,GAAG,YAAY,EAChC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACnC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EACrB,IAAI,CAAC,EAAE,uBAAuB,GAC7B,WAAW,CA0Kb;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAiDR;AA+DD;;;;;GAKG;AACH;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOjD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGjD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG9D;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,gBAAgB,CAcjF"}
|
|
@@ -1,7 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Dynamic text/JSX slot updater (#1663).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Slot unification A3 (`spec/slot-unification.md` §5-A3) replaced every
|
|
5
|
+
* OTHER `__bfText` call site with a claimed 'markup' slot writer
|
|
6
|
+
* (`claim-slots.ts`'s `writeMarkup` provides the identical Node/text
|
|
7
|
+
* contract). ONE emission site still calls `__bfText` directly and is
|
|
8
|
+
* deliberately deferred: `emitDynamicTextUpdates`'s `conditionalElems`
|
|
9
|
+
* path (`ir-to-client-js/emit-reactive.ts`) — a dynamic text/JSX
|
|
10
|
+
* expression nested inside a top-level (non-loop) conditional, tracked by
|
|
11
|
+
* an effect OUTSIDE the conditional's own `insert()` `bindEvents`. That
|
|
12
|
+
* effect re-resolves its anchor via `$t(__scope, slotId)` on EVERY run
|
|
13
|
+
* because `insert()` may swap the branch independently of this effect's own
|
|
14
|
+
* reruns — a cached `lazySlots` claim would go stale across such a swap, and
|
|
15
|
+
* a 'markup' slot's dedup `last` state can't safely survive being re-claimed
|
|
16
|
+
* fresh every run either: a fresh claim's `last` always starts `undefined`,
|
|
17
|
+
* so re-claiming per-run would throw away the dedup skip on every single
|
|
18
|
+
* run (every write would re-clear-and-reparse even when the value hasn't
|
|
19
|
+
* changed) — unlike the 'text'-kind conditional cases elsewhere in the
|
|
20
|
+
* compiler, which have no such state to go stale and so DO re-claim fresh
|
|
21
|
+
* each run safely. Moving this one case onto the claim-plan model needs the
|
|
22
|
+
* slot's claim door tied to the branch's OWN activation lifecycle instead of
|
|
23
|
+
* this separate effect's — real architectural work, not a mechanical swap —
|
|
24
|
+
* so it stays on `$t`/`__bfText` for now.
|
|
25
|
+
*
|
|
26
|
+
* The mechanism itself, for the reader who lands here from that one site:
|
|
27
|
+
* the compiler wraps reactive child expressions (`<div>{expr}</div>`) in a
|
|
5
28
|
* `createEffect` that writes the value into the text node sitting between
|
|
6
29
|
* the slot's `<!--bf:sX-->` / `<!--/-->` comment markers. That was a pure
|
|
7
30
|
* `nodeValue = String(value)` assignment, which is correct for primitives
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-text.d.ts","sourceRoot":"","sources":["../../src/runtime/dynamic-text.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"dynamic-text.d.ts","sourceRoot":"","sources":["../../src/runtime/dynamic-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAsCH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAoD1E"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -8,12 +8,13 @@ export { queryHref, type QueryParams, type QueryParamValue } from '../query-href
|
|
|
8
8
|
export { formatDate } from '../format-date.ts';
|
|
9
9
|
export { createContext, useContext, provideContext, setCurrentScope, type Context, } from './context.ts';
|
|
10
10
|
export { createPortal, isSSRPortal, findSiblingSlot, cleanupPortalPlaceholder, type Portal, type PortalOptions, type Renderable, type PortalChildren, } from './portal.ts';
|
|
11
|
-
export {
|
|
12
|
-
export { reconcileElements, getLoopChildren, getLoopNodes } from './reconcile-elements.ts';
|
|
11
|
+
export { getLoopChildren, getLoopNodes } from './loop-markers.ts';
|
|
13
12
|
export { qsaItem, upsertChildItem } from './qsa-item.ts';
|
|
14
13
|
export { mapArray, mapArrayAnchored } from './map-array.ts';
|
|
14
|
+
export { patchLeaf } from './patch-leaf.ts';
|
|
15
|
+
export { claimSlots, lazySlots, type SlotSpec, type ClaimPlan, type ClaimedSlots, type SlotWriter } from './claim-slots.ts';
|
|
15
16
|
export { registerTemplate, getTemplate, hasTemplate, type TemplateFn } from './template.ts';
|
|
16
|
-
export { createComponent, renderChild,
|
|
17
|
+
export { createComponent, renderChild, parseHTML, escapeAttr, escapeText, escapeTextOrNode, } from './component.ts';
|
|
17
18
|
export { applyRestAttrs } from './apply-rest-attrs.ts';
|
|
18
19
|
export { spreadAttrs } from './spread-attrs.ts';
|
|
19
20
|
export { styleToCss } from './style.ts';
|
|
@@ -24,7 +25,6 @@ export { registerComponent, getComponentInit, initChild, upsertChild } from './r
|
|
|
24
25
|
export { insert, type BranchConfig, type BranchTemplateResult } from './insert.ts';
|
|
25
26
|
export { __bfSlot } from './branch-slot.ts';
|
|
26
27
|
export { __bfText } from './dynamic-text.ts';
|
|
27
|
-
export { updateClientMarker } from './client-marker.ts';
|
|
28
28
|
export { hydratedScopes } from './hydration-state.ts';
|
|
29
29
|
export { render } from './render.ts';
|
|
30
30
|
export { __bf_swap, setupStreaming } from './streaming.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACtB,UAAU,EACV,cAAc,EACd,UAAU,EACV,SAAS,EACT,OAAO,EACP,OAAO,EACP,KAAK,EACL,eAAe,EACf,SAAS,EACT,OAAO,EACP,gBAAgB,EAOhB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EACL,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAI9C,OAAO,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,eAAe,EACf,KAAK,OAAO,GACb,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,eAAe,EACf,wBAAwB,EACxB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
|