@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,88 @@
|
|
|
1
|
+
/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
|
|
2
|
+
import { evaluateOxcStaticExpressionAt } from '../../../utils/collectOxcTemplateDependencies';
|
|
3
|
+
import { getStaticBindings } from './environment';
|
|
4
|
+
import { findTopLevelConstExpression } from './programAnalysis';
|
|
5
|
+
import { collectImportBindings, bindStaticResolvedValue, } from './staticExpression';
|
|
6
|
+
import { collectStaticExpressionDependencies } from './staticExpressionDependencies';
|
|
7
|
+
import { mergeStaticObjectAssignAliases, objectAssignAliasExpressionsForTarget, objectAssignTargetExpression, resolveObjectAssignAliasValues, } from './objectAssign';
|
|
8
|
+
import { isStaticWYWMetaValue } from './processorStaticModel';
|
|
9
|
+
export function* resolveObjectAssignStaticExport(action, filename, code, program, target, stack, memo, resolvers) {
|
|
10
|
+
const objectAssignAliases = objectAssignAliasExpressionsForTarget(program, target);
|
|
11
|
+
const objectAssignTarget = objectAssignTargetExpression(program, target.expression);
|
|
12
|
+
if (!objectAssignTarget) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const imports = collectImportBindings(program);
|
|
16
|
+
if (objectAssignTarget.type === 'Identifier') {
|
|
17
|
+
const importBinding = imports.get(objectAssignTarget.name);
|
|
18
|
+
if (importBinding) {
|
|
19
|
+
const resolved = yield* resolvers.resolveImportValue(action, filename, importBinding, stack, memo);
|
|
20
|
+
if (!resolved || !isStaticWYWMetaValue(resolved.value)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const dependencies = new Set([
|
|
24
|
+
filename,
|
|
25
|
+
...resolved.dependencies.filter((item) => item !== filename),
|
|
26
|
+
]);
|
|
27
|
+
const sideEffectDependencies = new Set(resolved.sideEffectDependencies ?? []);
|
|
28
|
+
const aliasValues = objectAssignAliases
|
|
29
|
+
? yield* resolveObjectAssignAliasValues(action, filename, code, program, objectAssignAliases, stack, memo, resolvers)
|
|
30
|
+
: null;
|
|
31
|
+
const mergedValue = aliasValues
|
|
32
|
+
? mergeStaticObjectAssignAliases(resolved.value, aliasValues.values)
|
|
33
|
+
: null;
|
|
34
|
+
aliasValues?.dependencies.forEach((item) => dependencies.add(item));
|
|
35
|
+
aliasValues?.sideEffectDependencies.forEach((item) => sideEffectDependencies.add(item));
|
|
36
|
+
return {
|
|
37
|
+
dependencies: [...dependencies],
|
|
38
|
+
sideEffectDependencies: [...sideEffectDependencies],
|
|
39
|
+
value: mergedValue ?? resolved.value,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const expression = objectAssignTarget.type === 'Identifier'
|
|
44
|
+
? findTopLevelConstExpression(program, objectAssignTarget.name) ??
|
|
45
|
+
objectAssignTarget
|
|
46
|
+
: objectAssignTarget;
|
|
47
|
+
const staticDependencies = collectStaticExpressionDependencies(program, {
|
|
48
|
+
...target,
|
|
49
|
+
expression,
|
|
50
|
+
});
|
|
51
|
+
if (!staticDependencies) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
const env = new Map();
|
|
55
|
+
const dependencies = new Set([filename]);
|
|
56
|
+
const sideEffectDependencies = new Set();
|
|
57
|
+
for (const binding of staticDependencies.imports) {
|
|
58
|
+
const resolved = yield* resolvers.resolveImportValue(action, filename, binding, stack, memo);
|
|
59
|
+
if (!resolved) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
if (!bindStaticResolvedValue(env, expression, binding.local, resolved)) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
resolved.dependencies.forEach((item) => dependencies.add(item));
|
|
66
|
+
resolved.sideEffectDependencies?.forEach((item) => sideEffectDependencies.add(item));
|
|
67
|
+
}
|
|
68
|
+
const value = evaluateOxcStaticExpressionAt(code, filename, {
|
|
69
|
+
end: expression.end,
|
|
70
|
+
start: expression.start,
|
|
71
|
+
}, env, getStaticBindings(action));
|
|
72
|
+
if (!isStaticWYWMetaValue(value)) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
const aliasValues = objectAssignAliases
|
|
76
|
+
? yield* resolveObjectAssignAliasValues(action, filename, code, program, objectAssignAliases, stack, memo, resolvers)
|
|
77
|
+
: null;
|
|
78
|
+
const mergedValue = aliasValues
|
|
79
|
+
? mergeStaticObjectAssignAliases(value, aliasValues.values)
|
|
80
|
+
: null;
|
|
81
|
+
aliasValues?.dependencies.forEach((item) => dependencies.add(item));
|
|
82
|
+
aliasValues?.sideEffectDependencies.forEach((item) => sideEffectDependencies.add(item));
|
|
83
|
+
return {
|
|
84
|
+
dependencies: [...dependencies],
|
|
85
|
+
sideEffectDependencies: [...sideEffectDependencies],
|
|
86
|
+
value: mergedValue ?? value,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Expression, Node, Program } from 'oxc-parser';
|
|
2
|
+
import type { ITransformAction, SyncScenarioFor } from '../../types';
|
|
3
|
+
import type { ImportBinding, OpaqueRuntimeImportProof } from './types';
|
|
4
|
+
export declare const isKnownOpaqueRuntimeWrapperImport: (binding: ImportBinding | undefined) => boolean;
|
|
5
|
+
export declare const isKnownOpaqueRuntimeWrapperCallee: (expr: Node, imports: Map<string, ImportBinding>) => boolean;
|
|
6
|
+
export declare const isKnownOpaqueRuntimeImportSource: (source: string) => boolean;
|
|
7
|
+
export declare const isKnownExternalRuntimeComponentImportSource: (source: string) => boolean;
|
|
8
|
+
export declare const isOpaqueRuntimeComponentExpression: (program: Program, expr: Node, opaqueImportNames?: Set<string>, seen?: Set<string>) => boolean;
|
|
9
|
+
export declare const collectOpaqueRuntimeReferenceNames: (program: Program, expr: Node, names: Set<string>, seenHelpers?: Set<string>) => void;
|
|
10
|
+
export declare function resolveExportAsOpaqueRuntimeImport(action: ITransformAction, filename: string, exportedName: string, stack: Set<string>, memo: Map<string, OpaqueRuntimeImportProof | null>): SyncScenarioFor<OpaqueRuntimeImportProof | null>;
|
|
11
|
+
export declare const knownOpaqueRuntimeSourceDependency: (importer: string, source: string) => string | null;
|
|
12
|
+
export declare function resolveImportAsOpaqueRuntime(action: ITransformAction, importer: string, binding: Pick<ImportBinding, 'imported' | 'source'>, stack: Set<string>, memo: Map<string, OpaqueRuntimeImportProof | null>): SyncScenarioFor<OpaqueRuntimeImportProof | null>;
|
|
13
|
+
export declare function collectOpaqueRuntimeImportProof(action: ITransformAction, filename: string, program: Program, expression: Expression): SyncScenarioFor<OpaqueRuntimeImportProof>;
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
|
|
2
|
+
import { dirname, isAbsolute, resolve as resolvePath } from 'path';
|
|
3
|
+
import { oxcShaker } from '../../../shaker';
|
|
4
|
+
import { getOxcNodeChildren } from '../../../utils/oxc/ast';
|
|
5
|
+
import { stripQueryAndHash } from '../../../utils/parseRequest';
|
|
6
|
+
import { hashStaticContent, getStaticMetadataPreevalResult } from './cache';
|
|
7
|
+
import { resolveDependency } from './dependencies';
|
|
8
|
+
import { parseProgram } from './environment';
|
|
9
|
+
import { findExportTarget } from './exportTargets';
|
|
10
|
+
import { findTopLevelConstExpression, functionReturnExpression, isTopLevelFunctionOrClass, } from './programAnalysis';
|
|
11
|
+
import { collectWYWMetaExtendsExpressionsDeep, isStaticMetaObjectExpression, } from './processorStaticModel';
|
|
12
|
+
import { collectImportBindings, isSafeStaticExpression, unwrapExpression, } from './staticExpression';
|
|
13
|
+
import { rootIdentifierName } from './staticExpressionDependencies';
|
|
14
|
+
export const isKnownOpaqueRuntimeWrapperImport = (binding) => {
|
|
15
|
+
if (!binding) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return (binding.imported === 'observer' &&
|
|
19
|
+
(binding.source === 'mobx-react' || binding.source === 'mobx-react-lite'));
|
|
20
|
+
};
|
|
21
|
+
export const isKnownOpaqueRuntimeWrapperCallee = (expr, imports) => {
|
|
22
|
+
const callee = unwrapExpression(expr);
|
|
23
|
+
if (callee.type === 'Identifier') {
|
|
24
|
+
return isKnownOpaqueRuntimeWrapperImport(imports.get(callee.name));
|
|
25
|
+
}
|
|
26
|
+
return false;
|
|
27
|
+
};
|
|
28
|
+
export const isKnownOpaqueRuntimeImportSource = (source) => /\.svg(?:$|[?#])/.test(source);
|
|
29
|
+
export const isKnownExternalRuntimeComponentImportSource = (source) => source.startsWith('@radix-ui/react-');
|
|
30
|
+
export const isOpaqueRuntimeComponentExpression = (program, expr, opaqueImportNames = new Set(), seen = new Set()) => {
|
|
31
|
+
const imports = collectImportBindings(program, { includeNamespace: true });
|
|
32
|
+
const unwrapped = unwrapExpression(expr);
|
|
33
|
+
if (isStaticMetaObjectExpression(unwrapped)) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
if (unwrapped.type === 'ArrowFunctionExpression' ||
|
|
37
|
+
unwrapped.type === 'FunctionExpression' ||
|
|
38
|
+
unwrapped.type === 'ClassExpression') {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
if (unwrapped.type === 'CallExpression' &&
|
|
42
|
+
unwrapped.arguments.length === 1 &&
|
|
43
|
+
isKnownOpaqueRuntimeWrapperCallee(unwrapped.callee, imports)) {
|
|
44
|
+
const [argument] = unwrapped.arguments;
|
|
45
|
+
return argument.type !== 'SpreadElement'
|
|
46
|
+
? isOpaqueRuntimeComponentExpression(program, argument, opaqueImportNames, seen)
|
|
47
|
+
: false;
|
|
48
|
+
}
|
|
49
|
+
if (unwrapped.type === 'CallExpression' &&
|
|
50
|
+
unwrapped.callee.type === 'Identifier') {
|
|
51
|
+
const allowParams = unwrapped.arguments.every((argument) => argument.type !== 'SpreadElement' && isSafeStaticExpression(argument));
|
|
52
|
+
const local = findTopLevelConstExpression(program, unwrapped.callee.name);
|
|
53
|
+
const returned = local
|
|
54
|
+
? functionReturnExpression(local, { allowParams })
|
|
55
|
+
: null;
|
|
56
|
+
return returned
|
|
57
|
+
? isOpaqueRuntimeComponentExpression(program, returned, opaqueImportNames, seen)
|
|
58
|
+
: false;
|
|
59
|
+
}
|
|
60
|
+
if (unwrapped.type === 'MemberExpression' && !unwrapped.computed) {
|
|
61
|
+
const name = rootIdentifierName(unwrapped);
|
|
62
|
+
const imported = name ? imports.get(name) : undefined;
|
|
63
|
+
return (!!name &&
|
|
64
|
+
!!imported &&
|
|
65
|
+
(opaqueImportNames.has(name) ||
|
|
66
|
+
isKnownExternalRuntimeComponentImportSource(imported.source)));
|
|
67
|
+
}
|
|
68
|
+
if (unwrapped.type !== 'Identifier') {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const { name } = unwrapped;
|
|
72
|
+
if (seen.has(name)) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
seen.add(name);
|
|
76
|
+
const imported = imports.get(name);
|
|
77
|
+
if (imported) {
|
|
78
|
+
return (opaqueImportNames.has(name) ||
|
|
79
|
+
isKnownOpaqueRuntimeImportSource(imported.source) ||
|
|
80
|
+
isKnownExternalRuntimeComponentImportSource(imported.source));
|
|
81
|
+
}
|
|
82
|
+
if (isTopLevelFunctionOrClass(program, name)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
const local = findTopLevelConstExpression(program, name);
|
|
86
|
+
return local
|
|
87
|
+
? isOpaqueRuntimeComponentExpression(program, local, opaqueImportNames, seen)
|
|
88
|
+
: false;
|
|
89
|
+
};
|
|
90
|
+
export const collectOpaqueRuntimeReferenceNames = (program, expr, names, seenHelpers = new Set()) => {
|
|
91
|
+
const unwrapped = unwrapExpression(expr);
|
|
92
|
+
if (unwrapped.type === 'CallExpression' &&
|
|
93
|
+
unwrapped.callee.type === 'Identifier') {
|
|
94
|
+
const allowParams = unwrapped.arguments.every((argument) => argument.type !== 'SpreadElement' && isSafeStaticExpression(argument));
|
|
95
|
+
if (seenHelpers.has(unwrapped.callee.name)) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const local = findTopLevelConstExpression(program, unwrapped.callee.name);
|
|
99
|
+
const returned = local
|
|
100
|
+
? functionReturnExpression(local, { allowParams })
|
|
101
|
+
: null;
|
|
102
|
+
if (returned) {
|
|
103
|
+
seenHelpers.add(unwrapped.callee.name);
|
|
104
|
+
collectOpaqueRuntimeReferenceNames(program, returned, names, seenHelpers);
|
|
105
|
+
seenHelpers.delete(unwrapped.callee.name);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (unwrapped.type === 'Identifier') {
|
|
110
|
+
names.add(unwrapped.name);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
getOxcNodeChildren(unwrapped).forEach((child) => collectOpaqueRuntimeReferenceNames(program, child, names, seenHelpers));
|
|
114
|
+
};
|
|
115
|
+
export function* resolveExportAsOpaqueRuntimeImport(action, filename, exportedName, stack, memo) {
|
|
116
|
+
const memoKey = `${filename}\0${exportedName}`;
|
|
117
|
+
if (memo.has(memoKey)) {
|
|
118
|
+
return memo.get(memoKey) ?? null;
|
|
119
|
+
}
|
|
120
|
+
if (stack.has(memoKey)) {
|
|
121
|
+
memo.set(memoKey, null);
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
stack.add(memoKey);
|
|
125
|
+
const loadedAndParsed = action.services.loadAndParseFn(action.services, filename, undefined, action.services.log);
|
|
126
|
+
if (loadedAndParsed.evaluator === 'ignored' ||
|
|
127
|
+
loadedAndParsed.evaluator !== oxcShaker) {
|
|
128
|
+
memo.set(memoKey, null);
|
|
129
|
+
stack.delete(memoKey);
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
const codeHash = hashStaticContent(loadedAndParsed.code);
|
|
133
|
+
const preevalResult = getStaticMetadataPreevalResult(action, filename, loadedAndParsed.code, codeHash);
|
|
134
|
+
const program = parseProgram(preevalResult?.baseCode ?? loadedAndParsed.code, filename);
|
|
135
|
+
const target = findExportTarget(program, exportedName);
|
|
136
|
+
if (!target) {
|
|
137
|
+
memo.set(memoKey, null);
|
|
138
|
+
stack.delete(memoKey);
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
if (target.kind === 'import') {
|
|
142
|
+
const resolved = yield* resolveImportAsOpaqueRuntime(action, filename, target, stack, memo);
|
|
143
|
+
memo.set(memoKey, resolved);
|
|
144
|
+
stack.delete(memoKey);
|
|
145
|
+
return resolved;
|
|
146
|
+
}
|
|
147
|
+
if (isOpaqueRuntimeComponentExpression(program, target.expression)) {
|
|
148
|
+
const resolved = {
|
|
149
|
+
dependencies: [filename],
|
|
150
|
+
names: new Set(),
|
|
151
|
+
};
|
|
152
|
+
memo.set(memoKey, resolved);
|
|
153
|
+
stack.delete(memoKey);
|
|
154
|
+
return resolved;
|
|
155
|
+
}
|
|
156
|
+
const imports = collectImportBindings(program, { includeNamespace: true });
|
|
157
|
+
const referencedNames = new Set();
|
|
158
|
+
collectOpaqueRuntimeReferenceNames(program, target.expression, referencedNames);
|
|
159
|
+
const opaqueImportNames = new Set();
|
|
160
|
+
const dependencies = new Set([filename]);
|
|
161
|
+
for (const name of referencedNames) {
|
|
162
|
+
const binding = imports.get(name);
|
|
163
|
+
if (!binding ||
|
|
164
|
+
binding.source === 'react' ||
|
|
165
|
+
isKnownOpaqueRuntimeWrapperImport(binding)) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
const proof = yield* resolveImportAsOpaqueRuntime(action, filename, binding, stack, memo);
|
|
169
|
+
if (!proof) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
opaqueImportNames.add(name);
|
|
173
|
+
proof.dependencies.forEach((dependency) => dependencies.add(dependency));
|
|
174
|
+
}
|
|
175
|
+
const resolved = isOpaqueRuntimeComponentExpression(program, target.expression, opaqueImportNames)
|
|
176
|
+
? {
|
|
177
|
+
dependencies: [...dependencies],
|
|
178
|
+
names: opaqueImportNames,
|
|
179
|
+
}
|
|
180
|
+
: null;
|
|
181
|
+
memo.set(memoKey, resolved);
|
|
182
|
+
stack.delete(memoKey);
|
|
183
|
+
return resolved;
|
|
184
|
+
}
|
|
185
|
+
export const knownOpaqueRuntimeSourceDependency = (importer, source) => {
|
|
186
|
+
if (!isKnownOpaqueRuntimeImportSource(source)) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
const request = stripQueryAndHash(source);
|
|
190
|
+
if (isAbsolute(request)) {
|
|
191
|
+
return request;
|
|
192
|
+
}
|
|
193
|
+
return request.startsWith('.')
|
|
194
|
+
? resolvePath(dirname(importer), request)
|
|
195
|
+
: null;
|
|
196
|
+
};
|
|
197
|
+
export function* resolveImportAsOpaqueRuntime(action, importer, binding, stack, memo) {
|
|
198
|
+
const knownSourceDependency = knownOpaqueRuntimeSourceDependency(importer, binding.source);
|
|
199
|
+
if (knownSourceDependency) {
|
|
200
|
+
return {
|
|
201
|
+
dependencies: [knownSourceDependency],
|
|
202
|
+
names: new Set(),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
if (isKnownExternalRuntimeComponentImportSource(binding.source)) {
|
|
206
|
+
return {
|
|
207
|
+
dependencies: [],
|
|
208
|
+
names: new Set(),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
const dependency = yield* resolveDependency(action, importer, binding.source, binding.imported);
|
|
212
|
+
if (!dependency?.resolved) {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
if (isKnownOpaqueRuntimeImportSource(binding.source) ||
|
|
216
|
+
isKnownOpaqueRuntimeImportSource(dependency.resolved)) {
|
|
217
|
+
return {
|
|
218
|
+
dependencies: [dependency.resolved],
|
|
219
|
+
names: new Set(),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
const resolved = yield* resolveExportAsOpaqueRuntimeImport(action, dependency.resolved, binding.imported, stack, memo);
|
|
223
|
+
return resolved
|
|
224
|
+
? {
|
|
225
|
+
dependencies: [
|
|
226
|
+
dependency.resolved,
|
|
227
|
+
...resolved.dependencies.filter((item) => item !== dependency.resolved),
|
|
228
|
+
],
|
|
229
|
+
names: resolved.names,
|
|
230
|
+
}
|
|
231
|
+
: null;
|
|
232
|
+
}
|
|
233
|
+
export function* collectOpaqueRuntimeImportProof(action, filename, program, expression) {
|
|
234
|
+
const extendsExpressions = collectWYWMetaExtendsExpressionsDeep(program, expression);
|
|
235
|
+
if (extendsExpressions.length === 0) {
|
|
236
|
+
return {
|
|
237
|
+
dependencies: [],
|
|
238
|
+
names: new Set(),
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
const imports = collectImportBindings(program, { includeNamespace: true });
|
|
242
|
+
const referencedNames = new Set();
|
|
243
|
+
extendsExpressions.forEach((extendsExpression) => collectOpaqueRuntimeReferenceNames(program, extendsExpression, referencedNames));
|
|
244
|
+
const dependencies = new Set();
|
|
245
|
+
const names = new Set();
|
|
246
|
+
const memo = new Map();
|
|
247
|
+
for (const name of referencedNames) {
|
|
248
|
+
const binding = imports.get(name);
|
|
249
|
+
if (!binding || binding.source === 'react') {
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
const proof = yield* resolveImportAsOpaqueRuntime(action, filename, binding, new Set(), memo);
|
|
253
|
+
if (!proof) {
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
names.add(name);
|
|
257
|
+
proof.dependencies.forEach((dependency) => dependencies.add(dependency));
|
|
258
|
+
}
|
|
259
|
+
return {
|
|
260
|
+
dependencies: [...dependencies],
|
|
261
|
+
names,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Program } from 'oxc-parser';
|
|
2
|
+
import type { ITransformAction, SyncScenarioFor } from '../../types';
|
|
3
|
+
import type { StaticExportResolverContext, StaticExportResult } from './types';
|
|
4
|
+
export declare function resolveProcessorStaticExport(action: ITransformAction, filename: string, code: string, codeHash: string, program: Program, exportedName: string, stack: Set<string>, memo: Map<string, StaticExportResult | null>, resolvers: StaticExportResolverContext): SyncScenarioFor<StaticExportResult | null>;
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
|
|
2
|
+
import { evaluateOxcStaticExpressionAt, isOxcStaticSerializableValue, } from '../../../utils/collectOxcTemplateDependencies';
|
|
3
|
+
import { getStaticMetadataPreevalResult } from './cache';
|
|
4
|
+
import { debugStaticResolve, getStaticBindings, isLocalStaticMetadataFile, parseProgram, } from './environment';
|
|
5
|
+
import { findExportTarget } from './exportTargets';
|
|
6
|
+
import { collectOpaqueRuntimeImportProof } from './opaqueRuntime';
|
|
7
|
+
import { mergeStaticObjectAssignAliases, objectAssignAliasExpressionsForTarget, resolveObjectAssignAliasValues, resolveObjectAssignProcessorExpression, } from './objectAssign';
|
|
8
|
+
import { prepareProcessorTarget } from './processorTarget';
|
|
9
|
+
import { collectProcessorImportLocals, isKnownProcessorClassValue, isProcessorClassValue, isSelectorOnlyProcessorValue, processorClassNameRuntimeValue, isStaticWYWMetaTreeValue, isStaticWYWMetaValue, } from './processorStaticModel';
|
|
10
|
+
import { bindStaticResolvedValue } from './staticExpression';
|
|
11
|
+
export function* resolveProcessorStaticExport(action, filename, code, codeHash, program, exportedName, stack, memo, resolvers) {
|
|
12
|
+
const root = action.services.options.root ?? process.cwd();
|
|
13
|
+
if (!isLocalStaticMetadataFile(filename, root)) {
|
|
14
|
+
debugStaticResolve(action, {
|
|
15
|
+
exported: exportedName,
|
|
16
|
+
filename,
|
|
17
|
+
phase: 'processor-metadata',
|
|
18
|
+
reason: 'outside-root',
|
|
19
|
+
status: 'rejected',
|
|
20
|
+
});
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
if (collectProcessorImportLocals(action, program, code, filename).size === 0) {
|
|
24
|
+
debugStaticResolve(action, {
|
|
25
|
+
exported: exportedName,
|
|
26
|
+
filename,
|
|
27
|
+
phase: 'processor-metadata',
|
|
28
|
+
reason: 'no-processor-imports',
|
|
29
|
+
status: 'rejected',
|
|
30
|
+
});
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const preevalResult = getStaticMetadataPreevalResult(action, filename, code, codeHash);
|
|
34
|
+
if (!preevalResult) {
|
|
35
|
+
debugStaticResolve(action, {
|
|
36
|
+
exported: exportedName,
|
|
37
|
+
filename,
|
|
38
|
+
phase: 'processor-metadata',
|
|
39
|
+
reason: 'metadata-preeval-failed',
|
|
40
|
+
status: 'rejected',
|
|
41
|
+
});
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
if (!preevalResult.metadata) {
|
|
45
|
+
debugStaticResolve(action, {
|
|
46
|
+
exported: exportedName,
|
|
47
|
+
filename,
|
|
48
|
+
phase: 'processor-metadata',
|
|
49
|
+
reason: 'metadata-missing',
|
|
50
|
+
status: 'rejected',
|
|
51
|
+
});
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
const preevalCode = preevalResult.baseCode;
|
|
55
|
+
const preevalProgram = parseProgram(preevalCode, filename);
|
|
56
|
+
const target = findExportTarget(preevalProgram, exportedName);
|
|
57
|
+
if (!target || target.kind === 'import') {
|
|
58
|
+
debugStaticResolve(action, {
|
|
59
|
+
exported: exportedName,
|
|
60
|
+
filename,
|
|
61
|
+
phase: 'processor-metadata',
|
|
62
|
+
reason: 'processor-target-missing',
|
|
63
|
+
status: 'rejected',
|
|
64
|
+
});
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const processorObjectAssignAliases = objectAssignAliasExpressionsForTarget(preevalProgram, target);
|
|
68
|
+
const processorExpression = resolveObjectAssignProcessorExpression(preevalProgram, target.expression);
|
|
69
|
+
const opaqueRuntimeImportProof = yield* collectOpaqueRuntimeImportProof(action, filename, preevalProgram, processorExpression);
|
|
70
|
+
const preparedTarget = prepareProcessorTarget(preevalCode, filename, preevalProgram, target, exportedName, opaqueRuntimeImportProof.names);
|
|
71
|
+
if (!preparedTarget) {
|
|
72
|
+
debugStaticResolve(action, {
|
|
73
|
+
exported: exportedName,
|
|
74
|
+
filename,
|
|
75
|
+
phase: 'processor-metadata',
|
|
76
|
+
reason: 'unsupported-processor-expression',
|
|
77
|
+
status: 'rejected',
|
|
78
|
+
});
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
const env = new Map();
|
|
82
|
+
const dependencies = new Set([filename]);
|
|
83
|
+
const sideEffectDependencies = new Set();
|
|
84
|
+
opaqueRuntimeImportProof.dependencies.forEach((dependency) => dependencies.add(dependency));
|
|
85
|
+
for (const binding of preparedTarget.dependencies.imports) {
|
|
86
|
+
const resolved = yield* resolvers.resolveImportValue(action, filename, binding, stack, memo);
|
|
87
|
+
if (!resolved) {
|
|
88
|
+
debugStaticResolve(action, {
|
|
89
|
+
exported: exportedName,
|
|
90
|
+
filename,
|
|
91
|
+
imported: binding.imported,
|
|
92
|
+
phase: 'processor-metadata',
|
|
93
|
+
reason: 'resolve-failed',
|
|
94
|
+
source: binding.source,
|
|
95
|
+
status: 'rejected',
|
|
96
|
+
});
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
if (!bindStaticResolvedValue(env, preparedTarget.expression, binding.local, resolved, {
|
|
100
|
+
wrapNonCallable: true,
|
|
101
|
+
})) {
|
|
102
|
+
debugStaticResolve(action, {
|
|
103
|
+
exported: exportedName,
|
|
104
|
+
filename,
|
|
105
|
+
imported: binding.imported,
|
|
106
|
+
phase: 'processor-metadata',
|
|
107
|
+
reason: 'callable-usage-unsupported',
|
|
108
|
+
source: binding.source,
|
|
109
|
+
status: 'rejected',
|
|
110
|
+
});
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
resolved.dependencies.forEach((dependency) => dependencies.add(dependency));
|
|
114
|
+
resolved.sideEffectDependencies?.forEach((dependency) => sideEffectDependencies.add(dependency));
|
|
115
|
+
}
|
|
116
|
+
const value = preparedTarget.evaluationCode && preparedTarget.evaluationSpan
|
|
117
|
+
? evaluateOxcStaticExpressionAt(preparedTarget.evaluationCode, filename, preparedTarget.evaluationSpan, env, getStaticBindings(action))
|
|
118
|
+
: evaluateOxcStaticExpressionAt(preevalCode, filename, {
|
|
119
|
+
end: preparedTarget.expression.end,
|
|
120
|
+
start: preparedTarget.expression.start,
|
|
121
|
+
}, env, getStaticBindings(action));
|
|
122
|
+
if (!isOxcStaticSerializableValue(value)) {
|
|
123
|
+
debugStaticResolve(action, {
|
|
124
|
+
exported: exportedName,
|
|
125
|
+
filename,
|
|
126
|
+
phase: 'processor-metadata',
|
|
127
|
+
reason: 'non-serializable',
|
|
128
|
+
status: 'rejected',
|
|
129
|
+
});
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
let resolvedValue = value;
|
|
133
|
+
if (processorObjectAssignAliases && isStaticWYWMetaValue(value)) {
|
|
134
|
+
const aliasValues = yield* resolveObjectAssignAliasValues(action, filename, preevalCode, preevalProgram, processorObjectAssignAliases, stack, memo, resolvers);
|
|
135
|
+
const mergedValue = aliasValues
|
|
136
|
+
? mergeStaticObjectAssignAliases(value, aliasValues.values)
|
|
137
|
+
: null;
|
|
138
|
+
if (mergedValue) {
|
|
139
|
+
resolvedValue = mergedValue;
|
|
140
|
+
aliasValues?.dependencies.forEach((dependency) => dependencies.add(dependency));
|
|
141
|
+
aliasValues?.sideEffectDependencies.forEach((dependency) => sideEffectDependencies.add(dependency));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const isStaticMeta = isStaticWYWMetaValue(resolvedValue);
|
|
145
|
+
const isStaticMetaTree = !isStaticMeta && isStaticWYWMetaTreeValue(resolvedValue);
|
|
146
|
+
const processors = preevalResult.metadata
|
|
147
|
+
.processors;
|
|
148
|
+
const processorClassNames = new Set(processors.map((processor) => processorClassNameRuntimeValue(processor)));
|
|
149
|
+
const isSelectorOnly = !isStaticMeta &&
|
|
150
|
+
!isStaticMetaTree &&
|
|
151
|
+
isSelectorOnlyProcessorValue(resolvedValue, processors, new Map());
|
|
152
|
+
const isSideEffectClassValue = !isStaticMeta &&
|
|
153
|
+
!isStaticMetaTree &&
|
|
154
|
+
!isSelectorOnly &&
|
|
155
|
+
(isProcessorClassValue(resolvedValue, processors, new Map()) ||
|
|
156
|
+
isKnownProcessorClassValue(resolvedValue, processorClassNames));
|
|
157
|
+
if (!isStaticMeta &&
|
|
158
|
+
!isStaticMetaTree &&
|
|
159
|
+
!isSelectorOnly &&
|
|
160
|
+
!isSideEffectClassValue) {
|
|
161
|
+
debugStaticResolve(action, {
|
|
162
|
+
exported: exportedName,
|
|
163
|
+
filename,
|
|
164
|
+
phase: 'processor-metadata',
|
|
165
|
+
reason: 'non-empty-css-artifact',
|
|
166
|
+
status: 'rejected',
|
|
167
|
+
});
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
let resolvedReason;
|
|
171
|
+
if (preparedTarget.opaqueRuntimeBase) {
|
|
172
|
+
resolvedReason = 'opaque-runtime-component';
|
|
173
|
+
}
|
|
174
|
+
else if (isSideEffectClassValue) {
|
|
175
|
+
resolvedReason = 'non-empty-css-artifact-side-effect';
|
|
176
|
+
}
|
|
177
|
+
debugStaticResolve(action, {
|
|
178
|
+
exported: exportedName,
|
|
179
|
+
filename,
|
|
180
|
+
phase: 'processor-metadata',
|
|
181
|
+
reason: resolvedReason,
|
|
182
|
+
status: 'resolved',
|
|
183
|
+
});
|
|
184
|
+
return {
|
|
185
|
+
dependencies: [...dependencies],
|
|
186
|
+
sideEffectDependencies: isSideEffectClassValue
|
|
187
|
+
? [filename, ...sideEffectDependencies]
|
|
188
|
+
: [...sideEffectDependencies],
|
|
189
|
+
value: resolvedValue,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { BaseProcessor } from '@wyw-in-js/processor-utils';
|
|
2
|
+
import type { Expression, Node, Program } from 'oxc-parser';
|
|
3
|
+
import type { ITransformAction } from '../../types';
|
|
4
|
+
export declare const collectProcessorImportLocals: (action: ITransformAction, program: Program, code: string, filename: string) => Set<string>;
|
|
5
|
+
export declare const isStaticWYWMetaValue: (value: unknown, seen?: Set<unknown>) => boolean;
|
|
6
|
+
export type StaticWYWSelectorMetaValue = {
|
|
7
|
+
__wyw_meta: {
|
|
8
|
+
className: string;
|
|
9
|
+
extends: StaticWYWSelectorMetaValue | null;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export declare const toStaticWYWSelectorMetaValue: (value: unknown, seen?: Set<unknown>) => StaticWYWSelectorMetaValue | null;
|
|
13
|
+
export declare const staticWYWMetaExtendsReplacementCode: (value: unknown) => string | null;
|
|
14
|
+
export declare const unknownStaticWYWMetaValue: unique symbol;
|
|
15
|
+
export type UnknownStaticWYWMetaValue = typeof unknownStaticWYWMetaValue;
|
|
16
|
+
export declare const zeroArgFunctionExpressionBody: (expr: Expression) => Expression | null;
|
|
17
|
+
export declare const isNullLiteralExpression: (node: Node) => boolean;
|
|
18
|
+
export declare const isNullReturningFunctionExpression: (expr: Expression) => boolean;
|
|
19
|
+
export declare const createSameFileStaticWYWMetaHelperResolver: (code: string, filename: string) => ((seedValues: Map<string, unknown>) => Map<string, unknown>);
|
|
20
|
+
export declare const staticWYWMetaTreeValueStatus: (value: unknown, seen?: Set<unknown>) => {
|
|
21
|
+
hasMetadata: boolean;
|
|
22
|
+
safe: boolean;
|
|
23
|
+
};
|
|
24
|
+
export declare const isStaticWYWMetaTreeValue: (value: unknown) => boolean;
|
|
25
|
+
export type StaticProcessorInstance = BaseProcessor;
|
|
26
|
+
export declare const processorClassNameRuntimeValue: (processor: StaticProcessorInstance) => string;
|
|
27
|
+
export declare const isProcessorRuntimeClassName: (processor: StaticProcessorInstance, value: string) => boolean;
|
|
28
|
+
export declare const isPlainObjectRecord: (value: unknown) => value is Record<string, unknown>;
|
|
29
|
+
export declare const isStaticObjectAssignAliasValue: (value: unknown) => boolean;
|
|
30
|
+
export declare const artifactCssText: (artifact: unknown) => string | null;
|
|
31
|
+
export declare const isEmptyProcessorClassName: (value: string, processors: StaticProcessorInstance[], cache: Map<string, boolean>) => boolean;
|
|
32
|
+
export declare const isProcessorClassName: (value: string, processors: StaticProcessorInstance[], cache: Map<string, boolean>) => boolean;
|
|
33
|
+
export declare const isKnownProcessorClassName: (value: string, processorClassNames: ReadonlySet<string>) => boolean;
|
|
34
|
+
export declare const isSelectorOnlyProcessorValue: (value: unknown, processors: StaticProcessorInstance[], cache: Map<string, boolean>, seen?: Set<unknown>) => boolean;
|
|
35
|
+
export declare const isProcessorClassValue: (value: unknown, processors: StaticProcessorInstance[], cache: Map<string, boolean>, seen?: Set<unknown>) => boolean;
|
|
36
|
+
export declare const isKnownProcessorClassValue: (value: unknown, processorClassNames: ReadonlySet<string>, seen?: Set<unknown>) => boolean;
|
|
37
|
+
export declare const findWYWMetaExtendsExpression: (expr: Expression) => Expression | null;
|
|
38
|
+
export declare const collectWYWMetaExtendsExpressionsDeep: (program: Program, expr: Expression) => Expression[];
|
|
39
|
+
export declare const isStaticMetaObjectExpression: (expr: Node) => boolean;
|
|
40
|
+
export declare const collectWYWMetaExtendsHelperNames: (program: Program) => Set<string>;
|