@reckona/mreact-compiler 0.0.161 → 0.0.162

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,10 +1,12 @@
1
1
  import type { JsxNodeIr } from "./ir.js";
2
2
  export declare function collectCompatCreateElementNames(program: unknown): Set<string>;
3
+ export declare function collectCompatRenderToStringNames(program: unknown): Set<string>;
3
4
  interface CompatCreateElementScope {
4
5
  names: ReadonlySet<string>;
5
6
  shadowed: ReadonlySet<string>;
6
7
  }
7
8
  export declare function analyzeCompatCreateElementRoot(code: string, expression: Record<string, unknown>, scope: CompatCreateElementScope): JsxNodeIr | undefined;
9
+ export declare function analyzeCompatCreateElementFunctionRoot(code: string, functionLike: Record<string, unknown>, names: ReadonlySet<string>): JsxNodeIr | undefined;
8
10
  export declare function hasLowerableCompatCreateElementReturn(code: string, functionLike: Record<string, unknown>, names: ReadonlySet<string>): boolean;
9
11
  export declare function collectFunctionShadowedNames(functionLike: Record<string, unknown>, names: ReadonlySet<string>): Set<string>;
10
12
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"oxc-compat-create-element.d.ts","sourceRoot":"","sources":["../src/oxc-compat-create-element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,SAAS,CAAC;AAWtD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAiC7E;AAkDD,UAAU,wBAAwB;IAChC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC/B;AAoQD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,KAAK,EAAE,wBAAwB,GAC9B,SAAS,GAAG,SAAS,CAEvB;AAiQD,wBAAgB,qCAAqC,CACnD,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GACzB,OAAO,CA0BT;AAED,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GACzB,GAAG,CAAC,MAAM,CAAC,CAiDb"}
1
+ {"version":3,"file":"oxc-compat-create-element.d.ts","sourceRoot":"","sources":["../src/oxc-compat-create-element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,SAAS,CAAC;AAYtD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAiC7E;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAiC9E;AAkDD,UAAU,wBAAwB;IAChC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC/B;AAoQD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,KAAK,EAAE,wBAAwB,GAC9B,SAAS,GAAG,SAAS,CAEvB;AAED,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GACzB,SAAS,GAAG,SAAS,CA4BvB;AA8TD,wBAAgB,qCAAqC,CACnD,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GACzB,OAAO,CAET;AAED,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GACzB,GAAG,CAAC,MAAM,CAAC,CAiDb"}
@@ -5,6 +5,7 @@ import { readArray, readObject, readSource, unwrapOxcParentheses } from "./oxc-n
5
5
  // bails the WHOLE tree out (callers keep the source verbatim) so the
6
6
  // interpreter semantics never get half-applied.
7
7
  const COMPAT_CREATE_ELEMENT_SOURCES = new Set(["react", "@reckona/mreact-compat"]);
8
+ const COMPAT_RENDER_TO_STRING_SOURCES = new Set(["@reckona/mreact-compat"]);
8
9
  export function collectCompatCreateElementNames(program) {
9
10
  const names = new Set();
10
11
  for (const statement of readArray(readObject(program).body)) {
@@ -30,6 +31,31 @@ export function collectCompatCreateElementNames(program) {
30
31
  }
31
32
  return names;
32
33
  }
34
+ export function collectCompatRenderToStringNames(program) {
35
+ const names = new Set();
36
+ for (const statement of readArray(readObject(program).body)) {
37
+ const declaration = readObject(statement);
38
+ if (declaration.type !== "ImportDeclaration") {
39
+ continue;
40
+ }
41
+ const source = readObject(declaration.source);
42
+ if (typeof source.value !== "string" || !COMPAT_RENDER_TO_STRING_SOURCES.has(source.value)) {
43
+ continue;
44
+ }
45
+ for (const specifier of readArray(declaration.specifiers)) {
46
+ const specifierObject = readObject(specifier);
47
+ if (specifierObject.type !== "ImportSpecifier") {
48
+ continue;
49
+ }
50
+ const imported = readObject(specifierObject.imported);
51
+ const local = readObject(specifierObject.local);
52
+ if (imported.name === "renderToString" && typeof local.name === "string") {
53
+ names.add(local.name);
54
+ }
55
+ }
56
+ }
57
+ return names;
58
+ }
33
59
  // Mirrors packages/react-compat/src/server-render.ts attribute serialization
34
60
  // for compile-time-known prop values. Keep these tables in sync with the
35
61
  // interpreter; parity tests compare emitted bytes against renderToString.
@@ -257,6 +283,25 @@ function lowerStyleProp(code, value) {
257
283
  export function analyzeCompatCreateElementRoot(code, expression, scope) {
258
284
  return lowerCreateElementCall(code, unwrapOxcParentheses(expression), scope);
259
285
  }
286
+ export function analyzeCompatCreateElementFunctionRoot(code, functionLike, names) {
287
+ if (names.size === 0) {
288
+ return undefined;
289
+ }
290
+ const shadowed = collectFunctionShadowedNames(functionLike, names);
291
+ const scope = { names, shadowed };
292
+ const body = unwrapOxcParentheses(readObject(functionLike.body));
293
+ if (body.type !== "BlockStatement") {
294
+ return lowerCreateElementCall(code, body, scope);
295
+ }
296
+ for (const statement of readArray(body.body)) {
297
+ const statementObject = readObject(statement);
298
+ if (statementObject.type !== "ReturnStatement") {
299
+ continue;
300
+ }
301
+ return lowerCreateElementCall(code, unwrapOxcParentheses(readObject(statementObject.argument)), scope);
302
+ }
303
+ return undefined;
304
+ }
260
305
  function lowerCreateElementCall(code, expression, scope) {
261
306
  if (expression.type !== "CallExpression" || expression.optional === true) {
262
307
  return undefined;
@@ -342,6 +387,40 @@ function lowerCreateElementChild(code, child, scope) {
342
387
  return [list];
343
388
  }
344
389
  }
390
+ if (child.type === "ConditionalExpression") {
391
+ const whenTrue = lowerCreateElementDynamicBranch(code, readObject(child.consequent), scope);
392
+ const whenFalse = lowerCreateElementDynamicBranch(code, readObject(child.alternate), scope);
393
+ if (whenTrue !== undefined && whenFalse !== undefined) {
394
+ return [
395
+ {
396
+ kind: "conditional",
397
+ conditionCode: readSource(code, readObject(child.test)),
398
+ whenTrue,
399
+ whenFalse,
400
+ },
401
+ ];
402
+ }
403
+ }
404
+ if (child.type === "LogicalExpression" && child.operator === "&&") {
405
+ const whenTrue = lowerCreateElementDynamicBranch(code, readObject(child.right), scope);
406
+ if (whenTrue !== undefined) {
407
+ const conditionValueName = logicalConditionValueName(readObject(child.left));
408
+ return [
409
+ {
410
+ kind: "conditional",
411
+ conditionCode: readSource(code, readObject(child.left)),
412
+ conditionValueName,
413
+ whenTrue,
414
+ whenFalse: [
415
+ {
416
+ kind: "expr",
417
+ code: renderableFalsyConditionValueCode(conditionValueName),
418
+ },
419
+ ],
420
+ },
421
+ ];
422
+ }
423
+ }
345
424
  // Provably-string expressions escape directly (and stay batchable); the
346
425
  // interpreter would emit the same escaped bytes for them.
347
426
  if (isProvablyStringExpression(child, scope)) {
@@ -352,6 +431,19 @@ function lowerCreateElementChild(code, child, scope) {
352
431
  // evaluate to react nodes keep rendering instead of stringifying.
353
432
  return [{ kind: "expr", code: readSource(code, child), renderMode: "compat-child" }];
354
433
  }
434
+ function lowerCreateElementDynamicBranch(code, expression, scope) {
435
+ const unwrapped = unwrapOxcParentheses(expression);
436
+ if (unwrapped.type === "Literal" && (unwrapped.value === null || unwrapped.value === false)) {
437
+ return [];
438
+ }
439
+ return lowerCreateElementChild(code, unwrapped, scope);
440
+ }
441
+ function logicalConditionValueName(expression) {
442
+ return `__mreactLogical_${typeof expression.start === "number" ? expression.start : "value"}`;
443
+ }
444
+ function renderableFalsyConditionValueCode(name) {
445
+ return `((typeof ${name} === "number" || typeof ${name} === "bigint") ? ${name} : null)`;
446
+ }
355
447
  function isProvablyStringExpression(expression, scope) {
356
448
  if (expression.type === "TemplateLiteral") {
357
449
  return true;
@@ -429,24 +521,7 @@ function lowerCreateElementListCall(code, expression, scope) {
429
521
  // implicit body) that the converter can fully lower. Detection and lowering
430
522
  // share lowerCreateElementCall so they can never disagree.
431
523
  export function hasLowerableCompatCreateElementReturn(code, functionLike, names) {
432
- if (names.size === 0) {
433
- return false;
434
- }
435
- const shadowed = collectFunctionShadowedNames(functionLike, names);
436
- const scope = { names, shadowed };
437
- const body = unwrapOxcParentheses(readObject(functionLike.body));
438
- if (body.type !== "BlockStatement") {
439
- return lowerCreateElementCall(code, body, scope) !== undefined;
440
- }
441
- for (const statement of readArray(body.body)) {
442
- const statementObject = readObject(statement);
443
- if (statementObject.type !== "ReturnStatement") {
444
- continue;
445
- }
446
- const argument = unwrapOxcParentheses(readObject(statementObject.argument));
447
- return lowerCreateElementCall(code, argument, scope) !== undefined;
448
- }
449
- return false;
524
+ return analyzeCompatCreateElementFunctionRoot(code, functionLike, names) !== undefined;
450
525
  }
451
526
  export function collectFunctionShadowedNames(functionLike, names) {
452
527
  const shadowed = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"oxc-compat-create-element.js","sourceRoot":"","sources":["../src/oxc-compat-create-element.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AttributeIr, JsxNodeIr } from \"./ir.js\";\nimport { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\n\n// Lowers statically analyzable react-compat createElement() call trees into\n// the element IR so they compile through the server string pipeline instead\n// of being interpreted per request. Any unsupported shape anywhere in a tree\n// bails the WHOLE tree out (callers keep the source verbatim) so the\n// interpreter semantics never get half-applied.\n\nconst COMPAT_CREATE_ELEMENT_SOURCES = new Set([\"react\", \"@reckona/mreact-compat\"]);\n\nexport function collectCompatCreateElementNames(program: unknown): Set<string> {\n const names = new Set<string>();\n\n for (const statement of readArray(readObject(program).body)) {\n const declaration = readObject(statement);\n\n if (declaration.type !== \"ImportDeclaration\") {\n continue;\n }\n\n const source = readObject(declaration.source);\n\n if (typeof source.value !== \"string\" || !COMPAT_CREATE_ELEMENT_SOURCES.has(source.value)) {\n continue;\n }\n\n for (const specifier of readArray(declaration.specifiers)) {\n const specifierObject = readObject(specifier);\n\n if (specifierObject.type !== \"ImportSpecifier\") {\n continue;\n }\n\n const imported = readObject(specifierObject.imported);\n const local = readObject(specifierObject.local);\n\n if (imported.name === \"createElement\" && typeof local.name === \"string\") {\n names.add(local.name);\n }\n }\n }\n\n return names;\n}\n\n// Mirrors packages/react-compat/src/server-render.ts attribute serialization\n// for compile-time-known prop values. Keep these tables in sync with the\n// interpreter; parity tests compare emitted bytes against renderToString.\nconst COMPAT_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 rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nconst COMPAT_BOOLEANISH_STRING_ATTRIBUTES = new Set([\n \"contenteditable\",\n \"draggable\",\n \"spellcheck\",\n]);\n\n// URL-bearing attributes always emit through the dynamic path so the runtime\n// scheme guard applies; static literal lowering must not bypass it.\nconst URL_ATTRIBUTE_NAMES = new Set([\n \"action\",\n \"formaction\",\n \"href\",\n \"src\",\n \"srcset\",\n \"xlink:href\",\n]);\n\nconst VALID_ATTRIBUTE_NAME = /^[A-Za-z_][\\w.\\-:]*$/;\n\ninterface CompatCreateElementScope {\n names: ReadonlySet<string>;\n shadowed: ReadonlySet<string>;\n}\n\nfunction isActiveCreateElementName(scope: CompatCreateElementScope, name: string): boolean {\n return scope.names.has(name) && !scope.shadowed.has(name);\n}\n\nfunction isEventHandlerPropName(name: string): boolean {\n return (\n name.length > 1 &&\n (name.charCodeAt(0) | 32) === 111 &&\n (name.charCodeAt(1) | 32) === 110\n );\n}\n\nfunction isBooleanishStringAttributeName(attributeName: string): boolean {\n const lowerCased = attributeName.toLowerCase();\n return lowerCased.startsWith(\"aria-\") || COMPAT_BOOLEANISH_STRING_ATTRIBUTES.has(lowerCased);\n}\n\nfunction isDataAttributeName(attributeName: string): boolean {\n return attributeName.toLowerCase().startsWith(\"data-\");\n}\n\nfunction readStaticPropertyKey(property: Record<string, unknown>): string | undefined {\n if (property.computed === true) {\n return undefined;\n }\n\n const key = readObject(property.key);\n\n if (key.type === \"Identifier\" && typeof key.name === \"string\") {\n return key.name;\n }\n\n if (key.type === \"Literal\" && typeof key.value === \"string\") {\n return key.value;\n }\n\n return undefined;\n}\n\ntype StaticLiteral =\n | { kind: \"value\"; value: string | number | boolean | null }\n | { kind: \"undefined\" };\n\nfunction readStaticLiteral(expression: Record<string, unknown>): StaticLiteral | undefined {\n if (expression.type === \"Literal\") {\n const value = expression.value;\n\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return { kind: \"value\", value };\n }\n\n return undefined;\n }\n\n if (expression.type === \"Identifier\" && expression.name === \"undefined\") {\n return { kind: \"undefined\" };\n }\n\n if (expression.type === \"TemplateLiteral\") {\n const expressions = readArray(expression.expressions);\n const quasis = readArray(expression.quasis);\n\n if (expressions.length === 0 && quasis.length === 1) {\n const cooked = readObject(readObject(quasis[0]).value).cooked;\n\n if (typeof cooked === \"string\") {\n return { kind: \"value\", value: cooked };\n }\n }\n }\n\n return undefined;\n}\n\ninterface LoweredProps {\n attributes: AttributeIr[];\n keyCode?: string;\n childrenProp?: Record<string, unknown>;\n}\n\nfunction lowerCreateElementProps(\n code: string,\n propsArgument: Record<string, unknown> | undefined,\n): LoweredProps | undefined {\n if (\n propsArgument === undefined ||\n (propsArgument.type === \"Literal\" && propsArgument.value === null) ||\n (propsArgument.type === \"Identifier\" && propsArgument.name === \"undefined\")\n ) {\n return { attributes: [] };\n }\n\n if (propsArgument.type !== \"ObjectExpression\") {\n return undefined;\n }\n\n const attributes: AttributeIr[] = [];\n let keyCode: string | undefined;\n let childrenProp: Record<string, unknown> | undefined;\n\n for (const property of readArray(propsArgument.properties)) {\n const propertyObject = readObject(property);\n\n if (\n propertyObject.type !== \"Property\" ||\n propertyObject.kind !== \"init\" ||\n propertyObject.method === true ||\n propertyObject.shorthand === true\n ) {\n return undefined;\n }\n\n const name = readStaticPropertyKey(propertyObject);\n\n if (name === undefined) {\n return undefined;\n }\n\n const value = unwrapOxcParentheses(readObject(propertyObject.value));\n\n if (name === \"key\") {\n keyCode = readSource(code, value);\n continue;\n }\n\n if (name === \"ref\" || isEventHandlerPropName(name)) {\n continue;\n }\n\n if (name === \"children\") {\n childrenProp = value;\n continue;\n }\n\n if (name === \"dangerouslySetInnerHTML\" || name === \"suppressHydrationWarning\") {\n return undefined;\n }\n\n if (name === \"style\") {\n const styleProp = lowerStyleProp(code, value);\n\n if (styleProp === undefined) {\n return undefined;\n }\n\n if (styleProp.attribute !== undefined) {\n attributes.push(styleProp.attribute);\n }\n continue;\n }\n\n const attributeName = COMPAT_HTML_ATTRIBUTE_ALIASES[name] ?? name;\n\n if (!VALID_ATTRIBUTE_NAME.test(attributeName) || isEventHandlerPropName(attributeName)) {\n // The interpreter drops these at runtime; keeping them out of the\n // compiled output matches its bytes.\n continue;\n }\n\n const literal = readStaticLiteral(value);\n\n if (literal === undefined || URL_ATTRIBUTE_NAMES.has(attributeName.toLowerCase())) {\n attributes.push({\n kind: \"dynamic-attr\",\n name: attributeName,\n code: readSource(code, value),\n serialization: \"compat\",\n });\n continue;\n }\n\n const staticAttribute = serializeStaticCompatAttribute(attributeName, literal);\n\n if (staticAttribute !== undefined) {\n attributes.push(staticAttribute);\n }\n }\n\n return {\n attributes,\n ...(keyCode === undefined ? {} : { keyCode }),\n ...(childrenProp === undefined ? {} : { childrenProp }),\n };\n}\n\nfunction serializeStaticCompatAttribute(\n attributeName: string,\n literal: StaticLiteral,\n): AttributeIr | undefined {\n if (literal.kind === \"undefined\" || literal.value === null) {\n return undefined;\n }\n\n const value = literal.value;\n\n if (typeof value === \"boolean\") {\n if (isBooleanishStringAttributeName(attributeName) || isDataAttributeName(attributeName)) {\n return { kind: \"static-attr\", name: attributeName, value: value ? \"true\" : \"false\" };\n }\n\n return value ? { kind: \"static-attr\", name: attributeName, value: \"\" } : undefined;\n }\n\n return { kind: \"static-attr\", name: attributeName, value: String(value) };\n}\n\n// undefined bails the whole tree; { attribute: undefined } drops the prop.\nfunction lowerStyleProp(\n code: string,\n value: Record<string, unknown>,\n): { attribute?: AttributeIr } | undefined {\n if (value.type === \"ObjectExpression\") {\n for (const property of readArray(value.properties)) {\n const propertyObject = readObject(property);\n\n if (\n propertyObject.type !== \"Property\" ||\n propertyObject.kind !== \"init\" ||\n propertyObject.computed === true ||\n propertyObject.method === true ||\n readStaticPropertyKey(propertyObject) === undefined\n ) {\n return undefined;\n }\n }\n\n return {\n attribute: {\n kind: \"dynamic-attr\",\n name: \"style\",\n code: readSource(code, value),\n serialization: \"compat\",\n },\n };\n }\n\n // The interpreter's renderStyleAttribute only serializes objects; string\n // and other primitive style values are dropped, so match those bytes by\n // dropping them at compile time too.\n if (readStaticLiteral(value) !== undefined) {\n return {};\n }\n\n return {\n attribute: {\n kind: \"dynamic-attr\",\n name: \"style\",\n code: readSource(code, value),\n serialization: \"compat\",\n },\n };\n}\n\nexport function analyzeCompatCreateElementRoot(\n code: string,\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr | undefined {\n return lowerCreateElementCall(code, unwrapOxcParentheses(expression), scope);\n}\n\nfunction lowerCreateElementCall(\n code: string,\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr | undefined {\n if (expression.type !== \"CallExpression\" || expression.optional === true) {\n return undefined;\n }\n\n const callee = readObject(expression.callee);\n\n if (\n callee.type !== \"Identifier\" ||\n typeof callee.name !== \"string\" ||\n !isActiveCreateElementName(scope, callee.name)\n ) {\n return undefined;\n }\n\n const args = readArray(expression.arguments);\n\n if (args.length === 0) {\n return undefined;\n }\n\n for (const argument of args) {\n if (readObject(argument).type === \"SpreadElement\") {\n return undefined;\n }\n }\n\n const tagArgument = unwrapOxcParentheses(readObject(args[0]));\n\n if (tagArgument.type !== \"Literal\" || typeof tagArgument.value !== \"string\") {\n return undefined;\n }\n\n const props = lowerCreateElementProps(\n code,\n args.length > 1 ? unwrapOxcParentheses(readObject(args[1])) : undefined,\n );\n\n if (props === undefined) {\n return undefined;\n }\n\n const childArguments = args.slice(2).map((argument) => unwrapOxcParentheses(readObject(argument)));\n const childSources =\n childArguments.length > 0\n ? childArguments\n : props.childrenProp === undefined\n ? []\n : [props.childrenProp];\n const children: JsxNodeIr[] = [];\n\n for (const child of childSources) {\n const lowered = lowerCreateElementChild(code, child, scope);\n\n if (lowered === undefined) {\n return undefined;\n }\n\n children.push(...lowered);\n }\n\n return {\n kind: \"element\",\n tagName: tagArgument.value,\n ...(props.keyCode === undefined ? {} : { keyCode: props.keyCode }),\n attributes: props.attributes,\n children,\n };\n}\n\nfunction lowerCreateElementChild(\n code: string,\n child: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr[] | undefined {\n const literal = readStaticLiteral(child);\n\n if (literal !== undefined) {\n if (literal.kind === \"undefined\" || literal.value === null || typeof literal.value === \"boolean\") {\n return [];\n }\n\n return [{ kind: \"text\", value: String(literal.value) }];\n }\n\n if (child.type === \"ArrayExpression\") {\n const children: JsxNodeIr[] = [];\n\n for (const element of readArray(child.elements)) {\n const elementObject = readObject(element);\n\n if (elementObject.type === \"SpreadElement\") {\n return undefined;\n }\n\n const lowered = lowerCreateElementChild(code, unwrapOxcParentheses(elementObject), scope);\n\n if (lowered === undefined) {\n return undefined;\n }\n\n children.push(...lowered);\n }\n\n return children;\n }\n\n if (child.type === \"CallExpression\") {\n const callee = readObject(child.callee);\n\n if (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n isActiveCreateElementName(scope, callee.name)\n ) {\n const lowered = lowerCreateElementCall(code, child, scope);\n return lowered === undefined ? undefined : [lowered];\n }\n\n const list = lowerCreateElementListCall(code, child, scope);\n\n if (list !== undefined) {\n return [list];\n }\n }\n\n // Provably-string expressions escape directly (and stay batchable); the\n // interpreter would emit the same escaped bytes for them.\n if (isProvablyStringExpression(child, scope)) {\n return [{ kind: \"expr\", code: readSource(code, child) }];\n }\n\n // Unknown expressions stay dynamic: the runtime helper escapes primitives\n // and falls back to the interpreter for element values, so children that\n // evaluate to react nodes keep rendering instead of stringifying.\n return [{ kind: \"expr\", code: readSource(code, child), renderMode: \"compat-child\" }];\n}\n\nfunction isProvablyStringExpression(\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): boolean {\n if (expression.type === \"TemplateLiteral\") {\n return true;\n }\n\n if (expression.type === \"CallExpression\" && expression.optional !== true) {\n const callee = readObject(expression.callee);\n\n return (\n callee.type === \"Identifier\" &&\n callee.name === \"String\" &&\n !scope.shadowed.has(\"String\") &&\n readArray(expression.arguments).length === 1 &&\n readObject(readArray(expression.arguments)[0]).type !== \"SpreadElement\"\n );\n }\n\n if (expression.type === \"BinaryExpression\" && expression.operator === \"+\") {\n return (\n isProvablyStringExpression(unwrapOxcParentheses(readObject(expression.left)), scope) ||\n isProvablyStringExpression(unwrapOxcParentheses(readObject(expression.right)), scope)\n );\n }\n\n if (expression.type === \"Literal\") {\n return typeof expression.value === \"string\";\n }\n\n return false;\n}\n\nfunction lowerCreateElementListCall(\n code: string,\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr | undefined {\n if (expression.optional === true) {\n return undefined;\n }\n\n const callee = readObject(expression.callee);\n\n if (\n callee.type !== \"MemberExpression\" ||\n callee.computed === true ||\n callee.optional === true ||\n readObject(callee.property).name !== \"map\"\n ) {\n return undefined;\n }\n\n const args = readArray(expression.arguments);\n\n if (args.length !== 1) {\n return undefined;\n }\n\n const renderer = readObject(args[0]);\n\n if (renderer.type !== \"ArrowFunctionExpression\" || renderer.async === true) {\n return undefined;\n }\n\n const parameters = readArray(renderer.params).map((parameter) => readObject(parameter));\n\n if (parameters.some((parameter) => parameter.type !== \"Identifier\")) {\n return undefined;\n }\n\n const [itemName, indexName, arrayName] = parameters.map((parameter) =>\n typeof parameter.name === \"string\" ? parameter.name : undefined,\n );\n\n if (itemName === undefined) {\n return undefined;\n }\n\n const rendererScope: CompatCreateElementScope = {\n names: scope.names,\n shadowed: new Set([\n ...scope.shadowed,\n ...[itemName, indexName, arrayName].filter((name): name is string => name !== undefined),\n ]),\n };\n const body = unwrapOxcParentheses(readObject(renderer.body));\n\n if (body.type === \"BlockStatement\") {\n return undefined;\n }\n\n const rendered = lowerCreateElementCall(code, body, rendererScope);\n\n if (rendered === undefined || rendered.kind !== \"element\") {\n return undefined;\n }\n\n return {\n kind: \"list\",\n itemsCode: readSource(code, readObject(callee.object)),\n itemName,\n ...(indexName === undefined ? {} : { indexName }),\n ...(arrayName === undefined ? {} : { arrayName }),\n ...(rendered.keyCode === undefined ? {} : { keyCode: rendered.keyCode }),\n children: [rendered],\n };\n}\n\n// Detection-side predicate: a direct `return createElement(...)` (or arrow\n// implicit body) that the converter can fully lower. Detection and lowering\n// share lowerCreateElementCall so they can never disagree.\nexport function hasLowerableCompatCreateElementReturn(\n code: string,\n functionLike: Record<string, unknown>,\n names: ReadonlySet<string>,\n): boolean {\n if (names.size === 0) {\n return false;\n }\n\n const shadowed = collectFunctionShadowedNames(functionLike, names);\n const scope: CompatCreateElementScope = { names, shadowed };\n const body = unwrapOxcParentheses(readObject(functionLike.body));\n\n if (body.type !== \"BlockStatement\") {\n return lowerCreateElementCall(code, body, scope) !== undefined;\n }\n\n for (const statement of readArray(body.body)) {\n const statementObject = readObject(statement);\n\n if (statementObject.type !== \"ReturnStatement\") {\n continue;\n }\n\n const argument = unwrapOxcParentheses(readObject(statementObject.argument));\n\n return lowerCreateElementCall(code, argument, scope) !== undefined;\n }\n\n return false;\n}\n\nexport function collectFunctionShadowedNames(\n functionLike: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Set<string> {\n const shadowed = new Set<string>();\n\n for (const parameter of readArray(functionLike.params)) {\n const parameterObject = readObject(parameter);\n\n if (parameterObject.type === \"Identifier\" && typeof parameterObject.name === \"string\") {\n if (names.has(parameterObject.name)) {\n shadowed.add(parameterObject.name);\n }\n continue;\n }\n\n // Destructured parameters could shadow anything; treat every tracked\n // name as shadowed rather than analyzing the pattern.\n for (const name of names) {\n shadowed.add(name);\n }\n }\n\n const body = readObject(functionLike.body);\n\n if (body.type !== \"BlockStatement\") {\n return shadowed;\n }\n\n for (const statement of readArray(body.body)) {\n const statementObject = readObject(statement);\n\n if (statementObject.type === \"VariableDeclaration\") {\n for (const declarator of readArray(statementObject.declarations)) {\n const id = readObject(readObject(declarator).id);\n\n if (id.type === \"Identifier\" && typeof id.name === \"string\" && names.has(id.name)) {\n shadowed.add(id.name);\n }\n }\n }\n\n if (\n statementObject.type === \"FunctionDeclaration\" &&\n typeof readObject(statementObject.id).name === \"string\" &&\n names.has(readObject(statementObject.id).name as string)\n ) {\n shadowed.add(readObject(statementObject.id).name as string);\n }\n }\n\n return shadowed;\n}\n"]}
1
+ {"version":3,"file":"oxc-compat-create-element.js","sourceRoot":"","sources":["../src/oxc-compat-create-element.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AttributeIr, JsxNodeIr } from \"./ir.js\";\nimport { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\n\n// Lowers statically analyzable react-compat createElement() call trees into\n// the element IR so they compile through the server string pipeline instead\n// of being interpreted per request. Any unsupported shape anywhere in a tree\n// bails the WHOLE tree out (callers keep the source verbatim) so the\n// interpreter semantics never get half-applied.\n\nconst COMPAT_CREATE_ELEMENT_SOURCES = new Set([\"react\", \"@reckona/mreact-compat\"]);\nconst COMPAT_RENDER_TO_STRING_SOURCES = new Set([\"@reckona/mreact-compat\"]);\n\nexport function collectCompatCreateElementNames(program: unknown): Set<string> {\n const names = new Set<string>();\n\n for (const statement of readArray(readObject(program).body)) {\n const declaration = readObject(statement);\n\n if (declaration.type !== \"ImportDeclaration\") {\n continue;\n }\n\n const source = readObject(declaration.source);\n\n if (typeof source.value !== \"string\" || !COMPAT_CREATE_ELEMENT_SOURCES.has(source.value)) {\n continue;\n }\n\n for (const specifier of readArray(declaration.specifiers)) {\n const specifierObject = readObject(specifier);\n\n if (specifierObject.type !== \"ImportSpecifier\") {\n continue;\n }\n\n const imported = readObject(specifierObject.imported);\n const local = readObject(specifierObject.local);\n\n if (imported.name === \"createElement\" && typeof local.name === \"string\") {\n names.add(local.name);\n }\n }\n }\n\n return names;\n}\n\nexport function collectCompatRenderToStringNames(program: unknown): Set<string> {\n const names = new Set<string>();\n\n for (const statement of readArray(readObject(program).body)) {\n const declaration = readObject(statement);\n\n if (declaration.type !== \"ImportDeclaration\") {\n continue;\n }\n\n const source = readObject(declaration.source);\n\n if (typeof source.value !== \"string\" || !COMPAT_RENDER_TO_STRING_SOURCES.has(source.value)) {\n continue;\n }\n\n for (const specifier of readArray(declaration.specifiers)) {\n const specifierObject = readObject(specifier);\n\n if (specifierObject.type !== \"ImportSpecifier\") {\n continue;\n }\n\n const imported = readObject(specifierObject.imported);\n const local = readObject(specifierObject.local);\n\n if (imported.name === \"renderToString\" && typeof local.name === \"string\") {\n names.add(local.name);\n }\n }\n }\n\n return names;\n}\n\n// Mirrors packages/react-compat/src/server-render.ts attribute serialization\n// for compile-time-known prop values. Keep these tables in sync with the\n// interpreter; parity tests compare emitted bytes against renderToString.\nconst COMPAT_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 rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nconst COMPAT_BOOLEANISH_STRING_ATTRIBUTES = new Set([\n \"contenteditable\",\n \"draggable\",\n \"spellcheck\",\n]);\n\n// URL-bearing attributes always emit through the dynamic path so the runtime\n// scheme guard applies; static literal lowering must not bypass it.\nconst URL_ATTRIBUTE_NAMES = new Set([\n \"action\",\n \"formaction\",\n \"href\",\n \"src\",\n \"srcset\",\n \"xlink:href\",\n]);\n\nconst VALID_ATTRIBUTE_NAME = /^[A-Za-z_][\\w.\\-:]*$/;\n\ninterface CompatCreateElementScope {\n names: ReadonlySet<string>;\n shadowed: ReadonlySet<string>;\n}\n\nfunction isActiveCreateElementName(scope: CompatCreateElementScope, name: string): boolean {\n return scope.names.has(name) && !scope.shadowed.has(name);\n}\n\nfunction isEventHandlerPropName(name: string): boolean {\n return (\n name.length > 1 &&\n (name.charCodeAt(0) | 32) === 111 &&\n (name.charCodeAt(1) | 32) === 110\n );\n}\n\nfunction isBooleanishStringAttributeName(attributeName: string): boolean {\n const lowerCased = attributeName.toLowerCase();\n return lowerCased.startsWith(\"aria-\") || COMPAT_BOOLEANISH_STRING_ATTRIBUTES.has(lowerCased);\n}\n\nfunction isDataAttributeName(attributeName: string): boolean {\n return attributeName.toLowerCase().startsWith(\"data-\");\n}\n\nfunction readStaticPropertyKey(property: Record<string, unknown>): string | undefined {\n if (property.computed === true) {\n return undefined;\n }\n\n const key = readObject(property.key);\n\n if (key.type === \"Identifier\" && typeof key.name === \"string\") {\n return key.name;\n }\n\n if (key.type === \"Literal\" && typeof key.value === \"string\") {\n return key.value;\n }\n\n return undefined;\n}\n\ntype StaticLiteral =\n | { kind: \"value\"; value: string | number | boolean | null }\n | { kind: \"undefined\" };\n\nfunction readStaticLiteral(expression: Record<string, unknown>): StaticLiteral | undefined {\n if (expression.type === \"Literal\") {\n const value = expression.value;\n\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return { kind: \"value\", value };\n }\n\n return undefined;\n }\n\n if (expression.type === \"Identifier\" && expression.name === \"undefined\") {\n return { kind: \"undefined\" };\n }\n\n if (expression.type === \"TemplateLiteral\") {\n const expressions = readArray(expression.expressions);\n const quasis = readArray(expression.quasis);\n\n if (expressions.length === 0 && quasis.length === 1) {\n const cooked = readObject(readObject(quasis[0]).value).cooked;\n\n if (typeof cooked === \"string\") {\n return { kind: \"value\", value: cooked };\n }\n }\n }\n\n return undefined;\n}\n\ninterface LoweredProps {\n attributes: AttributeIr[];\n keyCode?: string;\n childrenProp?: Record<string, unknown>;\n}\n\nfunction lowerCreateElementProps(\n code: string,\n propsArgument: Record<string, unknown> | undefined,\n): LoweredProps | undefined {\n if (\n propsArgument === undefined ||\n (propsArgument.type === \"Literal\" && propsArgument.value === null) ||\n (propsArgument.type === \"Identifier\" && propsArgument.name === \"undefined\")\n ) {\n return { attributes: [] };\n }\n\n if (propsArgument.type !== \"ObjectExpression\") {\n return undefined;\n }\n\n const attributes: AttributeIr[] = [];\n let keyCode: string | undefined;\n let childrenProp: Record<string, unknown> | undefined;\n\n for (const property of readArray(propsArgument.properties)) {\n const propertyObject = readObject(property);\n\n if (\n propertyObject.type !== \"Property\" ||\n propertyObject.kind !== \"init\" ||\n propertyObject.method === true ||\n propertyObject.shorthand === true\n ) {\n return undefined;\n }\n\n const name = readStaticPropertyKey(propertyObject);\n\n if (name === undefined) {\n return undefined;\n }\n\n const value = unwrapOxcParentheses(readObject(propertyObject.value));\n\n if (name === \"key\") {\n keyCode = readSource(code, value);\n continue;\n }\n\n if (name === \"ref\" || isEventHandlerPropName(name)) {\n continue;\n }\n\n if (name === \"children\") {\n childrenProp = value;\n continue;\n }\n\n if (name === \"dangerouslySetInnerHTML\" || name === \"suppressHydrationWarning\") {\n return undefined;\n }\n\n if (name === \"style\") {\n const styleProp = lowerStyleProp(code, value);\n\n if (styleProp === undefined) {\n return undefined;\n }\n\n if (styleProp.attribute !== undefined) {\n attributes.push(styleProp.attribute);\n }\n continue;\n }\n\n const attributeName = COMPAT_HTML_ATTRIBUTE_ALIASES[name] ?? name;\n\n if (!VALID_ATTRIBUTE_NAME.test(attributeName) || isEventHandlerPropName(attributeName)) {\n // The interpreter drops these at runtime; keeping them out of the\n // compiled output matches its bytes.\n continue;\n }\n\n const literal = readStaticLiteral(value);\n\n if (literal === undefined || URL_ATTRIBUTE_NAMES.has(attributeName.toLowerCase())) {\n attributes.push({\n kind: \"dynamic-attr\",\n name: attributeName,\n code: readSource(code, value),\n serialization: \"compat\",\n });\n continue;\n }\n\n const staticAttribute = serializeStaticCompatAttribute(attributeName, literal);\n\n if (staticAttribute !== undefined) {\n attributes.push(staticAttribute);\n }\n }\n\n return {\n attributes,\n ...(keyCode === undefined ? {} : { keyCode }),\n ...(childrenProp === undefined ? {} : { childrenProp }),\n };\n}\n\nfunction serializeStaticCompatAttribute(\n attributeName: string,\n literal: StaticLiteral,\n): AttributeIr | undefined {\n if (literal.kind === \"undefined\" || literal.value === null) {\n return undefined;\n }\n\n const value = literal.value;\n\n if (typeof value === \"boolean\") {\n if (isBooleanishStringAttributeName(attributeName) || isDataAttributeName(attributeName)) {\n return { kind: \"static-attr\", name: attributeName, value: value ? \"true\" : \"false\" };\n }\n\n return value ? { kind: \"static-attr\", name: attributeName, value: \"\" } : undefined;\n }\n\n return { kind: \"static-attr\", name: attributeName, value: String(value) };\n}\n\n// undefined bails the whole tree; { attribute: undefined } drops the prop.\nfunction lowerStyleProp(\n code: string,\n value: Record<string, unknown>,\n): { attribute?: AttributeIr } | undefined {\n if (value.type === \"ObjectExpression\") {\n for (const property of readArray(value.properties)) {\n const propertyObject = readObject(property);\n\n if (\n propertyObject.type !== \"Property\" ||\n propertyObject.kind !== \"init\" ||\n propertyObject.computed === true ||\n propertyObject.method === true ||\n readStaticPropertyKey(propertyObject) === undefined\n ) {\n return undefined;\n }\n }\n\n return {\n attribute: {\n kind: \"dynamic-attr\",\n name: \"style\",\n code: readSource(code, value),\n serialization: \"compat\",\n },\n };\n }\n\n // The interpreter's renderStyleAttribute only serializes objects; string\n // and other primitive style values are dropped, so match those bytes by\n // dropping them at compile time too.\n if (readStaticLiteral(value) !== undefined) {\n return {};\n }\n\n return {\n attribute: {\n kind: \"dynamic-attr\",\n name: \"style\",\n code: readSource(code, value),\n serialization: \"compat\",\n },\n };\n}\n\nexport function analyzeCompatCreateElementRoot(\n code: string,\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr | undefined {\n return lowerCreateElementCall(code, unwrapOxcParentheses(expression), scope);\n}\n\nexport function analyzeCompatCreateElementFunctionRoot(\n code: string,\n functionLike: Record<string, unknown>,\n names: ReadonlySet<string>,\n): JsxNodeIr | undefined {\n if (names.size === 0) {\n return undefined;\n }\n\n const shadowed = collectFunctionShadowedNames(functionLike, names);\n const scope: CompatCreateElementScope = { names, shadowed };\n const body = unwrapOxcParentheses(readObject(functionLike.body));\n\n if (body.type !== \"BlockStatement\") {\n return lowerCreateElementCall(code, body, scope);\n }\n\n for (const statement of readArray(body.body)) {\n const statementObject = readObject(statement);\n\n if (statementObject.type !== \"ReturnStatement\") {\n continue;\n }\n\n return lowerCreateElementCall(\n code,\n unwrapOxcParentheses(readObject(statementObject.argument)),\n scope,\n );\n }\n\n return undefined;\n}\n\nfunction lowerCreateElementCall(\n code: string,\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr | undefined {\n if (expression.type !== \"CallExpression\" || expression.optional === true) {\n return undefined;\n }\n\n const callee = readObject(expression.callee);\n\n if (\n callee.type !== \"Identifier\" ||\n typeof callee.name !== \"string\" ||\n !isActiveCreateElementName(scope, callee.name)\n ) {\n return undefined;\n }\n\n const args = readArray(expression.arguments);\n\n if (args.length === 0) {\n return undefined;\n }\n\n for (const argument of args) {\n if (readObject(argument).type === \"SpreadElement\") {\n return undefined;\n }\n }\n\n const tagArgument = unwrapOxcParentheses(readObject(args[0]));\n\n if (tagArgument.type !== \"Literal\" || typeof tagArgument.value !== \"string\") {\n return undefined;\n }\n\n const props = lowerCreateElementProps(\n code,\n args.length > 1 ? unwrapOxcParentheses(readObject(args[1])) : undefined,\n );\n\n if (props === undefined) {\n return undefined;\n }\n\n const childArguments = args.slice(2).map((argument) => unwrapOxcParentheses(readObject(argument)));\n const childSources =\n childArguments.length > 0\n ? childArguments\n : props.childrenProp === undefined\n ? []\n : [props.childrenProp];\n const children: JsxNodeIr[] = [];\n\n for (const child of childSources) {\n const lowered = lowerCreateElementChild(code, child, scope);\n\n if (lowered === undefined) {\n return undefined;\n }\n\n children.push(...lowered);\n }\n\n return {\n kind: \"element\",\n tagName: tagArgument.value,\n ...(props.keyCode === undefined ? {} : { keyCode: props.keyCode }),\n attributes: props.attributes,\n children,\n };\n}\n\nfunction lowerCreateElementChild(\n code: string,\n child: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr[] | undefined {\n const literal = readStaticLiteral(child);\n\n if (literal !== undefined) {\n if (literal.kind === \"undefined\" || literal.value === null || typeof literal.value === \"boolean\") {\n return [];\n }\n\n return [{ kind: \"text\", value: String(literal.value) }];\n }\n\n if (child.type === \"ArrayExpression\") {\n const children: JsxNodeIr[] = [];\n\n for (const element of readArray(child.elements)) {\n const elementObject = readObject(element);\n\n if (elementObject.type === \"SpreadElement\") {\n return undefined;\n }\n\n const lowered = lowerCreateElementChild(code, unwrapOxcParentheses(elementObject), scope);\n\n if (lowered === undefined) {\n return undefined;\n }\n\n children.push(...lowered);\n }\n\n return children;\n }\n\n if (child.type === \"CallExpression\") {\n const callee = readObject(child.callee);\n\n if (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n isActiveCreateElementName(scope, callee.name)\n ) {\n const lowered = lowerCreateElementCall(code, child, scope);\n return lowered === undefined ? undefined : [lowered];\n }\n\n const list = lowerCreateElementListCall(code, child, scope);\n\n if (list !== undefined) {\n return [list];\n }\n }\n\n if (child.type === \"ConditionalExpression\") {\n const whenTrue = lowerCreateElementDynamicBranch(code, readObject(child.consequent), scope);\n const whenFalse = lowerCreateElementDynamicBranch(code, readObject(child.alternate), scope);\n\n if (whenTrue !== undefined && whenFalse !== undefined) {\n return [\n {\n kind: \"conditional\",\n conditionCode: readSource(code, readObject(child.test)),\n whenTrue,\n whenFalse,\n },\n ];\n }\n }\n\n if (child.type === \"LogicalExpression\" && child.operator === \"&&\") {\n const whenTrue = lowerCreateElementDynamicBranch(code, readObject(child.right), scope);\n\n if (whenTrue !== undefined) {\n const conditionValueName = logicalConditionValueName(readObject(child.left));\n\n return [\n {\n kind: \"conditional\",\n conditionCode: readSource(code, readObject(child.left)),\n conditionValueName,\n whenTrue,\n whenFalse: [\n {\n kind: \"expr\",\n code: renderableFalsyConditionValueCode(conditionValueName),\n },\n ],\n },\n ];\n }\n }\n\n // Provably-string expressions escape directly (and stay batchable); the\n // interpreter would emit the same escaped bytes for them.\n if (isProvablyStringExpression(child, scope)) {\n return [{ kind: \"expr\", code: readSource(code, child) }];\n }\n\n // Unknown expressions stay dynamic: the runtime helper escapes primitives\n // and falls back to the interpreter for element values, so children that\n // evaluate to react nodes keep rendering instead of stringifying.\n return [{ kind: \"expr\", code: readSource(code, child), renderMode: \"compat-child\" }];\n}\n\nfunction lowerCreateElementDynamicBranch(\n code: string,\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr[] | undefined {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (unwrapped.type === \"Literal\" && (unwrapped.value === null || unwrapped.value === false)) {\n return [];\n }\n\n return lowerCreateElementChild(code, unwrapped, scope);\n}\n\nfunction logicalConditionValueName(expression: Record<string, unknown>): string {\n return `__mreactLogical_${typeof expression.start === \"number\" ? expression.start : \"value\"}`;\n}\n\nfunction renderableFalsyConditionValueCode(name: string): string {\n return `((typeof ${name} === \"number\" || typeof ${name} === \"bigint\") ? ${name} : null)`;\n}\n\nfunction isProvablyStringExpression(\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): boolean {\n if (expression.type === \"TemplateLiteral\") {\n return true;\n }\n\n if (expression.type === \"CallExpression\" && expression.optional !== true) {\n const callee = readObject(expression.callee);\n\n return (\n callee.type === \"Identifier\" &&\n callee.name === \"String\" &&\n !scope.shadowed.has(\"String\") &&\n readArray(expression.arguments).length === 1 &&\n readObject(readArray(expression.arguments)[0]).type !== \"SpreadElement\"\n );\n }\n\n if (expression.type === \"BinaryExpression\" && expression.operator === \"+\") {\n return (\n isProvablyStringExpression(unwrapOxcParentheses(readObject(expression.left)), scope) ||\n isProvablyStringExpression(unwrapOxcParentheses(readObject(expression.right)), scope)\n );\n }\n\n if (expression.type === \"Literal\") {\n return typeof expression.value === \"string\";\n }\n\n return false;\n}\n\nfunction lowerCreateElementListCall(\n code: string,\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr | undefined {\n if (expression.optional === true) {\n return undefined;\n }\n\n const callee = readObject(expression.callee);\n\n if (\n callee.type !== \"MemberExpression\" ||\n callee.computed === true ||\n callee.optional === true ||\n readObject(callee.property).name !== \"map\"\n ) {\n return undefined;\n }\n\n const args = readArray(expression.arguments);\n\n if (args.length !== 1) {\n return undefined;\n }\n\n const renderer = readObject(args[0]);\n\n if (renderer.type !== \"ArrowFunctionExpression\" || renderer.async === true) {\n return undefined;\n }\n\n const parameters = readArray(renderer.params).map((parameter) => readObject(parameter));\n\n if (parameters.some((parameter) => parameter.type !== \"Identifier\")) {\n return undefined;\n }\n\n const [itemName, indexName, arrayName] = parameters.map((parameter) =>\n typeof parameter.name === \"string\" ? parameter.name : undefined,\n );\n\n if (itemName === undefined) {\n return undefined;\n }\n\n const rendererScope: CompatCreateElementScope = {\n names: scope.names,\n shadowed: new Set([\n ...scope.shadowed,\n ...[itemName, indexName, arrayName].filter((name): name is string => name !== undefined),\n ]),\n };\n const body = unwrapOxcParentheses(readObject(renderer.body));\n\n if (body.type === \"BlockStatement\") {\n return undefined;\n }\n\n const rendered = lowerCreateElementCall(code, body, rendererScope);\n\n if (rendered === undefined || rendered.kind !== \"element\") {\n return undefined;\n }\n\n return {\n kind: \"list\",\n itemsCode: readSource(code, readObject(callee.object)),\n itemName,\n ...(indexName === undefined ? {} : { indexName }),\n ...(arrayName === undefined ? {} : { arrayName }),\n ...(rendered.keyCode === undefined ? {} : { keyCode: rendered.keyCode }),\n children: [rendered],\n };\n}\n\n// Detection-side predicate: a direct `return createElement(...)` (or arrow\n// implicit body) that the converter can fully lower. Detection and lowering\n// share lowerCreateElementCall so they can never disagree.\nexport function hasLowerableCompatCreateElementReturn(\n code: string,\n functionLike: Record<string, unknown>,\n names: ReadonlySet<string>,\n): boolean {\n return analyzeCompatCreateElementFunctionRoot(code, functionLike, names) !== undefined;\n}\n\nexport function collectFunctionShadowedNames(\n functionLike: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Set<string> {\n const shadowed = new Set<string>();\n\n for (const parameter of readArray(functionLike.params)) {\n const parameterObject = readObject(parameter);\n\n if (parameterObject.type === \"Identifier\" && typeof parameterObject.name === \"string\") {\n if (names.has(parameterObject.name)) {\n shadowed.add(parameterObject.name);\n }\n continue;\n }\n\n // Destructured parameters could shadow anything; treat every tracked\n // name as shadowed rather than analyzing the pattern.\n for (const name of names) {\n shadowed.add(name);\n }\n }\n\n const body = readObject(functionLike.body);\n\n if (body.type !== \"BlockStatement\") {\n return shadowed;\n }\n\n for (const statement of readArray(body.body)) {\n const statementObject = readObject(statement);\n\n if (statementObject.type === \"VariableDeclaration\") {\n for (const declarator of readArray(statementObject.declarations)) {\n const id = readObject(readObject(declarator).id);\n\n if (id.type === \"Identifier\" && typeof id.name === \"string\" && names.has(id.name)) {\n shadowed.add(id.name);\n }\n }\n }\n\n if (\n statementObject.type === \"FunctionDeclaration\" &&\n typeof readObject(statementObject.id).name === \"string\" &&\n names.has(readObject(statementObject.id).name as string)\n ) {\n shadowed.add(readObject(statementObject.id).name as string);\n }\n }\n\n return shadowed;\n}\n"]}
package/dist/oxc.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"oxc.d.ts","sourceRoot":"","sources":["../src/oxc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAkC,QAAQ,EAAE,MAAM,SAAS,CAAC;AA0FxE,yFAAyF;AACzF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE;QACH,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,EAAE,CAAC,EAAE,QAAQ,CAAC;QACd,sBAAsB,EAAE,OAAO,CAAC;QAChC,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AA+CD,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,eAAe,CA6BzE;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAKzE;AAED,sEAAsE;AACtE,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,GACjD,iBAAiB,CAWnB"}
1
+ {"version":3,"file":"oxc.d.ts","sourceRoot":"","sources":["../src/oxc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAkC,QAAQ,EAAE,MAAM,SAAS,CAAC;AA4FxE,yFAAyF;AACzF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE;QACH,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,EAAE,CAAC,EAAE,QAAQ,CAAC;QACd,sBAAsB,EAAE,OAAO,CAAC;QAChC,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AA+CD,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,eAAe,CA6BzE;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAKzE;AAED,sEAAsE;AACtE,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,GACjD,iBAAiB,CAWnB"}