@reckona/mreact-compiler 0.0.96 → 0.0.98

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 (57) hide show
  1. package/dist/diagnostics.d.ts +1 -0
  2. package/dist/diagnostics.d.ts.map +1 -1
  3. package/dist/diagnostics.js +8 -0
  4. package/dist/diagnostics.js.map +1 -1
  5. package/dist/emit-client.js +14 -9
  6. package/dist/emit-client.js.map +1 -1
  7. package/dist/emit-compat.js +5 -1
  8. package/dist/emit-compat.js.map +1 -1
  9. package/dist/emit-server-stream.d.ts.map +1 -1
  10. package/dist/emit-server-stream.js +70 -6
  11. package/dist/emit-server-stream.js.map +1 -1
  12. package/dist/emit-server.d.ts.map +1 -1
  13. package/dist/emit-server.js +69 -13
  14. package/dist/emit-server.js.map +1 -1
  15. package/dist/internal.d.ts.map +1 -1
  16. package/dist/internal.js +7 -4
  17. package/dist/internal.js.map +1 -1
  18. package/dist/ir.d.ts +1 -0
  19. package/dist/ir.d.ts.map +1 -1
  20. package/dist/ir.js.map +1 -1
  21. package/dist/oxc-child-analysis.d.ts.map +1 -1
  22. package/dist/oxc-child-analysis.js +44 -10
  23. package/dist/oxc-child-analysis.js.map +1 -1
  24. package/dist/oxc-component-detection.d.ts +5 -2
  25. package/dist/oxc-component-detection.d.ts.map +1 -1
  26. package/dist/oxc-component-detection.js +80 -3
  27. package/dist/oxc-component-detection.js.map +1 -1
  28. package/dist/oxc-component-props.d.ts +1 -1
  29. package/dist/oxc-component-props.d.ts.map +1 -1
  30. package/dist/oxc-component-props.js +1 -1
  31. package/dist/oxc-component-props.js.map +1 -1
  32. package/dist/oxc-component-references.d.ts.map +1 -1
  33. package/dist/oxc-component-references.js +247 -12
  34. package/dist/oxc-component-references.js.map +1 -1
  35. package/dist/oxc-runtime-emit.d.ts.map +1 -1
  36. package/dist/oxc-runtime-emit.js +10 -2
  37. package/dist/oxc-runtime-emit.js.map +1 -1
  38. package/dist/oxc.d.ts.map +1 -1
  39. package/dist/oxc.js +109 -20
  40. package/dist/oxc.js.map +1 -1
  41. package/dist/transform.js +29 -11
  42. package/dist/transform.js.map +1 -1
  43. package/package.json +2 -2
  44. package/src/diagnostics.ts +10 -0
  45. package/src/emit-client.ts +20 -10
  46. package/src/emit-compat.ts +6 -1
  47. package/src/emit-server-stream.ts +96 -6
  48. package/src/emit-server.ts +93 -29
  49. package/src/internal.ts +9 -4
  50. package/src/ir.ts +1 -0
  51. package/src/oxc-child-analysis.ts +66 -21
  52. package/src/oxc-component-detection.ts +145 -2
  53. package/src/oxc-component-props.ts +2 -1
  54. package/src/oxc-component-references.ts +366 -11
  55. package/src/oxc-runtime-emit.ts +12 -2
  56. package/src/oxc.ts +167 -5
  57. package/src/transform.ts +42 -10
@@ -1 +1 @@
1
- {"version":3,"file":"oxc-component-detection.js","sourceRoot":"","sources":["../src/oxc-component-detection.ts"],"names":[],"mappings":"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","sourcesContent":["import { readArray, readObject, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\nimport type { AnalyzeModuleOptions } from \"./types.js\";\n\nexport function collectOxcExportedFunctionNames(program: unknown): string[] {\n return readArray(readObject(program).body).flatMap((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n const id = readObject(declaration?.id);\n return [typeof id.name === \"string\" ? id.name : \"DefaultExport\"];\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return [];\n }\n\n const declaration = readObject(object.declaration);\n\n if (declaration.type === \"FunctionDeclaration\") {\n const id = readObject(declaration.id);\n return typeof id.name === \"string\" ? [id.name] : [];\n }\n\n const variableComponent = readOxcVariableComponentDeclaration(declaration);\n return variableComponent === undefined ? [] : [variableComponent.name];\n });\n}\n\nexport function collectOxcPlainComponentNames(program: unknown): string[] {\n return readArray(readObject(program).body).flatMap((statement) => {\n const component = readOxcPlainComponent(statement);\n return component === undefined ? [] : [component.name];\n });\n}\n\nexport function collectOxcExportedComponents(program: unknown): string[] {\n const body = readArray(readObject(program).body);\n const components: string[] = [];\n\n for (const statement of body) {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n\n if (declaration !== undefined && hasOxcFunctionLikeComponentReturn(declaration)) {\n components.push(\"default\");\n }\n continue;\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n continue;\n }\n\n const declaration = readObject(object.declaration);\n\n if (declaration.type === \"FunctionDeclaration\" && hasComponentReturn(declaration.body)) {\n const id = readObject(declaration.id);\n\n if (typeof id.name === \"string\") {\n components.push(id.name);\n }\n continue;\n }\n\n const variableComponent = readOxcVariableComponentDeclaration(declaration);\n\n if (variableComponent !== undefined) {\n components.push(variableComponent.name);\n }\n }\n\n return components;\n}\n\nexport function collectOxcAsyncComponentNames(program: unknown): Set<string> {\n const names = new Set<string>();\n const body = readArray(readObject(program).body);\n\n for (const statement of body) {\n const object = readObject(statement);\n const declaration =\n object.type === \"ExportDefaultDeclaration\" || object.type === \"ExportNamedDeclaration\"\n ? readObject(object.declaration)\n : object;\n const functionLike =\n declaration.type === \"VariableDeclaration\"\n ? readOxcVariableComponentDeclaration(declaration)?.initializer\n : unwrapOxcComponentFunctionLikeInitializer(declaration);\n\n if (\n functionLike === undefined ||\n functionLike.async !== true ||\n !hasOxcFunctionLikeComponentReturn(functionLike)\n ) {\n continue;\n }\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const id = readObject(functionLike.id);\n names.add(typeof id.name === \"string\" ? id.name : \"DefaultExport\");\n continue;\n }\n\n const id = readObject(functionLike.id);\n\n if (typeof id.name === \"string\") {\n names.add(id.name);\n }\n }\n\n return names;\n}\n\nexport function isOxcExportedJsxComponent(statement: unknown): boolean {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n return declaration !== undefined && hasOxcFunctionLikeComponentReturn(declaration);\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n return (\n (declaration.type === \"FunctionDeclaration\" && hasComponentReturn(declaration.body)) ||\n readOxcVariableComponentDeclaration(declaration) !== undefined\n );\n}\n\nexport function isOxcJsxComponentStatement(statement: unknown): boolean {\n return isOxcExportedJsxComponent(statement) || readOxcPlainComponent(statement) !== undefined;\n}\n\nexport function isOxcExportedFunctionLike(statement: unknown): boolean {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n return unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration)) !== undefined;\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n\n return (\n declaration.type === \"FunctionDeclaration\" ||\n unwrapOxcComponentFunctionLikeInitializer(declaration) !== undefined\n );\n}\n\nexport function isOxcUnsupportedExportedFunction(\n statement: unknown,\n options?: AnalyzeModuleOptions,\n): boolean {\n if (options?.compatReactNodeReturn === true) {\n return false;\n }\n\n const object = readObject(statement);\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n const id = readObject(declaration.id);\n\n return (\n declaration.type === \"FunctionDeclaration\" &&\n typeof id.name === \"string\" &&\n /^[A-Z]/.test(id.name) &&\n !hasComponentReturn(declaration.body) &&\n !hasOnlyNullReturns(declaration.body)\n );\n}\n\nexport function readOxcVariableComponentDeclaration(\n declaration: Record<string, unknown>,\n): { name: string; initializer: Record<string, unknown> } | undefined {\n if (declaration.type !== \"VariableDeclaration\") {\n return undefined;\n }\n\n for (const declarator of readArray(declaration.declarations)) {\n const object = readObject(declarator);\n const id = readObject(object.id);\n\n if (typeof id.name !== \"string\" || !/^[A-Z]/.test(id.name)) {\n continue;\n }\n\n const initializer = unwrapOxcComponentFunctionLikeInitializer(readObject(object.init));\n\n if (initializer !== undefined && hasOxcFunctionLikeComponentReturn(initializer)) {\n return { name: id.name, initializer };\n }\n }\n\n return undefined;\n}\n\nexport function readOxcPlainComponent(\n statement: unknown,\n): { name: string; initializer: Record<string, unknown> } | undefined {\n const object = readObject(statement);\n\n if (object.type === \"FunctionDeclaration\" && hasComponentReturn(object.body)) {\n const id = readObject(object.id);\n return typeof id.name === \"string\" ? { name: id.name, initializer: object } : undefined;\n }\n\n return readOxcVariableComponentDeclaration(object);\n}\n\nexport function unwrapOxcComponentFunctionLikeInitializer(\n expression: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (\n unwrapped.type === \"ArrowFunctionExpression\" ||\n unwrapped.type === \"FunctionExpression\" ||\n unwrapped.type === \"FunctionDeclaration\"\n ) {\n return unwrapped;\n }\n\n if (unwrapped.type !== \"CallExpression\") {\n return undefined;\n }\n\n const callee = readObject(unwrapped.callee);\n\n if (callee.type !== \"Identifier\" || (callee.name !== \"memo\" && callee.name !== \"forwardRef\")) {\n return undefined;\n }\n\n const firstArg = readObject(readArray(unwrapped.arguments)[0]);\n\n return unwrapOxcComponentFunctionLikeInitializer(firstArg);\n}\n\nexport function hasOxcFunctionLikeJsxReturn(functionLike: Record<string, unknown>): boolean {\n const body = unwrapOxcParentheses(readObject(functionLike.body));\n\n if (isOxcJsxReturnExpression(body)) {\n return true;\n }\n\n return hasJsxReturn(body);\n}\n\nexport function hasOxcFunctionLikeComponentReturn(functionLike: Record<string, unknown>): boolean {\n const body = unwrapOxcParentheses(readObject(functionLike.body));\n\n if (hasOxcFunctionLikeJsxReturn(functionLike)) {\n return true;\n }\n\n if (isOxcComponentCallExpression(body)) {\n return true;\n }\n\n return hasComponentCallReturn(body);\n}\n\nexport function hasJsxReturn(body: unknown): boolean {\n return readArray(readObject(body).body).some((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ReturnStatement\") {\n return isOxcJsxReturnExpression(readObject(object.argument));\n }\n\n return hasNestedJsxReturn(object);\n });\n}\n\nexport function hasComponentReturn(body: unknown): boolean {\n return hasJsxReturn(body) || hasComponentCallReturn(body);\n}\n\nexport function hasOnlyNullReturns(body: unknown): boolean {\n const returns = collectReturnArguments(readObject(body));\n return returns.length > 0 && returns.every(isNullReturnArgument);\n}\n\nexport function hasComponentCallReturn(body: unknown): boolean {\n return readArray(readObject(body).body).some((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ReturnStatement\") {\n return isOxcComponentCallExpression(unwrapOxcParentheses(readObject(object.argument)));\n }\n\n return hasNestedComponentCallReturn(object);\n });\n}\n\nfunction hasNestedJsxReturn(statement: Record<string, unknown>): boolean {\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).some((switchCase) =>\n readArray(readObject(switchCase).consequent).some((child) => {\n const object = readObject(child);\n return (\n object.type === \"ReturnStatement\" &&\n isOxcJsxReturnExpression(readObject(object.argument))\n );\n }),\n );\n }\n\n if (statement.type === \"IfStatement\") {\n return (\n hasJsxReturn({ body: [statement.consequent] }) ||\n hasJsxReturn({ body: [statement.alternate] })\n );\n }\n\n if (statement.type === \"BlockStatement\") {\n return hasJsxReturn(statement);\n }\n\n return false;\n}\n\nfunction hasNestedComponentCallReturn(statement: Record<string, unknown>): boolean {\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).some((switchCase) =>\n readArray(readObject(switchCase).consequent).some((child) => {\n const object = readObject(child);\n return (\n object.type === \"ReturnStatement\" &&\n isOxcComponentCallExpression(unwrapOxcParentheses(readObject(object.argument)))\n );\n }),\n );\n }\n\n if (statement.type === \"IfStatement\") {\n return (\n hasComponentCallReturn({ body: [statement.consequent] }) ||\n hasComponentCallReturn({ body: [statement.alternate] })\n );\n }\n\n if (statement.type === \"BlockStatement\") {\n return hasComponentCallReturn(statement);\n }\n\n return false;\n}\n\nfunction collectReturnArguments(statement: Record<string, unknown>): Record<string, unknown>[] {\n if (statement.type === \"ReturnStatement\") {\n return [readObject(statement.argument)];\n }\n\n if (statement.type === \"BlockStatement\") {\n return readArray(statement.body).flatMap((child) => collectReturnArguments(readObject(child)));\n }\n\n if (statement.type === \"IfStatement\") {\n return [\n ...collectReturnArguments(readObject(statement.consequent)),\n ...collectReturnArguments(readObject(statement.alternate)),\n ];\n }\n\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).flatMap((switchCase) =>\n readArray(readObject(switchCase).consequent).flatMap((child) =>\n collectReturnArguments(readObject(child)),\n ),\n );\n }\n\n return [];\n}\n\nfunction isNullReturnArgument(argument: Record<string, unknown>): boolean {\n return (\n argument.type === \"NullLiteral\" ||\n (argument.type === \"Literal\" && argument.value === null)\n );\n}\n\nexport function isOxcComponentCallExpression(expression: Record<string, unknown>): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = unwrapOxcParentheses(readObject(expression.callee));\n\n if (callee.type === \"Identifier\") {\n return typeof callee.name === \"string\" && /^[A-Z]/.test(callee.name);\n }\n\n if (callee.type === \"MemberExpression\") {\n const object = readObject(callee.object);\n const property = readObject(callee.property);\n return (\n object.type === \"Identifier\" &&\n typeof object.name === \"string\" &&\n /^[A-Z]/.test(object.name) &&\n property.type === \"Identifier\" &&\n typeof property.name === \"string\" &&\n /^[A-Z]/.test(property.name)\n );\n }\n\n return false;\n}\n\nexport function isJsxRoot(type: unknown): boolean {\n return type === \"JSXElement\" || type === \"JSXFragment\" || type === \"JSXSelfClosingElement\";\n}\n\nfunction isOxcJsxReturnExpression(expression: Record<string, unknown>): boolean {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (isJsxRoot(unwrapped.type)) {\n return true;\n }\n\n if (unwrapped.type === \"LogicalExpression\") {\n return (\n unwrapped.operator === \"&&\" &&\n isOxcJsxReturnBranch(readObject(unwrapped.right))\n );\n }\n\n if (unwrapped.type === \"ConditionalExpression\") {\n return (\n isOxcJsxReturnBranch(readObject(unwrapped.consequent)) &&\n isOxcJsxReturnBranch(readObject(unwrapped.alternate))\n );\n }\n\n return false;\n}\n\nfunction isOxcJsxReturnBranch(expression: Record<string, unknown>): boolean {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (unwrapped.type === \"Literal\" && (unwrapped.value === null || unwrapped.value === false)) {\n return true;\n }\n\n return isOxcJsxReturnExpression(unwrapped);\n}\n"]}
1
+ {"version":3,"file":"oxc-component-detection.js","sourceRoot":"","sources":["../src/oxc-component-detection.ts"],"names":[],"mappings":"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","sourcesContent":["import { readArray, readObject, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\nimport type { AnalyzeModuleOptions } from \"./types.js\";\n\nexport function collectOxcExportedFunctionNames(program: unknown): string[] {\n return readArray(readObject(program).body).flatMap((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n const id = readObject(declaration?.id);\n return [typeof id.name === \"string\" ? id.name : \"DefaultExport\"];\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return [];\n }\n\n const declaration = readObject(object.declaration);\n\n if (declaration.type === \"FunctionDeclaration\") {\n const id = readObject(declaration.id);\n return typeof id.name === \"string\" ? [id.name] : [];\n }\n\n const variableComponent = readOxcVariableComponentDeclaration(declaration);\n return variableComponent === undefined ? [] : [variableComponent.name];\n });\n}\n\nexport function collectOxcPlainComponentNames(program: unknown): string[] {\n return readArray(readObject(program).body).flatMap((statement) => {\n const component = readOxcPlainComponent(statement);\n return component === undefined ? [] : [component.name];\n });\n}\n\nexport function collectOxcLocalJsxReturnFunctionNames(program: unknown): Set<string> {\n const names = new Set<string>();\n\n for (const statement of readArray(readObject(program).body)) {\n const object = readObject(statement);\n\n if (object.type === \"FunctionDeclaration\" && hasOxcFunctionLikeJsxReturn(object)) {\n const id = readObject(object.id);\n if (typeof id.name === \"string\") {\n names.add(id.name);\n }\n continue;\n }\n\n if (object.type !== \"VariableDeclaration\") {\n continue;\n }\n\n for (const declarator of readArray(object.declarations)) {\n const declaratorObject = readObject(declarator);\n const id = readObject(declaratorObject.id);\n const initializer = unwrapOxcComponentFunctionLikeInitializer(\n readObject(declaratorObject.init),\n );\n\n if (\n typeof id.name === \"string\" &&\n initializer !== undefined &&\n hasOxcFunctionLikeJsxReturn(initializer)\n ) {\n names.add(id.name);\n }\n }\n }\n\n return names;\n}\n\nexport function collectOxcExportedComponents(program: unknown): string[] {\n const body = readArray(readObject(program).body);\n const components: string[] = [];\n\n for (const statement of body) {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n\n if (declaration !== undefined && hasOxcFunctionLikeComponentReturn(declaration)) {\n components.push(\"default\");\n }\n continue;\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n continue;\n }\n\n const declaration = readObject(object.declaration);\n\n if (declaration.type === \"FunctionDeclaration\" && hasComponentReturn(declaration.body)) {\n const id = readObject(declaration.id);\n\n if (typeof id.name === \"string\") {\n components.push(id.name);\n }\n continue;\n }\n\n const variableComponent = readOxcVariableComponentDeclaration(declaration);\n\n if (variableComponent !== undefined) {\n components.push(variableComponent.name);\n }\n }\n\n return components;\n}\n\nexport function collectOxcAsyncComponentNames(program: unknown): Set<string> {\n const names = new Set<string>();\n const body = readArray(readObject(program).body);\n\n for (const statement of body) {\n const object = readObject(statement);\n const declaration =\n object.type === \"ExportDefaultDeclaration\" || object.type === \"ExportNamedDeclaration\"\n ? readObject(object.declaration)\n : object;\n const functionLike =\n declaration.type === \"VariableDeclaration\"\n ? readOxcVariableComponentDeclaration(declaration)?.initializer\n : unwrapOxcComponentFunctionLikeInitializer(declaration);\n\n if (\n functionLike === undefined ||\n functionLike.async !== true ||\n !hasOxcFunctionLikeComponentReturn(functionLike)\n ) {\n continue;\n }\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const id = readObject(functionLike.id);\n names.add(typeof id.name === \"string\" ? id.name : \"DefaultExport\");\n continue;\n }\n\n const id = readObject(functionLike.id);\n\n if (typeof id.name === \"string\") {\n names.add(id.name);\n }\n }\n\n return names;\n}\n\nexport function isOxcExportedJsxComponent(statement: unknown): boolean {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n return declaration !== undefined && hasOxcFunctionLikeComponentReturn(declaration);\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n return (\n (declaration.type === \"FunctionDeclaration\" && hasComponentReturn(declaration.body)) ||\n readOxcVariableComponentDeclaration(declaration) !== undefined\n );\n}\n\nexport function isOxcJsxComponentStatement(\n statement: unknown,\n localJsxReturnFunctionNames: ReadonlySet<string> = new Set(),\n): boolean {\n return (\n isOxcExportedJsxComponent(statement) ||\n isOxcExportedFunctionReturningLocalJsxHelper(statement, localJsxReturnFunctionNames) ||\n readOxcPlainComponent(statement) !== undefined\n );\n}\n\nexport function isOxcExportedFunctionLike(statement: unknown): boolean {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n return unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration)) !== undefined;\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n\n return (\n declaration.type === \"FunctionDeclaration\" ||\n unwrapOxcComponentFunctionLikeInitializer(declaration) !== undefined\n );\n}\n\nexport function isOxcUnsupportedExportedFunction(\n statement: unknown,\n options?: AnalyzeModuleOptions,\n localJsxReturnFunctionNames: ReadonlySet<string> = new Set(),\n): boolean {\n if (options?.compatReactNodeReturn === true) {\n return false;\n }\n\n const object = readObject(statement);\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n const id = readObject(declaration.id);\n\n return (\n declaration.type === \"FunctionDeclaration\" &&\n typeof id.name === \"string\" &&\n /^[A-Z]/.test(id.name) &&\n !hasComponentReturn(declaration.body) &&\n !hasLocalJsxHelperCallReturn(declaration.body, localJsxReturnFunctionNames) &&\n !hasOnlyNullReturns(declaration.body)\n );\n}\n\nfunction isOxcExportedFunctionReturningLocalJsxHelper(\n statement: unknown,\n localJsxReturnFunctionNames: ReadonlySet<string>,\n): boolean {\n const object = readObject(statement);\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n\n return (\n declaration.type === \"FunctionDeclaration\" &&\n hasLocalJsxHelperCallReturn(declaration.body, localJsxReturnFunctionNames)\n );\n}\n\nexport function readOxcVariableComponentDeclaration(\n declaration: Record<string, unknown>,\n): { name: string; initializer: Record<string, unknown> } | undefined {\n if (declaration.type !== \"VariableDeclaration\") {\n return undefined;\n }\n\n for (const declarator of readArray(declaration.declarations)) {\n const object = readObject(declarator);\n const id = readObject(object.id);\n\n if (typeof id.name !== \"string\" || !/^[A-Z]/.test(id.name)) {\n continue;\n }\n\n const initializer = unwrapOxcComponentFunctionLikeInitializer(readObject(object.init));\n\n if (initializer !== undefined && hasOxcFunctionLikeComponentReturn(initializer)) {\n return { name: id.name, initializer };\n }\n }\n\n return undefined;\n}\n\nexport function readOxcPlainComponent(\n statement: unknown,\n): { name: string; initializer: Record<string, unknown> } | undefined {\n const object = readObject(statement);\n\n if (object.type === \"FunctionDeclaration\" && hasComponentReturn(object.body)) {\n const id = readObject(object.id);\n return typeof id.name === \"string\" ? { name: id.name, initializer: object } : undefined;\n }\n\n return readOxcVariableComponentDeclaration(object);\n}\n\nexport function unwrapOxcComponentFunctionLikeInitializer(\n expression: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (\n unwrapped.type === \"ArrowFunctionExpression\" ||\n unwrapped.type === \"FunctionExpression\" ||\n unwrapped.type === \"FunctionDeclaration\"\n ) {\n return unwrapped;\n }\n\n if (unwrapped.type !== \"CallExpression\") {\n return undefined;\n }\n\n const callee = readObject(unwrapped.callee);\n\n if (callee.type !== \"Identifier\" || (callee.name !== \"memo\" && callee.name !== \"forwardRef\")) {\n return undefined;\n }\n\n const firstArg = readObject(readArray(unwrapped.arguments)[0]);\n\n return unwrapOxcComponentFunctionLikeInitializer(firstArg);\n}\n\nexport function hasOxcFunctionLikeJsxReturn(functionLike: Record<string, unknown>): boolean {\n const body = unwrapOxcParentheses(readObject(functionLike.body));\n\n if (isOxcJsxReturnExpression(body)) {\n return true;\n }\n\n return hasJsxReturn(body);\n}\n\nexport function hasOxcFunctionLikeComponentReturn(functionLike: Record<string, unknown>): boolean {\n const body = unwrapOxcParentheses(readObject(functionLike.body));\n\n if (hasOxcFunctionLikeJsxReturn(functionLike)) {\n return true;\n }\n\n if (isOxcComponentCallExpression(body)) {\n return true;\n }\n\n return hasComponentCallReturn(body);\n}\n\nexport function hasJsxReturn(body: unknown): boolean {\n return readArray(readObject(body).body).some((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ReturnStatement\") {\n return isOxcJsxReturnExpression(readObject(object.argument));\n }\n\n return hasNestedJsxReturn(object);\n });\n}\n\nexport function hasComponentReturn(body: unknown): boolean {\n return hasJsxReturn(body) || hasComponentCallReturn(body);\n}\n\nexport function hasOnlyNullReturns(body: unknown): boolean {\n const returns = collectReturnArguments(readObject(body));\n return returns.length > 0 && returns.every(isNullReturnArgument);\n}\n\nexport function hasComponentCallReturn(body: unknown): boolean {\n return readArray(readObject(body).body).some((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ReturnStatement\") {\n return isOxcComponentCallExpression(unwrapOxcParentheses(readObject(object.argument)));\n }\n\n return hasNestedComponentCallReturn(object);\n });\n}\n\nexport function hasLocalJsxHelperCallReturn(\n body: unknown,\n localJsxReturnFunctionNames: ReadonlySet<string>,\n): boolean {\n if (localJsxReturnFunctionNames.size === 0) {\n return false;\n }\n\n return readArray(readObject(body).body).some((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ReturnStatement\") {\n return isOxcLocalJsxHelperCallExpression(\n unwrapOxcParentheses(readObject(object.argument)),\n localJsxReturnFunctionNames,\n );\n }\n\n return hasNestedLocalJsxHelperCallReturn(object, localJsxReturnFunctionNames);\n });\n}\n\nexport function isOxcLocalJsxHelperCallExpression(\n expression: Record<string, unknown>,\n localJsxReturnFunctionNames: ReadonlySet<string>,\n): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = unwrapOxcParentheses(readObject(expression.callee));\n\n return (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n localJsxReturnFunctionNames.has(callee.name)\n );\n}\n\nfunction hasNestedJsxReturn(statement: Record<string, unknown>): boolean {\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).some((switchCase) =>\n readArray(readObject(switchCase).consequent).some((child) => {\n const object = readObject(child);\n return (\n object.type === \"ReturnStatement\" &&\n isOxcJsxReturnExpression(readObject(object.argument))\n );\n }),\n );\n }\n\n if (statement.type === \"IfStatement\") {\n return (\n hasJsxReturn({ body: [statement.consequent] }) ||\n hasJsxReturn({ body: [statement.alternate] })\n );\n }\n\n if (statement.type === \"BlockStatement\") {\n return hasJsxReturn(statement);\n }\n\n return false;\n}\n\nfunction hasNestedComponentCallReturn(statement: Record<string, unknown>): boolean {\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).some((switchCase) =>\n readArray(readObject(switchCase).consequent).some((child) => {\n const object = readObject(child);\n return (\n object.type === \"ReturnStatement\" &&\n isOxcComponentCallExpression(unwrapOxcParentheses(readObject(object.argument)))\n );\n }),\n );\n }\n\n if (statement.type === \"IfStatement\") {\n return (\n hasComponentCallReturn({ body: [statement.consequent] }) ||\n hasComponentCallReturn({ body: [statement.alternate] })\n );\n }\n\n if (statement.type === \"BlockStatement\") {\n return hasComponentCallReturn(statement);\n }\n\n return false;\n}\n\nfunction hasNestedLocalJsxHelperCallReturn(\n statement: Record<string, unknown>,\n localJsxReturnFunctionNames: ReadonlySet<string>,\n): boolean {\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).some((switchCase) =>\n readArray(readObject(switchCase).consequent).some((child) => {\n const object = readObject(child);\n return (\n object.type === \"ReturnStatement\" &&\n isOxcLocalJsxHelperCallExpression(\n unwrapOxcParentheses(readObject(object.argument)),\n localJsxReturnFunctionNames,\n )\n );\n }),\n );\n }\n\n if (statement.type === \"IfStatement\") {\n return (\n hasLocalJsxHelperCallReturn(\n { body: [statement.consequent] },\n localJsxReturnFunctionNames,\n ) ||\n hasLocalJsxHelperCallReturn(\n { body: [statement.alternate] },\n localJsxReturnFunctionNames,\n )\n );\n }\n\n if (statement.type === \"BlockStatement\") {\n return hasLocalJsxHelperCallReturn(statement, localJsxReturnFunctionNames);\n }\n\n return false;\n}\n\nfunction collectReturnArguments(statement: Record<string, unknown>): Record<string, unknown>[] {\n if (statement.type === \"ReturnStatement\") {\n return [readObject(statement.argument)];\n }\n\n if (statement.type === \"BlockStatement\") {\n return readArray(statement.body).flatMap((child) => collectReturnArguments(readObject(child)));\n }\n\n if (statement.type === \"IfStatement\") {\n return [\n ...collectReturnArguments(readObject(statement.consequent)),\n ...collectReturnArguments(readObject(statement.alternate)),\n ];\n }\n\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).flatMap((switchCase) =>\n readArray(readObject(switchCase).consequent).flatMap((child) =>\n collectReturnArguments(readObject(child)),\n ),\n );\n }\n\n return [];\n}\n\nfunction isNullReturnArgument(argument: Record<string, unknown>): boolean {\n return (\n argument.type === \"NullLiteral\" ||\n (argument.type === \"Literal\" && argument.value === null)\n );\n}\n\nexport function isOxcComponentCallExpression(expression: Record<string, unknown>): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = unwrapOxcParentheses(readObject(expression.callee));\n\n if (callee.type === \"Identifier\") {\n return typeof callee.name === \"string\" && /^[A-Z]/.test(callee.name);\n }\n\n if (callee.type === \"MemberExpression\") {\n const object = readObject(callee.object);\n const property = readObject(callee.property);\n return (\n object.type === \"Identifier\" &&\n typeof object.name === \"string\" &&\n /^[A-Z]/.test(object.name) &&\n property.type === \"Identifier\" &&\n typeof property.name === \"string\" &&\n /^[A-Z]/.test(property.name)\n );\n }\n\n return false;\n}\n\nexport function isJsxRoot(type: unknown): boolean {\n return type === \"JSXElement\" || type === \"JSXFragment\" || type === \"JSXSelfClosingElement\";\n}\n\nfunction isOxcJsxReturnExpression(expression: Record<string, unknown>): boolean {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (isJsxRoot(unwrapped.type)) {\n return true;\n }\n\n if (unwrapped.type === \"LogicalExpression\") {\n return (\n unwrapped.operator === \"&&\" &&\n isOxcJsxReturnBranch(readObject(unwrapped.right))\n );\n }\n\n if (unwrapped.type === \"ConditionalExpression\") {\n return (\n isOxcJsxReturnBranch(readObject(unwrapped.consequent)) &&\n isOxcJsxReturnBranch(readObject(unwrapped.alternate))\n );\n }\n\n return false;\n}\n\nfunction isOxcJsxReturnBranch(expression: Record<string, unknown>): boolean {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (unwrapped.type === \"Literal\" && (unwrapped.value === null || unwrapped.value === false)) {\n return true;\n }\n\n return isOxcJsxReturnExpression(unwrapped);\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { ComponentPropIr, JsxNodeIr } from "./ir.js";
2
2
  import type { OxcBodyStatementJsxMode } from "./oxc-analysis-types.js";
3
3
  import type { Diagnostic } from "./types.js";
4
- export type AnalyzeOxcJsxNodeCallback = (node: Record<string, unknown>, bodyStatementJsx?: OxcBodyStatementJsxMode) => JsxNodeIr;
4
+ export type AnalyzeOxcJsxNodeCallback = (node: Record<string, unknown>, bodyStatementJsx?: OxcBodyStatementJsxMode, shadowNames?: readonly string[]) => JsxNodeIr;
5
5
  export declare function analyzeOxcComponentProp(code: string, attr: unknown, analyzeJsxNode: AnalyzeOxcJsxNodeCallback, diagnostics?: Pick<Diagnostic, "level" | "code" | "message" | "loc">[], options?: {
6
6
  allowRef?: boolean;
7
7
  resolveExpressionCode?: (expression: Record<string, unknown>) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"oxc-component-props.d.ts","sourceRoot":"","sources":["../src/oxc-component-props.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAWvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,gBAAgB,CAAC,EAAE,uBAAuB,KACvC,SAAS,CAAC;AAEf,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,yBAAyB,EACzC,WAAW,GAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,EAAO,EAC1E,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CACpE,GACL,eAAe,EAAE,CAgDnB;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,cAAc,EAAE,yBAAyB,EACzC,gBAAgB,CAAC,EAAE,uBAAuB,GACzC,eAAe,GAAG,SAAS,CA8B7B;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,cAAc,EAAE,yBAAyB,EACzC,gBAAgB,CAAC,EAAE,uBAAuB,GACzC;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB,CAmBA;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,cAAc,EAAE,yBAAyB,EACzC,gBAAgB,CAAC,EAAE,uBAAuB,GACzC;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB,CAgBA"}
1
+ {"version":3,"file":"oxc-component-props.d.ts","sourceRoot":"","sources":["../src/oxc-component-props.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAWvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,gBAAgB,CAAC,EAAE,uBAAuB,EAC1C,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,KAC5B,SAAS,CAAC;AAEf,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,yBAAyB,EACzC,WAAW,GAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,EAAO,EAC1E,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CACpE,GACL,eAAe,EAAE,CAgDnB;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,cAAc,EAAE,yBAAyB,EACzC,gBAAgB,CAAC,EAAE,uBAAuB,GACzC,eAAe,GAAG,SAAS,CA8B7B;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,cAAc,EAAE,yBAAyB,EACzC,gBAAgB,CAAC,EAAE,uBAAuB,GACzC;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB,CAmBA;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,cAAc,EAAE,yBAAyB,EACzC,gBAAgB,CAAC,EAAE,uBAAuB,GACzC;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB,CAgBA"}
@@ -85,7 +85,7 @@ export function analyzeOxcArrowJsxRenderer(code, arrow, analyzeJsxNode, bodyStat
85
85
  if (body.type === "JSXElement" || body.type === "JSXFragment") {
86
86
  return {
87
87
  valueName,
88
- children: [analyzeJsxNode(body, bodyStatementJsx)],
88
+ children: [analyzeJsxNode(body, bodyStatementJsx, [valueName])],
89
89
  };
90
90
  }
91
91
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"oxc-component-props.js","sourceRoot":"","sources":["../src/oxc-component-props.ts"],"names":[],"mappings":"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","sourcesContent":["import { unsupportedRefAttributeDiagnostic } from \"./diagnostics.js\";\nimport type { ComponentPropIr, JsxNodeIr } from \"./ir.js\";\nimport type { OxcBodyStatementJsxMode } from \"./oxc-analysis-types.js\";\nimport { stripOxcGeneratedImports } from \"./oxc-code-utils.js\";\nimport {\n getOxcLocation,\n readArray,\n readObject,\n readSource,\n unwrapOxcParentheses,\n} from \"./oxc-node-utils.js\";\nimport { containsOxcJsxSyntax } from \"./oxc-render-values.js\";\nimport { transformJsxWithOxc } from \"./oxc-transform.js\";\nimport type { Diagnostic } from \"./types.js\";\n\nexport type AnalyzeOxcJsxNodeCallback = (\n node: Record<string, unknown>,\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n) => JsxNodeIr;\n\nexport function analyzeOxcComponentProp(\n code: string,\n attr: unknown,\n analyzeJsxNode: AnalyzeOxcJsxNodeCallback,\n diagnostics: Pick<Diagnostic, \"level\" | \"code\" | \"message\" | \"loc\">[] = [],\n options: {\n allowRef?: boolean;\n resolveExpressionCode?: (expression: Record<string, unknown>) => string;\n } = {},\n): ComponentPropIr[] {\n const object = readObject(attr);\n\n if (object.type === \"JSXSpreadAttribute\") {\n return [{ kind: \"spread-prop\", code: 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 (name === \"ref\" && options.allowRef !== true) {\n diagnostics.push(unsupportedRefAttributeDiagnostic(getOxcLocation(code, object.name)));\n }\n\n if (value.type === \"Literal\") {\n return [{ kind: \"prop\", name, code: JSON.stringify(value.value) }];\n }\n\n if (value.type === \"JSXExpressionContainer\") {\n const expression = unwrapOxcParentheses(readObject(value.expression));\n\n if (expression.type === \"JSXElement\" || expression.type === \"JSXFragment\") {\n return [\n {\n kind: \"render-prop\",\n name,\n children: [analyzeJsxNode(expression)],\n },\n ];\n }\n\n return [\n {\n kind: \"prop\",\n name,\n code:\n expression.type === \"ArrowFunctionExpression\" && containsOxcJsxSyntax(expression)\n ? stripOxcGeneratedImports(transformJsxWithOxc(readSource(code, expression)))\n : (options.resolveExpressionCode?.(expression) ?? readSource(code, expression)),\n },\n ];\n }\n\n return [{ kind: \"prop\", name, code: \"true\" }];\n}\n\nexport function readOxcConsumerRenderProp(\n code: string,\n children: readonly unknown[],\n analyzeJsxNode: AnalyzeOxcJsxNodeCallback,\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n): ComponentPropIr | undefined {\n for (const child of children) {\n const object = readObject(child);\n\n if (object.type !== \"JSXExpressionContainer\") {\n continue;\n }\n\n const expression = unwrapOxcParentheses(readObject(object.expression));\n\n if (expression.type !== \"ArrowFunctionExpression\") {\n continue;\n }\n\n const renderer = analyzeOxcArrowJsxRenderer(\n code,\n expression,\n analyzeJsxNode,\n bodyStatementJsx,\n );\n\n return {\n kind: \"render-prop\",\n name: \"children\",\n valueName: renderer.valueName,\n children: renderer.children,\n };\n }\n\n return undefined;\n}\n\nexport function analyzeOxcSingleArrowJsxChild(\n code: string,\n children: readonly unknown[],\n analyzeJsxNode: AnalyzeOxcJsxNodeCallback,\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n): {\n valueName: string;\n children: JsxNodeIr[];\n} {\n for (const child of children) {\n const object = readObject(child);\n\n if (object.type !== \"JSXExpressionContainer\") {\n continue;\n }\n\n const expression = unwrapOxcParentheses(readObject(object.expression));\n\n if (expression.type === \"ArrowFunctionExpression\") {\n return analyzeOxcArrowJsxRenderer(code, expression, analyzeJsxNode, bodyStatementJsx);\n }\n }\n\n return {\n valueName: \"_value\",\n children: [],\n };\n}\n\nexport function analyzeOxcArrowJsxRenderer(\n code: string,\n arrow: Record<string, unknown>,\n analyzeJsxNode: AnalyzeOxcJsxNodeCallback,\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n): {\n valueName: string;\n children: JsxNodeIr[];\n} {\n const firstParameter = readObject(readArray(arrow.params)[0]);\n const valueName = typeof firstParameter.name === \"string\" ? firstParameter.name : \"_value\";\n const body = unwrapOxcParentheses(readObject(arrow.body));\n\n if (body.type === \"JSXElement\" || body.type === \"JSXFragment\") {\n return {\n valueName,\n children: [analyzeJsxNode(body, bodyStatementJsx)],\n };\n }\n\n return {\n valueName,\n children: [{ kind: \"expr\", code: readSource(code, body) }],\n };\n}\n"]}
1
+ {"version":3,"file":"oxc-component-props.js","sourceRoot":"","sources":["../src/oxc-component-props.ts"],"names":[],"mappings":"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","sourcesContent":["import { unsupportedRefAttributeDiagnostic } from \"./diagnostics.js\";\nimport type { ComponentPropIr, JsxNodeIr } from \"./ir.js\";\nimport type { OxcBodyStatementJsxMode } from \"./oxc-analysis-types.js\";\nimport { stripOxcGeneratedImports } from \"./oxc-code-utils.js\";\nimport {\n getOxcLocation,\n readArray,\n readObject,\n readSource,\n unwrapOxcParentheses,\n} from \"./oxc-node-utils.js\";\nimport { containsOxcJsxSyntax } from \"./oxc-render-values.js\";\nimport { transformJsxWithOxc } from \"./oxc-transform.js\";\nimport type { Diagnostic } from \"./types.js\";\n\nexport type AnalyzeOxcJsxNodeCallback = (\n node: Record<string, unknown>,\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n shadowNames?: readonly string[],\n) => JsxNodeIr;\n\nexport function analyzeOxcComponentProp(\n code: string,\n attr: unknown,\n analyzeJsxNode: AnalyzeOxcJsxNodeCallback,\n diagnostics: Pick<Diagnostic, \"level\" | \"code\" | \"message\" | \"loc\">[] = [],\n options: {\n allowRef?: boolean;\n resolveExpressionCode?: (expression: Record<string, unknown>) => string;\n } = {},\n): ComponentPropIr[] {\n const object = readObject(attr);\n\n if (object.type === \"JSXSpreadAttribute\") {\n return [{ kind: \"spread-prop\", code: 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 (name === \"ref\" && options.allowRef !== true) {\n diagnostics.push(unsupportedRefAttributeDiagnostic(getOxcLocation(code, object.name)));\n }\n\n if (value.type === \"Literal\") {\n return [{ kind: \"prop\", name, code: JSON.stringify(value.value) }];\n }\n\n if (value.type === \"JSXExpressionContainer\") {\n const expression = unwrapOxcParentheses(readObject(value.expression));\n\n if (expression.type === \"JSXElement\" || expression.type === \"JSXFragment\") {\n return [\n {\n kind: \"render-prop\",\n name,\n children: [analyzeJsxNode(expression)],\n },\n ];\n }\n\n return [\n {\n kind: \"prop\",\n name,\n code:\n expression.type === \"ArrowFunctionExpression\" && containsOxcJsxSyntax(expression)\n ? stripOxcGeneratedImports(transformJsxWithOxc(readSource(code, expression)))\n : (options.resolveExpressionCode?.(expression) ?? readSource(code, expression)),\n },\n ];\n }\n\n return [{ kind: \"prop\", name, code: \"true\" }];\n}\n\nexport function readOxcConsumerRenderProp(\n code: string,\n children: readonly unknown[],\n analyzeJsxNode: AnalyzeOxcJsxNodeCallback,\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n): ComponentPropIr | undefined {\n for (const child of children) {\n const object = readObject(child);\n\n if (object.type !== \"JSXExpressionContainer\") {\n continue;\n }\n\n const expression = unwrapOxcParentheses(readObject(object.expression));\n\n if (expression.type !== \"ArrowFunctionExpression\") {\n continue;\n }\n\n const renderer = analyzeOxcArrowJsxRenderer(\n code,\n expression,\n analyzeJsxNode,\n bodyStatementJsx,\n );\n\n return {\n kind: \"render-prop\",\n name: \"children\",\n valueName: renderer.valueName,\n children: renderer.children,\n };\n }\n\n return undefined;\n}\n\nexport function analyzeOxcSingleArrowJsxChild(\n code: string,\n children: readonly unknown[],\n analyzeJsxNode: AnalyzeOxcJsxNodeCallback,\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n): {\n valueName: string;\n children: JsxNodeIr[];\n} {\n for (const child of children) {\n const object = readObject(child);\n\n if (object.type !== \"JSXExpressionContainer\") {\n continue;\n }\n\n const expression = unwrapOxcParentheses(readObject(object.expression));\n\n if (expression.type === \"ArrowFunctionExpression\") {\n return analyzeOxcArrowJsxRenderer(code, expression, analyzeJsxNode, bodyStatementJsx);\n }\n }\n\n return {\n valueName: \"_value\",\n children: [],\n };\n}\n\nexport function analyzeOxcArrowJsxRenderer(\n code: string,\n arrow: Record<string, unknown>,\n analyzeJsxNode: AnalyzeOxcJsxNodeCallback,\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n): {\n valueName: string;\n children: JsxNodeIr[];\n} {\n const firstParameter = readObject(readArray(arrow.params)[0]);\n const valueName = typeof firstParameter.name === \"string\" ? firstParameter.name : \"_value\";\n const body = unwrapOxcParentheses(readObject(arrow.body));\n\n if (body.type === \"JSXElement\" || body.type === \"JSXFragment\") {\n return {\n valueName,\n children: [analyzeJsxNode(body, bodyStatementJsx, [valueName])],\n };\n }\n\n return {\n valueName,\n children: [{ kind: \"expr\", code: readSource(code, body) }],\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"oxc-component-references.d.ts","sourceRoot":"","sources":["../src/oxc-component-references.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAY5D,wBAAgB,wCAAwC,CACtD,OAAO,EAAE,OAAO,EAChB,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAAC,GAC3C,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CA8ChC;AAED,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,OAAO,GACf,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAuDhC;AAED,wBAAgB,4CAA4C,CAC1D,OAAO,EAAE,OAAO,GACf,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAShC;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,SAAS,EACf,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC/B,IAAI,CAMN;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,SAAS,EACf,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC/C,IAAI,CAaN;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,SAAS,EACf,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACxD,IAAI,CAYN;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACjD,IAAI,CAUN"}
1
+ {"version":3,"file":"oxc-component-references.d.ts","sourceRoot":"","sources":["../src/oxc-component-references.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAmB5D,wBAAgB,wCAAwC,CACtD,OAAO,EAAE,OAAO,EAChB,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAAC,GAC3C,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CA8ChC;AAED,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,OAAO,GACf,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAwDhC;AAED,wBAAgB,4CAA4C,CAC1D,OAAO,EAAE,OAAO,GACf,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAShC;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,SAAS,EACf,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC/B,IAAI,CAMN;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,SAAS,EACf,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC/C,IAAI,CAaN;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,SAAS,EACf,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACxD,IAAI,CAYN;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACjD,IAAI,CAUN"}
@@ -1,6 +1,7 @@
1
1
  import { readArray, readObject } from "./oxc-node-utils.js";
2
- const routerEntryCompatRuntimeExports = new Set(["Link"]);
3
- const routerLinkCompatRuntimeExports = new Set(["Link"]);
2
+ const routerEntryCompatRuntimeExports = new Set();
3
+ const routerLinkCompatRuntimeExports = new Set();
4
+ const unknownCompatReference = { moduleId: "", exportName: "default" };
4
5
  export function collectOxcClientBoundaryImportComponents(program, inferredBoundaryImports) {
5
6
  const names = new Map();
6
7
  for (const statement of readArray(readObject(program).body)) {
@@ -78,6 +79,7 @@ export function collectOxcCompatRuntimeImportComponents(program) {
78
79
  }
79
80
  }
80
81
  }
82
+ collectOxcClientReferenceAliases(program, names, { allowAmbiguousAliases: true });
81
83
  return names;
82
84
  }
83
85
  export function collectOxcCompatReactNodeComponentReferences(program) {
@@ -212,11 +214,17 @@ function readOxcClassComponentName(node) {
212
214
  }
213
215
  return undefined;
214
216
  }
215
- function collectOxcClientReferenceAliases(node, references) {
217
+ function collectOxcClientReferenceAliases(node, references, options = {}) {
216
218
  const state = {
219
+ allowAmbiguousAliases: options.allowAmbiguousAliases === true,
217
220
  references,
218
221
  stringConstants: new Map(),
219
222
  objectMembers: new Map(),
223
+ objectMemberKeys: new Map(),
224
+ dynamicObjectMembers: new Map(),
225
+ dynamicObjectNestedMembers: new Map(),
226
+ globModuleMaps: new Set(),
227
+ objectEntryValueBindings: new Map(),
220
228
  };
221
229
  collectOxcClientReferenceAliasesFromNode(node, state);
222
230
  }
@@ -250,6 +258,10 @@ function collectOxcClientReferenceAliasesFromNode(node, state) {
250
258
  if (object.type === "CallExpression") {
251
259
  collectOxcObjectAssignClientReferenceAliases(object, state);
252
260
  }
261
+ if (object.type === "ForOfStatement") {
262
+ collectOxcForOfClientReferenceAliases(object, state);
263
+ return;
264
+ }
253
265
  for (const [key, value] of Object.entries(object)) {
254
266
  if (key === "type" || key === "start" || key === "end" || key === "loc") {
255
267
  continue;
@@ -273,6 +285,9 @@ function collectOxcVariableClientReferenceAlias(node, state, constant) {
273
285
  state.stringConstants.set(aliasName, stringValue);
274
286
  }
275
287
  }
288
+ if (isImportMetaGlobEagerCall(init)) {
289
+ state.globModuleMaps.add(aliasName);
290
+ }
276
291
  collectOxcObjectLiteralClientReferenceAliases(aliasName, init, state);
277
292
  const reference = expressionClientReference(init, state);
278
293
  if (reference !== undefined) {
@@ -289,7 +304,14 @@ function collectOxcObjectLiteralClientReferenceAliases(objectName, init, state)
289
304
  continue;
290
305
  }
291
306
  const keyName = propertyName(readOptionalObject(property.key), property.computed === true, state);
292
- const reference = expressionClientReference(readOptionalObject(property.value), state);
307
+ const value = readOptionalObject(property.value);
308
+ if (keyName !== undefined) {
309
+ addObjectMemberKey(state, objectName, keyName);
310
+ }
311
+ if (keyName !== undefined && value?.type === "ObjectExpression") {
312
+ collectOxcObjectLiteralClientReferenceAliases(`${objectName}.${keyName}`, value, state);
313
+ }
314
+ const reference = expressionClientReference(value, state);
293
315
  if (keyName !== undefined && reference !== undefined) {
294
316
  setObjectMemberReference(state, objectName, keyName, reference);
295
317
  }
@@ -303,11 +325,42 @@ function collectOxcAssignmentClientReferenceAlias(node, state) {
303
325
  if (left?.type !== "MemberExpression") {
304
326
  return;
305
327
  }
306
- const objectName = expressionObjectName(readOptionalObject(left.object));
328
+ const objectName = expressionObjectName(readOptionalObject(left.object), state);
307
329
  const memberName = propertyName(readOptionalObject(left.property), left.computed === true, state);
308
330
  const reference = expressionClientReference(readOptionalObject(node.right), state);
309
- if (objectName !== undefined && memberName !== undefined && reference !== undefined) {
310
- setObjectMemberReference(state, objectName, memberName, reference);
331
+ if (objectName !== undefined && memberName !== undefined) {
332
+ addObjectMemberKey(state, objectName, memberName);
333
+ if (reference !== undefined) {
334
+ setObjectMemberReference(state, objectName, memberName, reference);
335
+ }
336
+ }
337
+ if (objectName !== undefined && memberName === undefined) {
338
+ if (reference !== undefined) {
339
+ addDynamicObjectMemberReference(state, objectName, reference);
340
+ }
341
+ collectDynamicObjectNestedMemberReferences(objectName, readOptionalObject(node.right), state);
342
+ }
343
+ }
344
+ function collectOxcForOfClientReferenceAliases(node, state) {
345
+ const sourceName = objectEntriesSourceName(readOptionalObject(node.right), state);
346
+ const valueName = forOfObjectEntriesValueBindingName(readOptionalObject(node.left));
347
+ if (sourceName === undefined || valueName === undefined) {
348
+ for (const [key, value] of Object.entries(node)) {
349
+ if (key === "type" || key === "start" || key === "end" || key === "loc") {
350
+ continue;
351
+ }
352
+ collectOxcClientReferenceAliasesFromNode(value, state);
353
+ }
354
+ return;
355
+ }
356
+ const previous = state.objectEntryValueBindings.get(valueName);
357
+ state.objectEntryValueBindings.set(valueName, sourceName);
358
+ collectOxcClientReferenceAliasesFromNode(node.body, state);
359
+ if (previous === undefined) {
360
+ state.objectEntryValueBindings.delete(valueName);
361
+ }
362
+ else {
363
+ state.objectEntryValueBindings.set(valueName, previous);
311
364
  }
312
365
  }
313
366
  function collectOxcObjectAssignClientReferenceAliases(node, state) {
@@ -315,7 +368,7 @@ function collectOxcObjectAssignClientReferenceAliases(node, state) {
315
368
  return;
316
369
  }
317
370
  const args = readArray(node.arguments).map(readOptionalObject);
318
- const target = expressionObjectName(args[0]);
371
+ const target = expressionObjectName(args[0], state);
319
372
  if (target === undefined) {
320
373
  return;
321
374
  }
@@ -331,7 +384,7 @@ function expressionClientReference(node, state) {
331
384
  return state.references.get(node.name);
332
385
  }
333
386
  if (node.type === "MemberExpression") {
334
- const objectName = expressionObjectName(readOptionalObject(node.object));
387
+ const objectName = expressionObjectName(readOptionalObject(node.object), state);
335
388
  const memberName = propertyName(readOptionalObject(node.property), node.computed === true, state);
336
389
  const objectReference = objectName === undefined ? undefined : state.references.get(objectName);
337
390
  if (objectName !== undefined && memberName !== undefined) {
@@ -339,9 +392,25 @@ function expressionClientReference(node, state) {
339
392
  if (objectMember !== undefined) {
340
393
  return objectMember;
341
394
  }
395
+ const dynamicObjectReference = selectClientReference(dynamicObjectMemberReferences(state, objectName), state.allowAmbiguousAliases);
396
+ if (dynamicObjectReference !== undefined) {
397
+ return dynamicObjectReference;
398
+ }
399
+ const objectEntryReference = objectEntryMemberReference(objectName, memberName, state);
400
+ if (objectEntryReference !== undefined) {
401
+ return objectEntryReference;
402
+ }
342
403
  }
343
404
  if (objectName !== undefined && memberName === undefined) {
344
- return uniqueClientReference(Array.from(state.objectMembers.get(objectName)?.values() ?? []));
405
+ return selectClientReference([...objectMemberReferences(state, objectName), ...dynamicObjectMemberReferences(state, objectName)], state.allowAmbiguousAliases);
406
+ }
407
+ if (objectName === undefined && memberName !== undefined) {
408
+ const references = [
409
+ ...expressionObjectNameCandidates(readOptionalObject(node.object), state)
410
+ .map((candidate) => state.objectMembers.get(candidate)?.get(memberName)),
411
+ ...expressionDynamicObjectNestedMemberReferences(readOptionalObject(node.object), memberName, state),
412
+ ];
413
+ return selectClientReference(references, state.allowAmbiguousAliases);
345
414
  }
346
415
  if (objectReference?.exportName === "*" && memberName !== undefined) {
347
416
  return {
@@ -365,8 +434,48 @@ function expressionClientReference(node, state) {
365
434
  }
366
435
  return undefined;
367
436
  }
368
- function expressionObjectName(node) {
369
- return node?.type === "Identifier" && typeof node.name === "string" ? node.name : undefined;
437
+ function objectEntryMemberReference(objectName, memberName, state) {
438
+ const sourceName = state.objectEntryValueBindings.get(objectName);
439
+ if (sourceName === undefined) {
440
+ return undefined;
441
+ }
442
+ if (state.allowAmbiguousAliases && state.globModuleMaps.has(sourceName) && memberName === "default") {
443
+ return unknownCompatReference;
444
+ }
445
+ const references = Array.from(state.objectMemberKeys.get(sourceName) ?? [])
446
+ .map((key) => state.objectMembers.get(`${sourceName}.${key}`)?.get(memberName));
447
+ return selectClientReference(references, state.allowAmbiguousAliases);
448
+ }
449
+ function expressionObjectNameCandidates(node, state) {
450
+ const exactName = expressionObjectName(node, state);
451
+ if (exactName !== undefined) {
452
+ return [exactName];
453
+ }
454
+ if (node?.type !== "MemberExpression") {
455
+ return [];
456
+ }
457
+ const objectName = expressionObjectName(readOptionalObject(node.object), state);
458
+ const memberName = propertyName(readOptionalObject(node.property), node.computed === true, state);
459
+ if (objectName !== undefined && memberName === undefined) {
460
+ return Array.from(state.objectMemberKeys.get(objectName) ?? []).map((key) => `${objectName}.${key}`);
461
+ }
462
+ if (memberName === undefined) {
463
+ return [];
464
+ }
465
+ return expressionObjectNameCandidates(readOptionalObject(node.object), state).map((candidate) => `${candidate}.${memberName}`);
466
+ }
467
+ function expressionObjectName(node, state) {
468
+ if (node?.type === "Identifier" && typeof node.name === "string") {
469
+ return node.name;
470
+ }
471
+ if (node?.type === "MemberExpression") {
472
+ const objectName = expressionObjectName(readOptionalObject(node.object), state);
473
+ const memberName = propertyName(readOptionalObject(node.property), node.computed === true, state);
474
+ return objectName !== undefined && memberName !== undefined
475
+ ? `${objectName}.${memberName}`
476
+ : undefined;
477
+ }
478
+ return undefined;
370
479
  }
371
480
  function propertyName(node, computed, state) {
372
481
  if (!computed && node?.type === "Identifier" && typeof node.name === "string") {
@@ -404,6 +513,40 @@ function setObjectMemberReference(state, objectName, memberName, reference) {
404
513
  const members = state.objectMembers.get(objectName) ?? new Map();
405
514
  members.set(memberName, reference);
406
515
  state.objectMembers.set(objectName, members);
516
+ addObjectMemberKey(state, objectName, memberName);
517
+ }
518
+ function addDynamicObjectMemberReference(state, objectName, reference) {
519
+ const references = state.dynamicObjectMembers.get(objectName) ?? [];
520
+ references.push(reference);
521
+ state.dynamicObjectMembers.set(objectName, references);
522
+ }
523
+ function collectDynamicObjectNestedMemberReferences(objectName, node, state) {
524
+ if (node?.type !== "ObjectExpression") {
525
+ return;
526
+ }
527
+ for (const propertyValue of readArray(node.properties)) {
528
+ const property = readOptionalObject(propertyValue);
529
+ if (property?.type !== "Property") {
530
+ continue;
531
+ }
532
+ const keyName = propertyName(readOptionalObject(property.key), property.computed === true, state);
533
+ const reference = expressionClientReference(readOptionalObject(property.value), state);
534
+ if (keyName !== undefined && reference !== undefined) {
535
+ addDynamicObjectNestedMemberReference(state, objectName, keyName, reference);
536
+ }
537
+ }
538
+ }
539
+ function addDynamicObjectNestedMemberReference(state, objectName, memberName, reference) {
540
+ const members = state.dynamicObjectNestedMembers.get(objectName) ?? new Map();
541
+ const references = members.get(memberName) ?? [];
542
+ references.push(reference);
543
+ members.set(memberName, references);
544
+ state.dynamicObjectNestedMembers.set(objectName, members);
545
+ }
546
+ function addObjectMemberKey(state, objectName, memberName) {
547
+ const keys = state.objectMemberKeys.get(objectName) ?? new Set();
548
+ keys.add(memberName);
549
+ state.objectMemberKeys.set(objectName, keys);
407
550
  }
408
551
  function isObjectAssignCall(node) {
409
552
  const callee = readOptionalObject(node.callee);
@@ -415,6 +558,49 @@ function isObjectAssignCall(node) {
415
558
  return object?.type === "Identifier" && object.name === "Object" &&
416
559
  property?.type === "Identifier" && property.name === "assign";
417
560
  }
561
+ function isObjectEntriesCall(node) {
562
+ const callee = readOptionalObject(node?.callee);
563
+ if (callee?.type !== "MemberExpression" || callee.computed === true) {
564
+ return false;
565
+ }
566
+ const object = readOptionalObject(callee.object);
567
+ const property = readOptionalObject(callee.property);
568
+ return object?.type === "Identifier" && object.name === "Object" &&
569
+ property?.type === "Identifier" && property.name === "entries";
570
+ }
571
+ function isImportMetaGlobEagerCall(node) {
572
+ const callee = readOptionalObject(node?.callee);
573
+ if (node?.type !== "CallExpression" || callee?.type !== "MemberExpression") {
574
+ return false;
575
+ }
576
+ const property = readOptionalObject(callee.property);
577
+ if (callee.computed === true || property?.type !== "Identifier" || property.name !== "glob") {
578
+ return false;
579
+ }
580
+ const metaProperty = readOptionalObject(callee.object);
581
+ const meta = readOptionalObject(metaProperty?.meta);
582
+ const metaName = meta?.type === "Identifier" ? meta.name : undefined;
583
+ const propertyName = readOptionalObject(metaProperty?.property);
584
+ const importMetaPropertyName = propertyName?.type === "Identifier" ? propertyName.name : undefined;
585
+ if (metaProperty?.type !== "MetaProperty" || metaName !== "import" || importMetaPropertyName !== "meta") {
586
+ return false;
587
+ }
588
+ const options = readOptionalObject(readArray(node.arguments)[1]);
589
+ if (options?.type !== "ObjectExpression") {
590
+ return false;
591
+ }
592
+ return readArray(options.properties).some((propertyValue) => {
593
+ const property = readOptionalObject(propertyValue);
594
+ const key = readOptionalObject(property?.key);
595
+ const value = readOptionalObject(property?.value);
596
+ return property?.type === "Property" &&
597
+ property.computed !== true &&
598
+ key?.type === "Identifier" &&
599
+ key.name === "eager" &&
600
+ value?.type === "Literal" &&
601
+ value.value === true;
602
+ });
603
+ }
418
604
  function uniqueClientReference(values) {
419
605
  const refs = values.filter((value) => value !== undefined);
420
606
  if (refs.length === 0) {
@@ -428,6 +614,55 @@ function uniqueClientReference(values) {
428
614
  ? first
429
615
  : undefined;
430
616
  }
617
+ function selectClientReference(values, allowAmbiguousAliases) {
618
+ if (!allowAmbiguousAliases) {
619
+ return uniqueClientReference(values);
620
+ }
621
+ if (values.length === 0 || values.some((value) => value === undefined)) {
622
+ return undefined;
623
+ }
624
+ return values[0];
625
+ }
626
+ function objectMemberReferences(state, objectName) {
627
+ const keys = Array.from(state.objectMemberKeys.get(objectName) ?? []);
628
+ return keys.map((key) => state.objectMembers.get(objectName)?.get(key));
629
+ }
630
+ function dynamicObjectMemberReferences(state, objectName) {
631
+ return state.dynamicObjectMembers.get(objectName) ?? [];
632
+ }
633
+ function expressionDynamicObjectNestedMemberReferences(node, memberName, state) {
634
+ if (node?.type !== "MemberExpression") {
635
+ return [];
636
+ }
637
+ const objectName = expressionObjectName(readOptionalObject(node.object), state);
638
+ const property = propertyName(readOptionalObject(node.property), node.computed === true, state);
639
+ if (objectName === undefined || property !== undefined) {
640
+ return [];
641
+ }
642
+ return state.dynamicObjectNestedMembers.get(objectName)?.get(memberName) ?? [];
643
+ }
644
+ function objectEntriesSourceName(node, state) {
645
+ if (!isObjectEntriesCall(node)) {
646
+ return undefined;
647
+ }
648
+ const args = readArray(node?.arguments).map(readOptionalObject);
649
+ return expressionObjectName(args[0], state);
650
+ }
651
+ function forOfObjectEntriesValueBindingName(node) {
652
+ const declaration = node?.type === "VariableDeclaration"
653
+ ? readOptionalObject(readArray(node.declarations)[0])
654
+ : undefined;
655
+ const pattern = declaration?.type === "VariableDeclarator"
656
+ ? readOptionalObject(declaration.id)
657
+ : node;
658
+ if (pattern?.type !== "ArrayPattern") {
659
+ return undefined;
660
+ }
661
+ const valueElement = readOptionalObject(readArray(pattern.elements)[1]);
662
+ return valueElement?.type === "Identifier" && typeof valueElement.name === "string"
663
+ ? valueElement.name
664
+ : undefined;
665
+ }
431
666
  function uniqueString(values) {
432
667
  const unique = new Set(values.filter((value) => value !== undefined));
433
668
  return unique.size === 1 ? Array.from(unique)[0] : undefined;