@reckona/mreact-compiler 0.0.68 → 0.0.69

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.
@@ -1,6 +1,7 @@
1
1
  import type { JsxNodeIr } from "./ir.js";
2
2
  export declare function collectOxcBodyJsxBindingNames(statements: readonly unknown[]): Set<string>;
3
- export declare function collectOxcReactiveReadAliases(code: string, statements: readonly unknown[]): Map<string, string>;
3
+ export declare function collectOxcReactiveReadAliases(code: string, statements: readonly unknown[], reactiveDerivedFunctions?: ReadonlySet<string>): Map<string, string>;
4
+ export declare function collectOxcReactiveDerivedFunctionNames(statements: readonly unknown[]): Set<string>;
4
5
  export declare function rewriteOxcReactiveAliasExpressionCode(code: string, expression: Record<string, unknown>, aliases: ReadonlyMap<string, string> | undefined): string | undefined;
5
6
  export declare function markOxcRenderValueExpressions(nodes: readonly JsxNodeIr[], names: Set<string>, renderMode?: "dynamic" | "html"): void;
6
7
  export declare function isOxcRenderValueExpression(expression: Record<string, unknown>): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"oxc-render-values.d.ts","sourceRoot":"","sources":["../src/oxc-render-values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAczC,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,SAAS,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAkCzF;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,OAAO,EAAE,GAC7B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAuBrB;AAED,wBAAgB,qCAAqC,CACnD,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC/C,MAAM,GAAG,SAAS,CAiCpB;AAiPD,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,EAClB,UAAU,GAAE,SAAS,GAAG,MAAkB,GACzC,IAAI,CA0BN;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAkBvF;AAgBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAU3E"}
1
+ {"version":3,"file":"oxc-render-values.d.ts","sourceRoot":"","sources":["../src/oxc-render-values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAczC,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,SAAS,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAkCzF;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,OAAO,EAAE,EAC9B,wBAAwB,GAAE,WAAW,CAAC,MAAM,CAAa,GACxD,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA4BrB;AAED,wBAAgB,sCAAsC,CACpD,UAAU,EAAE,SAAS,OAAO,EAAE,GAC7B,GAAG,CAAC,MAAM,CAAC,CAmCb;AAED,wBAAgB,qCAAqC,CACnD,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC/C,MAAM,GAAG,SAAS,CAwCpB;AAiTD,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,EAClB,UAAU,GAAE,SAAS,GAAG,MAAkB,GACzC,IAAI,CA0BN;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAkBvF;AAgBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAU3E"}
@@ -30,7 +30,7 @@ export function collectOxcBodyJsxBindingNames(statements) {
30
30
  }
31
31
  return names;
32
32
  }
33
- export function collectOxcReactiveReadAliases(code, statements) {
33
+ export function collectOxcReactiveReadAliases(code, statements, reactiveDerivedFunctions = new Set()) {
34
34
  const aliases = new Map();
35
35
  for (const statement of statements) {
36
36
  const object = readObject(statement);
@@ -43,13 +43,43 @@ export function collectOxcReactiveReadAliases(code, statements) {
43
43
  const initializer = unwrapOxcParentheses(readObject(declaration.init));
44
44
  if (typeof id.name !== "string")
45
45
  continue;
46
- if (!isOxcReactiveAliasExpression(initializer))
46
+ if (!isOxcReactiveAliasExpression(initializer) &&
47
+ !isOxcReactiveDerivedAliasExpression(initializer, reactiveDerivedFunctions)) {
47
48
  continue;
49
+ }
48
50
  aliases.set(id.name, readSource(code, initializer));
49
51
  }
50
52
  }
51
53
  return aliases;
52
54
  }
55
+ export function collectOxcReactiveDerivedFunctionNames(statements) {
56
+ const names = new Set();
57
+ for (const statementValue of statements) {
58
+ const statement = readObject(statementValue);
59
+ if (statement.type === "FunctionDeclaration") {
60
+ const id = readObject(statement.id);
61
+ if (typeof id.name === "string" && isOxcReactiveDerivedFunction(statement)) {
62
+ names.add(id.name);
63
+ }
64
+ continue;
65
+ }
66
+ if (statement.type !== "VariableDeclaration" || statement.kind !== "const") {
67
+ continue;
68
+ }
69
+ for (const declarationValue of readArray(statement.declarations)) {
70
+ const declaration = readObject(declarationValue);
71
+ const id = readObject(declaration.id);
72
+ const initializer = unwrapOxcParentheses(readObject(declaration.init));
73
+ if (typeof id.name === "string" &&
74
+ (initializer.type === "FunctionExpression" ||
75
+ initializer.type === "ArrowFunctionExpression") &&
76
+ isOxcReactiveDerivedFunction(initializer)) {
77
+ names.add(id.name);
78
+ }
79
+ }
80
+ }
81
+ return names;
82
+ }
53
83
  export function rewriteOxcReactiveAliasExpressionCode(code, expression, aliases) {
54
84
  if (aliases === undefined || aliases.size === 0) {
55
85
  return undefined;
@@ -94,7 +124,9 @@ function collectOxcReactiveAliasReplacements(node, parent, parentKey, aliases, s
94
124
  replacements.push({
95
125
  end,
96
126
  start,
97
- text: isOxcShorthandPropertyValue(object, parent) ? `${object.name}: (${replacement})` : `(${replacement})`,
127
+ text: isOxcShorthandPropertyValue(object, parent)
128
+ ? `${object.name}: (${replacement})`
129
+ : `(${replacement})`,
98
130
  });
99
131
  }
100
132
  return;
@@ -236,6 +268,53 @@ function collectOxcBindingNames(node, names) {
236
268
  }
237
269
  }
238
270
  }
271
+ function collectOxcFunctionLocalBindings(functionNode, names) {
272
+ collectOxcBindingNames(functionNode.id, names);
273
+ for (const parameter of readArray(functionNode.params)) {
274
+ collectOxcBindingNames(parameter, names);
275
+ }
276
+ collectOxcLocalBindingsFromNode(readObject(functionNode.body), names);
277
+ }
278
+ function collectOxcLocalBindingsFromNode(node, names) {
279
+ const object = readObject(node);
280
+ if (typeof object.type !== "string" || object.type.startsWith("TS")) {
281
+ return;
282
+ }
283
+ if (object.type === "VariableDeclaration") {
284
+ for (const declaration of readArray(object.declarations)) {
285
+ collectOxcBindingNames(readObject(declaration).id, names);
286
+ }
287
+ }
288
+ else if (object.type === "FunctionDeclaration" || object.type === "ClassDeclaration") {
289
+ collectOxcBindingNames(object.id, names);
290
+ return;
291
+ }
292
+ else if (object.type === "ForOfStatement" || object.type === "ForInStatement") {
293
+ const left = readObject(object.left);
294
+ const declarations = readArray(left.declarations);
295
+ collectOxcBindingNames(declarations.length > 0 ? readObject(declarations[0]).id : object.left, names);
296
+ }
297
+ else if (object.type === "ForStatement") {
298
+ collectOxcLocalBindingsFromNode(object.init, names);
299
+ }
300
+ else if (isOxcFunctionNode(object)) {
301
+ return;
302
+ }
303
+ for (const [key, value] of Object.entries(object)) {
304
+ if (key === "type" || key === "start" || key === "end" || key === "loc") {
305
+ continue;
306
+ }
307
+ if (Array.isArray(value)) {
308
+ for (const item of value) {
309
+ collectOxcLocalBindingsFromNode(item, names);
310
+ }
311
+ continue;
312
+ }
313
+ if (typeof value === "object" && value !== null) {
314
+ collectOxcLocalBindingsFromNode(value, names);
315
+ }
316
+ }
317
+ }
239
318
  function readNumber(value) {
240
319
  return typeof value === "number" ? value : undefined;
241
320
  }
@@ -330,6 +409,96 @@ function isOxcReactiveAliasExpression(expression) {
330
409
  const state = analyzeOxcReactiveAliasExpression(expression);
331
410
  return state.safe && state.reactive;
332
411
  }
412
+ function isOxcReactiveDerivedAliasExpression(expression, reactiveDerivedFunctions) {
413
+ if (reactiveDerivedFunctions.size === 0) {
414
+ return false;
415
+ }
416
+ const unwrappedExpression = unwrapOxcParentheses(expression);
417
+ if (unwrappedExpression.type !== "CallExpression") {
418
+ return false;
419
+ }
420
+ if (readArray(unwrappedExpression.arguments).length !== 0) {
421
+ return false;
422
+ }
423
+ const callee = readObject(unwrappedExpression.callee);
424
+ return (callee.type === "Identifier" &&
425
+ typeof callee.name === "string" &&
426
+ reactiveDerivedFunctions.has(callee.name));
427
+ }
428
+ function isOxcReactiveDerivedFunction(functionNode) {
429
+ if (readArray(functionNode.params).length !== 0) {
430
+ return false;
431
+ }
432
+ const localBindings = new Set();
433
+ collectOxcFunctionLocalBindings(functionNode, localBindings);
434
+ const usage = analyzeOxcReactiveDerivedFunctionUsage(readObject(functionNode.body), localBindings);
435
+ return usage.reactive && usage.safe;
436
+ }
437
+ function analyzeOxcReactiveDerivedFunctionUsage(node, localBindings) {
438
+ const object = readObject(node);
439
+ if (typeof object.type !== "string" || object.type.startsWith("TS")) {
440
+ return { reactive: false, safe: true };
441
+ }
442
+ if (isOxcFunctionNode(object)) {
443
+ return { reactive: false, safe: true };
444
+ }
445
+ if (object.type === "CallExpression") {
446
+ const callee = readObject(object.callee);
447
+ const member = callee.type === "MemberExpression" ? callee : undefined;
448
+ const property = readObject(member?.property);
449
+ const owner = readObject(member?.object);
450
+ const propertyName = member?.computed === true
451
+ ? undefined
452
+ : typeof property.name === "string"
453
+ ? property.name
454
+ : undefined;
455
+ const ownerName = owner.type === "Identifier" ? owner.name : undefined;
456
+ if (propertyName === "get" && typeof ownerName === "string" && !localBindings.has(ownerName)) {
457
+ return mergeReactiveAliasStates([
458
+ { reactive: true, safe: true },
459
+ ...readArray(object.arguments).map((argument) => analyzeOxcReactiveDerivedFunctionUsage(argument, localBindings)),
460
+ ]);
461
+ }
462
+ if (propertyName !== undefined &&
463
+ typeof ownerName === "string" &&
464
+ !localBindings.has(ownerName) &&
465
+ isLikelyMutatingMethodName(propertyName)) {
466
+ return { reactive: false, safe: false };
467
+ }
468
+ }
469
+ const states = [];
470
+ for (const [key, value] of Object.entries(object)) {
471
+ if (key === "type" || key === "start" || key === "end" || key === "loc") {
472
+ continue;
473
+ }
474
+ if (Array.isArray(value)) {
475
+ states.push(...value.map((item) => analyzeOxcReactiveDerivedFunctionUsage(item, localBindings)));
476
+ continue;
477
+ }
478
+ if (typeof value === "object" && value !== null) {
479
+ states.push(analyzeOxcReactiveDerivedFunctionUsage(value, localBindings));
480
+ }
481
+ }
482
+ return mergeReactiveAliasStates(states);
483
+ }
484
+ function mergeReactiveAliasStates(states) {
485
+ return states.reduce((merged, state) => ({
486
+ reactive: merged.reactive || state.reactive,
487
+ safe: merged.safe && state.safe,
488
+ }), { reactive: false, safe: true });
489
+ }
490
+ function isLikelyMutatingMethodName(name) {
491
+ return (name === "set" ||
492
+ name === "delete" ||
493
+ name === "clear" ||
494
+ name === "push" ||
495
+ name === "pop" ||
496
+ name === "shift" ||
497
+ name === "unshift" ||
498
+ name === "splice" ||
499
+ name === "sort" ||
500
+ name === "reverse");
501
+ }
333
502
  function analyzeOxcReactiveAliasExpression(expression) {
334
503
  const unwrappedExpression = unwrapOxcParentheses(expression);
335
504
  if (unwrappedExpression.type === "Literal" ||
@@ -1 +1 @@
1
- {"version":3,"file":"oxc-render-values.js","sourceRoot":"","sources":["../src/oxc-render-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsxNodeIr } from \"./ir.js\";\nimport { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\n\ninterface ReactiveAliasReplacement {\n end: number;\n start: number;\n text: string;\n}\n\ninterface ReactiveAliasExpressionState {\n reactive: boolean;\n safe: boolean;\n}\n\nexport function collectOxcBodyJsxBindingNames(statements: readonly unknown[]): Set<string> {\n const names = new Set<string>();\n\n for (const statement of statements) {\n const object = readObject(statement);\n\n if (object.type === \"ForOfStatement\" || object.type === \"ForStatement\") {\n collectOxcPushJsxBindingNames(readArray(readObject(object.body).body), names);\n continue;\n }\n\n if (object.type !== \"VariableDeclaration\") {\n continue;\n }\n\n const declarationKind = typeof object.kind === \"string\" ? object.kind : \"let\";\n const isImmutableBinding = declarationKind === \"const\";\n\n for (const declarationValue of readArray(object.declarations)) {\n const declaration = readObject(declarationValue);\n const id = readObject(declaration.id);\n const initializer = unwrapOxcParentheses(readObject(declaration.init));\n\n if (typeof id.name !== \"string\") continue;\n if (!containsOxcJsxSyntax(initializer)) continue;\n if (!isJsxLikeInitializer(initializer)) continue;\n if (!isImmutableBinding && isBindingReassigned(statements, id.name)) {\n continue;\n }\n names.add(id.name);\n }\n }\n\n return names;\n}\n\nexport function collectOxcReactiveReadAliases(\n code: string,\n statements: readonly unknown[],\n): Map<string, string> {\n const aliases = new Map<string, string>();\n\n for (const statement of statements) {\n const object = readObject(statement);\n\n if (object.type !== \"VariableDeclaration\" || object.kind !== \"const\") {\n continue;\n }\n\n for (const declarationValue of readArray(object.declarations)) {\n const declaration = readObject(declarationValue);\n const id = readObject(declaration.id);\n const initializer = unwrapOxcParentheses(readObject(declaration.init));\n\n if (typeof id.name !== \"string\") continue;\n if (!isOxcReactiveAliasExpression(initializer)) continue;\n\n aliases.set(id.name, readSource(code, initializer));\n }\n }\n\n return aliases;\n}\n\nexport function rewriteOxcReactiveAliasExpressionCode(\n code: string,\n expression: Record<string, unknown>,\n aliases: ReadonlyMap<string, string> | undefined,\n): string | undefined {\n if (aliases === undefined || aliases.size === 0) {\n return undefined;\n }\n\n const expressionStart = readNumber(expression.start);\n const expressionEnd = readNumber(expression.end);\n\n if (expressionStart === undefined || expressionEnd === undefined) {\n return undefined;\n }\n\n const replacements: ReactiveAliasReplacement[] = [];\n collectOxcReactiveAliasReplacements(expression, undefined, undefined, aliases, new Set(), replacements);\n\n if (replacements.length === 0) {\n return undefined;\n }\n\n let source = readSource(code, expression);\n\n for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n const start = replacement.start - expressionStart;\n const end = replacement.end - expressionStart;\n\n if (start < 0 || end > source.length || start > end) {\n return undefined;\n }\n\n source = `${source.slice(0, start)}${replacement.text}${source.slice(end)}`;\n }\n\n return source;\n}\n\nfunction collectOxcReactiveAliasReplacements(\n node: unknown,\n parent: Record<string, unknown> | undefined,\n parentKey: string | undefined,\n aliases: ReadonlyMap<string, string>,\n shadowed: ReadonlySet<string>,\n replacements: ReactiveAliasReplacement[],\n): void {\n const object = readObject(node);\n\n if (typeof object.type !== \"string\") {\n return;\n }\n\n if (object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (\n object.type === \"Identifier\" &&\n typeof object.name === \"string\" &&\n !shadowed.has(object.name) &&\n isOxcReactiveAliasReference(object, parent, parentKey)\n ) {\n const replacement = aliases.get(object.name);\n const start = readNumber(object.start);\n const end = readNumber(object.end);\n\n if (replacement !== undefined && start !== undefined && end !== undefined) {\n replacements.push({\n end,\n start,\n text: isOxcShorthandPropertyValue(object, parent) ? `${object.name}: (${replacement})` : `(${replacement})`,\n });\n }\n return;\n }\n\n if (isOxcFunctionNode(object)) {\n const functionShadowed = new Set(shadowed);\n collectOxcBindingNames(object.id, functionShadowed);\n for (const parameter of readArray(object.params)) {\n collectOxcBindingNames(parameter, functionShadowed);\n }\n collectOxcReactiveAliasReplacements(\n object.body,\n object,\n \"body\",\n aliases,\n addOxcBlockBindingNames(object.body, functionShadowed),\n replacements,\n );\n return;\n }\n\n const childShadowed =\n object.type === \"BlockStatement\" || object.type === \"Program\"\n ? addOxcBlockBindingNames(object, new Set(shadowed))\n : shadowed;\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n if (key === \"id\" && isOxcDeclarationWithId(object)) {\n continue;\n }\n\n if (key === \"params\" && isOxcFunctionNode(object)) {\n continue;\n }\n\n if (key === \"key\" && isOxcNonComputedKey(object)) {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n collectOxcReactiveAliasReplacements(item, object, key, aliases, childShadowed, replacements);\n }\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n collectOxcReactiveAliasReplacements(value, object, key, aliases, childShadowed, replacements);\n }\n }\n}\n\nfunction isOxcReactiveAliasReference(\n node: Record<string, unknown>,\n parent: Record<string, unknown> | undefined,\n parentKey: string | undefined,\n): boolean {\n if (parent === undefined) {\n return true;\n }\n\n if (parent.type === \"MemberExpression\" && parentKey === \"property\" && parent.computed !== true) {\n return false;\n }\n\n if (parentKey === \"id\" && isOxcDeclarationWithId(parent)) {\n return false;\n }\n\n if (parentKey === \"params\" && isOxcFunctionNode(parent)) {\n return false;\n }\n\n if (parentKey === \"key\" && isOxcNonComputedKey(parent)) {\n return isOxcShorthandPropertyValue(node, parent);\n }\n\n if (\n (parent.type === \"BreakStatement\" ||\n parent.type === \"ContinueStatement\" ||\n parent.type === \"LabeledStatement\") &&\n parentKey === \"label\"\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction isOxcShorthandPropertyValue(\n node: Record<string, unknown>,\n parent: Record<string, unknown> | undefined,\n): boolean {\n const key = readObject(parent?.key);\n return (\n parent !== undefined &&\n (parent.type === \"Property\" || parent.type === \"ObjectProperty\") &&\n parent.shorthand === true &&\n parent.value === node &&\n readNumber(key.start) === readNumber(node.start) &&\n readNumber(key.end) === readNumber(node.end)\n );\n}\n\nfunction isOxcNonComputedKey(node: Record<string, unknown>): boolean {\n return (\n (node.type === \"Property\" ||\n node.type === \"ObjectProperty\" ||\n node.type === \"PropertyDefinition\" ||\n node.type === \"MethodDefinition\") &&\n node.computed !== true\n );\n}\n\nfunction isOxcDeclarationWithId(node: Record<string, unknown>): boolean {\n return (\n node.type === \"VariableDeclarator\" ||\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\" ||\n node.type === \"ClassDeclaration\" ||\n node.type === \"ClassExpression\"\n );\n}\n\nfunction isOxcFunctionNode(node: Record<string, unknown>): boolean {\n return (\n node.type === \"ArrowFunctionExpression\" ||\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\"\n );\n}\n\nfunction addOxcBlockBindingNames(\n node: unknown,\n shadowed: Set<string>,\n): ReadonlySet<string> {\n const object = readObject(node);\n const body = readArray(object.body);\n\n if (body.length === 0) {\n return shadowed;\n }\n\n for (const statement of body) {\n collectOxcStatementBindingNames(statement, shadowed);\n }\n\n return shadowed;\n}\n\nfunction collectOxcStatementBindingNames(node: unknown, names: Set<string>): void {\n const object = readObject(node);\n\n if (object.type === \"VariableDeclaration\") {\n for (const declaration of readArray(object.declarations)) {\n collectOxcBindingNames(readObject(declaration).id, names);\n }\n return;\n }\n\n if (object.type === \"FunctionDeclaration\" || object.type === \"ClassDeclaration\") {\n collectOxcBindingNames(object.id, names);\n }\n}\n\nfunction collectOxcBindingNames(node: unknown, names: Set<string>): void {\n const object = readObject(node);\n\n if (object.type === \"Identifier\" && typeof object.name === \"string\") {\n names.add(object.name);\n return;\n }\n\n if (object.type === \"RestElement\") {\n collectOxcBindingNames(object.argument, names);\n return;\n }\n\n if (object.type === \"AssignmentPattern\") {\n collectOxcBindingNames(object.left, names);\n return;\n }\n\n if (object.type === \"ArrayPattern\") {\n for (const element of readArray(object.elements)) {\n collectOxcBindingNames(element, names);\n }\n return;\n }\n\n if (object.type === \"ObjectPattern\") {\n for (const property of readArray(object.properties)) {\n collectOxcBindingNames(readObject(property).value ?? readObject(property).argument, names);\n }\n }\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nexport function markOxcRenderValueExpressions(\n nodes: readonly JsxNodeIr[],\n names: Set<string>,\n renderMode: \"dynamic\" | \"html\" = \"dynamic\",\n): void {\n if (names.size === 0) {\n return;\n }\n\n for (const node of nodes) {\n if (node.kind === \"expr\" && names.has(node.code)) {\n node.renderMode = renderMode;\n continue;\n }\n\n if (node.kind === \"conditional\") {\n markOxcRenderValueExpressions(node.whenTrue, names, renderMode);\n markOxcRenderValueExpressions(node.whenFalse, names, renderMode);\n continue;\n }\n\n if (node.kind === \"list\") {\n markOxcRenderValueExpressions(node.children, names, renderMode);\n continue;\n }\n\n if (node.kind === \"fragment\" || node.kind === \"element\" || node.kind === \"component\") {\n markOxcRenderValueExpressions(node.children, names, renderMode);\n }\n }\n}\n\nexport function isOxcRenderValueExpression(expression: Record<string, unknown>): boolean {\n if (isOxcRendererCallExpression(expression)) {\n return true;\n }\n\n if (expression.type !== \"MemberExpression\") {\n return false;\n }\n\n const object = readObject(expression.object);\n const property = readObject(expression.property);\n\n return (\n object.type === \"Identifier\" &&\n object.name === \"props\" &&\n typeof property.name === \"string\" &&\n [\"children\", \"fallback\", \"header\", \"sidebar\", \"element\"].includes(property.name)\n );\n}\n\nfunction isOxcRendererCallExpression(expression: Record<string, unknown>): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = readObject(expression.callee);\n\n return (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n /^render[A-Z0-9_$]/.test(callee.name)\n );\n}\n\nexport function containsOxcJsxSyntax(node: Record<string, unknown>): boolean {\n if (node.type === \"JSXElement\" || node.type === \"JSXFragment\") {\n return true;\n }\n\n return Object.values(node).some((value) =>\n Array.isArray(value)\n ? value.some((item) => containsOxcJsxSyntax(readObject(item)))\n : typeof value === \"object\" && value !== null && containsOxcJsxSyntax(readObject(value)),\n );\n}\n\nfunction isJsxLikeInitializer(node: Record<string, unknown>): boolean {\n if (node.type === \"JSXElement\" || node.type === \"JSXFragment\") return true;\n if (node.type === \"ConditionalExpression\") {\n return (\n isJsxLikeInitializer(readObject(node.consequent)) ||\n isJsxLikeInitializer(readObject(node.alternate))\n );\n }\n if (node.type === \"LogicalExpression\") {\n return (\n isJsxLikeInitializer(readObject(node.left)) || isJsxLikeInitializer(readObject(node.right))\n );\n }\n if (node.type === \"ArrayExpression\" || node.type === \"ObjectExpression\") {\n return false;\n }\n return containsOxcJsxSyntax(node);\n}\n\nfunction isBindingReassigned(statements: readonly unknown[], name: string): boolean {\n for (const statement of statements) {\n if (containsAssignmentTo(readObject(statement), name)) return true;\n }\n return false;\n}\n\nfunction isOxcReactiveReadExpression(expression: Record<string, unknown>): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = readObject(expression.callee);\n\n if (callee.type !== \"MemberExpression\" || callee.computed === true || callee.optional === true) {\n return false;\n }\n\n const property = readObject(callee.property);\n\n return property.type === \"Identifier\" && property.name === \"get\";\n}\n\nfunction isOxcReactiveAliasExpression(expression: Record<string, unknown>): boolean {\n const state = analyzeOxcReactiveAliasExpression(expression);\n return state.safe && state.reactive;\n}\n\nfunction analyzeOxcReactiveAliasExpression(\n expression: Record<string, unknown>,\n): ReactiveAliasExpressionState {\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (\n unwrappedExpression.type === \"Literal\" ||\n unwrappedExpression.type === \"Identifier\" ||\n unwrappedExpression.type === \"ThisExpression\"\n ) {\n return { reactive: false, safe: true };\n }\n\n if (isOxcReactiveReadExpression(unwrappedExpression)) {\n return { reactive: true, safe: true };\n }\n\n if (unwrappedExpression.type === \"ChainExpression\") {\n return analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.expression));\n }\n\n if (\n unwrappedExpression.type === \"TSAsExpression\" ||\n unwrappedExpression.type === \"TSSatisfiesExpression\" ||\n unwrappedExpression.type === \"TSNonNullExpression\" ||\n unwrappedExpression.type === \"TSInstantiationExpression\" ||\n unwrappedExpression.type === \"TypeCastExpression\"\n ) {\n return analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.expression));\n }\n\n if (unwrappedExpression.type === \"MemberExpression\") {\n const objectState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.object));\n const propertyState =\n unwrappedExpression.computed === true\n ? analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.property))\n : { reactive: false, safe: true };\n\n return {\n reactive: objectState.reactive || propertyState.reactive,\n safe: objectState.safe && propertyState.safe,\n };\n }\n\n if (unwrappedExpression.type === \"UnaryExpression\") {\n return analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.argument));\n }\n\n if (\n unwrappedExpression.type === \"BinaryExpression\" ||\n unwrappedExpression.type === \"LogicalExpression\"\n ) {\n const leftState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.left));\n const rightState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.right));\n\n return {\n reactive: leftState.reactive || rightState.reactive,\n safe: leftState.safe && rightState.safe,\n };\n }\n\n if (unwrappedExpression.type === \"ConditionalExpression\") {\n const testState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.test));\n const consequentState = analyzeOxcReactiveAliasExpression(\n readObject(unwrappedExpression.consequent),\n );\n const alternateState = analyzeOxcReactiveAliasExpression(\n readObject(unwrappedExpression.alternate),\n );\n\n return {\n reactive: testState.reactive || consequentState.reactive || alternateState.reactive,\n safe: testState.safe && consequentState.safe && alternateState.safe,\n };\n }\n\n return { reactive: false, safe: false };\n}\n\nfunction containsAssignmentTo(node: Record<string, unknown>, name: string): boolean {\n if (node.type === \"AssignmentExpression\") {\n const left = readObject(node.left);\n if (left.type === \"Identifier\" && left.name === name) return true;\n }\n if (node.type === \"UpdateExpression\") {\n const argument = readObject(node.argument);\n if (argument.type === \"Identifier\" && argument.name === name) return true;\n }\n for (const value of Object.values(node)) {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (\n typeof item === \"object\" &&\n item !== null &&\n containsAssignmentTo(readObject(item), name)\n ) {\n return true;\n }\n }\n } else if (typeof value === \"object\" && value !== null) {\n if (containsAssignmentTo(readObject(value), name)) return true;\n }\n }\n return false;\n}\n\nfunction collectOxcPushJsxBindingNames(statements: readonly unknown[], names: Set<string>): void {\n for (const statement of statements) {\n const object = readObject(statement);\n\n if (object.type === \"ForOfStatement\" || object.type === \"ForStatement\") {\n collectOxcPushJsxBindingNames(readArray(readObject(object.body).body), names);\n continue;\n }\n\n const expression = readObject(object.expression);\n\n if (object.type !== \"ExpressionStatement\" || expression.type !== \"CallExpression\") {\n continue;\n }\n\n const callee = readObject(expression.callee);\n const argument = unwrapOxcParentheses(readObject(readArray(expression.arguments)[0]));\n\n if (\n callee.type !== \"MemberExpression\" ||\n readObject(callee.property).name !== \"push\" ||\n !containsOxcJsxSyntax(argument)\n ) {\n continue;\n }\n\n const target = readObject(callee.object);\n\n if (typeof target.name === \"string\") {\n names.add(target.name);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"oxc-render-values.js","sourceRoot":"","sources":["../src/oxc-render-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsxNodeIr } from \"./ir.js\";\nimport { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\n\ninterface ReactiveAliasReplacement {\n end: number;\n start: number;\n text: string;\n}\n\ninterface ReactiveAliasExpressionState {\n reactive: boolean;\n safe: boolean;\n}\n\nexport function collectOxcBodyJsxBindingNames(statements: readonly unknown[]): Set<string> {\n const names = new Set<string>();\n\n for (const statement of statements) {\n const object = readObject(statement);\n\n if (object.type === \"ForOfStatement\" || object.type === \"ForStatement\") {\n collectOxcPushJsxBindingNames(readArray(readObject(object.body).body), names);\n continue;\n }\n\n if (object.type !== \"VariableDeclaration\") {\n continue;\n }\n\n const declarationKind = typeof object.kind === \"string\" ? object.kind : \"let\";\n const isImmutableBinding = declarationKind === \"const\";\n\n for (const declarationValue of readArray(object.declarations)) {\n const declaration = readObject(declarationValue);\n const id = readObject(declaration.id);\n const initializer = unwrapOxcParentheses(readObject(declaration.init));\n\n if (typeof id.name !== \"string\") continue;\n if (!containsOxcJsxSyntax(initializer)) continue;\n if (!isJsxLikeInitializer(initializer)) continue;\n if (!isImmutableBinding && isBindingReassigned(statements, id.name)) {\n continue;\n }\n names.add(id.name);\n }\n }\n\n return names;\n}\n\nexport function collectOxcReactiveReadAliases(\n code: string,\n statements: readonly unknown[],\n reactiveDerivedFunctions: ReadonlySet<string> = new Set(),\n): Map<string, string> {\n const aliases = new Map<string, string>();\n\n for (const statement of statements) {\n const object = readObject(statement);\n\n if (object.type !== \"VariableDeclaration\" || object.kind !== \"const\") {\n continue;\n }\n\n for (const declarationValue of readArray(object.declarations)) {\n const declaration = readObject(declarationValue);\n const id = readObject(declaration.id);\n const initializer = unwrapOxcParentheses(readObject(declaration.init));\n\n if (typeof id.name !== \"string\") continue;\n if (\n !isOxcReactiveAliasExpression(initializer) &&\n !isOxcReactiveDerivedAliasExpression(initializer, reactiveDerivedFunctions)\n ) {\n continue;\n }\n\n aliases.set(id.name, readSource(code, initializer));\n }\n }\n\n return aliases;\n}\n\nexport function collectOxcReactiveDerivedFunctionNames(\n statements: readonly unknown[],\n): Set<string> {\n const names = new Set<string>();\n\n for (const statementValue of statements) {\n const statement = readObject(statementValue);\n\n if (statement.type === \"FunctionDeclaration\") {\n const id = readObject(statement.id);\n if (typeof id.name === \"string\" && isOxcReactiveDerivedFunction(statement)) {\n names.add(id.name);\n }\n continue;\n }\n\n if (statement.type !== \"VariableDeclaration\" || statement.kind !== \"const\") {\n continue;\n }\n\n for (const declarationValue of readArray(statement.declarations)) {\n const declaration = readObject(declarationValue);\n const id = readObject(declaration.id);\n const initializer = unwrapOxcParentheses(readObject(declaration.init));\n\n if (\n typeof id.name === \"string\" &&\n (initializer.type === \"FunctionExpression\" ||\n initializer.type === \"ArrowFunctionExpression\") &&\n isOxcReactiveDerivedFunction(initializer)\n ) {\n names.add(id.name);\n }\n }\n }\n\n return names;\n}\n\nexport function rewriteOxcReactiveAliasExpressionCode(\n code: string,\n expression: Record<string, unknown>,\n aliases: ReadonlyMap<string, string> | undefined,\n): string | undefined {\n if (aliases === undefined || aliases.size === 0) {\n return undefined;\n }\n\n const expressionStart = readNumber(expression.start);\n const expressionEnd = readNumber(expression.end);\n\n if (expressionStart === undefined || expressionEnd === undefined) {\n return undefined;\n }\n\n const replacements: ReactiveAliasReplacement[] = [];\n collectOxcReactiveAliasReplacements(\n expression,\n undefined,\n undefined,\n aliases,\n new Set(),\n replacements,\n );\n\n if (replacements.length === 0) {\n return undefined;\n }\n\n let source = readSource(code, expression);\n\n for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n const start = replacement.start - expressionStart;\n const end = replacement.end - expressionStart;\n\n if (start < 0 || end > source.length || start > end) {\n return undefined;\n }\n\n source = `${source.slice(0, start)}${replacement.text}${source.slice(end)}`;\n }\n\n return source;\n}\n\nfunction collectOxcReactiveAliasReplacements(\n node: unknown,\n parent: Record<string, unknown> | undefined,\n parentKey: string | undefined,\n aliases: ReadonlyMap<string, string>,\n shadowed: ReadonlySet<string>,\n replacements: ReactiveAliasReplacement[],\n): void {\n const object = readObject(node);\n\n if (typeof object.type !== \"string\") {\n return;\n }\n\n if (object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (\n object.type === \"Identifier\" &&\n typeof object.name === \"string\" &&\n !shadowed.has(object.name) &&\n isOxcReactiveAliasReference(object, parent, parentKey)\n ) {\n const replacement = aliases.get(object.name);\n const start = readNumber(object.start);\n const end = readNumber(object.end);\n\n if (replacement !== undefined && start !== undefined && end !== undefined) {\n replacements.push({\n end,\n start,\n text: isOxcShorthandPropertyValue(object, parent)\n ? `${object.name}: (${replacement})`\n : `(${replacement})`,\n });\n }\n return;\n }\n\n if (isOxcFunctionNode(object)) {\n const functionShadowed = new Set(shadowed);\n collectOxcBindingNames(object.id, functionShadowed);\n for (const parameter of readArray(object.params)) {\n collectOxcBindingNames(parameter, functionShadowed);\n }\n collectOxcReactiveAliasReplacements(\n object.body,\n object,\n \"body\",\n aliases,\n addOxcBlockBindingNames(object.body, functionShadowed),\n replacements,\n );\n return;\n }\n\n const childShadowed =\n object.type === \"BlockStatement\" || object.type === \"Program\"\n ? addOxcBlockBindingNames(object, new Set(shadowed))\n : shadowed;\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n if (key === \"id\" && isOxcDeclarationWithId(object)) {\n continue;\n }\n\n if (key === \"params\" && isOxcFunctionNode(object)) {\n continue;\n }\n\n if (key === \"key\" && isOxcNonComputedKey(object)) {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n collectOxcReactiveAliasReplacements(\n item,\n object,\n key,\n aliases,\n childShadowed,\n replacements,\n );\n }\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n collectOxcReactiveAliasReplacements(value, object, key, aliases, childShadowed, replacements);\n }\n }\n}\n\nfunction isOxcReactiveAliasReference(\n node: Record<string, unknown>,\n parent: Record<string, unknown> | undefined,\n parentKey: string | undefined,\n): boolean {\n if (parent === undefined) {\n return true;\n }\n\n if (parent.type === \"MemberExpression\" && parentKey === \"property\" && parent.computed !== true) {\n return false;\n }\n\n if (parentKey === \"id\" && isOxcDeclarationWithId(parent)) {\n return false;\n }\n\n if (parentKey === \"params\" && isOxcFunctionNode(parent)) {\n return false;\n }\n\n if (parentKey === \"key\" && isOxcNonComputedKey(parent)) {\n return isOxcShorthandPropertyValue(node, parent);\n }\n\n if (\n (parent.type === \"BreakStatement\" ||\n parent.type === \"ContinueStatement\" ||\n parent.type === \"LabeledStatement\") &&\n parentKey === \"label\"\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction isOxcShorthandPropertyValue(\n node: Record<string, unknown>,\n parent: Record<string, unknown> | undefined,\n): boolean {\n const key = readObject(parent?.key);\n return (\n parent !== undefined &&\n (parent.type === \"Property\" || parent.type === \"ObjectProperty\") &&\n parent.shorthand === true &&\n parent.value === node &&\n readNumber(key.start) === readNumber(node.start) &&\n readNumber(key.end) === readNumber(node.end)\n );\n}\n\nfunction isOxcNonComputedKey(node: Record<string, unknown>): boolean {\n return (\n (node.type === \"Property\" ||\n node.type === \"ObjectProperty\" ||\n node.type === \"PropertyDefinition\" ||\n node.type === \"MethodDefinition\") &&\n node.computed !== true\n );\n}\n\nfunction isOxcDeclarationWithId(node: Record<string, unknown>): boolean {\n return (\n node.type === \"VariableDeclarator\" ||\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\" ||\n node.type === \"ClassDeclaration\" ||\n node.type === \"ClassExpression\"\n );\n}\n\nfunction isOxcFunctionNode(node: Record<string, unknown>): boolean {\n return (\n node.type === \"ArrowFunctionExpression\" ||\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\"\n );\n}\n\nfunction addOxcBlockBindingNames(node: unknown, shadowed: Set<string>): ReadonlySet<string> {\n const object = readObject(node);\n const body = readArray(object.body);\n\n if (body.length === 0) {\n return shadowed;\n }\n\n for (const statement of body) {\n collectOxcStatementBindingNames(statement, shadowed);\n }\n\n return shadowed;\n}\n\nfunction collectOxcStatementBindingNames(node: unknown, names: Set<string>): void {\n const object = readObject(node);\n\n if (object.type === \"VariableDeclaration\") {\n for (const declaration of readArray(object.declarations)) {\n collectOxcBindingNames(readObject(declaration).id, names);\n }\n return;\n }\n\n if (object.type === \"FunctionDeclaration\" || object.type === \"ClassDeclaration\") {\n collectOxcBindingNames(object.id, names);\n }\n}\n\nfunction collectOxcBindingNames(node: unknown, names: Set<string>): void {\n const object = readObject(node);\n\n if (object.type === \"Identifier\" && typeof object.name === \"string\") {\n names.add(object.name);\n return;\n }\n\n if (object.type === \"RestElement\") {\n collectOxcBindingNames(object.argument, names);\n return;\n }\n\n if (object.type === \"AssignmentPattern\") {\n collectOxcBindingNames(object.left, names);\n return;\n }\n\n if (object.type === \"ArrayPattern\") {\n for (const element of readArray(object.elements)) {\n collectOxcBindingNames(element, names);\n }\n return;\n }\n\n if (object.type === \"ObjectPattern\") {\n for (const property of readArray(object.properties)) {\n collectOxcBindingNames(readObject(property).value ?? readObject(property).argument, names);\n }\n }\n}\n\nfunction collectOxcFunctionLocalBindings(\n functionNode: Record<string, unknown>,\n names: Set<string>,\n): void {\n collectOxcBindingNames(functionNode.id, names);\n\n for (const parameter of readArray(functionNode.params)) {\n collectOxcBindingNames(parameter, names);\n }\n\n collectOxcLocalBindingsFromNode(readObject(functionNode.body), names);\n}\n\nfunction collectOxcLocalBindingsFromNode(node: unknown, names: Set<string>): void {\n const object = readObject(node);\n\n if (typeof object.type !== \"string\" || object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"VariableDeclaration\") {\n for (const declaration of readArray(object.declarations)) {\n collectOxcBindingNames(readObject(declaration).id, names);\n }\n } else if (object.type === \"FunctionDeclaration\" || object.type === \"ClassDeclaration\") {\n collectOxcBindingNames(object.id, names);\n return;\n } else if (object.type === \"ForOfStatement\" || object.type === \"ForInStatement\") {\n const left = readObject(object.left);\n const declarations = readArray(left.declarations);\n collectOxcBindingNames(\n declarations.length > 0 ? readObject(declarations[0]).id : object.left,\n names,\n );\n } else if (object.type === \"ForStatement\") {\n collectOxcLocalBindingsFromNode(object.init, names);\n } else if (isOxcFunctionNode(object)) {\n return;\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n collectOxcLocalBindingsFromNode(item, names);\n }\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n collectOxcLocalBindingsFromNode(value, names);\n }\n }\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nexport function markOxcRenderValueExpressions(\n nodes: readonly JsxNodeIr[],\n names: Set<string>,\n renderMode: \"dynamic\" | \"html\" = \"dynamic\",\n): void {\n if (names.size === 0) {\n return;\n }\n\n for (const node of nodes) {\n if (node.kind === \"expr\" && names.has(node.code)) {\n node.renderMode = renderMode;\n continue;\n }\n\n if (node.kind === \"conditional\") {\n markOxcRenderValueExpressions(node.whenTrue, names, renderMode);\n markOxcRenderValueExpressions(node.whenFalse, names, renderMode);\n continue;\n }\n\n if (node.kind === \"list\") {\n markOxcRenderValueExpressions(node.children, names, renderMode);\n continue;\n }\n\n if (node.kind === \"fragment\" || node.kind === \"element\" || node.kind === \"component\") {\n markOxcRenderValueExpressions(node.children, names, renderMode);\n }\n }\n}\n\nexport function isOxcRenderValueExpression(expression: Record<string, unknown>): boolean {\n if (isOxcRendererCallExpression(expression)) {\n return true;\n }\n\n if (expression.type !== \"MemberExpression\") {\n return false;\n }\n\n const object = readObject(expression.object);\n const property = readObject(expression.property);\n\n return (\n object.type === \"Identifier\" &&\n object.name === \"props\" &&\n typeof property.name === \"string\" &&\n [\"children\", \"fallback\", \"header\", \"sidebar\", \"element\"].includes(property.name)\n );\n}\n\nfunction isOxcRendererCallExpression(expression: Record<string, unknown>): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = readObject(expression.callee);\n\n return (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n /^render[A-Z0-9_$]/.test(callee.name)\n );\n}\n\nexport function containsOxcJsxSyntax(node: Record<string, unknown>): boolean {\n if (node.type === \"JSXElement\" || node.type === \"JSXFragment\") {\n return true;\n }\n\n return Object.values(node).some((value) =>\n Array.isArray(value)\n ? value.some((item) => containsOxcJsxSyntax(readObject(item)))\n : typeof value === \"object\" && value !== null && containsOxcJsxSyntax(readObject(value)),\n );\n}\n\nfunction isJsxLikeInitializer(node: Record<string, unknown>): boolean {\n if (node.type === \"JSXElement\" || node.type === \"JSXFragment\") return true;\n if (node.type === \"ConditionalExpression\") {\n return (\n isJsxLikeInitializer(readObject(node.consequent)) ||\n isJsxLikeInitializer(readObject(node.alternate))\n );\n }\n if (node.type === \"LogicalExpression\") {\n return (\n isJsxLikeInitializer(readObject(node.left)) || isJsxLikeInitializer(readObject(node.right))\n );\n }\n if (node.type === \"ArrayExpression\" || node.type === \"ObjectExpression\") {\n return false;\n }\n return containsOxcJsxSyntax(node);\n}\n\nfunction isBindingReassigned(statements: readonly unknown[], name: string): boolean {\n for (const statement of statements) {\n if (containsAssignmentTo(readObject(statement), name)) return true;\n }\n return false;\n}\n\nfunction isOxcReactiveReadExpression(expression: Record<string, unknown>): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = readObject(expression.callee);\n\n if (callee.type !== \"MemberExpression\" || callee.computed === true || callee.optional === true) {\n return false;\n }\n\n const property = readObject(callee.property);\n\n return property.type === \"Identifier\" && property.name === \"get\";\n}\n\nfunction isOxcReactiveAliasExpression(expression: Record<string, unknown>): boolean {\n const state = analyzeOxcReactiveAliasExpression(expression);\n return state.safe && state.reactive;\n}\n\nfunction isOxcReactiveDerivedAliasExpression(\n expression: Record<string, unknown>,\n reactiveDerivedFunctions: ReadonlySet<string>,\n): boolean {\n if (reactiveDerivedFunctions.size === 0) {\n return false;\n }\n\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (unwrappedExpression.type !== \"CallExpression\") {\n return false;\n }\n\n if (readArray(unwrappedExpression.arguments).length !== 0) {\n return false;\n }\n\n const callee = readObject(unwrappedExpression.callee);\n\n return (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n reactiveDerivedFunctions.has(callee.name)\n );\n}\n\nfunction isOxcReactiveDerivedFunction(functionNode: Record<string, unknown>): boolean {\n if (readArray(functionNode.params).length !== 0) {\n return false;\n }\n\n const localBindings = new Set<string>();\n collectOxcFunctionLocalBindings(functionNode, localBindings);\n const usage = analyzeOxcReactiveDerivedFunctionUsage(\n readObject(functionNode.body),\n localBindings,\n );\n\n return usage.reactive && usage.safe;\n}\n\nfunction analyzeOxcReactiveDerivedFunctionUsage(\n node: unknown,\n localBindings: ReadonlySet<string>,\n): ReactiveAliasExpressionState {\n const object = readObject(node);\n\n if (typeof object.type !== \"string\" || object.type.startsWith(\"TS\")) {\n return { reactive: false, safe: true };\n }\n\n if (isOxcFunctionNode(object)) {\n return { reactive: false, safe: true };\n }\n\n if (object.type === \"CallExpression\") {\n const callee = readObject(object.callee);\n const member = callee.type === \"MemberExpression\" ? callee : undefined;\n const property = readObject(member?.property);\n const owner = readObject(member?.object);\n const propertyName =\n member?.computed === true\n ? undefined\n : typeof property.name === \"string\"\n ? property.name\n : undefined;\n const ownerName = owner.type === \"Identifier\" ? owner.name : undefined;\n\n if (propertyName === \"get\" && typeof ownerName === \"string\" && !localBindings.has(ownerName)) {\n return mergeReactiveAliasStates([\n { reactive: true, safe: true },\n ...readArray(object.arguments).map((argument) =>\n analyzeOxcReactiveDerivedFunctionUsage(argument, localBindings),\n ),\n ]);\n }\n\n if (\n propertyName !== undefined &&\n typeof ownerName === \"string\" &&\n !localBindings.has(ownerName) &&\n isLikelyMutatingMethodName(propertyName)\n ) {\n return { reactive: false, safe: false };\n }\n }\n\n const states: ReactiveAliasExpressionState[] = [];\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n if (Array.isArray(value)) {\n states.push(\n ...value.map((item) => analyzeOxcReactiveDerivedFunctionUsage(item, localBindings)),\n );\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n states.push(analyzeOxcReactiveDerivedFunctionUsage(value, localBindings));\n }\n }\n\n return mergeReactiveAliasStates(states);\n}\n\nfunction mergeReactiveAliasStates(\n states: readonly ReactiveAliasExpressionState[],\n): ReactiveAliasExpressionState {\n return states.reduce<ReactiveAliasExpressionState>(\n (merged, state) => ({\n reactive: merged.reactive || state.reactive,\n safe: merged.safe && state.safe,\n }),\n { reactive: false, safe: true },\n );\n}\n\nfunction isLikelyMutatingMethodName(name: string): boolean {\n return (\n name === \"set\" ||\n name === \"delete\" ||\n name === \"clear\" ||\n name === \"push\" ||\n name === \"pop\" ||\n name === \"shift\" ||\n name === \"unshift\" ||\n name === \"splice\" ||\n name === \"sort\" ||\n name === \"reverse\"\n );\n}\n\nfunction analyzeOxcReactiveAliasExpression(\n expression: Record<string, unknown>,\n): ReactiveAliasExpressionState {\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (\n unwrappedExpression.type === \"Literal\" ||\n unwrappedExpression.type === \"Identifier\" ||\n unwrappedExpression.type === \"ThisExpression\"\n ) {\n return { reactive: false, safe: true };\n }\n\n if (isOxcReactiveReadExpression(unwrappedExpression)) {\n return { reactive: true, safe: true };\n }\n\n if (unwrappedExpression.type === \"ChainExpression\") {\n return analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.expression));\n }\n\n if (\n unwrappedExpression.type === \"TSAsExpression\" ||\n unwrappedExpression.type === \"TSSatisfiesExpression\" ||\n unwrappedExpression.type === \"TSNonNullExpression\" ||\n unwrappedExpression.type === \"TSInstantiationExpression\" ||\n unwrappedExpression.type === \"TypeCastExpression\"\n ) {\n return analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.expression));\n }\n\n if (unwrappedExpression.type === \"MemberExpression\") {\n const objectState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.object));\n const propertyState =\n unwrappedExpression.computed === true\n ? analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.property))\n : { reactive: false, safe: true };\n\n return {\n reactive: objectState.reactive || propertyState.reactive,\n safe: objectState.safe && propertyState.safe,\n };\n }\n\n if (unwrappedExpression.type === \"UnaryExpression\") {\n return analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.argument));\n }\n\n if (\n unwrappedExpression.type === \"BinaryExpression\" ||\n unwrappedExpression.type === \"LogicalExpression\"\n ) {\n const leftState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.left));\n const rightState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.right));\n\n return {\n reactive: leftState.reactive || rightState.reactive,\n safe: leftState.safe && rightState.safe,\n };\n }\n\n if (unwrappedExpression.type === \"ConditionalExpression\") {\n const testState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.test));\n const consequentState = analyzeOxcReactiveAliasExpression(\n readObject(unwrappedExpression.consequent),\n );\n const alternateState = analyzeOxcReactiveAliasExpression(\n readObject(unwrappedExpression.alternate),\n );\n\n return {\n reactive: testState.reactive || consequentState.reactive || alternateState.reactive,\n safe: testState.safe && consequentState.safe && alternateState.safe,\n };\n }\n\n return { reactive: false, safe: false };\n}\n\nfunction containsAssignmentTo(node: Record<string, unknown>, name: string): boolean {\n if (node.type === \"AssignmentExpression\") {\n const left = readObject(node.left);\n if (left.type === \"Identifier\" && left.name === name) return true;\n }\n if (node.type === \"UpdateExpression\") {\n const argument = readObject(node.argument);\n if (argument.type === \"Identifier\" && argument.name === name) return true;\n }\n for (const value of Object.values(node)) {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (\n typeof item === \"object\" &&\n item !== null &&\n containsAssignmentTo(readObject(item), name)\n ) {\n return true;\n }\n }\n } else if (typeof value === \"object\" && value !== null) {\n if (containsAssignmentTo(readObject(value), name)) return true;\n }\n }\n return false;\n}\n\nfunction collectOxcPushJsxBindingNames(statements: readonly unknown[], names: Set<string>): void {\n for (const statement of statements) {\n const object = readObject(statement);\n\n if (object.type === \"ForOfStatement\" || object.type === \"ForStatement\") {\n collectOxcPushJsxBindingNames(readArray(readObject(object.body).body), names);\n continue;\n }\n\n const expression = readObject(object.expression);\n\n if (object.type !== \"ExpressionStatement\" || expression.type !== \"CallExpression\") {\n continue;\n }\n\n const callee = readObject(expression.callee);\n const argument = unwrapOxcParentheses(readObject(readArray(expression.arguments)[0]));\n\n if (\n callee.type !== \"MemberExpression\" ||\n readObject(callee.property).name !== \"push\" ||\n !containsOxcJsxSyntax(argument)\n ) {\n continue;\n }\n\n const target = readObject(callee.object);\n\n if (typeof target.name === \"string\") {\n names.add(target.name);\n }\n }\n}\n"]}
package/dist/oxc.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"oxc.d.ts","sourceRoot":"","sources":["../src/oxc.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAkC,QAAQ,EAAE,MAAM,SAAS,CAAC;AAiFxE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE;QACH,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,EAAE,CAAC,EAAE,QAAQ,CAAC;QACd,sBAAsB,EAAE,OAAO,CAAC;QAChC,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AA+CD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,eAAe,CA6BzE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAQzE;AAED,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,GACjD,iBAAiB,CAWnB"}
1
+ {"version":3,"file":"oxc.d.ts","sourceRoot":"","sources":["../src/oxc.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAkC,QAAQ,EAAE,MAAM,SAAS,CAAC;AAkFxE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE;QACH,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,EAAE,CAAC,EAAE,QAAQ,CAAC;QACd,sBAAsB,EAAE,OAAO,CAAC;QAChC,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AA+CD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,eAAe,CA6BzE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAQzE;AAED,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,GACjD,iBAAiB,CAWnB"}
package/dist/oxc.js CHANGED
@@ -16,7 +16,7 @@ import { analyzeOxcExpressionChild, analyzeOxcJsxNode, } from "./oxc-child-analy
16
16
  import { lowerOxcDomNodeExpression } from "./oxc-dom-lowering.js";
17
17
  import { lowerOxcCompatObjectExpression, lowerOxcCompatReactNodeExpression, lowerOxcNestedJsxExpression, lowerOxcServerStringExpression, } from "./oxc-nested-lowering.js";
18
18
  import { isOxcJsxBranch, readOxcReturnExpressionFromStatement, } from "./oxc-expression-utils.js";
19
- import { collectOxcBodyJsxBindingNames, collectOxcReactiveReadAliases, containsOxcJsxSyntax, markOxcRenderValueExpressions, rewriteOxcReactiveAliasExpressionCode, } from "./oxc-render-values.js";
19
+ import { collectOxcBodyJsxBindingNames, collectOxcReactiveDerivedFunctionNames, collectOxcReactiveReadAliases, containsOxcJsxSyntax, markOxcRenderValueExpressions, rewriteOxcReactiveAliasExpressionCode, } from "./oxc-render-values.js";
20
20
  import { containsRawJsxInIr } from "./oxc-raw-jsx.js";
21
21
  const oxcBodyLowerers = createOxcBodyLowerers();
22
22
  function createOxcBodyLowerers(compatRuntimeImports = new Map()) {
@@ -105,6 +105,7 @@ function analyzeOxcToIr(code, program, target, options) {
105
105
  const compatRuntimeImports = collectOxcCompatRuntimeImportComponents(program);
106
106
  const bodyLowerers = createOxcBodyLowerers(compatRuntimeImports);
107
107
  const moduleRenderValueBindings = collectOxcBodyJsxBindingNames(body);
108
+ const reactiveDerivedFunctionNames = collectOxcReactiveDerivedFunctionNames(body);
108
109
  for (const statement of body) {
109
110
  const object = readObject(statement);
110
111
  if (object.type === "ImportDeclaration") {
@@ -156,7 +157,7 @@ function analyzeOxcToIr(code, program, target, options) {
156
157
  const componentNames = componentNamesFromProgram(program, moduleBindingNames);
157
158
  const componentCallNames = options?.serverOutput === "stream" ? componentCallNamesFromProgram(program) : undefined;
158
159
  const asyncComponentNames = collectOxcAsyncComponentNames(program);
159
- const components = body.flatMap((statement) => analyzeOxcComponent(code, statement, componentNames, target, diagnostics, options?.bodyStatementJsx ?? "dom-node", moduleRenderValueBindings, options?.compatReactNodeReturn === true, options?.serverOutput, componentCallNames, bodyLowerers));
160
+ const components = body.flatMap((statement) => analyzeOxcComponent(code, statement, componentNames, target, diagnostics, options?.bodyStatementJsx ?? "dom-node", moduleRenderValueBindings, options?.compatReactNodeReturn === true, options?.serverOutput, componentCallNames, bodyLowerers, reactiveDerivedFunctionNames));
160
161
  for (const component of components) {
161
162
  markOxcAsyncComponentReferences(component.root, asyncComponentNames);
162
163
  markOxcClientReferences(component.root, clientBoundaryImports);
@@ -195,7 +196,7 @@ function componentCallNamesFromProgram(program) {
195
196
  ...collectOxcPlainComponentNames(program),
196
197
  ]);
197
198
  }
198
- function analyzeOxcComponent(code, statement, componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers) {
199
+ function analyzeOxcComponent(code, statement, componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers, reactiveDerivedFunctionNames) {
199
200
  const object = readObject(statement);
200
201
  if (object.type === "ExportDefaultDeclaration") {
201
202
  const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));
@@ -205,7 +206,7 @@ function analyzeOxcComponent(code, statement, componentNames, target, diagnostic
205
206
  const id = readObject(declaration.id);
206
207
  const name = typeof id.name === "string" ? id.name : "DefaultExport";
207
208
  return [
208
- analyzeOxcFunctionLikeComponent(code, name, declaration, "default", componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers, true),
209
+ analyzeOxcFunctionLikeComponent(code, name, declaration, "default", componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers, reactiveDerivedFunctionNames, true),
209
210
  ];
210
211
  }
211
212
  if (object.type !== "ExportNamedDeclaration") {
@@ -215,7 +216,7 @@ function analyzeOxcComponent(code, statement, componentNames, target, diagnostic
215
216
  }
216
217
  return [
217
218
  {
218
- ...analyzeOxcFunctionLikeComponent(code, plainComponent.name, plainComponent.initializer, plainComponent.name, componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers),
219
+ ...analyzeOxcFunctionLikeComponent(code, plainComponent.name, plainComponent.initializer, plainComponent.name, componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers, reactiveDerivedFunctionNames),
219
220
  exported: false,
220
221
  },
221
222
  ];
@@ -227,7 +228,7 @@ function analyzeOxcComponent(code, statement, componentNames, target, diagnostic
227
228
  return [];
228
229
  }
229
230
  return [
230
- analyzeOxcFunctionLikeComponent(code, variableComponent.name, variableComponent.initializer, variableComponent.name, componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers),
231
+ analyzeOxcFunctionLikeComponent(code, variableComponent.name, variableComponent.initializer, variableComponent.name, componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers, reactiveDerivedFunctionNames),
231
232
  ];
232
233
  }
233
234
  if (declaration.type !== "FunctionDeclaration" ||
@@ -239,10 +240,10 @@ function analyzeOxcComponent(code, statement, componentNames, target, diagnostic
239
240
  return [];
240
241
  }
241
242
  return [
242
- analyzeOxcFunctionLikeComponent(code, id.name, declaration, id.name, componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers),
243
+ analyzeOxcFunctionLikeComponent(code, id.name, declaration, id.name, componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers, reactiveDerivedFunctionNames),
243
244
  ];
244
245
  }
245
- function analyzeOxcFunctionLikeComponent(code, name, functionLike, exportName, componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers, exportDefault = false) {
246
+ function analyzeOxcFunctionLikeComponent(code, name, functionLike, exportName, componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers, reactiveDerivedFunctionNames, exportDefault = false) {
246
247
  const functionBody = readObject(functionLike.body);
247
248
  const body = functionBody.type === "BlockStatement" ? readArray(functionBody.body) : [];
248
249
  const earlyIfRootReturn = bodyStatementJsx === "compat-object" ? undefined : findOxcEarlyIfRootReturn(body);
@@ -262,7 +263,7 @@ function analyzeOxcFunctionLikeComponent(code, name, functionLike, exportName, c
262
263
  bodyStatement !== earlyIfRootReturn?.fallthroughStatement)
263
264
  .map((bodyStatement) => lowerOxcBodyStatementJsx(code, bodyStatement, componentNames, target, diagnostics, bodyStatementJsx, bodyLowerers) ?? formatOxcBodyStatement(code, bodyStatement, bodyStatementJsx));
264
265
  const componentBodyBindings = collectOxcVariableInitializers(body);
265
- const reactiveAliasBindings = collectOxcReactiveReadAliases(code, body);
266
+ const reactiveAliasBindings = collectOxcReactiveReadAliases(code, body, reactiveDerivedFunctionNames);
266
267
  const childAnalysisContext = createOxcChildAnalysisContext(componentNames, target, diagnostics, bodyStatementJsx, componentBodyBindings, reactiveAliasBindings, serverOutput, componentCallNames, bodyLowerers);
267
268
  const root = analyzeOxcEarlyIfRootReturn(code, earlyIfRootReturn, childAnalysisContext, bodyStatementJsx) ??
268
269
  analyzeOxcSwitchRootReturn(code, rootStatement, childAnalysisContext, bodyStatementJsx) ??
package/dist/oxc.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"oxc.js","sourceRoot":"","sources":["../src/oxc.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseSync } from \"oxc-parser\";\nimport { unsupportedTopLevelJsxInitializerDiagnostic } from \"./diagnostics.js\";\nimport {\n type AnalyzeToIrInput,\n type AnalyzeToIrOutput,\n} from \"./internal.js\";\nimport {\n createCompilerModuleContextWithOxc,\n type CompilerModuleContext,\n} from \"./compiler-module-context.js\";\nimport type { ClientReferenceIr, ComponentIr, ModuleIr } from \"./ir.js\";\nimport { transformJsxToCreateElementWithOxc } from \"./oxc-transform.js\";\nimport {\n arraysEqual,\n getOxcLocation,\n getOxcLocationFromOffset,\n readArray,\n readObject,\n readSource,\n unwrapOxcParentheses,\n} from \"./oxc-node-utils.js\";\nimport { assignOxcAwaitIds } from \"./oxc-await-ids.js\";\nimport {\n validateOxcAwaitCompatComponents,\n validateOxcNestedAwait,\n} from \"./oxc-await-validation.js\";\nimport type { OxcBodyStatementJsxMode } from \"./oxc-analysis-types.js\";\nimport {\n collectBindingNames,\n collectImportBindingNames,\n formatStatement,\n readOxcParameterName,\n} from \"./oxc-bindings.js\";\nimport {\n formatOxcBodyStatement,\n formatPreservedStatement,\n lowerOxcBodyStatementJsx,\n lowerOxcTopLevelStatement,\n type OxcBodyLowerers,\n} from \"./oxc-body-lowering.js\";\nimport { collectOxcVariableInitializers } from \"./oxc-await-analysis.js\";\nimport {\n collectOxcAsyncComponentNames,\n collectOxcExportedComponents,\n collectOxcExportedFunctionNames,\n collectOxcPlainComponentNames,\n hasComponentReturn,\n hasOxcFunctionLikeComponentReturn,\n isOxcExportedFunctionLike,\n isOxcComponentCallExpression,\n isJsxRoot,\n isOxcJsxComponentStatement,\n isOxcUnsupportedExportedFunction,\n readOxcPlainComponent,\n readOxcVariableComponentDeclaration,\n unwrapOxcComponentFunctionLikeInitializer,\n} from \"./oxc-component-detection.js\";\nimport {\n collectOxcClientBoundaryImportComponents,\n collectOxcCompatRuntimeImportComponents,\n markOxcAsyncComponentReferences,\n markOxcClientReferences,\n markOxcCompatRuntimeReferences,\n} from \"./oxc-component-references.js\";\nimport { normalizeOxcExpressionCode, stripOxcGeneratedImports } from \"./oxc-code-utils.js\";\nimport {\n analyzeOxcExpressionChild,\n analyzeOxcJsxNode,\n type OxcChildAnalysisContext,\n} from \"./oxc-child-analysis.js\";\nimport { lowerOxcDomNodeExpression } from \"./oxc-dom-lowering.js\";\nimport {\n lowerOxcCompatObjectExpression,\n lowerOxcCompatReactNodeExpression,\n lowerOxcNestedJsxExpression,\n lowerOxcServerStringExpression,\n} from \"./oxc-nested-lowering.js\";\nimport {\n isOxcJsxBranch,\n readOxcReturnExpressionFromStatement,\n} from \"./oxc-expression-utils.js\";\nimport {\n collectOxcBodyJsxBindingNames,\n collectOxcReactiveReadAliases,\n containsOxcJsxSyntax,\n markOxcRenderValueExpressions,\n rewriteOxcReactiveAliasExpressionCode,\n} from \"./oxc-render-values.js\";\nimport { containsRawJsxInIr } from \"./oxc-raw-jsx.js\";\nimport type { AnalyzeModuleOptions, CompileTarget, Diagnostic } from \"./types.js\";\n\nexport interface OxcParityResult {\n matches: boolean;\n oxc: {\n errors: string[];\n exportedComponents: string[];\n ir?: ModuleIr;\n usedTypescriptFallback: boolean;\n rawJsxDetected: boolean;\n };\n}\n\nconst oxcBodyLowerers: OxcBodyLowerers = createOxcBodyLowerers();\n\nfunction createOxcBodyLowerers(\n compatRuntimeImports: ReadonlyMap<string, ClientReferenceIr> = new Map(),\n): OxcBodyLowerers {\n return {\n lowerDomNodeExpression: lowerOxcDomNodeExpression,\n lowerCompatObjectExpression: lowerOxcCompatObjectExpression,\n lowerServerStringExpression: (code, expression, componentNames, target, diagnostics) =>\n lowerOxcServerStringExpression(\n code,\n expression,\n componentNames,\n target,\n diagnostics,\n compatRuntimeImports,\n ),\n };\n}\n\nfunction createOxcChildAnalysisContext(\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n componentBodyBindings?: ReadonlyMap<string, Record<string, unknown>>,\n reactiveAliasBindings?: ReadonlyMap<string, string>,\n serverOutput?: AnalyzeModuleOptions[\"serverOutput\"],\n componentCallNames?: Set<string>,\n bodyLowerers: OxcBodyLowerers = oxcBodyLowerers,\n): OxcChildAnalysisContext {\n return {\n componentNames,\n ...(componentCallNames === undefined ? {} : { componentCallNames }),\n target,\n ...(serverOutput === undefined ? {} : { serverOutput }),\n diagnostics,\n ...(bodyStatementJsx === undefined ? {} : { bodyStatementJsx }),\n ...(componentBodyBindings === undefined ? {} : { componentBodyBindings }),\n ...(reactiveAliasBindings === undefined ? {} : { reactiveAliasBindings }),\n bodyLowerers,\n lowerNestedJsxExpression: lowerOxcNestedJsxExpression,\n };\n}\n\nexport function analyzeOxcParity(input: AnalyzeToIrInput): OxcParityResult {\n const oxc = parseSync(input.filename, input.code, {\n lang: \"tsx\",\n sourceType: \"module\",\n astType: \"ts\",\n });\n const oxcExportedComponents = collectOxcExportedComponents(oxc.program);\n const oxcOutput = analyzeOxcToIr(input.code, oxc.program, input.target, input.options);\n const rawJsxDetected = containsRawJsxInIr(oxcOutput.ir);\n\n return {\n matches:\n oxc.errors.length === 0 &&\n oxcOutput.diagnostics.length === 0 &&\n !rawJsxDetected &&\n arraysEqual(\n oxcExportedComponents,\n oxcOutput.ir.components\n .filter((component) => component.exported !== false)\n .map((component) => component.exportName),\n ),\n oxc: {\n errors: oxc.errors.map((error) => error.message),\n exportedComponents: oxcExportedComponents,\n ir: oxcOutput.ir,\n usedTypescriptFallback: false,\n rawJsxDetected,\n },\n };\n}\n\nexport function analyzeWithOxc(input: AnalyzeToIrInput): AnalyzeToIrOutput {\n return analyzeCompilerModuleContextWithOxc(\n createCompilerModuleContextWithOxc(input),\n {\n target: input.target,\n ...(input.options === undefined ? {} : { options: input.options }),\n },\n );\n}\n\nexport function analyzeCompilerModuleContextWithOxc(\n context: CompilerModuleContext,\n input: Omit<AnalyzeToIrInput, \"code\" | \"filename\">,\n): AnalyzeToIrOutput {\n const analyzed = analyzeOxcToIr(context.code, context.program, input.target, input.options);\n\n return {\n ir: analyzed.ir,\n diagnostics: [\n ...context.parseErrors.map((error) => oxcParseErrorDiagnostic(context.code, error)),\n ...analyzed.diagnostics,\n ],\n usedTypescriptFallback: false,\n };\n}\n\nfunction oxcParseErrorDiagnostic(code: string, error: unknown): Diagnostic {\n const object = readObject(error);\n const firstLabel = readObject(readArray(object.labels)[0]);\n const loc =\n typeof firstLabel.start === \"number\"\n ? getOxcLocationFromOffset(code, firstLabel.start)\n : undefined;\n\n return {\n level: \"error\",\n code:\n object.message === \"Unexpected token\" ? \"MR_INVALID_JSX_EXPRESSION\" : \"MR_OXC_PARSE_ERROR\",\n message: typeof object.message === \"string\" ? object.message : \"Oxc parse error\",\n ...(loc === undefined ? {} : { loc }),\n };\n}\n\nfunction analyzeOxcToIr(\n code: string,\n program: unknown,\n target: CompileTarget,\n options?: AnalyzeModuleOptions,\n): { ir: ModuleIr; diagnostics: Diagnostic[] } {\n const body = readArray(readObject(program).body);\n const userImports: string[] = [];\n const moduleStatements: string[] = [];\n const moduleBindingNames = new Set<string>();\n const diagnostics: Diagnostic[] = [];\n const clientBoundaryImports = collectOxcClientBoundaryImportComponents(\n program,\n new Set(options?.clientBoundaryImports ?? []),\n );\n const compatRuntimeImports = collectOxcCompatRuntimeImportComponents(program);\n const bodyLowerers = createOxcBodyLowerers(compatRuntimeImports);\n const moduleRenderValueBindings = collectOxcBodyJsxBindingNames(body);\n\n for (const statement of body) {\n const object = readObject(statement);\n\n if (object.type === \"ImportDeclaration\") {\n const importCode = formatStatement(code, statement);\n const source = readObject(object.source).value;\n\n if (importCode !== \"\" && !(target === \"server\" && isCssImportSource(source))) {\n userImports.push(importCode);\n }\n for (const bindingName of collectImportBindingNames(statement)) {\n moduleBindingNames.add(bindingName);\n }\n continue;\n }\n\n if (\n isOxcJsxComponentStatement(statement) ||\n (options?.compatReactNodeReturn === true && isOxcExportedFunctionLike(statement))\n ) {\n const declaration = readObject(readObject(statement).declaration);\n\n if (declaration.type === \"VariableDeclaration\") {\n for (const bindingName of collectBindingNames(declaration)) {\n moduleBindingNames.add(bindingName);\n }\n }\n continue;\n } else {\n if (isOxcUnsupportedExportedFunction(statement, options)) {\n diagnostics.push({\n level: \"error\",\n code: \"MR_UNSUPPORTED_COMPONENT_RETURN\",\n message: \"Exported component must return a JSX element or supported React node.\",\n });\n continue;\n }\n const loweredTopLevel = lowerOxcTopLevelStatement(\n code,\n statement,\n componentNamesFromProgram(program, moduleBindingNames),\n target,\n diagnostics,\n options,\n bodyLowerers,\n );\n const formattedStatement =\n loweredTopLevel ?? formatPreservedStatement(code, statement, options);\n\n if (\n loweredTopLevel === undefined &&\n containsOxcJsxSyntax(object) &&\n options?.topLevelJsx !== \"compat-object\" &&\n options?.topLevelJsx !== \"server-string\"\n ) {\n diagnostics.push(\n unsupportedTopLevelJsxInitializerDiagnostic(getOxcLocation(code, statement)),\n );\n }\n\n if (formattedStatement !== \"\") {\n moduleStatements.push(formattedStatement);\n }\n for (const bindingName of collectBindingNames(statement)) {\n moduleBindingNames.add(bindingName);\n }\n }\n }\n\n const componentNames = componentNamesFromProgram(program, moduleBindingNames);\n const componentCallNames =\n options?.serverOutput === \"stream\" ? componentCallNamesFromProgram(program) : undefined;\n const asyncComponentNames = collectOxcAsyncComponentNames(program);\n const components = body.flatMap((statement) =>\n analyzeOxcComponent(\n code,\n statement,\n componentNames,\n target,\n diagnostics,\n options?.bodyStatementJsx ?? \"dom-node\",\n moduleRenderValueBindings,\n options?.compatReactNodeReturn === true,\n options?.serverOutput,\n componentCallNames,\n bodyLowerers,\n ),\n );\n\n for (const component of components) {\n markOxcAsyncComponentReferences(component.root, asyncComponentNames);\n markOxcClientReferences(component.root, clientBoundaryImports);\n markOxcCompatRuntimeReferences(component.root, compatRuntimeImports);\n validateOxcNestedAwait(component.root, diagnostics);\n validateOxcAwaitCompatComponents(component.root, diagnostics, {\n allowCompatComponents: options?.awaitCompatComponents === \"lower\",\n });\n }\n\n const ir: ModuleIr = {\n userImports,\n moduleStatements,\n moduleBindingNames: Array.from(moduleBindingNames),\n components,\n };\n\n assignOxcAwaitIds(ir);\n\n return {\n ir,\n diagnostics,\n };\n}\n\nfunction isCssImportSource(source: unknown): boolean {\n return typeof source === \"string\" && /\\.(?:css|pcss|postcss|scss|sass|less|styl|stylus)$/u.test(source);\n}\n\nfunction componentNamesFromProgram(\n program: unknown,\n moduleBindingNames: ReadonlySet<string>,\n): Set<string> {\n return new Set([\n ...collectOxcExportedComponents(program),\n ...collectOxcExportedFunctionNames(program),\n ...collectOxcPlainComponentNames(program),\n ...moduleBindingNames,\n ]);\n}\n\nfunction componentCallNamesFromProgram(program: unknown): Set<string> {\n return new Set([\n ...collectOxcExportedComponents(program).filter((name) => name !== \"default\"),\n ...collectOxcPlainComponentNames(program),\n ]);\n}\n\nfunction analyzeOxcComponent(\n code: string,\n statement: unknown,\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n bodyStatementJsx: OxcBodyStatementJsxMode,\n moduleRenderValueBindings: Set<string>,\n compatReactNodeReturn: boolean,\n serverOutput: AnalyzeModuleOptions[\"serverOutput\"],\n componentCallNames: Set<string> | undefined,\n bodyLowerers: OxcBodyLowerers,\n): ComponentIr[] {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n\n if (declaration === undefined || !hasOxcFunctionLikeComponentReturn(declaration)) {\n return [];\n }\n const id = readObject(declaration.id);\n const name = typeof id.name === \"string\" ? id.name : \"DefaultExport\";\n\n return [\n analyzeOxcFunctionLikeComponent(\n code,\n name,\n declaration,\n \"default\",\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n moduleRenderValueBindings,\n compatReactNodeReturn,\n serverOutput,\n componentCallNames,\n bodyLowerers,\n true,\n ),\n ];\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n const plainComponent = readOxcPlainComponent(statement);\n\n if (plainComponent === undefined) {\n return [];\n }\n\n return [\n {\n ...analyzeOxcFunctionLikeComponent(\n code,\n plainComponent.name,\n plainComponent.initializer,\n plainComponent.name,\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n moduleRenderValueBindings,\n compatReactNodeReturn,\n serverOutput,\n componentCallNames,\n bodyLowerers,\n ),\n exported: false,\n },\n ];\n }\n\n const declaration = readObject(object.declaration);\n\n if (declaration.type === \"VariableDeclaration\") {\n const variableComponent = readOxcVariableComponentDeclaration(declaration);\n\n if (variableComponent === undefined) {\n return [];\n }\n\n return [\n analyzeOxcFunctionLikeComponent(\n code,\n variableComponent.name,\n variableComponent.initializer,\n variableComponent.name,\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n moduleRenderValueBindings,\n compatReactNodeReturn,\n serverOutput,\n componentCallNames,\n bodyLowerers,\n ),\n ];\n }\n\n if (\n declaration.type !== \"FunctionDeclaration\" ||\n (!compatReactNodeReturn && !hasComponentReturn(declaration.body))\n ) {\n return [];\n }\n\n const id = readObject(declaration.id);\n\n if (typeof id.name !== \"string\") {\n return [];\n }\n\n return [\n analyzeOxcFunctionLikeComponent(\n code,\n id.name,\n declaration,\n id.name,\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n moduleRenderValueBindings,\n compatReactNodeReturn,\n serverOutput,\n componentCallNames,\n bodyLowerers,\n ),\n ];\n}\n\nfunction analyzeOxcFunctionLikeComponent(\n code: string,\n name: string,\n functionLike: Record<string, unknown>,\n exportName: string,\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n bodyStatementJsx: OxcBodyStatementJsxMode,\n moduleRenderValueBindings: Set<string>,\n compatReactNodeReturn: boolean,\n serverOutput: AnalyzeModuleOptions[\"serverOutput\"],\n componentCallNames: Set<string> | undefined,\n bodyLowerers: OxcBodyLowerers,\n exportDefault = false,\n): ComponentIr {\n const functionBody = readObject(functionLike.body);\n const body = functionBody.type === \"BlockStatement\" ? readArray(functionBody.body) : [];\n const earlyIfRootReturn =\n bodyStatementJsx === \"compat-object\" ? undefined : findOxcEarlyIfRootReturn(body);\n const rootStatement =\n earlyIfRootReturn?.branchStatements[0] ??\n (bodyStatementJsx === \"compat-object\"\n ? body.find((bodyStatement) => readObject(bodyStatement).type === \"ReturnStatement\")\n : findOxcRootStatement(body));\n const returnStatement =\n readObject(rootStatement).type === \"ReturnStatement\" ? rootStatement : undefined;\n const expressionBody = unwrapOxcParentheses(readObject(functionLike.body));\n const returnExpression =\n returnStatement === undefined\n ? expressionBody\n : unwrapOxcParentheses(readObject(readObject(returnStatement).argument));\n const parameters = readArray(functionLike.params).map((param) =>\n readOxcParameterName(code, param),\n );\n const bodyStatements = body\n .filter(\n (bodyStatement) =>\n bodyStatement !== rootStatement &&\n earlyIfRootReturn?.branchStatements.includes(bodyStatement) !== true &&\n bodyStatement !== earlyIfRootReturn?.fallthroughStatement,\n )\n .map(\n (bodyStatement) =>\n lowerOxcBodyStatementJsx(\n code,\n bodyStatement,\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n bodyLowerers,\n ) ?? formatOxcBodyStatement(code, bodyStatement, bodyStatementJsx),\n );\n const componentBodyBindings = collectOxcVariableInitializers(body);\n const reactiveAliasBindings = collectOxcReactiveReadAliases(code, body);\n const childAnalysisContext = createOxcChildAnalysisContext(\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n componentBodyBindings,\n reactiveAliasBindings,\n serverOutput,\n componentCallNames,\n bodyLowerers,\n );\n const root =\n analyzeOxcEarlyIfRootReturn(\n code,\n earlyIfRootReturn,\n childAnalysisContext,\n bodyStatementJsx,\n ) ??\n analyzeOxcSwitchRootReturn(\n code,\n rootStatement,\n childAnalysisContext,\n bodyStatementJsx,\n ) ??\n (isJsxRoot(returnExpression.type) || returnExpression.type === \"JSXFragment\"\n ? analyzeOxcJsxNode(code, returnExpression, childAnalysisContext)\n : isOxcComponentCallExpression(returnExpression)\n ? analyzeOxcComponentCallExpression(code, returnExpression)\n : analyzeOxcDynamicRootReturn(\n code,\n returnExpression,\n childAnalysisContext,\n bodyStatementJsx,\n ) ??\n {\n kind: \"expr\" as const,\n code: normalizeOxcExpressionCode(\n compatReactNodeReturn\n ? (lowerOxcCompatReactNodeExpression(\n code,\n returnExpression,\n componentNames,\n target,\n diagnostics,\n ) ??\n stripOxcGeneratedImports(\n transformJsxToCreateElementWithOxc(readSource(code, returnExpression)),\n ))\n : readSource(code, returnExpression),\n ),\n ...(compatReactNodeReturn ? { renderMode: \"react-node\" as const } : {}),\n });\n markOxcRenderValueExpressions(\n [root],\n new Set([\n ...moduleRenderValueBindings,\n ...collectOxcBodyJsxBindingNames(\n body.filter(\n (bodyStatement) =>\n bodyStatement !== rootStatement &&\n earlyIfRootReturn?.branchStatements.includes(bodyStatement) !== true &&\n bodyStatement !== earlyIfRootReturn?.fallthroughStatement,\n ),\n ),\n ]),\n bodyStatementJsx === \"server-string\" ? \"html\" : \"dynamic\",\n );\n\n return {\n name,\n exportName,\n ...(exportDefault ? { exportDefault: true } : {}),\n ...(functionLike.async === true ? { async: true } : {}),\n parameters,\n bodyStatements,\n bindingNames: [...parameters, ...body.flatMap(collectBindingNames)],\n root,\n };\n}\n\ninterface OxcEarlyIfRootReturn {\n branchStatements: unknown[];\n fallthroughStatement: unknown;\n branches: Array<{\n test: Record<string, unknown>;\n consequent: Record<string, unknown>;\n }>;\n fallthrough: Record<string, unknown>;\n}\n\nfunction findOxcEarlyIfRootReturn(body: readonly unknown[]): OxcEarlyIfRootReturn | undefined {\n for (let index = 0; index < body.length - 1; index += 1) {\n const branches: OxcEarlyIfRootReturn[\"branches\"] = [];\n const branchStatements: unknown[] = [];\n let cursor = index;\n\n while (cursor < body.length - 1) {\n const statement = readObject(body[cursor]);\n\n if (statement.type !== \"IfStatement\" || readObject(statement.alternate).type !== undefined) {\n break;\n }\n\n const consequent = readOxcPureReturnExpressionFromStatement(statement.consequent);\n\n if (consequent === undefined || !isOxcRootReturnExpression(consequent)) {\n break;\n }\n\n branches.push({\n test: readObject(statement.test),\n consequent,\n });\n branchStatements.push(body[cursor]);\n cursor += 1;\n }\n\n if (branches.length === 0) {\n continue;\n }\n\n const fallthroughStatement = body[cursor];\n const fallthrough = readOxcReturnExpressionFromStatement(fallthroughStatement);\n\n if (fallthrough === undefined || !isOxcRootReturnExpression(fallthrough)) {\n continue;\n }\n\n return {\n branchStatements,\n fallthroughStatement,\n branches,\n fallthrough,\n };\n }\n\n return undefined;\n}\n\nfunction readOxcPureReturnExpressionFromStatement(\n statement: unknown,\n): Record<string, unknown> | undefined {\n const object = readObject(statement);\n\n if (object.type === \"ReturnStatement\") {\n return readOxcReturnExpressionFromStatement(statement);\n }\n\n if (object.type !== \"BlockStatement\") {\n return undefined;\n }\n\n const statements = readArray(object.body);\n if (statements.length !== 1) {\n return undefined;\n }\n\n return readOxcReturnExpressionFromStatement(statements[0]);\n}\n\nfunction isOxcRootReturnExpression(expression: Record<string, unknown>): boolean {\n return isOxcEmptyRootReturn(expression) || isOxcRenderableRootReturn(expression);\n}\n\nfunction isOxcEmptyRootReturn(expression: Record<string, unknown>): boolean {\n return (\n expression.type === \"Literal\" &&\n (expression.value === null || expression.value === false)\n );\n}\n\nfunction isOxcRenderableRootReturn(expression: Record<string, unknown>): boolean {\n return (\n isJsxRoot(expression.type) ||\n expression.type === \"JSXFragment\" ||\n isOxcComponentCallExpression(expression) ||\n analyzeOxcDynamicRootReturnShape(expression)\n );\n}\n\nfunction analyzeOxcDynamicRootReturnShape(expression: Record<string, unknown>): boolean {\n if (expression.type === \"ConditionalExpression\") {\n return true;\n }\n\n return (\n expression.type === \"LogicalExpression\" &&\n isOxcJsxBranch(readObject(expression.right))\n );\n}\n\nfunction findOxcRootStatement(body: readonly unknown[]): unknown | undefined {\n return body.find((bodyStatement) => {\n const object = readObject(bodyStatement);\n return object.type === \"ReturnStatement\" || isOxcSwitchRootReturnStatement(object);\n });\n}\n\nfunction isOxcSwitchRootReturnStatement(statement: Record<string, unknown>): boolean {\n if (statement.type !== \"SwitchStatement\") {\n return false;\n }\n\n return readArray(statement.cases).some((switchCase) =>\n readArray(readObject(switchCase).consequent).some(\n (child) => readObject(child).type === \"ReturnStatement\",\n ),\n );\n}\n\nfunction analyzeOxcSwitchRootReturn(\n code: string,\n statement: unknown,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): ComponentIr[\"root\"] | undefined {\n const object = readObject(statement);\n\n if (object.type !== \"SwitchStatement\") {\n return undefined;\n }\n\n const discriminant = readSource(code, object.discriminant);\n const cases = readArray(object.cases).map((switchCase) => {\n const caseObject = readObject(switchCase);\n const returnStatement = readArray(caseObject.consequent)\n .map(readObject)\n .find((child) => child.type === \"ReturnStatement\");\n const argument =\n returnStatement === undefined\n ? undefined\n : unwrapOxcParentheses(readObject(returnStatement.argument));\n\n return {\n test: readObject(caseObject.test),\n children:\n argument === undefined\n ? undefined\n : analyzeOxcDynamicRootBranch(code, argument, context, bodyStatementJsx),\n };\n });\n\n if (cases.some((entry) => entry.children === undefined)) {\n return undefined;\n }\n\n const defaultCase = cases.find((entry) => entry.test.type === undefined);\n let fallback = defaultCase?.children ?? [];\n\n for (const entry of [...cases].reverse()) {\n if (entry.test.type === undefined) {\n continue;\n }\n\n fallback = [\n {\n kind: \"conditional\",\n conditionCode: `${discriminant} === ${readSource(code, entry.test)}`,\n whenTrue: entry.children ?? [],\n whenFalse: fallback,\n },\n ];\n }\n\n return fallback.length === 1 ? fallback[0] : { kind: \"fragment\", children: fallback };\n}\n\nfunction analyzeOxcEarlyIfRootReturn(\n code: string,\n earlyIfRootReturn: OxcEarlyIfRootReturn | undefined,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): ComponentIr[\"root\"] | undefined {\n if (earlyIfRootReturn === undefined) {\n return undefined;\n }\n\n let fallback = analyzeOxcDynamicRootBranch(\n code,\n earlyIfRootReturn.fallthrough,\n context,\n bodyStatementJsx,\n );\n\n for (const branch of [...earlyIfRootReturn.branches].reverse()) {\n fallback = [\n {\n kind: \"conditional\",\n conditionCode: readOxcReactiveRootConditionCode(code, branch.test, context),\n whenTrue: analyzeOxcDynamicRootBranch(\n code,\n branch.consequent,\n context,\n bodyStatementJsx,\n ),\n whenFalse: fallback,\n },\n ];\n }\n\n return fallback.length === 1 ? fallback[0] : { kind: \"fragment\", children: fallback };\n}\n\nfunction readOxcReactiveRootConditionCode(\n code: string,\n expression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n): string {\n return (\n rewriteOxcReactiveAliasExpressionCode(code, expression, context.reactiveAliasBindings) ??\n readSource(code, expression)\n );\n}\n\nfunction analyzeOxcDynamicRootBranch(\n code: string,\n expression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): ComponentIr[\"root\"][] {\n if (expression.type === \"Literal\" && (expression.value === null || expression.value === false)) {\n return [];\n }\n\n return analyzeOxcExpressionChild(code, expression, context, bodyStatementJsx);\n}\n\nfunction analyzeOxcDynamicRootReturn(\n code: string,\n returnExpression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): ComponentIr[\"root\"] | undefined {\n const nodes = analyzeOxcExpressionChild(code, returnExpression, context, bodyStatementJsx);\n\n if (nodes.length !== 1) {\n return undefined;\n }\n\n const [root] = nodes;\n return root?.kind === \"conditional\" ? root : undefined;\n}\n\nfunction analyzeOxcComponentCallExpression(\n code: string,\n expression: Record<string, unknown>,\n): ComponentIr[\"root\"] {\n const callee = readObject(expression.callee);\n const args = readArray(expression.arguments);\n const firstArg = readObject(args[0]);\n\n return {\n kind: \"component\",\n name: readSource(code, callee),\n props:\n firstArg.type === undefined\n ? []\n : [\n {\n kind: \"spread-prop\" as const,\n code: normalizeOxcExpressionCode(readSource(code, firstArg)),\n },\n ],\n children: [],\n };\n}\n"]}
1
+ {"version":3,"file":"oxc.js","sourceRoot":"","sources":["../src/oxc.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseSync } from \"oxc-parser\";\nimport { unsupportedTopLevelJsxInitializerDiagnostic } from \"./diagnostics.js\";\nimport {\n type AnalyzeToIrInput,\n type AnalyzeToIrOutput,\n} from \"./internal.js\";\nimport {\n createCompilerModuleContextWithOxc,\n type CompilerModuleContext,\n} from \"./compiler-module-context.js\";\nimport type { ClientReferenceIr, ComponentIr, ModuleIr } from \"./ir.js\";\nimport { transformJsxToCreateElementWithOxc } from \"./oxc-transform.js\";\nimport {\n arraysEqual,\n getOxcLocation,\n getOxcLocationFromOffset,\n readArray,\n readObject,\n readSource,\n unwrapOxcParentheses,\n} from \"./oxc-node-utils.js\";\nimport { assignOxcAwaitIds } from \"./oxc-await-ids.js\";\nimport {\n validateOxcAwaitCompatComponents,\n validateOxcNestedAwait,\n} from \"./oxc-await-validation.js\";\nimport type { OxcBodyStatementJsxMode } from \"./oxc-analysis-types.js\";\nimport {\n collectBindingNames,\n collectImportBindingNames,\n formatStatement,\n readOxcParameterName,\n} from \"./oxc-bindings.js\";\nimport {\n formatOxcBodyStatement,\n formatPreservedStatement,\n lowerOxcBodyStatementJsx,\n lowerOxcTopLevelStatement,\n type OxcBodyLowerers,\n} from \"./oxc-body-lowering.js\";\nimport { collectOxcVariableInitializers } from \"./oxc-await-analysis.js\";\nimport {\n collectOxcAsyncComponentNames,\n collectOxcExportedComponents,\n collectOxcExportedFunctionNames,\n collectOxcPlainComponentNames,\n hasComponentReturn,\n hasOxcFunctionLikeComponentReturn,\n isOxcExportedFunctionLike,\n isOxcComponentCallExpression,\n isJsxRoot,\n isOxcJsxComponentStatement,\n isOxcUnsupportedExportedFunction,\n readOxcPlainComponent,\n readOxcVariableComponentDeclaration,\n unwrapOxcComponentFunctionLikeInitializer,\n} from \"./oxc-component-detection.js\";\nimport {\n collectOxcClientBoundaryImportComponents,\n collectOxcCompatRuntimeImportComponents,\n markOxcAsyncComponentReferences,\n markOxcClientReferences,\n markOxcCompatRuntimeReferences,\n} from \"./oxc-component-references.js\";\nimport { normalizeOxcExpressionCode, stripOxcGeneratedImports } from \"./oxc-code-utils.js\";\nimport {\n analyzeOxcExpressionChild,\n analyzeOxcJsxNode,\n type OxcChildAnalysisContext,\n} from \"./oxc-child-analysis.js\";\nimport { lowerOxcDomNodeExpression } from \"./oxc-dom-lowering.js\";\nimport {\n lowerOxcCompatObjectExpression,\n lowerOxcCompatReactNodeExpression,\n lowerOxcNestedJsxExpression,\n lowerOxcServerStringExpression,\n} from \"./oxc-nested-lowering.js\";\nimport {\n isOxcJsxBranch,\n readOxcReturnExpressionFromStatement,\n} from \"./oxc-expression-utils.js\";\nimport {\n collectOxcBodyJsxBindingNames,\n collectOxcReactiveDerivedFunctionNames,\n collectOxcReactiveReadAliases,\n containsOxcJsxSyntax,\n markOxcRenderValueExpressions,\n rewriteOxcReactiveAliasExpressionCode,\n} from \"./oxc-render-values.js\";\nimport { containsRawJsxInIr } from \"./oxc-raw-jsx.js\";\nimport type { AnalyzeModuleOptions, CompileTarget, Diagnostic } from \"./types.js\";\n\nexport interface OxcParityResult {\n matches: boolean;\n oxc: {\n errors: string[];\n exportedComponents: string[];\n ir?: ModuleIr;\n usedTypescriptFallback: boolean;\n rawJsxDetected: boolean;\n };\n}\n\nconst oxcBodyLowerers: OxcBodyLowerers = createOxcBodyLowerers();\n\nfunction createOxcBodyLowerers(\n compatRuntimeImports: ReadonlyMap<string, ClientReferenceIr> = new Map(),\n): OxcBodyLowerers {\n return {\n lowerDomNodeExpression: lowerOxcDomNodeExpression,\n lowerCompatObjectExpression: lowerOxcCompatObjectExpression,\n lowerServerStringExpression: (code, expression, componentNames, target, diagnostics) =>\n lowerOxcServerStringExpression(\n code,\n expression,\n componentNames,\n target,\n diagnostics,\n compatRuntimeImports,\n ),\n };\n}\n\nfunction createOxcChildAnalysisContext(\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n componentBodyBindings?: ReadonlyMap<string, Record<string, unknown>>,\n reactiveAliasBindings?: ReadonlyMap<string, string>,\n serverOutput?: AnalyzeModuleOptions[\"serverOutput\"],\n componentCallNames?: Set<string>,\n bodyLowerers: OxcBodyLowerers = oxcBodyLowerers,\n): OxcChildAnalysisContext {\n return {\n componentNames,\n ...(componentCallNames === undefined ? {} : { componentCallNames }),\n target,\n ...(serverOutput === undefined ? {} : { serverOutput }),\n diagnostics,\n ...(bodyStatementJsx === undefined ? {} : { bodyStatementJsx }),\n ...(componentBodyBindings === undefined ? {} : { componentBodyBindings }),\n ...(reactiveAliasBindings === undefined ? {} : { reactiveAliasBindings }),\n bodyLowerers,\n lowerNestedJsxExpression: lowerOxcNestedJsxExpression,\n };\n}\n\nexport function analyzeOxcParity(input: AnalyzeToIrInput): OxcParityResult {\n const oxc = parseSync(input.filename, input.code, {\n lang: \"tsx\",\n sourceType: \"module\",\n astType: \"ts\",\n });\n const oxcExportedComponents = collectOxcExportedComponents(oxc.program);\n const oxcOutput = analyzeOxcToIr(input.code, oxc.program, input.target, input.options);\n const rawJsxDetected = containsRawJsxInIr(oxcOutput.ir);\n\n return {\n matches:\n oxc.errors.length === 0 &&\n oxcOutput.diagnostics.length === 0 &&\n !rawJsxDetected &&\n arraysEqual(\n oxcExportedComponents,\n oxcOutput.ir.components\n .filter((component) => component.exported !== false)\n .map((component) => component.exportName),\n ),\n oxc: {\n errors: oxc.errors.map((error) => error.message),\n exportedComponents: oxcExportedComponents,\n ir: oxcOutput.ir,\n usedTypescriptFallback: false,\n rawJsxDetected,\n },\n };\n}\n\nexport function analyzeWithOxc(input: AnalyzeToIrInput): AnalyzeToIrOutput {\n return analyzeCompilerModuleContextWithOxc(\n createCompilerModuleContextWithOxc(input),\n {\n target: input.target,\n ...(input.options === undefined ? {} : { options: input.options }),\n },\n );\n}\n\nexport function analyzeCompilerModuleContextWithOxc(\n context: CompilerModuleContext,\n input: Omit<AnalyzeToIrInput, \"code\" | \"filename\">,\n): AnalyzeToIrOutput {\n const analyzed = analyzeOxcToIr(context.code, context.program, input.target, input.options);\n\n return {\n ir: analyzed.ir,\n diagnostics: [\n ...context.parseErrors.map((error) => oxcParseErrorDiagnostic(context.code, error)),\n ...analyzed.diagnostics,\n ],\n usedTypescriptFallback: false,\n };\n}\n\nfunction oxcParseErrorDiagnostic(code: string, error: unknown): Diagnostic {\n const object = readObject(error);\n const firstLabel = readObject(readArray(object.labels)[0]);\n const loc =\n typeof firstLabel.start === \"number\"\n ? getOxcLocationFromOffset(code, firstLabel.start)\n : undefined;\n\n return {\n level: \"error\",\n code:\n object.message === \"Unexpected token\" ? \"MR_INVALID_JSX_EXPRESSION\" : \"MR_OXC_PARSE_ERROR\",\n message: typeof object.message === \"string\" ? object.message : \"Oxc parse error\",\n ...(loc === undefined ? {} : { loc }),\n };\n}\n\nfunction analyzeOxcToIr(\n code: string,\n program: unknown,\n target: CompileTarget,\n options?: AnalyzeModuleOptions,\n): { ir: ModuleIr; diagnostics: Diagnostic[] } {\n const body = readArray(readObject(program).body);\n const userImports: string[] = [];\n const moduleStatements: string[] = [];\n const moduleBindingNames = new Set<string>();\n const diagnostics: Diagnostic[] = [];\n const clientBoundaryImports = collectOxcClientBoundaryImportComponents(\n program,\n new Set(options?.clientBoundaryImports ?? []),\n );\n const compatRuntimeImports = collectOxcCompatRuntimeImportComponents(program);\n const bodyLowerers = createOxcBodyLowerers(compatRuntimeImports);\n const moduleRenderValueBindings = collectOxcBodyJsxBindingNames(body);\n const reactiveDerivedFunctionNames = collectOxcReactiveDerivedFunctionNames(body);\n\n for (const statement of body) {\n const object = readObject(statement);\n\n if (object.type === \"ImportDeclaration\") {\n const importCode = formatStatement(code, statement);\n const source = readObject(object.source).value;\n\n if (importCode !== \"\" && !(target === \"server\" && isCssImportSource(source))) {\n userImports.push(importCode);\n }\n for (const bindingName of collectImportBindingNames(statement)) {\n moduleBindingNames.add(bindingName);\n }\n continue;\n }\n\n if (\n isOxcJsxComponentStatement(statement) ||\n (options?.compatReactNodeReturn === true && isOxcExportedFunctionLike(statement))\n ) {\n const declaration = readObject(readObject(statement).declaration);\n\n if (declaration.type === \"VariableDeclaration\") {\n for (const bindingName of collectBindingNames(declaration)) {\n moduleBindingNames.add(bindingName);\n }\n }\n continue;\n } else {\n if (isOxcUnsupportedExportedFunction(statement, options)) {\n diagnostics.push({\n level: \"error\",\n code: \"MR_UNSUPPORTED_COMPONENT_RETURN\",\n message: \"Exported component must return a JSX element or supported React node.\",\n });\n continue;\n }\n const loweredTopLevel = lowerOxcTopLevelStatement(\n code,\n statement,\n componentNamesFromProgram(program, moduleBindingNames),\n target,\n diagnostics,\n options,\n bodyLowerers,\n );\n const formattedStatement =\n loweredTopLevel ?? formatPreservedStatement(code, statement, options);\n\n if (\n loweredTopLevel === undefined &&\n containsOxcJsxSyntax(object) &&\n options?.topLevelJsx !== \"compat-object\" &&\n options?.topLevelJsx !== \"server-string\"\n ) {\n diagnostics.push(\n unsupportedTopLevelJsxInitializerDiagnostic(getOxcLocation(code, statement)),\n );\n }\n\n if (formattedStatement !== \"\") {\n moduleStatements.push(formattedStatement);\n }\n for (const bindingName of collectBindingNames(statement)) {\n moduleBindingNames.add(bindingName);\n }\n }\n }\n\n const componentNames = componentNamesFromProgram(program, moduleBindingNames);\n const componentCallNames =\n options?.serverOutput === \"stream\" ? componentCallNamesFromProgram(program) : undefined;\n const asyncComponentNames = collectOxcAsyncComponentNames(program);\n const components = body.flatMap((statement) =>\n analyzeOxcComponent(\n code,\n statement,\n componentNames,\n target,\n diagnostics,\n options?.bodyStatementJsx ?? \"dom-node\",\n moduleRenderValueBindings,\n options?.compatReactNodeReturn === true,\n options?.serverOutput,\n componentCallNames,\n bodyLowerers,\n reactiveDerivedFunctionNames,\n ),\n );\n\n for (const component of components) {\n markOxcAsyncComponentReferences(component.root, asyncComponentNames);\n markOxcClientReferences(component.root, clientBoundaryImports);\n markOxcCompatRuntimeReferences(component.root, compatRuntimeImports);\n validateOxcNestedAwait(component.root, diagnostics);\n validateOxcAwaitCompatComponents(component.root, diagnostics, {\n allowCompatComponents: options?.awaitCompatComponents === \"lower\",\n });\n }\n\n const ir: ModuleIr = {\n userImports,\n moduleStatements,\n moduleBindingNames: Array.from(moduleBindingNames),\n components,\n };\n\n assignOxcAwaitIds(ir);\n\n return {\n ir,\n diagnostics,\n };\n}\n\nfunction isCssImportSource(source: unknown): boolean {\n return typeof source === \"string\" && /\\.(?:css|pcss|postcss|scss|sass|less|styl|stylus)$/u.test(source);\n}\n\nfunction componentNamesFromProgram(\n program: unknown,\n moduleBindingNames: ReadonlySet<string>,\n): Set<string> {\n return new Set([\n ...collectOxcExportedComponents(program),\n ...collectOxcExportedFunctionNames(program),\n ...collectOxcPlainComponentNames(program),\n ...moduleBindingNames,\n ]);\n}\n\nfunction componentCallNamesFromProgram(program: unknown): Set<string> {\n return new Set([\n ...collectOxcExportedComponents(program).filter((name) => name !== \"default\"),\n ...collectOxcPlainComponentNames(program),\n ]);\n}\n\nfunction analyzeOxcComponent(\n code: string,\n statement: unknown,\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n bodyStatementJsx: OxcBodyStatementJsxMode,\n moduleRenderValueBindings: Set<string>,\n compatReactNodeReturn: boolean,\n serverOutput: AnalyzeModuleOptions[\"serverOutput\"],\n componentCallNames: Set<string> | undefined,\n bodyLowerers: OxcBodyLowerers,\n reactiveDerivedFunctionNames: ReadonlySet<string>,\n): ComponentIr[] {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n\n if (declaration === undefined || !hasOxcFunctionLikeComponentReturn(declaration)) {\n return [];\n }\n const id = readObject(declaration.id);\n const name = typeof id.name === \"string\" ? id.name : \"DefaultExport\";\n\n return [\n analyzeOxcFunctionLikeComponent(\n code,\n name,\n declaration,\n \"default\",\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n moduleRenderValueBindings,\n compatReactNodeReturn,\n serverOutput,\n componentCallNames,\n bodyLowerers,\n reactiveDerivedFunctionNames,\n true,\n ),\n ];\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n const plainComponent = readOxcPlainComponent(statement);\n\n if (plainComponent === undefined) {\n return [];\n }\n\n return [\n {\n ...analyzeOxcFunctionLikeComponent(\n code,\n plainComponent.name,\n plainComponent.initializer,\n plainComponent.name,\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n moduleRenderValueBindings,\n compatReactNodeReturn,\n serverOutput,\n componentCallNames,\n bodyLowerers,\n reactiveDerivedFunctionNames,\n ),\n exported: false,\n },\n ];\n }\n\n const declaration = readObject(object.declaration);\n\n if (declaration.type === \"VariableDeclaration\") {\n const variableComponent = readOxcVariableComponentDeclaration(declaration);\n\n if (variableComponent === undefined) {\n return [];\n }\n\n return [\n analyzeOxcFunctionLikeComponent(\n code,\n variableComponent.name,\n variableComponent.initializer,\n variableComponent.name,\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n moduleRenderValueBindings,\n compatReactNodeReturn,\n serverOutput,\n componentCallNames,\n bodyLowerers,\n reactiveDerivedFunctionNames,\n ),\n ];\n }\n\n if (\n declaration.type !== \"FunctionDeclaration\" ||\n (!compatReactNodeReturn && !hasComponentReturn(declaration.body))\n ) {\n return [];\n }\n\n const id = readObject(declaration.id);\n\n if (typeof id.name !== \"string\") {\n return [];\n }\n\n return [\n analyzeOxcFunctionLikeComponent(\n code,\n id.name,\n declaration,\n id.name,\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n moduleRenderValueBindings,\n compatReactNodeReturn,\n serverOutput,\n componentCallNames,\n bodyLowerers,\n reactiveDerivedFunctionNames,\n ),\n ];\n}\n\nfunction analyzeOxcFunctionLikeComponent(\n code: string,\n name: string,\n functionLike: Record<string, unknown>,\n exportName: string,\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n bodyStatementJsx: OxcBodyStatementJsxMode,\n moduleRenderValueBindings: Set<string>,\n compatReactNodeReturn: boolean,\n serverOutput: AnalyzeModuleOptions[\"serverOutput\"],\n componentCallNames: Set<string> | undefined,\n bodyLowerers: OxcBodyLowerers,\n reactiveDerivedFunctionNames: ReadonlySet<string>,\n exportDefault = false,\n): ComponentIr {\n const functionBody = readObject(functionLike.body);\n const body = functionBody.type === \"BlockStatement\" ? readArray(functionBody.body) : [];\n const earlyIfRootReturn =\n bodyStatementJsx === \"compat-object\" ? undefined : findOxcEarlyIfRootReturn(body);\n const rootStatement =\n earlyIfRootReturn?.branchStatements[0] ??\n (bodyStatementJsx === \"compat-object\"\n ? body.find((bodyStatement) => readObject(bodyStatement).type === \"ReturnStatement\")\n : findOxcRootStatement(body));\n const returnStatement =\n readObject(rootStatement).type === \"ReturnStatement\" ? rootStatement : undefined;\n const expressionBody = unwrapOxcParentheses(readObject(functionLike.body));\n const returnExpression =\n returnStatement === undefined\n ? expressionBody\n : unwrapOxcParentheses(readObject(readObject(returnStatement).argument));\n const parameters = readArray(functionLike.params).map((param) =>\n readOxcParameterName(code, param),\n );\n const bodyStatements = body\n .filter(\n (bodyStatement) =>\n bodyStatement !== rootStatement &&\n earlyIfRootReturn?.branchStatements.includes(bodyStatement) !== true &&\n bodyStatement !== earlyIfRootReturn?.fallthroughStatement,\n )\n .map(\n (bodyStatement) =>\n lowerOxcBodyStatementJsx(\n code,\n bodyStatement,\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n bodyLowerers,\n ) ?? formatOxcBodyStatement(code, bodyStatement, bodyStatementJsx),\n );\n const componentBodyBindings = collectOxcVariableInitializers(body);\n const reactiveAliasBindings = collectOxcReactiveReadAliases(\n code,\n body,\n reactiveDerivedFunctionNames,\n );\n const childAnalysisContext = createOxcChildAnalysisContext(\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n componentBodyBindings,\n reactiveAliasBindings,\n serverOutput,\n componentCallNames,\n bodyLowerers,\n );\n const root =\n analyzeOxcEarlyIfRootReturn(\n code,\n earlyIfRootReturn,\n childAnalysisContext,\n bodyStatementJsx,\n ) ??\n analyzeOxcSwitchRootReturn(\n code,\n rootStatement,\n childAnalysisContext,\n bodyStatementJsx,\n ) ??\n (isJsxRoot(returnExpression.type) || returnExpression.type === \"JSXFragment\"\n ? analyzeOxcJsxNode(code, returnExpression, childAnalysisContext)\n : isOxcComponentCallExpression(returnExpression)\n ? analyzeOxcComponentCallExpression(code, returnExpression)\n : analyzeOxcDynamicRootReturn(\n code,\n returnExpression,\n childAnalysisContext,\n bodyStatementJsx,\n ) ??\n {\n kind: \"expr\" as const,\n code: normalizeOxcExpressionCode(\n compatReactNodeReturn\n ? (lowerOxcCompatReactNodeExpression(\n code,\n returnExpression,\n componentNames,\n target,\n diagnostics,\n ) ??\n stripOxcGeneratedImports(\n transformJsxToCreateElementWithOxc(readSource(code, returnExpression)),\n ))\n : readSource(code, returnExpression),\n ),\n ...(compatReactNodeReturn ? { renderMode: \"react-node\" as const } : {}),\n });\n markOxcRenderValueExpressions(\n [root],\n new Set([\n ...moduleRenderValueBindings,\n ...collectOxcBodyJsxBindingNames(\n body.filter(\n (bodyStatement) =>\n bodyStatement !== rootStatement &&\n earlyIfRootReturn?.branchStatements.includes(bodyStatement) !== true &&\n bodyStatement !== earlyIfRootReturn?.fallthroughStatement,\n ),\n ),\n ]),\n bodyStatementJsx === \"server-string\" ? \"html\" : \"dynamic\",\n );\n\n return {\n name,\n exportName,\n ...(exportDefault ? { exportDefault: true } : {}),\n ...(functionLike.async === true ? { async: true } : {}),\n parameters,\n bodyStatements,\n bindingNames: [...parameters, ...body.flatMap(collectBindingNames)],\n root,\n };\n}\n\ninterface OxcEarlyIfRootReturn {\n branchStatements: unknown[];\n fallthroughStatement: unknown;\n branches: Array<{\n test: Record<string, unknown>;\n consequent: Record<string, unknown>;\n }>;\n fallthrough: Record<string, unknown>;\n}\n\nfunction findOxcEarlyIfRootReturn(body: readonly unknown[]): OxcEarlyIfRootReturn | undefined {\n for (let index = 0; index < body.length - 1; index += 1) {\n const branches: OxcEarlyIfRootReturn[\"branches\"] = [];\n const branchStatements: unknown[] = [];\n let cursor = index;\n\n while (cursor < body.length - 1) {\n const statement = readObject(body[cursor]);\n\n if (statement.type !== \"IfStatement\" || readObject(statement.alternate).type !== undefined) {\n break;\n }\n\n const consequent = readOxcPureReturnExpressionFromStatement(statement.consequent);\n\n if (consequent === undefined || !isOxcRootReturnExpression(consequent)) {\n break;\n }\n\n branches.push({\n test: readObject(statement.test),\n consequent,\n });\n branchStatements.push(body[cursor]);\n cursor += 1;\n }\n\n if (branches.length === 0) {\n continue;\n }\n\n const fallthroughStatement = body[cursor];\n const fallthrough = readOxcReturnExpressionFromStatement(fallthroughStatement);\n\n if (fallthrough === undefined || !isOxcRootReturnExpression(fallthrough)) {\n continue;\n }\n\n return {\n branchStatements,\n fallthroughStatement,\n branches,\n fallthrough,\n };\n }\n\n return undefined;\n}\n\nfunction readOxcPureReturnExpressionFromStatement(\n statement: unknown,\n): Record<string, unknown> | undefined {\n const object = readObject(statement);\n\n if (object.type === \"ReturnStatement\") {\n return readOxcReturnExpressionFromStatement(statement);\n }\n\n if (object.type !== \"BlockStatement\") {\n return undefined;\n }\n\n const statements = readArray(object.body);\n if (statements.length !== 1) {\n return undefined;\n }\n\n return readOxcReturnExpressionFromStatement(statements[0]);\n}\n\nfunction isOxcRootReturnExpression(expression: Record<string, unknown>): boolean {\n return isOxcEmptyRootReturn(expression) || isOxcRenderableRootReturn(expression);\n}\n\nfunction isOxcEmptyRootReturn(expression: Record<string, unknown>): boolean {\n return (\n expression.type === \"Literal\" &&\n (expression.value === null || expression.value === false)\n );\n}\n\nfunction isOxcRenderableRootReturn(expression: Record<string, unknown>): boolean {\n return (\n isJsxRoot(expression.type) ||\n expression.type === \"JSXFragment\" ||\n isOxcComponentCallExpression(expression) ||\n analyzeOxcDynamicRootReturnShape(expression)\n );\n}\n\nfunction analyzeOxcDynamicRootReturnShape(expression: Record<string, unknown>): boolean {\n if (expression.type === \"ConditionalExpression\") {\n return true;\n }\n\n return (\n expression.type === \"LogicalExpression\" &&\n isOxcJsxBranch(readObject(expression.right))\n );\n}\n\nfunction findOxcRootStatement(body: readonly unknown[]): unknown | undefined {\n return body.find((bodyStatement) => {\n const object = readObject(bodyStatement);\n return object.type === \"ReturnStatement\" || isOxcSwitchRootReturnStatement(object);\n });\n}\n\nfunction isOxcSwitchRootReturnStatement(statement: Record<string, unknown>): boolean {\n if (statement.type !== \"SwitchStatement\") {\n return false;\n }\n\n return readArray(statement.cases).some((switchCase) =>\n readArray(readObject(switchCase).consequent).some(\n (child) => readObject(child).type === \"ReturnStatement\",\n ),\n );\n}\n\nfunction analyzeOxcSwitchRootReturn(\n code: string,\n statement: unknown,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): ComponentIr[\"root\"] | undefined {\n const object = readObject(statement);\n\n if (object.type !== \"SwitchStatement\") {\n return undefined;\n }\n\n const discriminant = readSource(code, object.discriminant);\n const cases = readArray(object.cases).map((switchCase) => {\n const caseObject = readObject(switchCase);\n const returnStatement = readArray(caseObject.consequent)\n .map(readObject)\n .find((child) => child.type === \"ReturnStatement\");\n const argument =\n returnStatement === undefined\n ? undefined\n : unwrapOxcParentheses(readObject(returnStatement.argument));\n\n return {\n test: readObject(caseObject.test),\n children:\n argument === undefined\n ? undefined\n : analyzeOxcDynamicRootBranch(code, argument, context, bodyStatementJsx),\n };\n });\n\n if (cases.some((entry) => entry.children === undefined)) {\n return undefined;\n }\n\n const defaultCase = cases.find((entry) => entry.test.type === undefined);\n let fallback = defaultCase?.children ?? [];\n\n for (const entry of [...cases].reverse()) {\n if (entry.test.type === undefined) {\n continue;\n }\n\n fallback = [\n {\n kind: \"conditional\",\n conditionCode: `${discriminant} === ${readSource(code, entry.test)}`,\n whenTrue: entry.children ?? [],\n whenFalse: fallback,\n },\n ];\n }\n\n return fallback.length === 1 ? fallback[0] : { kind: \"fragment\", children: fallback };\n}\n\nfunction analyzeOxcEarlyIfRootReturn(\n code: string,\n earlyIfRootReturn: OxcEarlyIfRootReturn | undefined,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): ComponentIr[\"root\"] | undefined {\n if (earlyIfRootReturn === undefined) {\n return undefined;\n }\n\n let fallback = analyzeOxcDynamicRootBranch(\n code,\n earlyIfRootReturn.fallthrough,\n context,\n bodyStatementJsx,\n );\n\n for (const branch of [...earlyIfRootReturn.branches].reverse()) {\n fallback = [\n {\n kind: \"conditional\",\n conditionCode: readOxcReactiveRootConditionCode(code, branch.test, context),\n whenTrue: analyzeOxcDynamicRootBranch(\n code,\n branch.consequent,\n context,\n bodyStatementJsx,\n ),\n whenFalse: fallback,\n },\n ];\n }\n\n return fallback.length === 1 ? fallback[0] : { kind: \"fragment\", children: fallback };\n}\n\nfunction readOxcReactiveRootConditionCode(\n code: string,\n expression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n): string {\n return (\n rewriteOxcReactiveAliasExpressionCode(code, expression, context.reactiveAliasBindings) ??\n readSource(code, expression)\n );\n}\n\nfunction analyzeOxcDynamicRootBranch(\n code: string,\n expression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): ComponentIr[\"root\"][] {\n if (expression.type === \"Literal\" && (expression.value === null || expression.value === false)) {\n return [];\n }\n\n return analyzeOxcExpressionChild(code, expression, context, bodyStatementJsx);\n}\n\nfunction analyzeOxcDynamicRootReturn(\n code: string,\n returnExpression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): ComponentIr[\"root\"] | undefined {\n const nodes = analyzeOxcExpressionChild(code, returnExpression, context, bodyStatementJsx);\n\n if (nodes.length !== 1) {\n return undefined;\n }\n\n const [root] = nodes;\n return root?.kind === \"conditional\" ? root : undefined;\n}\n\nfunction analyzeOxcComponentCallExpression(\n code: string,\n expression: Record<string, unknown>,\n): ComponentIr[\"root\"] {\n const callee = readObject(expression.callee);\n const args = readArray(expression.arguments);\n const firstArg = readObject(args[0]);\n\n return {\n kind: \"component\",\n name: readSource(code, callee),\n props:\n firstArg.type === undefined\n ? []\n : [\n {\n kind: \"spread-prop\" as const,\n code: normalizeOxcExpressionCode(readSource(code, firstArg)),\n },\n ],\n children: [],\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reckona/mreact-compiler",
3
- "version": "0.0.68",
3
+ "version": "0.0.69",
4
4
  "description": "Compiler passes and OXC-backed JSX analysis for mreact.",
5
5
  "keywords": [
6
6
  "compiler",
@@ -50,6 +50,6 @@
50
50
  "dependencies": {
51
51
  "oxc-parser": "0.129.0",
52
52
  "oxc-transform": "0.129.0",
53
- "@reckona/mreact-shared": "0.0.68"
53
+ "@reckona/mreact-shared": "0.0.69"
54
54
  }
55
55
  }
@@ -51,6 +51,7 @@ export function collectOxcBodyJsxBindingNames(statements: readonly unknown[]): S
51
51
  export function collectOxcReactiveReadAliases(
52
52
  code: string,
53
53
  statements: readonly unknown[],
54
+ reactiveDerivedFunctions: ReadonlySet<string> = new Set(),
54
55
  ): Map<string, string> {
55
56
  const aliases = new Map<string, string>();
56
57
 
@@ -67,7 +68,12 @@ export function collectOxcReactiveReadAliases(
67
68
  const initializer = unwrapOxcParentheses(readObject(declaration.init));
68
69
 
69
70
  if (typeof id.name !== "string") continue;
70
- if (!isOxcReactiveAliasExpression(initializer)) continue;
71
+ if (
72
+ !isOxcReactiveAliasExpression(initializer) &&
73
+ !isOxcReactiveDerivedAliasExpression(initializer, reactiveDerivedFunctions)
74
+ ) {
75
+ continue;
76
+ }
71
77
 
72
78
  aliases.set(id.name, readSource(code, initializer));
73
79
  }
@@ -76,6 +82,45 @@ export function collectOxcReactiveReadAliases(
76
82
  return aliases;
77
83
  }
78
84
 
85
+ export function collectOxcReactiveDerivedFunctionNames(
86
+ statements: readonly unknown[],
87
+ ): Set<string> {
88
+ const names = new Set<string>();
89
+
90
+ for (const statementValue of statements) {
91
+ const statement = readObject(statementValue);
92
+
93
+ if (statement.type === "FunctionDeclaration") {
94
+ const id = readObject(statement.id);
95
+ if (typeof id.name === "string" && isOxcReactiveDerivedFunction(statement)) {
96
+ names.add(id.name);
97
+ }
98
+ continue;
99
+ }
100
+
101
+ if (statement.type !== "VariableDeclaration" || statement.kind !== "const") {
102
+ continue;
103
+ }
104
+
105
+ for (const declarationValue of readArray(statement.declarations)) {
106
+ const declaration = readObject(declarationValue);
107
+ const id = readObject(declaration.id);
108
+ const initializer = unwrapOxcParentheses(readObject(declaration.init));
109
+
110
+ if (
111
+ typeof id.name === "string" &&
112
+ (initializer.type === "FunctionExpression" ||
113
+ initializer.type === "ArrowFunctionExpression") &&
114
+ isOxcReactiveDerivedFunction(initializer)
115
+ ) {
116
+ names.add(id.name);
117
+ }
118
+ }
119
+ }
120
+
121
+ return names;
122
+ }
123
+
79
124
  export function rewriteOxcReactiveAliasExpressionCode(
80
125
  code: string,
81
126
  expression: Record<string, unknown>,
@@ -93,7 +138,14 @@ export function rewriteOxcReactiveAliasExpressionCode(
93
138
  }
94
139
 
95
140
  const replacements: ReactiveAliasReplacement[] = [];
96
- collectOxcReactiveAliasReplacements(expression, undefined, undefined, aliases, new Set(), replacements);
141
+ collectOxcReactiveAliasReplacements(
142
+ expression,
143
+ undefined,
144
+ undefined,
145
+ aliases,
146
+ new Set(),
147
+ replacements,
148
+ );
97
149
 
98
150
  if (replacements.length === 0) {
99
151
  return undefined;
@@ -147,7 +199,9 @@ function collectOxcReactiveAliasReplacements(
147
199
  replacements.push({
148
200
  end,
149
201
  start,
150
- text: isOxcShorthandPropertyValue(object, parent) ? `${object.name}: (${replacement})` : `(${replacement})`,
202
+ text: isOxcShorthandPropertyValue(object, parent)
203
+ ? `${object.name}: (${replacement})`
204
+ : `(${replacement})`,
151
205
  });
152
206
  }
153
207
  return;
@@ -194,7 +248,14 @@ function collectOxcReactiveAliasReplacements(
194
248
 
195
249
  if (Array.isArray(value)) {
196
250
  for (const item of value) {
197
- collectOxcReactiveAliasReplacements(item, object, key, aliases, childShadowed, replacements);
251
+ collectOxcReactiveAliasReplacements(
252
+ item,
253
+ object,
254
+ key,
255
+ aliases,
256
+ childShadowed,
257
+ replacements,
258
+ );
198
259
  }
199
260
  continue;
200
261
  }
@@ -285,10 +346,7 @@ function isOxcFunctionNode(node: Record<string, unknown>): boolean {
285
346
  );
286
347
  }
287
348
 
288
- function addOxcBlockBindingNames(
289
- node: unknown,
290
- shadowed: Set<string>,
291
- ): ReadonlySet<string> {
349
+ function addOxcBlockBindingNames(node: unknown, shadowed: Set<string>): ReadonlySet<string> {
292
350
  const object = readObject(node);
293
351
  const body = readArray(object.body);
294
352
 
@@ -350,6 +408,64 @@ function collectOxcBindingNames(node: unknown, names: Set<string>): void {
350
408
  }
351
409
  }
352
410
 
411
+ function collectOxcFunctionLocalBindings(
412
+ functionNode: Record<string, unknown>,
413
+ names: Set<string>,
414
+ ): void {
415
+ collectOxcBindingNames(functionNode.id, names);
416
+
417
+ for (const parameter of readArray(functionNode.params)) {
418
+ collectOxcBindingNames(parameter, names);
419
+ }
420
+
421
+ collectOxcLocalBindingsFromNode(readObject(functionNode.body), names);
422
+ }
423
+
424
+ function collectOxcLocalBindingsFromNode(node: unknown, names: Set<string>): void {
425
+ const object = readObject(node);
426
+
427
+ if (typeof object.type !== "string" || object.type.startsWith("TS")) {
428
+ return;
429
+ }
430
+
431
+ if (object.type === "VariableDeclaration") {
432
+ for (const declaration of readArray(object.declarations)) {
433
+ collectOxcBindingNames(readObject(declaration).id, names);
434
+ }
435
+ } else if (object.type === "FunctionDeclaration" || object.type === "ClassDeclaration") {
436
+ collectOxcBindingNames(object.id, names);
437
+ return;
438
+ } else if (object.type === "ForOfStatement" || object.type === "ForInStatement") {
439
+ const left = readObject(object.left);
440
+ const declarations = readArray(left.declarations);
441
+ collectOxcBindingNames(
442
+ declarations.length > 0 ? readObject(declarations[0]).id : object.left,
443
+ names,
444
+ );
445
+ } else if (object.type === "ForStatement") {
446
+ collectOxcLocalBindingsFromNode(object.init, names);
447
+ } else if (isOxcFunctionNode(object)) {
448
+ return;
449
+ }
450
+
451
+ for (const [key, value] of Object.entries(object)) {
452
+ if (key === "type" || key === "start" || key === "end" || key === "loc") {
453
+ continue;
454
+ }
455
+
456
+ if (Array.isArray(value)) {
457
+ for (const item of value) {
458
+ collectOxcLocalBindingsFromNode(item, names);
459
+ }
460
+ continue;
461
+ }
462
+
463
+ if (typeof value === "object" && value !== null) {
464
+ collectOxcLocalBindingsFromNode(value, names);
465
+ }
466
+ }
467
+ }
468
+
353
469
  function readNumber(value: unknown): number | undefined {
354
470
  return typeof value === "number" ? value : undefined;
355
471
  }
@@ -479,6 +595,143 @@ function isOxcReactiveAliasExpression(expression: Record<string, unknown>): bool
479
595
  return state.safe && state.reactive;
480
596
  }
481
597
 
598
+ function isOxcReactiveDerivedAliasExpression(
599
+ expression: Record<string, unknown>,
600
+ reactiveDerivedFunctions: ReadonlySet<string>,
601
+ ): boolean {
602
+ if (reactiveDerivedFunctions.size === 0) {
603
+ return false;
604
+ }
605
+
606
+ const unwrappedExpression = unwrapOxcParentheses(expression);
607
+
608
+ if (unwrappedExpression.type !== "CallExpression") {
609
+ return false;
610
+ }
611
+
612
+ if (readArray(unwrappedExpression.arguments).length !== 0) {
613
+ return false;
614
+ }
615
+
616
+ const callee = readObject(unwrappedExpression.callee);
617
+
618
+ return (
619
+ callee.type === "Identifier" &&
620
+ typeof callee.name === "string" &&
621
+ reactiveDerivedFunctions.has(callee.name)
622
+ );
623
+ }
624
+
625
+ function isOxcReactiveDerivedFunction(functionNode: Record<string, unknown>): boolean {
626
+ if (readArray(functionNode.params).length !== 0) {
627
+ return false;
628
+ }
629
+
630
+ const localBindings = new Set<string>();
631
+ collectOxcFunctionLocalBindings(functionNode, localBindings);
632
+ const usage = analyzeOxcReactiveDerivedFunctionUsage(
633
+ readObject(functionNode.body),
634
+ localBindings,
635
+ );
636
+
637
+ return usage.reactive && usage.safe;
638
+ }
639
+
640
+ function analyzeOxcReactiveDerivedFunctionUsage(
641
+ node: unknown,
642
+ localBindings: ReadonlySet<string>,
643
+ ): ReactiveAliasExpressionState {
644
+ const object = readObject(node);
645
+
646
+ if (typeof object.type !== "string" || object.type.startsWith("TS")) {
647
+ return { reactive: false, safe: true };
648
+ }
649
+
650
+ if (isOxcFunctionNode(object)) {
651
+ return { reactive: false, safe: true };
652
+ }
653
+
654
+ if (object.type === "CallExpression") {
655
+ const callee = readObject(object.callee);
656
+ const member = callee.type === "MemberExpression" ? callee : undefined;
657
+ const property = readObject(member?.property);
658
+ const owner = readObject(member?.object);
659
+ const propertyName =
660
+ member?.computed === true
661
+ ? undefined
662
+ : typeof property.name === "string"
663
+ ? property.name
664
+ : undefined;
665
+ const ownerName = owner.type === "Identifier" ? owner.name : undefined;
666
+
667
+ if (propertyName === "get" && typeof ownerName === "string" && !localBindings.has(ownerName)) {
668
+ return mergeReactiveAliasStates([
669
+ { reactive: true, safe: true },
670
+ ...readArray(object.arguments).map((argument) =>
671
+ analyzeOxcReactiveDerivedFunctionUsage(argument, localBindings),
672
+ ),
673
+ ]);
674
+ }
675
+
676
+ if (
677
+ propertyName !== undefined &&
678
+ typeof ownerName === "string" &&
679
+ !localBindings.has(ownerName) &&
680
+ isLikelyMutatingMethodName(propertyName)
681
+ ) {
682
+ return { reactive: false, safe: false };
683
+ }
684
+ }
685
+
686
+ const states: ReactiveAliasExpressionState[] = [];
687
+
688
+ for (const [key, value] of Object.entries(object)) {
689
+ if (key === "type" || key === "start" || key === "end" || key === "loc") {
690
+ continue;
691
+ }
692
+
693
+ if (Array.isArray(value)) {
694
+ states.push(
695
+ ...value.map((item) => analyzeOxcReactiveDerivedFunctionUsage(item, localBindings)),
696
+ );
697
+ continue;
698
+ }
699
+
700
+ if (typeof value === "object" && value !== null) {
701
+ states.push(analyzeOxcReactiveDerivedFunctionUsage(value, localBindings));
702
+ }
703
+ }
704
+
705
+ return mergeReactiveAliasStates(states);
706
+ }
707
+
708
+ function mergeReactiveAliasStates(
709
+ states: readonly ReactiveAliasExpressionState[],
710
+ ): ReactiveAliasExpressionState {
711
+ return states.reduce<ReactiveAliasExpressionState>(
712
+ (merged, state) => ({
713
+ reactive: merged.reactive || state.reactive,
714
+ safe: merged.safe && state.safe,
715
+ }),
716
+ { reactive: false, safe: true },
717
+ );
718
+ }
719
+
720
+ function isLikelyMutatingMethodName(name: string): boolean {
721
+ return (
722
+ name === "set" ||
723
+ name === "delete" ||
724
+ name === "clear" ||
725
+ name === "push" ||
726
+ name === "pop" ||
727
+ name === "shift" ||
728
+ name === "unshift" ||
729
+ name === "splice" ||
730
+ name === "sort" ||
731
+ name === "reverse"
732
+ );
733
+ }
734
+
482
735
  function analyzeOxcReactiveAliasExpression(
483
736
  expression: Record<string, unknown>,
484
737
  ): ReactiveAliasExpressionState {
package/src/oxc.ts CHANGED
@@ -81,6 +81,7 @@ import {
81
81
  } from "./oxc-expression-utils.js";
82
82
  import {
83
83
  collectOxcBodyJsxBindingNames,
84
+ collectOxcReactiveDerivedFunctionNames,
84
85
  collectOxcReactiveReadAliases,
85
86
  containsOxcJsxSyntax,
86
87
  markOxcRenderValueExpressions,
@@ -237,6 +238,7 @@ function analyzeOxcToIr(
237
238
  const compatRuntimeImports = collectOxcCompatRuntimeImportComponents(program);
238
239
  const bodyLowerers = createOxcBodyLowerers(compatRuntimeImports);
239
240
  const moduleRenderValueBindings = collectOxcBodyJsxBindingNames(body);
241
+ const reactiveDerivedFunctionNames = collectOxcReactiveDerivedFunctionNames(body);
240
242
 
241
243
  for (const statement of body) {
242
244
  const object = readObject(statement);
@@ -324,6 +326,7 @@ function analyzeOxcToIr(
324
326
  options?.serverOutput,
325
327
  componentCallNames,
326
328
  bodyLowerers,
329
+ reactiveDerivedFunctionNames,
327
330
  ),
328
331
  );
329
332
 
@@ -387,6 +390,7 @@ function analyzeOxcComponent(
387
390
  serverOutput: AnalyzeModuleOptions["serverOutput"],
388
391
  componentCallNames: Set<string> | undefined,
389
392
  bodyLowerers: OxcBodyLowerers,
393
+ reactiveDerivedFunctionNames: ReadonlySet<string>,
390
394
  ): ComponentIr[] {
391
395
  const object = readObject(statement);
392
396
 
@@ -414,6 +418,7 @@ function analyzeOxcComponent(
414
418
  serverOutput,
415
419
  componentCallNames,
416
420
  bodyLowerers,
421
+ reactiveDerivedFunctionNames,
417
422
  true,
418
423
  ),
419
424
  ];
@@ -442,6 +447,7 @@ function analyzeOxcComponent(
442
447
  serverOutput,
443
448
  componentCallNames,
444
449
  bodyLowerers,
450
+ reactiveDerivedFunctionNames,
445
451
  ),
446
452
  exported: false,
447
453
  },
@@ -472,6 +478,7 @@ function analyzeOxcComponent(
472
478
  serverOutput,
473
479
  componentCallNames,
474
480
  bodyLowerers,
481
+ reactiveDerivedFunctionNames,
475
482
  ),
476
483
  ];
477
484
  }
@@ -504,6 +511,7 @@ function analyzeOxcComponent(
504
511
  serverOutput,
505
512
  componentCallNames,
506
513
  bodyLowerers,
514
+ reactiveDerivedFunctionNames,
507
515
  ),
508
516
  ];
509
517
  }
@@ -522,6 +530,7 @@ function analyzeOxcFunctionLikeComponent(
522
530
  serverOutput: AnalyzeModuleOptions["serverOutput"],
523
531
  componentCallNames: Set<string> | undefined,
524
532
  bodyLowerers: OxcBodyLowerers,
533
+ reactiveDerivedFunctionNames: ReadonlySet<string>,
525
534
  exportDefault = false,
526
535
  ): ComponentIr {
527
536
  const functionBody = readObject(functionLike.body);
@@ -563,7 +572,11 @@ function analyzeOxcFunctionLikeComponent(
563
572
  ) ?? formatOxcBodyStatement(code, bodyStatement, bodyStatementJsx),
564
573
  );
565
574
  const componentBodyBindings = collectOxcVariableInitializers(body);
566
- const reactiveAliasBindings = collectOxcReactiveReadAliases(code, body);
575
+ const reactiveAliasBindings = collectOxcReactiveReadAliases(
576
+ code,
577
+ body,
578
+ reactiveDerivedFunctionNames,
579
+ );
567
580
  const childAnalysisContext = createOxcChildAnalysisContext(
568
581
  componentNames,
569
582
  target,