@barefootjs/jsx 0.2.0 → 0.4.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/debug.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * Provides static analysis of signal dependency graphs, update propagation
5
5
  * paths, and component reactive structure — all without running any code.
6
6
  */
7
- import type { ComponentIR, SourceLocation } from './types';
7
+ import type { ComponentIR, IRMetadata, SourceLocation } from './types';
8
8
  import { listComponentFunctions } from './analyzer';
9
9
  import type { WrapReason } from './ir-to-client-js/reactivity';
10
10
  export interface SignalNode {
@@ -113,7 +113,14 @@ export interface EventBinding {
113
113
  export interface SetterRef {
114
114
  setter: string;
115
115
  signal: string | null;
116
- via?: string;
116
+ /**
117
+ * Call chain from the handler to the setter, when the setter is reached
118
+ * through one or more local helper functions. For a handler that calls
119
+ * the setter directly this is omitted. For `onClick={handlePointerDown}`
120
+ * where `handlePointerDown` calls `setValue` which calls `setInternalValue`,
121
+ * this is `['handlePointerDown', 'setValue']`.
122
+ */
123
+ via?: string[];
117
124
  }
118
125
  export interface EventSummary {
119
126
  componentName: string;
@@ -142,6 +149,44 @@ export interface LoopSummary {
142
149
  sourceFile: string;
143
150
  loops: LoopInfo[];
144
151
  }
152
+ export interface WhyUpdateResult {
153
+ binding: string;
154
+ expression: string | null;
155
+ deps: WhyUpdateDep[];
156
+ classification?: 'reactive' | 'fallback';
157
+ wrapReason?: WrapReason;
158
+ ambiguous?: Array<{
159
+ label: string;
160
+ slotId: string;
161
+ }>;
162
+ }
163
+ export interface WhyUpdateDep {
164
+ name: string;
165
+ kind: 'signal' | 'memo';
166
+ dependsOn: string[];
167
+ changedBy: WhyUpdateSource[];
168
+ }
169
+ export interface WhyUpdateSource {
170
+ handler: string;
171
+ setter: string;
172
+ elementContext: string;
173
+ via?: string[];
174
+ }
175
+ export interface ComponentSummary {
176
+ componentName: string;
177
+ sourceFile: string;
178
+ hydrated: boolean;
179
+ clientBundle: string | null;
180
+ signals: number;
181
+ memos: number;
182
+ effects: number;
183
+ loops: number;
184
+ eventHandlers: number;
185
+ dynamicTextBindings: number;
186
+ dynamicAttributes: number;
187
+ conditionals: number;
188
+ fallbacks: number;
189
+ }
145
190
  export interface ComponentAnalysis {
146
191
  graph: ComponentGraph;
147
192
  ir: ComponentIR;
@@ -166,6 +211,19 @@ export declare function buildComponentAnalysis(source: string, filePath: string,
166
211
  * and downstream update paths.
167
212
  */
168
213
  export declare function buildEventSummary(source: string, filePath: string, componentName?: string): EventSummary;
214
+ export declare function escapeForIdBoundary(name: string): string;
215
+ export declare function makeIdCallRegex(name: string): RegExp;
216
+ /**
217
+ * A setter reachable from a local function, with the chain of intermediate
218
+ * function names between that function and the setter (excluding the function
219
+ * itself). For a direct call the chain is empty.
220
+ */
221
+ export interface FnSetterResolution {
222
+ setter: string;
223
+ chain: string[];
224
+ }
225
+ export declare function buildLocalFunctionSetterMap(meta: IRMetadata, setterToSignal: Map<string, string>): Map<string, FnSetterResolution[]>;
226
+ export declare function resolveSetters(handler: string, setterToSignal: Map<string, string>, fnSetters: Map<string, FnSetterResolution[]>): SetterRef[];
169
227
  /**
170
228
  * Format an event summary as a human-readable string for `bf debug events`.
171
229
  * Uses the graph to trace downstream updates for each setter.
@@ -178,6 +236,8 @@ export declare function formatLoopSummary(summary: LoopSummary): string;
178
236
  * Shows all downstream effects, memos, and DOM bindings.
179
237
  */
180
238
  export declare function traceUpdatePath(graph: ComponentGraph, targetName: string): UpdatePath | null;
239
+ export declare function buildWhyUpdate(source: string, filePath: string, bindingLabel: string, componentName?: string): WhyUpdateResult | null;
240
+ export declare function formatWhyUpdate(result: WhyUpdateResult): string;
181
241
  /** Format the component graph as a human-readable string for `bf debug graph`. */
182
242
  export declare function formatComponentGraph(graph: ComponentGraph): string;
183
243
  /** Format an update path as a human-readable string for `bf debug trace`. */
@@ -199,5 +259,21 @@ export interface SignalTrace {
199
259
  export declare function generateStaticTrace(graph: ComponentGraph): SignalTrace[];
200
260
  /** Format a signal trace as a human-readable string. */
201
261
  export declare function formatSignalTrace(traces: SignalTrace[]): string;
262
+ export interface FallbackExplanation {
263
+ label: string;
264
+ expression: string;
265
+ reason: string;
266
+ runtimeDeps: string;
267
+ suggestion: string;
268
+ loc?: {
269
+ file: string;
270
+ line: number;
271
+ };
272
+ isEventHandler: boolean;
273
+ }
274
+ export declare function describeFallback(binding: DomBinding): FallbackExplanation;
275
+ export declare function formatFallbackExplanations(componentName: string, fallbacks: DomBinding[]): string;
276
+ export declare function buildComponentSummary(source: string, filePath: string, componentName?: string): ComponentSummary;
277
+ export declare function formatComponentSummary(summary: ComponentSummary): string;
202
278
  export { listComponentFunctions };
203
279
  //# sourceMappingURL=debug.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -169,8 +169,8 @@ export { parseExpression, isSupported, exprToString, stringifyParsedExpr, identi
169
169
  export type { ParsedExpr, ParsedStatement, SortComparator, SupportLevel, SupportResult, TemplatePart } from './expression-parser';
170
170
  export { buildLoopChainExpr } from './loop-chain';
171
171
  export type { LoopChainInputs } from './loop-chain';
172
- export { buildComponentGraph, buildComponentAnalysis, buildGraphFromIR, buildEventSummary, buildLoopSummary, traceUpdatePath, formatComponentGraph, formatUpdatePath, formatEventSummary, formatLoopSummary, formatSignalTrace, generateStaticTrace, graphToJSON, } from './debug';
173
- export type { ComponentGraph, ComponentAnalysis, SignalNode, MemoNode, EffectNode, DomBinding, UpdatePath, SignalTrace, EventBinding, SetterRef, EventSummary, LoopInfo, LoopChildBinding, LoopSummary } from './debug';
172
+ export { buildComponentGraph, buildComponentAnalysis, buildGraphFromIR, buildEventSummary, buildLoopSummary, buildWhyUpdate, traceUpdatePath, formatComponentGraph, formatUpdatePath, formatEventSummary, formatLoopSummary, formatWhyUpdate, describeFallback, formatFallbackExplanations, buildComponentSummary, formatComponentSummary, formatSignalTrace, generateStaticTrace, graphToJSON, resolveSetters, buildLocalFunctionSetterMap, makeIdCallRegex, } from './debug';
173
+ export type { ComponentGraph, ComponentAnalysis, SignalNode, MemoNode, EffectNode, DomBinding, UpdatePath, SignalTrace, EventBinding, SetterRef, FnSetterResolution, EventSummary, LoopInfo, LoopChildBinding, LoopSummary, WhyUpdateResult, WhyUpdateDep, WhyUpdateSource, FallbackExplanation, ComponentSummary } from './debug';
174
174
  export type { WrapReason } from './ir-to-client-js/reactivity';
175
175
  export { BOOLEAN_ATTRS, isBooleanAttr } from './html-constants';
176
176
  export type { TargetedEvent, TargetedInputEvent, TargetedFocusEvent, TargetedKeyboardEvent, TargetedMouseEvent, InputEventHandler, FocusEventHandler, KeyboardEventHandler, MouseEventHandler, ChangeEventHandler, BaseEventAttributes, HTMLBaseAttributes, HTMLAttributeFormEnctype, HTMLAttributeFormMethod, HTMLAttributeAnchorTarget, ButtonHTMLAttributes, InputHTMLAttributes, TextareaHTMLAttributes, SelectHTMLAttributes, FormHTMLAttributes, AnchorHTMLAttributes, ImgHTMLAttributes, LabelHTMLAttributes, OptionHTMLAttributes, } from './html-types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1652,6 +1652,9 @@ function irToComponentTemplateWithOpts(node, opts) {
1652
1652
  }
1653
1653
  return `\${${transformExpr(node.expr, node.templateExpr)}}`;
1654
1654
  case "conditional": {
1655
+ if (node.clientOnly && node.slotId) {
1656
+ return `<!--bf-cond-start:${node.slotId}--><!--bf-cond-end:${node.slotId}-->`;
1657
+ }
1655
1658
  const trueBranch = recurse(node.whenTrue);
1656
1659
  const falseBranch = recurse(node.whenFalse);
1657
1660
  const trueHtml = node.slotId ? addCondAttrToTemplate(trueBranch, node.slotId) : trueBranch;
@@ -1882,6 +1885,9 @@ function generateCsrTemplateWithOpts(node, opts) {
1882
1885
  return `\${${expr}}`;
1883
1886
  }
1884
1887
  case "conditional": {
1888
+ if (node.clientOnly && node.slotId) {
1889
+ return `<!--bf-cond-start:${node.slotId}--><!--bf-cond-end:${node.slotId}-->`;
1890
+ }
1885
1891
  const trueBranch = recurse(node.whenTrue);
1886
1892
  const falseBranch = recurse(node.whenFalse);
1887
1893
  const trueHtml = node.slotId ? addCondAttrToTemplate(trueBranch, node.slotId) : trueBranch;
@@ -7274,7 +7280,7 @@ function transformExpressionInner(expr, ctx, node, isClientOnly) {
7274
7280
  }
7275
7281
  const ir = transformJsxExpression(expr, ctx, isClientOnly);
7276
7282
  if (ir !== null) {
7277
- if (isClientOnly && ir.type === "conditional") {
7283
+ if ((isClientOnly || shouldAutoDeferReactiveBrand(expr, ctx)) && ir.type === "conditional") {
7278
7284
  ir.clientOnly = true;
7279
7285
  if (!ir.slotId) {
7280
7286
  ir.slotId = generateSlotId(ctx);
@@ -8625,7 +8631,7 @@ function processAttributes(attributes, ctx) {
8625
8631
  value = { ...value, templateExpr: rewritten };
8626
8632
  }
8627
8633
  }
8628
- if (hasLeadingClientDirective(attr.initializer.expression, ctx.sourceFile)) {
8634
+ if (hasLeadingClientDirective(attr.initializer.expression, ctx.sourceFile) || shouldAutoDeferReactiveBrand(attr.initializer.expression, ctx)) {
8629
8635
  clientOnly = true;
8630
8636
  }
8631
8637
  }
@@ -9029,6 +9035,16 @@ function isReactiveExpression(expr, ctx, astNode) {
9029
9035
  }
9030
9036
  return false;
9031
9037
  }
9038
+ function shouldAutoDeferReactiveBrand(expr, ctx) {
9039
+ const checker = ctx.analyzer.checker;
9040
+ if (!checker)
9041
+ return false;
9042
+ if (!containsReactiveExpression(expr, checker))
9043
+ return false;
9044
+ if (isSignalOrMemoReference(ctx.getJS(expr), ctx))
9045
+ return false;
9046
+ return true;
9047
+ }
9032
9048
  function isSignalOrMemoReference(expr, ctx, visited) {
9033
9049
  for (const { pattern } of ctx.patterns.signals) {
9034
9050
  if (pattern.test(expr))
@@ -17205,15 +17221,57 @@ function makeIdRefRegex(name) {
17205
17221
  }
17206
17222
  function buildLocalFunctionSetterMap(meta, setterToSignal) {
17207
17223
  const setterPatterns = [...setterToSignal.keys()].map((s) => ({ name: s, re: makeIdCallRegex(s) }));
17208
- const result = new Map;
17209
- for (const fn of meta.localFunctions) {
17224
+ const bodies = new Map;
17225
+ for (const fn of meta.localFunctions)
17226
+ bodies.set(fn.name, fn.body);
17227
+ for (const c of meta.localConstants) {
17228
+ if (c.containsArrow && c.value)
17229
+ bodies.set(c.name, c.value);
17230
+ }
17231
+ const fnNamePatterns = [...bodies.keys()].map((n) => ({ name: n, re: makeIdCallRegex(n) }));
17232
+ const directSetters = new Map;
17233
+ const directCalls = new Map;
17234
+ for (const [name, body] of bodies) {
17210
17235
  const setters = [];
17211
- for (const { name, re } of setterPatterns) {
17212
- if (re.test(fn.body))
17213
- setters.push(name);
17236
+ for (const { name: setter, re } of setterPatterns) {
17237
+ if (re.test(body))
17238
+ setters.push(setter);
17239
+ }
17240
+ directSetters.set(name, setters);
17241
+ const calls = [];
17242
+ for (const { name: callee, re } of fnNamePatterns) {
17243
+ if (callee !== name && re.test(body))
17244
+ calls.push(callee);
17245
+ }
17246
+ directCalls.set(name, calls);
17247
+ }
17248
+ const resolve2 = (name, stack) => {
17249
+ const out = [];
17250
+ const seen = new Set;
17251
+ for (const setter of directSetters.get(name) ?? []) {
17252
+ if (!seen.has(setter)) {
17253
+ out.push({ setter, chain: [] });
17254
+ seen.add(setter);
17255
+ }
17214
17256
  }
17215
- if (setters.length > 0)
17216
- result.set(fn.name, setters);
17257
+ for (const callee of directCalls.get(name) ?? []) {
17258
+ if (stack.has(callee))
17259
+ continue;
17260
+ const sub = resolve2(callee, new Set([...stack, callee]));
17261
+ for (const r of sub) {
17262
+ if (!seen.has(r.setter)) {
17263
+ out.push({ setter: r.setter, chain: [callee, ...r.chain] });
17264
+ seen.add(r.setter);
17265
+ }
17266
+ }
17267
+ }
17268
+ return out;
17269
+ };
17270
+ const result = new Map;
17271
+ for (const name of bodies.keys()) {
17272
+ const resolved = resolve2(name, new Set([name]));
17273
+ if (resolved.length > 0)
17274
+ result.set(name, resolved);
17217
17275
  }
17218
17276
  return result;
17219
17277
  }
@@ -17308,12 +17366,16 @@ function resolveSetters(handler, setterToSignal, fnSetters) {
17308
17366
  }
17309
17367
  }
17310
17368
  }
17311
- for (const [fnName, setters] of fnSetters) {
17369
+ for (const [fnName, resolutions] of fnSetters) {
17312
17370
  if (trimmed === fnName || makeIdCallRegex(fnName).test(handler)) {
17313
- for (const setter of setters) {
17314
- if (!seen.has(setter)) {
17315
- refs.push({ setter, signal: setterToSignal.get(setter) ?? null, via: fnName });
17316
- seen.add(setter);
17371
+ for (const r of resolutions) {
17372
+ if (!seen.has(r.setter)) {
17373
+ refs.push({
17374
+ setter: r.setter,
17375
+ signal: setterToSignal.get(r.setter) ?? null,
17376
+ via: [fnName, ...r.chain]
17377
+ });
17378
+ seen.add(r.setter);
17317
17379
  }
17318
17380
  }
17319
17381
  }
@@ -17349,7 +17411,7 @@ function formatEventSummary(summary, graph) {
17349
17411
  lines.push("");
17350
17412
  lines.push(` ${event.elementContext}`);
17351
17413
  const setterParts = event.setterCalls.map((s) => {
17352
- const chain = s.via ? `${s.via} -> ${s.setter}` : s.setter;
17414
+ const chain = s.via && s.via.length > 0 ? `${s.via.join(" -> ")} -> ${s.setter}` : s.setter;
17353
17415
  return chain;
17354
17416
  });
17355
17417
  const setterStr = setterParts.length > 0 ? setterParts.join(", ") : event.handler;
@@ -17641,6 +17703,100 @@ function buildUpdateEntry(consumer, graph, visited) {
17641
17703
  }
17642
17704
  return { name: consumer, kind: "effect", label: consumer, children: [] };
17643
17705
  }
17706
+ function buildWhyUpdate(source, filePath, bindingLabel, componentName) {
17707
+ const { graph, ir } = buildComponentAnalysis(source, filePath, componentName);
17708
+ const matches = graph.domBindings.filter((d) => d.label === bindingLabel || d.slotId === bindingLabel);
17709
+ if (matches.length === 0)
17710
+ return null;
17711
+ if (matches.length > 1) {
17712
+ return {
17713
+ binding: bindingLabel,
17714
+ expression: null,
17715
+ deps: [],
17716
+ ambiguous: matches.map((d) => ({ label: d.label, slotId: d.slotId }))
17717
+ };
17718
+ }
17719
+ const binding = matches[0];
17720
+ const setterToSignal = new Map;
17721
+ for (const s of ir.metadata.signals) {
17722
+ if (s.setter)
17723
+ setterToSignal.set(s.setter, s.getter);
17724
+ }
17725
+ const fnSetters = buildLocalFunctionSetterMap(ir.metadata, setterToSignal);
17726
+ const events = collectEventBindings(ir.root, setterToSignal, fnSetters);
17727
+ const deps = [];
17728
+ const visited = new Set;
17729
+ function traceDep(name) {
17730
+ if (visited.has(name))
17731
+ return;
17732
+ visited.add(name);
17733
+ const signal = graph.signals.find((s) => s.name === name);
17734
+ if (signal) {
17735
+ const changedBy = [];
17736
+ for (const ev of events) {
17737
+ for (const sc of ev.setterCalls) {
17738
+ if (sc.signal === name) {
17739
+ changedBy.push({
17740
+ handler: ev.eventName,
17741
+ setter: sc.setter,
17742
+ elementContext: ev.elementContext,
17743
+ via: sc.via
17744
+ });
17745
+ }
17746
+ }
17747
+ }
17748
+ deps.push({ name, kind: "signal", dependsOn: [], changedBy });
17749
+ return;
17750
+ }
17751
+ const memo = graph.memos.find((m) => m.name === name);
17752
+ if (memo) {
17753
+ deps.push({ name, kind: "memo", dependsOn: memo.deps, changedBy: [] });
17754
+ for (const dep of memo.deps)
17755
+ traceDep(dep);
17756
+ }
17757
+ }
17758
+ for (const dep of binding.deps)
17759
+ traceDep(dep);
17760
+ const stableId = binding.type === "attribute" ? binding.label : binding.slotId;
17761
+ return {
17762
+ binding: stableId,
17763
+ expression: binding.expression ?? null,
17764
+ deps,
17765
+ ...binding.classification === "fallback" && { classification: binding.classification },
17766
+ ...binding.wrapReason && { wrapReason: binding.wrapReason }
17767
+ };
17768
+ }
17769
+ function formatWhyUpdate(result) {
17770
+ const lines = [];
17771
+ lines.push(`${result.binding} updates because:`);
17772
+ if (result.expression) {
17773
+ lines.push(` ${result.expression}`);
17774
+ }
17775
+ if (result.classification === "fallback") {
17776
+ lines.push("");
17777
+ lines.push(`note: this is a fallback-wrapped binding (${result.wrapReason ?? "unknown"})`);
17778
+ lines.push(" the compiler could not statically prove reactivity — deps are determined at runtime");
17779
+ }
17780
+ for (const dep of result.deps) {
17781
+ lines.push("");
17782
+ if (dep.kind === "memo") {
17783
+ lines.push(`${dep.name} depends on:`);
17784
+ for (const d of dep.dependsOn)
17785
+ lines.push(` ${d}`);
17786
+ } else {
17787
+ lines.push(`${dep.name} changes from:`);
17788
+ if (dep.changedBy.length === 0) {
17789
+ lines.push(" (no event handlers found)");
17790
+ }
17791
+ for (const src of dep.changedBy) {
17792
+ const chain = src.via && src.via.length > 0 ? `${src.elementContext} ${src.handler} -> ${src.via.join(" -> ")} -> ${src.setter}` : `${src.elementContext} ${src.handler} -> ${src.setter}`;
17793
+ lines.push(` ${chain}`);
17794
+ }
17795
+ }
17796
+ }
17797
+ return lines.join(`
17798
+ `);
17799
+ }
17644
17800
  function formatComponentGraph(graph) {
17645
17801
  const lines = [];
17646
17802
  lines.push(`${graph.componentName} (${graph.sourceFile})`);
@@ -17816,6 +17972,157 @@ function formatSignalTrace(traces) {
17816
17972
  }).join(`
17817
17973
  `);
17818
17974
  }
17975
+ function describeFallback(binding) {
17976
+ const isEventHandler = binding.type === "event" || binding.type === "attribute" && /^on[A-Z]/.test(binding.label.split(".").pop() ?? "");
17977
+ const reason = describeFallbackReason(binding.wrapReason, binding.type, isEventHandler);
17978
+ const runtimeDeps = binding.deps.length > 0 ? binding.deps.join(", ") : isEventHandler ? "likely none (event handler captures values, does not track reactively)" : "unknown — subscribes to whatever signals it reads at runtime";
17979
+ const suggestion = isEventHandler ? "event handlers intentionally capture scope values; this fallback is typically safe to ignore" : binding.wrapReason === "fallback-function-calls" ? "inline the reactive source or wrap the result in createMemo so the compiler can prove the dependency" : binding.wrapReason === "fallback-getter-calls" ? "the call looks like a signal getter but is not a known signal; verify the function is pure or extract as createMemo" : "rewrite to use a known signal/memo reference so the compiler can statically prove reactivity";
17980
+ return {
17981
+ label: binding.label,
17982
+ expression: binding.expression ?? "(expression not captured)",
17983
+ reason,
17984
+ runtimeDeps,
17985
+ suggestion,
17986
+ loc: binding.loc ? { file: binding.loc.file, line: binding.loc.start.line } : undefined,
17987
+ isEventHandler
17988
+ };
17989
+ }
17990
+ function describeFallbackReason(wrapReason, bindingType, isEventHandler) {
17991
+ const context = bindingType === "attribute" ? "an attribute expression" : bindingType === "text" ? "a text interpolation" : bindingType === "conditional" ? "a conditional expression" : bindingType === "loop" ? "a loop array expression" : "an expression";
17992
+ switch (wrapReason) {
17993
+ case "fallback-function-calls":
17994
+ return isEventHandler ? `function call in ${context} (event handler prop)` : `opaque function call in ${context} — the compiler cannot prove it is reactive or pure`;
17995
+ case "fallback-getter-calls":
17996
+ return `call pattern resembles a signal getter in ${context}, but is not a recognized signal`;
17997
+ case "string-reactive":
17998
+ return `string-level match found a signal/memo name in ${context}`;
17999
+ case "props-access":
18000
+ return `props.xxx reference in ${context} — reactive via prop forwarding`;
18001
+ case "proven-reactive":
18002
+ return `statically proven reactive in ${context}`;
18003
+ default:
18004
+ return `unknown fallback trigger in ${context}`;
18005
+ }
18006
+ }
18007
+ function formatFallbackExplanations(componentName, fallbacks) {
18008
+ const lines = [];
18009
+ if (fallbacks.length === 0) {
18010
+ lines.push(`${componentName} — no fallback-wrapped expressions.`);
18011
+ return lines.join(`
18012
+ `);
18013
+ }
18014
+ lines.push(`${componentName} — ${fallbacks.length} fallback-wrapped expression(s)`);
18015
+ for (const f of fallbacks) {
18016
+ const ex = describeFallback(f);
18017
+ lines.push("");
18018
+ if (ex.loc) {
18019
+ const locFile = ex.loc.file.split("/").pop() ?? ex.loc.file;
18020
+ lines.push(` ${locFile}:${ex.loc.line}`);
18021
+ }
18022
+ lines.push(` ${ex.label} fallback:`);
18023
+ lines.push(` expression: ${ex.expression}`);
18024
+ lines.push(` reason: ${ex.reason}`);
18025
+ lines.push(` runtime deps: ${ex.runtimeDeps}`);
18026
+ lines.push(` suggestion: ${ex.suggestion}`);
18027
+ }
18028
+ return lines.join(`
18029
+ `);
18030
+ }
18031
+ function buildComponentSummary(source, filePath, componentName) {
18032
+ const { graph, ir } = buildComponentAnalysis(source, filePath, componentName);
18033
+ const meta = ir.metadata;
18034
+ const clientNeeds = analyzeClientNeeds(ir);
18035
+ const hasReactiveState = meta.signals.length > 0 || meta.memos.length > 0 || meta.effects.length > 0;
18036
+ const needsClient = clientNeeds.needsInit && hasReactiveState;
18037
+ let loopCount = 0;
18038
+ countNodeType(ir.root, "loop", () => {
18039
+ loopCount++;
18040
+ });
18041
+ let conditionalCount = 0;
18042
+ countNodeType(ir.root, "conditional", () => {
18043
+ conditionalCount++;
18044
+ });
18045
+ const eventHandlers = graph.domBindings.filter((d) => d.type === "event").length;
18046
+ const textBindings = graph.domBindings.filter((d) => d.type === "text").length;
18047
+ const attrBindings = graph.domBindings.filter((d) => d.type === "attribute").length;
18048
+ const fallbacks = graph.domBindings.filter((d) => d.classification === "fallback").length;
18049
+ let clientBundle = null;
18050
+ if (needsClient) {
18051
+ const base = filePath.replace(/\.[^.]+$/, "").split("/").pop() ?? meta.componentName;
18052
+ clientBundle = `${base}.client.js`;
18053
+ }
18054
+ return {
18055
+ componentName: graph.componentName,
18056
+ sourceFile: graph.sourceFile,
18057
+ hydrated: needsClient,
18058
+ clientBundle,
18059
+ signals: graph.signals.length,
18060
+ memos: graph.memos.length,
18061
+ effects: graph.effects.length,
18062
+ loops: loopCount,
18063
+ eventHandlers,
18064
+ dynamicTextBindings: textBindings,
18065
+ dynamicAttributes: attrBindings,
18066
+ conditionals: conditionalCount,
18067
+ fallbacks
18068
+ };
18069
+ }
18070
+ function countNodeType(node, targetType, cb) {
18071
+ if (node.type === targetType)
18072
+ cb();
18073
+ switch (node.type) {
18074
+ case "element":
18075
+ case "fragment":
18076
+ case "provider":
18077
+ for (const child of node.children)
18078
+ countNodeType(child, targetType, cb);
18079
+ break;
18080
+ case "component":
18081
+ for (const child of node.children)
18082
+ countNodeType(child, targetType, cb);
18083
+ break;
18084
+ case "conditional":
18085
+ countNodeType(node.whenTrue, targetType, cb);
18086
+ countNodeType(node.whenFalse, targetType, cb);
18087
+ break;
18088
+ case "loop":
18089
+ for (const child of node.children)
18090
+ countNodeType(child, targetType, cb);
18091
+ break;
18092
+ case "if-statement":
18093
+ countNodeType(node.consequent, targetType, cb);
18094
+ if (node.alternate)
18095
+ countNodeType(node.alternate, targetType, cb);
18096
+ break;
18097
+ case "async":
18098
+ countNodeType(node.fallback, targetType, cb);
18099
+ for (const child of node.children)
18100
+ countNodeType(child, targetType, cb);
18101
+ break;
18102
+ }
18103
+ }
18104
+ function formatComponentSummary(summary) {
18105
+ const lines = [];
18106
+ lines.push(summary.componentName);
18107
+ lines.push(` hydrated: ${summary.hydrated ? "yes" : "no"}`);
18108
+ if (summary.clientBundle) {
18109
+ lines.push(` client bundle: ${summary.clientBundle}`);
18110
+ }
18111
+ lines.push(` signals: ${summary.signals}`);
18112
+ lines.push(` memos: ${summary.memos}`);
18113
+ if (summary.effects > 0)
18114
+ lines.push(` effects: ${summary.effects}`);
18115
+ lines.push(` loops: ${summary.loops}`);
18116
+ lines.push(` event handlers: ${summary.eventHandlers}`);
18117
+ lines.push(` dynamic text bindings: ${summary.dynamicTextBindings}`);
18118
+ lines.push(` dynamic attributes: ${summary.dynamicAttributes}`);
18119
+ if (summary.conditionals > 0)
18120
+ lines.push(` conditionals: ${summary.conditionals}`);
18121
+ if (summary.fallbacks > 0)
18122
+ lines.push(` fallbacks: ${summary.fallbacks}`);
18123
+ return lines.join(`
18124
+ `);
18125
+ }
17819
18126
  function inferWrapReasonForAttrLike(hasStringReactive, hasPropsRef, flags) {
17820
18127
  if (hasPropsRef)
17821
18128
  return "props-access";
@@ -18056,10 +18363,12 @@ export {
18056
18363
  traceUpdatePath,
18057
18364
  stringifyParsedExpr,
18058
18365
  rewriteImportsForTemplate,
18366
+ resolveSetters,
18059
18367
  resetCompilerCounters,
18060
18368
  parseExpression,
18061
18369
  parseBlockBody,
18062
18370
  needsTypeBasedDetection,
18371
+ makeIdCallRegex,
18063
18372
  listComponentFunctions as listExportedComponents,
18064
18373
  listComponentFunctions,
18065
18374
  jsxToIR,
@@ -18073,12 +18382,15 @@ export {
18073
18382
  generateCodeFrame,
18074
18383
  generateClientJsWithSourceMap,
18075
18384
  generateClientJs,
18385
+ formatWhyUpdate,
18076
18386
  formatUpdatePath,
18077
18387
  formatSignalTrace,
18078
18388
  formatParamWithType,
18079
18389
  formatLoopSummary,
18390
+ formatFallbackExplanations,
18080
18391
  formatEventSummary,
18081
18392
  formatError,
18393
+ formatComponentSummary,
18082
18394
  formatComponentGraph,
18083
18395
  findReachableNames,
18084
18396
  extractSsrDefaults,
@@ -18089,18 +18401,22 @@ export {
18089
18401
  emitIRNode,
18090
18402
  emitAttrValue,
18091
18403
  disableCompilerInstrumentation,
18404
+ describeFallback,
18092
18405
  createProgramForFile,
18093
18406
  createProgramForCorpus,
18094
18407
  createError,
18095
18408
  containsHigherOrder,
18096
18409
  compileJSX,
18097
18410
  combineParentChildClientJs,
18411
+ buildWhyUpdate,
18098
18412
  buildSourceMapFromIR,
18099
18413
  buildMetadata,
18100
18414
  buildLoopSummary,
18101
18415
  buildLoopChainExpr,
18416
+ buildLocalFunctionSetterMap,
18102
18417
  buildGraphFromIR,
18103
18418
  buildEventSummary,
18419
+ buildComponentSummary,
18104
18420
  buildComponentGraph,
18105
18421
  buildComponentAnalysis,
18106
18422
  applyCssLayerPrefix,
@@ -1 +1 @@
1
- {"version":3,"file":"html-template.d.ts","sourceRoot":"","sources":["../../src/ir-to-client-js/html-template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html-template.d.ts","sourceRoot":"","sources":["../../src/ir-to-client-js/html-template.ts"],"names":[],"mappings":"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"}