@reckona/mreact-compiler 0.0.70 → 0.0.72
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 +7 -6
- package/dist/emit-client.js.map +1 -1
- package/dist/emit-compat.js +6 -3
- package/dist/emit-compat.js.map +1 -1
- package/dist/emit-server-stream.js +5 -1
- package/dist/emit-server-stream.js.map +1 -1
- package/dist/emit-server.js +11 -7
- package/dist/emit-server.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-child-analysis.js +2 -0
- package/dist/oxc-child-analysis.js.map +1 -1
- package/dist/oxc-runtime-emit.d.ts.map +1 -1
- package/dist/oxc-runtime-emit.js +7 -2
- package/dist/oxc-runtime-emit.js.map +1 -1
- package/package.json +2 -2
- package/src/emit-client.ts +8 -8
- package/src/emit-compat.ts +7 -4
- package/src/emit-server-stream.ts +7 -1
- package/src/emit-server.ts +14 -9
- package/src/ir.ts +1 -0
- package/src/oxc-child-analysis.ts +2 -0
- package/src/oxc-runtime-emit.ts +8 -4
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 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 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"]}
|
|
@@ -315,6 +315,7 @@ function analyzeOxcListExpression(code, expression, context, bodyStatementJsx) {
|
|
|
315
315
|
}
|
|
316
316
|
const itemName = String(readObject(readArray(renderer.params)[0]).name ?? "_item");
|
|
317
317
|
const indexName = readObject(readArray(renderer.params)[1]).name;
|
|
318
|
+
const arrayName = readObject(readArray(renderer.params)[2]).name;
|
|
318
319
|
const rendererBody = analyzeOxcListRenderer(code, renderer, context, bodyStatementJsx);
|
|
319
320
|
if (rendererBody === undefined) {
|
|
320
321
|
return undefined;
|
|
@@ -328,6 +329,7 @@ function analyzeOxcListExpression(code, expression, context, bodyStatementJsx) {
|
|
|
328
329
|
: readOxcReactiveExpressionCode(code, readObject(callee.object), context),
|
|
329
330
|
itemName,
|
|
330
331
|
...(typeof indexName === "string" ? { indexName } : {}),
|
|
332
|
+
...(typeof arrayName === "string" ? { arrayName } : {}),
|
|
331
333
|
...(keyCode === undefined ? {} : { keyCode }),
|
|
332
334
|
...(bodyStatements.length === 0 ? {} : { bodyStatements }),
|
|
333
335
|
children,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-child-analysis.js","sourceRoot":"","sources":["../src/oxc-child-analysis.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n invalidJsxExpressionDiagnostic,\n unserializableAwaitValueDiagnostic,\n unsupportedComponentReferenceDiagnostic,\n} from \"./diagnostics.js\";\nimport type { AsyncBoundaryIr, JsxElementIr, JsxNodeIr } from \"./ir.js\";\nimport type { OxcBodyStatementJsxMode } from \"./oxc-analysis-types.js\";\nimport {\n detectUnserializableAwaitValueReason,\n readOxcExpressionAttribute,\n readOxcExpressionAttributeNode,\n} from \"./oxc-await-analysis.js\";\nimport {\n analyzeOxcArrowJsxRenderer,\n analyzeOxcComponentProp,\n analyzeOxcSingleArrowJsxChild,\n readOxcConsumerRenderProp,\n} from \"./oxc-component-props.js\";\nimport {\n formatOxcBodyStatement,\n lowerOxcBodyStatementJsx,\n type OxcBodyLowerers,\n} from \"./oxc-body-lowering.js\";\nimport { normalizeOxcExpressionCode, stripOxcGeneratedImports } from \"./oxc-code-utils.js\";\nimport {\n findOxcKeyCodeInChildren,\n isOxcJsxBranch,\n readOxcReturnExpressionFromStatement,\n} from \"./oxc-expression-utils.js\";\nimport {\n analyzeOxcAttribute,\n findOxcJsxAttributeCode,\n readOxcJsxTagName,\n} from \"./oxc-jsx-attributes.js\";\nimport { normalizeOxcJsxText } from \"./oxc-jsx-text.js\";\nimport {\n getOxcLocation,\n readArray,\n readObject,\n readSource,\n unwrapOxcParentheses,\n} from \"./oxc-node-utils.js\";\nimport {\n collectOxcBodyJsxBindingNames,\n containsOxcJsxSyntax,\n isOxcRenderValueExpression,\n markOxcRenderValueExpressions,\n rewriteOxcReactiveAliasExpressionCode,\n} from \"./oxc-render-values.js\";\nimport { transformJsxWithOxc } from \"./oxc-transform.js\";\nimport type { CompileTarget, Diagnostic, ServerOutputMode } from \"./types.js\";\n\nexport interface OxcChildAnalysisContext {\n componentNames: Set<string>;\n componentCallNames?: Set<string>;\n target: CompileTarget;\n serverOutput?: ServerOutputMode;\n diagnostics: Diagnostic[];\n bodyStatementJsx?: OxcBodyStatementJsxMode;\n componentBodyBindings?: ReadonlyMap<string, Record<string, unknown>>;\n reactiveAliasBindings?: ReadonlyMap<string, string>;\n bodyLowerers: OxcBodyLowerers;\n lowerNestedJsxExpression: (\n code: string,\n expression: Record<string, unknown>,\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n bodyStatementJsx: OxcBodyStatementJsxMode,\n ) => string | undefined;\n}\n\nexport function analyzeOxcJsxNode(\n code: string,\n node: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx = resolveOxcBodyStatementJsx(context),\n): JsxNodeIr {\n if (node.type === \"JSXFragment\") {\n return {\n kind: \"fragment\",\n children: analyzeOxcChildren(\n code,\n readArray(node.children),\n context,\n bodyStatementJsx,\n ),\n };\n }\n\n if (node.type !== \"JSXElement\") {\n return { kind: \"expr\", code: readSource(code, node) };\n }\n\n const openingElement = readObject(node.openingElement);\n const tagName = readOxcJsxTagName(readObject(openingElement.name));\n const attributes = readArray(openingElement.attributes);\n\n if (tagName === \"Await\") {\n return analyzeOxcAsyncBoundary(code, node, attributes, context, bodyStatementJsx);\n }\n\n if (tagName === \"Slot\") {\n const keyCode = findOxcJsxAttributeCode(code, attributes, \"key\");\n const allowRef = bodyStatementJsx === \"compat-object\";\n\n return {\n kind: \"element\",\n tagName: \"slot\",\n ...(keyCode === undefined ? {} : { keyCode }),\n attributes: attributes\n .flatMap((attr) =>\n analyzeOxcAttribute(code, attr, context.target, context.diagnostics, {\n allowRef,\n resolveExpressionCode: (expression) =>\n readOxcReactiveExpressionCode(code, expression, context),\n }),\n )\n .filter((attribute) => attribute.kind === \"spread-attr\" || attribute.name !== \"key\"),\n children: analyzeOxcChildren(\n code,\n readArray(node.children),\n context,\n bodyStatementJsx,\n ),\n } satisfies JsxElementIr;\n }\n\n if (\n /^[A-Z][\\w$]*(?:\\.[A-Za-z_$][\\w$]*)+$/.test(tagName) ||\n context.componentNames.has(tagName) ||\n isOxcServerRuntimeComponentBinding(tagName, context)\n ) {\n const keyCode = findOxcJsxAttributeCode(code, attributes, \"key\");\n const allowRef = bodyStatementJsx === \"compat-object\";\n const analyzeJsxNode = (\n child: Record<string, unknown>,\n childBodyStatementJsx: OxcBodyStatementJsxMode = bodyStatementJsx,\n ) => analyzeOxcJsxNode(code, child, context, childBodyStatementJsx);\n const consumerRenderProp = tagName.endsWith(\".Consumer\")\n ? readOxcConsumerRenderProp(\n code,\n readArray(node.children),\n analyzeJsxNode,\n bodyStatementJsx,\n )\n : undefined;\n const componentLoc = getOxcLocation(code, openingElement.name);\n\n return {\n kind: \"component\",\n name: tagName,\n ...(componentLoc === undefined ? {} : { loc: componentLoc }),\n ...(keyCode === undefined ? {} : { keyCode }),\n props: attributes\n .flatMap((attr) =>\n analyzeOxcComponentProp(code, attr, analyzeJsxNode, context.diagnostics, {\n allowRef,\n resolveExpressionCode: (expression) =>\n readOxcReactiveExpressionCode(code, expression, context),\n }),\n )\n .filter((prop) => prop.kind === \"spread-prop\" || prop.name !== \"key\")\n .concat(consumerRenderProp === undefined ? [] : [consumerRenderProp]),\n children:\n consumerRenderProp === undefined\n ? analyzeOxcChildren(code, readArray(node.children), context, bodyStatementJsx)\n : [],\n };\n }\n\n if (/^[A-Z]/.test(tagName)) {\n const componentLoc = getOxcLocation(code, openingElement.name);\n context.diagnostics.push(unsupportedComponentReferenceDiagnostic(tagName, componentLoc));\n\n return {\n kind: \"component\",\n name: tagName,\n ...(componentLoc === undefined ? {} : { loc: componentLoc }),\n props: [],\n children: [],\n };\n }\n\n const keyCode = findOxcJsxAttributeCode(code, attributes, \"key\");\n const allowRef = bodyStatementJsx === \"compat-object\";\n\n return {\n kind: \"element\",\n tagName,\n ...(keyCode === undefined ? {} : { keyCode }),\n attributes: attributes\n .flatMap((attr) =>\n analyzeOxcAttribute(code, attr, context.target, context.diagnostics, {\n allowRef,\n resolveExpressionCode: (expression) =>\n readOxcReactiveExpressionCode(code, expression, context),\n }),\n )\n .filter((attribute) => attribute.kind === \"spread-attr\" || attribute.name !== \"key\"),\n children: analyzeOxcChildren(code, readArray(node.children), context, bodyStatementJsx),\n } satisfies JsxElementIr;\n}\n\nfunction isOxcServerRuntimeComponentBinding(\n tagName: string,\n context: OxcChildAnalysisContext,\n): boolean {\n if (context.target !== \"server\" || !/^[A-Z]/.test(tagName)) {\n return false;\n }\n\n const binding = context.componentBodyBindings?.get(tagName);\n if (binding === undefined) {\n return false;\n }\n\n return isOxcRuntimeComponentExpression(binding);\n}\n\nfunction isOxcRuntimeComponentExpression(expression: Record<string, unknown>): boolean {\n if (\n expression.type === \"Identifier\" ||\n expression.type === \"MemberExpression\" ||\n expression.type === \"CallExpression\" ||\n expression.type === \"FunctionExpression\" ||\n expression.type === \"ArrowFunctionExpression\"\n ) {\n return true;\n }\n\n if (expression.type === \"ChainExpression\") {\n return isOxcRuntimeComponentExpression(readObject(expression.expression));\n }\n\n if (expression.type === \"ConditionalExpression\") {\n return (\n isOxcRuntimeComponentExpression(readObject(expression.consequent)) &&\n isOxcRuntimeComponentExpression(readObject(expression.alternate))\n );\n }\n\n if (expression.type === \"LogicalExpression\") {\n return isOxcRuntimeComponentExpression(readObject(expression.right));\n }\n\n return false;\n}\n\nfunction analyzeOxcAsyncBoundary(\n code: string,\n node: Record<string, unknown>,\n attributes: readonly unknown[],\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): AsyncBoundaryIr {\n const valueExpression = readOxcExpressionAttributeNode(attributes, \"value\");\n\n if (valueExpression !== undefined) {\n const unserializableReason = detectUnserializableAwaitValueReason(\n valueExpression,\n context.componentBodyBindings,\n );\n\n if (unserializableReason !== undefined) {\n context.diagnostics.push(unserializableAwaitValueDiagnostic(unserializableReason));\n }\n }\n\n const valueCode = readOxcExpressionAttribute(code, attributes, \"value\") ?? \"undefined\";\n const placeholderExpression = readOxcExpressionAttributeNode(attributes, \"placeholder\");\n const placeholderTagCode = findOxcJsxAttributeCode(code, attributes, \"placeholderAs\");\n const catchExpression = readOxcExpressionAttributeNode(attributes, \"catch\");\n const renderer = analyzeOxcSingleArrowJsxChild(\n code,\n readArray(node.children),\n (child, childBodyStatementJsx = bodyStatementJsx) =>\n analyzeOxcJsxNode(code, child, context, childBodyStatementJsx),\n bodyStatementJsx,\n );\n const catchRenderer =\n catchExpression !== undefined && readObject(catchExpression).type === \"ArrowFunctionExpression\"\n ? analyzeOxcArrowJsxRenderer(\n code,\n readObject(catchExpression),\n (child, childBodyStatementJsx = bodyStatementJsx) =>\n analyzeOxcJsxNode(code, child, context, childBodyStatementJsx),\n bodyStatementJsx,\n )\n : undefined;\n const placeholderChildren =\n placeholderExpression === undefined\n ? undefined\n : analyzeOxcExpressionChild(\n code,\n readObject(placeholderExpression),\n context,\n bodyStatementJsx,\n );\n const openingElement = readObject(node.openingElement);\n const awaitLoc = getOxcLocation(code, readObject(openingElement.name));\n\n return {\n kind: \"async-boundary\",\n ...(awaitLoc === undefined ? {} : { loc: awaitLoc }),\n valueCode,\n valueName: renderer.valueName,\n children: renderer.children,\n ...(placeholderChildren === undefined ? {} : { placeholderChildren }),\n ...(placeholderTagCode === undefined ? {} : { placeholderTagCode }),\n ...(catchRenderer === undefined\n ? {}\n : {\n catchName: catchRenderer.valueName,\n catchChildren: catchRenderer.children,\n }),\n };\n}\n\nexport function analyzeOxcChildren(\n code: string,\n children: readonly unknown[],\n context: OxcChildAnalysisContext,\n bodyStatementJsx = resolveOxcBodyStatementJsx(context),\n): JsxNodeIr[] {\n return children.flatMap((child, index): JsxNodeIr[] => {\n const object = readObject(child);\n\n if (object.type === \"JSXText\") {\n const value = typeof object.value === \"string\" ? object.value : \"\";\n const normalizedValue = normalizeOxcJsxText(value, children, index);\n return normalizedValue === \"\" ? [] : [{ kind: \"text\", value: normalizedValue }];\n }\n\n if (object.type === \"JSXElement\" || object.type === \"JSXFragment\") {\n return [analyzeOxcJsxNode(code, object, context, bodyStatementJsx)];\n }\n\n if (object.type === \"JSXExpressionContainer\") {\n return analyzeOxcExpressionChild(\n code,\n readObject(object.expression),\n context,\n bodyStatementJsx,\n );\n }\n\n return [];\n });\n}\n\nexport function analyzeOxcExpressionChild(\n code: string,\n expression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx = resolveOxcBodyStatementJsx(context),\n): JsxNodeIr[] {\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (unwrappedExpression.type === \"JSXEmptyExpression\") {\n context.diagnostics.push(invalidJsxExpressionDiagnostic(getOxcLocation(code, expression), \"text\"));\n return [];\n }\n\n if (unwrappedExpression.type === \"ConditionalExpression\") {\n return [\n {\n kind: \"conditional\",\n conditionCode: readOxcReactiveExpressionCode(\n code,\n readObject(unwrappedExpression.test),\n context,\n ),\n whenTrue: analyzeOxcDynamicBranch(\n code,\n readObject(unwrappedExpression.consequent),\n context,\n bodyStatementJsx,\n ),\n whenFalse: analyzeOxcDynamicBranch(\n code,\n readObject(unwrappedExpression.alternate),\n context,\n bodyStatementJsx,\n ),\n },\n ];\n }\n\n if (\n unwrappedExpression.type === \"LogicalExpression\" &&\n isOxcJsxBranch(readObject(unwrappedExpression.right))\n ) {\n const rightBranch = analyzeOxcDynamicBranch(\n code,\n readObject(unwrappedExpression.right),\n context,\n bodyStatementJsx,\n );\n\n if (unwrappedExpression.operator === \"&&\") {\n return [\n {\n kind: \"conditional\",\n conditionCode: readOxcReactiveExpressionCode(\n code,\n readObject(unwrappedExpression.left),\n context,\n ),\n whenTrue: rightBranch,\n whenFalse: [],\n },\n ];\n }\n\n if (unwrappedExpression.operator === \"||\") {\n return [\n {\n kind: \"conditional\",\n conditionCode: readOxcReactiveExpressionCode(\n code,\n readObject(unwrappedExpression.left),\n context,\n ),\n whenTrue: [\n {\n kind: \"expr\",\n code: readOxcReactiveExpressionCode(\n code,\n readObject(unwrappedExpression.left),\n context,\n ),\n },\n ],\n whenFalse: rightBranch,\n },\n ];\n }\n }\n\n const list = analyzeOxcListExpression(code, unwrappedExpression, context, bodyStatementJsx);\n\n if (list !== undefined) {\n return [list];\n }\n\n if (unwrappedExpression.type === \"JSXElement\" || unwrappedExpression.type === \"JSXFragment\") {\n return [analyzeOxcJsxNode(code, unwrappedExpression, context, bodyStatementJsx)];\n }\n\n const sameModuleComponentStreamCall =\n context.target === \"server\" && context.serverOutput === \"stream\"\n ? emitOxcSameModuleComponentStreamCall(\n code,\n expression,\n context.componentCallNames ?? context.componentNames,\n )\n : undefined;\n const componentCallNamesForRenderMode =\n context.target === \"server\" && context.serverOutput === \"stream\"\n ? context.componentCallNames ?? context.componentNames\n : context.componentNames;\n const sameModuleComponentCall =\n sameModuleComponentStreamCall !== undefined ||\n isOxcSameModuleComponentCallExpression(expression, componentCallNamesForRenderMode);\n\n return [\n {\n kind: \"expr\",\n code:\n sameModuleComponentStreamCall ??\n (containsOxcJsxSyntax(unwrappedExpression)\n ? normalizeOxcExpressionCode(\n context.lowerNestedJsxExpression(\n code,\n expression,\n context.componentNames,\n context.target,\n context.diagnostics,\n bodyStatementJsx,\n ) ??\n (bodyStatementJsx === \"compat-object\"\n ? stripOxcGeneratedImports(transformJsxWithOxc(readSource(code, expression)))\n : readOxcReactiveExpressionCode(code, expression, context)),\n )\n : readOxcReactiveExpressionCode(code, expression, context)),\n ...(isOxcRenderValueExpression(expression) || sameModuleComponentCall\n ? {\n renderMode:\n sameModuleComponentStreamCall !== undefined\n ? (\"stream-node\" as const)\n : bodyStatementJsx === \"server-string\"\n ? (\"html\" as const)\n : (\"dynamic\" as const),\n }\n : {}),\n },\n ];\n}\n\nfunction readOxcReactiveExpressionCode(\n code: string,\n expression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n): string {\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (unwrappedExpression.type === \"Identifier\" && typeof unwrappedExpression.name === \"string\") {\n return context.reactiveAliasBindings?.get(unwrappedExpression.name) ?? readSource(code, expression);\n }\n\n return (\n rewriteOxcReactiveAliasExpressionCode(code, expression, context.reactiveAliasBindings) ??\n readSource(code, expression)\n );\n}\n\nfunction isOxcSameModuleComponentCallExpression(\n expression: Record<string, unknown>,\n componentNames: ReadonlySet<string>,\n): boolean {\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (unwrappedExpression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = readObject(unwrappedExpression.callee);\n\n return (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n componentNames.has(callee.name)\n );\n}\n\nfunction emitOxcSameModuleComponentStreamCall(\n code: string,\n expression: Record<string, unknown>,\n componentNames: ReadonlySet<string>,\n): string | undefined {\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (unwrappedExpression.type !== \"CallExpression\") {\n return undefined;\n }\n\n const callee = readObject(unwrappedExpression.callee);\n\n if (\n callee.type !== \"Identifier\" ||\n typeof callee.name !== \"string\" ||\n !componentNames.has(callee.name)\n ) {\n return undefined;\n }\n\n const args = readArray(unwrappedExpression.arguments)\n .map((argument) => readSource(code, argument))\n .join(\", \");\n\n return `($sink) => ${callee.name}($sink${args === \"\" ? \"\" : `, ${args}`})`;\n}\n\nfunction analyzeOxcDynamicBranch(\n code: string,\n expression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): JsxNodeIr[] {\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 analyzeOxcListExpression(\n code: string,\n expression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): JsxNodeIr | undefined {\n const callExpression =\n expression.type === \"ChainExpression\" ? readObject(expression.expression) : expression;\n\n if (callExpression.type !== \"CallExpression\") {\n return undefined;\n }\n\n const callee = readObject(callExpression.callee);\n\n if (callee.type !== \"MemberExpression\" || readObject(callee.property).name !== \"map\") {\n return undefined;\n }\n\n const renderer = readObject(readArray(callExpression.arguments)[0]);\n\n if (renderer.type !== \"ArrowFunctionExpression\") {\n return undefined;\n }\n\n const itemName = String(readObject(readArray(renderer.params)[0]).name ?? \"_item\");\n const indexName = readObject(readArray(renderer.params)[1]).name;\n const rendererBody = analyzeOxcListRenderer(code, renderer, context, bodyStatementJsx);\n\n if (rendererBody === undefined) {\n return undefined;\n }\n\n const { children, bodyStatements } = rendererBody;\n const keyCode = findOxcKeyCodeInChildren(children);\n\n return {\n kind: \"list\",\n itemsCode:\n callee.optional === true\n ? `(${readOxcReactiveExpressionCode(code, readObject(callee.object), context)} ?? [])`\n : readOxcReactiveExpressionCode(code, readObject(callee.object), context),\n itemName,\n ...(typeof indexName === \"string\" ? { indexName } : {}),\n ...(keyCode === undefined ? {} : { keyCode }),\n ...(bodyStatements.length === 0 ? {} : { bodyStatements }),\n children,\n };\n}\n\nfunction analyzeOxcListRenderer(\n code: string,\n renderer: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): { children: JsxNodeIr[]; bodyStatements: string[] } | undefined {\n const body = readObject(renderer.body);\n\n if (body.type !== \"BlockStatement\") {\n return analyzeOxcListReturnExpression(\n code,\n unwrapOxcParentheses(body),\n [],\n context,\n bodyStatementJsx,\n );\n }\n\n const statements = readArray(body.body);\n const ifStatementIndex = statements.findIndex(\n (statement) => readObject(statement).type === \"IfStatement\",\n );\n\n if (ifStatementIndex >= 0) {\n return analyzeOxcListIfRenderer(code, statements, ifStatementIndex, context, bodyStatementJsx);\n }\n\n const returnStatementIndex = statements.findIndex(\n (statement) => readObject(statement).type === \"ReturnStatement\",\n );\n const returnStatement =\n returnStatementIndex === -1 ? undefined : readObject(statements[returnStatementIndex]);\n const returnArgument =\n returnStatement === undefined\n ? undefined\n : unwrapOxcParentheses(readObject(returnStatement.argument));\n\n if (returnArgument === undefined) {\n return undefined;\n }\n\n const bodyPrefixStatements = statements.slice(0, returnStatementIndex);\n const result = analyzeOxcListReturnExpression(\n code,\n returnArgument,\n bodyPrefixStatements.map(\n (statement) =>\n lowerOxcBodyStatementJsx(\n code,\n statement,\n context.componentNames,\n context.target,\n context.diagnostics,\n bodyStatementJsx,\n context.bodyLowerers,\n ) ?? formatOxcBodyStatement(code, statement, bodyStatementJsx),\n ),\n context,\n bodyStatementJsx,\n );\n\n if (result === undefined) {\n return undefined;\n }\n\n markOxcRenderValueExpressions(\n result.children,\n collectOxcBodyJsxBindingNames(bodyPrefixStatements),\n );\n return result;\n}\n\nfunction analyzeOxcListReturnExpression(\n code: string,\n body: Record<string, unknown>,\n bodyStatements: string[],\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): { children: JsxNodeIr[]; bodyStatements: string[] } | undefined {\n if (body.type === \"ConditionalExpression\") {\n const children: JsxNodeIr[] = [\n {\n kind: \"conditional\",\n conditionCode: readOxcReactiveExpressionCode(code, readObject(body.test), context),\n whenTrue: analyzeOxcDynamicBranch(\n code,\n readObject(body.consequent),\n context,\n bodyStatementJsx,\n ),\n whenFalse: analyzeOxcDynamicBranch(\n code,\n readObject(body.alternate),\n context,\n bodyStatementJsx,\n ),\n },\n ];\n\n return {\n children,\n bodyStatements,\n };\n }\n\n if (body.type !== \"JSXElement\" && body.type !== \"JSXFragment\") {\n return undefined;\n }\n\n return {\n children: [analyzeOxcJsxNode(code, body, context, bodyStatementJsx)],\n bodyStatements,\n };\n}\n\nfunction analyzeOxcListIfRenderer(\n code: string,\n statements: readonly unknown[],\n ifStatementIndex: number,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): { children: JsxNodeIr[]; bodyStatements: string[] } | undefined {\n const ifStatement = readObject(statements[ifStatementIndex]);\n const whenTrueExpression = readOxcReturnExpressionFromStatement(ifStatement.consequent);\n const alternate = readOxcReturnExpressionFromStatement(ifStatement.alternate);\n const fallthrough = readOxcReturnExpressionFromStatement(statements[ifStatementIndex + 1]);\n const whenFalseExpression = alternate ?? fallthrough;\n\n if (whenTrueExpression === undefined || whenFalseExpression === undefined) {\n return undefined;\n }\n\n const bodyPrefixStatements = statements.slice(0, ifStatementIndex);\n const children: JsxNodeIr[] = [\n {\n kind: \"conditional\",\n conditionCode: readOxcReactiveExpressionCode(code, readObject(ifStatement.test), context),\n whenTrue: analyzeOxcDynamicBranch(code, whenTrueExpression, context, bodyStatementJsx),\n whenFalse: analyzeOxcDynamicBranch(code, whenFalseExpression, context, bodyStatementJsx),\n },\n ];\n\n markOxcRenderValueExpressions(children, collectOxcBodyJsxBindingNames(bodyPrefixStatements));\n\n return {\n bodyStatements: bodyPrefixStatements.map(\n (statement) =>\n lowerOxcBodyStatementJsx(\n code,\n statement,\n context.componentNames,\n context.target,\n context.diagnostics,\n bodyStatementJsx,\n context.bodyLowerers,\n ) ?? formatOxcBodyStatement(code, statement, bodyStatementJsx),\n ),\n children,\n };\n}\n\nfunction resolveOxcBodyStatementJsx(context: OxcChildAnalysisContext): OxcBodyStatementJsxMode {\n return context.bodyStatementJsx ?? (context.target === \"server\" ? \"server-string\" : \"dom-node\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oxc-child-analysis.js","sourceRoot":"","sources":["../src/oxc-child-analysis.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n invalidJsxExpressionDiagnostic,\n unserializableAwaitValueDiagnostic,\n unsupportedComponentReferenceDiagnostic,\n} from \"./diagnostics.js\";\nimport type { AsyncBoundaryIr, JsxElementIr, JsxNodeIr } from \"./ir.js\";\nimport type { OxcBodyStatementJsxMode } from \"./oxc-analysis-types.js\";\nimport {\n detectUnserializableAwaitValueReason,\n readOxcExpressionAttribute,\n readOxcExpressionAttributeNode,\n} from \"./oxc-await-analysis.js\";\nimport {\n analyzeOxcArrowJsxRenderer,\n analyzeOxcComponentProp,\n analyzeOxcSingleArrowJsxChild,\n readOxcConsumerRenderProp,\n} from \"./oxc-component-props.js\";\nimport {\n formatOxcBodyStatement,\n lowerOxcBodyStatementJsx,\n type OxcBodyLowerers,\n} from \"./oxc-body-lowering.js\";\nimport { normalizeOxcExpressionCode, stripOxcGeneratedImports } from \"./oxc-code-utils.js\";\nimport {\n findOxcKeyCodeInChildren,\n isOxcJsxBranch,\n readOxcReturnExpressionFromStatement,\n} from \"./oxc-expression-utils.js\";\nimport {\n analyzeOxcAttribute,\n findOxcJsxAttributeCode,\n readOxcJsxTagName,\n} from \"./oxc-jsx-attributes.js\";\nimport { normalizeOxcJsxText } from \"./oxc-jsx-text.js\";\nimport {\n getOxcLocation,\n readArray,\n readObject,\n readSource,\n unwrapOxcParentheses,\n} from \"./oxc-node-utils.js\";\nimport {\n collectOxcBodyJsxBindingNames,\n containsOxcJsxSyntax,\n isOxcRenderValueExpression,\n markOxcRenderValueExpressions,\n rewriteOxcReactiveAliasExpressionCode,\n} from \"./oxc-render-values.js\";\nimport { transformJsxWithOxc } from \"./oxc-transform.js\";\nimport type { CompileTarget, Diagnostic, ServerOutputMode } from \"./types.js\";\n\nexport interface OxcChildAnalysisContext {\n componentNames: Set<string>;\n componentCallNames?: Set<string>;\n target: CompileTarget;\n serverOutput?: ServerOutputMode;\n diagnostics: Diagnostic[];\n bodyStatementJsx?: OxcBodyStatementJsxMode;\n componentBodyBindings?: ReadonlyMap<string, Record<string, unknown>>;\n reactiveAliasBindings?: ReadonlyMap<string, string>;\n bodyLowerers: OxcBodyLowerers;\n lowerNestedJsxExpression: (\n code: string,\n expression: Record<string, unknown>,\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n bodyStatementJsx: OxcBodyStatementJsxMode,\n ) => string | undefined;\n}\n\nexport function analyzeOxcJsxNode(\n code: string,\n node: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx = resolveOxcBodyStatementJsx(context),\n): JsxNodeIr {\n if (node.type === \"JSXFragment\") {\n return {\n kind: \"fragment\",\n children: analyzeOxcChildren(\n code,\n readArray(node.children),\n context,\n bodyStatementJsx,\n ),\n };\n }\n\n if (node.type !== \"JSXElement\") {\n return { kind: \"expr\", code: readSource(code, node) };\n }\n\n const openingElement = readObject(node.openingElement);\n const tagName = readOxcJsxTagName(readObject(openingElement.name));\n const attributes = readArray(openingElement.attributes);\n\n if (tagName === \"Await\") {\n return analyzeOxcAsyncBoundary(code, node, attributes, context, bodyStatementJsx);\n }\n\n if (tagName === \"Slot\") {\n const keyCode = findOxcJsxAttributeCode(code, attributes, \"key\");\n const allowRef = bodyStatementJsx === \"compat-object\";\n\n return {\n kind: \"element\",\n tagName: \"slot\",\n ...(keyCode === undefined ? {} : { keyCode }),\n attributes: attributes\n .flatMap((attr) =>\n analyzeOxcAttribute(code, attr, context.target, context.diagnostics, {\n allowRef,\n resolveExpressionCode: (expression) =>\n readOxcReactiveExpressionCode(code, expression, context),\n }),\n )\n .filter((attribute) => attribute.kind === \"spread-attr\" || attribute.name !== \"key\"),\n children: analyzeOxcChildren(\n code,\n readArray(node.children),\n context,\n bodyStatementJsx,\n ),\n } satisfies JsxElementIr;\n }\n\n if (\n /^[A-Z][\\w$]*(?:\\.[A-Za-z_$][\\w$]*)+$/.test(tagName) ||\n context.componentNames.has(tagName) ||\n isOxcServerRuntimeComponentBinding(tagName, context)\n ) {\n const keyCode = findOxcJsxAttributeCode(code, attributes, \"key\");\n const allowRef = bodyStatementJsx === \"compat-object\";\n const analyzeJsxNode = (\n child: Record<string, unknown>,\n childBodyStatementJsx: OxcBodyStatementJsxMode = bodyStatementJsx,\n ) => analyzeOxcJsxNode(code, child, context, childBodyStatementJsx);\n const consumerRenderProp = tagName.endsWith(\".Consumer\")\n ? readOxcConsumerRenderProp(\n code,\n readArray(node.children),\n analyzeJsxNode,\n bodyStatementJsx,\n )\n : undefined;\n const componentLoc = getOxcLocation(code, openingElement.name);\n\n return {\n kind: \"component\",\n name: tagName,\n ...(componentLoc === undefined ? {} : { loc: componentLoc }),\n ...(keyCode === undefined ? {} : { keyCode }),\n props: attributes\n .flatMap((attr) =>\n analyzeOxcComponentProp(code, attr, analyzeJsxNode, context.diagnostics, {\n allowRef,\n resolveExpressionCode: (expression) =>\n readOxcReactiveExpressionCode(code, expression, context),\n }),\n )\n .filter((prop) => prop.kind === \"spread-prop\" || prop.name !== \"key\")\n .concat(consumerRenderProp === undefined ? [] : [consumerRenderProp]),\n children:\n consumerRenderProp === undefined\n ? analyzeOxcChildren(code, readArray(node.children), context, bodyStatementJsx)\n : [],\n };\n }\n\n if (/^[A-Z]/.test(tagName)) {\n const componentLoc = getOxcLocation(code, openingElement.name);\n context.diagnostics.push(unsupportedComponentReferenceDiagnostic(tagName, componentLoc));\n\n return {\n kind: \"component\",\n name: tagName,\n ...(componentLoc === undefined ? {} : { loc: componentLoc }),\n props: [],\n children: [],\n };\n }\n\n const keyCode = findOxcJsxAttributeCode(code, attributes, \"key\");\n const allowRef = bodyStatementJsx === \"compat-object\";\n\n return {\n kind: \"element\",\n tagName,\n ...(keyCode === undefined ? {} : { keyCode }),\n attributes: attributes\n .flatMap((attr) =>\n analyzeOxcAttribute(code, attr, context.target, context.diagnostics, {\n allowRef,\n resolveExpressionCode: (expression) =>\n readOxcReactiveExpressionCode(code, expression, context),\n }),\n )\n .filter((attribute) => attribute.kind === \"spread-attr\" || attribute.name !== \"key\"),\n children: analyzeOxcChildren(code, readArray(node.children), context, bodyStatementJsx),\n } satisfies JsxElementIr;\n}\n\nfunction isOxcServerRuntimeComponentBinding(\n tagName: string,\n context: OxcChildAnalysisContext,\n): boolean {\n if (context.target !== \"server\" || !/^[A-Z]/.test(tagName)) {\n return false;\n }\n\n const binding = context.componentBodyBindings?.get(tagName);\n if (binding === undefined) {\n return false;\n }\n\n return isOxcRuntimeComponentExpression(binding);\n}\n\nfunction isOxcRuntimeComponentExpression(expression: Record<string, unknown>): boolean {\n if (\n expression.type === \"Identifier\" ||\n expression.type === \"MemberExpression\" ||\n expression.type === \"CallExpression\" ||\n expression.type === \"FunctionExpression\" ||\n expression.type === \"ArrowFunctionExpression\"\n ) {\n return true;\n }\n\n if (expression.type === \"ChainExpression\") {\n return isOxcRuntimeComponentExpression(readObject(expression.expression));\n }\n\n if (expression.type === \"ConditionalExpression\") {\n return (\n isOxcRuntimeComponentExpression(readObject(expression.consequent)) &&\n isOxcRuntimeComponentExpression(readObject(expression.alternate))\n );\n }\n\n if (expression.type === \"LogicalExpression\") {\n return isOxcRuntimeComponentExpression(readObject(expression.right));\n }\n\n return false;\n}\n\nfunction analyzeOxcAsyncBoundary(\n code: string,\n node: Record<string, unknown>,\n attributes: readonly unknown[],\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): AsyncBoundaryIr {\n const valueExpression = readOxcExpressionAttributeNode(attributes, \"value\");\n\n if (valueExpression !== undefined) {\n const unserializableReason = detectUnserializableAwaitValueReason(\n valueExpression,\n context.componentBodyBindings,\n );\n\n if (unserializableReason !== undefined) {\n context.diagnostics.push(unserializableAwaitValueDiagnostic(unserializableReason));\n }\n }\n\n const valueCode = readOxcExpressionAttribute(code, attributes, \"value\") ?? \"undefined\";\n const placeholderExpression = readOxcExpressionAttributeNode(attributes, \"placeholder\");\n const placeholderTagCode = findOxcJsxAttributeCode(code, attributes, \"placeholderAs\");\n const catchExpression = readOxcExpressionAttributeNode(attributes, \"catch\");\n const renderer = analyzeOxcSingleArrowJsxChild(\n code,\n readArray(node.children),\n (child, childBodyStatementJsx = bodyStatementJsx) =>\n analyzeOxcJsxNode(code, child, context, childBodyStatementJsx),\n bodyStatementJsx,\n );\n const catchRenderer =\n catchExpression !== undefined && readObject(catchExpression).type === \"ArrowFunctionExpression\"\n ? analyzeOxcArrowJsxRenderer(\n code,\n readObject(catchExpression),\n (child, childBodyStatementJsx = bodyStatementJsx) =>\n analyzeOxcJsxNode(code, child, context, childBodyStatementJsx),\n bodyStatementJsx,\n )\n : undefined;\n const placeholderChildren =\n placeholderExpression === undefined\n ? undefined\n : analyzeOxcExpressionChild(\n code,\n readObject(placeholderExpression),\n context,\n bodyStatementJsx,\n );\n const openingElement = readObject(node.openingElement);\n const awaitLoc = getOxcLocation(code, readObject(openingElement.name));\n\n return {\n kind: \"async-boundary\",\n ...(awaitLoc === undefined ? {} : { loc: awaitLoc }),\n valueCode,\n valueName: renderer.valueName,\n children: renderer.children,\n ...(placeholderChildren === undefined ? {} : { placeholderChildren }),\n ...(placeholderTagCode === undefined ? {} : { placeholderTagCode }),\n ...(catchRenderer === undefined\n ? {}\n : {\n catchName: catchRenderer.valueName,\n catchChildren: catchRenderer.children,\n }),\n };\n}\n\nexport function analyzeOxcChildren(\n code: string,\n children: readonly unknown[],\n context: OxcChildAnalysisContext,\n bodyStatementJsx = resolveOxcBodyStatementJsx(context),\n): JsxNodeIr[] {\n return children.flatMap((child, index): JsxNodeIr[] => {\n const object = readObject(child);\n\n if (object.type === \"JSXText\") {\n const value = typeof object.value === \"string\" ? object.value : \"\";\n const normalizedValue = normalizeOxcJsxText(value, children, index);\n return normalizedValue === \"\" ? [] : [{ kind: \"text\", value: normalizedValue }];\n }\n\n if (object.type === \"JSXElement\" || object.type === \"JSXFragment\") {\n return [analyzeOxcJsxNode(code, object, context, bodyStatementJsx)];\n }\n\n if (object.type === \"JSXExpressionContainer\") {\n return analyzeOxcExpressionChild(\n code,\n readObject(object.expression),\n context,\n bodyStatementJsx,\n );\n }\n\n return [];\n });\n}\n\nexport function analyzeOxcExpressionChild(\n code: string,\n expression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx = resolveOxcBodyStatementJsx(context),\n): JsxNodeIr[] {\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (unwrappedExpression.type === \"JSXEmptyExpression\") {\n context.diagnostics.push(invalidJsxExpressionDiagnostic(getOxcLocation(code, expression), \"text\"));\n return [];\n }\n\n if (unwrappedExpression.type === \"ConditionalExpression\") {\n return [\n {\n kind: \"conditional\",\n conditionCode: readOxcReactiveExpressionCode(\n code,\n readObject(unwrappedExpression.test),\n context,\n ),\n whenTrue: analyzeOxcDynamicBranch(\n code,\n readObject(unwrappedExpression.consequent),\n context,\n bodyStatementJsx,\n ),\n whenFalse: analyzeOxcDynamicBranch(\n code,\n readObject(unwrappedExpression.alternate),\n context,\n bodyStatementJsx,\n ),\n },\n ];\n }\n\n if (\n unwrappedExpression.type === \"LogicalExpression\" &&\n isOxcJsxBranch(readObject(unwrappedExpression.right))\n ) {\n const rightBranch = analyzeOxcDynamicBranch(\n code,\n readObject(unwrappedExpression.right),\n context,\n bodyStatementJsx,\n );\n\n if (unwrappedExpression.operator === \"&&\") {\n return [\n {\n kind: \"conditional\",\n conditionCode: readOxcReactiveExpressionCode(\n code,\n readObject(unwrappedExpression.left),\n context,\n ),\n whenTrue: rightBranch,\n whenFalse: [],\n },\n ];\n }\n\n if (unwrappedExpression.operator === \"||\") {\n return [\n {\n kind: \"conditional\",\n conditionCode: readOxcReactiveExpressionCode(\n code,\n readObject(unwrappedExpression.left),\n context,\n ),\n whenTrue: [\n {\n kind: \"expr\",\n code: readOxcReactiveExpressionCode(\n code,\n readObject(unwrappedExpression.left),\n context,\n ),\n },\n ],\n whenFalse: rightBranch,\n },\n ];\n }\n }\n\n const list = analyzeOxcListExpression(code, unwrappedExpression, context, bodyStatementJsx);\n\n if (list !== undefined) {\n return [list];\n }\n\n if (unwrappedExpression.type === \"JSXElement\" || unwrappedExpression.type === \"JSXFragment\") {\n return [analyzeOxcJsxNode(code, unwrappedExpression, context, bodyStatementJsx)];\n }\n\n const sameModuleComponentStreamCall =\n context.target === \"server\" && context.serverOutput === \"stream\"\n ? emitOxcSameModuleComponentStreamCall(\n code,\n expression,\n context.componentCallNames ?? context.componentNames,\n )\n : undefined;\n const componentCallNamesForRenderMode =\n context.target === \"server\" && context.serverOutput === \"stream\"\n ? context.componentCallNames ?? context.componentNames\n : context.componentNames;\n const sameModuleComponentCall =\n sameModuleComponentStreamCall !== undefined ||\n isOxcSameModuleComponentCallExpression(expression, componentCallNamesForRenderMode);\n\n return [\n {\n kind: \"expr\",\n code:\n sameModuleComponentStreamCall ??\n (containsOxcJsxSyntax(unwrappedExpression)\n ? normalizeOxcExpressionCode(\n context.lowerNestedJsxExpression(\n code,\n expression,\n context.componentNames,\n context.target,\n context.diagnostics,\n bodyStatementJsx,\n ) ??\n (bodyStatementJsx === \"compat-object\"\n ? stripOxcGeneratedImports(transformJsxWithOxc(readSource(code, expression)))\n : readOxcReactiveExpressionCode(code, expression, context)),\n )\n : readOxcReactiveExpressionCode(code, expression, context)),\n ...(isOxcRenderValueExpression(expression) || sameModuleComponentCall\n ? {\n renderMode:\n sameModuleComponentStreamCall !== undefined\n ? (\"stream-node\" as const)\n : bodyStatementJsx === \"server-string\"\n ? (\"html\" as const)\n : (\"dynamic\" as const),\n }\n : {}),\n },\n ];\n}\n\nfunction readOxcReactiveExpressionCode(\n code: string,\n expression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n): string {\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (unwrappedExpression.type === \"Identifier\" && typeof unwrappedExpression.name === \"string\") {\n return context.reactiveAliasBindings?.get(unwrappedExpression.name) ?? readSource(code, expression);\n }\n\n return (\n rewriteOxcReactiveAliasExpressionCode(code, expression, context.reactiveAliasBindings) ??\n readSource(code, expression)\n );\n}\n\nfunction isOxcSameModuleComponentCallExpression(\n expression: Record<string, unknown>,\n componentNames: ReadonlySet<string>,\n): boolean {\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (unwrappedExpression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = readObject(unwrappedExpression.callee);\n\n return (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n componentNames.has(callee.name)\n );\n}\n\nfunction emitOxcSameModuleComponentStreamCall(\n code: string,\n expression: Record<string, unknown>,\n componentNames: ReadonlySet<string>,\n): string | undefined {\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (unwrappedExpression.type !== \"CallExpression\") {\n return undefined;\n }\n\n const callee = readObject(unwrappedExpression.callee);\n\n if (\n callee.type !== \"Identifier\" ||\n typeof callee.name !== \"string\" ||\n !componentNames.has(callee.name)\n ) {\n return undefined;\n }\n\n const args = readArray(unwrappedExpression.arguments)\n .map((argument) => readSource(code, argument))\n .join(\", \");\n\n return `($sink) => ${callee.name}($sink${args === \"\" ? \"\" : `, ${args}`})`;\n}\n\nfunction analyzeOxcDynamicBranch(\n code: string,\n expression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): JsxNodeIr[] {\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 analyzeOxcListExpression(\n code: string,\n expression: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): JsxNodeIr | undefined {\n const callExpression =\n expression.type === \"ChainExpression\" ? readObject(expression.expression) : expression;\n\n if (callExpression.type !== \"CallExpression\") {\n return undefined;\n }\n\n const callee = readObject(callExpression.callee);\n\n if (callee.type !== \"MemberExpression\" || readObject(callee.property).name !== \"map\") {\n return undefined;\n }\n\n const renderer = readObject(readArray(callExpression.arguments)[0]);\n\n if (renderer.type !== \"ArrowFunctionExpression\") {\n return undefined;\n }\n\n const itemName = String(readObject(readArray(renderer.params)[0]).name ?? \"_item\");\n const indexName = readObject(readArray(renderer.params)[1]).name;\n const arrayName = readObject(readArray(renderer.params)[2]).name;\n const rendererBody = analyzeOxcListRenderer(code, renderer, context, bodyStatementJsx);\n\n if (rendererBody === undefined) {\n return undefined;\n }\n\n const { children, bodyStatements } = rendererBody;\n const keyCode = findOxcKeyCodeInChildren(children);\n\n return {\n kind: \"list\",\n itemsCode:\n callee.optional === true\n ? `(${readOxcReactiveExpressionCode(code, readObject(callee.object), context)} ?? [])`\n : readOxcReactiveExpressionCode(code, readObject(callee.object), context),\n itemName,\n ...(typeof indexName === \"string\" ? { indexName } : {}),\n ...(typeof arrayName === \"string\" ? { arrayName } : {}),\n ...(keyCode === undefined ? {} : { keyCode }),\n ...(bodyStatements.length === 0 ? {} : { bodyStatements }),\n children,\n };\n}\n\nfunction analyzeOxcListRenderer(\n code: string,\n renderer: Record<string, unknown>,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): { children: JsxNodeIr[]; bodyStatements: string[] } | undefined {\n const body = readObject(renderer.body);\n\n if (body.type !== \"BlockStatement\") {\n return analyzeOxcListReturnExpression(\n code,\n unwrapOxcParentheses(body),\n [],\n context,\n bodyStatementJsx,\n );\n }\n\n const statements = readArray(body.body);\n const ifStatementIndex = statements.findIndex(\n (statement) => readObject(statement).type === \"IfStatement\",\n );\n\n if (ifStatementIndex >= 0) {\n return analyzeOxcListIfRenderer(code, statements, ifStatementIndex, context, bodyStatementJsx);\n }\n\n const returnStatementIndex = statements.findIndex(\n (statement) => readObject(statement).type === \"ReturnStatement\",\n );\n const returnStatement =\n returnStatementIndex === -1 ? undefined : readObject(statements[returnStatementIndex]);\n const returnArgument =\n returnStatement === undefined\n ? undefined\n : unwrapOxcParentheses(readObject(returnStatement.argument));\n\n if (returnArgument === undefined) {\n return undefined;\n }\n\n const bodyPrefixStatements = statements.slice(0, returnStatementIndex);\n const result = analyzeOxcListReturnExpression(\n code,\n returnArgument,\n bodyPrefixStatements.map(\n (statement) =>\n lowerOxcBodyStatementJsx(\n code,\n statement,\n context.componentNames,\n context.target,\n context.diagnostics,\n bodyStatementJsx,\n context.bodyLowerers,\n ) ?? formatOxcBodyStatement(code, statement, bodyStatementJsx),\n ),\n context,\n bodyStatementJsx,\n );\n\n if (result === undefined) {\n return undefined;\n }\n\n markOxcRenderValueExpressions(\n result.children,\n collectOxcBodyJsxBindingNames(bodyPrefixStatements),\n );\n return result;\n}\n\nfunction analyzeOxcListReturnExpression(\n code: string,\n body: Record<string, unknown>,\n bodyStatements: string[],\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): { children: JsxNodeIr[]; bodyStatements: string[] } | undefined {\n if (body.type === \"ConditionalExpression\") {\n const children: JsxNodeIr[] = [\n {\n kind: \"conditional\",\n conditionCode: readOxcReactiveExpressionCode(code, readObject(body.test), context),\n whenTrue: analyzeOxcDynamicBranch(\n code,\n readObject(body.consequent),\n context,\n bodyStatementJsx,\n ),\n whenFalse: analyzeOxcDynamicBranch(\n code,\n readObject(body.alternate),\n context,\n bodyStatementJsx,\n ),\n },\n ];\n\n return {\n children,\n bodyStatements,\n };\n }\n\n if (body.type !== \"JSXElement\" && body.type !== \"JSXFragment\") {\n return undefined;\n }\n\n return {\n children: [analyzeOxcJsxNode(code, body, context, bodyStatementJsx)],\n bodyStatements,\n };\n}\n\nfunction analyzeOxcListIfRenderer(\n code: string,\n statements: readonly unknown[],\n ifStatementIndex: number,\n context: OxcChildAnalysisContext,\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): { children: JsxNodeIr[]; bodyStatements: string[] } | undefined {\n const ifStatement = readObject(statements[ifStatementIndex]);\n const whenTrueExpression = readOxcReturnExpressionFromStatement(ifStatement.consequent);\n const alternate = readOxcReturnExpressionFromStatement(ifStatement.alternate);\n const fallthrough = readOxcReturnExpressionFromStatement(statements[ifStatementIndex + 1]);\n const whenFalseExpression = alternate ?? fallthrough;\n\n if (whenTrueExpression === undefined || whenFalseExpression === undefined) {\n return undefined;\n }\n\n const bodyPrefixStatements = statements.slice(0, ifStatementIndex);\n const children: JsxNodeIr[] = [\n {\n kind: \"conditional\",\n conditionCode: readOxcReactiveExpressionCode(code, readObject(ifStatement.test), context),\n whenTrue: analyzeOxcDynamicBranch(code, whenTrueExpression, context, bodyStatementJsx),\n whenFalse: analyzeOxcDynamicBranch(code, whenFalseExpression, context, bodyStatementJsx),\n },\n ];\n\n markOxcRenderValueExpressions(children, collectOxcBodyJsxBindingNames(bodyPrefixStatements));\n\n return {\n bodyStatements: bodyPrefixStatements.map(\n (statement) =>\n lowerOxcBodyStatementJsx(\n code,\n statement,\n context.componentNames,\n context.target,\n context.diagnostics,\n bodyStatementJsx,\n context.bodyLowerers,\n ) ?? formatOxcBodyStatement(code, statement, bodyStatementJsx),\n ),\n children,\n };\n}\n\nfunction resolveOxcBodyStatementJsx(context: OxcChildAnalysisContext): OxcBodyStatementJsxMode {\n return context.bodyStatementJsx ?? (context.target === \"server\" ? \"server-string\" : \"dom-node\");\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-runtime-emit.d.ts","sourceRoot":"","sources":["../src/oxc-runtime-emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,SAAS,EAAE,MAAM,SAAS,CAAC;AAGvE,eAAO,MAAM,+CAA+C,oCACzB,CAAC;AAEpC,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAMlF;
|
|
1
|
+
{"version":3,"file":"oxc-runtime-emit.d.ts","sourceRoot":"","sources":["../src/oxc-runtime-emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,SAAS,EAAE,MAAM,SAAS,CAAC;AAGvE,eAAO,MAAM,+CAA+C,oCACzB,CAAC;AAEpC,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAMlF;AA0HD,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAUlF"}
|
package/dist/oxc-runtime-emit.js
CHANGED
|
@@ -17,7 +17,7 @@ function emitOxcServerStringNode(node) {
|
|
|
17
17
|
return `((${node.conditionCode}) ? ${emitOxcServerStringChildren(node.whenTrue)} : ${emitOxcServerStringChildren(node.whenFalse)})`;
|
|
18
18
|
}
|
|
19
19
|
if (node.kind === "list") {
|
|
20
|
-
const parameters = node
|
|
20
|
+
const parameters = emitOxcListParameters(node);
|
|
21
21
|
return `(${node.itemsCode}).map((${parameters}) => ${emitOxcServerStringChildren(node.children)}).join("")`;
|
|
22
22
|
}
|
|
23
23
|
if (node.kind === "fragment") {
|
|
@@ -74,7 +74,7 @@ function emitOxcCompatObjectNode(node) {
|
|
|
74
74
|
return `(${node.conditionCode}) ? ${emitOxcCompatObjectChildren(node.whenTrue)} : ${emitOxcCompatObjectChildren(node.whenFalse)}`;
|
|
75
75
|
}
|
|
76
76
|
if (node.kind === "list") {
|
|
77
|
-
const parameters = node
|
|
77
|
+
const parameters = emitOxcListParameters(node);
|
|
78
78
|
return `(${node.itemsCode}).map((${parameters}) => ${emitOxcCompatObjectChildren(node.children)})`;
|
|
79
79
|
}
|
|
80
80
|
if (node.kind === "fragment") {
|
|
@@ -120,6 +120,11 @@ function emitOxcCompatObjectElement(typeCode, propEntries, children, explicitKey
|
|
|
120
120
|
"})()",
|
|
121
121
|
].join("\n");
|
|
122
122
|
}
|
|
123
|
+
function emitOxcListParameters(node) {
|
|
124
|
+
return [node.itemName, node.indexName, node.arrayName]
|
|
125
|
+
.filter((name) => name !== undefined)
|
|
126
|
+
.join(", ");
|
|
127
|
+
}
|
|
123
128
|
function emitOxcCompatObjectAttribute(attr) {
|
|
124
129
|
if (attr.kind === "spread-attr") {
|
|
125
130
|
return `...(${attr.code})`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-runtime-emit.js","sourceRoot":"","sources":["../src/oxc-runtime-emit.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AttributeIr, ComponentPropIr, JsxNodeIr } from \"./ir.js\";\nimport { escapeHtmlAttribute } from \"@reckona/mreact-shared/html-escape\";\n\nexport const oxcServerStringReactNodeRenderHelperPlaceholder =\n \"__mreactRenderReactNodeToString\";\n\nexport function emitOxcServerStringChildren(children: readonly JsxNodeIr[]): string {\n if (children.length === 0) {\n return '\"\"';\n }\n\n return children.map(emitOxcServerStringNode).join(\" + \");\n}\n\nfunction emitOxcServerStringNode(node: JsxNodeIr): string {\n if (node.kind === \"text\") {\n return JSON.stringify(node.value);\n }\n\n if (node.kind === \"expr\") {\n return `_escapeHtml(${node.code})`;\n }\n\n if (node.kind === \"conditional\") {\n return `((${node.conditionCode}) ? ${emitOxcServerStringChildren(node.whenTrue)} : ${emitOxcServerStringChildren(node.whenFalse)})`;\n }\n\n if (node.kind === \"list\") {\n const parameters =\n node.indexName === undefined ? node.itemName : `${node.itemName}, ${node.indexName}`;\n return `(${node.itemsCode}).map((${parameters}) => ${emitOxcServerStringChildren(node.children)}).join(\"\")`;\n }\n\n if (node.kind === \"fragment\") {\n return emitOxcServerStringChildren(node.children);\n }\n\n if (node.kind === \"component\") {\n const props = emitOxcServerComponentProps(node.props, node.children);\n if (node.runtime === \"compat\") {\n return `${oxcServerStringReactNodeRenderHelperPlaceholder}(${node.name}, ${props})`;\n }\n return `${node.name}(${props})`;\n }\n\n if (node.kind === \"async-boundary\") {\n return '\"\"';\n }\n\n const attrs = node.attributes.map(emitOxcServerAttribute).join(\" + \");\n const open =\n attrs === \"\"\n ? JSON.stringify(`<${node.tagName}>`)\n : `${JSON.stringify(`<${node.tagName}`)} + ${attrs} + \">\"`;\n return `${open} + ${emitOxcServerStringChildren(node.children)} + ${JSON.stringify(`</${node.tagName}>`)}`;\n}\n\nfunction emitOxcServerComponentProps(\n props: readonly ComponentPropIr[],\n children: readonly JsxNodeIr[],\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 `${emitOxcCompatObjectPropName(prop.name)}: ${emitOxcServerStringChildren(prop.children)}`;\n }\n\n return `${emitOxcCompatObjectPropName(prop.name)}: (${prop.code})`;\n });\n\n if (children.length > 0) {\n entries.push(`children: ${emitOxcServerStringChildren(children)}`);\n }\n\n return `{ ${entries.join(\", \")} }`;\n}\n\nfunction emitOxcServerAttribute(attr: AttributeIr): string {\n if (attr.kind === \"static-attr\") {\n return JSON.stringify(` ${attr.name}=\"${escapeHtmlAttribute(attr.value)}\"`);\n }\n\n if (attr.kind === \"dynamic-attr\") {\n return `${JSON.stringify(` ${attr.name}=\"`)} + _escapeHtml(${attr.code}) + ${JSON.stringify('\"')}`;\n }\n\n return '\"\"';\n}\n\nfunction emitOxcCompatObjectNode(node: JsxNodeIr): 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 === \"conditional\") {\n return `(${node.conditionCode}) ? ${emitOxcCompatObjectChildren(node.whenTrue)} : ${emitOxcCompatObjectChildren(node.whenFalse)}`;\n }\n\n if (node.kind === \"list\") {\n const parameters =\n node.indexName === undefined ? node.itemName : `${node.itemName}, ${node.indexName}`;\n return `(${node.itemsCode}).map((${parameters}) => ${emitOxcCompatObjectChildren(node.children)})`;\n }\n\n if (node.kind === \"fragment\") {\n return emitOxcCompatObjectElement('Symbol.for(\"modular.react.fragment\")', [], node.children);\n }\n\n if (node.kind === \"component\") {\n return emitOxcCompatObjectElement(\n node.name,\n node.props.map(emitOxcCompatObjectComponentProp),\n node.children,\n node.keyCode,\n );\n }\n\n if (node.kind === \"async-boundary\") {\n return \"null\";\n }\n\n return emitOxcCompatObjectElement(\n JSON.stringify(node.tagName),\n node.attributes.map(emitOxcCompatObjectAttribute),\n node.children,\n node.keyCode,\n );\n}\n\nexport function emitOxcCompatObjectChildren(children: readonly JsxNodeIr[]): string {\n if (children.length === 0) {\n return \"null\";\n }\n\n if (children.length === 1) {\n return emitOxcCompatObjectNode(children[0] as JsxNodeIr);\n }\n\n return `[${children.map(emitOxcCompatObjectNode).join(\", \")}]`;\n}\n\nfunction emitOxcCompatObjectElement(\n typeCode: string,\n propEntries: readonly string[],\n children: readonly JsxNodeIr[],\n explicitKeyCode?: string,\n): string {\n const entries = [...propEntries];\n\n if (children.length > 0) {\n entries.push(`children: ${emitOxcCompatObjectChildren(children)}`);\n }\n\n const keyExpression =\n explicitKeyCode === undefined\n ? \"_props.key === undefined ? null : String(_props.key)\"\n : `String(${explicitKeyCode})`;\n\n return [\n \"(() => {\",\n ` const _props = { ${entries.join(\", \")} };`,\n ` const _key = ${keyExpression};`,\n \" const _ref = _props.ref ?? null;\",\n \" delete _props.key;\",\n \" delete _props.ref;\",\n ' return { $$typeof: Symbol.for(\"modular.react.element\"),',\n ` type: ${typeCode},`,\n \" key: _key,\",\n \" ref: _ref,\",\n \" props: _props };\",\n \"})()\",\n ].join(\"\\n\");\n}\n\nfunction emitOxcCompatObjectAttribute(attr: AttributeIr): string {\n if (attr.kind === \"spread-attr\") {\n return `...(${attr.code})`;\n }\n\n if (attr.kind === \"static-attr\") {\n return `${emitOxcCompatObjectPropName(attr.name)}: ${JSON.stringify(attr.value)}`;\n }\n\n if (attr.kind === \"dynamic-attr\") {\n return `${emitOxcCompatObjectPropName(attr.name)}: (${attr.code})`;\n }\n\n return `${emitOxcCompatObjectPropName(attr.name)}: ${attr.code}`;\n}\n\nfunction emitOxcCompatObjectComponentProp(prop: ComponentPropIr): string {\n if (prop.kind === \"spread-prop\") {\n return `...(${prop.code})`;\n }\n\n if (prop.kind === \"render-prop\") {\n return `${emitOxcCompatObjectPropName(prop.name)}: ${emitOxcCompatObjectChildren(prop.children)}`;\n }\n\n return `${emitOxcCompatObjectPropName(prop.name)}: (${prop.code})`;\n}\n\nfunction emitOxcCompatObjectPropName(name: string): string {\n return /^[A-Za-z_$][\\w$]*$/.test(name) ? name : JSON.stringify(name);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oxc-runtime-emit.js","sourceRoot":"","sources":["../src/oxc-runtime-emit.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AttributeIr, ComponentPropIr, JsxNodeIr } from \"./ir.js\";\nimport { escapeHtmlAttribute } from \"@reckona/mreact-shared/html-escape\";\n\nexport const oxcServerStringReactNodeRenderHelperPlaceholder =\n \"__mreactRenderReactNodeToString\";\n\nexport function emitOxcServerStringChildren(children: readonly JsxNodeIr[]): string {\n if (children.length === 0) {\n return '\"\"';\n }\n\n return children.map(emitOxcServerStringNode).join(\" + \");\n}\n\nfunction emitOxcServerStringNode(node: JsxNodeIr): string {\n if (node.kind === \"text\") {\n return JSON.stringify(node.value);\n }\n\n if (node.kind === \"expr\") {\n return `_escapeHtml(${node.code})`;\n }\n\n if (node.kind === \"conditional\") {\n return `((${node.conditionCode}) ? ${emitOxcServerStringChildren(node.whenTrue)} : ${emitOxcServerStringChildren(node.whenFalse)})`;\n }\n\n if (node.kind === \"list\") {\n const parameters = emitOxcListParameters(node);\n return `(${node.itemsCode}).map((${parameters}) => ${emitOxcServerStringChildren(node.children)}).join(\"\")`;\n }\n\n if (node.kind === \"fragment\") {\n return emitOxcServerStringChildren(node.children);\n }\n\n if (node.kind === \"component\") {\n const props = emitOxcServerComponentProps(node.props, node.children);\n if (node.runtime === \"compat\") {\n return `${oxcServerStringReactNodeRenderHelperPlaceholder}(${node.name}, ${props})`;\n }\n return `${node.name}(${props})`;\n }\n\n if (node.kind === \"async-boundary\") {\n return '\"\"';\n }\n\n const attrs = node.attributes.map(emitOxcServerAttribute).join(\" + \");\n const open =\n attrs === \"\"\n ? JSON.stringify(`<${node.tagName}>`)\n : `${JSON.stringify(`<${node.tagName}`)} + ${attrs} + \">\"`;\n return `${open} + ${emitOxcServerStringChildren(node.children)} + ${JSON.stringify(`</${node.tagName}>`)}`;\n}\n\nfunction emitOxcServerComponentProps(\n props: readonly ComponentPropIr[],\n children: readonly JsxNodeIr[],\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 `${emitOxcCompatObjectPropName(prop.name)}: ${emitOxcServerStringChildren(prop.children)}`;\n }\n\n return `${emitOxcCompatObjectPropName(prop.name)}: (${prop.code})`;\n });\n\n if (children.length > 0) {\n entries.push(`children: ${emitOxcServerStringChildren(children)}`);\n }\n\n return `{ ${entries.join(\", \")} }`;\n}\n\nfunction emitOxcServerAttribute(attr: AttributeIr): string {\n if (attr.kind === \"static-attr\") {\n return JSON.stringify(` ${attr.name}=\"${escapeHtmlAttribute(attr.value)}\"`);\n }\n\n if (attr.kind === \"dynamic-attr\") {\n return `${JSON.stringify(` ${attr.name}=\"`)} + _escapeHtml(${attr.code}) + ${JSON.stringify('\"')}`;\n }\n\n return '\"\"';\n}\n\nfunction emitOxcCompatObjectNode(node: JsxNodeIr): 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 === \"conditional\") {\n return `(${node.conditionCode}) ? ${emitOxcCompatObjectChildren(node.whenTrue)} : ${emitOxcCompatObjectChildren(node.whenFalse)}`;\n }\n\n if (node.kind === \"list\") {\n const parameters = emitOxcListParameters(node);\n return `(${node.itemsCode}).map((${parameters}) => ${emitOxcCompatObjectChildren(node.children)})`;\n }\n\n if (node.kind === \"fragment\") {\n return emitOxcCompatObjectElement('Symbol.for(\"modular.react.fragment\")', [], node.children);\n }\n\n if (node.kind === \"component\") {\n return emitOxcCompatObjectElement(\n node.name,\n node.props.map(emitOxcCompatObjectComponentProp),\n node.children,\n node.keyCode,\n );\n }\n\n if (node.kind === \"async-boundary\") {\n return \"null\";\n }\n\n return emitOxcCompatObjectElement(\n JSON.stringify(node.tagName),\n node.attributes.map(emitOxcCompatObjectAttribute),\n node.children,\n node.keyCode,\n );\n}\n\nexport function emitOxcCompatObjectChildren(children: readonly JsxNodeIr[]): string {\n if (children.length === 0) {\n return \"null\";\n }\n\n if (children.length === 1) {\n return emitOxcCompatObjectNode(children[0] as JsxNodeIr);\n }\n\n return `[${children.map(emitOxcCompatObjectNode).join(\", \")}]`;\n}\n\nfunction emitOxcCompatObjectElement(\n typeCode: string,\n propEntries: readonly string[],\n children: readonly JsxNodeIr[],\n explicitKeyCode?: string,\n): string {\n const entries = [...propEntries];\n\n if (children.length > 0) {\n entries.push(`children: ${emitOxcCompatObjectChildren(children)}`);\n }\n\n const keyExpression =\n explicitKeyCode === undefined\n ? \"_props.key === undefined ? null : String(_props.key)\"\n : `String(${explicitKeyCode})`;\n\n return [\n \"(() => {\",\n ` const _props = { ${entries.join(\", \")} };`,\n ` const _key = ${keyExpression};`,\n \" const _ref = _props.ref ?? null;\",\n \" delete _props.key;\",\n \" delete _props.ref;\",\n ' return { $$typeof: Symbol.for(\"modular.react.element\"),',\n ` type: ${typeCode},`,\n \" key: _key,\",\n \" ref: _ref,\",\n \" props: _props };\",\n \"})()\",\n ].join(\"\\n\");\n}\n\nfunction emitOxcListParameters(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 emitOxcCompatObjectAttribute(attr: AttributeIr): string {\n if (attr.kind === \"spread-attr\") {\n return `...(${attr.code})`;\n }\n\n if (attr.kind === \"static-attr\") {\n return `${emitOxcCompatObjectPropName(attr.name)}: ${JSON.stringify(attr.value)}`;\n }\n\n if (attr.kind === \"dynamic-attr\") {\n return `${emitOxcCompatObjectPropName(attr.name)}: (${attr.code})`;\n }\n\n return `${emitOxcCompatObjectPropName(attr.name)}: ${attr.code}`;\n}\n\nfunction emitOxcCompatObjectComponentProp(prop: ComponentPropIr): string {\n if (prop.kind === \"spread-prop\") {\n return `...(${prop.code})`;\n }\n\n if (prop.kind === \"render-prop\") {\n return `${emitOxcCompatObjectPropName(prop.name)}: ${emitOxcCompatObjectChildren(prop.children)}`;\n }\n\n return `${emitOxcCompatObjectPropName(prop.name)}: (${prop.code})`;\n}\n\nfunction emitOxcCompatObjectPropName(name: string): string {\n return /^[A-Za-z_$][\\w$]*$/.test(name) ? name : JSON.stringify(name);\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.72",
|
|
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.72"
|
|
54
54
|
}
|
|
55
55
|
}
|
package/src/emit-client.ts
CHANGED
|
@@ -420,10 +420,7 @@ function emitSetup(
|
|
|
420
420
|
}
|
|
421
421
|
|
|
422
422
|
if (child.kind === "list") {
|
|
423
|
-
const parameters =
|
|
424
|
-
child.indexName === undefined
|
|
425
|
-
? child.itemName
|
|
426
|
-
: `${child.itemName}, ${child.indexName}`;
|
|
423
|
+
const parameters = emitListParameters(child);
|
|
427
424
|
const optionEntries: string[] = [];
|
|
428
425
|
|
|
429
426
|
if (child.keyCode !== undefined) {
|
|
@@ -643,10 +640,7 @@ function emitNodeRenderValueExpression(
|
|
|
643
640
|
}
|
|
644
641
|
|
|
645
642
|
if (node.kind === "list") {
|
|
646
|
-
const parameters =
|
|
647
|
-
node.indexName === undefined
|
|
648
|
-
? node.itemName
|
|
649
|
-
: `${node.itemName}, ${node.indexName}`;
|
|
643
|
+
const parameters = emitListParameters(node);
|
|
650
644
|
return `(${node.itemsCode}).map(${emitListRenderer(node, parameters, state)})`;
|
|
651
645
|
}
|
|
652
646
|
|
|
@@ -686,6 +680,12 @@ function emitListRenderer(
|
|
|
686
680
|
return `(${parameters}) => {\n${node.bodyStatements.map((statement) => ` ${statement}`).join("\n")}\n return ${valueExpression};\n }`;
|
|
687
681
|
}
|
|
688
682
|
|
|
683
|
+
function emitListParameters(node: Extract<JsxNodeIr, { kind: "list" }>): string {
|
|
684
|
+
return [node.itemName, node.indexName, node.arrayName]
|
|
685
|
+
.filter((name): name is string => name !== undefined)
|
|
686
|
+
.join(", ");
|
|
687
|
+
}
|
|
688
|
+
|
|
689
689
|
function emitComponentCall(
|
|
690
690
|
name: string,
|
|
691
691
|
props: ComponentPropIr[],
|
package/src/emit-compat.ts
CHANGED
|
@@ -329,10 +329,7 @@ function emitJsxNode(
|
|
|
329
329
|
}
|
|
330
330
|
|
|
331
331
|
if (node.kind === "list") {
|
|
332
|
-
const parameters =
|
|
333
|
-
node.indexName === undefined
|
|
334
|
-
? node.itemName
|
|
335
|
-
: `${node.itemName}, ${node.indexName}`;
|
|
332
|
+
const parameters = emitListParameters(node);
|
|
336
333
|
return `(${node.itemsCode}).map(${emitListRenderer(node, parameters, helperNames, dev)})`;
|
|
337
334
|
}
|
|
338
335
|
|
|
@@ -387,6 +384,12 @@ function emitListRenderer(
|
|
|
387
384
|
return `(${parameters}) => {\n${node.bodyStatements.map((statement) => ` ${statement}`).join("\n")}\n return ${valueExpression};\n }`;
|
|
388
385
|
}
|
|
389
386
|
|
|
387
|
+
function emitListParameters(node: Extract<JsxNodeIr, { kind: "list" }>): string {
|
|
388
|
+
return [node.itemName, node.indexName, node.arrayName]
|
|
389
|
+
.filter((name): name is string => name !== undefined)
|
|
390
|
+
.join(", ");
|
|
391
|
+
}
|
|
392
|
+
|
|
390
393
|
function emitJsxCall(
|
|
391
394
|
typeExpression: string,
|
|
392
395
|
node: JsxElementIr | JsxFragmentIr,
|
|
@@ -718,6 +718,8 @@ function emitListPart(
|
|
|
718
718
|
const itemBinding = `${innerIndent}const ${part.itemName} = _arr[_i];`;
|
|
719
719
|
const indexBinding =
|
|
720
720
|
part.indexName === undefined ? undefined : `${innerIndent}const ${part.indexName} = _i;`;
|
|
721
|
+
const arrayBinding =
|
|
722
|
+
part.arrayName === undefined ? undefined : `${innerIndent}const ${part.arrayName} = _arr;`;
|
|
721
723
|
const bodyLines = part.bodyStatements.map(
|
|
722
724
|
(statement) => `${innerIndent}${statement}`,
|
|
723
725
|
);
|
|
@@ -751,6 +753,7 @@ function emitListPart(
|
|
|
751
753
|
`${indent} for (let _i = 0, _len = _arr.length; _i < _len; _i++) {`,
|
|
752
754
|
itemBinding,
|
|
753
755
|
...(indexBinding === undefined ? [] : [indexBinding]),
|
|
756
|
+
...(arrayBinding === undefined ? [] : [arrayBinding]),
|
|
754
757
|
...bodyLines,
|
|
755
758
|
...concatLines,
|
|
756
759
|
`${indent} }`,
|
|
@@ -783,6 +786,7 @@ function emitListPart(
|
|
|
783
786
|
`${indent} for (let _i = 0, _len = _arr.length; _i < _len; _i++) {`,
|
|
784
787
|
itemBinding,
|
|
785
788
|
...(indexBinding === undefined ? [] : [indexBinding]),
|
|
789
|
+
...(arrayBinding === undefined ? [] : [arrayBinding]),
|
|
786
790
|
...bodyLines,
|
|
787
791
|
...childLines,
|
|
788
792
|
`${indent} }`,
|
|
@@ -845,7 +849,7 @@ function emitListPartAsStringExpression(
|
|
|
845
849
|
}
|
|
846
850
|
|
|
847
851
|
const concatLines = stringExpressions.map((expr) => `_listOut += ${expr};`);
|
|
848
|
-
return `(() => { const _arr = (${part.itemsCode}); let _listOut = ""; for (let _i = 0, _len = _arr.length; _i < _len; _i++) { const ${part.itemName} = _arr[_i];${part.indexName === undefined ? "" : ` const ${part.indexName} = _i;`}${part.bodyStatements.length === 0 ? "" : ` ${part.bodyStatements.join(" ")}`} ${concatLines.join(" ")} } return _listOut; })()`;
|
|
852
|
+
return `(() => { const _arr = (${part.itemsCode}); let _listOut = ""; for (let _i = 0, _len = _arr.length; _i < _len; _i++) { const ${part.itemName} = _arr[_i];${part.indexName === undefined ? "" : ` const ${part.indexName} = _i;`}${part.arrayName === undefined ? "" : ` const ${part.arrayName} = _arr;`}${part.bodyStatements.length === 0 ? "" : ` ${part.bodyStatements.join(" ")}`} ${concatLines.join(" ")} } return _listOut; })()`;
|
|
849
853
|
}
|
|
850
854
|
|
|
851
855
|
function emitAsyncBoundary(
|
|
@@ -1117,6 +1121,7 @@ type HtmlPart =
|
|
|
1117
1121
|
itemsCode: string;
|
|
1118
1122
|
itemName: string;
|
|
1119
1123
|
indexName?: string;
|
|
1124
|
+
arrayName?: string;
|
|
1120
1125
|
bodyStatements: string[];
|
|
1121
1126
|
parts: HtmlPart[];
|
|
1122
1127
|
};
|
|
@@ -1212,6 +1217,7 @@ function collectHtmlParts(
|
|
|
1212
1217
|
itemsCode: node.itemsCode,
|
|
1213
1218
|
itemName: node.itemName,
|
|
1214
1219
|
...(node.indexName === undefined ? {} : { indexName: node.indexName }),
|
|
1220
|
+
...(node.arrayName === undefined ? {} : { arrayName: node.arrayName }),
|
|
1215
1221
|
bodyStatements: node.bodyStatements ?? [],
|
|
1216
1222
|
parts: collectedChildParts,
|
|
1217
1223
|
},
|
package/src/emit-server.ts
CHANGED
|
@@ -383,10 +383,7 @@ function collectHtmlStatements(
|
|
|
383
383
|
if (isAsync) {
|
|
384
384
|
// Parallel async path keeps the existing renderer + Promise.all + join
|
|
385
385
|
// form to preserve concurrent resolution semantics.
|
|
386
|
-
const parameters =
|
|
387
|
-
node.indexName === undefined
|
|
388
|
-
? node.itemName
|
|
389
|
-
: `${node.itemName}, ${node.indexName}`;
|
|
386
|
+
const parameters = emitListParameters(node);
|
|
390
387
|
const renderer = emitListRenderer(
|
|
391
388
|
node,
|
|
392
389
|
parameters,
|
|
@@ -407,6 +404,8 @@ function collectHtmlStatements(
|
|
|
407
404
|
const itemBinding = `const ${node.itemName} = _arr[_i];`;
|
|
408
405
|
const indexBinding =
|
|
409
406
|
node.indexName === undefined ? undefined : `const ${node.indexName} = _i;`;
|
|
407
|
+
const arrayBinding =
|
|
408
|
+
node.arrayName === undefined ? undefined : `const ${node.arrayName} = _arr;`;
|
|
410
409
|
const bodyStatements = node.bodyStatements ?? [];
|
|
411
410
|
const childStatements = node.children.flatMap((child) =>
|
|
412
411
|
collectHtmlStatements(
|
|
@@ -428,6 +427,7 @@ function collectHtmlStatements(
|
|
|
428
427
|
` for (let _i = 0, _len = _arr.length; _i < _len; _i++) {`,
|
|
429
428
|
` ${itemBinding}`,
|
|
430
429
|
...(indexBinding === undefined ? [] : [` ${indexBinding}`]),
|
|
430
|
+
...(arrayBinding === undefined ? [] : [` ${arrayBinding}`]),
|
|
431
431
|
...bodyStatements.map((statement) => ` ${statement}`),
|
|
432
432
|
...childStatements.map((statement) => ` ${statement}`),
|
|
433
433
|
` }`,
|
|
@@ -690,10 +690,7 @@ function collectHtmlParts(
|
|
|
690
690
|
// Async lists rely on Promise.all() for parallel resolution; the
|
|
691
691
|
// callback allocation is amortized across `await` latency, so we keep
|
|
692
692
|
// the `.map().then(...).join("")` form.
|
|
693
|
-
const parameters =
|
|
694
|
-
node.indexName === undefined
|
|
695
|
-
? node.itemName
|
|
696
|
-
: `${node.itemName}, ${node.indexName}`;
|
|
693
|
+
const parameters = emitListParameters(node);
|
|
697
694
|
const renderer = emitListRenderer(
|
|
698
695
|
node,
|
|
699
696
|
parameters,
|
|
@@ -1315,12 +1312,14 @@ function emitSyncListIife(
|
|
|
1315
1312
|
const itemBinding = `const ${node.itemName} = _arr[_i];`;
|
|
1316
1313
|
const indexBinding =
|
|
1317
1314
|
node.indexName === undefined ? "" : ` const ${node.indexName} = _i;`;
|
|
1315
|
+
const arrayBinding =
|
|
1316
|
+
node.arrayName === undefined ? "" : ` const ${node.arrayName} = _arr;`;
|
|
1318
1317
|
const bodyStatements =
|
|
1319
1318
|
node.bodyStatements === undefined || node.bodyStatements.length === 0
|
|
1320
1319
|
? ""
|
|
1321
1320
|
: ` ${node.bodyStatements.join(" ")}`;
|
|
1322
1321
|
|
|
1323
|
-
return `(() => { let _o = ""; const _arr = (${node.itemsCode}); for (let _i = 0, _len = _arr.length; _i < _len; _i++) { ${itemBinding}${indexBinding}${bodyStatements} _o += ${valueExpression}; } return _o; })()`;
|
|
1322
|
+
return `(() => { let _o = ""; const _arr = (${node.itemsCode}); for (let _i = 0, _len = _arr.length; _i < _len; _i++) { ${itemBinding}${indexBinding}${arrayBinding}${bodyStatements} _o += ${valueExpression}; } return _o; })()`;
|
|
1324
1323
|
}
|
|
1325
1324
|
|
|
1326
1325
|
function emitListRenderer(
|
|
@@ -1358,6 +1357,12 @@ function emitListRenderer(
|
|
|
1358
1357
|
return `${asyncKeyword}(${parameters}) => {\n${node.bodyStatements.map((statement) => ` ${statement}`).join("\n")}\n return ${valueExpression};\n }`;
|
|
1359
1358
|
}
|
|
1360
1359
|
|
|
1360
|
+
function emitListParameters(node: Extract<JsxNodeIr, { kind: "list" }>): string {
|
|
1361
|
+
return [node.itemName, node.indexName, node.arrayName]
|
|
1362
|
+
.filter((name): name is string => name !== undefined)
|
|
1363
|
+
.join(", ");
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1361
1366
|
function emitPropsObject(
|
|
1362
1367
|
props: ComponentPropIr[],
|
|
1363
1368
|
children: JsxNodeIr[] = [],
|
package/src/ir.ts
CHANGED
|
@@ -602,6 +602,7 @@ function analyzeOxcListExpression(
|
|
|
602
602
|
|
|
603
603
|
const itemName = String(readObject(readArray(renderer.params)[0]).name ?? "_item");
|
|
604
604
|
const indexName = readObject(readArray(renderer.params)[1]).name;
|
|
605
|
+
const arrayName = readObject(readArray(renderer.params)[2]).name;
|
|
605
606
|
const rendererBody = analyzeOxcListRenderer(code, renderer, context, bodyStatementJsx);
|
|
606
607
|
|
|
607
608
|
if (rendererBody === undefined) {
|
|
@@ -619,6 +620,7 @@ function analyzeOxcListExpression(
|
|
|
619
620
|
: readOxcReactiveExpressionCode(code, readObject(callee.object), context),
|
|
620
621
|
itemName,
|
|
621
622
|
...(typeof indexName === "string" ? { indexName } : {}),
|
|
623
|
+
...(typeof arrayName === "string" ? { arrayName } : {}),
|
|
622
624
|
...(keyCode === undefined ? {} : { keyCode }),
|
|
623
625
|
...(bodyStatements.length === 0 ? {} : { bodyStatements }),
|
|
624
626
|
children,
|