@reckona/mreact-compiler 0.0.68 → 0.0.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/oxc-render-values.d.ts +2 -1
- package/dist/oxc-render-values.d.ts.map +1 -1
- package/dist/oxc-render-values.js +172 -3
- package/dist/oxc-render-values.js.map +1 -1
- package/dist/oxc.d.ts.map +1 -1
- package/dist/oxc.js +10 -9
- package/dist/oxc.js.map +1 -1
- package/package.json +2 -2
- package/src/oxc-render-values.ts +261 -8
- package/src/oxc.ts +14 -1
|
@@ -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,
|
|
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)
|
|
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;
|
|
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.
|
|
3
|
+
"version": "0.0.70",
|
|
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.
|
|
53
|
+
"@reckona/mreact-shared": "0.0.70"
|
|
54
54
|
}
|
|
55
55
|
}
|
package/src/oxc-render-values.ts
CHANGED
|
@@ -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 (
|
|
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(
|
|
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)
|
|
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(
|
|
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(
|
|
575
|
+
const reactiveAliasBindings = collectOxcReactiveReadAliases(
|
|
576
|
+
code,
|
|
577
|
+
body,
|
|
578
|
+
reactiveDerivedFunctionNames,
|
|
579
|
+
);
|
|
567
580
|
const childAnalysisContext = createOxcChildAnalysisContext(
|
|
568
581
|
componentNames,
|
|
569
582
|
target,
|