@barefootjs/go-template 0.18.5 → 0.19.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/adapter/analysis/static-child-loop-bake.d.ts +61 -0
- package/dist/adapter/analysis/static-child-loop-bake.d.ts.map +1 -0
- package/dist/adapter/analysis/static-element-loop-bake.d.ts +83 -0
- package/dist/adapter/analysis/static-element-loop-bake.d.ts.map +1 -0
- package/dist/adapter/emit-context.d.ts +11 -5
- package/dist/adapter/emit-context.d.ts.map +1 -1
- package/dist/adapter/go-template-adapter.d.ts +153 -6
- package/dist/adapter/go-template-adapter.d.ts.map +1 -1
- package/dist/adapter/index.js +514 -53
- package/dist/adapter/lib/compile-state.d.ts +24 -0
- package/dist/adapter/lib/compile-state.d.ts.map +1 -1
- package/dist/adapter/lib/types.d.ts +9 -0
- package/dist/adapter/lib/types.d.ts.map +1 -1
- package/dist/adapter/props/prop-classes.d.ts +28 -9
- package/dist/adapter/props/prop-classes.d.ts.map +1 -1
- package/dist/adapter/props/prop-types.d.ts +45 -0
- package/dist/adapter/props/prop-types.d.ts.map +1 -1
- package/dist/build.js +514 -53
- package/dist/conformance-pins.d.ts.map +1 -1
- package/dist/index.js +516 -62
- package/dist/render-divergences.d.ts.map +1 -1
- package/dist/test-render.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/go-template-adapter.test.ts +876 -21
- package/src/adapter/analysis/static-child-loop-bake.ts +119 -0
- package/src/adapter/analysis/static-element-loop-bake.ts +211 -0
- package/src/adapter/emit-context.ts +14 -5
- package/src/adapter/go-template-adapter.ts +620 -45
- package/src/adapter/lib/compile-state.ts +27 -0
- package/src/adapter/lib/types.ts +9 -0
- package/src/adapter/props/prop-classes.ts +34 -9
- package/src/adapter/props/prop-types.ts +178 -1
- package/src/adapter/value/value-lowering.ts +1 -1
- package/src/conformance-pins.ts +30 -31
- package/src/render-divergences.ts +12 -0
- package/src/test-render.ts +127 -10
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compile-time baking for a static-array `.map()` loop whose body is a
|
|
3
|
+
* single child component with a plain-value (non-JSX) prop set (#2208).
|
|
4
|
+
*
|
|
5
|
+
* `NewXxxProps`'s existing `staticWithoutBody` path (see
|
|
6
|
+
* `go-template-adapter.ts`'s `generateNewPropsFunction`) populates a static
|
|
7
|
+
* loop's child slices from `in.<Name>s` — data the CALLER (handler) must
|
|
8
|
+
* supply. When the loop's array source is itself a fully-static literal
|
|
9
|
+
* (`const items = [{ label: 'Alpha' }, ...]`, #2208), there is no caller
|
|
10
|
+
* input to wait for: every per-item prop value is already known at compile
|
|
11
|
+
* time. `analyzeBakeableStaticChildLoop` resolves that data — the resolved
|
|
12
|
+
* Go literal for each item's input fields, plus its `data-key` — so the
|
|
13
|
+
* constructor can emit `New<Name>Props(<Name>Input{ Field: "value", ... })`
|
|
14
|
+
* directly per item instead of ranging over `in.<Name>s`.
|
|
15
|
+
*
|
|
16
|
+
* Deliberately narrow: only scalar (string/number/boolean) prop values are
|
|
17
|
+
* baked. Anything else (an unresolvable expression, a destructured loop
|
|
18
|
+
* param, a JSX-valued prop) returns `null` so the caller keeps the existing
|
|
19
|
+
* `in.<Name>s`-driven path (or BF101 refusal) unchanged.
|
|
20
|
+
*/
|
|
21
|
+
import { type ConstantInfo, type IRProp, type ParsedExpr } from '@barefootjs/jsx';
|
|
22
|
+
export interface BakedStaticChildItem {
|
|
23
|
+
inputFields: Array<{
|
|
24
|
+
goField: string;
|
|
25
|
+
goValue: string;
|
|
26
|
+
}>;
|
|
27
|
+
dataKey: string | null;
|
|
28
|
+
}
|
|
29
|
+
export interface BakedStaticChildLoop {
|
|
30
|
+
items: BakedStaticChildItem[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Render a compile-time-known JS scalar as a Go template literal (a quoted
|
|
34
|
+
* string / bare number / `true`/`false`), or `null` for anything else
|
|
35
|
+
* (object, array, `null`, `undefined`) — those have no bare-literal Go
|
|
36
|
+
* template form at this layer. Exported for reuse by
|
|
37
|
+
* `static-element-loop-bake.ts` (#2224), which bakes item field values into
|
|
38
|
+
* a plain-element loop body's text/attr positions the same way this module
|
|
39
|
+
* bakes them into a child component's `Input{...}` constructor call.
|
|
40
|
+
*/
|
|
41
|
+
export declare function scalarToGoLiteral(value: unknown): string | null;
|
|
42
|
+
/**
|
|
43
|
+
* Analyze one nested static child-component loop for bakeability. `props`
|
|
44
|
+
* are the child's JSX attrs (`IRLoopChildComponent.props`); `loopArrayParsed`
|
|
45
|
+
* / `loopParam` / `loopKey` come from the same `NestedComponentInfo` the
|
|
46
|
+
* caller already carries. Returns `null` when the shape isn't (yet)
|
|
47
|
+
* bakeable — the caller falls back to its existing behavior unchanged.
|
|
48
|
+
*/
|
|
49
|
+
export declare function analyzeBakeableStaticChildLoop(nested: {
|
|
50
|
+
props: ReadonlyArray<{
|
|
51
|
+
name: string;
|
|
52
|
+
value: IRProp['value'];
|
|
53
|
+
isEventHandler: boolean;
|
|
54
|
+
}>;
|
|
55
|
+
loopArrayParsed?: ParsedExpr;
|
|
56
|
+
loopParam?: string;
|
|
57
|
+
loopKey?: string;
|
|
58
|
+
}, localConstants: ReadonlyArray<ConstantInfo>, opts?: {
|
|
59
|
+
isNameShadowed?: (name: string) => boolean;
|
|
60
|
+
}): BakedStaticChildLoop | null;
|
|
61
|
+
//# sourceMappingURL=static-child-loop-bake.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-child-loop-bake.d.ts","sourceRoot":"","sources":["../../../src/adapter/analysis/static-child-loop-bake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAmE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAIlJ,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAC9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK/D;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE;IACN,KAAK,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IACvF,eAAe,CAAC,EAAE,UAAU,CAAA;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,EACD,cAAc,EAAE,aAAa,CAAC,YAAY,CAAC,EAC3C,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CAAE,GACpD,oBAAoB,GAAG,IAAI,CAgC7B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compile-time UNROLL for a static-array `.map()` loop whose body is a
|
|
3
|
+
* PLAIN ELEMENT TREE (no child component) — go-only follow-up to #2208
|
|
4
|
+
* (#2224 shape 1). `html/template` has no slice/map literal syntax, so
|
|
5
|
+
* unlike the other 7 template adapters (which splice a serialized literal
|
|
6
|
+
* straight into the loop header — #2208), Go can't bind a compile-time-only
|
|
7
|
+
* array as a `{{range}}` source at all. Rather than synthesizing a Go struct
|
|
8
|
+
* type for the item shape (a materially bigger lift — see the #2224 issue
|
|
9
|
+
* body's "suggested fix direction"), this module verifies the loop body is
|
|
10
|
+
* fully foldable against every item and lets the caller
|
|
11
|
+
* (`go-template-adapter.ts`'s `renderLoop`) render the body once PER ITEM
|
|
12
|
+
* with every item-derived value substituted as a compile-time-known Go
|
|
13
|
+
* literal — no `{{range}}`, no struct, no field lookup, so no hidden runtime
|
|
14
|
+
* failure mode either (`html/template` resolves struct fields at EXECUTE
|
|
15
|
+
* time, not Go compile time).
|
|
16
|
+
*
|
|
17
|
+
* ACCEPTANCE CRITERIA — `analyzeBakeableStaticElementLoop` returns `null`
|
|
18
|
+
* (caller keeps today's BF101 refusal) unless ALL of the following hold:
|
|
19
|
+
*
|
|
20
|
+
* - The loop has no child component (that shape is #2208's own baking
|
|
21
|
+
* path — `analyzeBakeableStaticChildLoop`).
|
|
22
|
+
* - Not a `.flatMap()` (`method: 'flatMap'` / `flatMapCallback` set) — an
|
|
23
|
+
* item can fold to 0+ elements there, and a complex callback carries its
|
|
24
|
+
* body out-of-band rather than in `children`; out of scope.
|
|
25
|
+
* - The loop array resolves via `resolveStaticLoopSource` (a fully-static
|
|
26
|
+
* array literal, inline or a named function-scope const;
|
|
27
|
+
* `isNameShadowed`-checked — the SAME resolution #2208 already trusts
|
|
28
|
+
* for the child-component shape).
|
|
29
|
+
* - The callback param is a simple identifier (no array/object destructure
|
|
30
|
+
* pattern).
|
|
31
|
+
* - The callback does NOT bind an index parameter (`.map((item, i) =>
|
|
32
|
+
* ...)`, or `.entries()`/`.keys()`/`Object.entries()`-style pre-map
|
|
33
|
+
* iteration) — deliberately excluded from the evaluator surface even
|
|
34
|
+
* though the index value is technically knowable at unroll time, to
|
|
35
|
+
* keep the per-item binding set identical to #2208's (item-only).
|
|
36
|
+
* - No `.filter()` / `.sort()` chained onto the `.map()` — out of scope.
|
|
37
|
+
* - The body is neither multi-root (`bodyIsMultiRoot`) nor a whole-item
|
|
38
|
+
* conditional (`bodyIsItemConditional`) — those need anchor-marker
|
|
39
|
+
* machinery this pass doesn't attempt to reproduce per item.
|
|
40
|
+
* - Every node anywhere in the body's IR tree is an `element`, `text`, or
|
|
41
|
+
* `expression` — a nested `loop`, `conditional`, `component`, `slot`,
|
|
42
|
+
* `fragment`, `if-statement`, `provider`, or `async` bails the WHOLE
|
|
43
|
+
* loop (no partial unroll; a loud refusal beats silently wrong output).
|
|
44
|
+
* - Every element attribute is `literal` / `boolean-attr` /
|
|
45
|
+
* `boolean-shorthand`, or a plain `expression` whose parsed kind is one
|
|
46
|
+
* of `identifier` / `member` / `index-access` / `literal`. An attribute
|
|
47
|
+
* `template-literal` or `conditional` bypasses the Go adapter's normal
|
|
48
|
+
* `convertExpressionToGo` emission path in its own attribute emitter
|
|
49
|
+
* (it calls `renderParsedExpr` directly and splices the result assuming
|
|
50
|
+
* adapter-specific self-wrapping conventions) — baking those would need
|
|
51
|
+
* separate handling, deferred. `spread` / `jsx-children` attrs bail.
|
|
52
|
+
* - Every dynamic text `expression` node (any parsed kind, INCLUDING
|
|
53
|
+
* `template-literal` — text always funnels through
|
|
54
|
+
* `convertExpressionToGo` uniformly, no bypass) resolves via
|
|
55
|
+
* `evaluateStaticLiteral(expr.parsed, itemBindings)` to a scalar
|
|
56
|
+
* (string/number/boolean) for EVERY item. A signal/memo call, a
|
|
57
|
+
* reference to any non-item-static local (props, outer consts, an
|
|
58
|
+
* enclosing loop's own param), an unresolvable nested method chain, or
|
|
59
|
+
* a non-scalar (array/object) result bails the whole loop.
|
|
60
|
+
*
|
|
61
|
+
* Analysis only (mirrors `static-child-loop-bake.ts`): this module never
|
|
62
|
+
* emits Go syntax. `go-template-adapter.ts`'s `renderLoop` re-runs the SAME
|
|
63
|
+
* `evaluateStaticLiteral` call per item through its own
|
|
64
|
+
* `convertExpressionToGo` override once this analysis has cleared the whole
|
|
65
|
+
* loop, so the two passes can never disagree — this pass is pure validation,
|
|
66
|
+
* with no adapter-state side effects to roll back if it can't clear a loop.
|
|
67
|
+
*/
|
|
68
|
+
import { type ConstantInfo, type IRLoop } from '@barefootjs/jsx';
|
|
69
|
+
export interface BakedStaticElementLoop {
|
|
70
|
+
items: unknown[];
|
|
71
|
+
}
|
|
72
|
+
type LoopShape = Pick<IRLoop, 'childComponent' | 'param' | 'index' | 'arrayParsed' | 'children' | 'filterPredicate' | 'sortComparator' | 'bodyIsMultiRoot' | 'bodyIsItemConditional' | 'paramBindings' | 'iterationShape' | 'objectIteration' | 'method' | 'flatMapCallback'>;
|
|
73
|
+
/**
|
|
74
|
+
* Analyze a `.map()` loop with a plain-element (non-component) body for
|
|
75
|
+
* static unrolling. Returns the resolved item values (ready for the caller
|
|
76
|
+
* to render the body once per item) or `null` when the shape isn't (yet)
|
|
77
|
+
* bakeable this way — see the acceptance criteria in the module docstring.
|
|
78
|
+
*/
|
|
79
|
+
export declare function analyzeBakeableStaticElementLoop(loop: LoopShape, localConstants: ReadonlyArray<ConstantInfo>, opts?: {
|
|
80
|
+
isNameShadowed?: (name: string) => boolean;
|
|
81
|
+
}): BakedStaticElementLoop | null;
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=static-element-loop-bake.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-element-loop-bake.d.ts","sourceRoot":"","sources":["../../../src/adapter/analysis/static-element-loop-bake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AAEH,OAAO,EAGL,KAAK,YAAY,EAEjB,KAAK,MAAM,EAGZ,MAAM,iBAAiB,CAAA;AAGxB,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,EAAE,CAAA;CACjB;AASD,KAAK,SAAS,GAAG,IAAI,CACnB,MAAM,EACJ,gBAAgB,GAChB,OAAO,GACP,OAAO,GACP,aAAa,GACb,UAAU,GACV,iBAAiB,GACjB,gBAAgB,GAChB,iBAAiB,GACjB,uBAAuB,GACvB,eAAe,GACf,gBAAgB,GAChB,iBAAiB,GACjB,QAAQ,GACR,iBAAiB,CACpB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,SAAS,EACf,cAAc,EAAE,aAAa,CAAC,YAAY,CAAC,EAC3C,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CAAE,GACpD,sBAAsB,GAAG,IAAI,CAuB/B"}
|
|
@@ -33,13 +33,19 @@ export interface GoEmitContext {
|
|
|
33
33
|
condition: string;
|
|
34
34
|
preamble: string;
|
|
35
35
|
};
|
|
36
|
-
/** Extract the prop name from a `props.X ?? …` initial value, or null. */
|
|
37
|
-
extractPropNameFromInitialValue(initialValue: string): string | null;
|
|
38
36
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
37
|
+
* Extract the prop name from a `props.X ?? …` initial value — or, given
|
|
38
|
+
* `preParsed` in a destructured component, an `x ?? …` identifier form —
|
|
39
|
+
* or null. Callers validate the name against `propsParams`.
|
|
41
40
|
*/
|
|
42
|
-
|
|
41
|
+
extractPropNameFromInitialValue(initialValue: string, preParsed?: ParsedExpr): string | null;
|
|
42
|
+
/**
|
|
43
|
+
* Parse a signal-time initial value `props.X ?? <literal>` (or the
|
|
44
|
+
* destructured `x ?? <literal>` form when `preParsed` is given) into the
|
|
45
|
+
* source prop name and the Go-formatted fallback, or null when it isn't
|
|
46
|
+
* that shape. Callers validate the name against `propsParams`.
|
|
47
|
+
*/
|
|
48
|
+
extractPropFallback(initialValue: string, preParsed?: ParsedExpr): {
|
|
43
49
|
propName: string;
|
|
44
50
|
goFallback: string;
|
|
45
51
|
} | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-context.d.ts","sourceRoot":"","sources":["../../src/adapter/emit-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;IAE5B;;;OAGG;IACH,qBAAqB,CACnB,MAAM,EAAE,MAAM,EACd,GAAG,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,UAAU,CAAA;KAAE,EAC7B,SAAS,CAAC,EAAE,UAAU,GACrB,MAAM,CAAA;IAET;;;OAGG;IACH,oBAAoB,CAClB,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,UAAU,GACrB;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IAE1C
|
|
1
|
+
{"version":3,"file":"emit-context.d.ts","sourceRoot":"","sources":["../../src/adapter/emit-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;IAE5B;;;OAGG;IACH,qBAAqB,CACnB,MAAM,EAAE,MAAM,EACd,GAAG,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,UAAU,CAAA;KAAE,EAC7B,SAAS,CAAC,EAAE,UAAU,GACrB,MAAM,CAAA;IAET;;;OAGG;IACH,oBAAoB,CAClB,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,UAAU,GACrB;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IAE1C;;;;OAIG;IACH,+BAA+B,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAAA;IAE5F;;;;;OAKG;IACH,mBAAmB,CACjB,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,UAAU,GACrB;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAElD;;;;OAIG;IACH,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CACtD"}
|
|
@@ -41,6 +41,22 @@ export declare class GoTemplateAdapter extends BaseAdapter implements ParsedExpr
|
|
|
41
41
|
/** Diagnostics from the current compile (backed by `CompileState`); `generate()` also merges these into `ir.errors`. */
|
|
42
42
|
get errors(): CompilerError[];
|
|
43
43
|
private inLoop;
|
|
44
|
+
/**
|
|
45
|
+
* Memoized `analyzeBakeableStaticChildLoop` result per loop marker id
|
|
46
|
+
* (#2208). Consulted from three sites that all need the SAME verdict for
|
|
47
|
+
* the SAME loop — the `renderLoop` gate, the Input struct's field list,
|
|
48
|
+
* and the constructor's per-item construction. `renderLoop`'s gate runs
|
|
49
|
+
* during `generate()`'s render pass; the other two run during
|
|
50
|
+
* `generateTypes()`'s constructor-generation pass, which `generate()`
|
|
51
|
+
* also invokes internally partway through — so this cache is reset (in
|
|
52
|
+
* `primeCompileState`, not here) between those two passes too. Agreement
|
|
53
|
+
* across all three sites is therefore guaranteed by `analyzeBakeable-
|
|
54
|
+
* StaticChildLoop` being a deterministic pure function of the (re-primed)
|
|
55
|
+
* per-compile state, not by one shared memo spanning every read; the
|
|
56
|
+
* cache's value is avoiding redundant recomputation WITHIN the pass that
|
|
57
|
+
* populated it, not correctness across passes.
|
|
58
|
+
*/
|
|
59
|
+
private bakedStaticChildLoopCache;
|
|
44
60
|
private loopParamStack;
|
|
45
61
|
/**
|
|
46
62
|
* Stack of `IRLoop.depth` values (innermost last), pushed/popped around
|
|
@@ -87,6 +103,30 @@ export declare class GoTemplateAdapter extends BaseAdapter implements ParsedExpr
|
|
|
87
103
|
* alone (#2087 Phase B).
|
|
88
104
|
*/
|
|
89
105
|
private loopRestExcludeStack;
|
|
106
|
+
/**
|
|
107
|
+
* Active per-item static bindings for a #2224 unrolled plain-element loop
|
|
108
|
+
* (`renderUnrolledStaticElementLoop`) — innermost last, so a nested static
|
|
109
|
+
* unroll inside another one resolves against its own item, not an outer
|
|
110
|
+
* one's. When non-empty, `convertExpressionToGo`'s top-of-function check
|
|
111
|
+
* resolves EVERY expression against the innermost entry's item via
|
|
112
|
+
* `evaluateStaticLiteral` and returns a literal Go value instead of
|
|
113
|
+
* descending into the normal `.Field`-style dot-context lowering — there
|
|
114
|
+
* is no real `{{range}}` establishing that context during an unroll, so
|
|
115
|
+
* `identifier()`'s `currentLoopParam → '.'` branch would otherwise resolve
|
|
116
|
+
* against the WRONG (enclosing) dot context. `analyzeBakeableStaticElementLoop`
|
|
117
|
+
* has already verified every expression in the body resolves this way for
|
|
118
|
+
* every item, so the fallback failure branch below is a defensive
|
|
119
|
+
* invariant check, not a real code path.
|
|
120
|
+
*/
|
|
121
|
+
private staticLoopItemStack;
|
|
122
|
+
/**
|
|
123
|
+
* Set by the `convertExpressionToGo` override above when a
|
|
124
|
+
* `staticLoopItemStack` entry is active but the current expression fails
|
|
125
|
+
* to resolve against it — should never happen (see that check's comment),
|
|
126
|
+
* but `renderUnrolledStaticElementLoop` asserts this stays `false` after
|
|
127
|
+
* every item render rather than silently shipping a `""` sentinel.
|
|
128
|
+
*/
|
|
129
|
+
private staticLoopBakeFailed;
|
|
90
130
|
/**
|
|
91
131
|
* Cross-component child shapes, keyed by child component name. Populated via
|
|
92
132
|
* `registerChildComponentShape` before the parent's `generateTypes`, so the
|
|
@@ -334,18 +374,32 @@ export declare class GoTemplateAdapter extends BaseAdapter implements ParsedExpr
|
|
|
334
374
|
*/
|
|
335
375
|
private collectPropFallbackVars;
|
|
336
376
|
/**
|
|
337
|
-
* Parse a signal-time initial value of the form `props.X ?? <literal>`
|
|
338
|
-
*
|
|
339
|
-
*
|
|
340
|
-
* the fallback isn't a simple literal `goPropDefault`
|
|
377
|
+
* Parse a signal-time initial value of the form `props.X ?? <literal>` —
|
|
378
|
+
* or, for destructured components, `x ?? <literal>` — into the source prop
|
|
379
|
+
* name and the Go-formatted fallback. Returns null when the expression
|
|
380
|
+
* isn't that shape or the fallback isn't a simple literal `goPropDefault`
|
|
381
|
+
* can translate.
|
|
382
|
+
*
|
|
383
|
+
* `preParsed` (the signal's best-effort `ParsedExpr`) is matched
|
|
384
|
+
* structurally when available; the regex handles only the props-object
|
|
385
|
+
* member form for callers without a tree (memo computations). A bare
|
|
386
|
+
* identifier can shadow a same-named prop (loop/callback params — the
|
|
387
|
+
* `collectNullishConsumedPropNames` limitation class), so every caller
|
|
388
|
+
* validates the returned name against `ir.metadata.propsParams`.
|
|
341
389
|
*
|
|
342
390
|
* Keeps the original prop reference (not just the resolved value) so
|
|
343
391
|
* caller-supplied non-zero inputs are honoured.
|
|
344
392
|
*/
|
|
345
393
|
private extractPropFallback;
|
|
394
|
+
/** Structural half of {@link extractPropFallback}. */
|
|
395
|
+
private extractPropFallbackFromParsed;
|
|
346
396
|
/**
|
|
347
397
|
* Extract the prop name from a signal's `props.xxx`-pattern initialValue,
|
|
348
398
|
* e.g. `"props.initial ?? 0"` → `"initial"`, `"props.checked"` → `"checked"`.
|
|
399
|
+
* For destructured components (`propsObjectName` null) the same shapes are
|
|
400
|
+
* matched structurally on `preParsed` with an identifier left operand
|
|
401
|
+
* (`size ?? 0` → `"size"`); callers validate the name against
|
|
402
|
+
* `propsParams`, which filters shadowing locals.
|
|
349
403
|
*/
|
|
350
404
|
private extractPropNameFromInitialValue;
|
|
351
405
|
/**
|
|
@@ -366,6 +420,13 @@ export declare class GoTemplateAdapter extends BaseAdapter implements ParsedExpr
|
|
|
366
420
|
emitProvider(node: IRProvider, _ctx: GoRenderCtx, _emit: EmitIRNode<GoRenderCtx>): string;
|
|
367
421
|
emitAsync(node: IRAsync, _ctx: GoRenderCtx, _emit: EmitIRNode<GoRenderCtx>): string;
|
|
368
422
|
renderElement(element: IRElement): string;
|
|
423
|
+
/**
|
|
424
|
+
* `dangerouslySetInnerHTML={{ __html: '...' }}` (#2207) — see the Blade
|
|
425
|
+
* adapter's identical helper for the full rationale. `null` means the
|
|
426
|
+
* attribute is absent (caller falls through to normal `renderChildren`);
|
|
427
|
+
* a non-`null` string (possibly `''`) replaces the children outright.
|
|
428
|
+
*/
|
|
429
|
+
private renderDangerousInnerHtml;
|
|
369
430
|
renderExpression(expr: IRExpression): string;
|
|
370
431
|
/**
|
|
371
432
|
* Whether a lowered Go string already carries its own `{{...}}` actions and so
|
|
@@ -494,6 +555,25 @@ export declare class GoTemplateAdapter extends BaseAdapter implements ParsedExpr
|
|
|
494
555
|
private _isStringValueName;
|
|
495
556
|
unary(op: string, argument: ParsedExpr, emit: (e: ParsedExpr) => string): string;
|
|
496
557
|
logical(op: '&&' | '||' | '??', left: ParsedExpr, right: ParsedExpr, emit: (e: ParsedExpr) => string): string;
|
|
558
|
+
/**
|
|
559
|
+
* The nillable-prop name a `??` left operand refers to, or null. Matches
|
|
560
|
+
* the two prop-reference shapes (`label` destructured, `props.label`
|
|
561
|
+
* object-style) against `nullishConsumedPropNames ∩ nillablePropNames`.
|
|
562
|
+
*
|
|
563
|
+
* The intersection matters: `nillablePropNames` alone OVERAPPROXIMATES —
|
|
564
|
+
* it is collected before local type aliases are registered, so an
|
|
565
|
+
* alias-typed prop (`placement?: TooltipPlacement`) can sit in the set
|
|
566
|
+
* while its emitted struct field is the concrete alias type. On such a
|
|
567
|
+
* concrete field "absent" is invisible (the zero value), so the
|
|
568
|
+
* truthiness-based `or` is the correct approximation and `bf_nullish`
|
|
569
|
+
* would wrongly KEEP the zero value (e.g. Tooltip's
|
|
570
|
+
* `placementClasses[props.placement ?? 'top']` would resolve to no
|
|
571
|
+
* class for an omitted placement). Requiring `nullishConsumedPropNames`
|
|
572
|
+
* membership pins the
|
|
573
|
+
* gate to props the `??` analysis actually saw — the same set that drives
|
|
574
|
+
* the `interface{}` flip in `resolvePropGoType`.
|
|
575
|
+
*/
|
|
576
|
+
private nillablePropNameOf;
|
|
497
577
|
conditional(test: ParsedExpr, consequent: ParsedExpr, alternate: ParsedExpr, emit: (e: ParsedExpr) => string): string;
|
|
498
578
|
templateLiteral(parts: TemplatePart[], emit: (e: ParsedExpr) => string): string;
|
|
499
579
|
arrow(params: string[], _body: ParsedExpr, _emit: (e: ParsedExpr) => string): string;
|
|
@@ -591,7 +671,12 @@ export declare class GoTemplateAdapter extends BaseAdapter implements ParsedExpr
|
|
|
591
671
|
private renderFilterLengthExpr;
|
|
592
672
|
/**
|
|
593
673
|
* Render a predicate for use in Go template `{{if}}` conditions, substituting
|
|
594
|
-
* the loop parameter (e.g. `t` in `t.done`) with dot notation.
|
|
674
|
+
* the loop parameter (e.g. `t` in `t.done`) with dot notation. `datumField`
|
|
675
|
+
* (#2228) is the wrapper struct's datum-carrying field name (e.g. `"Todo"`)
|
|
676
|
+
* for a loop whose body is a child component — see `wrapperDatumField` — so
|
|
677
|
+
* `t.done` qualifies through it (`.Todo.Done`) instead of the bare `.Done`
|
|
678
|
+
* `html/template` can't resolve on the wrapper Props struct. `undefined` for
|
|
679
|
+
* a non-wrapper (plain-element-body) loop, where `.` already IS the datum.
|
|
595
680
|
*/
|
|
596
681
|
private renderPredicateCondition;
|
|
597
682
|
/** Whether an expression needs parentheses when used in and/or. */
|
|
@@ -608,7 +693,13 @@ export declare class GoTemplateAdapter extends BaseAdapter implements ParsedExpr
|
|
|
608
693
|
* Render a filter predicate expression (`t => !t.done`, or a block body
|
|
609
694
|
* normalized to one — #2040). `localVarMap` is a vestigial empty default kept
|
|
610
695
|
* on the recursion; block-body locals are now inlined upstream, so no caller
|
|
611
|
-
* populates it.
|
|
696
|
+
* populates it. `datumField` (#2228) qualifies a bare `param` reference (and
|
|
697
|
+
* `param.xxx` member/call access) through the wrapper struct's
|
|
698
|
+
* datum-carrying field — see `wrapperDatumField` — for a loop whose `.` is a
|
|
699
|
+
* child-component wrapper Props struct rather than the raw datum itself.
|
|
700
|
+
* `undefined` for every other caller (non-loop `.filter()`/`.find()`/etc.,
|
|
701
|
+
* or a plain-element-body loop), which keeps emitting the bare `.`/`.Field`
|
|
702
|
+
* this method always has.
|
|
612
703
|
*/
|
|
613
704
|
private renderFilterExpr;
|
|
614
705
|
private renderFilterExprNode;
|
|
@@ -641,6 +732,17 @@ export declare class GoTemplateAdapter extends BaseAdapter implements ParsedExpr
|
|
|
641
732
|
private needsParensInGoTemplate;
|
|
642
733
|
/** Convert a JS expression to Go template syntax. */
|
|
643
734
|
private convertExpressionToGo;
|
|
735
|
+
/**
|
|
736
|
+
* Whether `name` at the CURRENT emission position is bound by an enclosing
|
|
737
|
+
* loop callback — its item param (`loopParamStack` top), an outer loop's
|
|
738
|
+
* range variable, a hoisted loop var, or a destructured binding name
|
|
739
|
+
* (`loopBindingStack`, which is the ONLY place destructured callbacks
|
|
740
|
+
* record their names; they push `''` onto `loopParamStack`). Shared by the
|
|
741
|
+
* string-keyed fast paths (#2236, #2242 Copilot review) that resolve raw
|
|
742
|
+
* `jsExpr` text before `identifier()`'s own guards can see it. Mirrors the
|
|
743
|
+
* checks in `resolveModuleStringConst` / `resolveModuleNumericConst`.
|
|
744
|
+
*/
|
|
745
|
+
private isLoopShadowedName;
|
|
644
746
|
/**
|
|
645
747
|
* Resolve `IDENT['key']` / `IDENT["key"]` where `IDENT` is a module-scope
|
|
646
748
|
* object-literal const and the key is a string literal — a compile-time-static
|
|
@@ -700,7 +802,52 @@ export declare class GoTemplateAdapter extends BaseAdapter implements ParsedExpr
|
|
|
700
802
|
/** Innermost-first lookup mirroring `loopBindingStack`'s search in
|
|
701
803
|
* `identifier()`, but over the object-rest exclude-key side table. */
|
|
702
804
|
private lookupRestExclude;
|
|
805
|
+
/**
|
|
806
|
+
* #2228: the Go field name on the wrapper Props struct that carries the
|
|
807
|
+
* loop datum, for a loop whose body IS a child component (`loop.childComponent`,
|
|
808
|
+
* e.g. `.TodoItems` ranging over `TodoItemProps`). `{{range}}`'s dot context
|
|
809
|
+
* for such a loop is the WHOLE wrapper struct (`TodoItemProps{ Todo Todo,
|
|
810
|
+
* OnToggle ..., ... }`), not the raw per-item datum — so a filter predicate
|
|
811
|
+
* (`t => !t.done`) referencing the loop param can't lower `t.done` straight
|
|
812
|
+
* to `.Done` (no such top-level field; `html/template` fails at execute time
|
|
813
|
+
* with `can't evaluate field Done in type TodoItemProps`). The datum lives
|
|
814
|
+
* nested under whichever child prop was PASSED the loop param verbatim
|
|
815
|
+
* (`todo={todo}` → field `Todo`, from `capitalizeFieldName('todo')` — the
|
|
816
|
+
* SAME derivation `generateInputStruct`/`generatePropsStruct` use for every
|
|
817
|
+
* other prop-to-field mapping, so this never invents a field name the
|
|
818
|
+
* generated struct doesn't actually have). Returns `null` for a non-wrapper
|
|
819
|
+
* loop, or when no prop's value is a bare reference to the loop param (the
|
|
820
|
+
* datum isn't forwarded at all — nothing to qualify through).
|
|
821
|
+
*/
|
|
822
|
+
private wrapperDatumField;
|
|
823
|
+
/**
|
|
824
|
+
* Memoized bakeability check for a static-array loop whose body is a
|
|
825
|
+
* single child component (#2208) — see `analyzeBakeableStaticChildLoop`'s
|
|
826
|
+
* docstring. Accepts either an `IRLoop` (the `renderLoop` gate) or a
|
|
827
|
+
* `NestedComponentInfo` (`generateNewPropsFunction`/Input-struct sites) —
|
|
828
|
+
* both carry the same `loopArrayParsed`/`loopParam`/`loopKey`/props data,
|
|
829
|
+
* just under different field names, so this normalizes to one shape and
|
|
830
|
+
* caches by marker id so all three call sites agree.
|
|
831
|
+
*/
|
|
832
|
+
private getBakedStaticChildLoop;
|
|
703
833
|
renderLoop(loop: IRLoop): string;
|
|
834
|
+
/**
|
|
835
|
+
* #2224 shape 1: render a static-array, plain-element-body loop's per-item
|
|
836
|
+
* markup ONCE PER ITEM at template-generation time instead of a Go
|
|
837
|
+
* `{{range}}` — `analyzeBakeableStaticElementLoop` has already verified
|
|
838
|
+
* every expression in `loop.children` resolves against each item. Keeps
|
|
839
|
+
* the SAME `<!--bf-loop:id--> ... <!--/bf-loop:id-->` marker pair a
|
|
840
|
+
* dynamic loop emits (so the CSR-side static `forEach` wiring, compiled by
|
|
841
|
+
* the separate `ir-to-client-js.ts` pass and untouched by this change,
|
|
842
|
+
* still finds the same DOM range), and pushes `loop.param` /
|
|
843
|
+
* `loop.depth` onto the SAME stacks `renderLoop`'s `{{range}}` path uses,
|
|
844
|
+
* so `data-key`/`data-key-N` attribute-name derivation
|
|
845
|
+
* (`renderAttributes`) is unaffected by which path rendered the loop. No
|
|
846
|
+
* `itemMarker` (`loopItemMarker`) call: the analysis gate already refused
|
|
847
|
+
* `bodyIsMultiRoot` / `bodyIsItemConditional` bodies, so it would always
|
|
848
|
+
* return `''` here anyway.
|
|
849
|
+
*/
|
|
850
|
+
private renderUnrolledStaticElementLoop;
|
|
704
851
|
/**
|
|
705
852
|
* Per-item `<!--bf-loop-i-->` / `<!--bf-loop-i:KEY-->` start marker emitted
|
|
706
853
|
* inside a `{{range}}` body. Multi-root Fragment items get the bare anchor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go-template-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/go-template-adapter.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAIpE,OAAO,KAAK,EACV,WAAW,EACX,MAAM,EACN,SAAS,EACT,MAAM,EACN,YAAY,EACZ,aAAa,EACb,MAAM,EAEN,WAAW,EACX,UAAU,EACV,MAAM,EAKN,aAAa,EAEb,UAAU,EACV,qBAAqB,EAGrB,SAAS,EACT,YAAY,EACZ,aAAa,EACb,UAAU,EACV,OAAO,EAEP,yBAAyB,EAE1B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAE3B,KAAK,iBAAiB,EAEtB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"go-template-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/go-template-adapter.ts"],"names":[],"mappings":"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"}
|