@barefootjs/jsx 0.1.1 → 0.1.3

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.
Files changed (47) hide show
  1. package/dist/adapters/parsed-expr-emitter.d.ts +1 -1
  2. package/dist/adapters/parsed-expr-emitter.d.ts.map +1 -1
  3. package/dist/analyzer-context.d.ts +22 -0
  4. package/dist/analyzer-context.d.ts.map +1 -1
  5. package/dist/analyzer.d.ts.map +1 -1
  6. package/dist/errors.d.ts +0 -9
  7. package/dist/errors.d.ts.map +1 -1
  8. package/dist/expression-parser.d.ts +1 -1
  9. package/dist/expression-parser.d.ts.map +1 -1
  10. package/dist/index.js +306 -38
  11. package/dist/ir-to-client-js/compute-inlinability.d.ts +2 -2
  12. package/dist/ir-to-client-js/control-flow/plan/build-inner-loop.d.ts.map +1 -1
  13. package/dist/ir-to-client-js/control-flow/plan/inner-loop.d.ts +6 -18
  14. package/dist/ir-to-client-js/control-flow/plan/inner-loop.d.ts.map +1 -1
  15. package/dist/ir-to-client-js/control-flow/stringify/inner-loop.d.ts.map +1 -1
  16. package/dist/jsx-to-ir.d.ts.map +1 -1
  17. package/dist/types.d.ts +10 -3
  18. package/dist/types.d.ts.map +1 -1
  19. package/package.json +3 -3
  20. package/src/__tests__/__snapshots__/doc-examples.test.ts.snap +13 -17
  21. package/src/__tests__/circular-dependency.audit.test.ts +19 -0
  22. package/src/__tests__/compiler-stress-1244.test.ts +6 -10
  23. package/src/__tests__/component-not-found.audit.test.ts +36 -0
  24. package/src/__tests__/doc-examples.test.ts +5 -6
  25. package/src/__tests__/invalid-component-name.audit.test.ts +38 -0
  26. package/src/__tests__/invalid-jsx-attribute.audit.test.ts +47 -0
  27. package/src/__tests__/invalid-jsx-expression.audit.test.ts +44 -0
  28. package/src/__tests__/invalid-signal-usage.audit.test.ts +72 -0
  29. package/src/__tests__/jsx-function-inlining.test.ts +281 -1
  30. package/src/__tests__/loop-fallback-wrap.test.ts +5 -5
  31. package/src/__tests__/nested-loop-reactive-attrs.test.ts +4 -4
  32. package/src/__tests__/props-type-mismatch.audit.test.ts +100 -0
  33. package/src/__tests__/staged-ir/10-stage-diagnostics.test.ts +83 -2
  34. package/src/__tests__/static-loop-csr-materialize.test.ts +6 -4
  35. package/src/__tests__/type-inference-failed.audit.test.ts +48 -0
  36. package/src/__tests__/unknown-signal.audit.test.ts +111 -0
  37. package/src/adapters/parsed-expr-emitter.ts +1 -1
  38. package/src/analyzer-context.ts +25 -0
  39. package/src/analyzer.ts +207 -1
  40. package/src/errors.ts +4 -26
  41. package/src/expression-parser.ts +8 -9
  42. package/src/ir-to-client-js/compute-inlinability.ts +2 -2
  43. package/src/ir-to-client-js/control-flow/plan/build-inner-loop.ts +3 -8
  44. package/src/ir-to-client-js/control-flow/plan/inner-loop.ts +6 -17
  45. package/src/ir-to-client-js/control-flow/stringify/inner-loop.ts +5 -19
  46. package/src/jsx-to-ir.ts +215 -4
  47. package/src/types.ts +11 -3
@@ -33,7 +33,7 @@
33
33
  * be added in one place.
34
34
  */
35
35
  import type { ParsedExpr, SortComparator, TemplatePart } from '../expression-parser';
36
- export type HigherOrderMethod = 'filter' | 'every' | 'some' | 'find' | 'findIndex';
36
+ export type HigherOrderMethod = 'filter' | 'every' | 'some' | 'find' | 'findIndex' | 'findLast' | 'findLastIndex';
37
37
  /**
38
38
  * Non-higher-order array methods (#1443). One discriminator for the
39
39
  * full set of "value-builtin" method calls on arrays — extending it
@@ -1 +1 @@
1
- {"version":3,"file":"parsed-expr-emitter.d.ts","sourceRoot":"","sources":["../../src/adapters/parsed-expr-emitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parsed-expr-emitter.d.ts","sourceRoot":"","sources":["../../src/adapters/parsed-expr-emitter.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,26 @@ export interface PendingSignalTuple {
32
32
  setter: string | null;
33
33
  initialFreeIdentifiers: ReadonlySet<string>;
34
34
  }
35
+ /**
36
+ * One branch of a multi-return JSX helper function's if/else chain.
37
+ * `jsxReturn` is null for guard clauses that `return null`.
38
+ */
39
+ export interface MultiReturnJsxBranch {
40
+ condition: ts.Expression;
41
+ jsxReturn: ts.JsxElement | ts.JsxSelfClosingElement | ts.JsxFragment | null;
42
+ }
43
+ /**
44
+ * Extracted control flow from a multi-return JSX helper function.
45
+ * Represents `if (c1) return <A/>; if (c2) return <B/>; return <C/>`
46
+ * as a chain of condition→JSX pairs plus an optional fallback.
47
+ */
48
+ export interface MultiReturnJsxInfo {
49
+ branches: MultiReturnJsxBranch[];
50
+ fallback: ts.JsxElement | ts.JsxSelfClosingElement | ts.JsxFragment | null;
51
+ params: string[];
52
+ /** For switch-sourced branches, the discriminant expression (e.g. `name` in `switch(name)`) */
53
+ switchDiscriminant?: ts.Expression;
54
+ }
35
55
  /**
36
56
  * Represents an if statement with a JSX return in a component function.
37
57
  */
@@ -95,6 +115,8 @@ export interface AnalyzerContext {
95
115
  jsxReturn: ts.JsxElement | ts.JsxSelfClosingElement | ts.JsxFragment;
96
116
  params: string[];
97
117
  }>;
118
+ /** Maps multi-return JSX helper functions for conditional inlining at call sites. */
119
+ jsxMultiReturnFunctions: Map<string, MultiReturnJsxInfo>;
98
120
  /**
99
121
  * Maps function names to reactive-factory info (#931). A reactive factory
100
122
  * is a same-file helper whose body declares reactive primitives and
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer-context.d.ts","sourceRoot":"","sources":["../src/analyzer-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyzer-context.d.ts","sourceRoot":"","sources":["../src/analyzer-context.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAA;AAI3B,OAAO,EACL,KAAK,eAAe,EAOrB,MAAM,oBAAoB,CAAA;AAmB3B;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAK/D;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAA;CAAE,GAAG,IAAI,CA8CpF;AAMD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,mBAAmB,CAAC,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,GACnB,eAAe,CAgHjB;AAugBD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAavE;AAugCD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,OAAO,CA6BpE;AAkLD;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAuCzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAelE;AA+iCD,eAAO,MAAM,wBAAwB,aAOnC,CAAA;AAkBF;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CA0DV;AAcD,eAAO,MAAM,mBAAmB,aAG9B,CAAA;AAoRF;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAwCvE;AAMD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAA;AAI3B,OAAO,EACL,KAAK,eAAe,EAOrB,MAAM,oBAAoB,CAAA;AAmB3B;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAK/D;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAA;CAAE,GAAG,IAAI,CA8CpF;AAMD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,mBAAmB,CAAC,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,GACnB,eAAe,CAgHjB;AAugBD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAavE;AAmsCD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,OAAO,CA6BpE;AA2LD;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAuCzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAelE;AAwjCD,eAAO,MAAM,wBAAwB,aAOnC,CAAA;AAkBF;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CA0DV;AAcD,eAAO,MAAM,mBAAmB,aAG9B,CAAA;AAoRF;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAwCvE;AAMD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAA"}
package/dist/errors.d.ts CHANGED
@@ -5,20 +5,11 @@ import type { CompilerError, ErrorSeverity, ErrorSuggestion, SourceLocation } fr
5
5
  export declare const ErrorCodes: {
6
6
  readonly MISSING_USE_CLIENT: 'BF001';
7
7
  readonly CLIENT_IMPORTING_SERVER: 'BF003';
8
- readonly UNKNOWN_SIGNAL: 'BF010';
9
8
  readonly SIGNAL_OUTSIDE_COMPONENT: 'BF011';
10
- readonly INVALID_SIGNAL_USAGE: 'BF012';
11
- readonly INVALID_JSX_EXPRESSION: 'BF020';
12
9
  readonly UNSUPPORTED_JSX_PATTERN: 'BF021';
13
- readonly INVALID_JSX_ATTRIBUTE: 'BF022';
14
10
  readonly MISSING_KEY_IN_LIST: 'BF023';
15
11
  readonly MISSING_KEY_IN_NESTED_LIST: 'BF024';
16
12
  readonly UNSUPPORTED_DESTRUCTURE_REST: 'BF025';
17
- readonly TYPE_INFERENCE_FAILED: 'BF030';
18
- readonly PROPS_TYPE_MISMATCH: 'BF031';
19
- readonly COMPONENT_NOT_FOUND: 'BF040';
20
- readonly CIRCULAR_DEPENDENCY: 'BF041';
21
- readonly INVALID_COMPONENT_NAME: 'BF042';
22
13
  readonly PROPS_DESTRUCTURING: 'BF043';
23
14
  readonly SIGNAL_GETTER_NOT_CALLED: 'BF044';
24
15
  readonly JSX_IN_LOCAL_FUNCTION: 'BF045';
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACf,MAAM,SAAS,CAAA;AAMhB,eAAO,MAAM,UAAU;aAErB,kBAAkB,EAAE,OAAO;aAC3B,uBAAuB,EAAE,OAAO;aAGhC,wBAAwB,EAAE,OAAO;aAGjC,uBAAuB,EAAE,OAAO;aAChC,mBAAmB,EAAE,OAAO;aAC5B,0BAA0B,EAAE,OAAO;aACnC,4BAA4B,EAAE,OAAO;aAGrC,mBAAmB,EAAE,OAAO;aAC5B,wBAAwB,EAAE,OAAO;aACjC,qBAAqB,EAAE,OAAO;aAC9B,+BAA+B,EAAE,OAAO;aAUxC,4BAA4B,EAAE,OAAO;aAGrC,uBAAuB,EAAE,OAAO;aAChC,oBAAoB,EAAE,OAAO;aAG7B,mCAAmC,EAAE,OAAO;aAQ5C,iCAAiC,EAAE,OAAO;aAa1C,0BAA0B,EAAE,OAAO;aACnC,4BAA4B,EAAE,OAAO;aACrC,uBAAuB,EAAE,OAAO;aAMhC,2BAA2B,EAAE,OAAO;aAGpC,6BAA6B,EAAE,OAAO;CAC9B,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAA;AA6EpE,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,cAAc,EACnB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,eAAe,CAAA;CAC7B,GACA,aAAa,CAuBf;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,cAAc,EACnB,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,eAAe,CAAA;CAC7B,GACA,aAAa,CAEf;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,cAAc,EACnB,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,eAAe,CAAA;CAC7B,GACA,aAAa,CAEf;AAMD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,cAAc,EACnB,YAAY,SAAI,GACf,MAAM,CA6BR;AAmBD,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,MAAM,CA6CR;AAMD;;;;;;;GAOG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAId;AAMD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,cAAc,CAMhB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,cAAc,GAClB,cAAc,CAMhB"}
@@ -50,7 +50,7 @@ export type ParsedExpr = {
50
50
  body: ParsedExpr;
51
51
  } | {
52
52
  kind: 'higher-order';
53
- method: 'filter' | 'every' | 'some' | 'find' | 'findIndex';
53
+ method: 'filter' | 'every' | 'some' | 'find' | 'findIndex' | 'findLast' | 'findLastIndex';
54
54
  object: ParsedExpr;
55
55
  param: string;
56
56
  predicate: ParsedExpr;
@@ -1 +1 @@
1
- {"version":3,"file":"expression-parser.d.ts","sourceRoot":"","sources":["../src/expression-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expression-parser.d.ts","sourceRoot":"","sources":["../src/expression-parser.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -938,6 +938,7 @@ function createAnalyzerContext(sourceFile, filePath) {
938
938
  jsxConstants: new Map,
939
939
  inlineableJsxConsts: new Map,
940
940
  jsxFunctions: new Map,
941
+ jsxMultiReturnFunctions: new Map,
941
942
  reactiveFactories: new Map,
942
943
  signalTupleRefs: new Map,
943
944
  propsType: null,
@@ -1389,20 +1390,11 @@ var path_default = posix;
1389
1390
  var ErrorCodes = {
1390
1391
  MISSING_USE_CLIENT: "BF001",
1391
1392
  CLIENT_IMPORTING_SERVER: "BF003",
1392
- UNKNOWN_SIGNAL: "BF010",
1393
1393
  SIGNAL_OUTSIDE_COMPONENT: "BF011",
1394
- INVALID_SIGNAL_USAGE: "BF012",
1395
- INVALID_JSX_EXPRESSION: "BF020",
1396
1394
  UNSUPPORTED_JSX_PATTERN: "BF021",
1397
- INVALID_JSX_ATTRIBUTE: "BF022",
1398
1395
  MISSING_KEY_IN_LIST: "BF023",
1399
1396
  MISSING_KEY_IN_NESTED_LIST: "BF024",
1400
1397
  UNSUPPORTED_DESTRUCTURE_REST: "BF025",
1401
- TYPE_INFERENCE_FAILED: "BF030",
1402
- PROPS_TYPE_MISMATCH: "BF031",
1403
- COMPONENT_NOT_FOUND: "BF040",
1404
- CIRCULAR_DEPENDENCY: "BF041",
1405
- INVALID_COMPONENT_NAME: "BF042",
1406
1398
  PROPS_DESTRUCTURING: "BF043",
1407
1399
  SIGNAL_GETTER_NOT_CALLED: "BF044",
1408
1400
  JSX_IN_LOCAL_FUNCTION: "BF045",
@@ -1421,20 +1413,11 @@ var ErrorCodes = {
1421
1413
  var errorMessages = {
1422
1414
  [ErrorCodes.MISSING_USE_CLIENT]: "'use client' directive required for components with createSignal or event handlers",
1423
1415
  [ErrorCodes.CLIENT_IMPORTING_SERVER]: "Client component cannot import server component",
1424
- [ErrorCodes.UNKNOWN_SIGNAL]: "Unknown signal reference",
1425
1416
  [ErrorCodes.SIGNAL_OUTSIDE_COMPONENT]: "Module-level reactive declaration (createSignal / createMemo) is not allowed. " + "The downstream codegen drops the declaration silently and every reference becomes a ReferenceError at SSR and at hydrate. " + "Move the declaration inside a component function so each mount gets its own state.",
1426
- [ErrorCodes.INVALID_SIGNAL_USAGE]: "Invalid signal usage",
1427
- [ErrorCodes.INVALID_JSX_EXPRESSION]: "Invalid JSX expression",
1428
1417
  [ErrorCodes.UNSUPPORTED_JSX_PATTERN]: "Unsupported JSX pattern",
1429
- [ErrorCodes.INVALID_JSX_ATTRIBUTE]: "Invalid JSX attribute",
1430
1418
  [ErrorCodes.MISSING_KEY_IN_LIST]: "Missing key attribute in list rendering. Add a key prop for efficient updates",
1431
1419
  [ErrorCodes.MISSING_KEY_IN_NESTED_LIST]: "Nested .map() loop requires key attribute for event delegation. Add a key prop to elements in the inner loop",
1432
1420
  [ErrorCodes.UNSUPPORTED_DESTRUCTURE_REST]: "Computed property key in .map() callback destructure is not supported. Rewrite the callback to destructure explicit bindings (e.g., `({ a, b }) => ...`) so the compiler can rewrite references to per-item signal accessors.",
1433
- [ErrorCodes.TYPE_INFERENCE_FAILED]: "Failed to infer type",
1434
- [ErrorCodes.PROPS_TYPE_MISMATCH]: "Props type mismatch",
1435
- [ErrorCodes.COMPONENT_NOT_FOUND]: "Component not found",
1436
- [ErrorCodes.CIRCULAR_DEPENDENCY]: "Circular dependency detected",
1437
- [ErrorCodes.INVALID_COMPONENT_NAME]: "Component name must start with uppercase letter",
1438
1421
  [ErrorCodes.PROPS_DESTRUCTURING]: "Props destructuring in function parameters breaks reactivity. Use props object directly.",
1439
1422
  [ErrorCodes.SIGNAL_GETTER_NOT_CALLED]: "Signal/memo getter passed without calling it. Use getter() to read the value.",
1440
1423
  [ErrorCodes.JSX_IN_LOCAL_FUNCTION]: "Local function returns JSX but cannot be inlined. Extract it as a top-level PascalCase component or use a single return statement.",
@@ -1446,7 +1429,7 @@ var errorMessages = {
1446
1429
  [ErrorCodes.STRIPPED_CLIENT_IMPORT_REFERENCED]: "Import was stripped from the client bundle but its binding is still referenced. Client components ('use client' .tsx) are not callable as plain functions from imperative .ts modules — render them as JSX from a 'use client' parent instead. If the flagged name is a local shadow rather than the stripped import, please file an issue.",
1447
1430
  [ErrorCodes.STAGE_REACTIVE_IN_TEMPLATE]: "Reactive binding (signal getter or memo) referenced from template scope. The template lambda runs at module scope without the reactive context, so the value cannot be evaluated at SSR. Wrap the JSX expression in /* @client */ to defer it to hydrate, or restructure so the template uses a prop or static value.",
1448
1431
  [ErrorCodes.STAGE_INIT_LOCAL_IN_TEMPLATE]: "Init-scope local referenced from template scope. The template lambda runs at module scope (via render() / renderChild()) and cannot reach init-body locals. Wrap the JSX expression in /* @client */, or lift the value to a prop or module-scope const.",
1449
- [ErrorCodes.STAGE_AWAIT_IN_TEMPLATE]: "AwaitExpression in template scope. The hydrate-time template lambda is synchronous; awaiting here would hang first render. Move the await into a server-side handler and pass the resolved value as a prop.",
1432
+ [ErrorCodes.STAGE_AWAIT_IN_TEMPLATE]: "AwaitExpression in template scope. The generated template and init functions are synchronous a bare `await` produces a SyntaxError at parse time. Move the await into the component body (before the return) or into an onMount/effect callback, and pass the resolved value to JSX.",
1450
1433
  [ErrorCodes.INLINE_JSX_CALLBACK_CAPTURE]: "Inline JSX-returning arrow function captures a non-module identifier. Extract the callback into a top-level 'use client' component (e.g. `function MyNode(n) { return <div/> }` then `renderNode={MyNode}`) or pass captured values via component props.",
1451
1434
  [ErrorCodes.UNRECOGNIZED_REACTIVE_FACTORY]: "Tuple destructuring of a non-reactive factory call. The compiler only recognizes createSignal / createMemo calls and same-file helpers that wrap them with a single `return [a, b]` exit."
1452
1435
  };
@@ -2592,6 +2575,139 @@ function extractSingleJsxReturn(body) {
2592
2575
  return null;
2593
2576
  return jsxReturn;
2594
2577
  }
2578
+ function extractMultiReturnJsxBranches(body) {
2579
+ const branches = [];
2580
+ let fallback = null;
2581
+ const stmts = body.statements;
2582
+ for (let i = 0;i < stmts.length; i++) {
2583
+ const stmt = stmts[i];
2584
+ if (ts6.isIfStatement(stmt)) {
2585
+ let current = stmt;
2586
+ while (ts6.isIfStatement(current)) {
2587
+ const ifStmt = current;
2588
+ if (!isDirectReturnBlock(ifStmt.thenStatement))
2589
+ return null;
2590
+ const jsxReturn = findJsxReturnInBlock(ifStmt.thenStatement);
2591
+ const nullReturn = findNullReturnInBlock(ifStmt.thenStatement);
2592
+ if (!jsxReturn && !nullReturn)
2593
+ return null;
2594
+ branches.push({ condition: ifStmt.expression, jsxReturn: jsxReturn ?? null });
2595
+ if (ifStmt.elseStatement) {
2596
+ if (ts6.isIfStatement(ifStmt.elseStatement)) {
2597
+ current = ifStmt.elseStatement;
2598
+ continue;
2599
+ }
2600
+ if (!isDirectReturnBlock(ifStmt.elseStatement))
2601
+ return null;
2602
+ const elseJsx = findJsxReturnInBlock(ifStmt.elseStatement);
2603
+ if (elseJsx) {
2604
+ fallback = elseJsx;
2605
+ } else if (!findNullReturnInBlock(ifStmt.elseStatement)) {
2606
+ return null;
2607
+ }
2608
+ if (branches.length === 0)
2609
+ return null;
2610
+ return { branches, fallback };
2611
+ }
2612
+ break;
2613
+ }
2614
+ continue;
2615
+ }
2616
+ if (ts6.isSwitchStatement(stmt)) {
2617
+ if (branches.length > 0)
2618
+ return null;
2619
+ if (!ts6.isIdentifier(stmt.expression) && !ts6.isPropertyAccessExpression(stmt.expression)) {
2620
+ return null;
2621
+ }
2622
+ const hasDefault = stmt.caseBlock.clauses.some((c) => ts6.isDefaultClause(c));
2623
+ if (!hasDefault)
2624
+ return null;
2625
+ for (const clause of stmt.caseBlock.clauses) {
2626
+ const jsxReturn = findJsxReturnInCaseClause(clause);
2627
+ const nullReturn = findNullReturnInCaseClause(clause);
2628
+ if (!jsxReturn && !nullReturn)
2629
+ return null;
2630
+ if (ts6.isCaseClause(clause)) {
2631
+ branches.push({
2632
+ condition: clause.expression,
2633
+ jsxReturn: jsxReturn ?? null
2634
+ });
2635
+ } else {
2636
+ fallback = jsxReturn ?? null;
2637
+ }
2638
+ }
2639
+ if (branches.length === 0)
2640
+ return null;
2641
+ return { branches, fallback, switchDiscriminant: stmt.expression };
2642
+ }
2643
+ if (ts6.isReturnStatement(stmt) && stmt.expression) {
2644
+ const expr = unwrapJsxTransparent(stmt.expression);
2645
+ if (ts6.isJsxElement(expr) || ts6.isJsxSelfClosingElement(expr) || ts6.isJsxFragment(expr)) {
2646
+ fallback = expr;
2647
+ } else if (expr.kind === ts6.SyntaxKind.NullKeyword) {} else {
2648
+ return null;
2649
+ }
2650
+ continue;
2651
+ }
2652
+ if (ts6.isVariableStatement(stmt))
2653
+ return null;
2654
+ return null;
2655
+ }
2656
+ if (branches.length === 0)
2657
+ return null;
2658
+ return { branches, fallback };
2659
+ }
2660
+ function isDirectReturnBlock(node) {
2661
+ if (ts6.isReturnStatement(node))
2662
+ return true;
2663
+ if (ts6.isBlock(node)) {
2664
+ let returnCount = 0;
2665
+ for (const stmt of node.statements) {
2666
+ if (ts6.isReturnStatement(stmt)) {
2667
+ returnCount++;
2668
+ } else if (ts6.isIfStatement(stmt) || ts6.isSwitchStatement(stmt) || ts6.isForStatement(stmt) || ts6.isForOfStatement(stmt) || ts6.isForInStatement(stmt) || ts6.isWhileStatement(stmt) || ts6.isDoStatement(stmt) || ts6.isTryStatement(stmt)) {
2669
+ return false;
2670
+ }
2671
+ }
2672
+ return returnCount === 1;
2673
+ }
2674
+ return false;
2675
+ }
2676
+ function findNullReturnInBlock(node) {
2677
+ if (ts6.isBlock(node)) {
2678
+ for (const stmt of node.statements) {
2679
+ if (ts6.isReturnStatement(stmt) && stmt.expression) {
2680
+ const expr = unwrapJsxTransparent(stmt.expression);
2681
+ if (expr.kind === ts6.SyntaxKind.NullKeyword)
2682
+ return true;
2683
+ }
2684
+ }
2685
+ }
2686
+ if (ts6.isReturnStatement(node) && node.expression) {
2687
+ const expr = unwrapJsxTransparent(node.expression);
2688
+ if (expr.kind === ts6.SyntaxKind.NullKeyword)
2689
+ return true;
2690
+ }
2691
+ return false;
2692
+ }
2693
+ function findJsxReturnInCaseClause(clause) {
2694
+ for (const stmt of clause.statements) {
2695
+ if (ts6.isReturnStatement(stmt) && stmt.expression) {
2696
+ return extractJsxFromExpression(stmt.expression);
2697
+ }
2698
+ }
2699
+ return null;
2700
+ }
2701
+ function findNullReturnInCaseClause(clause) {
2702
+ for (const stmt of clause.statements) {
2703
+ if (ts6.isReturnStatement(stmt) && stmt.expression) {
2704
+ const expr = unwrapJsxTransparent(stmt.expression);
2705
+ if (expr.kind === ts6.SyntaxKind.NullKeyword)
2706
+ return true;
2707
+ }
2708
+ }
2709
+ return false;
2710
+ }
2595
2711
  function isMultiReturnJsxFunctionBody(body) {
2596
2712
  let returnCount = 0;
2597
2713
  let hasJsxReturn = false;
@@ -2675,6 +2791,15 @@ function collectFunction(node, ctx, _isModule, isExported = false) {
2675
2791
  jsxReturn,
2676
2792
  params: node.parameters.map((p) => p.name.getText(ctx.sourceFile))
2677
2793
  });
2794
+ } else {
2795
+ const multi = extractMultiReturnJsxBranches(node.body);
2796
+ if (multi) {
2797
+ isJsxFunction = true;
2798
+ ctx.jsxMultiReturnFunctions.set(name, {
2799
+ ...multi,
2800
+ params: node.parameters.map((p) => p.name.getText(ctx.sourceFile))
2801
+ });
2802
+ }
2678
2803
  }
2679
2804
  }
2680
2805
  const isAsync = node.modifiers?.some((m) => m.kind === ts6.SyntaxKind.AsyncKeyword) ?? false;
@@ -2927,6 +3052,15 @@ function collectConstant(node, ctx, _isModule, declarationKind = "const", isExpo
2927
3052
  jsxReturn,
2928
3053
  params: init.parameters.map((p) => p.name.getText(ctx.sourceFile))
2929
3054
  });
3055
+ } else {
3056
+ const multi = extractMultiReturnJsxBranches(arrowBody);
3057
+ if (multi) {
3058
+ isJsxFunction = true;
3059
+ ctx.jsxMultiReturnFunctions.set(name, {
3060
+ ...multi,
3061
+ params: init.parameters.map((p) => p.name.getText(ctx.sourceFile))
3062
+ });
3063
+ }
2930
3064
  }
2931
3065
  } else {
2932
3066
  let body = arrowBody;
@@ -3186,7 +3320,7 @@ function inferTypeFromValue(value) {
3186
3320
  if (/\.(some|every|includes)\s*\([\s\S]*\)\s*$/.test(trimmed)) {
3187
3321
  return { kind: "primitive", raw: "boolean", primitive: "boolean" };
3188
3322
  }
3189
- if (/\.(indexOf|findIndex|lastIndexOf)\s*\([\s\S]*\)\s*$/.test(trimmed)) {
3323
+ if (/\.(indexOf|findIndex|findLastIndex|lastIndexOf)\s*\([\s\S]*\)\s*$/.test(trimmed)) {
3190
3324
  return { kind: "primitive", raw: "number", primitive: "number" };
3191
3325
  }
3192
3326
  if (/^-?\d+(\.\d+)?$/.test(trimmed)) {
@@ -3827,8 +3961,6 @@ var UNSUPPORTED_METHODS = new Set([
3827
3961
  "reduceRight",
3828
3962
  "every",
3829
3963
  "some",
3830
- "findLast",
3831
- "findLastIndex",
3832
3964
  "forEach",
3833
3965
  "flatMap",
3834
3966
  "flat"
@@ -3871,7 +4003,7 @@ function convertNode(node, raw) {
3871
4003
  if (ts7.isCallExpression(node)) {
3872
4004
  const callee = convertNode(node.expression, raw);
3873
4005
  const args = node.arguments.map((arg) => convertNode(arg, raw));
3874
- if (callee.kind === "member" && ["filter", "every", "some", "find", "findIndex"].includes(callee.property)) {
4006
+ if (callee.kind === "member" && ["filter", "every", "some", "find", "findIndex", "findLast", "findLastIndex"].includes(callee.property)) {
3875
4007
  if (args.length === 1 && args[0].kind === "arrow-fn") {
3876
4008
  const arrowFn = args[0];
3877
4009
  return {
@@ -5812,6 +5944,18 @@ function transformExpressionInner(expr, ctx, node, isClientOnly) {
5812
5944
  }
5813
5945
  return ir;
5814
5946
  }
5947
+ if (containsAwaitExpression(expr)) {
5948
+ ctx.analyzer.errors.push(createError(ErrorCodes.STAGE_AWAIT_IN_TEMPLATE, getSourceLocation(expr, ctx.sourceFile, ctx.filePath)));
5949
+ return {
5950
+ type: "expression",
5951
+ expr: "undefined",
5952
+ typeInfo: null,
5953
+ reactive: false,
5954
+ slotId: null,
5955
+ loc: getSourceLocation(node, ctx.sourceFile, ctx.filePath),
5956
+ origin: { phase: "tick", scope: "template", effect: "pure", freeRefs: [] }
5957
+ };
5958
+ }
5815
5959
  const exprText = ctx.getJS(expr);
5816
5960
  const freeRefs = resolveFreeRefs(expr, makeBindingEnv(ctx));
5817
5961
  const origin = {
@@ -5883,6 +6027,97 @@ function transformJsxFunctionCall(callExpr, jsxFunc, ctx, _isClientOnly) {
5883
6027
  ctx.analyzer.getJS = originalAnalyzerGetJS;
5884
6028
  }
5885
6029
  }
6030
+ function transformMultiReturnJsxFunctionCall(callExpr, info, ctx) {
6031
+ const substitutions = new Map;
6032
+ for (let i = 0;i < info.params.length; i++) {
6033
+ const paramName = info.params[i];
6034
+ const arg = callExpr.arguments[i];
6035
+ if (arg) {
6036
+ substitutions.set(paramName, ctx.getJS(arg));
6037
+ }
6038
+ }
6039
+ const baseGetJS = ctx.analyzer.getJS.bind(ctx.analyzer);
6040
+ const originalCtxGetJS = ctx.getJS;
6041
+ const originalAnalyzerGetJS = ctx.analyzer.getJS;
6042
+ const substitutedGetJS = (node) => {
6043
+ let text = baseGetJS(node);
6044
+ for (const [paramName, argExpr] of substitutions) {
6045
+ text = text.replace(new RegExp(`\\b${paramName}\\b`, "g"), argExpr);
6046
+ }
6047
+ return text;
6048
+ };
6049
+ ctx.getJS = substitutedGetJS;
6050
+ ctx.analyzer.getJS = substitutedGetJS;
6051
+ try {
6052
+ const loc = getSourceLocation(callExpr, ctx.sourceFile, ctx.filePath);
6053
+ const nullExpr = {
6054
+ type: "expression",
6055
+ expr: "null",
6056
+ typeInfo: { kind: "primitive", raw: "null", primitive: "null" },
6057
+ reactive: false,
6058
+ slotId: null,
6059
+ loc,
6060
+ origin: { phase: "tick", scope: "template", effect: "pure", freeRefs: [] }
6061
+ };
6062
+ let result = info.fallback ? transformNode(info.fallback, ctx) ?? nullExpr : nullExpr;
6063
+ for (let i = info.branches.length - 1;i >= 0; i--) {
6064
+ const branch = info.branches[i];
6065
+ let conditionText;
6066
+ if (info.switchDiscriminant) {
6067
+ const discText = substitutedGetJS(info.switchDiscriminant);
6068
+ const caseText = substitutedGetJS(branch.condition);
6069
+ conditionText = `${discText} === ${caseText}`;
6070
+ } else {
6071
+ conditionText = substitutedGetJS(branch.condition);
6072
+ }
6073
+ const env = makeBindingEnv(ctx);
6074
+ const caseFreeRefs = resolveFreeRefs(branch.condition, env);
6075
+ const discFreeRefs = info.switchDiscriminant ? resolveFreeRefs(info.switchDiscriminant, env) : [];
6076
+ const conditionOrigin = {
6077
+ phase: "tick",
6078
+ scope: "template",
6079
+ effect: "pure",
6080
+ freeRefs: [...discFreeRefs, ...caseFreeRefs]
6081
+ };
6082
+ const reactive = isReactiveExpression(conditionText, ctx, branch.condition) || isReactiveOrigin(conditionOrigin);
6083
+ const loopParamReactive = !reactive && referencesLoopParam(conditionText, ctx);
6084
+ const callsReactive = exprCallsReactiveGetters(branch.condition, ctx) || (info.switchDiscriminant ? exprCallsReactiveGetters(info.switchDiscriminant, ctx) : false);
6085
+ const hasCalls = exprHasFunctionCalls(branch.condition) || (info.switchDiscriminant ? exprHasFunctionCalls(info.switchDiscriminant) : false);
6086
+ const needsSlot = reactive || loopParamReactive || callsReactive || hasCalls;
6087
+ const slotId = needsSlot ? generateSlotId(ctx) : null;
6088
+ const whenTrue = branch.jsxReturn ? transformNode(branch.jsxReturn, ctx) ?? nullExpr : nullExpr;
6089
+ let templateCondition;
6090
+ if (info.switchDiscriminant) {
6091
+ const discRewritten = rewriteBarePropRefs2(substitutedGetJS(info.switchDiscriminant), info.switchDiscriminant, ctx);
6092
+ const caseRewritten = rewriteBarePropRefs2(substitutedGetJS(branch.condition), branch.condition, ctx);
6093
+ const discPart = discRewritten ?? substitutedGetJS(info.switchDiscriminant);
6094
+ const casePart = caseRewritten ?? substitutedGetJS(branch.condition);
6095
+ templateCondition = `${discPart} === ${casePart}`;
6096
+ } else {
6097
+ templateCondition = rewriteBarePropRefs2(conditionText, branch.condition, ctx);
6098
+ }
6099
+ const conditional = {
6100
+ type: "conditional",
6101
+ condition: conditionText,
6102
+ templateCondition,
6103
+ conditionType: null,
6104
+ reactive,
6105
+ whenTrue,
6106
+ whenFalse: result,
6107
+ slotId,
6108
+ callsReactiveGetters: callsReactive || undefined,
6109
+ hasFunctionCalls: hasCalls || undefined,
6110
+ loc,
6111
+ origin: conditionOrigin
6112
+ };
6113
+ result = conditional;
6114
+ }
6115
+ return result;
6116
+ } finally {
6117
+ ctx.getJS = originalCtxGetJS;
6118
+ ctx.analyzer.getJS = originalAnalyzerGetJS;
6119
+ }
6120
+ }
5886
6121
  function transformConditional(node, ctx) {
5887
6122
  const condition = ctx.getJS(node.condition);
5888
6123
  const conditionOrigin = {
@@ -5964,6 +6199,13 @@ function containsJsxInExpression(node) {
5964
6199
  }
5965
6200
  return ts10.forEachChild(node, containsJsxInExpression) ?? false;
5966
6201
  }
6202
+ function containsAwaitExpression(node) {
6203
+ if (ts10.isAwaitExpression(node))
6204
+ return true;
6205
+ if (ts10.isFunctionDeclaration(node) || ts10.isFunctionExpression(node) || ts10.isArrowFunction(node))
6206
+ return false;
6207
+ return ts10.forEachChild(node, containsAwaitExpression) ?? false;
6208
+ }
5967
6209
  function transformNullishCoalescing(node, ctx) {
5968
6210
  const leftText = ctx.getJS(node.left);
5969
6211
  const isNullish = node.operatorToken.kind === ts10.SyntaxKind.QuestionQuestionToken;
@@ -6054,6 +6296,10 @@ function transformJsxExpression(expr, ctx, isClientOnly = false) {
6054
6296
  if (jsxFunc) {
6055
6297
  return transformJsxFunctionCall(node, jsxFunc, ctx, isClientOnly);
6056
6298
  }
6299
+ const multiJsxFunc = ctx.analyzer.jsxMultiReturnFunctions.get(callee.text);
6300
+ if (multiJsxFunc) {
6301
+ return transformMultiReturnJsxFunctionCall(node, multiJsxFunc, ctx);
6302
+ }
6057
6303
  }
6058
6304
  return null;
6059
6305
  }
@@ -6090,6 +6336,16 @@ function transformJsxExpression(expr, ctx, isClientOnly = false) {
6090
6336
  case ts10.SyntaxKind.ArrayLiteralExpression:
6091
6337
  return null;
6092
6338
  case ts10.SyntaxKind.AwaitExpression:
6339
+ ctx.analyzer.errors.push(createError(ErrorCodes.STAGE_AWAIT_IN_TEMPLATE, getSourceLocation(node, ctx.sourceFile, ctx.filePath)));
6340
+ return {
6341
+ type: "expression",
6342
+ expr: "undefined",
6343
+ typeInfo: null,
6344
+ reactive: false,
6345
+ slotId: null,
6346
+ loc: getSourceLocation(node, ctx.sourceFile, ctx.filePath),
6347
+ origin: { phase: "tick", scope: "template", effect: "pure", freeRefs: [] }
6348
+ };
6093
6349
  case ts10.SyntaxKind.YieldExpression:
6094
6350
  return null;
6095
6351
  case ts10.SyntaxKind.SpreadElement:
@@ -6741,7 +6997,8 @@ function transformMapCall(node, ctx, isClientOnly = false, method = "map") {
6741
6997
  const bodyIsMultiRoot = loopBodyIsMultiRoot(children);
6742
6998
  const callsReactive = exprCallsReactiveGetters(arrayExpr, ctx);
6743
6999
  const hasCalls = exprHasFunctionCalls(arrayExpr);
6744
- const isStaticArray = !isSignalOrMemoArray(array, ctx) && !hasCalls;
7000
+ const isDirectPropArray = method !== "flatMap" && isArrayExprDirectPropRef(arrayExpr, ctx);
7001
+ const isStaticArray = !isSignalOrMemoArray(array, ctx) && !isDirectPropArray && !hasCalls;
6745
7002
  const nestedComponents = collectNestedComponents(children).filter((c) => c.name !== childComponent?.name);
6746
7003
  return {
6747
7004
  type: "loop",
@@ -6757,6 +7014,7 @@ function transformMapCall(node, ctx, isClientOnly = false, method = "map") {
6757
7014
  slotId: null,
6758
7015
  markerId: `l${ctx.loopMarkerCounter++}`,
6759
7016
  isStaticArray,
7017
+ isPropDerivedArray: isDirectPropArray || undefined,
6760
7018
  callsReactiveGetters: callsReactive || undefined,
6761
7019
  hasFunctionCalls: hasCalls || undefined,
6762
7020
  bodyIsMultiRoot: bodyIsMultiRoot || undefined,
@@ -7016,6 +7274,10 @@ function getAttributeValue(attr, ctx) {
7016
7274
  expr = branchInit;
7017
7275
  }
7018
7276
  }
7277
+ if (ts10.isAwaitExpression(expr)) {
7278
+ ctx.analyzer.errors.push(createError(ErrorCodes.STAGE_AWAIT_IN_TEMPLATE, getSourceLocation(expr, ctx.sourceFile, ctx.filePath)));
7279
+ return AttrValueOf.expression("undefined");
7280
+ }
7019
7281
  checkBareSignalOrMemoIdentifier(expr, ctx);
7020
7282
  if (attr.name.getText(ctx.sourceFile) === "style" && ts10.isObjectLiteralExpression(expr)) {
7021
7283
  const cssString = tryStaticStyleObjectToCss(expr);
@@ -7337,6 +7599,20 @@ function checkBareSignalOrMemoIdentifier(expr, ctx) {
7337
7599
  }
7338
7600
  }
7339
7601
  }
7602
+ function isArrayExprDirectPropRef(arrayExpr, ctx) {
7603
+ const propNames = new Set(ctx.patterns.props.map((p) => p.name));
7604
+ const propsObjName = ctx.analyzer.propsObjectName;
7605
+ if (ts10.isIdentifier(arrayExpr)) {
7606
+ return propNames.has(arrayExpr.text);
7607
+ }
7608
+ if (ts10.isPropertyAccessExpression(arrayExpr) && propsObjName) {
7609
+ const obj = arrayExpr.expression;
7610
+ if (ts10.isIdentifier(obj) && obj.text === propsObjName) {
7611
+ return true;
7612
+ }
7613
+ }
7614
+ return false;
7615
+ }
7340
7616
  function isSignalOrMemoArray(array, ctx) {
7341
7617
  for (const { pattern } of ctx.patterns.signals) {
7342
7618
  if (pattern.test(array))
@@ -12798,14 +13074,11 @@ function buildReactiveEmit(inner, level, wrapOuter) {
12798
13074
  }));
12799
13075
  const reactiveAttrs = inner.bindings.reactiveAttrs.map((attr) => {
12800
13076
  const wrapped = wrapLoopParamAsAccessor(wrapOuter(attr.expression), inner.param, inner.paramBindings);
12801
- const isStyleObject = attr.attrName === "style" && /^\s*\{/.test(attr.expression);
12802
13077
  return {
12803
13078
  slotId: attr.childSlotId,
12804
- attrName: toHtmlAttrName(attr.attrName),
13079
+ attrName: attr.attrName,
12805
13080
  wrappedExpression: wrapped,
12806
- isStyleObject,
12807
- isBoolean: isBooleanAttr(attr.attrName),
12808
- presenceOrUndefined: !!attr.presenceOrUndefined
13081
+ meta: pickAttrMeta(attr)
12809
13082
  };
12810
13083
  });
12811
13084
  const preludeStatements = [];
@@ -13838,16 +14111,11 @@ function emitReactive(lines, inner, indent) {
13838
14111
  for (const attr of emit.reactiveAttrs) {
13839
14112
  const targetVar = `__ta_${attr.slotId.replace(/[^a-zA-Z0-9]/g, "_")}`;
13840
14113
  lines.push(`${indent} { const ${targetVar} = qsa(__innerEl${uid}, '[bf="${attr.slotId}"]')`);
13841
- if (attr.isStyleObject) {
13842
- lines.push(`${indent} if (${targetVar}) createEffect(() => { const __v = styleToCss(${attr.wrappedExpression}); if (__v != null) ${targetVar}.setAttribute('style', __v); else ${targetVar}.removeAttribute('style') }) }`);
13843
- } else if (attr.isBoolean) {
13844
- lines.push(`${indent} if (${targetVar}) createEffect(() => { if (${attr.wrappedExpression}) ${targetVar}.setAttribute('${attr.attrName}', ''); else ${targetVar}.removeAttribute('${attr.attrName}') }) }`);
13845
- } else if (attr.presenceOrUndefined) {
13846
- const ariaVal = attr.attrName.startsWith("aria-") ? "'true'" : "''";
13847
- lines.push(`${indent} if (${targetVar}) createEffect(() => { if (${attr.wrappedExpression}) ${targetVar}.setAttribute('${attr.attrName}', ${ariaVal}); else ${targetVar}.removeAttribute('${attr.attrName}') }) }`);
13848
- } else {
13849
- lines.push(`${indent} if (${targetVar}) createEffect(() => { const __v = ${attr.wrappedExpression}; if (__v != null) ${targetVar}.setAttribute('${attr.attrName}', String(__v)); else ${targetVar}.removeAttribute('${attr.attrName}') }) }`);
14114
+ lines.push(`${indent} if (${targetVar}) createEffect(() => {`);
14115
+ for (const stmt of emitAttrUpdate(targetVar, attr.attrName, attr.wrappedExpression, attr.meta)) {
14116
+ lines.push(`${indent} ${stmt}`);
13850
14117
  }
14118
+ lines.push(`${indent} }) }`);
13851
14119
  }
13852
14120
  emitLoopChildRefs(lines, emit.childRefs, {
13853
14121
  indent: `${indent} `,