@reckona/mreact-compiler 0.0.152 → 0.0.154

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.
Files changed (44) hide show
  1. package/dist/emit-server-shared.js +1 -1
  2. package/dist/emit-server-shared.js.map +1 -1
  3. package/dist/emit-server.d.ts.map +1 -1
  4. package/dist/emit-server.js +81 -8
  5. package/dist/emit-server.js.map +1 -1
  6. package/dist/ir.d.ts +2 -1
  7. package/dist/ir.d.ts.map +1 -1
  8. package/dist/ir.js.map +1 -1
  9. package/dist/oxc-bindings.d.ts.map +1 -1
  10. package/dist/oxc-bindings.js +28 -1
  11. package/dist/oxc-bindings.js.map +1 -1
  12. package/dist/oxc-compat-create-element.d.ts +11 -0
  13. package/dist/oxc-compat-create-element.d.ts.map +1 -0
  14. package/dist/oxc-compat-create-element.js +489 -0
  15. package/dist/oxc-compat-create-element.js.map +1 -0
  16. package/dist/oxc-dom-lowering.js +1 -1
  17. package/dist/oxc-dom-lowering.js.map +1 -1
  18. package/dist/oxc-render-values.js +8 -0
  19. package/dist/oxc-render-values.js.map +1 -1
  20. package/dist/oxc-runtime-emit.d.ts.map +1 -1
  21. package/dist/oxc-runtime-emit.js +5 -1
  22. package/dist/oxc-runtime-emit.js.map +1 -1
  23. package/dist/oxc-transform.d.ts.map +1 -1
  24. package/dist/oxc-transform.js +6 -0
  25. package/dist/oxc-transform.js.map +1 -1
  26. package/dist/oxc.d.ts.map +1 -1
  27. package/dist/oxc.js +79 -11
  28. package/dist/oxc.js.map +1 -1
  29. package/dist/transform.d.ts +1 -0
  30. package/dist/transform.d.ts.map +1 -1
  31. package/dist/transform.js +8 -5
  32. package/dist/transform.js.map +1 -1
  33. package/package.json +2 -2
  34. package/src/emit-server-shared.ts +1 -1
  35. package/src/emit-server.ts +103 -4
  36. package/src/ir.ts +4 -1
  37. package/src/oxc-bindings.ts +36 -1
  38. package/src/oxc-compat-create-element.ts +705 -0
  39. package/src/oxc-dom-lowering.ts +1 -1
  40. package/src/oxc-render-values.ts +10 -0
  41. package/src/oxc-runtime-emit.ts +6 -1
  42. package/src/oxc-transform.ts +6 -0
  43. package/src/oxc.ts +130 -4
  44. package/src/transform.ts +9 -5
@@ -308,7 +308,7 @@ function findMatchingClose(code, openIndex) {
308
308
  return -1;
309
309
  }
310
310
  function parseStaticObjectKey(rawKey) {
311
- if (/^[A-Za-z_$][\w$-]*$/.test(rawKey)) {
311
+ if (/^[A-Za-z_$][\w$]*$/.test(rawKey)) {
312
312
  return rawKey;
313
313
  }
314
314
  if ((rawKey.startsWith("\"") && rawKey.endsWith("\"")) ||
@@ -1 +1 @@
1
- {"version":3,"file":"emit-server-shared.js","sourceRoot":"","sources":["../src/emit-server-shared.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseSync } from \"oxc-parser\";\nimport { readArray, readObject, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\n\nexport interface StaticStyleObjectEntry {\n cssName: string;\n valueCode: string;\n}\n\nconst URL_ATTRIBUTE_NAMES = new Set([\n \"href\",\n \"src\",\n \"action\",\n \"formaction\",\n \"xlink:href\",\n \"ping\",\n \"poster\",\n \"background\",\n \"manifest\",\n]);\n\nconst DANGEROUS_HTML_ATTRIBUTE_NAMES = new Set([\"srcdoc\"]);\n\nconst VOID_HTML_ELEMENT_NAMES = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\nconst SIMPLE_IDENT_CHAIN_RE = /^(this|[A-Za-z_$][\\w$]*)(\\.[A-Za-z_$][\\w$]*)*$/;\nconst NUMERIC_LITERAL_RE = /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/;\nconst SIMPLE_STRING_LITERAL_RE = /^\"(?:[^\"\\\\]|\\\\.)*\"$/;\nconst SIMPLE_SINGLE_QUOTE_RE = /^'(?:[^'\\\\]|\\\\.)*'$/;\n\nconst HTML_ATTRIBUTE_ALIASES: 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\nexport function isUrlAttribute(name: string): boolean {\n return URL_ATTRIBUTE_NAMES.has(name);\n}\n\nexport function isDangerousHtmlAttribute(name: string): boolean {\n return DANGEROUS_HTML_ATTRIBUTE_NAMES.has(name);\n}\n\nexport function isVoidHtmlElement(tagName: string): boolean {\n return VOID_HTML_ELEMENT_NAMES.has(tagName);\n}\n\nexport function isStaticUrlValueUnsafe(name: string, value: string): boolean {\n let start = 0;\n\n while (start < value.length && value.charCodeAt(start) <= 0x20) {\n start += 1;\n }\n\n const canonical = value.slice(start).replace(/[\\t\\r\\n]/g, \"\");\n const match = /^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(canonical);\n if (match === null || match[1] === undefined) return false;\n const scheme = match[1].toLowerCase();\n if (scheme === \"javascript\" || scheme === \"vbscript\" || scheme === \"livescript\" || scheme === \"mhtml\" || scheme === \"file\") return true;\n if (scheme === \"data\") {\n if ((name === \"src\" || name === \"poster\") && /^data:image\\/(?!svg\\+xml(?:[;,]|$))/i.test(canonical)) return false;\n return true;\n }\n return false;\n}\n\nexport function parseStyleLiteralValue(code: string): string | number | null | undefined {\n const trimmed = unwrapParenthesized(code.trim());\n\n if (trimmed === \"null\" || trimmed === \"false\" || trimmed === \"undefined\") {\n return null;\n }\n\n if (trimmed === \"true\") {\n return \"\";\n }\n\n if (NUMERIC_LITERAL_RE.test(trimmed)) {\n return Number(trimmed);\n }\n\n if (SIMPLE_STRING_LITERAL_RE.test(trimmed)) {\n return JSON.parse(trimmed) as string;\n }\n\n if (SIMPLE_SINGLE_QUOTE_RE.test(trimmed)) {\n return JSON.parse(`\"${trimmed.slice(1, -1).replaceAll('\"', '\\\\\"')}\"`) as string;\n }\n\n return undefined;\n}\n\nexport function parseStaticStyleObjectLiteral(\n code: string,\n): StaticStyleObjectEntry[] | undefined {\n const objectCode = unwrapParenthesized(code.trim());\n const stringParsedEntries = parseStaticStyleObjectLiteralFromString(objectCode);\n\n if (stringParsedEntries !== undefined) {\n return stringParsedEntries;\n }\n\n return parseStaticStyleObjectLiteralWithOxc(objectCode);\n}\n\nfunction parseStaticStyleObjectLiteralFromString(\n objectCode: string,\n): StaticStyleObjectEntry[] | undefined {\n if (!objectCode.startsWith(\"{\") || !objectCode.endsWith(\"}\")) {\n return undefined;\n }\n\n const body = objectCode.slice(1, -1).trim();\n\n if (body === \"\") {\n return [];\n }\n\n const entries: StaticStyleObjectEntry[] = [];\n\n for (const property of splitTopLevel(body, \",\")) {\n const trimmed = property.trim();\n\n if (trimmed === \"\" || trimmed.startsWith(\"...\") || trimmed.startsWith(\"[\")) {\n return undefined;\n }\n\n const colonIndex = findTopLevelColon(trimmed);\n\n if (colonIndex < 0) {\n return undefined;\n }\n\n const rawKey = trimmed.slice(0, colonIndex).trim();\n const valueCode = trimmed.slice(colonIndex + 1).trim();\n const key = parseStaticObjectKey(rawKey);\n\n if (key === undefined || valueCode === \"\") {\n return undefined;\n }\n\n entries.push({ cssName: cssPropertyName(key), valueCode });\n }\n\n return entries;\n}\n\nfunction parseStaticStyleObjectLiteralWithOxc(\n objectCode: string,\n): StaticStyleObjectEntry[] | undefined {\n if (!objectCode.startsWith(\"{\") || !objectCode.endsWith(\"}\")) {\n return undefined;\n }\n\n const prefix = \"const __mreactStyle = \";\n const source = `${prefix}${objectCode};`;\n const parsed = parseSync(\"style-object.tsx\", source, {\n lang: \"tsx\",\n sourceType: \"module\",\n astType: \"ts\",\n });\n\n if (parsed.errors.length > 0) {\n return undefined;\n }\n\n const body = readArray(readObject(parsed.program).body);\n const declaration = readArray(readObject(body[0]).declarations)[0];\n const init = unwrapOxcParentheses(readObject(readObject(declaration).init));\n\n if (init.type !== \"ObjectExpression\") {\n return undefined;\n }\n\n const entries: StaticStyleObjectEntry[] = [];\n\n for (const property of readArray(init.properties)) {\n const propertyObject = readObject(property);\n\n if (\n propertyObject.type !== \"Property\" ||\n propertyObject.kind !== \"init\" ||\n propertyObject.method === true ||\n propertyObject.computed === true ||\n propertyObject.shorthand === true\n ) {\n return undefined;\n }\n\n const key = readStaticOxcObjectKey(propertyObject.key);\n const value = readObject(propertyObject.value);\n const start = readNumber(value.start);\n const end = readNumber(value.end);\n\n if (key === undefined || start < prefix.length || end < start) {\n return undefined;\n }\n\n entries.push({\n cssName: cssPropertyName(key),\n valueCode: source.slice(start, end),\n });\n }\n\n return entries;\n}\n\nfunction readStaticOxcObjectKey(node: unknown): string | undefined {\n const key = readObject(node);\n\n if (key.type === \"Identifier\") {\n return typeof key.name === \"string\" ? key.name : undefined;\n }\n\n if (key.type === \"Literal\") {\n return typeof key.value === \"string\" ? key.value : undefined;\n }\n\n return undefined;\n}\n\nfunction readNumber(value: unknown): number {\n return typeof value === \"number\" ? value : -1;\n}\n\nexport function simpleSideEffectFreeExpression(code: string): string | undefined {\n const trimmed = unwrapParenthesized(code.trim());\n\n if (trimmed === \"\") {\n return undefined;\n }\n\n if (\n trimmed === \"true\" ||\n trimmed === \"false\" ||\n trimmed === \"null\" ||\n trimmed === \"undefined\"\n ) {\n return trimmed;\n }\n\n if (\n NUMERIC_LITERAL_RE.test(trimmed) ||\n SIMPLE_STRING_LITERAL_RE.test(trimmed) ||\n SIMPLE_SINGLE_QUOTE_RE.test(trimmed) ||\n SIMPLE_IDENT_CHAIN_RE.test(trimmed)\n ) {\n return trimmed;\n }\n\n return undefined;\n}\n\nexport function htmlAttributeName(name: string): string {\n return HTML_ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nexport function isBooleanishStringAttribute(name: string): boolean {\n const attributeName = htmlAttributeName(name).toLowerCase();\n return (\n attributeName.startsWith(\"aria-\") ||\n attributeName.startsWith(\"data-\") ||\n BOOLEANISH_STRING_ATTRIBUTES.has(attributeName)\n );\n}\n\nconst BOOLEANISH_STRING_ATTRIBUTES = new Set<string>([\n \"contenteditable\",\n \"draggable\",\n \"spellcheck\",\n]);\n\nfunction unwrapParenthesized(code: string): string {\n let current = code;\n\n while (current.startsWith(\"(\") && current.endsWith(\")\") && findMatchingClose(current, 0) === current.length - 1) {\n current = current.slice(1, -1).trim();\n }\n\n return current;\n}\n\nfunction splitTopLevel(code: string, separator: string): string[] {\n const parts: string[] = [];\n let start = 0;\n let depth = 0;\n let quote: string | undefined;\n\n for (let index = 0; index < code.length; index += 1) {\n const char = code[index];\n\n if (quote !== undefined) {\n if (char === \"\\\\\") {\n index += 1;\n } else if (char === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (char === \"\\\"\" || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth += 1;\n continue;\n }\n\n if (char === \"}\" || char === \"]\" || char === \")\") {\n depth -= 1;\n continue;\n }\n\n if (depth === 0 && char === separator) {\n parts.push(code.slice(start, index));\n start = index + 1;\n }\n }\n\n parts.push(code.slice(start));\n return parts;\n}\n\nfunction findTopLevelColon(code: string): number {\n return splitTopLevel(code, \":\")[0]?.length ?? -1;\n}\n\nfunction findMatchingClose(code: string, openIndex: number): number {\n let depth = 0;\n let quote: string | undefined;\n\n for (let index = openIndex; index < code.length; index += 1) {\n const char = code[index];\n\n if (quote !== undefined) {\n if (char === \"\\\\\") {\n index += 1;\n } else if (char === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (char === \"\\\"\" || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \"(\") {\n depth += 1;\n } else if (char === \")\") {\n depth -= 1;\n\n if (depth === 0) {\n return index;\n }\n }\n }\n\n return -1;\n}\n\nfunction parseStaticObjectKey(rawKey: string): string | undefined {\n if (/^[A-Za-z_$][\\w$-]*$/.test(rawKey)) {\n return rawKey;\n }\n\n if (\n (rawKey.startsWith(\"\\\"\") && rawKey.endsWith(\"\\\"\")) ||\n (rawKey.startsWith(\"'\") && rawKey.endsWith(\"'\"))\n ) {\n return rawKey.slice(1, -1);\n }\n\n return undefined;\n}\n\nfunction cssPropertyName(name: string): string {\n return name.startsWith(\"--\")\n ? name\n : name.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);\n}\n"]}
1
+ {"version":3,"file":"emit-server-shared.js","sourceRoot":"","sources":["../src/emit-server-shared.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseSync } from \"oxc-parser\";\nimport { readArray, readObject, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\n\nexport interface StaticStyleObjectEntry {\n cssName: string;\n valueCode: string;\n}\n\nconst URL_ATTRIBUTE_NAMES = new Set([\n \"href\",\n \"src\",\n \"action\",\n \"formaction\",\n \"xlink:href\",\n \"ping\",\n \"poster\",\n \"background\",\n \"manifest\",\n]);\n\nconst DANGEROUS_HTML_ATTRIBUTE_NAMES = new Set([\"srcdoc\"]);\n\nconst VOID_HTML_ELEMENT_NAMES = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\nconst SIMPLE_IDENT_CHAIN_RE = /^(this|[A-Za-z_$][\\w$]*)(\\.[A-Za-z_$][\\w$]*)*$/;\nconst NUMERIC_LITERAL_RE = /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/;\nconst SIMPLE_STRING_LITERAL_RE = /^\"(?:[^\"\\\\]|\\\\.)*\"$/;\nconst SIMPLE_SINGLE_QUOTE_RE = /^'(?:[^'\\\\]|\\\\.)*'$/;\n\nconst HTML_ATTRIBUTE_ALIASES: 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\nexport function isUrlAttribute(name: string): boolean {\n return URL_ATTRIBUTE_NAMES.has(name);\n}\n\nexport function isDangerousHtmlAttribute(name: string): boolean {\n return DANGEROUS_HTML_ATTRIBUTE_NAMES.has(name);\n}\n\nexport function isVoidHtmlElement(tagName: string): boolean {\n return VOID_HTML_ELEMENT_NAMES.has(tagName);\n}\n\nexport function isStaticUrlValueUnsafe(name: string, value: string): boolean {\n let start = 0;\n\n while (start < value.length && value.charCodeAt(start) <= 0x20) {\n start += 1;\n }\n\n const canonical = value.slice(start).replace(/[\\t\\r\\n]/g, \"\");\n const match = /^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(canonical);\n if (match === null || match[1] === undefined) return false;\n const scheme = match[1].toLowerCase();\n if (scheme === \"javascript\" || scheme === \"vbscript\" || scheme === \"livescript\" || scheme === \"mhtml\" || scheme === \"file\") return true;\n if (scheme === \"data\") {\n if ((name === \"src\" || name === \"poster\") && /^data:image\\/(?!svg\\+xml(?:[;,]|$))/i.test(canonical)) return false;\n return true;\n }\n return false;\n}\n\nexport function parseStyleLiteralValue(code: string): string | number | null | undefined {\n const trimmed = unwrapParenthesized(code.trim());\n\n if (trimmed === \"null\" || trimmed === \"false\" || trimmed === \"undefined\") {\n return null;\n }\n\n if (trimmed === \"true\") {\n return \"\";\n }\n\n if (NUMERIC_LITERAL_RE.test(trimmed)) {\n return Number(trimmed);\n }\n\n if (SIMPLE_STRING_LITERAL_RE.test(trimmed)) {\n return JSON.parse(trimmed) as string;\n }\n\n if (SIMPLE_SINGLE_QUOTE_RE.test(trimmed)) {\n return JSON.parse(`\"${trimmed.slice(1, -1).replaceAll('\"', '\\\\\"')}\"`) as string;\n }\n\n return undefined;\n}\n\nexport function parseStaticStyleObjectLiteral(\n code: string,\n): StaticStyleObjectEntry[] | undefined {\n const objectCode = unwrapParenthesized(code.trim());\n const stringParsedEntries = parseStaticStyleObjectLiteralFromString(objectCode);\n\n if (stringParsedEntries !== undefined) {\n return stringParsedEntries;\n }\n\n return parseStaticStyleObjectLiteralWithOxc(objectCode);\n}\n\nfunction parseStaticStyleObjectLiteralFromString(\n objectCode: string,\n): StaticStyleObjectEntry[] | undefined {\n if (!objectCode.startsWith(\"{\") || !objectCode.endsWith(\"}\")) {\n return undefined;\n }\n\n const body = objectCode.slice(1, -1).trim();\n\n if (body === \"\") {\n return [];\n }\n\n const entries: StaticStyleObjectEntry[] = [];\n\n for (const property of splitTopLevel(body, \",\")) {\n const trimmed = property.trim();\n\n if (trimmed === \"\" || trimmed.startsWith(\"...\") || trimmed.startsWith(\"[\")) {\n return undefined;\n }\n\n const colonIndex = findTopLevelColon(trimmed);\n\n if (colonIndex < 0) {\n return undefined;\n }\n\n const rawKey = trimmed.slice(0, colonIndex).trim();\n const valueCode = trimmed.slice(colonIndex + 1).trim();\n const key = parseStaticObjectKey(rawKey);\n\n if (key === undefined || valueCode === \"\") {\n return undefined;\n }\n\n entries.push({ cssName: cssPropertyName(key), valueCode });\n }\n\n return entries;\n}\n\nfunction parseStaticStyleObjectLiteralWithOxc(\n objectCode: string,\n): StaticStyleObjectEntry[] | undefined {\n if (!objectCode.startsWith(\"{\") || !objectCode.endsWith(\"}\")) {\n return undefined;\n }\n\n const prefix = \"const __mreactStyle = \";\n const source = `${prefix}${objectCode};`;\n const parsed = parseSync(\"style-object.tsx\", source, {\n lang: \"tsx\",\n sourceType: \"module\",\n astType: \"ts\",\n });\n\n if (parsed.errors.length > 0) {\n return undefined;\n }\n\n const body = readArray(readObject(parsed.program).body);\n const declaration = readArray(readObject(body[0]).declarations)[0];\n const init = unwrapOxcParentheses(readObject(readObject(declaration).init));\n\n if (init.type !== \"ObjectExpression\") {\n return undefined;\n }\n\n const entries: StaticStyleObjectEntry[] = [];\n\n for (const property of readArray(init.properties)) {\n const propertyObject = readObject(property);\n\n if (\n propertyObject.type !== \"Property\" ||\n propertyObject.kind !== \"init\" ||\n propertyObject.method === true ||\n propertyObject.computed === true ||\n propertyObject.shorthand === true\n ) {\n return undefined;\n }\n\n const key = readStaticOxcObjectKey(propertyObject.key);\n const value = readObject(propertyObject.value);\n const start = readNumber(value.start);\n const end = readNumber(value.end);\n\n if (key === undefined || start < prefix.length || end < start) {\n return undefined;\n }\n\n entries.push({\n cssName: cssPropertyName(key),\n valueCode: source.slice(start, end),\n });\n }\n\n return entries;\n}\n\nfunction readStaticOxcObjectKey(node: unknown): string | undefined {\n const key = readObject(node);\n\n if (key.type === \"Identifier\") {\n return typeof key.name === \"string\" ? key.name : undefined;\n }\n\n if (key.type === \"Literal\") {\n return typeof key.value === \"string\" ? key.value : undefined;\n }\n\n return undefined;\n}\n\nfunction readNumber(value: unknown): number {\n return typeof value === \"number\" ? value : -1;\n}\n\nexport function simpleSideEffectFreeExpression(code: string): string | undefined {\n const trimmed = unwrapParenthesized(code.trim());\n\n if (trimmed === \"\") {\n return undefined;\n }\n\n if (\n trimmed === \"true\" ||\n trimmed === \"false\" ||\n trimmed === \"null\" ||\n trimmed === \"undefined\"\n ) {\n return trimmed;\n }\n\n if (\n NUMERIC_LITERAL_RE.test(trimmed) ||\n SIMPLE_STRING_LITERAL_RE.test(trimmed) ||\n SIMPLE_SINGLE_QUOTE_RE.test(trimmed) ||\n SIMPLE_IDENT_CHAIN_RE.test(trimmed)\n ) {\n return trimmed;\n }\n\n return undefined;\n}\n\nexport function htmlAttributeName(name: string): string {\n return HTML_ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nexport function isBooleanishStringAttribute(name: string): boolean {\n const attributeName = htmlAttributeName(name).toLowerCase();\n return (\n attributeName.startsWith(\"aria-\") ||\n attributeName.startsWith(\"data-\") ||\n BOOLEANISH_STRING_ATTRIBUTES.has(attributeName)\n );\n}\n\nconst BOOLEANISH_STRING_ATTRIBUTES = new Set<string>([\n \"contenteditable\",\n \"draggable\",\n \"spellcheck\",\n]);\n\nfunction unwrapParenthesized(code: string): string {\n let current = code;\n\n while (current.startsWith(\"(\") && current.endsWith(\")\") && findMatchingClose(current, 0) === current.length - 1) {\n current = current.slice(1, -1).trim();\n }\n\n return current;\n}\n\nfunction splitTopLevel(code: string, separator: string): string[] {\n const parts: string[] = [];\n let start = 0;\n let depth = 0;\n let quote: string | undefined;\n\n for (let index = 0; index < code.length; index += 1) {\n const char = code[index];\n\n if (quote !== undefined) {\n if (char === \"\\\\\") {\n index += 1;\n } else if (char === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (char === \"\\\"\" || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth += 1;\n continue;\n }\n\n if (char === \"}\" || char === \"]\" || char === \")\") {\n depth -= 1;\n continue;\n }\n\n if (depth === 0 && char === separator) {\n parts.push(code.slice(start, index));\n start = index + 1;\n }\n }\n\n parts.push(code.slice(start));\n return parts;\n}\n\nfunction findTopLevelColon(code: string): number {\n return splitTopLevel(code, \":\")[0]?.length ?? -1;\n}\n\nfunction findMatchingClose(code: string, openIndex: number): number {\n let depth = 0;\n let quote: string | undefined;\n\n for (let index = openIndex; index < code.length; index += 1) {\n const char = code[index];\n\n if (quote !== undefined) {\n if (char === \"\\\\\") {\n index += 1;\n } else if (char === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (char === \"\\\"\" || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \"(\") {\n depth += 1;\n } else if (char === \")\") {\n depth -= 1;\n\n if (depth === 0) {\n return index;\n }\n }\n }\n\n return -1;\n}\n\nfunction parseStaticObjectKey(rawKey: string): string | undefined {\n if (/^[A-Za-z_$][\\w$]*$/.test(rawKey)) {\n return rawKey;\n }\n\n if (\n (rawKey.startsWith(\"\\\"\") && rawKey.endsWith(\"\\\"\")) ||\n (rawKey.startsWith(\"'\") && rawKey.endsWith(\"'\"))\n ) {\n return rawKey.slice(1, -1);\n }\n\n return undefined;\n}\n\nfunction cssPropertyName(name: string): string {\n return name.startsWith(\"--\")\n ? name\n : name.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"emit-server.d.ts","sourceRoot":"","sources":["../src/emit-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwD,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9F,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAqBrE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AASD,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAE,iBAAsB,GAAG,UAAU,CA8GpF"}
1
+ {"version":3,"file":"emit-server.d.ts","sourceRoot":"","sources":["../src/emit-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwD,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9F,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAqBrE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAUD,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAoHpF"}
@@ -8,6 +8,7 @@ import { emitOxcCompatObjectChildren, oxcServerStringReactNodeRenderHelperPlaceh
8
8
  // name through every signature. Reset at the top of `emitServer`.
9
9
  let currentUrlSafeHelperName = "_urlAttrSafe";
10
10
  let currentClientBoundaryHelperName;
11
+ let currentCompatChildHelperName;
11
12
  let currentSpreadAttributesHelperName = "_renderSpreadAttributes";
12
13
  export function emitServer(ir, options = {}) {
13
14
  const escapeHelperName = allocateEscapeHelperName(ir);
@@ -24,12 +25,16 @@ export function emitServer(ir, options = {}) {
24
25
  const clientBoundaryHelperName = usesClientBoundary(ir)
25
26
  ? allocateHelperName(ir, "_renderClientBoundary")
26
27
  : undefined;
28
+ const compatChildHelperName = usesCompatChildRender(ir)
29
+ ? allocateHelperName(ir, "_renderCompatChild")
30
+ : undefined;
27
31
  const spreadAttributesHelperName = allocateHelperName(ir, "_renderSpreadAttributes");
28
32
  const outAccumulatorName = allocateHelperName(ir, "_out");
29
33
  const urlSafeHelperName = allocateHelperName(ir, "_urlAttrSafe");
30
34
  currentUrlSafeHelperName = urlSafeHelperName;
31
35
  setOxcServerStringUrlSafeHelperName(urlSafeHelperName);
32
36
  currentClientBoundaryHelperName = clientBoundaryHelperName;
37
+ currentCompatChildHelperName = compatChildHelperName;
33
38
  currentSpreadAttributesHelperName = spreadAttributesHelperName;
34
39
  const helper = emitEscapeHtmlHelper(escapeHelperName);
35
40
  // Inline URL-scheme guard mirroring packages/server/src/url-safety.ts.
@@ -77,7 +82,7 @@ export function emitServer(ir, options = {}) {
77
82
  ? ""
78
83
  : `import { ${options.escape.batchImportName} as ${escapeBatchHelperName} } from ${stringLiteral(options.escape.batchImportSource)};`;
79
84
  const userImports = emitUserImports(ir);
80
- const contextImport = emitContextImport(contextProviderHelperName, contextConsumerHelperName, reactNodeRenderHelperName);
85
+ const contextImport = emitContextImport(contextProviderHelperName, contextConsumerHelperName, reactNodeRenderHelperName, compatChildHelperName);
81
86
  const moduleStatements = emitModuleStatements(ir);
82
87
  const code = createCodeBuilder();
83
88
  code.section(userImports);
@@ -91,14 +96,17 @@ export function emitServer(ir, options = {}) {
91
96
  code.section(components);
92
97
  return {
93
98
  code: code.toString(),
94
- imports: collectContextImports(contextProviderHelperName, contextConsumerHelperName, reactNodeRenderHelperName),
99
+ imports: collectContextImports(contextProviderHelperName, contextConsumerHelperName, reactNodeRenderHelperName, compatChildHelperName),
95
100
  };
96
101
  }
97
- function emitContextImport(contextProviderHelperName, contextConsumerHelperName, reactNodeRenderHelperName) {
102
+ function emitContextImport(contextProviderHelperName, contextConsumerHelperName, reactNodeRenderHelperName, compatChildHelperName) {
98
103
  const specifiers = [
99
104
  reactNodeRenderHelperName === undefined
100
105
  ? undefined
101
106
  : `renderToString as ${reactNodeRenderHelperName}`,
107
+ compatChildHelperName === undefined
108
+ ? undefined
109
+ : `renderChildToString as ${compatChildHelperName}`,
102
110
  contextProviderHelperName === undefined
103
111
  ? undefined
104
112
  : `renderContextProviderToString as ${contextProviderHelperName}`,
@@ -110,11 +118,12 @@ function emitContextImport(contextProviderHelperName, contextConsumerHelperName,
110
118
  ? ""
111
119
  : `import { ${specifiers.join(", ")} } from "@reckona/mreact-compat";`;
112
120
  }
113
- function collectContextImports(contextProviderHelperName, contextConsumerHelperName, reactNodeRenderHelperName) {
121
+ function collectContextImports(contextProviderHelperName, contextConsumerHelperName, reactNodeRenderHelperName, compatChildHelperName) {
114
122
  const specifiers = [
115
123
  reactNodeRenderHelperName === undefined ? undefined : "renderToString",
116
124
  contextProviderHelperName === undefined ? undefined : "renderContextProviderToString",
117
125
  contextConsumerHelperName === undefined ? undefined : "renderContextConsumerToString",
126
+ compatChildHelperName === undefined ? undefined : "renderChildToString",
118
127
  ].filter((specifier) => specifier !== undefined);
119
128
  return specifiers.length === 0 ? [] : [{ source: "@reckona/mreact-compat", specifiers }];
120
129
  }
@@ -179,6 +188,9 @@ function collectHtmlStatements(node, outVar, escapeHelperName, escapeBatchHelper
179
188
  if (node.renderMode === "react-node" && reactNodeRenderHelperName !== undefined) {
180
189
  return [`${outVar} += ${reactNodeRenderHelperName}(() => (${node.code}));`];
181
190
  }
191
+ if (node.renderMode === "compat-child" && currentCompatChildHelperName !== undefined) {
192
+ return [`${outVar} += ${currentCompatChildHelperName}(${node.code});`];
193
+ }
182
194
  return [`${outVar} += ${escapeHelperName}(${node.code});`];
183
195
  }
184
196
  if (node.kind === "conditional") {
@@ -364,6 +376,9 @@ function collectHtmlParts(node, escapeHelperName, escapeBatchHelperName, asyncCo
364
376
  if (node.renderMode === "react-node" && reactNodeRenderHelperName !== undefined) {
365
377
  return [`${reactNodeRenderHelperName}(() => (${node.code}))`];
366
378
  }
379
+ if (node.renderMode === "compat-child" && currentCompatChildHelperName !== undefined) {
380
+ return [`${currentCompatChildHelperName}(${node.code})`];
381
+ }
367
382
  return [`${escapeHelperName}(${node.code})`];
368
383
  }
369
384
  if (node.kind === "conditional") {
@@ -514,7 +529,9 @@ function collectHtmlAttributeParts(tagName, attr, escapeHelperName, escapeBatchH
514
529
  }
515
530
  if (attr.name === "style") {
516
531
  return [
517
- emitDynamicStyleAttributeExpression(attr.code, escapeHelperName, escapeBatchHelperName),
532
+ attr.serialization === "compat"
533
+ ? emitCompatDynamicStyleAttributeExpression(attr.code, escapeHelperName)
534
+ : emitDynamicStyleAttributeExpression(attr.code, escapeHelperName, escapeBatchHelperName),
518
535
  ];
519
536
  }
520
537
  if (isDangerousHtmlAttribute(htmlName)) {
@@ -525,7 +542,11 @@ function collectHtmlAttributeParts(tagName, attr, escapeHelperName, escapeBatchH
525
542
  `(() => { const _value = (${attr.code}); if (_value == null || _value === false) return ""; if (typeof _value === "object" && _value !== null && typeof _value.__html === "string") return ${stringLiteral(` ${htmlName}="`)} + ${escapeHelperName}(_value.__html) + ${stringLiteral('"')}; return ""; })()`,
526
543
  ];
527
544
  }
528
- return [emitDynamicAttributeExpression(htmlName, attr.code, escapeHelperName)];
545
+ return [
546
+ attr.serialization === "compat" && !isUrlAttribute(htmlName)
547
+ ? emitCompatDynamicAttributeExpression(htmlName, attr.code, escapeHelperName)
548
+ : emitDynamicAttributeExpression(htmlName, attr.code, escapeHelperName),
549
+ ];
529
550
  }
530
551
  function collectElementAttributeParts(tagName, attrs, escapeHelperName, escapeBatchHelperName, dynamicAttributes, attributeScan = scanElementAttributes(tagName, attrs)) {
531
552
  if (dynamicAttributes === "emit" && attrs.some((attr) => attr.kind === "spread-attr")) {
@@ -620,6 +641,29 @@ function emitDynamicAttributeExpression(name, code, escapeHelperName) {
620
641
  ? `(() => { const _value = (${code}); return _value == null ? "" : ${stringLiteral(` ${name}="`)} + ${escapeHelperName}(_value) + ${stringLiteral('"')}; })()`
621
642
  : `(() => { const _value = (${code}); return _value == null || _value === false ? "" : ${stringLiteral(` ${name}="`)} + ${escapeHelperName}(_value === true ? "" : _value) + ${stringLiteral('"')}; })()`;
622
643
  }
644
+ // Mirrors packages/react-compat/src/server-render.ts renderHtmlAttribute for
645
+ // dynamic values: functions and objects drop, booleans serialize as
646
+ // "true"/"false" for booleanish-string and data attributes, and false drops
647
+ // elsewhere. Byte parity with the interpreter is pinned by tests.
648
+ function emitCompatDynamicAttributeExpression(name, code, escapeHelperName) {
649
+ const lowerCased = name.toLowerCase();
650
+ const booleanishOrData = lowerCased.startsWith("aria-") ||
651
+ lowerCased.startsWith("data-") ||
652
+ lowerCased === "contenteditable" ||
653
+ lowerCased === "draggable" ||
654
+ lowerCased === "spellcheck";
655
+ const booleanBranch = booleanishOrData
656
+ ? `return ${stringLiteral(` ${name}="`)} + (_value ? "true" : "false") + ${stringLiteral('"')};`
657
+ : `return _value ? ${stringLiteral(` ${name}=""`)} : "";`;
658
+ return `(() => { const _value = (${code}); if (_value == null || typeof _value === "function") return ""; if (typeof _value === "boolean") { ${booleanBranch} } if (typeof _value === "object") return ""; return ${stringLiteral(` ${name}="`)} + ${escapeHelperName}(_value) + ${stringLiteral('"')}; })()`;
659
+ }
660
+ // Mirrors packages/react-compat/src/server-render.ts renderStyleAttribute and
661
+ // renderCssValue: skips null/boolean/empty entries and appends px to nonzero
662
+ // numeric values outside the react unitless list.
663
+ function emitCompatDynamicStyleAttributeExpression(code, escapeHelperName) {
664
+ const unitlessCheck = '_styleName === "flex" || _styleName === "fontWeight" || _styleName === "lineHeight" || _styleName === "opacity" || _styleName === "order" || _styleName === "zIndex" || _styleName === "zoom"';
665
+ return `(() => { const _value = (${code}); if (_value == null || typeof _value !== "object") return ""; let _style = ""; for (const _styleName in _value) { const _styleValue = _value[_styleName]; if (_styleValue == null || typeof _styleValue === "boolean" || _styleValue === "") continue; const _cssName = _styleName.startsWith("--") ? _styleName : _styleName.replace(/[A-Z]/g, (_char) => "-" + _char.toLowerCase()); const _css = typeof _styleValue !== "number" || _styleValue === 0 || (${unitlessCheck}) ? String(_styleValue) : _styleValue + "px"; _style += (_style === "" ? "" : ";") + ${escapeHelperName}(_cssName) + ":" + ${escapeHelperName}(_css); } return _style === "" ? "" : ${stringLiteral(' style="')} + _style + ${stringLiteral('"')}; })()`;
666
+ }
623
667
  function emitDynamicStyleAttributeExpression(code, escapeHelperName, escapeBatchHelperName) {
624
668
  const staticStyleExpression = emitStaticStyleObjectAttributeExpression(code, escapeHelperName);
625
669
  if (staticStyleExpression !== undefined) {
@@ -704,14 +748,18 @@ function emitBatchedSimpleChildrenExpression(children, escapeBatchHelperName) {
704
748
  if (escapeBatchHelperName === undefined) {
705
749
  return undefined;
706
750
  }
707
- const dynamicChildren = children.filter((child) => child.kind === "expr" && child.renderMode !== "html" && child.renderMode !== "react-node");
751
+ const dynamicChildren = children.filter((child) => child.kind === "expr" &&
752
+ child.renderMode !== "html" &&
753
+ child.renderMode !== "react-node" &&
754
+ child.renderMode !== "compat-child");
708
755
  if (dynamicChildren.length < 2) {
709
756
  return undefined;
710
757
  }
711
758
  if (children.some((child) => child.kind !== "text" &&
712
759
  !(child.kind === "expr" &&
713
760
  child.renderMode !== "html" &&
714
- child.renderMode !== "react-node"))) {
761
+ child.renderMode !== "react-node" &&
762
+ child.renderMode !== "compat-child"))) {
715
763
  return undefined;
716
764
  }
717
765
  const values = dynamicChildren.map((child) => child.code);
@@ -885,6 +933,31 @@ function replaceOxcServerStringReactNodeRenderHelper(code, helperName) {
885
933
  function usesClientBoundary(ir) {
886
934
  return ir.components.some((component) => containsClientBoundary(component.root));
887
935
  }
936
+ function usesCompatChildRender(ir) {
937
+ return ir.components.some((component) => containsCompatChildRender(component.root));
938
+ }
939
+ function containsCompatChildRender(node) {
940
+ if (node.kind === "expr") {
941
+ return node.renderMode === "compat-child";
942
+ }
943
+ if (node.kind === "conditional") {
944
+ return [...node.whenTrue, ...node.whenFalse].some(containsCompatChildRender);
945
+ }
946
+ if (node.kind === "list" || node.kind === "element" || node.kind === "fragment") {
947
+ return node.children.some(containsCompatChildRender);
948
+ }
949
+ if (node.kind === "async-boundary") {
950
+ return [
951
+ ...node.children,
952
+ ...(node.placeholderChildren ?? []),
953
+ ...(node.catchChildren ?? []),
954
+ ].some(containsCompatChildRender);
955
+ }
956
+ if (node.kind === "component") {
957
+ return node.children.some(containsCompatChildRender);
958
+ }
959
+ return false;
960
+ }
888
961
  function emitClientBoundaryHelper(name) {
889
962
  const propsHelperName = `${name}$hasNonSerializableProps`;
890
963
  return [