@reckona/mreact-compiler 0.0.79 → 0.0.80
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/emit-client.js +11 -1
- package/dist/emit-client.js.map +1 -1
- package/dist/ir.d.ts +1 -0
- package/dist/ir.d.ts.map +1 -1
- package/dist/ir.js.map +1 -1
- package/dist/oxc.js +37 -3
- package/dist/oxc.js.map +1 -1
- package/package.json +2 -2
- package/src/emit-client.ts +17 -1
- package/src/ir.ts +1 -0
- package/src/oxc.ts +57 -3
package/dist/emit-client.js
CHANGED
|
@@ -341,7 +341,8 @@ function nodeReadsNestedItemObject(node, itemName) {
|
|
|
341
341
|
}) ||
|
|
342
342
|
node.children.some((child) => nodeReadsNestedItemObject(child, itemName)));
|
|
343
343
|
case "fragment":
|
|
344
|
-
return node.
|
|
344
|
+
return (node.bodyStatements?.some((statement) => codeReadsNestedItemObject(statement, itemName)) === true ||
|
|
345
|
+
node.children.some((child) => nodeReadsNestedItemObject(child, itemName)));
|
|
345
346
|
case "conditional":
|
|
346
347
|
return (codeReadsNestedItemObject(node.conditionCode, itemName) ||
|
|
347
348
|
node.whenTrue.some((child) => nodeReadsNestedItemObject(child, itemName)) ||
|
|
@@ -427,6 +428,15 @@ function emitNodeRenderValueExpression(node, state) {
|
|
|
427
428
|
: { moduleId: node.clientReference.moduleId, name: node.name });
|
|
428
429
|
}
|
|
429
430
|
if (node.kind === "fragment") {
|
|
431
|
+
if (node.bodyStatements !== undefined && node.bodyStatements.length > 0) {
|
|
432
|
+
const valueExpression = emitRenderValueExpression(node.children, state);
|
|
433
|
+
return [
|
|
434
|
+
"(() => {",
|
|
435
|
+
...node.bodyStatements.map((statement) => ` ${statement}`),
|
|
436
|
+
` return ${valueExpression};`,
|
|
437
|
+
"})()",
|
|
438
|
+
].join("\n");
|
|
439
|
+
}
|
|
430
440
|
return emitRenderValueExpression(node.children, state);
|
|
431
441
|
}
|
|
432
442
|
if (node.kind === "conditional") {
|
package/dist/emit-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-client.js","sourceRoot":"","sources":["../src/emit-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ComponentPropIr,\n ComponentIr,\n JsxNodeIr,\n ModuleIr,\n} from \"./ir.js\";\nimport type { RuntimeImport } from \"./types.js\";\nimport { escapeHtmlAttribute as escapeHtml } from \"@reckona/mreact-shared/html-escape\";\n\nexport interface EmitResult {\n code: string;\n imports: RuntimeImport[];\n}\n\nexport function emitClient(ir: ModuleIr): EmitResult {\n const imports = collectImports(ir);\n const helperNames = allocateRuntimeHelperNames(ir, imports[0]?.specifiers ?? []);\n const importLine =\n imports[0]?.specifiers.length === 0 ? \"\" : emitRuntimeImportLine(imports, helperNames);\n const userImports = emitUserImports(ir);\n const moduleStatements = emitModuleStatements(ir);\n const moduleAllocator = createNameAllocator([]);\n const clientBoundaryHelperName = hasClientReferenceNodes(ir)\n ? moduleAllocator(\"__mreactClientBoundary\", ir.moduleBindingNames)\n : undefined;\n const clientBoundaryHelper =\n clientBoundaryHelperName === undefined ? \"\" : emitClientBoundaryHelper(clientBoundaryHelperName);\n const components = ir.components\n .map((component) =>\n emitComponent(component, moduleAllocator, helperNames, clientBoundaryHelperName),\n )\n .join(\"\\n\\n\");\n\n return {\n code: `${[importLine, userImports, moduleStatements, clientBoundaryHelper].filter(Boolean).join(\"\\n\")}\\n\\n${components}\\n`,\n imports,\n };\n}\n\ntype RuntimeHelperName =\n | \"bindList\"\n | \"bindEvent\"\n | \"bindProp\"\n | \"bindSpreadProps\"\n | \"bindText\"\n | \"createTemplate\"\n | \"insertDynamic\";\n\ntype RuntimeHelperNames = Record<RuntimeHelperName, string>;\n\nfunction allocateRuntimeHelperNames(\n ir: ModuleIr,\n specifiers: readonly string[],\n): RuntimeHelperNames {\n const allocator = createNameAllocator([\n ...ir.moduleBindingNames,\n ...ir.components.flatMap((component) => [\n component.name,\n component.exportName,\n ...component.bindingNames,\n ]),\n ]);\n const helperNames: RuntimeHelperNames = {\n bindList: \"bindList\",\n bindEvent: \"bindEvent\",\n bindProp: \"bindProp\",\n bindSpreadProps: \"bindSpreadProps\",\n bindText: \"bindText\",\n createTemplate: \"createTemplate\",\n insertDynamic: \"insertDynamic\",\n };\n\n for (const specifier of specifiers) {\n const helper = specifier as RuntimeHelperName;\n\n if (ir.moduleBindingNames.includes(helper)) {\n helperNames[helper] = allocator(`_${helper}`);\n }\n }\n\n return helperNames;\n}\n\nfunction emitRuntimeImportLine(\n imports: RuntimeImport[],\n helperNames: RuntimeHelperNames,\n): string {\n const specifiers = imports[0]?.specifiers ?? [\"createTemplate\"];\n const importedNames = specifiers.map((specifier) => {\n const helper = specifier as RuntimeHelperName;\n const localName = helperNames[helper];\n\n return localName === specifier ? specifier : `${specifier} as ${localName}`;\n });\n\n return `import { ${importedNames.join(\", \")} } from \"@reckona/mreact-reactive-dom\";`;\n}\n\nfunction emitUserImports(ir: ModuleIr): string {\n return ir.components.length === 0 ? \"\" : ir.userImports.join(\"\\n\");\n}\n\nfunction emitModuleStatements(ir: ModuleIr): string {\n return ir.components.length === 0 ? \"\" : ir.moduleStatements.join(\"\\n\");\n}\n\nfunction collectImports(ir: ModuleIr): RuntimeImport[] {\n if (ir.components.length === 0) {\n return [];\n }\n\n const specifiers = new Set<string>([\"createTemplate\"]);\n\n for (const component of ir.components) {\n visit(component.root, (node) => {\n if (node.kind === \"expr\") {\n specifiers.add(\n node.renderMode === \"dynamic\" ? \"insertDynamic\" : \"bindText\",\n );\n }\n\n if (node.kind === \"conditional\") {\n specifiers.add(\"insertDynamic\");\n }\n\n if (node.kind === \"list\") {\n specifiers.add(\"bindList\");\n }\n\n if (node.kind === \"element\") {\n for (const attr of node.attributes) {\n if (attr.kind === \"dynamic-attr\") {\n specifiers.add(\"bindProp\");\n }\n\n if (attr.kind === \"spread-attr\") {\n specifiers.add(\"bindSpreadProps\");\n }\n\n if (attr.kind === \"event\") {\n specifiers.add(\"bindEvent\");\n }\n }\n }\n });\n }\n\n return [\n {\n source: \"@reckona/mreact-reactive-dom\",\n specifiers: Array.from(specifiers).sort(),\n },\n ];\n}\n\nfunction hasClientReferenceNodes(ir: ModuleIr): boolean {\n return ir.components.some((component) => {\n let found = false;\n visit(component.root, (node) => {\n if (\n node.kind === \"component\" &&\n node.clientReference !== undefined &&\n isCompatClientReferenceModuleId(node.clientReference.moduleId)\n ) {\n found = true;\n }\n });\n return found;\n });\n}\n\nfunction emitClientBoundaryHelper(name: string): string {\n return `function ${name}(name, props) {\n const fragment = document.createDocumentFragment();\n const placeholder = document.createElement(\"template\");\n placeholder.setAttribute(\"data-mreact-client-boundary\", name);\n const propsElement = document.createElement(\"script\");\n propsElement.type = \"application/json\";\n propsElement.setAttribute(\"data-mreact-client-boundary-props\", name);\n try {\n propsElement.textContent = JSON.stringify(props ?? {}).replaceAll(\"<\", \"\\\\\\\\u003c\");\n } catch {\n placeholder.setAttribute(\"data-mreact-client-boundary-nonserializable\", \"true\");\n propsElement.textContent = \"{}\";\n }\n fragment.append(placeholder, propsElement);\n return fragment;\n}`;\n}\n\nfunction emitComponent(\n component: ComponentIr,\n moduleAllocator: NameAllocator,\n helperNames: RuntimeHelperNames,\n clientBoundaryHelperName: string | undefined,\n): string {\n const templateName = moduleAllocator(\n \"_tmpl_\" + component.name,\n component.bindingNames,\n );\n const allocator = createNameAllocator([...component.bindingNames, templateName]);\n const body = component.bodyStatements.map((statement) => ` ${statement}`);\n const parameters = component.parameters.join(\", \");\n\n if (component.root.kind === \"component\") {\n const state = { allocateName: allocator, textIndex: 0, helperNames, clientBoundaryHelperName };\n return [\n `${component.exported === false ? \"\" : \"export \"}function ${component.name}(${parameters}) {`,\n ...body,\n ` return ${emitComponentCall(\n component.root.name,\n component.root.props,\n component.root.children,\n state,\n component.root.clientReference === undefined\n ? undefined\n : { moduleId: component.root.clientReference.moduleId, name: component.root.name },\n )};`,\n `}`,\n ].join(\"\\n\");\n }\n\n if (component.root.kind === \"conditional\") {\n const state = { allocateName: allocator, textIndex: 0, helperNames, clientBoundaryHelperName };\n const fragmentName = allocator(\"_fragment\");\n const markerName = allocator(\"_marker\");\n return [\n `${component.exportDefault === true ? \"export default \" : component.exported === false ? \"\" : \"export \"}function ${component.name}(${parameters}) {`,\n ...body,\n ` const ${fragmentName} = document.createDocumentFragment();`,\n ` const ${markerName} = document.createComment(\"\");`,\n ` ${fragmentName}.append(${markerName});`,\n ` ${helperNames.insertDynamic}(${fragmentName}, ${markerName}, () => ${emitNodeRenderValueExpression(component.root, state)});`,\n ` return ${fragmentName};`,\n `}`,\n ].join(\"\\n\");\n }\n\n const fragmentName = allocator(\"_fragment\");\n const rootName = allocator(\"_root\");\n const templateHtml = escapeTemplateHtml(renderStaticHtml(component.root));\n const setup = emitSetup(component.root, rootName, {\n allocateName: allocator,\n textIndex: 0,\n helperNames,\n clientBoundaryHelperName,\n });\n return [\n `const ${templateName} = ${helperNames.createTemplate}(\"${templateHtml}\");`,\n `${component.exportDefault === true ? \"export default \" : component.exported === false ? \"\" : \"export \"}function ${component.name}(${parameters}) {`,\n ...body,\n ` const ${fragmentName} = ${templateName}();`,\n component.root.kind === \"fragment\"\n ? ` const ${rootName} = ${fragmentName};`\n : ` const ${rootName} = ${fragmentName}.firstChild;`,\n setup,\n ` return ${rootName};`,\n `}`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction renderStaticHtml(node: JsxNodeIr): string {\n if (node.kind === \"text\") {\n return escapeHtml(node.value);\n }\n\n if (node.kind === \"expr\") {\n return \"<!---->\";\n }\n\n if (node.kind === \"conditional\" || node.kind === \"list\") {\n return \"<!---->\";\n }\n\n if (node.kind === \"fragment\") {\n return node.children.map(renderStaticHtml).join(\"\");\n }\n\n if (node.kind === \"component\") {\n return \"<!---->\";\n }\n\n if (node.kind === \"async-boundary\") {\n return \"<!--mreact-async-boundary-->\";\n }\n\n const attrs = node.attributes\n .filter((attr) => attr.kind === \"static-attr\")\n .map((attr) => ` ${attr.name}=\"${escapeHtml(attr.value)}\"`)\n .join(\"\");\n const children = node.children.map(renderStaticHtml).join(\"\");\n\n return `<${node.tagName}${attrs}>${children}</${node.tagName}>`;\n}\n\ninterface EmitSetupState {\n allocateName: (baseName: string) => string;\n textIndex: number;\n helperNames: RuntimeHelperNames;\n clientBoundaryHelperName?: string | undefined;\n}\n\nfunction emitSetup(\n node: JsxNodeIr,\n path: string,\n state: EmitSetupState,\n): string {\n const lines: string[] = [];\n\n if (\n node.kind !== \"element\" &&\n node.kind !== \"fragment\" &&\n node.kind !== \"component\"\n ) {\n return \"\";\n }\n\n if (node.kind === \"component\") {\n const componentVar = state.allocateName(\"_component\");\n lines.push(\n ` const ${componentVar} = ${emitComponentCall(\n node.name,\n node.props,\n node.children,\n state,\n node.clientReference === undefined\n ? undefined\n : { moduleId: node.clientReference.moduleId, name: node.name },\n )};`,\n );\n lines.push(` if (${componentVar} == null || typeof ${componentVar} === \"boolean\") {`);\n lines.push(` ${path}.remove();`);\n lines.push(` } else {`);\n lines.push(` ${path}.replaceWith(${componentVar});`);\n lines.push(` }`);\n return lines.join(\"\\n\");\n }\n\n if (node.kind === \"element\") {\n for (const attr of node.attributes) {\n if (attr.kind === \"dynamic-attr\") {\n lines.push(\n ` ${state.helperNames.bindProp}(${path}, \"${attr.name}\", () => (${attr.code}));`,\n );\n }\n\n if (attr.kind === \"spread-attr\") {\n lines.push(\n ` ${state.helperNames.bindSpreadProps}(${path}, () => (${attr.code}));`,\n );\n }\n\n if (attr.kind === \"event\") {\n lines.push(\n ` ${state.helperNames.bindEvent}(${path}, \"${attr.eventName}\", ${attr.code});`,\n );\n }\n }\n }\n\n const children = node.children;\n const stableChildrenName = hasLiveChildListMutation(children)\n ? state.allocateName(\"_children\")\n : undefined;\n let childIndex = 0;\n\n if (stableChildrenName !== undefined) {\n lines.push(` const ${stableChildrenName} = Array.from(${path}.childNodes);`);\n }\n\n let sawStaticText = false;\n let sawComponentMutation = false;\n\n for (const child of children) {\n if (child.kind === \"text\") {\n sawStaticText = true;\n childIndex += 1;\n continue;\n }\n\n const childPath =\n stableChildrenName === undefined ||\n (\n child.kind !== \"component\" &&\n !sawComponentMutation &&\n usesLiveInsertionAnchor(child) &&\n !sawStaticText\n )\n ? `${path}.childNodes[${childIndex}]`\n : `${stableChildrenName}[${childIndex}]`;\n\n if (child.kind === \"expr\") {\n if (child.renderMode === \"dynamic\") {\n lines.push(\n ` ${state.helperNames.insertDynamic}(${path}, ${childPath}, () => (${child.code}));`,\n );\n childIndex += 1;\n continue;\n }\n\n const textVar = state.allocateName(`_text_${state.textIndex}`);\n state.textIndex += 1;\n lines.push(` const ${textVar} = document.createTextNode(\"\");`);\n lines.push(` ${childPath}.replaceWith(${textVar});`);\n lines.push(\n ` ${state.helperNames.bindText}(${textVar}, () => (${child.code}));`,\n );\n childIndex += 1;\n continue;\n }\n\n if (child.kind === \"conditional\") {\n lines.push(\n ` ${state.helperNames.insertDynamic}(${path}, ${childPath}, () => (${child.conditionCode}) ? ${emitRenderValueExpression(child.whenTrue, state)} : ${emitRenderValueExpression(child.whenFalse, state)});`,\n );\n childIndex += 1;\n continue;\n }\n\n if (child.kind === \"list\") {\n const parameters = emitListParameters(child);\n const optionEntries: string[] = [];\n\n if (child.keyCode !== undefined) {\n optionEntries.push(`key: (${parameters}) => (${child.keyCode})`);\n }\n\n if (\n child.keyCode !== undefined &&\n listReadsNestedItemObject(child, child.itemName)\n ) {\n optionEntries.push(\"nestedObjectFallback: true\");\n }\n\n const options =\n optionEntries.length === 0 ? \"\" : `, { ${optionEntries.join(\", \")} }`;\n lines.push(\n ` ${state.helperNames.bindList}(${path}, ${childPath}, () => (${child.itemsCode}), ${emitListRenderer(child, parameters, state)}${options});`,\n );\n childIndex += 1;\n continue;\n }\n\n if (child.kind === \"async-boundary\") {\n lines.push(emitAsyncBoundarySetup(child, childPath, state));\n childIndex += 1;\n continue;\n }\n\n lines.push(emitSetup(child, childPath, state));\n if (child.kind === \"component\") {\n sawComponentMutation = true;\n }\n childIndex += 1;\n }\n\n return lines.filter(Boolean).join(\"\\n\");\n}\n\nfunction listReadsNestedItemObject(\n node: Extract<JsxNodeIr, { kind: \"list\" }>,\n itemName: string,\n): boolean {\n return node.children.some((child) => nodeReadsNestedItemObject(child, itemName));\n}\n\nfunction nodeReadsNestedItemObject(node: JsxNodeIr, itemName: string): boolean {\n switch (node.kind) {\n case \"element\":\n return (\n codeReadsNestedItemObject(node.keyCode, itemName) ||\n node.attributes.some((attribute) => {\n if (attribute.kind === \"spread-attr\") {\n return codeReadsNestedItemObject(attribute.code, itemName);\n }\n\n if (attribute.kind === \"dynamic-attr\" || attribute.kind === \"event\") {\n return codeReadsNestedItemObject(attribute.code, itemName);\n }\n\n return false;\n }) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"component\":\n return (\n codeReadsNestedItemObject(node.keyCode, itemName) ||\n node.props.some((prop) => {\n if (prop.kind === \"spread-prop\") {\n return codeReadsNestedItemObject(prop.code, itemName);\n }\n\n if (prop.kind === \"render-prop\") {\n return prop.children.some((child) => nodeReadsNestedItemObject(child, itemName));\n }\n\n return codeReadsNestedItemObject(prop.code, itemName);\n }) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"fragment\":\n return node.children.some((child) => nodeReadsNestedItemObject(child, itemName));\n case \"conditional\":\n return (\n codeReadsNestedItemObject(node.conditionCode, itemName) ||\n node.whenTrue.some((child) => nodeReadsNestedItemObject(child, itemName)) ||\n node.whenFalse.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"list\":\n return (\n codeReadsNestedItemObject(node.itemsCode, itemName) ||\n codeReadsNestedItemObject(node.keyCode, itemName) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"expr\":\n return codeReadsNestedItemObject(node.code, itemName);\n case \"async-boundary\":\n return (\n codeReadsNestedItemObject(node.valueCode, itemName) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName)) ||\n (node.placeholderChildren?.some((child) =>\n nodeReadsNestedItemObject(child, itemName),\n ) ?? false) ||\n (node.catchChildren?.some((child) =>\n nodeReadsNestedItemObject(child, itemName),\n ) ?? false)\n );\n case \"text\":\n return false;\n }\n}\n\nfunction codeReadsNestedItemObject(\n code: string | undefined,\n itemName: string,\n): boolean {\n if (code === undefined || code.length === 0) {\n return false;\n }\n\n const escapedItemName = itemName.replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\");\n return new RegExp(`\\\\b${escapedItemName}(?:\\\\.[A-Za-z_$][\\\\w$]*){2,}`).test(code);\n}\n\nfunction usesLiveInsertionAnchor(child: JsxNodeIr): boolean {\n return (\n child.kind === \"component\" ||\n (child.kind === \"expr\" && child.renderMode === \"dynamic\") ||\n child.kind === \"conditional\" ||\n child.kind === \"list\" ||\n child.kind === \"async-boundary\"\n );\n}\n\nfunction hasLiveChildListMutation(children: readonly JsxNodeIr[]): boolean {\n return children.some(usesLiveInsertionAnchor);\n}\n\nfunction emitRenderValueExpression(\n children: JsxNodeIr[],\n state: EmitSetupState,\n): string {\n if (children.length === 0) {\n return \"null\";\n }\n\n if (children.length === 1) {\n return emitNodeRenderValueExpression(children[0] as JsxNodeIr, state);\n }\n\n return `[${children\n .map((child) => emitNodeRenderValueExpression(child, state))\n .join(\", \")}]`;\n}\n\nfunction emitAsyncBoundarySetup(\n node: Extract<JsxNodeIr, { kind: \"async-boundary\" }>,\n childPath: string,\n state: EmitSetupState,\n): string {\n // Without a stable id the server has no way to tell the client what it\n // resolved. Leave the placeholder comment in place so the server-rendered\n // subtree (preserved via the hydration marker skip) remains the source of\n // truth. The resolved buttons inside it stay non-interactive in that case.\n if (node.awaitId === undefined) {\n return \"\";\n }\n\n const valueName = node.valueName;\n const renderChildren = emitRenderValueExpression(node.children, state);\n const awaitIdLiteral = JSON.stringify(node.awaitId);\n\n return [\n ` {`,\n ` const _awaitStore = globalThis.__mreactAwaitData;`,\n ` const _awaitEntry = _awaitStore === undefined ? undefined : _awaitStore[${awaitIdLiteral}];`,\n ` if (_awaitEntry !== undefined) {`,\n ` const ${valueName} = _awaitEntry.value;`,\n ` const _resolvedAwaitContent = ${renderChildren};`,\n ` if (_resolvedAwaitContent != null) {`,\n ` ${childPath}.replaceWith(_resolvedAwaitContent);`,\n ` }`,\n ` }`,\n ` }`,\n ].join(\"\\n\");\n}\n\nfunction emitNodeRenderValueExpression(\n node: JsxNodeIr,\n state: EmitSetupState,\n): string {\n if (node.kind === \"text\") {\n return JSON.stringify(node.value);\n }\n\n if (node.kind === \"expr\") {\n return `(${node.code})`;\n }\n\n if (node.kind === \"component\") {\n return emitComponentCall(\n node.name,\n node.props,\n node.children,\n state,\n node.clientReference === undefined\n ? undefined\n : { moduleId: node.clientReference.moduleId, name: node.name },\n );\n }\n\n if (node.kind === \"fragment\") {\n return emitRenderValueExpression(node.children, state);\n }\n\n if (node.kind === \"conditional\") {\n return `((${node.conditionCode}) ? ${emitRenderValueExpression(node.whenTrue, state)} : ${emitRenderValueExpression(node.whenFalse, state)})`;\n }\n\n if (node.kind === \"list\") {\n const parameters = emitListParameters(node);\n return `(${node.itemsCode}).map(${emitListRenderer(node, parameters, state)})`;\n }\n\n if (node.kind === \"async-boundary\") {\n return \"null\";\n }\n\n const templateName = state.allocateName(\"_dynamicTemplate\");\n const fragmentName = state.allocateName(\"_dynamicFragment\");\n const rootName = state.allocateName(\"_dynamicRoot\");\n const templateHtml = escapeTemplateHtml(renderStaticHtml(node));\n const setup = emitSetup(node, rootName, state);\n const setupLines = setup === \"\" ? [] : setup.split(\"\\n\");\n\n return [\n \"(() => {\",\n ` const ${templateName} = ${state.helperNames.createTemplate}(\"${templateHtml}\");`,\n ` const ${fragmentName} = ${templateName}();`,\n ` const ${rootName} = ${fragmentName}.firstChild;`,\n ...setupLines,\n ` return ${rootName};`,\n \"})()\",\n ].join(\"\\n\");\n}\n\nfunction emitListRenderer(\n node: Extract<JsxNodeIr, { kind: \"list\" }>,\n parameters: string,\n state: EmitSetupState,\n): string {\n const valueExpression = emitRenderValueExpression(node.children, state);\n\n if (node.bodyStatements === undefined || node.bodyStatements.length === 0) {\n return `(${parameters}) => ${valueExpression}`;\n }\n\n return `(${parameters}) => {\\n${node.bodyStatements.map((statement) => ` ${statement}`).join(\"\\n\")}\\n return ${valueExpression};\\n }`;\n}\n\nfunction emitListParameters(node: Extract<JsxNodeIr, { kind: \"list\" }>): string {\n return [node.itemName, node.indexName, node.arrayName]\n .filter((name): name is string => name !== undefined)\n .join(\", \");\n}\n\nfunction emitComponentCall(\n name: string,\n props: ComponentPropIr[],\n children: JsxNodeIr[],\n state: EmitSetupState,\n clientReference?: { moduleId: string; name: string } | undefined,\n): string {\n if (\n clientReference !== undefined &&\n state.clientBoundaryHelperName !== undefined &&\n isCompatClientReferenceModuleId(clientReference.moduleId)\n ) {\n return `${state.clientBoundaryHelperName}(${JSON.stringify(clientReference.name)}, ${emitPropsObject(props, children, state)})`;\n }\n\n return `${name}(${emitPropsObject(props, children, state)})`;\n}\n\nfunction emitPropsObject(\n props: ComponentPropIr[],\n children: JsxNodeIr[],\n state: EmitSetupState,\n): string {\n const entries = props.map((prop) => {\n if (prop.kind === \"spread-prop\") {\n return `...(${prop.code})`;\n }\n\n if (prop.kind === \"render-prop\") {\n return `${emitPropName(prop.name)}: ${emitRenderValueExpression(prop.children, state)}`;\n }\n\n if (shouldEmitReactiveComponentPropGetter(prop.code)) {\n return `get ${emitGetterPropName(prop.name)}() { return (${prop.code}); }`;\n }\n\n return `${emitPropName(prop.name)}: (${prop.code})`;\n });\n\n if (children.length > 0) {\n entries.push(`children: ${emitRenderValueExpression(children, state)}`);\n }\n\n return `{ ${entries.join(\", \")} }`;\n}\n\nfunction emitPropName(name: string): string {\n return /^[A-Za-z_$][\\w$]*$/.test(name) ? name : JSON.stringify(name);\n}\n\nfunction emitGetterPropName(name: string): string {\n return /^[A-Za-z_$][\\w$]*$/.test(name) ? name : `[${JSON.stringify(name)}]`;\n}\n\nfunction shouldEmitReactiveComponentPropGetter(code: string): boolean {\n if (!/\\.\\s*get\\s*\\(/.test(code)) {\n return false;\n }\n\n return !/^\\s*(?:async\\s*)?(?:function\\b|(?:\\([^)]*\\)|[A-Za-z_$][\\w$]*)\\s*=>)/.test(code);\n}\n\nfunction createNameAllocator(\n reservedNames: readonly string[],\n): NameAllocator {\n const usedNames = new Set(reservedNames);\n\n return (baseName: string, extraReservedNames: readonly string[] = []): string => {\n const reservedNames = new Set(extraReservedNames);\n let name = baseName;\n let index = 1;\n\n while (usedNames.has(name) || reservedNames.has(name)) {\n name = `${baseName}$${index}`;\n index += 1;\n }\n\n usedNames.add(name);\n return name;\n };\n}\n\nfunction isCompatClientReferenceModuleId(moduleId: string): boolean {\n return /\\.compat(?:\\.mreact)?(?:\\.[cm]?[jt]sx?)?$/.test(moduleId);\n}\n\ntype NameAllocator = (\n baseName: string,\n extraReservedNames?: readonly string[],\n) => string;\n\nfunction visit(node: JsxNodeIr, fn: (node: JsxNodeIr) => void): void {\n fn(node);\n\n if (node.kind === \"conditional\") {\n for (const child of [...node.whenTrue, ...node.whenFalse]) {\n visit(child, fn);\n }\n }\n\n if (node.kind === \"list\") {\n for (const child of node.children) {\n visit(child, fn);\n }\n }\n\n if (node.kind === \"component\") {\n for (const prop of node.props) {\n if (prop.kind === \"render-prop\") {\n for (const child of prop.children) {\n visit(child, fn);\n }\n }\n }\n\n for (const child of node.children) {\n visit(child, fn);\n }\n }\n\n if (node.kind === \"element\" || node.kind === \"fragment\") {\n for (const child of node.children) {\n visit(child, fn);\n }\n }\n\n // Async-boundary children participate in client-side rendering when the\n // boundary has an awaitId (hydration data path). Traverse them so their\n // runtime imports (bindList / bindText / bindEvent / etc.) are included.\n if (node.kind === \"async-boundary\") {\n for (const child of node.children) {\n visit(child, fn);\n }\n if (node.placeholderChildren !== undefined) {\n for (const child of node.placeholderChildren) {\n visit(child, fn);\n }\n }\n if (node.catchChildren !== undefined) {\n for (const child of node.catchChildren) {\n visit(child, fn);\n }\n }\n }\n}\n\nfunction escapeTemplateHtml(value: string): string {\n return value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"\\\"\", \"\\\\\\\"\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"emit-client.js","sourceRoot":"","sources":["../src/emit-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ComponentPropIr,\n ComponentIr,\n JsxNodeIr,\n ModuleIr,\n} from \"./ir.js\";\nimport type { RuntimeImport } from \"./types.js\";\nimport { escapeHtmlAttribute as escapeHtml } from \"@reckona/mreact-shared/html-escape\";\n\nexport interface EmitResult {\n code: string;\n imports: RuntimeImport[];\n}\n\nexport function emitClient(ir: ModuleIr): EmitResult {\n const imports = collectImports(ir);\n const helperNames = allocateRuntimeHelperNames(ir, imports[0]?.specifiers ?? []);\n const importLine =\n imports[0]?.specifiers.length === 0 ? \"\" : emitRuntimeImportLine(imports, helperNames);\n const userImports = emitUserImports(ir);\n const moduleStatements = emitModuleStatements(ir);\n const moduleAllocator = createNameAllocator([]);\n const clientBoundaryHelperName = hasClientReferenceNodes(ir)\n ? moduleAllocator(\"__mreactClientBoundary\", ir.moduleBindingNames)\n : undefined;\n const clientBoundaryHelper =\n clientBoundaryHelperName === undefined ? \"\" : emitClientBoundaryHelper(clientBoundaryHelperName);\n const components = ir.components\n .map((component) =>\n emitComponent(component, moduleAllocator, helperNames, clientBoundaryHelperName),\n )\n .join(\"\\n\\n\");\n\n return {\n code: `${[importLine, userImports, moduleStatements, clientBoundaryHelper].filter(Boolean).join(\"\\n\")}\\n\\n${components}\\n`,\n imports,\n };\n}\n\ntype RuntimeHelperName =\n | \"bindList\"\n | \"bindEvent\"\n | \"bindProp\"\n | \"bindSpreadProps\"\n | \"bindText\"\n | \"createTemplate\"\n | \"insertDynamic\";\n\ntype RuntimeHelperNames = Record<RuntimeHelperName, string>;\n\nfunction allocateRuntimeHelperNames(\n ir: ModuleIr,\n specifiers: readonly string[],\n): RuntimeHelperNames {\n const allocator = createNameAllocator([\n ...ir.moduleBindingNames,\n ...ir.components.flatMap((component) => [\n component.name,\n component.exportName,\n ...component.bindingNames,\n ]),\n ]);\n const helperNames: RuntimeHelperNames = {\n bindList: \"bindList\",\n bindEvent: \"bindEvent\",\n bindProp: \"bindProp\",\n bindSpreadProps: \"bindSpreadProps\",\n bindText: \"bindText\",\n createTemplate: \"createTemplate\",\n insertDynamic: \"insertDynamic\",\n };\n\n for (const specifier of specifiers) {\n const helper = specifier as RuntimeHelperName;\n\n if (ir.moduleBindingNames.includes(helper)) {\n helperNames[helper] = allocator(`_${helper}`);\n }\n }\n\n return helperNames;\n}\n\nfunction emitRuntimeImportLine(\n imports: RuntimeImport[],\n helperNames: RuntimeHelperNames,\n): string {\n const specifiers = imports[0]?.specifiers ?? [\"createTemplate\"];\n const importedNames = specifiers.map((specifier) => {\n const helper = specifier as RuntimeHelperName;\n const localName = helperNames[helper];\n\n return localName === specifier ? specifier : `${specifier} as ${localName}`;\n });\n\n return `import { ${importedNames.join(\", \")} } from \"@reckona/mreact-reactive-dom\";`;\n}\n\nfunction emitUserImports(ir: ModuleIr): string {\n return ir.components.length === 0 ? \"\" : ir.userImports.join(\"\\n\");\n}\n\nfunction emitModuleStatements(ir: ModuleIr): string {\n return ir.components.length === 0 ? \"\" : ir.moduleStatements.join(\"\\n\");\n}\n\nfunction collectImports(ir: ModuleIr): RuntimeImport[] {\n if (ir.components.length === 0) {\n return [];\n }\n\n const specifiers = new Set<string>([\"createTemplate\"]);\n\n for (const component of ir.components) {\n visit(component.root, (node) => {\n if (node.kind === \"expr\") {\n specifiers.add(\n node.renderMode === \"dynamic\" ? \"insertDynamic\" : \"bindText\",\n );\n }\n\n if (node.kind === \"conditional\") {\n specifiers.add(\"insertDynamic\");\n }\n\n if (node.kind === \"list\") {\n specifiers.add(\"bindList\");\n }\n\n if (node.kind === \"element\") {\n for (const attr of node.attributes) {\n if (attr.kind === \"dynamic-attr\") {\n specifiers.add(\"bindProp\");\n }\n\n if (attr.kind === \"spread-attr\") {\n specifiers.add(\"bindSpreadProps\");\n }\n\n if (attr.kind === \"event\") {\n specifiers.add(\"bindEvent\");\n }\n }\n }\n });\n }\n\n return [\n {\n source: \"@reckona/mreact-reactive-dom\",\n specifiers: Array.from(specifiers).sort(),\n },\n ];\n}\n\nfunction hasClientReferenceNodes(ir: ModuleIr): boolean {\n return ir.components.some((component) => {\n let found = false;\n visit(component.root, (node) => {\n if (\n node.kind === \"component\" &&\n node.clientReference !== undefined &&\n isCompatClientReferenceModuleId(node.clientReference.moduleId)\n ) {\n found = true;\n }\n });\n return found;\n });\n}\n\nfunction emitClientBoundaryHelper(name: string): string {\n return `function ${name}(name, props) {\n const fragment = document.createDocumentFragment();\n const placeholder = document.createElement(\"template\");\n placeholder.setAttribute(\"data-mreact-client-boundary\", name);\n const propsElement = document.createElement(\"script\");\n propsElement.type = \"application/json\";\n propsElement.setAttribute(\"data-mreact-client-boundary-props\", name);\n try {\n propsElement.textContent = JSON.stringify(props ?? {}).replaceAll(\"<\", \"\\\\\\\\u003c\");\n } catch {\n placeholder.setAttribute(\"data-mreact-client-boundary-nonserializable\", \"true\");\n propsElement.textContent = \"{}\";\n }\n fragment.append(placeholder, propsElement);\n return fragment;\n}`;\n}\n\nfunction emitComponent(\n component: ComponentIr,\n moduleAllocator: NameAllocator,\n helperNames: RuntimeHelperNames,\n clientBoundaryHelperName: string | undefined,\n): string {\n const templateName = moduleAllocator(\n \"_tmpl_\" + component.name,\n component.bindingNames,\n );\n const allocator = createNameAllocator([...component.bindingNames, templateName]);\n const body = component.bodyStatements.map((statement) => ` ${statement}`);\n const parameters = component.parameters.join(\", \");\n\n if (component.root.kind === \"component\") {\n const state = { allocateName: allocator, textIndex: 0, helperNames, clientBoundaryHelperName };\n return [\n `${component.exported === false ? \"\" : \"export \"}function ${component.name}(${parameters}) {`,\n ...body,\n ` return ${emitComponentCall(\n component.root.name,\n component.root.props,\n component.root.children,\n state,\n component.root.clientReference === undefined\n ? undefined\n : { moduleId: component.root.clientReference.moduleId, name: component.root.name },\n )};`,\n `}`,\n ].join(\"\\n\");\n }\n\n if (component.root.kind === \"conditional\") {\n const state = { allocateName: allocator, textIndex: 0, helperNames, clientBoundaryHelperName };\n const fragmentName = allocator(\"_fragment\");\n const markerName = allocator(\"_marker\");\n return [\n `${component.exportDefault === true ? \"export default \" : component.exported === false ? \"\" : \"export \"}function ${component.name}(${parameters}) {`,\n ...body,\n ` const ${fragmentName} = document.createDocumentFragment();`,\n ` const ${markerName} = document.createComment(\"\");`,\n ` ${fragmentName}.append(${markerName});`,\n ` ${helperNames.insertDynamic}(${fragmentName}, ${markerName}, () => ${emitNodeRenderValueExpression(component.root, state)});`,\n ` return ${fragmentName};`,\n `}`,\n ].join(\"\\n\");\n }\n\n const fragmentName = allocator(\"_fragment\");\n const rootName = allocator(\"_root\");\n const templateHtml = escapeTemplateHtml(renderStaticHtml(component.root));\n const setup = emitSetup(component.root, rootName, {\n allocateName: allocator,\n textIndex: 0,\n helperNames,\n clientBoundaryHelperName,\n });\n return [\n `const ${templateName} = ${helperNames.createTemplate}(\"${templateHtml}\");`,\n `${component.exportDefault === true ? \"export default \" : component.exported === false ? \"\" : \"export \"}function ${component.name}(${parameters}) {`,\n ...body,\n ` const ${fragmentName} = ${templateName}();`,\n component.root.kind === \"fragment\"\n ? ` const ${rootName} = ${fragmentName};`\n : ` const ${rootName} = ${fragmentName}.firstChild;`,\n setup,\n ` return ${rootName};`,\n `}`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction renderStaticHtml(node: JsxNodeIr): string {\n if (node.kind === \"text\") {\n return escapeHtml(node.value);\n }\n\n if (node.kind === \"expr\") {\n return \"<!---->\";\n }\n\n if (node.kind === \"conditional\" || node.kind === \"list\") {\n return \"<!---->\";\n }\n\n if (node.kind === \"fragment\") {\n return node.children.map(renderStaticHtml).join(\"\");\n }\n\n if (node.kind === \"component\") {\n return \"<!---->\";\n }\n\n if (node.kind === \"async-boundary\") {\n return \"<!--mreact-async-boundary-->\";\n }\n\n const attrs = node.attributes\n .filter((attr) => attr.kind === \"static-attr\")\n .map((attr) => ` ${attr.name}=\"${escapeHtml(attr.value)}\"`)\n .join(\"\");\n const children = node.children.map(renderStaticHtml).join(\"\");\n\n return `<${node.tagName}${attrs}>${children}</${node.tagName}>`;\n}\n\ninterface EmitSetupState {\n allocateName: (baseName: string) => string;\n textIndex: number;\n helperNames: RuntimeHelperNames;\n clientBoundaryHelperName?: string | undefined;\n}\n\nfunction emitSetup(\n node: JsxNodeIr,\n path: string,\n state: EmitSetupState,\n): string {\n const lines: string[] = [];\n\n if (\n node.kind !== \"element\" &&\n node.kind !== \"fragment\" &&\n node.kind !== \"component\"\n ) {\n return \"\";\n }\n\n if (node.kind === \"component\") {\n const componentVar = state.allocateName(\"_component\");\n lines.push(\n ` const ${componentVar} = ${emitComponentCall(\n node.name,\n node.props,\n node.children,\n state,\n node.clientReference === undefined\n ? undefined\n : { moduleId: node.clientReference.moduleId, name: node.name },\n )};`,\n );\n lines.push(` if (${componentVar} == null || typeof ${componentVar} === \"boolean\") {`);\n lines.push(` ${path}.remove();`);\n lines.push(` } else {`);\n lines.push(` ${path}.replaceWith(${componentVar});`);\n lines.push(` }`);\n return lines.join(\"\\n\");\n }\n\n if (node.kind === \"element\") {\n for (const attr of node.attributes) {\n if (attr.kind === \"dynamic-attr\") {\n lines.push(\n ` ${state.helperNames.bindProp}(${path}, \"${attr.name}\", () => (${attr.code}));`,\n );\n }\n\n if (attr.kind === \"spread-attr\") {\n lines.push(\n ` ${state.helperNames.bindSpreadProps}(${path}, () => (${attr.code}));`,\n );\n }\n\n if (attr.kind === \"event\") {\n lines.push(\n ` ${state.helperNames.bindEvent}(${path}, \"${attr.eventName}\", ${attr.code});`,\n );\n }\n }\n }\n\n const children = node.children;\n const stableChildrenName = hasLiveChildListMutation(children)\n ? state.allocateName(\"_children\")\n : undefined;\n let childIndex = 0;\n\n if (stableChildrenName !== undefined) {\n lines.push(` const ${stableChildrenName} = Array.from(${path}.childNodes);`);\n }\n\n let sawStaticText = false;\n let sawComponentMutation = false;\n\n for (const child of children) {\n if (child.kind === \"text\") {\n sawStaticText = true;\n childIndex += 1;\n continue;\n }\n\n const childPath =\n stableChildrenName === undefined ||\n (\n child.kind !== \"component\" &&\n !sawComponentMutation &&\n usesLiveInsertionAnchor(child) &&\n !sawStaticText\n )\n ? `${path}.childNodes[${childIndex}]`\n : `${stableChildrenName}[${childIndex}]`;\n\n if (child.kind === \"expr\") {\n if (child.renderMode === \"dynamic\") {\n lines.push(\n ` ${state.helperNames.insertDynamic}(${path}, ${childPath}, () => (${child.code}));`,\n );\n childIndex += 1;\n continue;\n }\n\n const textVar = state.allocateName(`_text_${state.textIndex}`);\n state.textIndex += 1;\n lines.push(` const ${textVar} = document.createTextNode(\"\");`);\n lines.push(` ${childPath}.replaceWith(${textVar});`);\n lines.push(\n ` ${state.helperNames.bindText}(${textVar}, () => (${child.code}));`,\n );\n childIndex += 1;\n continue;\n }\n\n if (child.kind === \"conditional\") {\n lines.push(\n ` ${state.helperNames.insertDynamic}(${path}, ${childPath}, () => (${child.conditionCode}) ? ${emitRenderValueExpression(child.whenTrue, state)} : ${emitRenderValueExpression(child.whenFalse, state)});`,\n );\n childIndex += 1;\n continue;\n }\n\n if (child.kind === \"list\") {\n const parameters = emitListParameters(child);\n const optionEntries: string[] = [];\n\n if (child.keyCode !== undefined) {\n optionEntries.push(`key: (${parameters}) => (${child.keyCode})`);\n }\n\n if (\n child.keyCode !== undefined &&\n listReadsNestedItemObject(child, child.itemName)\n ) {\n optionEntries.push(\"nestedObjectFallback: true\");\n }\n\n const options =\n optionEntries.length === 0 ? \"\" : `, { ${optionEntries.join(\", \")} }`;\n lines.push(\n ` ${state.helperNames.bindList}(${path}, ${childPath}, () => (${child.itemsCode}), ${emitListRenderer(child, parameters, state)}${options});`,\n );\n childIndex += 1;\n continue;\n }\n\n if (child.kind === \"async-boundary\") {\n lines.push(emitAsyncBoundarySetup(child, childPath, state));\n childIndex += 1;\n continue;\n }\n\n lines.push(emitSetup(child, childPath, state));\n if (child.kind === \"component\") {\n sawComponentMutation = true;\n }\n childIndex += 1;\n }\n\n return lines.filter(Boolean).join(\"\\n\");\n}\n\nfunction listReadsNestedItemObject(\n node: Extract<JsxNodeIr, { kind: \"list\" }>,\n itemName: string,\n): boolean {\n return node.children.some((child) => nodeReadsNestedItemObject(child, itemName));\n}\n\nfunction nodeReadsNestedItemObject(node: JsxNodeIr, itemName: string): boolean {\n switch (node.kind) {\n case \"element\":\n return (\n codeReadsNestedItemObject(node.keyCode, itemName) ||\n node.attributes.some((attribute) => {\n if (attribute.kind === \"spread-attr\") {\n return codeReadsNestedItemObject(attribute.code, itemName);\n }\n\n if (attribute.kind === \"dynamic-attr\" || attribute.kind === \"event\") {\n return codeReadsNestedItemObject(attribute.code, itemName);\n }\n\n return false;\n }) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"component\":\n return (\n codeReadsNestedItemObject(node.keyCode, itemName) ||\n node.props.some((prop) => {\n if (prop.kind === \"spread-prop\") {\n return codeReadsNestedItemObject(prop.code, itemName);\n }\n\n if (prop.kind === \"render-prop\") {\n return prop.children.some((child) => nodeReadsNestedItemObject(child, itemName));\n }\n\n return codeReadsNestedItemObject(prop.code, itemName);\n }) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"fragment\":\n return (\n node.bodyStatements?.some((statement) =>\n codeReadsNestedItemObject(statement, itemName),\n ) === true ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"conditional\":\n return (\n codeReadsNestedItemObject(node.conditionCode, itemName) ||\n node.whenTrue.some((child) => nodeReadsNestedItemObject(child, itemName)) ||\n node.whenFalse.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"list\":\n return (\n codeReadsNestedItemObject(node.itemsCode, itemName) ||\n codeReadsNestedItemObject(node.keyCode, itemName) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"expr\":\n return codeReadsNestedItemObject(node.code, itemName);\n case \"async-boundary\":\n return (\n codeReadsNestedItemObject(node.valueCode, itemName) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName)) ||\n (node.placeholderChildren?.some((child) =>\n nodeReadsNestedItemObject(child, itemName),\n ) ?? false) ||\n (node.catchChildren?.some((child) =>\n nodeReadsNestedItemObject(child, itemName),\n ) ?? false)\n );\n case \"text\":\n return false;\n }\n}\n\nfunction codeReadsNestedItemObject(\n code: string | undefined,\n itemName: string,\n): boolean {\n if (code === undefined || code.length === 0) {\n return false;\n }\n\n const escapedItemName = itemName.replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\");\n return new RegExp(`\\\\b${escapedItemName}(?:\\\\.[A-Za-z_$][\\\\w$]*){2,}`).test(code);\n}\n\nfunction usesLiveInsertionAnchor(child: JsxNodeIr): boolean {\n return (\n child.kind === \"component\" ||\n (child.kind === \"expr\" && child.renderMode === \"dynamic\") ||\n child.kind === \"conditional\" ||\n child.kind === \"list\" ||\n child.kind === \"async-boundary\"\n );\n}\n\nfunction hasLiveChildListMutation(children: readonly JsxNodeIr[]): boolean {\n return children.some(usesLiveInsertionAnchor);\n}\n\nfunction emitRenderValueExpression(\n children: JsxNodeIr[],\n state: EmitSetupState,\n): string {\n if (children.length === 0) {\n return \"null\";\n }\n\n if (children.length === 1) {\n return emitNodeRenderValueExpression(children[0] as JsxNodeIr, state);\n }\n\n return `[${children\n .map((child) => emitNodeRenderValueExpression(child, state))\n .join(\", \")}]`;\n}\n\nfunction emitAsyncBoundarySetup(\n node: Extract<JsxNodeIr, { kind: \"async-boundary\" }>,\n childPath: string,\n state: EmitSetupState,\n): string {\n // Without a stable id the server has no way to tell the client what it\n // resolved. Leave the placeholder comment in place so the server-rendered\n // subtree (preserved via the hydration marker skip) remains the source of\n // truth. The resolved buttons inside it stay non-interactive in that case.\n if (node.awaitId === undefined) {\n return \"\";\n }\n\n const valueName = node.valueName;\n const renderChildren = emitRenderValueExpression(node.children, state);\n const awaitIdLiteral = JSON.stringify(node.awaitId);\n\n return [\n ` {`,\n ` const _awaitStore = globalThis.__mreactAwaitData;`,\n ` const _awaitEntry = _awaitStore === undefined ? undefined : _awaitStore[${awaitIdLiteral}];`,\n ` if (_awaitEntry !== undefined) {`,\n ` const ${valueName} = _awaitEntry.value;`,\n ` const _resolvedAwaitContent = ${renderChildren};`,\n ` if (_resolvedAwaitContent != null) {`,\n ` ${childPath}.replaceWith(_resolvedAwaitContent);`,\n ` }`,\n ` }`,\n ` }`,\n ].join(\"\\n\");\n}\n\nfunction emitNodeRenderValueExpression(\n node: JsxNodeIr,\n state: EmitSetupState,\n): string {\n if (node.kind === \"text\") {\n return JSON.stringify(node.value);\n }\n\n if (node.kind === \"expr\") {\n return `(${node.code})`;\n }\n\n if (node.kind === \"component\") {\n return emitComponentCall(\n node.name,\n node.props,\n node.children,\n state,\n node.clientReference === undefined\n ? undefined\n : { moduleId: node.clientReference.moduleId, name: node.name },\n );\n }\n\n if (node.kind === \"fragment\") {\n if (node.bodyStatements !== undefined && node.bodyStatements.length > 0) {\n const valueExpression = emitRenderValueExpression(node.children, state);\n\n return [\n \"(() => {\",\n ...node.bodyStatements.map((statement) => ` ${statement}`),\n ` return ${valueExpression};`,\n \"})()\",\n ].join(\"\\n\");\n }\n\n return emitRenderValueExpression(node.children, state);\n }\n\n if (node.kind === \"conditional\") {\n return `((${node.conditionCode}) ? ${emitRenderValueExpression(node.whenTrue, state)} : ${emitRenderValueExpression(node.whenFalse, state)})`;\n }\n\n if (node.kind === \"list\") {\n const parameters = emitListParameters(node);\n return `(${node.itemsCode}).map(${emitListRenderer(node, parameters, state)})`;\n }\n\n if (node.kind === \"async-boundary\") {\n return \"null\";\n }\n\n const templateName = state.allocateName(\"_dynamicTemplate\");\n const fragmentName = state.allocateName(\"_dynamicFragment\");\n const rootName = state.allocateName(\"_dynamicRoot\");\n const templateHtml = escapeTemplateHtml(renderStaticHtml(node));\n const setup = emitSetup(node, rootName, state);\n const setupLines = setup === \"\" ? [] : setup.split(\"\\n\");\n\n return [\n \"(() => {\",\n ` const ${templateName} = ${state.helperNames.createTemplate}(\"${templateHtml}\");`,\n ` const ${fragmentName} = ${templateName}();`,\n ` const ${rootName} = ${fragmentName}.firstChild;`,\n ...setupLines,\n ` return ${rootName};`,\n \"})()\",\n ].join(\"\\n\");\n}\n\nfunction emitListRenderer(\n node: Extract<JsxNodeIr, { kind: \"list\" }>,\n parameters: string,\n state: EmitSetupState,\n): string {\n const valueExpression = emitRenderValueExpression(node.children, state);\n\n if (node.bodyStatements === undefined || node.bodyStatements.length === 0) {\n return `(${parameters}) => ${valueExpression}`;\n }\n\n return `(${parameters}) => {\\n${node.bodyStatements.map((statement) => ` ${statement}`).join(\"\\n\")}\\n return ${valueExpression};\\n }`;\n}\n\nfunction emitListParameters(node: Extract<JsxNodeIr, { kind: \"list\" }>): string {\n return [node.itemName, node.indexName, node.arrayName]\n .filter((name): name is string => name !== undefined)\n .join(\", \");\n}\n\nfunction emitComponentCall(\n name: string,\n props: ComponentPropIr[],\n children: JsxNodeIr[],\n state: EmitSetupState,\n clientReference?: { moduleId: string; name: string } | undefined,\n): string {\n if (\n clientReference !== undefined &&\n state.clientBoundaryHelperName !== undefined &&\n isCompatClientReferenceModuleId(clientReference.moduleId)\n ) {\n return `${state.clientBoundaryHelperName}(${JSON.stringify(clientReference.name)}, ${emitPropsObject(props, children, state)})`;\n }\n\n return `${name}(${emitPropsObject(props, children, state)})`;\n}\n\nfunction emitPropsObject(\n props: ComponentPropIr[],\n children: JsxNodeIr[],\n state: EmitSetupState,\n): string {\n const entries = props.map((prop) => {\n if (prop.kind === \"spread-prop\") {\n return `...(${prop.code})`;\n }\n\n if (prop.kind === \"render-prop\") {\n return `${emitPropName(prop.name)}: ${emitRenderValueExpression(prop.children, state)}`;\n }\n\n if (shouldEmitReactiveComponentPropGetter(prop.code)) {\n return `get ${emitGetterPropName(prop.name)}() { return (${prop.code}); }`;\n }\n\n return `${emitPropName(prop.name)}: (${prop.code})`;\n });\n\n if (children.length > 0) {\n entries.push(`children: ${emitRenderValueExpression(children, state)}`);\n }\n\n return `{ ${entries.join(\", \")} }`;\n}\n\nfunction emitPropName(name: string): string {\n return /^[A-Za-z_$][\\w$]*$/.test(name) ? name : JSON.stringify(name);\n}\n\nfunction emitGetterPropName(name: string): string {\n return /^[A-Za-z_$][\\w$]*$/.test(name) ? name : `[${JSON.stringify(name)}]`;\n}\n\nfunction shouldEmitReactiveComponentPropGetter(code: string): boolean {\n if (!/\\.\\s*get\\s*\\(/.test(code)) {\n return false;\n }\n\n return !/^\\s*(?:async\\s*)?(?:function\\b|(?:\\([^)]*\\)|[A-Za-z_$][\\w$]*)\\s*=>)/.test(code);\n}\n\nfunction createNameAllocator(\n reservedNames: readonly string[],\n): NameAllocator {\n const usedNames = new Set(reservedNames);\n\n return (baseName: string, extraReservedNames: readonly string[] = []): string => {\n const reservedNames = new Set(extraReservedNames);\n let name = baseName;\n let index = 1;\n\n while (usedNames.has(name) || reservedNames.has(name)) {\n name = `${baseName}$${index}`;\n index += 1;\n }\n\n usedNames.add(name);\n return name;\n };\n}\n\nfunction isCompatClientReferenceModuleId(moduleId: string): boolean {\n return /\\.compat(?:\\.mreact)?(?:\\.[cm]?[jt]sx?)?$/.test(moduleId);\n}\n\ntype NameAllocator = (\n baseName: string,\n extraReservedNames?: readonly string[],\n) => string;\n\nfunction visit(node: JsxNodeIr, fn: (node: JsxNodeIr) => void): void {\n fn(node);\n\n if (node.kind === \"conditional\") {\n for (const child of [...node.whenTrue, ...node.whenFalse]) {\n visit(child, fn);\n }\n }\n\n if (node.kind === \"list\") {\n for (const child of node.children) {\n visit(child, fn);\n }\n }\n\n if (node.kind === \"component\") {\n for (const prop of node.props) {\n if (prop.kind === \"render-prop\") {\n for (const child of prop.children) {\n visit(child, fn);\n }\n }\n }\n\n for (const child of node.children) {\n visit(child, fn);\n }\n }\n\n if (node.kind === \"element\" || node.kind === \"fragment\") {\n for (const child of node.children) {\n visit(child, fn);\n }\n }\n\n // Async-boundary children participate in client-side rendering when the\n // boundary has an awaitId (hydration data path). Traverse them so their\n // runtime imports (bindList / bindText / bindEvent / etc.) are included.\n if (node.kind === \"async-boundary\") {\n for (const child of node.children) {\n visit(child, fn);\n }\n if (node.placeholderChildren !== undefined) {\n for (const child of node.placeholderChildren) {\n visit(child, fn);\n }\n }\n if (node.catchChildren !== undefined) {\n for (const child of node.catchChildren) {\n visit(child, fn);\n }\n }\n }\n}\n\nfunction escapeTemplateHtml(value: string): string {\n return value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"\\\"\", \"\\\\\\\"\");\n}\n"]}
|
package/dist/ir.d.ts
CHANGED
package/dist/ir.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"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"}
|
package/dist/ir.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ir.js","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"","sourcesContent":["import type { SourceLocation } from \"./types.js\";\n\nexport interface ModuleIr {\n userImports: string[];\n moduleStatements: string[];\n moduleBindingNames: string[];\n components: ComponentIr[];\n}\n\nexport interface ComponentIr {\n name: string;\n exportName: string;\n exported?: boolean;\n exportDefault?: boolean;\n async?: boolean;\n parameters: string[];\n bodyStatements: string[];\n bindingNames: string[];\n root: JsxNodeIr;\n}\n\nexport type JsxNodeIr =\n | JsxElementIr\n | ComponentRefIr\n | JsxFragmentIr\n | ConditionalIr\n | ListIr\n | TextIr\n | ExprIr\n | AsyncBoundaryIr;\n\nexport interface JsxElementIr {\n kind: \"element\";\n tagName: string;\n keyCode?: string;\n attributes: AttributeIr[];\n children: JsxNodeIr[];\n}\n\nexport interface ComponentRefIr {\n kind: \"component\";\n name: string;\n loc?: SourceLocation;\n runtime?: \"compat\";\n async?: boolean;\n clientReference?: ClientReferenceIr;\n keyCode?: string;\n props: ComponentPropIr[];\n children: JsxNodeIr[];\n}\n\nexport interface ClientReferenceIr {\n moduleId: string;\n exportName: string;\n}\n\nexport type ComponentPropIr = ComponentNamedPropIr | ComponentRenderPropIr | ComponentSpreadPropIr;\n\nexport interface ComponentNamedPropIr {\n kind: \"prop\";\n name: string;\n code: string;\n}\n\nexport interface ComponentRenderPropIr {\n kind: \"render-prop\";\n name: string;\n valueName?: string;\n children: JsxNodeIr[];\n}\n\nexport interface ComponentSpreadPropIr {\n kind: \"spread-prop\";\n code: string;\n}\n\nexport interface JsxFragmentIr {\n kind: \"fragment\";\n children: JsxNodeIr[];\n}\n\nexport interface ConditionalIr {\n kind: \"conditional\";\n conditionCode: string;\n whenTrue: JsxNodeIr[];\n whenFalse: JsxNodeIr[];\n}\n\nexport interface ListIr {\n kind: \"list\";\n itemsCode: string;\n itemName: string;\n indexName?: string;\n arrayName?: string;\n keyCode?: string;\n bodyStatements?: string[];\n children: JsxNodeIr[];\n}\n\nexport interface TextIr {\n kind: \"text\";\n value: string;\n}\n\nexport interface ExprIr {\n kind: \"expr\";\n code: string;\n renderMode?: \"dynamic\" | \"html\" | \"react-node\" | \"stream-node\";\n}\n\nexport interface AsyncBoundaryIr {\n kind: \"async-boundary\";\n loc?: SourceLocation;\n valueCode: string;\n valueName: string;\n children: JsxNodeIr[];\n placeholderChildren?: JsxNodeIr[];\n placeholderTagCode?: string;\n catchName?: string;\n catchChildren?: JsxNodeIr[];\n awaitId?: string;\n}\n\nexport type AttributeIr =\n | StaticAttributeIr\n | DynamicAttributeIr\n | EventAttributeIr\n | SpreadAttributeIr;\n\nexport interface StaticAttributeIr {\n kind: \"static-attr\";\n name: string;\n value: string;\n}\n\nexport interface DynamicAttributeIr {\n kind: \"dynamic-attr\";\n name: string;\n code: string;\n}\n\nexport interface EventAttributeIr {\n kind: \"event\";\n name: string;\n eventName: string;\n code: string;\n}\n\nexport interface SpreadAttributeIr {\n kind: \"spread-attr\";\n code: string;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ir.js","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"","sourcesContent":["import type { SourceLocation } from \"./types.js\";\n\nexport interface ModuleIr {\n userImports: string[];\n moduleStatements: string[];\n moduleBindingNames: string[];\n components: ComponentIr[];\n}\n\nexport interface ComponentIr {\n name: string;\n exportName: string;\n exported?: boolean;\n exportDefault?: boolean;\n async?: boolean;\n parameters: string[];\n bodyStatements: string[];\n bindingNames: string[];\n root: JsxNodeIr;\n}\n\nexport type JsxNodeIr =\n | JsxElementIr\n | ComponentRefIr\n | JsxFragmentIr\n | ConditionalIr\n | ListIr\n | TextIr\n | ExprIr\n | AsyncBoundaryIr;\n\nexport interface JsxElementIr {\n kind: \"element\";\n tagName: string;\n keyCode?: string;\n attributes: AttributeIr[];\n children: JsxNodeIr[];\n}\n\nexport interface ComponentRefIr {\n kind: \"component\";\n name: string;\n loc?: SourceLocation;\n runtime?: \"compat\";\n async?: boolean;\n clientReference?: ClientReferenceIr;\n keyCode?: string;\n props: ComponentPropIr[];\n children: JsxNodeIr[];\n}\n\nexport interface ClientReferenceIr {\n moduleId: string;\n exportName: string;\n}\n\nexport type ComponentPropIr = ComponentNamedPropIr | ComponentRenderPropIr | ComponentSpreadPropIr;\n\nexport interface ComponentNamedPropIr {\n kind: \"prop\";\n name: string;\n code: string;\n}\n\nexport interface ComponentRenderPropIr {\n kind: \"render-prop\";\n name: string;\n valueName?: string;\n children: JsxNodeIr[];\n}\n\nexport interface ComponentSpreadPropIr {\n kind: \"spread-prop\";\n code: string;\n}\n\nexport interface JsxFragmentIr {\n kind: \"fragment\";\n bodyStatements?: string[];\n children: JsxNodeIr[];\n}\n\nexport interface ConditionalIr {\n kind: \"conditional\";\n conditionCode: string;\n whenTrue: JsxNodeIr[];\n whenFalse: JsxNodeIr[];\n}\n\nexport interface ListIr {\n kind: \"list\";\n itemsCode: string;\n itemName: string;\n indexName?: string;\n arrayName?: string;\n keyCode?: string;\n bodyStatements?: string[];\n children: JsxNodeIr[];\n}\n\nexport interface TextIr {\n kind: \"text\";\n value: string;\n}\n\nexport interface ExprIr {\n kind: \"expr\";\n code: string;\n renderMode?: \"dynamic\" | \"html\" | \"react-node\" | \"stream-node\";\n}\n\nexport interface AsyncBoundaryIr {\n kind: \"async-boundary\";\n loc?: SourceLocation;\n valueCode: string;\n valueName: string;\n children: JsxNodeIr[];\n placeholderChildren?: JsxNodeIr[];\n placeholderTagCode?: string;\n catchName?: string;\n catchChildren?: JsxNodeIr[];\n awaitId?: string;\n}\n\nexport type AttributeIr =\n | StaticAttributeIr\n | DynamicAttributeIr\n | EventAttributeIr\n | SpreadAttributeIr;\n\nexport interface StaticAttributeIr {\n kind: \"static-attr\";\n name: string;\n value: string;\n}\n\nexport interface DynamicAttributeIr {\n kind: \"dynamic-attr\";\n name: string;\n code: string;\n}\n\nexport interface EventAttributeIr {\n kind: \"event\";\n name: string;\n eventName: string;\n code: string;\n}\n\nexport interface SpreadAttributeIr {\n kind: \"spread-attr\";\n code: string;\n}\n"]}
|
package/dist/oxc.js
CHANGED
|
@@ -246,7 +246,9 @@ function analyzeOxcComponent(code, statement, componentNames, target, diagnostic
|
|
|
246
246
|
function analyzeOxcFunctionLikeComponent(code, name, functionLike, exportName, componentNames, target, diagnostics, bodyStatementJsx, moduleRenderValueBindings, compatReactNodeReturn, serverOutput, componentCallNames, bodyLowerers, reactiveDerivedFunctionNames, exportDefault = false) {
|
|
247
247
|
const functionBody = readObject(functionLike.body);
|
|
248
248
|
const body = functionBody.type === "BlockStatement" ? readArray(functionBody.body) : [];
|
|
249
|
-
const earlyIfRootReturn = bodyStatementJsx === "compat-object"
|
|
249
|
+
const earlyIfRootReturn = bodyStatementJsx === "compat-object"
|
|
250
|
+
? undefined
|
|
251
|
+
: findOxcEarlyIfRootReturn(body, target === "client");
|
|
250
252
|
const rootStatement = earlyIfRootReturn?.branchStatements[0] ??
|
|
251
253
|
(bodyStatementJsx === "compat-object"
|
|
252
254
|
? body.find((bodyStatement) => readObject(bodyStatement).type === "ReturnStatement")
|
|
@@ -260,6 +262,7 @@ function analyzeOxcFunctionLikeComponent(code, name, functionLike, exportName, c
|
|
|
260
262
|
const bodyStatements = body
|
|
261
263
|
.filter((bodyStatement) => bodyStatement !== rootStatement &&
|
|
262
264
|
earlyIfRootReturn?.branchStatements.includes(bodyStatement) !== true &&
|
|
265
|
+
earlyIfRootReturn?.fallthroughBodyStatements.includes(bodyStatement) !== true &&
|
|
263
266
|
bodyStatement !== earlyIfRootReturn?.fallthroughStatement)
|
|
264
267
|
.map((bodyStatement) => lowerOxcBodyStatementJsx(code, bodyStatement, componentNames, target, diagnostics, bodyStatementJsx, bodyLowerers) ?? formatOxcBodyStatement(code, bodyStatement, bodyStatementJsx));
|
|
265
268
|
const componentBodyBindings = collectOxcVariableInitializers(body);
|
|
@@ -284,6 +287,7 @@ function analyzeOxcFunctionLikeComponent(code, name, functionLike, exportName, c
|
|
|
284
287
|
...moduleRenderValueBindings,
|
|
285
288
|
...collectOxcBodyJsxBindingNames(body.filter((bodyStatement) => bodyStatement !== rootStatement &&
|
|
286
289
|
earlyIfRootReturn?.branchStatements.includes(bodyStatement) !== true &&
|
|
290
|
+
earlyIfRootReturn?.fallthroughBodyStatements.includes(bodyStatement) !== true &&
|
|
287
291
|
bodyStatement !== earlyIfRootReturn?.fallthroughStatement)),
|
|
288
292
|
]), bodyStatementJsx === "server-string" ? "html" : "dynamic");
|
|
289
293
|
return {
|
|
@@ -297,7 +301,7 @@ function analyzeOxcFunctionLikeComponent(code, name, functionLike, exportName, c
|
|
|
297
301
|
root,
|
|
298
302
|
};
|
|
299
303
|
}
|
|
300
|
-
function findOxcEarlyIfRootReturn(body) {
|
|
304
|
+
function findOxcEarlyIfRootReturn(body, allowFallthroughBodyStatements) {
|
|
301
305
|
for (let index = 0; index < body.length - 1; index += 1) {
|
|
302
306
|
const branches = [];
|
|
303
307
|
const branchStatements = [];
|
|
@@ -321,13 +325,34 @@ function findOxcEarlyIfRootReturn(body) {
|
|
|
321
325
|
if (branches.length === 0) {
|
|
322
326
|
continue;
|
|
323
327
|
}
|
|
324
|
-
const
|
|
328
|
+
const fallthroughStart = cursor;
|
|
329
|
+
let fallthroughStatement = body[cursor];
|
|
325
330
|
const fallthrough = readOxcReturnExpressionFromStatement(fallthroughStatement);
|
|
331
|
+
if (fallthrough === undefined && allowFallthroughBodyStatements) {
|
|
332
|
+
while (cursor < body.length) {
|
|
333
|
+
fallthroughStatement = body[cursor];
|
|
334
|
+
const candidate = readOxcReturnExpressionFromStatement(fallthroughStatement);
|
|
335
|
+
if (candidate !== undefined) {
|
|
336
|
+
if (!isOxcRootReturnExpression(candidate)) {
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
return {
|
|
340
|
+
branchStatements,
|
|
341
|
+
fallthroughBodyStatements: body.slice(fallthroughStart, cursor),
|
|
342
|
+
fallthroughStatement,
|
|
343
|
+
branches,
|
|
344
|
+
fallthrough: candidate,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
cursor += 1;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
326
350
|
if (fallthrough === undefined || !isOxcRootReturnExpression(fallthrough)) {
|
|
327
351
|
continue;
|
|
328
352
|
}
|
|
329
353
|
return {
|
|
330
354
|
branchStatements,
|
|
355
|
+
fallthroughBodyStatements: [],
|
|
331
356
|
fallthroughStatement,
|
|
332
357
|
branches,
|
|
333
358
|
fallthrough,
|
|
@@ -427,6 +452,15 @@ function analyzeOxcEarlyIfRootReturn(code, earlyIfRootReturn, context, bodyState
|
|
|
427
452
|
return undefined;
|
|
428
453
|
}
|
|
429
454
|
let fallback = analyzeOxcDynamicRootBranch(code, earlyIfRootReturn.fallthrough, context, bodyStatementJsx);
|
|
455
|
+
if (earlyIfRootReturn.fallthroughBodyStatements.length > 0) {
|
|
456
|
+
fallback = [
|
|
457
|
+
{
|
|
458
|
+
kind: "fragment",
|
|
459
|
+
bodyStatements: earlyIfRootReturn.fallthroughBodyStatements.map((bodyStatement) => lowerOxcBodyStatementJsx(code, bodyStatement, context.componentNames, context.target, context.diagnostics, bodyStatementJsx, context.bodyLowerers) ?? formatOxcBodyStatement(code, bodyStatement, bodyStatementJsx)),
|
|
460
|
+
children: fallback,
|
|
461
|
+
},
|
|
462
|
+
];
|
|
463
|
+
}
|
|
430
464
|
for (const branch of [...earlyIfRootReturn.branches].reverse()) {
|
|
431
465
|
fallback = [
|
|
432
466
|
{
|
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 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"]}
|
|
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\"\n ? undefined\n : findOxcEarlyIfRootReturn(body, target === \"client\");\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 earlyIfRootReturn?.fallthroughBodyStatements.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 earlyIfRootReturn?.fallthroughBodyStatements.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 fallthroughBodyStatements: unknown[];\n branches: Array<{\n test: Record<string, unknown>;\n consequent: Record<string, unknown>;\n }>;\n fallthrough: Record<string, unknown>;\n}\n\nfunction findOxcEarlyIfRootReturn(\n body: readonly unknown[],\n allowFallthroughBodyStatements: boolean,\n): 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 fallthroughStart = cursor;\n let fallthroughStatement = body[cursor];\n const fallthrough = readOxcReturnExpressionFromStatement(fallthroughStatement);\n\n if (fallthrough === undefined && allowFallthroughBodyStatements) {\n while (cursor < body.length) {\n fallthroughStatement = body[cursor];\n const candidate = readOxcReturnExpressionFromStatement(fallthroughStatement);\n\n if (candidate !== undefined) {\n if (!isOxcRootReturnExpression(candidate)) {\n break;\n }\n\n return {\n branchStatements,\n fallthroughBodyStatements: body.slice(fallthroughStart, cursor),\n fallthroughStatement,\n branches,\n fallthrough: candidate,\n };\n }\n\n cursor += 1;\n }\n }\n\n if (fallthrough === undefined || !isOxcRootReturnExpression(fallthrough)) {\n continue;\n }\n\n return {\n branchStatements,\n fallthroughBodyStatements: [],\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 if (earlyIfRootReturn.fallthroughBodyStatements.length > 0) {\n fallback = [\n {\n kind: \"fragment\",\n bodyStatements: earlyIfRootReturn.fallthroughBodyStatements.map(\n (bodyStatement) =>\n lowerOxcBodyStatementJsx(\n code,\n bodyStatement,\n context.componentNames,\n context.target,\n context.diagnostics,\n bodyStatementJsx,\n context.bodyLowerers,\n ) ?? formatOxcBodyStatement(code, bodyStatement, bodyStatementJsx),\n ),\n children: fallback,\n },\n ];\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.80",
|
|
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.80"
|
|
54
54
|
}
|
|
55
55
|
}
|
package/src/emit-client.ts
CHANGED
|
@@ -501,7 +501,12 @@ function nodeReadsNestedItemObject(node: JsxNodeIr, itemName: string): boolean {
|
|
|
501
501
|
node.children.some((child) => nodeReadsNestedItemObject(child, itemName))
|
|
502
502
|
);
|
|
503
503
|
case "fragment":
|
|
504
|
-
return
|
|
504
|
+
return (
|
|
505
|
+
node.bodyStatements?.some((statement) =>
|
|
506
|
+
codeReadsNestedItemObject(statement, itemName),
|
|
507
|
+
) === true ||
|
|
508
|
+
node.children.some((child) => nodeReadsNestedItemObject(child, itemName))
|
|
509
|
+
);
|
|
505
510
|
case "conditional":
|
|
506
511
|
return (
|
|
507
512
|
codeReadsNestedItemObject(node.conditionCode, itemName) ||
|
|
@@ -632,6 +637,17 @@ function emitNodeRenderValueExpression(
|
|
|
632
637
|
}
|
|
633
638
|
|
|
634
639
|
if (node.kind === "fragment") {
|
|
640
|
+
if (node.bodyStatements !== undefined && node.bodyStatements.length > 0) {
|
|
641
|
+
const valueExpression = emitRenderValueExpression(node.children, state);
|
|
642
|
+
|
|
643
|
+
return [
|
|
644
|
+
"(() => {",
|
|
645
|
+
...node.bodyStatements.map((statement) => ` ${statement}`),
|
|
646
|
+
` return ${valueExpression};`,
|
|
647
|
+
"})()",
|
|
648
|
+
].join("\n");
|
|
649
|
+
}
|
|
650
|
+
|
|
635
651
|
return emitRenderValueExpression(node.children, state);
|
|
636
652
|
}
|
|
637
653
|
|
package/src/ir.ts
CHANGED
package/src/oxc.ts
CHANGED
|
@@ -536,7 +536,9 @@ function analyzeOxcFunctionLikeComponent(
|
|
|
536
536
|
const functionBody = readObject(functionLike.body);
|
|
537
537
|
const body = functionBody.type === "BlockStatement" ? readArray(functionBody.body) : [];
|
|
538
538
|
const earlyIfRootReturn =
|
|
539
|
-
bodyStatementJsx === "compat-object"
|
|
539
|
+
bodyStatementJsx === "compat-object"
|
|
540
|
+
? undefined
|
|
541
|
+
: findOxcEarlyIfRootReturn(body, target === "client");
|
|
540
542
|
const rootStatement =
|
|
541
543
|
earlyIfRootReturn?.branchStatements[0] ??
|
|
542
544
|
(bodyStatementJsx === "compat-object"
|
|
@@ -557,6 +559,7 @@ function analyzeOxcFunctionLikeComponent(
|
|
|
557
559
|
(bodyStatement) =>
|
|
558
560
|
bodyStatement !== rootStatement &&
|
|
559
561
|
earlyIfRootReturn?.branchStatements.includes(bodyStatement) !== true &&
|
|
562
|
+
earlyIfRootReturn?.fallthroughBodyStatements.includes(bodyStatement) !== true &&
|
|
560
563
|
bodyStatement !== earlyIfRootReturn?.fallthroughStatement,
|
|
561
564
|
)
|
|
562
565
|
.map(
|
|
@@ -638,6 +641,7 @@ function analyzeOxcFunctionLikeComponent(
|
|
|
638
641
|
(bodyStatement) =>
|
|
639
642
|
bodyStatement !== rootStatement &&
|
|
640
643
|
earlyIfRootReturn?.branchStatements.includes(bodyStatement) !== true &&
|
|
644
|
+
earlyIfRootReturn?.fallthroughBodyStatements.includes(bodyStatement) !== true &&
|
|
641
645
|
bodyStatement !== earlyIfRootReturn?.fallthroughStatement,
|
|
642
646
|
),
|
|
643
647
|
),
|
|
@@ -660,6 +664,7 @@ function analyzeOxcFunctionLikeComponent(
|
|
|
660
664
|
interface OxcEarlyIfRootReturn {
|
|
661
665
|
branchStatements: unknown[];
|
|
662
666
|
fallthroughStatement: unknown;
|
|
667
|
+
fallthroughBodyStatements: unknown[];
|
|
663
668
|
branches: Array<{
|
|
664
669
|
test: Record<string, unknown>;
|
|
665
670
|
consequent: Record<string, unknown>;
|
|
@@ -667,7 +672,10 @@ interface OxcEarlyIfRootReturn {
|
|
|
667
672
|
fallthrough: Record<string, unknown>;
|
|
668
673
|
}
|
|
669
674
|
|
|
670
|
-
function findOxcEarlyIfRootReturn(
|
|
675
|
+
function findOxcEarlyIfRootReturn(
|
|
676
|
+
body: readonly unknown[],
|
|
677
|
+
allowFallthroughBodyStatements: boolean,
|
|
678
|
+
): OxcEarlyIfRootReturn | undefined {
|
|
671
679
|
for (let index = 0; index < body.length - 1; index += 1) {
|
|
672
680
|
const branches: OxcEarlyIfRootReturn["branches"] = [];
|
|
673
681
|
const branchStatements: unknown[] = [];
|
|
@@ -698,15 +706,40 @@ function findOxcEarlyIfRootReturn(body: readonly unknown[]): OxcEarlyIfRootRetur
|
|
|
698
706
|
continue;
|
|
699
707
|
}
|
|
700
708
|
|
|
701
|
-
const
|
|
709
|
+
const fallthroughStart = cursor;
|
|
710
|
+
let fallthroughStatement = body[cursor];
|
|
702
711
|
const fallthrough = readOxcReturnExpressionFromStatement(fallthroughStatement);
|
|
703
712
|
|
|
713
|
+
if (fallthrough === undefined && allowFallthroughBodyStatements) {
|
|
714
|
+
while (cursor < body.length) {
|
|
715
|
+
fallthroughStatement = body[cursor];
|
|
716
|
+
const candidate = readOxcReturnExpressionFromStatement(fallthroughStatement);
|
|
717
|
+
|
|
718
|
+
if (candidate !== undefined) {
|
|
719
|
+
if (!isOxcRootReturnExpression(candidate)) {
|
|
720
|
+
break;
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
return {
|
|
724
|
+
branchStatements,
|
|
725
|
+
fallthroughBodyStatements: body.slice(fallthroughStart, cursor),
|
|
726
|
+
fallthroughStatement,
|
|
727
|
+
branches,
|
|
728
|
+
fallthrough: candidate,
|
|
729
|
+
};
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
cursor += 1;
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
|
|
704
736
|
if (fallthrough === undefined || !isOxcRootReturnExpression(fallthrough)) {
|
|
705
737
|
continue;
|
|
706
738
|
}
|
|
707
739
|
|
|
708
740
|
return {
|
|
709
741
|
branchStatements,
|
|
742
|
+
fallthroughBodyStatements: [],
|
|
710
743
|
fallthroughStatement,
|
|
711
744
|
branches,
|
|
712
745
|
fallthrough,
|
|
@@ -861,6 +894,27 @@ function analyzeOxcEarlyIfRootReturn(
|
|
|
861
894
|
bodyStatementJsx,
|
|
862
895
|
);
|
|
863
896
|
|
|
897
|
+
if (earlyIfRootReturn.fallthroughBodyStatements.length > 0) {
|
|
898
|
+
fallback = [
|
|
899
|
+
{
|
|
900
|
+
kind: "fragment",
|
|
901
|
+
bodyStatements: earlyIfRootReturn.fallthroughBodyStatements.map(
|
|
902
|
+
(bodyStatement) =>
|
|
903
|
+
lowerOxcBodyStatementJsx(
|
|
904
|
+
code,
|
|
905
|
+
bodyStatement,
|
|
906
|
+
context.componentNames,
|
|
907
|
+
context.target,
|
|
908
|
+
context.diagnostics,
|
|
909
|
+
bodyStatementJsx,
|
|
910
|
+
context.bodyLowerers,
|
|
911
|
+
) ?? formatOxcBodyStatement(code, bodyStatement, bodyStatementJsx),
|
|
912
|
+
),
|
|
913
|
+
children: fallback,
|
|
914
|
+
},
|
|
915
|
+
];
|
|
916
|
+
}
|
|
917
|
+
|
|
864
918
|
for (const branch of [...earlyIfRootReturn.branches].reverse()) {
|
|
865
919
|
fallback = [
|
|
866
920
|
{
|