@reckona/mreact-compiler 0.0.116 → 0.0.117

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.
@@ -10,7 +10,7 @@ export function normalizeOxcExpressionCode(code) {
10
10
  .replace(/;$/, "")
11
11
  .replace(/\/\* @__PURE__ \*\/\s*/g, "")
12
12
  .replace(/children: \(\(([^()]+)\) =>/g, "children: ($1) =>")
13
- .replace(/\(\(([^()]+)\) =>/g, "($1) =>")
13
+ .replace(/(?<![A-Za-z0-9_$)\]])\(\(([^()]+)\) =>/g, "($1) =>")
14
14
  .replace(/children: ([A-Za-z_$][\w$.]*)/g, "children: ($1)");
15
15
  }
16
16
  //# sourceMappingURL=oxc-code-utils.js.map
@@ -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.117",
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.117"
54
54
  }
55
55
  }
@@ -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(