@reckona/mreact-compiler 0.0.116 → 0.0.118
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-server-stream.js +3 -3
- package/dist/emit-server-stream.js.map +1 -1
- package/dist/emit-server.js +4 -4
- package/dist/emit-server.js.map +1 -1
- package/dist/oxc-code-utils.js +1 -1
- package/dist/oxc-code-utils.js.map +1 -1
- package/dist/oxc-dom-lowering.js +11 -0
- package/dist/oxc-dom-lowering.js.map +1 -1
- package/dist/oxc-nested-lowering.d.ts.map +1 -1
- package/dist/oxc-nested-lowering.js +10 -1
- package/dist/oxc-nested-lowering.js.map +1 -1
- package/package.json +2 -2
- package/src/emit-server-stream.ts +4 -4
- package/src/emit-server.ts +6 -6
- package/src/oxc-code-utils.ts +1 -1
- package/src/oxc-dom-lowering.ts +14 -0
- package/src/oxc-nested-lowering.ts +13 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-code-utils.js","sourceRoot":"","sources":["../src/oxc-code-utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,wEAAwE,CAAC,IAAI,CAAC,IAAI,CAAC,CACvF;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,OAAO,IAAI;SACR,IAAI,EAAE;SACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;SACjB,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC;SACtC,OAAO,CAAC,8BAA8B,EAAE,mBAAmB,CAAC;SAC5D,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"oxc-code-utils.js","sourceRoot":"","sources":["../src/oxc-code-utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,wEAAwE,CAAC,IAAI,CAAC,IAAI,CAAC,CACvF;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,OAAO,IAAI;SACR,IAAI,EAAE;SACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;SACjB,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC;SACtC,OAAO,CAAC,8BAA8B,EAAE,mBAAmB,CAAC;SAC5D,OAAO,CAAC,yCAAyC,EAAE,SAAS,CAAC;SAC7D,OAAO,CAAC,gCAAgC,EAAE,gBAAgB,CAAC,CAAC;AACjE,CAAC","sourcesContent":["export function stripOxcGeneratedImports(code: string): string {\n return code\n .split(\"\\n\")\n .filter(\n (line) =>\n !/^\\s*import\\s+\\{.*\\}\\s+from\\s+[\"@']@reckona\\/mreact-compat\\/jsx-runtime/.test(line),\n )\n .join(\"\\n\");\n}\n\nexport function normalizeOxcExpressionCode(code: string): string {\n return code\n .trim()\n .replace(/;$/, \"\")\n .replace(/\\/\\* @__PURE__ \\*\\/\\s*/g, \"\")\n .replace(/children: \\(\\(([^()]+)\\) =>/g, \"children: ($1) =>\")\n .replace(/(?<![A-Za-z0-9_$)\\]])\\(\\(([^()]+)\\) =>/g, \"($1) =>\")\n .replace(/children: ([A-Za-z_$][\\w$.]*)/g, \"children: ($1)\");\n}\n"]}
|
package/dist/oxc-dom-lowering.js
CHANGED
|
@@ -58,6 +58,17 @@ function lowerOxcDomAttributes(code, attributes) {
|
|
|
58
58
|
const name = String(readObject(object.name).name);
|
|
59
59
|
const domName = htmlAttributeAliases[name] ?? name;
|
|
60
60
|
const value = readObject(object.value);
|
|
61
|
+
if (name === "key") {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
if (/^on[A-Z]/.test(name)) {
|
|
65
|
+
if (value.type !== "JSXExpressionContainer") {
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
return [
|
|
69
|
+
` _node.addEventListener(${JSON.stringify(name.slice(2).toLowerCase())}, ${readSource(code, readObject(value.expression))});`,
|
|
70
|
+
];
|
|
71
|
+
}
|
|
61
72
|
if (Object.keys(value).length === 0) {
|
|
62
73
|
return [` _node.setAttribute(${JSON.stringify(domName)}, "");`];
|
|
63
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-dom-lowering.js","sourceRoot":"","sources":["../src/oxc-dom-lowering.ts"],"names":[],"mappings":"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","sourcesContent":["import { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\nimport { readOxcJsxTagName } from \"./oxc-jsx-attributes.js\";\nimport { normalizeOxcJsxText } from \"./oxc-jsx-text.js\";\n\nexport function lowerOxcDomNodeExpression(\n code: string,\n node: Record<string, unknown>,\n): string | undefined {\n const unwrapped = unwrapOxcParentheses(node);\n\n if (unwrapped.type === \"ConditionalExpression\") {\n const whenTrue = lowerOxcDomNodeExpression(code, readObject(unwrapped.consequent));\n const whenFalse = lowerOxcDomNodeExpression(code, readObject(unwrapped.alternate));\n\n if (whenTrue !== undefined && whenFalse !== undefined) {\n return `((${readSource(code, readObject(unwrapped.test))}) ? ${whenTrue} : ${whenFalse})`;\n }\n }\n\n if (unwrapped.type === \"LogicalExpression\") {\n const right = lowerOxcDomNodeExpression(code, readObject(unwrapped.right));\n\n if (right !== undefined && unwrapped.operator === \"&&\") {\n return `((${readSource(code, readObject(unwrapped.left))}) ? ${right} : false)`;\n }\n\n if (right !== undefined && unwrapped.operator === \"||\") {\n const left = readSource(code, readObject(unwrapped.left));\n return `((${left}) ? ${left} : ${right})`;\n }\n }\n\n if (unwrapped.type === \"ArrayExpression\") {\n return `[${readArray(unwrapped.elements).map((element) => {\n const object = readObject(element);\n return Object.keys(object).length === 0\n ? \"undefined\"\n : (lowerOxcDomNodeExpression(code, object) ?? readSource(code, object));\n }).join(\", \")}]`;\n }\n\n if (unwrapped.type === \"Literal\" && (unwrapped.value === null || unwrapped.value === false)) {\n return 'document.createTextNode(\"\")';\n }\n\n node = unwrapped;\n\n if (node.type !== \"JSXElement\") {\n return undefined;\n }\n\n const openingElement = readObject(node.openingElement);\n const tagName = readOxcJsxTagName(readObject(openingElement.name));\n\n if (!/^[a-z]/.test(tagName)) {\n return undefined;\n }\n\n return [\n \"(() => {\",\n ` const _node = document.createElement(${JSON.stringify(tagName)});`,\n ...lowerOxcDomAttributes(code, readArray(openingElement.attributes)),\n ...lowerOxcDomChildren(code, readArray(node.children)),\n \" return _node;\",\n \"})()\",\n ].join(\"\\n\");\n}\n\nfunction lowerOxcDomAttributes(code: string, attributes: readonly unknown[]): string[] {\n return attributes.flatMap((attribute): string[] => {\n const object = readObject(attribute);\n\n if (object.type !== \"JSXAttribute\") {\n return [];\n }\n\n const name = String(readObject(object.name).name);\n const domName = htmlAttributeAliases[name] ?? name;\n const value = readObject(object.value);\n\n if (Object.keys(value).length === 0) {\n return [` _node.setAttribute(${JSON.stringify(domName)}, \"\");`];\n }\n\n if (value.type === \"Literal\") {\n return [` _node.setAttribute(${JSON.stringify(domName)}, ${JSON.stringify(value.value)});`];\n }\n\n if (value.type === \"JSXExpressionContainer\") {\n return [\n ` _node.setAttribute(${JSON.stringify(domName)}, String(${readSource(code, readObject(value.expression))}));`,\n ];\n }\n\n return [];\n });\n}\n\nconst htmlAttributeAliases: Record<string, string> = {\n acceptCharset: \"accept-charset\",\n autoFocus: \"autofocus\",\n autoPlay: \"autoplay\",\n charSet: \"charset\",\n className: \"class\",\n colSpan: \"colspan\",\n contentEditable: \"contenteditable\",\n crossOrigin: \"crossorigin\",\n encType: \"enctype\",\n formAction: \"formaction\",\n frameBorder: \"frameborder\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\",\n maxLength: \"maxlength\",\n minLength: \"minlength\",\n noValidate: \"novalidate\",\n playsInline: \"playsinline\",\n readOnly: \"readonly\",\n rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nfunction lowerOxcDomChildren(code: string, children: readonly unknown[]): string[] {\n return children.flatMap((child, index): string[] => {\n const object = readObject(child);\n\n if (object.type === \"JSXText\") {\n const value =\n typeof object.value === \"string\"\n ? normalizeOxcJsxText(object.value, children, index)\n : \"\";\n return value === \"\" ? [] : [` _node.append(${JSON.stringify(value)});`];\n }\n\n if (object.type === \"JSXExpressionContainer\") {\n return [` _node.append(String(${readSource(code, readObject(object.expression))}));`];\n }\n\n if (object.type === \"JSXElement\") {\n const lowered = lowerOxcDomNodeExpression(code, object);\n return lowered === undefined ? [] : [` _node.append(${lowered});`];\n }\n\n return [];\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oxc-dom-lowering.js","sourceRoot":"","sources":["../src/oxc-dom-lowering.ts"],"names":[],"mappings":"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","sourcesContent":["import { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\nimport { readOxcJsxTagName } from \"./oxc-jsx-attributes.js\";\nimport { normalizeOxcJsxText } from \"./oxc-jsx-text.js\";\n\nexport function lowerOxcDomNodeExpression(\n code: string,\n node: Record<string, unknown>,\n): string | undefined {\n const unwrapped = unwrapOxcParentheses(node);\n\n if (unwrapped.type === \"ConditionalExpression\") {\n const whenTrue = lowerOxcDomNodeExpression(code, readObject(unwrapped.consequent));\n const whenFalse = lowerOxcDomNodeExpression(code, readObject(unwrapped.alternate));\n\n if (whenTrue !== undefined && whenFalse !== undefined) {\n return `((${readSource(code, readObject(unwrapped.test))}) ? ${whenTrue} : ${whenFalse})`;\n }\n }\n\n if (unwrapped.type === \"LogicalExpression\") {\n const right = lowerOxcDomNodeExpression(code, readObject(unwrapped.right));\n\n if (right !== undefined && unwrapped.operator === \"&&\") {\n return `((${readSource(code, readObject(unwrapped.left))}) ? ${right} : false)`;\n }\n\n if (right !== undefined && unwrapped.operator === \"||\") {\n const left = readSource(code, readObject(unwrapped.left));\n return `((${left}) ? ${left} : ${right})`;\n }\n }\n\n if (unwrapped.type === \"ArrayExpression\") {\n return `[${readArray(unwrapped.elements).map((element) => {\n const object = readObject(element);\n return Object.keys(object).length === 0\n ? \"undefined\"\n : (lowerOxcDomNodeExpression(code, object) ?? readSource(code, object));\n }).join(\", \")}]`;\n }\n\n if (unwrapped.type === \"Literal\" && (unwrapped.value === null || unwrapped.value === false)) {\n return 'document.createTextNode(\"\")';\n }\n\n node = unwrapped;\n\n if (node.type !== \"JSXElement\") {\n return undefined;\n }\n\n const openingElement = readObject(node.openingElement);\n const tagName = readOxcJsxTagName(readObject(openingElement.name));\n\n if (!/^[a-z]/.test(tagName)) {\n return undefined;\n }\n\n return [\n \"(() => {\",\n ` const _node = document.createElement(${JSON.stringify(tagName)});`,\n ...lowerOxcDomAttributes(code, readArray(openingElement.attributes)),\n ...lowerOxcDomChildren(code, readArray(node.children)),\n \" return _node;\",\n \"})()\",\n ].join(\"\\n\");\n}\n\nfunction lowerOxcDomAttributes(code: string, attributes: readonly unknown[]): string[] {\n return attributes.flatMap((attribute): string[] => {\n const object = readObject(attribute);\n\n if (object.type !== \"JSXAttribute\") {\n return [];\n }\n\n const name = String(readObject(object.name).name);\n const domName = htmlAttributeAliases[name] ?? name;\n const value = readObject(object.value);\n\n if (name === \"key\") {\n return [];\n }\n\n if (/^on[A-Z]/.test(name)) {\n if (value.type !== \"JSXExpressionContainer\") {\n return [];\n }\n\n return [\n ` _node.addEventListener(${JSON.stringify(name.slice(2).toLowerCase())}, ${readSource(code, readObject(value.expression))});`,\n ];\n }\n\n if (Object.keys(value).length === 0) {\n return [` _node.setAttribute(${JSON.stringify(domName)}, \"\");`];\n }\n\n if (value.type === \"Literal\") {\n return [` _node.setAttribute(${JSON.stringify(domName)}, ${JSON.stringify(value.value)});`];\n }\n\n if (value.type === \"JSXExpressionContainer\") {\n return [\n ` _node.setAttribute(${JSON.stringify(domName)}, String(${readSource(code, readObject(value.expression))}));`,\n ];\n }\n\n return [];\n });\n}\n\nconst htmlAttributeAliases: Record<string, string> = {\n acceptCharset: \"accept-charset\",\n autoFocus: \"autofocus\",\n autoPlay: \"autoplay\",\n charSet: \"charset\",\n className: \"class\",\n colSpan: \"colspan\",\n contentEditable: \"contenteditable\",\n crossOrigin: \"crossorigin\",\n encType: \"enctype\",\n formAction: \"formaction\",\n frameBorder: \"frameborder\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\",\n maxLength: \"maxlength\",\n minLength: \"minlength\",\n noValidate: \"novalidate\",\n playsInline: \"playsinline\",\n readOnly: \"readonly\",\n rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nfunction lowerOxcDomChildren(code: string, children: readonly unknown[]): string[] {\n return children.flatMap((child, index): string[] => {\n const object = readObject(child);\n\n if (object.type === \"JSXText\") {\n const value =\n typeof object.value === \"string\"\n ? normalizeOxcJsxText(object.value, children, index)\n : \"\";\n return value === \"\" ? [] : [` _node.append(${JSON.stringify(value)});`];\n }\n\n if (object.type === \"JSXExpressionContainer\") {\n return [` _node.append(String(${readSource(code, readObject(object.expression))}));`];\n }\n\n if (object.type === \"JSXElement\") {\n const lowered = lowerOxcDomNodeExpression(code, object);\n return lowered === undefined ? [] : [` _node.append(${lowered});`];\n }\n\n return [];\n });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-nested-lowering.d.ts","sourceRoot":"","sources":["../src/oxc-nested-lowering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"oxc-nested-lowering.d.ts","sourceRoot":"","sources":["../src/oxc-nested-lowering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAgBvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ5D,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,UAAU,EAAE,GACxB,MAAM,GAAG,SAAS,CAapB;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,UAAU,EAAE,GACxB,MAAM,GAAG,SAAS,CAyBpB;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,UAAU,EAAE,EACzB,gBAAgB,EAAE,uBAAuB,GACxC,MAAM,GAAG,SAAS,CAsCpB;AA4CD,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAC1B,MAAM,GAAG,SAAS,CAmCpB;AAiFD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,UAAU,EAAE,EACzB,uBAAuB,GAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAa,GAC1E,MAAM,GAAG,SAAS,CAmBpB"}
|
|
@@ -6,6 +6,7 @@ import { readOxcJsxTagName } from "./oxc-jsx-attributes.js";
|
|
|
6
6
|
import { normalizeOxcJsxText } from "./oxc-jsx-text.js";
|
|
7
7
|
import { readArray, readObject, readSource, unwrapOxcParentheses } from "./oxc-node-utils.js";
|
|
8
8
|
import { emitOxcCompatObjectChildren, emitOxcServerStringChildren, } from "./oxc-runtime-emit.js";
|
|
9
|
+
import { stripTypeScriptWithOxc } from "./oxc-transform.js";
|
|
9
10
|
const oxcNestedBodyLowerers = {
|
|
10
11
|
lowerDomNodeExpression: lowerOxcDomNodeExpression,
|
|
11
12
|
lowerCompatObjectExpression: lowerOxcCompatObjectExpression,
|
|
@@ -61,7 +62,15 @@ export function lowerOxcNestedJsxExpression(code, expression, componentNames, ta
|
|
|
61
62
|
const end = replacement.end - expressionStart;
|
|
62
63
|
lowered = `${lowered.slice(0, start)}${replacement.value}${lowered.slice(end)}`;
|
|
63
64
|
}
|
|
64
|
-
return lowered;
|
|
65
|
+
return stripOxcExpressionTypeScript(lowered);
|
|
66
|
+
}
|
|
67
|
+
function stripOxcExpressionTypeScript(source) {
|
|
68
|
+
const prefix = "const __mreactExpression = ";
|
|
69
|
+
const stripped = stripTypeScriptWithOxc(`${prefix}${source};`);
|
|
70
|
+
if (!stripped.startsWith(prefix)) {
|
|
71
|
+
return stripTypeScriptWithOxc(source).replace(/;\s*$/, "");
|
|
72
|
+
}
|
|
73
|
+
return stripped.slice(prefix.length).replace(/;\s*$/, "");
|
|
65
74
|
}
|
|
66
75
|
function visitOxcExpressionJsxRoots(node, visit) {
|
|
67
76
|
const unwrapped = unwrapOxcParentheses(node);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-nested-lowering.js","sourceRoot":"","sources":["../src/oxc-nested-lowering.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OxcBodyStatementJsxMode } from \"./oxc-analysis-types.js\";\nimport { type OxcBodyLowerers } from \"./oxc-body-lowering.js\";\nimport {\n analyzeOxcExpressionChild,\n type OxcChildAnalysisContext,\n} from \"./oxc-child-analysis.js\";\nimport { markOxcCompatRuntimeReferences } from \"./oxc-component-references.js\";\nimport { lowerOxcDomNodeExpression } from \"./oxc-dom-lowering.js\";\nimport { readOxcJsxTagName } from \"./oxc-jsx-attributes.js\";\nimport { normalizeOxcJsxText } from \"./oxc-jsx-text.js\";\nimport { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\nimport {\n emitOxcCompatObjectChildren,\n emitOxcServerStringChildren,\n} from \"./oxc-runtime-emit.js\";\nimport type { ClientReferenceIr } from \"./ir.js\";\nimport type { CompileTarget, Diagnostic } from \"./types.js\";\n\nconst oxcNestedBodyLowerers: OxcBodyLowerers = {\n lowerDomNodeExpression: lowerOxcDomNodeExpression,\n lowerCompatObjectExpression: lowerOxcCompatObjectExpression,\n lowerServerStringExpression: lowerOxcServerStringExpression,\n};\n\nexport function lowerOxcCompatObjectExpression(\n code: string,\n expression: Record<string, unknown>,\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n): string | undefined {\n const children = analyzeOxcExpressionChild(\n code,\n expression,\n createOxcNestedChildAnalysisContext(componentNames, target, diagnostics, \"compat-object\"),\n \"compat-object\",\n );\n\n if (children.length === 0) {\n return \"null\";\n }\n\n return emitOxcCompatObjectChildren(children);\n}\n\nexport function lowerOxcCompatReactNodeExpression(\n code: string,\n expression: Record<string, unknown>,\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n): string | undefined {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (unwrapped.type === \"JSXElement\" || unwrapped.type === \"JSXFragment\") {\n return lowerOxcCompatObjectExpression(code, unwrapped, componentNames, target, diagnostics);\n }\n\n if (unwrapped.type === \"ArrayExpression\") {\n return `[${readArray(unwrapped.elements)\n .map((element) => {\n const elementObject = unwrapOxcParentheses(readObject(element));\n return (\n lowerOxcCompatReactNodeExpression(\n code,\n elementObject,\n componentNames,\n target,\n diagnostics,\n ) ?? readSource(code, elementObject)\n );\n })\n .join(\", \")}]`;\n }\n\n return undefined;\n}\n\nexport function lowerOxcNestedJsxExpression(\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 const source = readSource(code, expression);\n const expressionStart = typeof expression.start === \"number\" ? expression.start : 0;\n const replacements: Array<{ start: number; end: number; value: string }> = [];\n\n visitOxcExpressionJsxRoots(expression, (node) => {\n const start = typeof node.start === \"number\" ? node.start : undefined;\n const end = typeof node.end === \"number\" ? node.end : undefined;\n\n if (start === undefined || end === undefined) {\n return;\n }\n\n const lowered =\n bodyStatementJsx === \"compat-object\"\n ? lowerOxcCompatReactNodeExpression(code, node, componentNames, target, diagnostics)\n : bodyStatementJsx === \"server-string\"\n ? lowerOxcServerStringExpression(code, node, componentNames, target, diagnostics)\n : lowerOxcReactiveValueExpression(code, node, componentNames);\n\n if (lowered !== undefined) {\n replacements.push({ start, end, value: lowered });\n }\n });\n\n if (replacements.length === 0) {\n return undefined;\n }\n\n let lowered = source;\n\n for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n const start = replacement.start - expressionStart;\n const end = replacement.end - expressionStart;\n lowered = `${lowered.slice(0, start)}${replacement.value}${lowered.slice(end)}`;\n }\n\n return lowered;\n}\n\nfunction visitOxcExpressionJsxRoots(\n node: Record<string, unknown>,\n visit: (node: Record<string, unknown>) => void,\n): void {\n const unwrapped = unwrapOxcParentheses(node);\n\n if (unwrapped.type === \"JSXElement\" || unwrapped.type === \"JSXFragment\") {\n visit(unwrapped);\n return;\n }\n\n for (const value of Object.values(unwrapped)) {\n if (Array.isArray(value)) {\n for (const item of value) {\n const object = readObject(item);\n if (Object.keys(object).length > 0) {\n visitOxcExpressionJsxRoots(object, visit);\n }\n }\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n const object = readObject(value);\n if (Object.keys(object).length > 0) {\n visitOxcExpressionJsxRoots(object, visit);\n }\n }\n }\n}\n\nexport function lowerOxcReactiveValueExpression(\n code: string,\n expression: Record<string, unknown>,\n componentNames: Set<string>,\n): string | undefined {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (unwrapped.type === \"JSXFragment\") {\n const children = readArray(unwrapped.children)\n .map((child, index, siblings) =>\n lowerOxcReactiveChildValue(code, readObject(child), componentNames, siblings, index),\n )\n .filter((child): child is string => child !== undefined);\n\n return [\n \"(() => {\",\n \" const _fragment = document.createDocumentFragment();\",\n ...children.map((child) => ` _fragment.append(${child});`),\n \" return _fragment;\",\n \"})()\",\n ].join(\"\\n\");\n }\n\n if (unwrapped.type !== \"JSXElement\") {\n return undefined;\n }\n\n const openingElement = readObject(unwrapped.openingElement);\n const tagName = readOxcJsxTagName(readObject(openingElement.name));\n\n if (/^[a-z]/.test(tagName)) {\n return lowerOxcDomNodeExpression(code, unwrapped);\n }\n\n if (!componentNames.has(tagName)) {\n return undefined;\n }\n\n return `${tagName}(${lowerOxcReactiveComponentProps(code, unwrapped, componentNames)})`;\n}\n\nfunction lowerOxcReactiveComponentProps(\n code: string,\n node: Record<string, unknown>,\n componentNames: Set<string>,\n): string {\n const openingElement = readObject(node.openingElement);\n const entries = readArray(openingElement.attributes).flatMap((attribute): string[] => {\n const object = readObject(attribute);\n\n if (object.type === \"JSXSpreadAttribute\") {\n return [`...(${readSource(code, readObject(object.argument))})`];\n }\n\n if (object.type !== \"JSXAttribute\") {\n return [];\n }\n\n const name = String(readObject(object.name).name);\n const value = readObject(object.value);\n\n if (Object.keys(value).length === 0) {\n return [`${JSON.stringify(name)}: true`];\n }\n\n if (value.type === \"Literal\") {\n return [`${JSON.stringify(name)}: ${JSON.stringify(value.value)}`];\n }\n\n if (value.type === \"JSXExpressionContainer\") {\n const expression = readObject(value.expression);\n return [\n `${JSON.stringify(name)}: ${\n lowerOxcNestedJsxExpression(code, expression, componentNames, \"client\", [], \"dom-node\") ??\n readSource(code, expression)\n }`,\n ];\n }\n\n return [];\n });\n const children = readArray(node.children)\n .map((child, index, siblings) =>\n lowerOxcReactiveChildValue(code, readObject(child), componentNames, siblings, index),\n )\n .filter((child): child is string => child !== undefined);\n\n if (children.length === 1) {\n entries.push(`\"children\": ${children[0]}`);\n } else if (children.length > 1) {\n entries.push(`\"children\": [${children.join(\", \")}]`);\n }\n\n return entries.length === 0 ? \"{}\" : `{ ${entries.join(\", \")} }`;\n}\n\nfunction lowerOxcReactiveChildValue(\n code: string,\n child: Record<string, unknown>,\n componentNames: Set<string>,\n siblings: readonly unknown[],\n index: number,\n): string | undefined {\n if (child.type === \"JSXText\") {\n const value =\n typeof child.value === \"string\" ? normalizeOxcJsxText(child.value, siblings, index) : \"\";\n return value === \"\" ? undefined : JSON.stringify(value);\n }\n\n if (child.type === \"JSXExpressionContainer\") {\n const expression = readObject(child.expression);\n return (\n lowerOxcNestedJsxExpression(code, expression, componentNames, \"client\", [], \"dom-node\") ??\n readSource(code, expression)\n );\n }\n\n return lowerOxcReactiveValueExpression(code, child, componentNames);\n}\n\nexport function lowerOxcServerStringExpression(\n code: string,\n expression: Record<string, unknown>,\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n compatRuntimeReferences: ReadonlyMap<string, ClientReferenceIr> = new Map(),\n): string | undefined {\n const children = analyzeOxcExpressionChild(\n code,\n expression,\n createOxcNestedChildAnalysisContext(componentNames, target, diagnostics, \"server-string\"),\n \"server-string\",\n );\n\n if (children.length === 0) {\n return '\"\"';\n }\n\n if (compatRuntimeReferences.size > 0) {\n for (const child of children) {\n markOxcCompatRuntimeReferences(child, compatRuntimeReferences);\n }\n }\n\n return emitOxcServerStringChildren(children);\n}\n\nfunction createOxcNestedChildAnalysisContext(\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): OxcChildAnalysisContext {\n return {\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n bodyLowerers: oxcNestedBodyLowerers,\n lowerNestedJsxExpression: lowerOxcNestedJsxExpression,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oxc-nested-lowering.js","sourceRoot":"","sources":["../src/oxc-nested-lowering.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OxcBodyStatementJsxMode } from \"./oxc-analysis-types.js\";\nimport { type OxcBodyLowerers } from \"./oxc-body-lowering.js\";\nimport {\n analyzeOxcExpressionChild,\n type OxcChildAnalysisContext,\n} from \"./oxc-child-analysis.js\";\nimport { markOxcCompatRuntimeReferences } from \"./oxc-component-references.js\";\nimport { lowerOxcDomNodeExpression } from \"./oxc-dom-lowering.js\";\nimport { readOxcJsxTagName } from \"./oxc-jsx-attributes.js\";\nimport { normalizeOxcJsxText } from \"./oxc-jsx-text.js\";\nimport { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\nimport {\n emitOxcCompatObjectChildren,\n emitOxcServerStringChildren,\n} from \"./oxc-runtime-emit.js\";\nimport { stripTypeScriptWithOxc } from \"./oxc-transform.js\";\nimport type { ClientReferenceIr } from \"./ir.js\";\nimport type { CompileTarget, Diagnostic } from \"./types.js\";\n\nconst oxcNestedBodyLowerers: OxcBodyLowerers = {\n lowerDomNodeExpression: lowerOxcDomNodeExpression,\n lowerCompatObjectExpression: lowerOxcCompatObjectExpression,\n lowerServerStringExpression: lowerOxcServerStringExpression,\n};\n\nexport function lowerOxcCompatObjectExpression(\n code: string,\n expression: Record<string, unknown>,\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n): string | undefined {\n const children = analyzeOxcExpressionChild(\n code,\n expression,\n createOxcNestedChildAnalysisContext(componentNames, target, diagnostics, \"compat-object\"),\n \"compat-object\",\n );\n\n if (children.length === 0) {\n return \"null\";\n }\n\n return emitOxcCompatObjectChildren(children);\n}\n\nexport function lowerOxcCompatReactNodeExpression(\n code: string,\n expression: Record<string, unknown>,\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n): string | undefined {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (unwrapped.type === \"JSXElement\" || unwrapped.type === \"JSXFragment\") {\n return lowerOxcCompatObjectExpression(code, unwrapped, componentNames, target, diagnostics);\n }\n\n if (unwrapped.type === \"ArrayExpression\") {\n return `[${readArray(unwrapped.elements)\n .map((element) => {\n const elementObject = unwrapOxcParentheses(readObject(element));\n return (\n lowerOxcCompatReactNodeExpression(\n code,\n elementObject,\n componentNames,\n target,\n diagnostics,\n ) ?? readSource(code, elementObject)\n );\n })\n .join(\", \")}]`;\n }\n\n return undefined;\n}\n\nexport function lowerOxcNestedJsxExpression(\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 const source = readSource(code, expression);\n const expressionStart = typeof expression.start === \"number\" ? expression.start : 0;\n const replacements: Array<{ start: number; end: number; value: string }> = [];\n\n visitOxcExpressionJsxRoots(expression, (node) => {\n const start = typeof node.start === \"number\" ? node.start : undefined;\n const end = typeof node.end === \"number\" ? node.end : undefined;\n\n if (start === undefined || end === undefined) {\n return;\n }\n\n const lowered =\n bodyStatementJsx === \"compat-object\"\n ? lowerOxcCompatReactNodeExpression(code, node, componentNames, target, diagnostics)\n : bodyStatementJsx === \"server-string\"\n ? lowerOxcServerStringExpression(code, node, componentNames, target, diagnostics)\n : lowerOxcReactiveValueExpression(code, node, componentNames);\n\n if (lowered !== undefined) {\n replacements.push({ start, end, value: lowered });\n }\n });\n\n if (replacements.length === 0) {\n return undefined;\n }\n\n let lowered = source;\n\n for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n const start = replacement.start - expressionStart;\n const end = replacement.end - expressionStart;\n lowered = `${lowered.slice(0, start)}${replacement.value}${lowered.slice(end)}`;\n }\n\n return stripOxcExpressionTypeScript(lowered);\n}\n\nfunction stripOxcExpressionTypeScript(source: string): string {\n const prefix = \"const __mreactExpression = \";\n const stripped = stripTypeScriptWithOxc(`${prefix}${source};`);\n\n if (!stripped.startsWith(prefix)) {\n return stripTypeScriptWithOxc(source).replace(/;\\s*$/, \"\");\n }\n\n return stripped.slice(prefix.length).replace(/;\\s*$/, \"\");\n}\n\nfunction visitOxcExpressionJsxRoots(\n node: Record<string, unknown>,\n visit: (node: Record<string, unknown>) => void,\n): void {\n const unwrapped = unwrapOxcParentheses(node);\n\n if (unwrapped.type === \"JSXElement\" || unwrapped.type === \"JSXFragment\") {\n visit(unwrapped);\n return;\n }\n\n for (const value of Object.values(unwrapped)) {\n if (Array.isArray(value)) {\n for (const item of value) {\n const object = readObject(item);\n if (Object.keys(object).length > 0) {\n visitOxcExpressionJsxRoots(object, visit);\n }\n }\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n const object = readObject(value);\n if (Object.keys(object).length > 0) {\n visitOxcExpressionJsxRoots(object, visit);\n }\n }\n }\n}\n\nexport function lowerOxcReactiveValueExpression(\n code: string,\n expression: Record<string, unknown>,\n componentNames: Set<string>,\n): string | undefined {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (unwrapped.type === \"JSXFragment\") {\n const children = readArray(unwrapped.children)\n .map((child, index, siblings) =>\n lowerOxcReactiveChildValue(code, readObject(child), componentNames, siblings, index),\n )\n .filter((child): child is string => child !== undefined);\n\n return [\n \"(() => {\",\n \" const _fragment = document.createDocumentFragment();\",\n ...children.map((child) => ` _fragment.append(${child});`),\n \" return _fragment;\",\n \"})()\",\n ].join(\"\\n\");\n }\n\n if (unwrapped.type !== \"JSXElement\") {\n return undefined;\n }\n\n const openingElement = readObject(unwrapped.openingElement);\n const tagName = readOxcJsxTagName(readObject(openingElement.name));\n\n if (/^[a-z]/.test(tagName)) {\n return lowerOxcDomNodeExpression(code, unwrapped);\n }\n\n if (!componentNames.has(tagName)) {\n return undefined;\n }\n\n return `${tagName}(${lowerOxcReactiveComponentProps(code, unwrapped, componentNames)})`;\n}\n\nfunction lowerOxcReactiveComponentProps(\n code: string,\n node: Record<string, unknown>,\n componentNames: Set<string>,\n): string {\n const openingElement = readObject(node.openingElement);\n const entries = readArray(openingElement.attributes).flatMap((attribute): string[] => {\n const object = readObject(attribute);\n\n if (object.type === \"JSXSpreadAttribute\") {\n return [`...(${readSource(code, readObject(object.argument))})`];\n }\n\n if (object.type !== \"JSXAttribute\") {\n return [];\n }\n\n const name = String(readObject(object.name).name);\n const value = readObject(object.value);\n\n if (Object.keys(value).length === 0) {\n return [`${JSON.stringify(name)}: true`];\n }\n\n if (value.type === \"Literal\") {\n return [`${JSON.stringify(name)}: ${JSON.stringify(value.value)}`];\n }\n\n if (value.type === \"JSXExpressionContainer\") {\n const expression = readObject(value.expression);\n return [\n `${JSON.stringify(name)}: ${\n lowerOxcNestedJsxExpression(code, expression, componentNames, \"client\", [], \"dom-node\") ??\n readSource(code, expression)\n }`,\n ];\n }\n\n return [];\n });\n const children = readArray(node.children)\n .map((child, index, siblings) =>\n lowerOxcReactiveChildValue(code, readObject(child), componentNames, siblings, index),\n )\n .filter((child): child is string => child !== undefined);\n\n if (children.length === 1) {\n entries.push(`\"children\": ${children[0]}`);\n } else if (children.length > 1) {\n entries.push(`\"children\": [${children.join(\", \")}]`);\n }\n\n return entries.length === 0 ? \"{}\" : `{ ${entries.join(\", \")} }`;\n}\n\nfunction lowerOxcReactiveChildValue(\n code: string,\n child: Record<string, unknown>,\n componentNames: Set<string>,\n siblings: readonly unknown[],\n index: number,\n): string | undefined {\n if (child.type === \"JSXText\") {\n const value =\n typeof child.value === \"string\" ? normalizeOxcJsxText(child.value, siblings, index) : \"\";\n return value === \"\" ? undefined : JSON.stringify(value);\n }\n\n if (child.type === \"JSXExpressionContainer\") {\n const expression = readObject(child.expression);\n return (\n lowerOxcNestedJsxExpression(code, expression, componentNames, \"client\", [], \"dom-node\") ??\n readSource(code, expression)\n );\n }\n\n return lowerOxcReactiveValueExpression(code, child, componentNames);\n}\n\nexport function lowerOxcServerStringExpression(\n code: string,\n expression: Record<string, unknown>,\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n compatRuntimeReferences: ReadonlyMap<string, ClientReferenceIr> = new Map(),\n): string | undefined {\n const children = analyzeOxcExpressionChild(\n code,\n expression,\n createOxcNestedChildAnalysisContext(componentNames, target, diagnostics, \"server-string\"),\n \"server-string\",\n );\n\n if (children.length === 0) {\n return '\"\"';\n }\n\n if (compatRuntimeReferences.size > 0) {\n for (const child of children) {\n markOxcCompatRuntimeReferences(child, compatRuntimeReferences);\n }\n }\n\n return emitOxcServerStringChildren(children);\n}\n\nfunction createOxcNestedChildAnalysisContext(\n componentNames: Set<string>,\n target: CompileTarget,\n diagnostics: Diagnostic[],\n bodyStatementJsx: OxcBodyStatementJsxMode,\n): OxcChildAnalysisContext {\n return {\n componentNames,\n target,\n diagnostics,\n bodyStatementJsx,\n bodyLowerers: oxcNestedBodyLowerers,\n lowerNestedJsxExpression: lowerOxcNestedJsxExpression,\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.118",
|
|
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.118"
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -278,14 +278,14 @@ function emitClientBoundaryHelper(name: string): string {
|
|
|
278
278
|
` }`,
|
|
279
279
|
` return false;`,
|
|
280
280
|
`}`,
|
|
281
|
-
`function ${name}(name, props) {`,
|
|
281
|
+
`function ${name}(name, props, childrenHtml = "") {`,
|
|
282
282
|
` const _name = String(name);`,
|
|
283
283
|
` const _escapedName = _name.replaceAll("&", "&").replaceAll('"', """).replaceAll("<", "<").replaceAll(">", ">");`,
|
|
284
284
|
` const _props = props ?? {};`,
|
|
285
285
|
` const _nonSerializable = ${propsHelperName}(_props);`,
|
|
286
286
|
` const _nonSerializableAttr = _nonSerializable ? ' data-mreact-client-boundary-nonserializable="true"' : "";`,
|
|
287
287
|
` const _json = (JSON.stringify(_props) ?? "{}").replaceAll("<", "\\\\u003c");`,
|
|
288
|
-
` return \`<template data-mreact-client-boundary="\${_escapedName}"\${_nonSerializableAttr}></template
|
|
288
|
+
` return \`<template data-mreact-client-boundary="\${_escapedName}"\${_nonSerializableAttr}></template>\${childrenHtml}<script type="application/json" data-mreact-client-boundary-props="\${_escapedName}">\${_json}</script>\`;`,
|
|
289
289
|
`}`,
|
|
290
290
|
].join("\n");
|
|
291
291
|
}
|
|
@@ -1408,9 +1408,9 @@ function collectHtmlParts(
|
|
|
1408
1408
|
kind: "raw-dynamic",
|
|
1409
1409
|
code: `${helperName}(${stringLiteral(node.name)}, ${emitPropsObject(
|
|
1410
1410
|
node.props,
|
|
1411
|
-
|
|
1411
|
+
[],
|
|
1412
1412
|
escapeHelperName,
|
|
1413
|
-
)})`,
|
|
1413
|
+
)}, ${emitHtmlExpressionFromChildren(node.children, escapeHelperName)})`,
|
|
1414
1414
|
},
|
|
1415
1415
|
];
|
|
1416
1416
|
}
|
package/src/emit-server.ts
CHANGED
|
@@ -524,7 +524,7 @@ function collectHtmlStatements(
|
|
|
524
524
|
return [
|
|
525
525
|
`${outVar} += ${helperName}(${stringLiteral(node.name)}, ${emitPropsObject(
|
|
526
526
|
node.props,
|
|
527
|
-
|
|
527
|
+
[],
|
|
528
528
|
escapeHelperName,
|
|
529
529
|
escapeBatchHelperName,
|
|
530
530
|
asyncComponentNames,
|
|
@@ -532,7 +532,7 @@ function collectHtmlStatements(
|
|
|
532
532
|
contextProviderHelperName,
|
|
533
533
|
contextConsumerHelperName,
|
|
534
534
|
reactNodeRenderHelperName,
|
|
535
|
-
)});`,
|
|
535
|
+
)}, ${emitHtmlExpressionFromChildren(node.children, escapeHelperName, escapeBatchHelperName, asyncComponentNames, dynamicAttributes, contextProviderHelperName, contextConsumerHelperName, reactNodeRenderHelperName)});`,
|
|
536
536
|
];
|
|
537
537
|
}
|
|
538
538
|
|
|
@@ -803,7 +803,7 @@ function collectHtmlParts(
|
|
|
803
803
|
return [
|
|
804
804
|
`${helperName}(${stringLiteral(node.name)}, ${emitPropsObject(
|
|
805
805
|
node.props,
|
|
806
|
-
|
|
806
|
+
[],
|
|
807
807
|
escapeHelperName,
|
|
808
808
|
escapeBatchHelperName,
|
|
809
809
|
asyncComponentNames,
|
|
@@ -811,7 +811,7 @@ function collectHtmlParts(
|
|
|
811
811
|
contextProviderHelperName,
|
|
812
812
|
contextConsumerHelperName,
|
|
813
813
|
reactNodeRenderHelperName,
|
|
814
|
-
)})`,
|
|
814
|
+
)}, ${emitHtmlExpressionFromChildren(node.children, escapeHelperName, escapeBatchHelperName, asyncComponentNames, dynamicAttributes, contextProviderHelperName, contextConsumerHelperName, reactNodeRenderHelperName)})`,
|
|
815
815
|
];
|
|
816
816
|
}
|
|
817
817
|
|
|
@@ -1632,14 +1632,14 @@ function emitClientBoundaryHelper(name: string): string {
|
|
|
1632
1632
|
` }`,
|
|
1633
1633
|
` return false;`,
|
|
1634
1634
|
`}`,
|
|
1635
|
-
`function ${name}(name, props) {`,
|
|
1635
|
+
`function ${name}(name, props, childrenHtml = "") {`,
|
|
1636
1636
|
` const _name = String(name);`,
|
|
1637
1637
|
` const _escapedName = _name.replaceAll("&", "&").replaceAll('"', """).replaceAll("<", "<").replaceAll(">", ">");`,
|
|
1638
1638
|
` const _props = props ?? {};`,
|
|
1639
1639
|
` const _nonSerializable = ${propsHelperName}(_props);`,
|
|
1640
1640
|
` const _nonSerializableAttr = _nonSerializable ? ' data-mreact-client-boundary-nonserializable="true"' : "";`,
|
|
1641
1641
|
` const _json = (JSON.stringify(_props) ?? "{}").replaceAll("<", "\\\\u003c");`,
|
|
1642
|
-
` return \`<template data-mreact-client-boundary="\${_escapedName}"\${_nonSerializableAttr}></template
|
|
1642
|
+
` return \`<template data-mreact-client-boundary="\${_escapedName}"\${_nonSerializableAttr}></template>\${childrenHtml}<script type="application/json" data-mreact-client-boundary-props="\${_escapedName}">\${_json}</script>\`;`,
|
|
1643
1643
|
`}`,
|
|
1644
1644
|
].join("\n");
|
|
1645
1645
|
}
|
package/src/oxc-code-utils.ts
CHANGED
|
@@ -14,6 +14,6 @@ export function normalizeOxcExpressionCode(code: string): string {
|
|
|
14
14
|
.replace(/;$/, "")
|
|
15
15
|
.replace(/\/\* @__PURE__ \*\/\s*/g, "")
|
|
16
16
|
.replace(/children: \(\(([^()]+)\) =>/g, "children: ($1) =>")
|
|
17
|
-
.replace(
|
|
17
|
+
.replace(/(?<![A-Za-z0-9_$)\]])\(\(([^()]+)\) =>/g, "($1) =>")
|
|
18
18
|
.replace(/children: ([A-Za-z_$][\w$.]*)/g, "children: ($1)");
|
|
19
19
|
}
|
package/src/oxc-dom-lowering.ts
CHANGED
|
@@ -78,6 +78,20 @@ function lowerOxcDomAttributes(code: string, attributes: readonly unknown[]): st
|
|
|
78
78
|
const domName = htmlAttributeAliases[name] ?? name;
|
|
79
79
|
const value = readObject(object.value);
|
|
80
80
|
|
|
81
|
+
if (name === "key") {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (/^on[A-Z]/.test(name)) {
|
|
86
|
+
if (value.type !== "JSXExpressionContainer") {
|
|
87
|
+
return [];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return [
|
|
91
|
+
` _node.addEventListener(${JSON.stringify(name.slice(2).toLowerCase())}, ${readSource(code, readObject(value.expression))});`,
|
|
92
|
+
];
|
|
93
|
+
}
|
|
94
|
+
|
|
81
95
|
if (Object.keys(value).length === 0) {
|
|
82
96
|
return [` _node.setAttribute(${JSON.stringify(domName)}, "");`];
|
|
83
97
|
}
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
emitOxcCompatObjectChildren,
|
|
14
14
|
emitOxcServerStringChildren,
|
|
15
15
|
} from "./oxc-runtime-emit.js";
|
|
16
|
+
import { stripTypeScriptWithOxc } from "./oxc-transform.js";
|
|
16
17
|
import type { ClientReferenceIr } from "./ir.js";
|
|
17
18
|
import type { CompileTarget, Diagnostic } from "./types.js";
|
|
18
19
|
|
|
@@ -120,7 +121,18 @@ export function lowerOxcNestedJsxExpression(
|
|
|
120
121
|
lowered = `${lowered.slice(0, start)}${replacement.value}${lowered.slice(end)}`;
|
|
121
122
|
}
|
|
122
123
|
|
|
123
|
-
return lowered;
|
|
124
|
+
return stripOxcExpressionTypeScript(lowered);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function stripOxcExpressionTypeScript(source: string): string {
|
|
128
|
+
const prefix = "const __mreactExpression = ";
|
|
129
|
+
const stripped = stripTypeScriptWithOxc(`${prefix}${source};`);
|
|
130
|
+
|
|
131
|
+
if (!stripped.startsWith(prefix)) {
|
|
132
|
+
return stripTypeScriptWithOxc(source).replace(/;\s*$/, "");
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return stripped.slice(prefix.length).replace(/;\s*$/, "");
|
|
124
136
|
}
|
|
125
137
|
|
|
126
138
|
function visitOxcExpressionJsxRoots(
|