@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.
@@ -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,oBAAoB,EAAE,SAAS,CAAC;SACxC,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(/\\(\\(([^()]+)\\) =>/g, \"($1) =>\")\n .replace(/children: ([A-Za-z_$][\\w$.]*)/g, \"children: ($1)\");\n}\n"]}
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"]}
@@ -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;AAevE,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;AAiCD,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"}
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.116",
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.116"
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("&", "&amp;").replaceAll('"', "&quot;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");`,
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><script type="application/json" data-mreact-client-boundary-props="\${_escapedName}">\${_json}</script>\`;`,
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
- node.children,
1411
+ [],
1412
1412
  escapeHelperName,
1413
- )})`,
1413
+ )}, ${emitHtmlExpressionFromChildren(node.children, escapeHelperName)})`,
1414
1414
  },
1415
1415
  ];
1416
1416
  }
@@ -524,7 +524,7 @@ function collectHtmlStatements(
524
524
  return [
525
525
  `${outVar} += ${helperName}(${stringLiteral(node.name)}, ${emitPropsObject(
526
526
  node.props,
527
- node.children,
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
- node.children,
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("&", "&amp;").replaceAll('"', "&quot;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");`,
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><script type="application/json" data-mreact-client-boundary-props="\${_escapedName}">\${_json}</script>\`;`,
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
  }
@@ -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(/\(\(([^()]+)\) =>/g, "($1) =>")
17
+ .replace(/(?<![A-Za-z0-9_$)\]])\(\(([^()]+)\) =>/g, "($1) =>")
18
18
  .replace(/children: ([A-Za-z_$][\w$.]*)/g, "children: ($1)");
19
19
  }
@@ -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(