@wyw-in-js/transform 2.0.0-alpha.0 → 2.0.0-alpha.1
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.
- package/esm/cache.js +7 -0
- package/esm/cache.js.map +1 -1
- package/esm/debug/fileReporter.js +35 -1
- package/esm/debug/fileReporter.js.map +1 -1
- package/esm/eval/broker.js +230 -89
- package/esm/eval/broker.js.map +1 -1
- package/esm/eval/protocol.js.map +1 -1
- package/esm/eval/runner.js +143 -24
- package/esm/eval/runner.js.map +1 -1
- package/esm/module.js +70 -43
- package/esm/module.js.map +1 -1
- package/esm/transform/Entrypoint.types.js.map +1 -1
- package/esm/transform/generators/processEntrypoint.js +35 -20
- package/esm/transform/generators/processEntrypoint.js.map +1 -1
- package/esm/transform/generators/resolveImports.js +48 -2
- package/esm/transform/generators/resolveImports.js.map +1 -1
- package/esm/transform/generators/resolveStaticOxcValues/cache.js +182 -0
- package/esm/transform/generators/resolveStaticOxcValues/cache.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/candidateResolver.js +146 -0
- package/esm/transform/generators/resolveStaticOxcValues/candidateResolver.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/dependencies.js +33 -0
- package/esm/transform/generators/resolveStaticOxcValues/dependencies.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/environment.js +29 -0
- package/esm/transform/generators/resolveStaticOxcValues/environment.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/exportResolver.js +351 -0
- package/esm/transform/generators/resolveStaticOxcValues/exportResolver.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/exportTargets.js +253 -0
- package/esm/transform/generators/resolveStaticOxcValues/exportTargets.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/objectAssign.js +310 -0
- package/esm/transform/generators/resolveStaticOxcValues/objectAssign.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js +74 -0
- package/esm/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/opaqueRuntime.js +229 -0
- package/esm/transform/generators/resolveStaticOxcValues/opaqueRuntime.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/processorStaticExport.js +172 -0
- package/esm/transform/generators/resolveStaticOxcValues/processorStaticExport.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/processorStaticModel.js +476 -0
- package/esm/transform/generators/resolveStaticOxcValues/processorStaticModel.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/processorTarget.js +55 -0
- package/esm/transform/generators/resolveStaticOxcValues/processorTarget.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/programAnalysis.js +123 -0
- package/esm/transform/generators/resolveStaticOxcValues/programAnalysis.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/prune.js +186 -0
- package/esm/transform/generators/resolveStaticOxcValues/prune.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js +183 -0
- package/esm/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/staticExpression.js +298 -0
- package/esm/transform/generators/resolveStaticOxcValues/staticExpression.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js +298 -0
- package/esm/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/types.js +3 -0
- package/esm/transform/generators/resolveStaticOxcValues/types.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js +59 -0
- package/esm/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js.map +1 -0
- package/esm/transform/generators/resolveStaticOxcValues.js +1 -2910
- package/esm/transform/generators/resolveStaticOxcValues.js.map +1 -1
- package/esm/transform/generators/transform.js +57 -45
- package/esm/transform/generators/transform.js.map +1 -1
- package/esm/transform/helpers/loadWywOptions.js +33 -4
- package/esm/transform/helpers/loadWywOptions.js.map +1 -1
- package/esm/transform.js +3 -1
- package/esm/transform.js.map +1 -1
- package/esm/utils/EventEmitter.js +42 -9
- package/esm/utils/EventEmitter.js.map +1 -1
- package/esm/utils/applyOxcProcessors/applyOxcProcessors.js +160 -0
- package/esm/utils/applyOxcProcessors/applyOxcProcessors.js.map +1 -0
- package/esm/utils/applyOxcProcessors/cleanupBindings.js +157 -0
- package/esm/utils/applyOxcProcessors/cleanupBindings.js.map +1 -0
- package/esm/utils/applyOxcProcessors/cleanupRemovals.js +431 -0
- package/esm/utils/applyOxcProcessors/cleanupRemovals.js.map +1 -0
- package/esm/utils/applyOxcProcessors/displayName.js +93 -0
- package/esm/utils/applyOxcProcessors/displayName.js.map +1 -0
- package/esm/utils/applyOxcProcessors/expressionValues.js +152 -0
- package/esm/utils/applyOxcProcessors/expressionValues.js.map +1 -0
- package/esm/utils/applyOxcProcessors/processorFactory.js +62 -0
- package/esm/utils/applyOxcProcessors/processorFactory.js.map +1 -0
- package/esm/utils/applyOxcProcessors/processorUsages.js +143 -0
- package/esm/utils/applyOxcProcessors/processorUsages.js.map +1 -0
- package/esm/utils/applyOxcProcessors/sameFileStaticValues.js +207 -0
- package/esm/utils/applyOxcProcessors/sameFileStaticValues.js.map +1 -0
- package/esm/utils/applyOxcProcessors/shared.js +29 -0
- package/esm/utils/applyOxcProcessors/shared.js.map +1 -0
- package/esm/utils/applyOxcProcessors/types.js +2 -0
- package/esm/utils/applyOxcProcessors/types.js.map +1 -0
- package/esm/utils/applyOxcProcessors.js +1 -1216
- package/esm/utils/applyOxcProcessors.js.map +1 -1
- package/esm/utils/collectOxcRuntime/normalizeRuntimeCode.js +157 -0
- package/esm/utils/collectOxcRuntime/normalizeRuntimeCode.js.map +1 -0
- package/esm/utils/collectOxcRuntime/sourceMap.js +36 -0
- package/esm/utils/collectOxcRuntime/sourceMap.js.map +1 -0
- package/esm/utils/collectOxcRuntime/types.js +2 -0
- package/esm/utils/collectOxcRuntime/types.js.map +1 -0
- package/esm/utils/collectOxcRuntime.js +5 -193
- package/esm/utils/collectOxcRuntime.js.map +1 -1
- package/esm/utils/collectOxcTemplateDependencies/expressionExtraction.js +496 -0
- package/esm/utils/collectOxcTemplateDependencies/expressionExtraction.js.map +1 -0
- package/esm/utils/collectOxcTemplateDependencies/expressionReplacements.js +113 -0
- package/esm/utils/collectOxcTemplateDependencies/expressionReplacements.js.map +1 -0
- package/esm/utils/collectOxcTemplateDependencies/scopeAnalysis.js +387 -0
- package/esm/utils/collectOxcTemplateDependencies/scopeAnalysis.js.map +1 -0
- package/esm/utils/collectOxcTemplateDependencies/staticBindings.js +17 -0
- package/esm/utils/collectOxcTemplateDependencies/staticBindings.js.map +1 -0
- package/esm/utils/collectOxcTemplateDependencies/staticEvaluator.js +540 -0
- package/esm/utils/collectOxcTemplateDependencies/staticEvaluator.js.map +1 -0
- package/esm/utils/collectOxcTemplateDependencies/types.js +2 -0
- package/esm/utils/collectOxcTemplateDependencies/types.js.map +1 -0
- package/esm/utils/collectOxcTemplateDependencies.js +3 -1397
- package/esm/utils/collectOxcTemplateDependencies.js.map +1 -1
- package/esm/utils/nativeResolver.js +93 -0
- package/esm/utils/nativeResolver.js.map +1 -0
- package/esm/utils/oxc/ast.js +28 -0
- package/esm/utils/oxc/ast.js.map +1 -0
- package/esm/utils/oxc/parse.js +3 -0
- package/esm/utils/oxc/parse.js.map +1 -0
- package/esm/utils/oxc/replacements.js +14 -0
- package/esm/utils/oxc/replacements.js.map +1 -0
- package/esm/utils/oxc/sourceLocations.js +59 -0
- package/esm/utils/oxc/sourceLocations.js.map +1 -0
- package/esm/utils/oxcPreevalStage/evalStrategy.js +3 -0
- package/esm/utils/oxcPreevalStage/evalStrategy.js.map +1 -0
- package/esm/utils/oxcPreevalStage/prepareCode.js +21 -0
- package/esm/utils/oxcPreevalStage/prepareCode.js.map +1 -0
- package/esm/utils/oxcPreevalStage/prevalExport.js +23 -0
- package/esm/utils/oxcPreevalStage/prevalExport.js.map +1 -0
- package/esm/utils/oxcPreevalStage/processors.js +17 -0
- package/esm/utils/oxcPreevalStage/processors.js.map +1 -0
- package/esm/utils/oxcPreevalStage/staticOverlay.js +18 -0
- package/esm/utils/oxcPreevalStage/staticOverlay.js.map +1 -0
- package/esm/utils/oxcPreevalStage/types.js +2 -0
- package/esm/utils/oxcPreevalStage/types.js.map +1 -0
- package/esm/utils/oxcPreevalStage.js +17 -73
- package/esm/utils/oxcPreevalStage.js.map +1 -1
- package/esm/utils/oxcPreevalTransforms.js +12 -1
- package/esm/utils/oxcPreevalTransforms.js.map +1 -1
- package/esm/utils/processorStaticSemantics.js +157 -0
- package/esm/utils/processorStaticSemantics.js.map +1 -0
- package/esm/utils/resolveWithConditions.js +3 -3
- package/esm/utils/resolveWithConditions.js.map +1 -1
- package/package.json +4 -3
- package/types/cache.js +8 -0
- package/types/debug/fileReporter.js +46 -1
- package/types/eval/broker.d.ts +6 -2
- package/types/eval/broker.js +244 -95
- package/types/eval/protocol.d.ts +15 -1
- package/types/module.d.ts +4 -1
- package/types/module.js +97 -48
- package/types/transform/Entrypoint.types.d.ts +3 -0
- package/types/transform/generators/resolveImports.d.ts +3 -1
- package/types/transform/generators/resolveImports.js +49 -2
- package/types/transform/generators/resolveStaticOxcValues/cache.d.ts +25 -0
- package/types/transform/generators/resolveStaticOxcValues/cache.js +182 -0
- package/types/transform/generators/resolveStaticOxcValues/candidateResolver.d.ts +5 -0
- package/types/transform/generators/resolveStaticOxcValues/candidateResolver.js +149 -0
- package/types/transform/generators/resolveStaticOxcValues/dependencies.d.ts +6 -0
- package/types/transform/generators/resolveStaticOxcValues/dependencies.js +37 -0
- package/types/transform/generators/resolveStaticOxcValues/environment.d.ts +12 -0
- package/types/transform/generators/resolveStaticOxcValues/environment.js +32 -0
- package/types/transform/generators/resolveStaticOxcValues/exportResolver.d.ts +4 -0
- package/types/transform/generators/resolveStaticOxcValues/exportResolver.js +358 -0
- package/types/transform/generators/resolveStaticOxcValues/exportTargets.d.ts +20 -0
- package/types/transform/generators/resolveStaticOxcValues/exportTargets.js +285 -0
- package/types/transform/generators/resolveStaticOxcValues/objectAssign.d.ts +41 -0
- package/types/transform/generators/resolveStaticOxcValues/objectAssign.js +352 -0
- package/types/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.d.ts +6 -0
- package/types/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js +88 -0
- package/types/transform/generators/resolveStaticOxcValues/opaqueRuntime.d.ts +13 -0
- package/types/transform/generators/resolveStaticOxcValues/opaqueRuntime.js +263 -0
- package/types/transform/generators/resolveStaticOxcValues/processorStaticExport.d.ts +4 -0
- package/types/transform/generators/resolveStaticOxcValues/processorStaticExport.js +191 -0
- package/types/transform/generators/resolveStaticOxcValues/processorStaticModel.d.ts +40 -0
- package/types/transform/generators/resolveStaticOxcValues/processorStaticModel.js +516 -0
- package/types/transform/generators/resolveStaticOxcValues/processorTarget.d.ts +5 -0
- package/types/transform/generators/resolveStaticOxcValues/processorTarget.js +62 -0
- package/types/transform/generators/resolveStaticOxcValues/programAnalysis.d.ts +11 -0
- package/types/transform/generators/resolveStaticOxcValues/programAnalysis.js +133 -0
- package/types/transform/generators/resolveStaticOxcValues/prune.d.ts +15 -0
- package/types/transform/generators/resolveStaticOxcValues/prune.js +220 -0
- package/types/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.d.ts +2 -0
- package/types/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js +197 -0
- package/types/transform/generators/resolveStaticOxcValues/staticExpression.d.ts +25 -0
- package/types/transform/generators/resolveStaticOxcValues/staticExpression.js +391 -0
- package/types/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.d.ts +14 -0
- package/types/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js +304 -0
- package/types/transform/generators/resolveStaticOxcValues/types.d.ts +99 -0
- package/types/transform/generators/resolveStaticOxcValues/types.js +2 -0
- package/types/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.d.ts +7 -0
- package/types/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js +64 -0
- package/types/transform/generators/resolveStaticOxcValues.d.ts +1 -2
- package/types/transform/generators/resolveStaticOxcValues.js +1 -3235
- package/types/transform/generators/transform.js +63 -49
- package/types/transform/helpers/loadWywOptions.js +23 -3
- package/types/transform.js +3 -1
- package/types/utils/EventEmitter.d.ts +16 -1
- package/types/utils/EventEmitter.js +44 -9
- package/types/utils/applyOxcProcessors/applyOxcProcessors.d.ts +8 -0
- package/types/utils/applyOxcProcessors/applyOxcProcessors.js +167 -0
- package/types/utils/applyOxcProcessors/cleanupBindings.d.ts +12 -0
- package/types/utils/applyOxcProcessors/cleanupBindings.js +189 -0
- package/types/utils/applyOxcProcessors/cleanupRemovals.d.ts +16 -0
- package/types/utils/applyOxcProcessors/cleanupRemovals.js +482 -0
- package/types/utils/applyOxcProcessors/displayName.d.ts +9 -0
- package/types/utils/applyOxcProcessors/displayName.js +113 -0
- package/types/utils/applyOxcProcessors/expressionValues.d.ts +11 -0
- package/types/utils/applyOxcProcessors/expressionValues.js +170 -0
- package/types/utils/applyOxcProcessors/processorFactory.d.ts +7 -0
- package/types/utils/applyOxcProcessors/processorFactory.js +70 -0
- package/types/utils/applyOxcProcessors/processorUsages.d.ts +16 -0
- package/types/utils/applyOxcProcessors/processorUsages.js +163 -0
- package/types/utils/applyOxcProcessors/sameFileStaticValues.d.ts +23 -0
- package/types/utils/applyOxcProcessors/sameFileStaticValues.js +211 -0
- package/types/utils/applyOxcProcessors/shared.d.ts +10 -0
- package/types/utils/applyOxcProcessors/shared.js +37 -0
- package/types/utils/applyOxcProcessors/types.d.ts +88 -0
- package/types/utils/applyOxcProcessors/types.js +1 -0
- package/types/utils/applyOxcProcessors.d.ts +1 -16
- package/types/utils/applyOxcProcessors.js +1 -1391
- package/types/utils/collectOxcRuntime/normalizeRuntimeCode.d.ts +1 -0
- package/types/utils/collectOxcRuntime/normalizeRuntimeCode.js +185 -0
- package/types/utils/collectOxcRuntime/sourceMap.d.ts +2 -0
- package/types/utils/collectOxcRuntime/sourceMap.js +37 -0
- package/types/utils/collectOxcRuntime/types.d.ts +16 -0
- package/types/utils/collectOxcRuntime/types.js +1 -0
- package/types/utils/collectOxcRuntime.d.ts +2 -12
- package/types/utils/collectOxcRuntime.js +5 -224
- package/types/utils/collectOxcTemplateDependencies/expressionExtraction.d.ts +6 -0
- package/types/utils/collectOxcTemplateDependencies/expressionExtraction.js +550 -0
- package/types/utils/collectOxcTemplateDependencies/expressionReplacements.d.ts +11 -0
- package/types/utils/collectOxcTemplateDependencies/expressionReplacements.js +131 -0
- package/types/utils/collectOxcTemplateDependencies/scopeAnalysis.d.ts +20 -0
- package/types/utils/collectOxcTemplateDependencies/scopeAnalysis.js +434 -0
- package/types/utils/collectOxcTemplateDependencies/staticBindings.d.ts +7 -0
- package/types/utils/collectOxcTemplateDependencies/staticBindings.js +13 -0
- package/types/utils/collectOxcTemplateDependencies/staticEvaluator.d.ts +13 -0
- package/types/utils/collectOxcTemplateDependencies/staticEvaluator.js +626 -0
- package/types/utils/collectOxcTemplateDependencies/types.d.ts +116 -0
- package/types/utils/collectOxcTemplateDependencies/types.js +1 -0
- package/types/utils/collectOxcTemplateDependencies.d.ts +4 -38
- package/types/utils/collectOxcTemplateDependencies.js +3 -1580
- package/types/utils/nativeResolver.d.ts +13 -0
- package/types/utils/nativeResolver.js +91 -0
- package/types/utils/oxc/ast.d.ts +4 -0
- package/types/utils/oxc/ast.js +37 -0
- package/types/utils/oxc/parse.d.ts +3 -0
- package/types/utils/oxc/parse.js +2 -0
- package/types/utils/oxc/replacements.d.ts +12 -0
- package/types/utils/oxc/replacements.js +18 -0
- package/types/utils/oxc/sourceLocations.d.ts +5 -0
- package/types/utils/oxc/sourceLocations.js +63 -0
- package/types/utils/oxcPreevalStage/evalStrategy.d.ts +3 -0
- package/types/utils/oxcPreevalStage/evalStrategy.js +2 -0
- package/types/utils/oxcPreevalStage/prepareCode.d.ts +3 -0
- package/types/utils/oxcPreevalStage/prepareCode.js +20 -0
- package/types/utils/oxcPreevalStage/prevalExport.d.ts +1 -0
- package/types/utils/oxcPreevalStage/prevalExport.js +22 -0
- package/types/utils/oxcPreevalStage/processors.d.ts +10 -0
- package/types/utils/oxcPreevalStage/processors.js +16 -0
- package/types/utils/oxcPreevalStage/staticOverlay.d.ts +3 -0
- package/types/utils/oxcPreevalStage/staticOverlay.js +23 -0
- package/types/utils/oxcPreevalStage/types.d.ts +22 -0
- package/types/utils/oxcPreevalStage/types.js +1 -0
- package/types/utils/oxcPreevalStage.d.ts +2 -18
- package/types/utils/oxcPreevalStage.js +17 -79
- package/types/utils/oxcPreevalTransforms.js +14 -1
- package/types/utils/processorStaticSemantics.d.ts +13 -0
- package/types/utils/processorStaticSemantics.js +191 -0
- package/types/utils/resolveWithConditions.js +3 -3
- package/esm/eval/resolverStrategy.js +0 -51
- package/esm/eval/resolverStrategy.js.map +0 -1
- package/types/eval/resolverStrategy.d.ts +0 -13
- package/types/eval/resolverStrategy.js +0 -46
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","names":[],"sources":["../../../../src/transform/generators/resolveStaticOxcValues/exportTargets.ts"],"version":3,"sourcesContent":["/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */\n\nimport type {\n ExportSpecifier,\n Expression,\n Node,\n Program,\n VariableDeclaration,\n} from 'oxc-parser';\n\nimport { collectLocalConstExpressions } from './programAnalysis';\nimport {\n collectImportBindings,\n moduleExportName,\n unwrapExpression,\n} from './staticExpression';\nimport type { ExportTarget } from './types';\n\nexport const getExportSpecifierNames = (\n specifier: ExportSpecifier\n): { exported: string; local: string } => ({\n exported: moduleExportName(specifier.exported),\n local: moduleExportName(specifier.local),\n});\n\nexport const findExportTarget = (\n program: Program,\n exportedName: string\n): ExportTarget | null => {\n const imports = collectImportBindings(program);\n const locals = collectLocalConstExpressions(program);\n\n for (const statement of program.body) {\n if (statement.type === 'ExportNamedDeclaration') {\n if (statement.source) {\n for (const specifier of statement.specifiers) {\n if (specifier.type !== 'ExportSpecifier') {\n continue;\n }\n\n const names = getExportSpecifierNames(specifier);\n if (names.exported === exportedName) {\n return {\n imported: names.local,\n kind: 'import',\n source: statement.source.value,\n };\n }\n }\n\n continue;\n }\n\n if (statement.declaration?.type === 'VariableDeclaration') {\n for (const declarator of statement.declaration.declarations) {\n if (\n declarator.id.type === 'Identifier' &&\n declarator.id.name === exportedName &&\n declarator.init\n ) {\n return {\n expression: declarator.init,\n kind: 'expression',\n localName: declarator.id.name,\n };\n }\n }\n\n continue;\n }\n\n for (const specifier of statement.specifiers) {\n if (specifier.type !== 'ExportSpecifier') {\n continue;\n }\n\n const names = getExportSpecifierNames(specifier);\n if (names.exported !== exportedName) {\n continue;\n }\n\n const importBinding = imports.get(names.local);\n if (importBinding) {\n return {\n imported: importBinding.imported,\n kind: 'import',\n source: importBinding.source,\n };\n }\n\n const local = locals.get(names.local);\n if (local) {\n return {\n expression: local,\n kind: 'expression',\n localName: names.local,\n };\n }\n }\n }\n\n if (\n exportedName === 'default' &&\n statement.type === 'ExportDefaultDeclaration'\n ) {\n const { declaration } = statement;\n if (declaration.type === 'Identifier') {\n const importBinding = imports.get(declaration.name);\n if (importBinding) {\n return {\n imported: importBinding.imported,\n kind: 'import',\n source: importBinding.source,\n };\n }\n\n const local = locals.get(declaration.name);\n if (local) {\n return {\n expression: local,\n kind: 'expression',\n localName: declaration.name,\n };\n }\n\n return null;\n }\n\n return {\n expression: declaration as Expression,\n kind: 'expression',\n };\n }\n }\n\n return null;\n};\n\nexport const exportedLocalName = (\n program: Program,\n exportedName: string\n): string | null => {\n for (const statement of program.body) {\n if (statement.type === 'ExportNamedDeclaration') {\n if (statement.source || statement.declaration) {\n continue;\n }\n\n for (const specifier of statement.specifiers) {\n if (specifier.type !== 'ExportSpecifier') {\n continue;\n }\n\n const names = getExportSpecifierNames(specifier);\n if (names.exported === exportedName) {\n return names.local;\n }\n }\n }\n\n if (\n exportedName === 'default' &&\n statement.type === 'ExportDefaultDeclaration' &&\n statement.declaration.type === 'Identifier'\n ) {\n return statement.declaration.name;\n }\n }\n\n return null;\n};\n\nexport const isIdentifierNamed = (node: Node, name: string): boolean =>\n node.type === 'Identifier' && node.name === name;\n\nexport const enumLiteralValue = (node: Node): number | string | null => {\n const unwrapped = unwrapExpression(node);\n if (unwrapped.type === 'Literal') {\n const { value } = unwrapped;\n return typeof value === 'string' || typeof value === 'number'\n ? value\n : null;\n }\n\n if (unwrapped.type === 'UnaryExpression') {\n const argument = unwrapExpression(unwrapped.argument);\n if (\n (unwrapped.operator === '-' || unwrapped.operator === '+') &&\n argument.type === 'Literal' &&\n typeof argument.value === 'number'\n ) {\n return unwrapped.operator === '-' ? -argument.value : argument.value;\n }\n }\n\n return null;\n};\n\nexport const enumMemberKey = (node: Node, computed: boolean): string | null => {\n const unwrapped = unwrapExpression(node);\n if (!computed && unwrapped.type === 'Identifier') {\n return unwrapped.name;\n }\n\n const value = enumLiteralValue(unwrapped);\n return typeof value === 'string' || typeof value === 'number'\n ? String(value)\n : null;\n};\n\nexport const enumSimpleAssignment = (\n node: Node,\n enumParamName: string\n): { key: string; value: number | string } | null => {\n const unwrapped = unwrapExpression(node);\n if (unwrapped.type !== 'AssignmentExpression' || unwrapped.operator !== '=') {\n return null;\n }\n\n const left = unwrapExpression(unwrapped.left);\n if (\n left.type !== 'MemberExpression' ||\n !isIdentifierNamed(unwrapExpression(left.object), enumParamName)\n ) {\n return null;\n }\n\n const key = enumMemberKey(left.property, left.computed);\n const value = enumLiteralValue(unwrapped.right);\n return key !== null && value !== null ? { key, value } : null;\n};\n\nexport const collectEnumIifeAssignments = (\n call: Node,\n localName: string\n): Record<string, number | string> | null => {\n const unwrapped = unwrapExpression(\n call.type === 'ExpressionStatement' ? call.expression : call\n );\n if (unwrapped.type !== 'CallExpression' || unwrapped.arguments.length !== 1) {\n return null;\n }\n\n const callee = unwrapExpression(unwrapped.callee);\n if (\n callee.type !== 'FunctionExpression' ||\n callee.async ||\n !callee.body ||\n callee.params.length !== 1 ||\n callee.params[0]?.type !== 'Identifier'\n ) {\n return null;\n }\n\n const enumParamName = callee.params[0].name;\n const argument = unwrapExpression(unwrapped.arguments[0]);\n if (argument.type !== 'LogicalExpression' || argument.operator !== '||') {\n return null;\n }\n\n const fallback = unwrapExpression(argument.right);\n if (\n !isIdentifierNamed(unwrapExpression(argument.left), localName) ||\n fallback.type !== 'AssignmentExpression' ||\n fallback.operator !== '=' ||\n !isIdentifierNamed(unwrapExpression(fallback.left), localName) ||\n unwrapExpression(fallback.right).type !== 'ObjectExpression'\n ) {\n return null;\n }\n\n const result: Record<string, number | string> = {};\n for (const statement of callee.body.body) {\n if (statement.type !== 'ExpressionStatement') {\n return null;\n }\n\n const expression = unwrapExpression(statement.expression);\n if (\n expression.type !== 'AssignmentExpression' ||\n expression.operator !== '='\n ) {\n return null;\n }\n\n const left = unwrapExpression(expression.left);\n if (\n left.type === 'MemberExpression' &&\n isIdentifierNamed(unwrapExpression(left.object), enumParamName)\n ) {\n const numericEnumAssignment = enumSimpleAssignment(\n left.property,\n enumParamName\n );\n const reverseValue = enumLiteralValue(expression.right);\n if (\n numericEnumAssignment &&\n typeof numericEnumAssignment.value === 'number' &&\n typeof reverseValue === 'string'\n ) {\n result[numericEnumAssignment.key] = numericEnumAssignment.value;\n result[String(numericEnumAssignment.value)] = reverseValue;\n continue;\n }\n }\n\n const assignment = enumSimpleAssignment(expression, enumParamName);\n if (!assignment) {\n return null;\n }\n\n result[assignment.key] = assignment.value;\n }\n\n return Object.keys(result).length > 0 ? result : null;\n};\n\nexport const enumIifeLocalName = (statement: Node): string | null => {\n if (statement.type !== 'ExpressionStatement') {\n return null;\n }\n\n const expression = unwrapExpression(statement.expression);\n if (\n expression.type !== 'CallExpression' ||\n expression.arguments.length !== 1\n ) {\n return null;\n }\n\n const argument = unwrapExpression(expression.arguments[0]);\n if (argument.type !== 'LogicalExpression' || argument.operator !== '||') {\n return null;\n }\n\n const fallback = unwrapExpression(argument.right);\n if (\n argument.left.type !== 'Identifier' ||\n fallback.type !== 'AssignmentExpression' ||\n fallback.left.type !== 'Identifier'\n ) {\n return null;\n }\n\n return argument.left.name === fallback.left.name ? argument.left.name : null;\n};\n\nexport const isEnumVarDeclaration = (\n statement: Node\n): statement is VariableDeclaration =>\n statement.type === 'VariableDeclaration' &&\n statement.kind === 'var' &&\n statement.declarations.length > 0 &&\n statement.declarations.every(\n (declarator) =>\n declarator.id.type === 'Identifier' && declarator.init === null\n );\n\nexport const isTypeScriptEnumOnlyModule = (program: Program): boolean =>\n program.body.every((statement) => {\n if (isEnumVarDeclaration(statement)) {\n return true;\n }\n\n const localName = enumIifeLocalName(statement);\n if (localName) {\n return collectEnumIifeAssignments(statement, localName) !== null;\n }\n\n if (statement.type === 'ExportDefaultDeclaration') {\n return statement.declaration.type === 'Identifier';\n }\n\n return (\n statement.type === 'ExportNamedDeclaration' &&\n !statement.source &&\n !statement.declaration &&\n statement.specifiers.every(\n (specifier) => specifier.type === 'ExportSpecifier'\n )\n );\n });\n\nexport const typeScriptEnumStaticExportValue = (\n program: Program,\n exportedName: string\n): Record<string, number | string> | null => {\n if (!isTypeScriptEnumOnlyModule(program)) {\n return null;\n }\n\n const localName = exportedLocalName(program, exportedName);\n if (!localName) {\n return null;\n }\n\n const hasDeclaration = program.body.some(\n (statement) =>\n isEnumVarDeclaration(statement) &&\n statement.declarations.some(\n (declarator) =>\n declarator.id.type === 'Identifier' &&\n declarator.id.name === localName\n )\n );\n if (!hasDeclaration) {\n return null;\n }\n\n for (const statement of program.body) {\n const enumValue = collectEnumIifeAssignments(statement, localName);\n if (enumValue) {\n return enumValue;\n }\n }\n\n return null;\n};\n"],"file":"exportTargets.js"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { evaluateOxcStaticExpressionAt } from "../../../utils/collectOxcTemplateDependencies.js";
|
|
2
|
+
import { getOxcNodeChildren } from "../../../utils/oxc/ast.js";
|
|
3
|
+
import { getStaticBindings } from "./environment.js";
|
|
4
|
+
import { findExportTarget } from "./exportTargets.js";
|
|
5
|
+
import { findTopLevelConstExpression, hasTopLevelBinding, objectPropertyKeyName, topLevelStatements } from "./programAnalysis.js";
|
|
6
|
+
import { isPlainObjectRecord, isStaticObjectAssignAliasValue, isStaticWYWMetaValue } from "./processorStaticModel.js";
|
|
7
|
+
import { bindStaticResolvedValue, isSafeStaticExpression, unwrapExpression } from "./staticExpression.js";
|
|
8
|
+
import { collectStaticExpressionDependencies, rootIdentifierName, staticMemberName } from "./staticExpressionDependencies.js";
|
|
9
|
+
export const isObjectAssignCallee = (program, expr) => {
|
|
10
|
+
const unwrapped = unwrapExpression(expr);
|
|
11
|
+
if (unwrapped.type !== "MemberExpression" || unwrapped.computed) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
const methodName = staticMemberName(unwrapped.property);
|
|
15
|
+
return methodName === "assign" && unwrapped.object.type === "Identifier" && unwrapped.object.name === "Object" && !hasTopLevelBinding(program, "Object");
|
|
16
|
+
};
|
|
17
|
+
export const isSafeObjectAssignAliasExpression = (program, expr, seen = new Set()) => {
|
|
18
|
+
const unwrapped = unwrapExpression(expr);
|
|
19
|
+
if (unwrapped.type === "Identifier") {
|
|
20
|
+
if (seen.has(unwrapped.name)) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const local = findTopLevelConstExpression(program, unwrapped.name);
|
|
24
|
+
if (!local) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
seen.add(unwrapped.name);
|
|
28
|
+
const result = isSafeObjectAssignAliasExpression(program, local, seen);
|
|
29
|
+
seen.delete(unwrapped.name);
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
if (unwrapped.type !== "ObjectExpression") {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return unwrapped.properties.every((property) => {
|
|
36
|
+
if (property.type === "SpreadElement") {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
const propertyNode = property;
|
|
40
|
+
if (propertyNode.computed || propertyNode.method || !propertyNode.value || typeof propertyNode.value !== "object") {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
return isSafeStaticExpression(propertyNode.value);
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
export const objectAssignTargetExpression = (program, expr) => {
|
|
47
|
+
const unwrapped = unwrapExpression(expr);
|
|
48
|
+
if (unwrapped.type !== "CallExpression" || !isObjectAssignCallee(program, unwrapped.callee) || unwrapped.arguments.length < 2) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const [target, ...aliases] = unwrapped.arguments;
|
|
52
|
+
if (!target || target.type === "SpreadElement") {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
if (aliases.some((alias) => alias.type === "SpreadElement" || !isSafeObjectAssignAliasExpression(program, alias))) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
return target;
|
|
59
|
+
};
|
|
60
|
+
export const objectAssignAliasExpressions = (program, expr) => {
|
|
61
|
+
const unwrapped = unwrapExpression(expr);
|
|
62
|
+
if (unwrapped.type !== "CallExpression" || !isObjectAssignCallee(program, unwrapped.callee) || unwrapped.arguments.length < 2) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
const [, ...aliases] = unwrapped.arguments;
|
|
66
|
+
if (aliases.some((alias) => alias.type === "SpreadElement" || !isSafeObjectAssignAliasExpression(program, alias))) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
return aliases;
|
|
70
|
+
};
|
|
71
|
+
export const isFunctionBoundaryNode = (node) => node.type === "ArrowFunctionExpression" || node.type === "FunctionDeclaration" || node.type === "FunctionExpression" || node.type === "ClassDeclaration" || node.type === "ClassExpression";
|
|
72
|
+
export const callHasArgumentRootName = (expr, targetName) => {
|
|
73
|
+
const unwrapped = unwrapExpression(expr);
|
|
74
|
+
return unwrapped.type === "CallExpression" && unwrapped.arguments.some((argument) => {
|
|
75
|
+
const argumentNode = argument.type === "SpreadElement" ? argument.argument : argument;
|
|
76
|
+
return rootIdentifierName(argumentNode) === targetName;
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
export const isSafeObjectAssignAliasAugmentation = (program, expr, targetName) => {
|
|
80
|
+
const unwrapped = unwrapExpression(expr);
|
|
81
|
+
if (unwrapped.type !== "CallExpression" || !isObjectAssignCallee(program, unwrapped.callee) || unwrapped.arguments.length < 2) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
const [target, ...aliases] = unwrapped.arguments;
|
|
85
|
+
if (!target || target.type === "SpreadElement") {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
const unwrappedTarget = unwrapExpression(target);
|
|
89
|
+
if (unwrappedTarget.type !== "Identifier" || unwrappedTarget.name !== targetName) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
return aliases.every((alias) => alias.type !== "SpreadElement" && isSafeObjectAssignAliasExpression(program, alias));
|
|
93
|
+
};
|
|
94
|
+
export const hasOnlySafeObjectAssignCallArgumentUses = (program, targetName) => {
|
|
95
|
+
let hasSafeUse = false;
|
|
96
|
+
let hasUnsafeUse = false;
|
|
97
|
+
const visit = (node) => {
|
|
98
|
+
if (hasUnsafeUse || isFunctionBoundaryNode(node)) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const unwrapped = unwrapExpression(node);
|
|
102
|
+
if (unwrapped.type === "CallExpression") {
|
|
103
|
+
if (callHasArgumentRootName(unwrapped, targetName)) {
|
|
104
|
+
if (isSafeObjectAssignAliasAugmentation(program, unwrapped, targetName)) {
|
|
105
|
+
hasSafeUse = true;
|
|
106
|
+
} else {
|
|
107
|
+
hasUnsafeUse = true;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
getOxcNodeChildren(node).forEach(visit);
|
|
113
|
+
};
|
|
114
|
+
topLevelStatements(program).forEach(visit);
|
|
115
|
+
return hasSafeUse && !hasUnsafeUse;
|
|
116
|
+
};
|
|
117
|
+
export const objectAssignAugmentationAliasExpressions = (program, targetName) => {
|
|
118
|
+
const aliases = [];
|
|
119
|
+
let hasUnsafeUse = false;
|
|
120
|
+
const visit = (node) => {
|
|
121
|
+
if (hasUnsafeUse || isFunctionBoundaryNode(node)) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const unwrapped = unwrapExpression(node);
|
|
125
|
+
if (unwrapped.type === "CallExpression") {
|
|
126
|
+
if (callHasArgumentRootName(unwrapped, targetName)) {
|
|
127
|
+
if (isSafeObjectAssignAliasAugmentation(program, unwrapped, targetName)) {
|
|
128
|
+
const [, ...nextAliases] = unwrapped.arguments;
|
|
129
|
+
aliases.push(...nextAliases);
|
|
130
|
+
} else {
|
|
131
|
+
hasUnsafeUse = true;
|
|
132
|
+
}
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
getOxcNodeChildren(node).forEach(visit);
|
|
137
|
+
};
|
|
138
|
+
topLevelStatements(program).forEach(visit);
|
|
139
|
+
return !hasUnsafeUse && aliases.length > 0 ? aliases : null;
|
|
140
|
+
};
|
|
141
|
+
export const objectAssignAliasExpressionsForTarget = (program, target) => {
|
|
142
|
+
const aliases = [...objectAssignAliasExpressions(program, target.expression) ?? [], ...target.localName ? objectAssignAugmentationAliasExpressions(program, target.localName) ?? [] : []];
|
|
143
|
+
return aliases.length > 0 ? aliases : null;
|
|
144
|
+
};
|
|
145
|
+
export const resolveObjectAssignProcessorExpression = (program, expr) => {
|
|
146
|
+
const objectAssignTarget = objectAssignTargetExpression(program, expr);
|
|
147
|
+
const target = objectAssignTarget ?? expr;
|
|
148
|
+
if (target.type !== "Identifier") {
|
|
149
|
+
return target;
|
|
150
|
+
}
|
|
151
|
+
return findTopLevelConstExpression(program, target.name) ?? target;
|
|
152
|
+
};
|
|
153
|
+
export const mergeStaticObjectAssignAliases = (targetValue, aliasValues) => {
|
|
154
|
+
if (!isPlainObjectRecord(targetValue) || !isStaticWYWMetaValue(targetValue)) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
const result = { ...targetValue };
|
|
158
|
+
aliasValues.forEach((aliasValue) => {
|
|
159
|
+
Object.assign(result, aliasValue);
|
|
160
|
+
});
|
|
161
|
+
return result;
|
|
162
|
+
};
|
|
163
|
+
export const objectAssignAliasObjectExpression = (program, alias, seen = new Set()) => {
|
|
164
|
+
const unwrapped = unwrapExpression(alias);
|
|
165
|
+
if (unwrapped.type === "ObjectExpression") {
|
|
166
|
+
return unwrapped;
|
|
167
|
+
}
|
|
168
|
+
if (unwrapped.type !== "Identifier" || seen.has(unwrapped.name)) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
const local = findTopLevelConstExpression(program, unwrapped.name);
|
|
172
|
+
if (!local) {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
seen.add(unwrapped.name);
|
|
176
|
+
const result = objectAssignAliasObjectExpression(program, local, seen);
|
|
177
|
+
seen.delete(unwrapped.name);
|
|
178
|
+
return result;
|
|
179
|
+
};
|
|
180
|
+
export const objectAssignAliasPropertyEntries = (program, alias) => {
|
|
181
|
+
const aliasObject = objectAssignAliasObjectExpression(program, alias);
|
|
182
|
+
if (!aliasObject || aliasObject.type !== "ObjectExpression") {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
const entries = [];
|
|
186
|
+
for (const property of aliasObject.properties) {
|
|
187
|
+
if (property.type === "SpreadElement") {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
const propertyNode = property;
|
|
191
|
+
if (propertyNode.computed || propertyNode.method || !propertyNode.key || !propertyNode.value || typeof propertyNode.key !== "object" || typeof propertyNode.value !== "object") {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
const key = objectPropertyKeyName(propertyNode.key);
|
|
195
|
+
if (!key) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
entries.push({
|
|
199
|
+
key,
|
|
200
|
+
value: propertyNode.value
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
return entries;
|
|
204
|
+
};
|
|
205
|
+
export function* resolveObjectAssignAliasExpressionValue(action, filename, code, program, expression, ignoredMutableCallArgumentNames, stack, memo, resolvers) {
|
|
206
|
+
const staticDependencies = collectStaticExpressionDependencies(program, {
|
|
207
|
+
expression,
|
|
208
|
+
kind: "expression"
|
|
209
|
+
}, {
|
|
210
|
+
allowMetadataCalls: true,
|
|
211
|
+
ignoredMutableCallArgumentNames
|
|
212
|
+
});
|
|
213
|
+
if (!staticDependencies) {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
const env = new Map();
|
|
217
|
+
const dependencies = new Set();
|
|
218
|
+
const sideEffectDependencies = new Set();
|
|
219
|
+
for (const binding of staticDependencies.imports) {
|
|
220
|
+
const resolved = yield* resolvers.resolveImportValue(action, filename, binding, stack, memo);
|
|
221
|
+
if (!resolved || !bindStaticResolvedValue(env, expression, binding.local, resolved)) {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
resolved.dependencies.forEach((item) => dependencies.add(item));
|
|
225
|
+
resolved.sideEffectDependencies?.forEach((item) => sideEffectDependencies.add(item));
|
|
226
|
+
}
|
|
227
|
+
const value = evaluateOxcStaticExpressionAt(code, filename, {
|
|
228
|
+
end: expression.end,
|
|
229
|
+
start: expression.start
|
|
230
|
+
}, env, getStaticBindings(action));
|
|
231
|
+
return isStaticObjectAssignAliasValue(value) ? {
|
|
232
|
+
dependencies: [...dependencies],
|
|
233
|
+
sideEffectDependencies: [...sideEffectDependencies],
|
|
234
|
+
value
|
|
235
|
+
} : null;
|
|
236
|
+
}
|
|
237
|
+
export function* resolveObjectAssignAliasPropertyValue(action, filename, code, program, expression, ignoredMutableCallArgumentNames, stack, memo, resolvers) {
|
|
238
|
+
const expressionValue = yield* resolveObjectAssignAliasExpressionValue(action, filename, code, program, expression, ignoredMutableCallArgumentNames, stack, memo, resolvers);
|
|
239
|
+
if (expressionValue) {
|
|
240
|
+
return expressionValue;
|
|
241
|
+
}
|
|
242
|
+
const unwrapped = unwrapExpression(expression);
|
|
243
|
+
if (unwrapped.type !== "Identifier" || !findExportTarget(program, unwrapped.name)) {
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
const resolved = yield* resolvers.resolveStaticExport(action, filename, unwrapped.name, stack, memo);
|
|
247
|
+
return resolved && isStaticObjectAssignAliasValue(resolved.value) ? {
|
|
248
|
+
dependencies: resolved.dependencies,
|
|
249
|
+
sideEffectDependencies: resolved.sideEffectDependencies ?? [],
|
|
250
|
+
value: resolved.value
|
|
251
|
+
} : null;
|
|
252
|
+
}
|
|
253
|
+
export function* resolveObjectAssignAliasValue(action, filename, code, program, alias, ignoredMutableCallArgumentNames, stack, memo, resolvers) {
|
|
254
|
+
const aliasValue = yield* resolveObjectAssignAliasExpressionValue(action, filename, code, program, alias, ignoredMutableCallArgumentNames, stack, memo, resolvers);
|
|
255
|
+
if (aliasValue && isPlainObjectRecord(aliasValue.value)) {
|
|
256
|
+
return Object.values(aliasValue.value).every(isStaticObjectAssignAliasValue) ? {
|
|
257
|
+
dependencies: aliasValue.dependencies,
|
|
258
|
+
sideEffectDependencies: aliasValue.sideEffectDependencies,
|
|
259
|
+
value: aliasValue.value
|
|
260
|
+
} : null;
|
|
261
|
+
}
|
|
262
|
+
const entries = objectAssignAliasPropertyEntries(program, alias);
|
|
263
|
+
if (!entries) {
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
const dependencies = new Set();
|
|
267
|
+
const sideEffectDependencies = new Set();
|
|
268
|
+
const value = {};
|
|
269
|
+
for (const entry of entries) {
|
|
270
|
+
const resolved = yield* resolveObjectAssignAliasPropertyValue(action, filename, code, program, entry.value, ignoredMutableCallArgumentNames, stack, memo, resolvers);
|
|
271
|
+
if (!resolved || !isStaticObjectAssignAliasValue(resolved.value)) {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
value[entry.key] = resolved.value;
|
|
275
|
+
resolved.dependencies.forEach((item) => dependencies.add(item));
|
|
276
|
+
resolved.sideEffectDependencies.forEach((item) => sideEffectDependencies.add(item));
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
dependencies: [...dependencies],
|
|
280
|
+
sideEffectDependencies: [...sideEffectDependencies],
|
|
281
|
+
value
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
export function* resolveObjectAssignAliasValues(action, filename, code, program, aliases, stack, memo, resolvers) {
|
|
285
|
+
const dependencies = new Set();
|
|
286
|
+
const sideEffectDependencies = new Set();
|
|
287
|
+
const values = [];
|
|
288
|
+
const ignoredMutableCallArgumentNames = new Set();
|
|
289
|
+
aliases.forEach((alias) => {
|
|
290
|
+
const name = rootIdentifierName(alias);
|
|
291
|
+
if (name) {
|
|
292
|
+
ignoredMutableCallArgumentNames.add(name);
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
for (const alias of aliases) {
|
|
296
|
+
const aliasValue = yield* resolveObjectAssignAliasValue(action, filename, code, program, alias, ignoredMutableCallArgumentNames, stack, memo, resolvers);
|
|
297
|
+
if (!aliasValue) {
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
aliasValue.dependencies.forEach((item) => dependencies.add(item));
|
|
301
|
+
aliasValue.sideEffectDependencies.forEach((item) => sideEffectDependencies.add(item));
|
|
302
|
+
values.push(aliasValue.value);
|
|
303
|
+
}
|
|
304
|
+
return {
|
|
305
|
+
dependencies: [...dependencies],
|
|
306
|
+
sideEffectDependencies: [...sideEffectDependencies],
|
|
307
|
+
values
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=objectAssign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","names":[],"sources":["../../../../src/transform/generators/resolveStaticOxcValues/objectAssign.ts"],"version":3,"sourcesContent":["/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */\n\nimport type { Expression, Node, Program } from 'oxc-parser';\n\nimport { evaluateOxcStaticExpressionAt } from '../../../utils/collectOxcTemplateDependencies';\nimport { getOxcNodeChildren } from '../../../utils/oxc/ast';\nimport type { ITransformAction, SyncScenarioFor } from '../../types';\nimport { getStaticBindings } from './environment';\nimport { findExportTarget } from './exportTargets';\nimport {\n findTopLevelConstExpression,\n hasTopLevelBinding,\n objectPropertyKeyName,\n topLevelStatements,\n} from './programAnalysis';\nimport {\n isPlainObjectRecord,\n isStaticObjectAssignAliasValue,\n isStaticWYWMetaValue,\n} from './processorStaticModel';\nimport {\n bindStaticResolvedValue,\n isSafeStaticExpression,\n unwrapExpression,\n} from './staticExpression';\nimport {\n collectStaticExpressionDependencies,\n rootIdentifierName,\n staticMemberName,\n} from './staticExpressionDependencies';\nimport type {\n AnyNode,\n ExportTarget,\n StaticExportResolverContext,\n StaticExportResult,\n} from './types';\n\nexport const isObjectAssignCallee = (program: Program, expr: Node): boolean => {\n const unwrapped = unwrapExpression(expr);\n if (unwrapped.type !== 'MemberExpression' || unwrapped.computed) {\n return false;\n }\n\n const methodName = staticMemberName(unwrapped.property);\n return (\n methodName === 'assign' &&\n unwrapped.object.type === 'Identifier' &&\n unwrapped.object.name === 'Object' &&\n !hasTopLevelBinding(program, 'Object')\n );\n};\n\nexport const isSafeObjectAssignAliasExpression = (\n program: Program,\n expr: Node,\n seen: Set<string> = new Set()\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n\n if (unwrapped.type === 'Identifier') {\n if (seen.has(unwrapped.name)) {\n return false;\n }\n\n const local = findTopLevelConstExpression(program, unwrapped.name);\n if (!local) {\n return false;\n }\n\n seen.add(unwrapped.name);\n const result = isSafeObjectAssignAliasExpression(program, local, seen);\n seen.delete(unwrapped.name);\n return result;\n }\n\n if (unwrapped.type !== 'ObjectExpression') {\n return false;\n }\n\n return unwrapped.properties.every((property) => {\n if (property.type === 'SpreadElement') {\n return false;\n }\n\n const propertyNode = property as AnyNode;\n if (\n propertyNode.computed ||\n propertyNode.method ||\n !propertyNode.value ||\n typeof propertyNode.value !== 'object'\n ) {\n return false;\n }\n\n return isSafeStaticExpression(propertyNode.value as Node);\n });\n};\n\nexport const objectAssignTargetExpression = (\n program: Program,\n expr: Node\n): Expression | null => {\n const unwrapped = unwrapExpression(expr);\n if (\n unwrapped.type !== 'CallExpression' ||\n !isObjectAssignCallee(program, unwrapped.callee) ||\n unwrapped.arguments.length < 2\n ) {\n return null;\n }\n\n const [target, ...aliases] = unwrapped.arguments;\n if (!target || target.type === 'SpreadElement') {\n return null;\n }\n\n if (\n aliases.some(\n (alias) =>\n alias.type === 'SpreadElement' ||\n !isSafeObjectAssignAliasExpression(program, alias)\n )\n ) {\n return null;\n }\n\n return target;\n};\n\nexport const objectAssignAliasExpressions = (\n program: Program,\n expr: Node\n): Expression[] | null => {\n const unwrapped = unwrapExpression(expr);\n if (\n unwrapped.type !== 'CallExpression' ||\n !isObjectAssignCallee(program, unwrapped.callee) ||\n unwrapped.arguments.length < 2\n ) {\n return null;\n }\n\n const [, ...aliases] = unwrapped.arguments;\n if (\n aliases.some(\n (alias) =>\n alias.type === 'SpreadElement' ||\n !isSafeObjectAssignAliasExpression(program, alias)\n )\n ) {\n return null;\n }\n\n return aliases as Expression[];\n};\n\nexport const isFunctionBoundaryNode = (node: Node): boolean =>\n node.type === 'ArrowFunctionExpression' ||\n node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression' ||\n node.type === 'ClassDeclaration' ||\n node.type === 'ClassExpression';\n\nexport const callHasArgumentRootName = (\n expr: Node,\n targetName: string\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n return (\n unwrapped.type === 'CallExpression' &&\n unwrapped.arguments.some((argument) => {\n const argumentNode =\n argument.type === 'SpreadElement' ? argument.argument : argument;\n return rootIdentifierName(argumentNode) === targetName;\n })\n );\n};\n\nexport const isSafeObjectAssignAliasAugmentation = (\n program: Program,\n expr: Node,\n targetName: string\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n if (\n unwrapped.type !== 'CallExpression' ||\n !isObjectAssignCallee(program, unwrapped.callee) ||\n unwrapped.arguments.length < 2\n ) {\n return false;\n }\n\n const [target, ...aliases] = unwrapped.arguments;\n if (!target || target.type === 'SpreadElement') {\n return false;\n }\n\n const unwrappedTarget = unwrapExpression(target);\n if (\n unwrappedTarget.type !== 'Identifier' ||\n unwrappedTarget.name !== targetName\n ) {\n return false;\n }\n\n return aliases.every(\n (alias) =>\n alias.type !== 'SpreadElement' &&\n isSafeObjectAssignAliasExpression(program, alias)\n );\n};\n\nexport const hasOnlySafeObjectAssignCallArgumentUses = (\n program: Program,\n targetName: string\n): boolean => {\n let hasSafeUse = false;\n let hasUnsafeUse = false;\n\n const visit = (node: Node): void => {\n if (hasUnsafeUse || isFunctionBoundaryNode(node)) {\n return;\n }\n\n const unwrapped = unwrapExpression(node);\n if (unwrapped.type === 'CallExpression') {\n if (callHasArgumentRootName(unwrapped, targetName)) {\n if (\n isSafeObjectAssignAliasAugmentation(program, unwrapped, targetName)\n ) {\n hasSafeUse = true;\n } else {\n hasUnsafeUse = true;\n return;\n }\n }\n }\n\n getOxcNodeChildren(node).forEach(visit);\n };\n\n topLevelStatements(program).forEach(visit);\n return hasSafeUse && !hasUnsafeUse;\n};\n\nexport const objectAssignAugmentationAliasExpressions = (\n program: Program,\n targetName: string\n): Expression[] | null => {\n const aliases: Expression[] = [];\n let hasUnsafeUse = false;\n\n const visit = (node: Node): void => {\n if (hasUnsafeUse || isFunctionBoundaryNode(node)) {\n return;\n }\n\n const unwrapped = unwrapExpression(node);\n if (unwrapped.type === 'CallExpression') {\n if (callHasArgumentRootName(unwrapped, targetName)) {\n if (\n isSafeObjectAssignAliasAugmentation(program, unwrapped, targetName)\n ) {\n const [, ...nextAliases] = unwrapped.arguments;\n aliases.push(...(nextAliases as Expression[]));\n } else {\n hasUnsafeUse = true;\n }\n\n return;\n }\n }\n\n getOxcNodeChildren(node).forEach(visit);\n };\n\n topLevelStatements(program).forEach(visit);\n return !hasUnsafeUse && aliases.length > 0 ? aliases : null;\n};\n\nexport const objectAssignAliasExpressionsForTarget = (\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>\n): Expression[] | null => {\n const aliases = [\n ...(objectAssignAliasExpressions(program, target.expression) ?? []),\n ...(target.localName\n ? objectAssignAugmentationAliasExpressions(program, target.localName) ??\n []\n : []),\n ];\n\n return aliases.length > 0 ? aliases : null;\n};\n\nexport const resolveObjectAssignProcessorExpression = (\n program: Program,\n expr: Expression\n): Expression => {\n const objectAssignTarget = objectAssignTargetExpression(program, expr);\n const target = objectAssignTarget ?? expr;\n\n if (target.type !== 'Identifier') {\n return target;\n }\n\n return findTopLevelConstExpression(program, target.name) ?? target;\n};\n\nexport type ObjectAssignAliasResolution = {\n dependencies: string[];\n sideEffectDependencies: string[];\n values: Record<string, unknown>[];\n};\n\nexport type ObjectAssignAliasPropertyResolution = {\n dependencies: string[];\n sideEffectDependencies: string[];\n value: unknown;\n};\n\nexport type ObjectAssignAliasPropertyEntry = {\n key: string;\n value: Expression;\n};\n\nexport const mergeStaticObjectAssignAliases = (\n targetValue: unknown,\n aliasValues: Record<string, unknown>[]\n): unknown | null => {\n if (!isPlainObjectRecord(targetValue) || !isStaticWYWMetaValue(targetValue)) {\n return null;\n }\n\n const result: Record<string, unknown> = { ...targetValue };\n aliasValues.forEach((aliasValue) => {\n Object.assign(result, aliasValue);\n });\n\n return result;\n};\n\nexport const objectAssignAliasObjectExpression = (\n program: Program,\n alias: Expression,\n seen: Set<string> = new Set()\n): Expression | null => {\n const unwrapped = unwrapExpression(alias);\n if (unwrapped.type === 'ObjectExpression') {\n return unwrapped as Expression;\n }\n\n if (unwrapped.type !== 'Identifier' || seen.has(unwrapped.name)) {\n return null;\n }\n\n const local = findTopLevelConstExpression(program, unwrapped.name);\n if (!local) {\n return null;\n }\n\n seen.add(unwrapped.name);\n const result = objectAssignAliasObjectExpression(program, local, seen);\n seen.delete(unwrapped.name);\n return result;\n};\n\nexport const objectAssignAliasPropertyEntries = (\n program: Program,\n alias: Expression\n): ObjectAssignAliasPropertyEntry[] | null => {\n const aliasObject = objectAssignAliasObjectExpression(program, alias);\n if (!aliasObject || aliasObject.type !== 'ObjectExpression') {\n return null;\n }\n\n const entries: ObjectAssignAliasPropertyEntry[] = [];\n for (const property of aliasObject.properties) {\n if (property.type === 'SpreadElement') {\n return null;\n }\n\n const propertyNode = property as AnyNode;\n if (\n propertyNode.computed ||\n propertyNode.method ||\n !propertyNode.key ||\n !propertyNode.value ||\n typeof propertyNode.key !== 'object' ||\n typeof propertyNode.value !== 'object'\n ) {\n return null;\n }\n\n const key = objectPropertyKeyName(propertyNode.key as Node);\n if (!key) {\n return null;\n }\n\n entries.push({\n key,\n value: propertyNode.value as Expression,\n });\n }\n\n return entries;\n};\n\nexport function* resolveObjectAssignAliasExpressionValue(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n expression: Expression,\n ignoredMutableCallArgumentNames: Set<string>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>,\n resolvers: StaticExportResolverContext\n): SyncScenarioFor<ObjectAssignAliasPropertyResolution | null> {\n const staticDependencies = collectStaticExpressionDependencies(\n program,\n {\n expression,\n kind: 'expression',\n },\n {\n allowMetadataCalls: true,\n ignoredMutableCallArgumentNames,\n }\n );\n if (!staticDependencies) {\n return null;\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>();\n const sideEffectDependencies = new Set<string>();\n\n for (const binding of staticDependencies.imports) {\n const resolved = yield* resolvers.resolveImportValue(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (\n !resolved ||\n !bindStaticResolvedValue(env, expression, binding.local, resolved)\n ) {\n return null;\n }\n\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies?.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n const value = evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: expression.end,\n start: expression.start,\n },\n env,\n getStaticBindings(action)\n );\n return isStaticObjectAssignAliasValue(value)\n ? {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value,\n }\n : null;\n}\n\nexport function* resolveObjectAssignAliasPropertyValue(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n expression: Expression,\n ignoredMutableCallArgumentNames: Set<string>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>,\n resolvers: StaticExportResolverContext\n): SyncScenarioFor<ObjectAssignAliasPropertyResolution | null> {\n const expressionValue = yield* resolveObjectAssignAliasExpressionValue(\n action,\n filename,\n code,\n program,\n expression,\n ignoredMutableCallArgumentNames,\n stack,\n memo,\n resolvers\n );\n if (expressionValue) {\n return expressionValue;\n }\n\n const unwrapped = unwrapExpression(expression);\n if (\n unwrapped.type !== 'Identifier' ||\n !findExportTarget(program, unwrapped.name)\n ) {\n return null;\n }\n\n const resolved = yield* resolvers.resolveStaticExport(\n action,\n filename,\n unwrapped.name,\n stack,\n memo\n );\n return resolved && isStaticObjectAssignAliasValue(resolved.value)\n ? {\n dependencies: resolved.dependencies,\n sideEffectDependencies: resolved.sideEffectDependencies ?? [],\n value: resolved.value,\n }\n : null;\n}\n\nexport function* resolveObjectAssignAliasValue(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n alias: Expression,\n ignoredMutableCallArgumentNames: Set<string>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>,\n resolvers: StaticExportResolverContext\n): SyncScenarioFor<{\n dependencies: string[];\n sideEffectDependencies: string[];\n value: Record<string, unknown>;\n} | null> {\n const aliasValue = yield* resolveObjectAssignAliasExpressionValue(\n action,\n filename,\n code,\n program,\n alias,\n ignoredMutableCallArgumentNames,\n stack,\n memo,\n resolvers\n );\n if (aliasValue && isPlainObjectRecord(aliasValue.value)) {\n return Object.values(aliasValue.value).every(isStaticObjectAssignAliasValue)\n ? {\n dependencies: aliasValue.dependencies,\n sideEffectDependencies: aliasValue.sideEffectDependencies,\n value: aliasValue.value,\n }\n : null;\n }\n\n const entries = objectAssignAliasPropertyEntries(program, alias);\n if (!entries) {\n return null;\n }\n\n const dependencies = new Set<string>();\n const sideEffectDependencies = new Set<string>();\n const value: Record<string, unknown> = {};\n\n for (const entry of entries) {\n const resolved = yield* resolveObjectAssignAliasPropertyValue(\n action,\n filename,\n code,\n program,\n entry.value,\n ignoredMutableCallArgumentNames,\n stack,\n memo,\n resolvers\n );\n if (!resolved || !isStaticObjectAssignAliasValue(resolved.value)) {\n return null;\n }\n\n value[entry.key] = resolved.value;\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value,\n };\n}\n\nexport function* resolveObjectAssignAliasValues(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n aliases: Expression[],\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>,\n resolvers: StaticExportResolverContext\n): SyncScenarioFor<ObjectAssignAliasResolution | null> {\n const dependencies = new Set<string>();\n const sideEffectDependencies = new Set<string>();\n const values: Record<string, unknown>[] = [];\n const ignoredMutableCallArgumentNames = new Set<string>();\n aliases.forEach((alias) => {\n const name = rootIdentifierName(alias);\n if (name) {\n ignoredMutableCallArgumentNames.add(name);\n }\n });\n\n for (const alias of aliases) {\n const aliasValue = yield* resolveObjectAssignAliasValue(\n action,\n filename,\n code,\n program,\n alias,\n ignoredMutableCallArgumentNames,\n stack,\n memo,\n resolvers\n );\n if (!aliasValue) {\n return null;\n }\n\n aliasValue.dependencies.forEach((item) => dependencies.add(item));\n aliasValue.sideEffectDependencies.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n values.push(aliasValue.value);\n }\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n values,\n };\n}\n"],"file":"objectAssign.js"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { evaluateOxcStaticExpressionAt } from "../../../utils/collectOxcTemplateDependencies.js";
|
|
2
|
+
import { getStaticBindings } from "./environment.js";
|
|
3
|
+
import { findTopLevelConstExpression } from "./programAnalysis.js";
|
|
4
|
+
import { collectImportBindings, bindStaticResolvedValue } from "./staticExpression.js";
|
|
5
|
+
import { collectStaticExpressionDependencies } from "./staticExpressionDependencies.js";
|
|
6
|
+
import { mergeStaticObjectAssignAliases, objectAssignAliasExpressionsForTarget, objectAssignTargetExpression, resolveObjectAssignAliasValues } from "./objectAssign.js";
|
|
7
|
+
import { isStaticWYWMetaValue } from "./processorStaticModel.js";
|
|
8
|
+
export function* resolveObjectAssignStaticExport(action, filename, code, program, target, stack, memo, resolvers) {
|
|
9
|
+
const objectAssignAliases = objectAssignAliasExpressionsForTarget(program, target);
|
|
10
|
+
const objectAssignTarget = objectAssignTargetExpression(program, target.expression);
|
|
11
|
+
if (!objectAssignTarget) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
const imports = collectImportBindings(program);
|
|
15
|
+
if (objectAssignTarget.type === "Identifier") {
|
|
16
|
+
const importBinding = imports.get(objectAssignTarget.name);
|
|
17
|
+
if (importBinding) {
|
|
18
|
+
const resolved = yield* resolvers.resolveImportValue(action, filename, importBinding, stack, memo);
|
|
19
|
+
if (!resolved || !isStaticWYWMetaValue(resolved.value)) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const dependencies = new Set([filename, ...resolved.dependencies.filter((item) => item !== filename)]);
|
|
23
|
+
const sideEffectDependencies = new Set(resolved.sideEffectDependencies ?? []);
|
|
24
|
+
const aliasValues = objectAssignAliases ? yield* resolveObjectAssignAliasValues(action, filename, code, program, objectAssignAliases, stack, memo, resolvers) : null;
|
|
25
|
+
const mergedValue = aliasValues ? mergeStaticObjectAssignAliases(resolved.value, aliasValues.values) : null;
|
|
26
|
+
aliasValues?.dependencies.forEach((item) => dependencies.add(item));
|
|
27
|
+
aliasValues?.sideEffectDependencies.forEach((item) => sideEffectDependencies.add(item));
|
|
28
|
+
return {
|
|
29
|
+
dependencies: [...dependencies],
|
|
30
|
+
sideEffectDependencies: [...sideEffectDependencies],
|
|
31
|
+
value: mergedValue ?? resolved.value
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const expression = objectAssignTarget.type === "Identifier" ? findTopLevelConstExpression(program, objectAssignTarget.name) ?? objectAssignTarget : objectAssignTarget;
|
|
36
|
+
const staticDependencies = collectStaticExpressionDependencies(program, {
|
|
37
|
+
...target,
|
|
38
|
+
expression
|
|
39
|
+
});
|
|
40
|
+
if (!staticDependencies) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const env = new Map();
|
|
44
|
+
const dependencies = new Set([filename]);
|
|
45
|
+
const sideEffectDependencies = new Set();
|
|
46
|
+
for (const binding of staticDependencies.imports) {
|
|
47
|
+
const resolved = yield* resolvers.resolveImportValue(action, filename, binding, stack, memo);
|
|
48
|
+
if (!resolved) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
if (!bindStaticResolvedValue(env, expression, binding.local, resolved)) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
resolved.dependencies.forEach((item) => dependencies.add(item));
|
|
55
|
+
resolved.sideEffectDependencies?.forEach((item) => sideEffectDependencies.add(item));
|
|
56
|
+
}
|
|
57
|
+
const value = evaluateOxcStaticExpressionAt(code, filename, {
|
|
58
|
+
end: expression.end,
|
|
59
|
+
start: expression.start
|
|
60
|
+
}, env, getStaticBindings(action));
|
|
61
|
+
if (!isStaticWYWMetaValue(value)) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const aliasValues = objectAssignAliases ? yield* resolveObjectAssignAliasValues(action, filename, code, program, objectAssignAliases, stack, memo, resolvers) : null;
|
|
65
|
+
const mergedValue = aliasValues ? mergeStaticObjectAssignAliases(value, aliasValues.values) : null;
|
|
66
|
+
aliasValues?.dependencies.forEach((item) => dependencies.add(item));
|
|
67
|
+
aliasValues?.sideEffectDependencies.forEach((item) => sideEffectDependencies.add(item));
|
|
68
|
+
return {
|
|
69
|
+
dependencies: [...dependencies],
|
|
70
|
+
sideEffectDependencies: [...sideEffectDependencies],
|
|
71
|
+
value: mergedValue ?? value
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=objectAssignStaticExport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"AAIA,SAAS,qCAAqC;AAE9C,SAAS,yBAAyB;AAClC,SAAS,mCAAmC;AAC5C,SACE,uBACA,+BACK;AACP,SAAS,2CAA2C;AACpD,SACE,gCACA,uCACA,8BACA,sCACK;AACP,SAAS,4BAA4B;AAOrC,OAAO,UAAU,gCACf,QACA,UACA,MACA,SACA,QACA,OACA,MACA,WAC4C;CAC5C,MAAM,sBAAsB,sCAC1B,SACA,OACD;CACD,MAAM,qBAAqB,6BACzB,SACA,OAAO,WACR;AACD,KAAI,CAAC,oBAAoB;AACvB,SAAO;;CAGT,MAAM,UAAU,sBAAsB,QAAQ;AAC9C,KAAI,mBAAmB,SAAS,cAAc;EAC5C,MAAM,gBAAgB,QAAQ,IAAI,mBAAmB,KAAK;AAC1D,MAAI,eAAe;GACjB,MAAM,WAAW,OAAO,UAAU,mBAChC,QACA,UACA,eACA,OACA,KACD;AACD,OAAI,CAAC,YAAY,CAAC,qBAAqB,SAAS,MAAM,EAAE;AACtD,WAAO;;GAGT,MAAM,eAAe,IAAI,IAAI,CAC3B,UACA,GAAG,SAAS,aAAa,QAAQ,SAAS,SAAS,SAAS,CAC7D,CAAC;GACF,MAAM,yBAAyB,IAAI,IACjC,SAAS,0BAA0B,EAAE,CACtC;GACD,MAAM,cAAc,sBAChB,OAAO,+BACL,QACA,UACA,MACA,SACA,qBACA,OACA,MACA,UACD,GACD;GACJ,MAAM,cAAc,cAChB,+BAA+B,SAAS,OAAO,YAAY,OAAO,GAClE;AACJ,gBAAa,aAAa,SAAS,SAAS,aAAa,IAAI,KAAK,CAAC;AACnE,gBAAa,uBAAuB,SAAS,SAC3C,uBAAuB,IAAI,KAAK,CACjC;AAED,UAAO;IACL,cAAc,CAAC,GAAG,aAAa;IAC/B,wBAAwB,CAAC,GAAG,uBAAuB;IACnD,OAAO,eAAe,SAAS;IAChC;;;CAIL,MAAM,aACJ,mBAAmB,SAAS,eACxB,4BAA4B,SAAS,mBAAmB,KAAK,IAC7D,qBACA;CACN,MAAM,qBAAqB,oCAAoC,SAAS;EACtE,GAAG;EACH;EACD,CAAC;AACF,KAAI,CAAC,oBAAoB;AACvB,SAAO;;CAGT,MAAM,MAAM,IAAI,KAAsB;CACtC,MAAM,eAAe,IAAI,IAAY,CAAC,SAAS,CAAC;CAChD,MAAM,yBAAyB,IAAI,KAAa;AAEhD,MAAK,MAAM,WAAW,mBAAmB,SAAS;EAChD,MAAM,WAAW,OAAO,UAAU,mBAChC,QACA,UACA,SACA,OACA,KACD;AACD,MAAI,CAAC,UAAU;AACb,UAAO;;AAGT,MAAI,CAAC,wBAAwB,KAAK,YAAY,QAAQ,OAAO,SAAS,EAAE;AACtE,UAAO;;AAGT,WAAS,aAAa,SAAS,SAAS,aAAa,IAAI,KAAK,CAAC;AAC/D,WAAS,wBAAwB,SAAS,SACxC,uBAAuB,IAAI,KAAK,CACjC;;CAGH,MAAM,QAAQ,8BACZ,MACA,UACA;EACE,KAAK,WAAW;EAChB,OAAO,WAAW;EACnB,EACD,KACA,kBAAkB,OAAO,CAC1B;AACD,KAAI,CAAC,qBAAqB,MAAM,EAAE;AAChC,SAAO;;CAGT,MAAM,cAAc,sBAChB,OAAO,+BACL,QACA,UACA,MACA,SACA,qBACA,OACA,MACA,UACD,GACD;CACJ,MAAM,cAAc,cAChB,+BAA+B,OAAO,YAAY,OAAO,GACzD;AACJ,cAAa,aAAa,SAAS,SAAS,aAAa,IAAI,KAAK,CAAC;AACnE,cAAa,uBAAuB,SAAS,SAC3C,uBAAuB,IAAI,KAAK,CACjC;AAED,QAAO;EACL,cAAc,CAAC,GAAG,aAAa;EAC/B,wBAAwB,CAAC,GAAG,uBAAuB;EACnD,OAAO,eAAe;EACvB","names":[],"sources":["../../../../src/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.ts"],"version":3,"sourcesContent":["/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */\n\nimport type { Program } from 'oxc-parser';\n\nimport { evaluateOxcStaticExpressionAt } from '../../../utils/collectOxcTemplateDependencies';\nimport type { ITransformAction, SyncScenarioFor } from '../../types';\nimport { getStaticBindings } from './environment';\nimport { findTopLevelConstExpression } from './programAnalysis';\nimport {\n collectImportBindings,\n bindStaticResolvedValue,\n} from './staticExpression';\nimport { collectStaticExpressionDependencies } from './staticExpressionDependencies';\nimport {\n mergeStaticObjectAssignAliases,\n objectAssignAliasExpressionsForTarget,\n objectAssignTargetExpression,\n resolveObjectAssignAliasValues,\n} from './objectAssign';\nimport { isStaticWYWMetaValue } from './processorStaticModel';\nimport type {\n ExportTarget,\n StaticExportResolverContext,\n StaticExportResult,\n} from './types';\n\nexport function* resolveObjectAssignStaticExport(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>,\n resolvers: StaticExportResolverContext\n): SyncScenarioFor<StaticExportResult | null> {\n const objectAssignAliases = objectAssignAliasExpressionsForTarget(\n program,\n target\n );\n const objectAssignTarget = objectAssignTargetExpression(\n program,\n target.expression\n );\n if (!objectAssignTarget) {\n return null;\n }\n\n const imports = collectImportBindings(program);\n if (objectAssignTarget.type === 'Identifier') {\n const importBinding = imports.get(objectAssignTarget.name);\n if (importBinding) {\n const resolved = yield* resolvers.resolveImportValue(\n action,\n filename,\n importBinding,\n stack,\n memo\n );\n if (!resolved || !isStaticWYWMetaValue(resolved.value)) {\n return null;\n }\n\n const dependencies = new Set([\n filename,\n ...resolved.dependencies.filter((item) => item !== filename),\n ]);\n const sideEffectDependencies = new Set(\n resolved.sideEffectDependencies ?? []\n );\n const aliasValues = objectAssignAliases\n ? yield* resolveObjectAssignAliasValues(\n action,\n filename,\n code,\n program,\n objectAssignAliases,\n stack,\n memo,\n resolvers\n )\n : null;\n const mergedValue = aliasValues\n ? mergeStaticObjectAssignAliases(resolved.value, aliasValues.values)\n : null;\n aliasValues?.dependencies.forEach((item) => dependencies.add(item));\n aliasValues?.sideEffectDependencies.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value: mergedValue ?? resolved.value,\n };\n }\n }\n\n const expression =\n objectAssignTarget.type === 'Identifier'\n ? findTopLevelConstExpression(program, objectAssignTarget.name) ??\n objectAssignTarget\n : objectAssignTarget;\n const staticDependencies = collectStaticExpressionDependencies(program, {\n ...target,\n expression,\n });\n if (!staticDependencies) {\n return null;\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>([filename]);\n const sideEffectDependencies = new Set<string>();\n\n for (const binding of staticDependencies.imports) {\n const resolved = yield* resolvers.resolveImportValue(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (!resolved) {\n return null;\n }\n\n if (!bindStaticResolvedValue(env, expression, binding.local, resolved)) {\n return null;\n }\n\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies?.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n const value = evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: expression.end,\n start: expression.start,\n },\n env,\n getStaticBindings(action)\n );\n if (!isStaticWYWMetaValue(value)) {\n return null;\n }\n\n const aliasValues = objectAssignAliases\n ? yield* resolveObjectAssignAliasValues(\n action,\n filename,\n code,\n program,\n objectAssignAliases,\n stack,\n memo,\n resolvers\n )\n : null;\n const mergedValue = aliasValues\n ? mergeStaticObjectAssignAliases(value, aliasValues.values)\n : null;\n aliasValues?.dependencies.forEach((item) => dependencies.add(item));\n aliasValues?.sideEffectDependencies.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value: mergedValue ?? value,\n };\n}\n"],"file":"objectAssignStaticExport.js"}
|