@wyw-in-js/transform 1.1.0 → 2.0.0-alpha.0
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 +426 -289
- package/esm/cache.js.map +1 -1
- package/esm/debug/fileReporter.js +137 -134
- package/esm/debug/fileReporter.js.map +1 -1
- package/esm/eval/broker.js +2134 -0
- package/esm/eval/broker.js.map +1 -0
- package/esm/eval/lru.js +36 -0
- package/esm/eval/lru.js.map +1 -0
- package/esm/eval/prepareModuleOnDemand.js +21 -0
- package/esm/eval/prepareModuleOnDemand.js.map +1 -0
- package/esm/eval/protocol.js +2 -0
- package/esm/eval/protocol.js.map +1 -0
- package/esm/eval/resolverStrategy.js +51 -0
- package/esm/eval/resolverStrategy.js.map +1 -0
- package/esm/eval/runner.js +1759 -0
- package/esm/eval/runner.js.map +1 -0
- package/esm/eval/serialize.js +333 -0
- package/esm/eval/serialize.js.map +1 -0
- package/esm/eval/writeQueue.js +81 -0
- package/esm/eval/writeQueue.js.map +1 -0
- package/esm/evaluators/index.js +11 -12
- package/esm/evaluators/index.js.map +1 -1
- package/esm/index.js +25 -29
- package/esm/index.js.map +1 -1
- package/esm/module.js +896 -520
- package/esm/module.js.map +1 -1
- package/esm/shaker.js +14 -80
- package/esm/shaker.js.map +1 -1
- package/esm/transform/BaseEntrypoint.js +162 -164
- package/esm/transform/BaseEntrypoint.js.map +1 -1
- package/esm/transform/Entrypoint.helpers.js +96 -253
- package/esm/transform/Entrypoint.helpers.js.map +1 -1
- package/esm/transform/Entrypoint.js +336 -270
- package/esm/transform/Entrypoint.js.map +1 -1
- package/esm/transform/Entrypoint.types.js +1 -1
- package/esm/transform/Entrypoint.types.js.map +1 -1
- package/esm/transform/EvaluatedEntrypoint.js +10 -4
- package/esm/transform/EvaluatedEntrypoint.js.map +1 -1
- package/esm/transform/actions/AbortError.js +6 -6
- package/esm/transform/actions/AbortError.js.map +1 -1
- package/esm/transform/actions/BaseAction.js +140 -136
- package/esm/transform/actions/BaseAction.js.map +1 -1
- package/esm/transform/actions/UnprocessedEntrypointError.js +6 -6
- package/esm/transform/actions/UnprocessedEntrypointError.js.map +1 -1
- package/esm/transform/actions/actionRunner.js +63 -66
- package/esm/transform/actions/actionRunner.js.map +1 -1
- package/esm/transform/actions/types.js +1 -1
- package/esm/transform/actions/types.js.map +1 -1
- package/esm/transform/barrelManifest.types.js +2 -0
- package/esm/transform/barrelManifest.types.js.map +1 -0
- package/esm/transform/generators/baseProcessingHandlers.js +15 -17
- package/esm/transform/generators/baseProcessingHandlers.js.map +1 -1
- package/esm/transform/generators/collect.js +27 -55
- package/esm/transform/generators/collect.js.map +1 -1
- package/esm/transform/generators/createStylisPreprocessor.js +353 -321
- package/esm/transform/generators/createStylisPreprocessor.js.map +1 -1
- package/esm/transform/generators/evalFile.js +48 -47
- package/esm/transform/generators/evalFile.js.map +1 -1
- package/esm/transform/generators/extract.js +78 -90
- package/esm/transform/generators/extract.js.map +1 -1
- package/esm/transform/generators/getExports.js +57 -74
- package/esm/transform/generators/getExports.js.map +1 -1
- package/esm/transform/generators/index.js +11 -11
- package/esm/transform/generators/index.js.map +1 -1
- package/esm/transform/generators/processEntrypoint.js +78 -67
- package/esm/transform/generators/processEntrypoint.js.map +1 -1
- package/esm/transform/generators/processImports.js +102 -67
- package/esm/transform/generators/processImports.js.map +1 -1
- package/esm/transform/generators/resolveImports.js +165 -196
- package/esm/transform/generators/resolveImports.js.map +1 -1
- package/esm/transform/generators/resolveStaticOxcValues.js +2911 -0
- package/esm/transform/generators/resolveStaticOxcValues.js.map +1 -0
- package/esm/transform/generators/rewriteOxcBarrelImports.js +822 -0
- package/esm/transform/generators/rewriteOxcBarrelImports.js.map +1 -0
- package/esm/transform/generators/transform.js +239 -248
- package/esm/transform/generators/transform.js.map +1 -1
- package/esm/transform/generators/workflow.js +87 -90
- package/esm/transform/generators/workflow.js.map +1 -1
- package/esm/transform/helpers/loadWywOptions.js +154 -74
- package/esm/transform/helpers/loadWywOptions.js.map +1 -1
- package/esm/transform/helpers/withDefaultServices.js +13 -22
- package/esm/transform/helpers/withDefaultServices.js.map +1 -1
- package/esm/transform/isStaticallyEvaluatableModule.js +140 -152
- package/esm/transform/isStaticallyEvaluatableModule.js.map +1 -1
- package/esm/transform/oxcBarrelManifest.js +349 -0
- package/esm/transform/oxcBarrelManifest.js.map +1 -0
- package/esm/transform/rootLog.js +3 -3
- package/esm/transform/rootLog.js.map +1 -1
- package/esm/transform/syntax.js +2 -0
- package/esm/transform/syntax.js.map +1 -0
- package/esm/transform/types.js +2 -2
- package/esm/transform/types.js.map +1 -1
- package/esm/transform.js +123 -147
- package/esm/transform.js.map +1 -1
- package/esm/types.js +4 -1
- package/esm/types.js.map +1 -1
- package/esm/utils/EventEmitter.js +46 -48
- package/esm/utils/EventEmitter.js.map +1 -1
- package/esm/utils/ShakerMetadata.js +2 -2
- package/esm/utils/ShakerMetadata.js.map +1 -1
- package/esm/utils/TransformDiagnostics.js +9 -9
- package/esm/utils/TransformDiagnostics.js.map +1 -1
- package/esm/utils/TransformMetadata.js +24 -26
- package/esm/utils/TransformMetadata.js.map +1 -1
- package/esm/utils/applyOxcProcessors.js +1217 -0
- package/esm/utils/applyOxcProcessors.js.map +1 -0
- package/esm/utils/collectOxcExportsAndImports.js +934 -0
- package/esm/utils/collectOxcExportsAndImports.js.map +1 -0
- package/esm/utils/collectOxcRuntime.js +220 -0
- package/esm/utils/collectOxcRuntime.js.map +1 -0
- package/esm/utils/collectOxcTemplateDependencies.js +1398 -0
- package/esm/utils/collectOxcTemplateDependencies.js.map +1 -0
- package/esm/utils/dispose-polyfill.js +3 -4
- package/esm/utils/dispose-polyfill.js.map +1 -1
- package/esm/utils/getFileIdx.js +6 -6
- package/esm/utils/getFileIdx.js.map +1 -1
- package/esm/utils/getPluginKey.js +12 -12
- package/esm/utils/getPluginKey.js.map +1 -1
- package/esm/utils/getVisitorKeys.js +9 -3
- package/esm/utils/getVisitorKeys.js.map +1 -1
- package/esm/utils/hasCachedWywPrevalExport.js +23 -0
- package/esm/utils/hasCachedWywPrevalExport.js.map +1 -0
- package/esm/utils/hasWywPreval.js +5 -5
- package/esm/utils/hasWywPreval.js.map +1 -1
- package/esm/utils/importOverrides.js +75 -90
- package/esm/utils/importOverrides.js.map +1 -1
- package/esm/utils/isNode.js +2 -2
- package/esm/utils/isNode.js.map +1 -1
- package/esm/utils/isNotNull.js +2 -2
- package/esm/utils/isNotNull.js.map +1 -1
- package/esm/utils/isSerializable.js +11 -11
- package/esm/utils/isSerializable.js.map +1 -1
- package/esm/utils/oxcAstService.js +121 -0
- package/esm/utils/oxcAstService.js.map +1 -0
- package/esm/utils/oxcEmit.js +447 -0
- package/esm/utils/oxcEmit.js.map +1 -0
- package/esm/utils/oxcPreevalStage.js +97 -0
- package/esm/utils/oxcPreevalStage.js.map +1 -0
- package/esm/utils/oxcPreevalTransforms.js +1054 -0
- package/esm/utils/oxcPreevalTransforms.js.map +1 -0
- package/esm/utils/oxcShaker.js +662 -0
- package/esm/utils/oxcShaker.js.map +1 -0
- package/esm/utils/parseOxc.js +37 -0
- package/esm/utils/parseOxc.js.map +1 -0
- package/esm/utils/parseRequest.js +27 -27
- package/esm/utils/parseRequest.js.map +1 -1
- package/esm/utils/peek.js +1 -1
- package/esm/utils/peek.js.map +1 -1
- package/esm/utils/processorLookup.js +125 -0
- package/esm/utils/processorLookup.js.map +1 -0
- package/esm/utils/resolveWithConditions.js +99 -0
- package/esm/utils/resolveWithConditions.js.map +1 -0
- package/esm/vm/createVmContext.js +140 -141
- package/esm/vm/createVmContext.js.map +1 -1
- package/esm/vm/process.js +11 -13
- package/esm/vm/process.js.map +1 -1
- package/package.json +18 -26
- package/types/cache.d.ts +17 -8
- package/types/cache.js +237 -95
- package/types/debug/fileReporter.js +22 -22
- package/types/eval/broker.d.ts +88 -0
- package/types/eval/broker.js +2262 -0
- package/types/eval/lru.d.ts +10 -0
- package/types/eval/lru.js +36 -0
- package/types/eval/prepareModuleOnDemand.d.ts +7 -0
- package/types/eval/prepareModuleOnDemand.js +24 -0
- package/types/eval/protocol.d.ts +97 -0
- package/types/eval/protocol.js +1 -0
- package/types/eval/resolverStrategy.d.ts +13 -0
- package/types/eval/resolverStrategy.js +46 -0
- package/types/eval/serialize.d.ts +78 -0
- package/types/eval/serialize.js +357 -0
- package/types/eval/writeQueue.d.ts +13 -0
- package/types/eval/writeQueue.js +80 -0
- package/types/evaluators/index.d.ts +2 -2
- package/types/evaluators/index.js +6 -9
- package/types/index.d.ts +3 -6
- package/types/index.js +24 -82
- package/types/module.d.ts +35 -7
- package/types/module.js +535 -163
- package/types/shaker.d.ts +2 -10
- package/types/shaker.js +10 -100
- package/types/transform/BaseEntrypoint.js +6 -11
- package/types/transform/Entrypoint.d.ts +15 -15
- package/types/transform/Entrypoint.helpers.d.ts +2 -5
- package/types/transform/Entrypoint.helpers.js +43 -203
- package/types/transform/Entrypoint.js +130 -53
- package/types/transform/Entrypoint.types.d.ts +28 -6
- package/types/transform/Entrypoint.types.js +1 -2
- package/types/transform/EvaluatedEntrypoint.d.ts +13 -2
- package/types/transform/EvaluatedEntrypoint.js +7 -6
- package/types/transform/actions/AbortError.js +2 -7
- package/types/transform/actions/BaseAction.js +4 -8
- package/types/transform/actions/UnprocessedEntrypointError.js +2 -7
- package/types/transform/actions/actionRunner.js +8 -12
- package/types/transform/actions/types.d.ts +2 -2
- package/types/transform/actions/types.js +1 -2
- package/types/transform/{barrelManifest.d.ts → barrelManifest.types.d.ts} +0 -2
- package/types/transform/barrelManifest.types.js +1 -0
- package/types/transform/generators/baseProcessingHandlers.d.ts +4 -5
- package/types/transform/generators/baseProcessingHandlers.js +10 -14
- package/types/transform/generators/collect.js +13 -39
- package/types/transform/generators/createStylisPreprocessor.js +19 -60
- package/types/transform/generators/evalFile.d.ts +2 -2
- package/types/transform/generators/evalFile.js +26 -28
- package/types/transform/generators/extract.js +5 -8
- package/types/transform/generators/getExports.js +23 -30
- package/types/transform/generators/index.d.ts +2 -2
- package/types/transform/generators/index.js +11 -14
- package/types/transform/generators/processEntrypoint.d.ts +2 -2
- package/types/transform/generators/processEntrypoint.js +60 -26
- package/types/transform/generators/processImports.d.ts +0 -3
- package/types/transform/generators/processImports.js +60 -20
- package/types/transform/generators/resolveImports.js +18 -22
- package/types/transform/generators/resolveStaticOxcValues.d.ts +2 -0
- package/types/transform/generators/resolveStaticOxcValues.js +3235 -0
- package/types/transform/generators/{rewriteBarrelImports.d.ts → rewriteOxcBarrelImports.d.ts} +2 -3
- package/types/transform/generators/{rewriteBarrelImports.js → rewriteOxcBarrelImports.js} +282 -225
- package/types/transform/generators/transform.d.ts +3 -7
- package/types/transform/generators/transform.js +203 -199
- package/types/transform/generators/workflow.js +62 -45
- package/types/transform/helpers/loadWywOptions.js +94 -20
- package/types/transform/helpers/withDefaultServices.d.ts +1 -1
- package/types/transform/helpers/withDefaultServices.js +6 -44
- package/types/transform/isStaticallyEvaluatableModule.d.ts +1 -2
- package/types/transform/isStaticallyEvaluatableModule.js +125 -126
- package/types/transform/oxcBarrelManifest.d.ts +2 -0
- package/types/transform/{barrelManifest.js → oxcBarrelManifest.js} +156 -97
- package/types/transform/rootLog.js +2 -5
- package/types/transform/syntax.d.ts +38 -0
- package/types/transform/syntax.js +1 -0
- package/types/transform/types.d.ts +9 -6
- package/types/transform/types.js +1 -4
- package/types/transform.d.ts +2 -2
- package/types/transform.js +88 -101
- package/types/types.d.ts +0 -23
- package/types/types.js +1 -2
- package/types/utils/EventEmitter.js +3 -9
- package/types/utils/ShakerMetadata.js +1 -5
- package/types/utils/TransformDiagnostics.js +3 -7
- package/types/utils/TransformMetadata.js +8 -16
- package/types/utils/applyOxcProcessors.d.ts +16 -0
- package/types/utils/applyOxcProcessors.js +1391 -0
- package/types/utils/collectOxcExportsAndImports.d.ts +35 -0
- package/types/utils/collectOxcExportsAndImports.js +957 -0
- package/types/utils/collectOxcRuntime.d.ts +14 -0
- package/types/utils/collectOxcRuntime.js +250 -0
- package/types/utils/collectOxcTemplateDependencies.d.ts +38 -0
- package/types/utils/collectOxcTemplateDependencies.js +1580 -0
- package/types/utils/getFileIdx.js +1 -4
- package/types/utils/getPluginKey.d.ts +5 -2
- package/types/utils/getPluginKey.js +2 -6
- package/types/utils/getVisitorKeys.d.ts +4 -4
- package/types/utils/getVisitorKeys.js +9 -6
- package/types/utils/hasCachedWywPrevalExport.d.ts +14 -0
- package/types/utils/hasCachedWywPrevalExport.js +30 -0
- package/types/utils/hasWywPreval.js +1 -4
- package/types/utils/importOverrides.js +17 -27
- package/types/utils/isNode.d.ts +2 -2
- package/types/utils/isNode.js +2 -6
- package/types/utils/isNotNull.js +1 -4
- package/types/utils/isSerializable.js +3 -6
- package/types/utils/oxcAstService.d.ts +11 -0
- package/types/utils/oxcAstService.js +79 -0
- package/types/utils/oxcEmit.d.ts +19 -0
- package/types/utils/oxcEmit.js +506 -0
- package/types/utils/oxcPreevalStage.d.ts +20 -0
- package/types/utils/oxcPreevalStage.js +102 -0
- package/types/utils/oxcPreevalTransforms.d.ts +13 -0
- package/types/utils/oxcPreevalTransforms.js +1179 -0
- package/types/utils/oxcShaker.d.ts +13 -0
- package/types/utils/oxcShaker.js +751 -0
- package/types/utils/parseOxc.d.ts +11 -0
- package/types/utils/parseOxc.js +38 -0
- package/types/utils/parseRequest.js +2 -7
- package/types/utils/peek.js +1 -5
- package/types/utils/processorLookup.d.ts +8 -0
- package/types/utils/processorLookup.js +135 -0
- package/types/utils/resolveWithConditions.d.ts +12 -0
- package/types/utils/resolveWithConditions.js +103 -0
- package/types/vm/createVmContext.d.ts +2 -2
- package/types/vm/createVmContext.js +25 -62
- package/types/vm/process.js +20 -26
- package/esm/babel.js +0 -2
- package/esm/babel.js.map +0 -1
- package/esm/options/buildOptions.js +0 -168
- package/esm/options/buildOptions.js.map +0 -1
- package/esm/options/buildOptions.test.js +0 -138
- package/esm/options/buildOptions.test.js.map +0 -1
- package/esm/options/loadBabelOptions.js +0 -24
- package/esm/options/loadBabelOptions.js.map +0 -1
- package/esm/plugins/babel-transform.js +0 -53
- package/esm/plugins/babel-transform.js.map +0 -1
- package/esm/plugins/collector.js +0 -60
- package/esm/plugins/collector.js.map +0 -1
- package/esm/plugins/dynamic-import.js +0 -56
- package/esm/plugins/dynamic-import.js.map +0 -1
- package/esm/plugins/preeval.js +0 -73
- package/esm/plugins/preeval.js.map +0 -1
- package/esm/plugins/shaker.js +0 -680
- package/esm/plugins/shaker.js.map +0 -1
- package/esm/transform/barrelManifest.js +0 -291
- package/esm/transform/barrelManifest.js.map +0 -1
- package/esm/transform/generators/explodeReexports.js +0 -64
- package/esm/transform/generators/explodeReexports.js.map +0 -1
- package/esm/transform/generators/rewriteBarrelImports.js +0 -733
- package/esm/transform/generators/rewriteBarrelImports.js.map +0 -1
- package/esm/utils/addIdentifierToWywPreval.js +0 -68
- package/esm/utils/addIdentifierToWywPreval.js.map +0 -1
- package/esm/utils/collectExportsAndImports.js +0 -1157
- package/esm/utils/collectExportsAndImports.js.map +0 -1
- package/esm/utils/collectTemplateDependencies.js +0 -228
- package/esm/utils/collectTemplateDependencies.js.map +0 -1
- package/esm/utils/createId.js +0 -6
- package/esm/utils/createId.js.map +0 -1
- package/esm/utils/findIdentifiers.js +0 -62
- package/esm/utils/findIdentifiers.js.map +0 -1
- package/esm/utils/getConstantStringValue.js +0 -58
- package/esm/utils/getConstantStringValue.js.map +0 -1
- package/esm/utils/getMemberExpressionPropertyName.js +0 -11
- package/esm/utils/getMemberExpressionPropertyName.js.map +0 -1
- package/esm/utils/getScope.js +0 -6
- package/esm/utils/getScope.js.map +0 -1
- package/esm/utils/getSource.js +0 -15
- package/esm/utils/getSource.js.map +0 -1
- package/esm/utils/getTagProcessor.js +0 -404
- package/esm/utils/getTagProcessor.js.map +0 -1
- package/esm/utils/isExports.js +0 -22
- package/esm/utils/isExports.js.map +0 -1
- package/esm/utils/isGlobal.js +0 -6
- package/esm/utils/isGlobal.js.map +0 -1
- package/esm/utils/isNodePath.js +0 -4
- package/esm/utils/isNodePath.js.map +0 -1
- package/esm/utils/isRemoved.js +0 -46
- package/esm/utils/isRemoved.js.map +0 -1
- package/esm/utils/isRequire.js +0 -13
- package/esm/utils/isRequire.js.map +0 -1
- package/esm/utils/isTypedNode.js +0 -6
- package/esm/utils/isTypedNode.js.map +0 -1
- package/esm/utils/isUnnecessaryReactCall.js +0 -72
- package/esm/utils/isUnnecessaryReactCall.js.map +0 -1
- package/esm/utils/removeDangerousCode.js +0 -276
- package/esm/utils/removeDangerousCode.js.map +0 -1
- package/esm/utils/replaceImportMetaEnv.js +0 -44
- package/esm/utils/replaceImportMetaEnv.js.map +0 -1
- package/esm/utils/scopeHelpers.js +0 -527
- package/esm/utils/scopeHelpers.js.map +0 -1
- package/esm/utils/traversalCache.js +0 -23
- package/esm/utils/traversalCache.js.map +0 -1
- package/esm/utils/unwrapExpression.js +0 -18
- package/esm/utils/unwrapExpression.js.map +0 -1
- package/esm/utils/unwrapSequence.js +0 -14
- package/esm/utils/unwrapSequence.js.map +0 -1
- package/esm/utils/valueToLiteral.js +0 -59
- package/esm/utils/valueToLiteral.js.map +0 -1
- package/esm/utils/visitors/JSXElementsRemover.js +0 -51
- package/esm/utils/visitors/JSXElementsRemover.js.map +0 -1
- package/lib/babel.js +0 -2
- package/lib/babel.js.map +0 -1
- package/lib/cache.js +0 -308
- package/lib/cache.js.map +0 -1
- package/lib/debug/fileReporter.js +0 -153
- package/lib/debug/fileReporter.js.map +0 -1
- package/lib/evaluators/index.js +0 -20
- package/lib/evaluators/index.js.map +0 -1
- package/lib/index.js +0 -286
- package/lib/index.js.map +0 -1
- package/lib/module.js +0 -552
- package/lib/module.js.map +0 -1
- package/lib/options/buildOptions.js +0 -176
- package/lib/options/buildOptions.js.map +0 -1
- package/lib/options/buildOptions.test.js +0 -141
- package/lib/options/buildOptions.test.js.map +0 -1
- package/lib/options/loadBabelOptions.js +0 -31
- package/lib/options/loadBabelOptions.js.map +0 -1
- package/lib/plugins/babel-transform.js +0 -60
- package/lib/plugins/babel-transform.js.map +0 -1
- package/lib/plugins/collector.js +0 -70
- package/lib/plugins/collector.js.map +0 -1
- package/lib/plugins/dynamic-import.js +0 -61
- package/lib/plugins/dynamic-import.js.map +0 -1
- package/lib/plugins/preeval.js +0 -81
- package/lib/plugins/preeval.js.map +0 -1
- package/lib/plugins/shaker.js +0 -691
- package/lib/plugins/shaker.js.map +0 -1
- package/lib/shaker.js +0 -95
- package/lib/shaker.js.map +0 -1
- package/lib/transform/BaseEntrypoint.js +0 -179
- package/lib/transform/BaseEntrypoint.js.map +0 -1
- package/lib/transform/Entrypoint.helpers.js +0 -279
- package/lib/transform/Entrypoint.helpers.js.map +0 -1
- package/lib/transform/Entrypoint.js +0 -289
- package/lib/transform/Entrypoint.js.map +0 -1
- package/lib/transform/Entrypoint.types.js +0 -2
- package/lib/transform/Entrypoint.types.js.map +0 -1
- package/lib/transform/EvaluatedEntrypoint.js +0 -13
- package/lib/transform/EvaluatedEntrypoint.js.map +0 -1
- package/lib/transform/actions/AbortError.js +0 -16
- package/lib/transform/actions/AbortError.js.map +0 -1
- package/lib/transform/actions/BaseAction.js +0 -150
- package/lib/transform/actions/BaseAction.js.map +0 -1
- package/lib/transform/actions/UnprocessedEntrypointError.js +0 -16
- package/lib/transform/actions/UnprocessedEntrypointError.js.map +0 -1
- package/lib/transform/actions/actionRunner.js +0 -82
- package/lib/transform/actions/actionRunner.js.map +0 -1
- package/lib/transform/actions/types.js +0 -2
- package/lib/transform/actions/types.js.map +0 -1
- package/lib/transform/barrelManifest.js +0 -300
- package/lib/transform/barrelManifest.js.map +0 -1
- package/lib/transform/generators/baseProcessingHandlers.js +0 -27
- package/lib/transform/generators/baseProcessingHandlers.js.map +0 -1
- package/lib/transform/generators/collect.js +0 -66
- package/lib/transform/generators/collect.js.map +0 -1
- package/lib/transform/generators/createStylisPreprocessor.js +0 -372
- package/lib/transform/generators/createStylisPreprocessor.js.map +0 -1
- package/lib/transform/generators/evalFile.js +0 -57
- package/lib/transform/generators/evalFile.js.map +0 -1
- package/lib/transform/generators/explodeReexports.js +0 -71
- package/lib/transform/generators/explodeReexports.js.map +0 -1
- package/lib/transform/generators/extract.js +0 -102
- package/lib/transform/generators/extract.js.map +0 -1
- package/lib/transform/generators/getExports.js +0 -85
- package/lib/transform/generators/getExports.js.map +0 -1
- package/lib/transform/generators/index.js +0 -19
- package/lib/transform/generators/index.js.map +0 -1
- package/lib/transform/generators/processEntrypoint.js +0 -76
- package/lib/transform/generators/processEntrypoint.js.map +0 -1
- package/lib/transform/generators/processImports.js +0 -82
- package/lib/transform/generators/processImports.js.map +0 -1
- package/lib/transform/generators/resolveImports.js +0 -221
- package/lib/transform/generators/resolveImports.js.map +0 -1
- package/lib/transform/generators/rewriteBarrelImports.js +0 -743
- package/lib/transform/generators/rewriteBarrelImports.js.map +0 -1
- package/lib/transform/generators/transform.js +0 -272
- package/lib/transform/generators/transform.js.map +0 -1
- package/lib/transform/generators/workflow.js +0 -100
- package/lib/transform/generators/workflow.js.map +0 -1
- package/lib/transform/helpers/loadWywOptions.js +0 -88
- package/lib/transform/helpers/loadWywOptions.js.map +0 -1
- package/lib/transform/helpers/withDefaultServices.js +0 -31
- package/lib/transform/helpers/withDefaultServices.js.map +0 -1
- package/lib/transform/isStaticallyEvaluatableModule.js +0 -159
- package/lib/transform/isStaticallyEvaluatableModule.js.map +0 -1
- package/lib/transform/rootLog.js +0 -9
- package/lib/transform/rootLog.js.map +0 -1
- package/lib/transform/types.js +0 -8
- package/lib/transform/types.js.map +0 -1
- package/lib/transform.js +0 -160
- package/lib/transform.js.map +0 -1
- package/lib/types.js +0 -2
- package/lib/types.js.map +0 -1
- package/lib/utils/EventEmitter.js +0 -61
- package/lib/utils/EventEmitter.js.map +0 -1
- package/lib/utils/ShakerMetadata.js +0 -9
- package/lib/utils/ShakerMetadata.js.map +0 -1
- package/lib/utils/TransformDiagnostics.js +0 -20
- package/lib/utils/TransformDiagnostics.js.map +0 -1
- package/lib/utils/TransformMetadata.js +0 -45
- package/lib/utils/TransformMetadata.js.map +0 -1
- package/lib/utils/addIdentifierToWywPreval.js +0 -75
- package/lib/utils/addIdentifierToWywPreval.js.map +0 -1
- package/lib/utils/collectExportsAndImports.js +0 -1173
- package/lib/utils/collectExportsAndImports.js.map +0 -1
- package/lib/utils/collectTemplateDependencies.js +0 -242
- package/lib/utils/collectTemplateDependencies.js.map +0 -1
- package/lib/utils/createId.js +0 -13
- package/lib/utils/createId.js.map +0 -1
- package/lib/utils/dispose-polyfill.js +0 -9
- package/lib/utils/dispose-polyfill.js.map +0 -1
- package/lib/utils/findIdentifiers.js +0 -73
- package/lib/utils/findIdentifiers.js.map +0 -1
- package/lib/utils/getConstantStringValue.js +0 -66
- package/lib/utils/getConstantStringValue.js.map +0 -1
- package/lib/utils/getFileIdx.js +0 -16
- package/lib/utils/getFileIdx.js.map +0 -1
- package/lib/utils/getMemberExpressionPropertyName.js +0 -18
- package/lib/utils/getMemberExpressionPropertyName.js.map +0 -1
- package/lib/utils/getPluginKey.js +0 -21
- package/lib/utils/getPluginKey.js.map +0 -1
- package/lib/utils/getScope.js +0 -12
- package/lib/utils/getScope.js.map +0 -1
- package/lib/utils/getSource.js +0 -24
- package/lib/utils/getSource.js.map +0 -1
- package/lib/utils/getTagProcessor.js +0 -424
- package/lib/utils/getTagProcessor.js.map +0 -1
- package/lib/utils/getVisitorKeys.js +0 -11
- package/lib/utils/getVisitorKeys.js.map +0 -1
- package/lib/utils/hasWywPreval.js +0 -13
- package/lib/utils/hasWywPreval.js.map +0 -1
- package/lib/utils/importOverrides.js +0 -119
- package/lib/utils/importOverrides.js.map +0 -1
- package/lib/utils/isExports.js +0 -27
- package/lib/utils/isExports.js.map +0 -1
- package/lib/utils/isGlobal.js +0 -13
- package/lib/utils/isGlobal.js.map +0 -1
- package/lib/utils/isNode.js +0 -9
- package/lib/utils/isNode.js.map +0 -1
- package/lib/utils/isNodePath.js +0 -10
- package/lib/utils/isNodePath.js.map +0 -1
- package/lib/utils/isNotNull.js +0 -10
- package/lib/utils/isNotNull.js.map +0 -1
- package/lib/utils/isRemoved.js +0 -52
- package/lib/utils/isRemoved.js.map +0 -1
- package/lib/utils/isRequire.js +0 -18
- package/lib/utils/isRequire.js.map +0 -1
- package/lib/utils/isSerializable.js +0 -19
- package/lib/utils/isSerializable.js.map +0 -1
- package/lib/utils/isTypedNode.js +0 -13
- package/lib/utils/isTypedNode.js.map +0 -1
- package/lib/utils/isUnnecessaryReactCall.js +0 -81
- package/lib/utils/isUnnecessaryReactCall.js.map +0 -1
- package/lib/utils/parseRequest.js +0 -37
- package/lib/utils/parseRequest.js.map +0 -1
- package/lib/utils/peek.js +0 -9
- package/lib/utils/peek.js.map +0 -1
- package/lib/utils/removeDangerousCode.js +0 -284
- package/lib/utils/removeDangerousCode.js.map +0 -1
- package/lib/utils/replaceImportMetaEnv.js +0 -50
- package/lib/utils/replaceImportMetaEnv.js.map +0 -1
- package/lib/utils/scopeHelpers.js +0 -557
- package/lib/utils/scopeHelpers.js.map +0 -1
- package/lib/utils/traversalCache.js +0 -31
- package/lib/utils/traversalCache.js.map +0 -1
- package/lib/utils/unwrapExpression.js +0 -25
- package/lib/utils/unwrapExpression.js.map +0 -1
- package/lib/utils/unwrapSequence.js +0 -20
- package/lib/utils/unwrapSequence.js.map +0 -1
- package/lib/utils/valueToLiteral.js +0 -65
- package/lib/utils/valueToLiteral.js.map +0 -1
- package/lib/utils/visitors/JSXElementsRemover.js +0 -57
- package/lib/utils/visitors/JSXElementsRemover.js.map +0 -1
- package/lib/vm/createVmContext.js +0 -166
- package/lib/vm/createVmContext.js.map +0 -1
- package/lib/vm/process.js +0 -38
- package/lib/vm/process.js.map +0 -1
- package/types/babel.d.ts +0 -2
- package/types/babel.js +0 -2
- package/types/options/buildOptions.d.ts +0 -6
- package/types/options/buildOptions.js +0 -178
- package/types/options/loadBabelOptions.d.ts +0 -3
- package/types/options/loadBabelOptions.js +0 -26
- package/types/plugins/babel-transform.d.ts +0 -4
- package/types/plugins/babel-transform.js +0 -49
- package/types/plugins/collector.d.ts +0 -23
- package/types/plugins/collector.js +0 -62
- package/types/plugins/dynamic-import.d.ts +0 -6
- package/types/plugins/dynamic-import.js +0 -60
- package/types/plugins/preeval.d.ts +0 -16
- package/types/plugins/preeval.js +0 -69
- package/types/plugins/shaker.d.ts +0 -14
- package/types/plugins/shaker.js +0 -724
- package/types/transform/generators/explodeReexports.d.ts +0 -7
- package/types/transform/generators/explodeReexports.js +0 -65
- package/types/utils/addIdentifierToWywPreval.d.ts +0 -4
- package/types/utils/addIdentifierToWywPreval.js +0 -74
- package/types/utils/collectExportsAndImports.d.ts +0 -31
- package/types/utils/collectExportsAndImports.js +0 -1147
- package/types/utils/collectTemplateDependencies.d.ts +0 -17
- package/types/utils/collectTemplateDependencies.js +0 -220
- package/types/utils/createId.d.ts +0 -2
- package/types/utils/createId.js +0 -9
- package/types/utils/findIdentifiers.d.ts +0 -6
- package/types/utils/findIdentifiers.js +0 -67
- package/types/utils/getConstantStringValue.d.ts +0 -2
- package/types/utils/getConstantStringValue.js +0 -94
- package/types/utils/getMemberExpressionPropertyName.d.ts +0 -2
- package/types/utils/getMemberExpressionPropertyName.js +0 -46
- package/types/utils/getScope.d.ts +0 -2
- package/types/utils/getScope.js +0 -10
- package/types/utils/getSource.d.ts +0 -2
- package/types/utils/getSource.js +0 -22
- package/types/utils/getTagProcessor.d.ts +0 -13
- package/types/utils/getTagProcessor.js +0 -411
- package/types/utils/isExports.d.ts +0 -6
- package/types/utils/isExports.js +0 -19
- package/types/utils/isGlobal.d.ts +0 -2
- package/types/utils/isGlobal.js +0 -9
- package/types/utils/isNodePath.d.ts +0 -3
- package/types/utils/isNodePath.js +0 -6
- package/types/utils/isRemoved.d.ts +0 -5
- package/types/utils/isRemoved.js +0 -41
- package/types/utils/isRequire.d.ts +0 -6
- package/types/utils/isRequire.js +0 -14
- package/types/utils/isTypedNode.d.ts +0 -5
- package/types/utils/isTypedNode.js +0 -9
- package/types/utils/isUnnecessaryReactCall.d.ts +0 -3
- package/types/utils/isUnnecessaryReactCall.js +0 -75
- package/types/utils/removeDangerousCode.d.ts +0 -4
- package/types/utils/removeDangerousCode.js +0 -326
- package/types/utils/replaceImportMetaEnv.d.ts +0 -3
- package/types/utils/replaceImportMetaEnv.js +0 -39
- package/types/utils/scopeHelpers.d.ts +0 -12
- package/types/utils/scopeHelpers.js +0 -580
- package/types/utils/traversalCache.d.ts +0 -4
- package/types/utils/traversalCache.js +0 -27
- package/types/utils/unwrapExpression.d.ts +0 -2
- package/types/utils/unwrapExpression.js +0 -57
- package/types/utils/unwrapSequence.d.ts +0 -8
- package/types/utils/unwrapSequence.js +0 -16
- package/types/utils/valueToLiteral.d.ts +0 -3
- package/types/utils/valueToLiteral.js +0 -63
- package/types/utils/visitors/JSXElementsRemover.d.ts +0 -3
- package/types/utils/visitors/JSXElementsRemover.js +0 -51
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","names":[],"sources":["../../src/utils/collectOxcTemplateDependencies.ts"],"version":3,"sourcesContent":["/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */\n\nimport type { ExpressionValue, Location } from '@wyw-in-js/shared';\nimport { ValueType } from '@wyw-in-js/shared';\nimport type {\n AssignmentExpression,\n Expression,\n ImportDeclaration,\n ImportSpecifier,\n MemberExpression,\n ModuleExportName,\n Node,\n Program,\n TemplateLiteral,\n UpdateExpression,\n VariableDeclaration,\n VariableDeclarator,\n} from 'oxc-parser';\n\nimport { parseOxcProgramCached } from './parseOxc';\n\ntype AnyNode = Node & Record<string, unknown>;\ntype OxcFunctionLikeNode = Node & {\n async: boolean;\n body: Node | null;\n id?: { name: string } | null;\n params: Node[];\n};\ntype BindingKind = 'function' | 'import' | 'param' | 'variable';\ntype ScopedDeclarationKind = 'const' | 'let' | 'var';\n\ntype Binding = {\n declarationKind?: ScopedDeclarationKind;\n declaredAt: number;\n declaration: VariableDeclaration | null;\n declarator: VariableDeclarator | null;\n functionNode?: OxcFunctionLikeNode | null;\n imported?: 'default' | '*' | string;\n importedFrom?: string;\n isRoot: boolean;\n kind: BindingKind;\n name: string;\n scope: Scope;\n};\n\ntype Replacement = {\n end: number;\n start: number;\n value: string;\n};\n\ntype SourceLocation = {\n end: Location;\n filename?: string;\n identifierName: string | null | undefined;\n start: Location;\n};\n\ntype SpanLookup = Set<string> | null;\n\ntype LocationLookup = (offset: number) => Location;\n\ntype ExpressionSpan = {\n end: number;\n start: number;\n};\n\ntype Scope = {\n bindings: Map<string, Binding>;\n depth: number;\n end: number;\n functionBoundary: boolean;\n params: Set<string>;\n parent: Scope | null;\n root: boolean;\n start: number;\n};\n\ntype ReferenceIdentifier = {\n end: number;\n name: string;\n start: number;\n};\n\nexport type OxcStaticImportReference = {\n imported: 'default' | string;\n importLocal?: string;\n local: string;\n source: string;\n};\n\nexport type OxcStaticValue = {\n name: string;\n value: unknown;\n};\n\nexport type OxcStaticValueCandidate = {\n imports: OxcStaticImportReference[];\n name: string;\n source: string;\n};\n\ntype TemplateExtractionResult = {\n code: string;\n dependencyNames: string[];\n expressionValues: Omit<ExpressionValue, 'buildCodeFrameError'>[];\n staticValueCandidates: OxcStaticValueCandidate[];\n staticValues: OxcStaticValue[];\n};\n\ntype ExtractionContext = {\n bindingResolutionCache: Map<string, Map<number, Binding | null>>;\n bindingsByName: Map<string, Binding[]>;\n code: string;\n currentInsertionPoint: number;\n currentExpressionStart: number;\n dependencyNames: Set<string>;\n expressionValues: Omit<ExpressionValue, 'buildCodeFrameError'>[];\n filename: string;\n hoistedBindingNames: Map<string, string>;\n hoistedDeclarations: Map<string, string>;\n hoistedDeclarationsByInsertionPoint: Map<number, string[]>;\n loc: LocationLookup;\n referencesByNode: WeakMap<Node, ReferenceIdentifier[]>;\n replacements: Replacement[];\n rootMutationsByBinding: Map<\n string,\n Array<AssignmentExpression | UpdateExpression>\n >;\n staticImportAliases: Map<string, string>;\n staticValueCandidates: OxcStaticValueCandidate[];\n staticValues: OxcStaticValue[];\n usedNames: Set<string>;\n};\n\ntype ExtractedExpression = {\n expressionCode: string;\n importedFrom: string[];\n kind: ValueType.FUNCTION | ValueType.LAZY;\n staticExpressionCode?: string;\n staticImports: OxcStaticImportReference[];\n staticValue?: unknown;\n};\n\ntype ProgramAnalysis = {\n bindingsByName: Map<string, Binding[]>;\n rootMutationsByBinding: Map<\n string,\n Array<AssignmentExpression | UpdateExpression>\n >;\n targetExpressions: Expression[];\n templateLiterals: TemplateLiteral[];\n usedNames: Set<string>;\n};\n\nconst isNode = (value: unknown): value is Node =>\n !!value &&\n typeof value === 'object' &&\n 'type' in value &&\n typeof (value as { type?: unknown }).type === 'string';\n\nconst getChildren = (node: Node): Node[] => {\n const result: Node[] = [];\n const record = node as AnyNode;\n\n Object.keys(record).forEach((key) => {\n if (key === 'type' || key === 'start' || key === 'end' || key === 'range') {\n return;\n }\n\n const value = record[key];\n if (isNode(value)) {\n result.push(value);\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item) => {\n if (isNode(item)) {\n result.push(item);\n }\n });\n }\n });\n\n return result;\n};\n\nconst parseOxc = (code: string, filename: string): Program => {\n return parseOxcProgramCached(filename, code, 'unambiguous');\n};\n\nconst toSpanKey = (start: number, end: number): string => `${start}:${end}`;\n\nconst createSpanLookup = (spans?: ExpressionSpan[]): SpanLookup => {\n if (!spans || spans.length === 0) {\n return null;\n }\n\n return new Set(spans.map((span) => toSpanKey(span.start, span.end)));\n};\n\nconst matchesSpanLookup = (\n node: Pick<Node, 'start' | 'end'>,\n spanLookup: SpanLookup\n): boolean => !spanLookup || spanLookup.has(toSpanKey(node.start, node.end));\n\nconst createLocationLookup = (code: string): LocationLookup => {\n const lineStarts = [0];\n for (let idx = 0; idx < code.length; idx += 1) {\n if (code[idx] === '\\n') {\n lineStarts.push(idx + 1);\n }\n }\n\n return (offset) => {\n let low = 0;\n let high = lineStarts.length - 1;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const next = lineStarts[mid + 1] ?? Infinity;\n if (lineStarts[mid] <= offset && offset < next) {\n return {\n column: offset - lineStarts[mid],\n line: mid + 1,\n };\n }\n\n if (offset < lineStarts[mid]) {\n high = mid - 1;\n } else {\n low = mid + 1;\n }\n }\n\n const lastLine = lineStarts.length - 1;\n return {\n column: Math.max(0, offset - lineStarts[lastLine]),\n line: lastLine + 1,\n };\n };\n};\n\nconst getSourceLocation = (\n start: number,\n end: number,\n ctx: Pick<ExtractionContext, 'filename' | 'loc'>\n): SourceLocation => ({\n end: ctx.loc(end),\n filename: ctx.filename,\n identifierName: undefined,\n start: ctx.loc(start),\n});\n\nconst createScope = (\n parent: Scope | null,\n node: Pick<Node, 'start' | 'end'>,\n root = false,\n functionBoundary = false\n): Scope => ({\n bindings: new Map(),\n depth: parent ? parent.depth + 1 : 0,\n end: node.end,\n functionBoundary,\n params: new Set(),\n parent,\n root,\n start: node.start,\n});\n\nconst normalizeDeclarationKind = (\n declarationKind: VariableDeclaration['kind']\n): ScopedDeclarationKind => {\n if (declarationKind === 'var') {\n return 'var';\n }\n\n if (declarationKind === 'let') {\n return 'let';\n }\n\n return 'const';\n};\n\nconst moduleExportName = (node: ModuleExportName): string =>\n node.type === 'Literal' ? String(node.value) : node.name;\n\nconst getImportSpecifierInfo = (\n statement: ImportDeclaration,\n specifier: ImportDeclaration['specifiers'][number]\n): { imported: 'default' | '*' | string; local: string } | null => {\n const local = specifier.local?.name;\n if (!local) {\n return null;\n }\n\n if (specifier.type === 'ImportDefaultSpecifier') {\n return {\n imported: 'default',\n local,\n };\n }\n\n if (specifier.type === 'ImportNamespaceSpecifier') {\n return {\n imported: '*',\n local,\n };\n }\n\n if (\n statement.importKind === 'type' ||\n (specifier as ImportSpecifier).importKind === 'type'\n ) {\n return null;\n }\n\n return {\n imported: moduleExportName((specifier as ImportSpecifier).imported),\n local,\n };\n};\n\nconst getDeclarationScope = (\n scope: Scope,\n declarationKind: ScopedDeclarationKind\n): Scope => {\n if (declarationKind !== 'var') {\n return scope;\n }\n\n let current: Scope | null = scope;\n while (current && !current.functionBoundary) {\n current = current.parent;\n }\n\n return current ?? scope;\n};\n\nconst collectBindingNames = (node: Node): string[] => {\n if (node.type === 'Identifier') {\n return [node.name];\n }\n\n if (node.type === 'RestElement') {\n return collectBindingNames(node.argument);\n }\n\n if (node.type === 'AssignmentPattern') {\n return collectBindingNames(node.left);\n }\n\n if (node.type === 'ObjectPattern') {\n return node.properties.flatMap((property) =>\n property.type === 'RestElement'\n ? collectBindingNames(property.argument)\n : collectBindingNames(property.value)\n );\n }\n\n if (node.type === 'ArrayPattern') {\n return node.elements.flatMap((element) =>\n element ? collectBindingNames(element) : []\n );\n }\n\n if (node.type === 'TSParameterProperty') {\n return collectBindingNames(node.parameter);\n }\n\n return [];\n};\n\nconst isInTypeContext = (ancestors: Node[]): boolean =>\n ancestors.some(\n (ancestor) =>\n ancestor.type.startsWith('TS') || ancestor.type.startsWith('JSDoc')\n );\n\nconst isPropertyOnlyIdentifier = (node: Node, parent: Node | null): boolean =>\n !!parent &&\n parent.type === 'MemberExpression' &&\n parent.property === node &&\n !parent.computed;\n\nconst isObjectPropertyKey = (node: Node, parent: Node | null): boolean =>\n !!parent &&\n parent.type === 'Property' &&\n parent.key === node &&\n !parent.computed &&\n parent.value !== node;\n\nconst isBindingPosition = (node: Node, parent: Node | null): boolean => {\n if (!parent) {\n return false;\n }\n\n if (parent.type === 'VariableDeclarator' && parent.id === node) {\n return true;\n }\n\n if (\n (parent.type === 'FunctionDeclaration' ||\n parent.type === 'FunctionExpression' ||\n parent.type === 'ClassDeclaration' ||\n parent.type === 'ClassExpression') &&\n parent.id === node\n ) {\n return true;\n }\n\n if (\n (parent.type === 'ImportSpecifier' ||\n parent.type === 'ImportDefaultSpecifier' ||\n parent.type === 'ImportNamespaceSpecifier') &&\n 'local' in parent &&\n parent.local === node\n ) {\n return true;\n }\n\n return false;\n};\n\nconst visit = (\n node: Node,\n scope: Scope | null,\n enter: (\n node: Node,\n scope: Scope,\n parent: Node | null,\n ancestors: Node[]\n ) => void,\n parent: Node | null = null,\n ancestors: Node[] = []\n): void => {\n const visitNode = (\n currentNode: Node,\n currentScope: Scope | null,\n currentParent: Node | null\n ): void => {\n let nextScope: Scope;\n if (currentNode.type === 'Program') {\n nextScope = createScope(null, currentNode, true, true);\n } else if (\n currentNode.type === 'BlockStatement' ||\n currentNode.type === 'FunctionDeclaration' ||\n currentNode.type === 'FunctionExpression' ||\n currentNode.type === 'ArrowFunctionExpression'\n ) {\n nextScope = createScope(\n currentScope,\n currentNode,\n false,\n currentNode.type !== 'BlockStatement'\n );\n } else if (currentScope) {\n nextScope = currentScope;\n } else {\n nextScope = createScope(null, currentNode, false, true);\n }\n\n if (\n currentNode.type === 'FunctionDeclaration' ||\n currentNode.type === 'FunctionExpression' ||\n currentNode.type === 'ArrowFunctionExpression'\n ) {\n currentNode.params.forEach((param) => {\n collectBindingNames(param).forEach((name) => {\n nextScope.params.add(name);\n nextScope.bindings.set(name, {\n declaredAt: param.start,\n declaration: null,\n declarator: null,\n functionNode: null,\n isRoot: false,\n kind: 'param',\n name,\n scope: nextScope,\n });\n });\n });\n }\n\n enter(currentNode, nextScope, currentParent, ancestors);\n\n ancestors.push(currentNode);\n getChildren(currentNode).forEach((child) =>\n visitNode(child, nextScope, currentNode)\n );\n ancestors.pop();\n };\n\n visitNode(node, scope, parent);\n};\n\nconst analyzeProgram = (\n program: Program,\n {\n collectTargetExpressions = false,\n collectTemplateLiterals = false,\n expressionSpanLookup = null,\n templateSpanLookup = null,\n }: {\n collectTargetExpressions?: boolean;\n collectTemplateLiterals?: boolean;\n expressionSpanLookup?: SpanLookup;\n templateSpanLookup?: SpanLookup;\n } = {}\n): ProgramAnalysis => {\n const bindings = new Map<string, Binding[]>();\n const usedNames = new Set<string>();\n const templateLiterals: TemplateLiteral[] = [];\n const targetExpressions: Expression[] = [];\n\n const addBinding = (scope: Scope, binding: Binding): void => {\n scope.bindings.set(binding.name, binding);\n const existing = bindings.get(binding.name) ?? [];\n existing.push(binding);\n bindings.set(binding.name, existing);\n };\n\n const collectTargets = (node: Node, ancestors: Node[]): void => {\n if (\n collectTemplateLiterals &&\n node.type === 'TemplateLiteral' &&\n node.expressions.length > 0 &&\n !ancestors.some((ancestor) => ancestor.type === 'TemplateLiteral') &&\n matchesSpanLookup(node, templateSpanLookup)\n ) {\n templateLiterals.push(node);\n }\n\n if (\n collectTargetExpressions &&\n expressionSpanLookup &&\n matchesSpanLookup(node, expressionSpanLookup)\n ) {\n targetExpressions.push(node as Expression);\n }\n };\n\n visit(program, null, (node, scope, _parent, ancestors) => {\n collectTargets(node, ancestors);\n\n if (node.type === 'Identifier') {\n usedNames.add(node.name);\n }\n\n if (\n node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression' ||\n node.type === 'ArrowFunctionExpression'\n ) {\n node.params.forEach((param) => {\n collectBindingNames(param).forEach((name) => {\n const binding = scope.bindings.get(name);\n if (binding) {\n addBinding(scope, binding);\n }\n });\n });\n\n if (node.type !== 'FunctionDeclaration') {\n return;\n }\n }\n\n if (node.type === 'ImportDeclaration') {\n const source = node.source.value;\n node.specifiers.forEach((specifier) => {\n const importInfo = getImportSpecifierInfo(node, specifier);\n if (!importInfo) {\n return;\n }\n\n addBinding(scope, {\n declaredAt: specifier.start,\n declaration: null,\n declarator: null,\n functionNode: null,\n imported: importInfo.imported,\n importedFrom: source,\n isRoot: scope.root,\n kind: 'import',\n name: importInfo.local,\n scope,\n });\n });\n return;\n }\n\n if (node.type !== 'VariableDeclaration') {\n if (node.type === 'FunctionDeclaration' && node.id) {\n const declarationScope = scope.parent ?? scope;\n const binding: Binding = {\n declaredAt: node.start,\n declaration: null,\n declarator: null,\n functionNode: node,\n isRoot: declarationScope.root,\n kind: 'function',\n name: node.id.name,\n scope: declarationScope,\n };\n addBinding(declarationScope, binding);\n }\n\n return;\n }\n\n node.declarations.forEach((declarator) => {\n collectBindingNames(declarator.id).forEach((name) => {\n const declarationKind = normalizeDeclarationKind(node.kind);\n const declarationScope = getDeclarationScope(scope, declarationKind);\n const binding: Binding = {\n declarationKind,\n declaredAt: declarator.start,\n declaration: node,\n declarator,\n functionNode: null,\n isRoot: declarationScope.root,\n kind: 'variable',\n name,\n scope: declarationScope,\n };\n addBinding(declarationScope, binding);\n });\n });\n });\n\n return {\n bindingsByName: bindings,\n rootMutationsByBinding: collectRootMutations(program),\n targetExpressions: targetExpressions.sort((a, b) => a.start - b.start),\n templateLiterals,\n usedNames,\n };\n};\n\nconst resolveBindingAt = (\n ctx: Pick<ExtractionContext, 'bindingResolutionCache' | 'bindingsByName'>,\n name: string,\n referenceStart: number\n): Binding | undefined => {\n const cachedBindings = ctx.bindingResolutionCache.get(name);\n if (cachedBindings?.has(referenceStart)) {\n return cachedBindings.get(referenceStart) ?? undefined;\n }\n\n const bindings = ctx.bindingsByName.get(name);\n const bindingCache = cachedBindings ?? new Map<number, Binding | null>();\n if (!cachedBindings) {\n ctx.bindingResolutionCache.set(name, bindingCache);\n }\n\n if (!bindings || bindings.length === 0) {\n bindingCache.set(referenceStart, null);\n return undefined;\n }\n\n let binding: Binding | undefined;\n bindings.forEach((candidate) => {\n if (\n candidate.scope.start > referenceStart ||\n referenceStart >= candidate.scope.end\n ) {\n return;\n }\n\n if (\n !binding ||\n candidate.scope.depth > binding.scope.depth ||\n (candidate.scope.depth === binding.scope.depth &&\n candidate.declaredAt > binding.declaredAt)\n ) {\n binding = candidate;\n }\n });\n\n bindingCache.set(referenceStart, binding ?? null);\n return binding;\n};\n\nconst collectRootMutations = (\n program: Program\n): Map<string, Array<AssignmentExpression | UpdateExpression>> => {\n const mutations = new Map<\n string,\n Array<AssignmentExpression | UpdateExpression>\n >();\n\n const getRootMutationTarget = (\n node: Node\n ): { binding: string; path: Array<string | number> } | null => {\n if (node.type === 'Identifier') {\n return {\n binding: node.name,\n path: [],\n };\n }\n\n if (node.type !== 'MemberExpression') {\n return null;\n }\n\n const parent = getRootMutationTarget(node.object);\n if (!parent) {\n return null;\n }\n\n let key: string | number | null = null;\n if (\n node.computed &&\n node.property.type === 'Literal' &&\n (typeof node.property.value === 'string' ||\n typeof node.property.value === 'number')\n ) {\n key = node.property.value;\n } else if (!node.computed && node.property.type === 'Identifier') {\n key = node.property.name;\n }\n if (key === null) {\n return null;\n }\n\n return {\n binding: parent.binding,\n path: [...parent.path, key],\n };\n };\n\n program.body.forEach((statement) => {\n if (statement.type !== 'ExpressionStatement') {\n return;\n }\n\n const { expression } = statement;\n if (expression.type === 'AssignmentExpression') {\n const target = getRootMutationTarget(expression.left);\n if (!target || target.path.length === 0) {\n return;\n }\n\n const bucket = mutations.get(target.binding) ?? [];\n bucket.push(expression);\n mutations.set(target.binding, bucket);\n return;\n }\n\n if (expression.type === 'UpdateExpression') {\n const target = getRootMutationTarget(expression.argument);\n if (!target || target.path.length === 0) {\n return;\n }\n\n const bucket = mutations.get(target.binding) ?? [];\n bucket.push(expression);\n mutations.set(target.binding, bucket);\n }\n });\n\n return mutations;\n};\n\nconst hasLocalBinding = (scope: Scope, name: string): boolean => {\n let current: Scope | null = scope;\n\n while (current) {\n if (current.bindings.has(name)) {\n return true;\n }\n\n current = current.parent;\n }\n\n return false;\n};\n\nconst hasLocalBindingCached = (\n scope: Scope,\n name: string,\n cache: WeakMap<Scope, Map<string, boolean>>\n): boolean => {\n const scopeCache = cache.get(scope);\n if (scopeCache?.has(name)) {\n return scopeCache.get(name)!;\n }\n\n const result = hasLocalBinding(scope, name);\n const nextScopeCache = scopeCache ?? new Map<string, boolean>();\n nextScopeCache.set(name, result);\n if (!scopeCache) {\n cache.set(scope, nextScopeCache);\n }\n\n return result;\n};\n\nconst findReferences = (\n node: Node,\n referenceCache?: WeakMap<Node, ReferenceIdentifier[]>\n): ReferenceIdentifier[] => {\n const cachedReferences = referenceCache?.get(node);\n if (cachedReferences) {\n return cachedReferences;\n }\n\n const refs = new Map<string, ReferenceIdentifier>();\n const localBindingCache = new WeakMap<Scope, Map<string, boolean>>();\n\n visit(node, null, (current, scope, parent, ancestors) => {\n if (\n current.type !== 'Identifier' ||\n isInTypeContext(ancestors) ||\n isBindingPosition(current, parent) ||\n isPropertyOnlyIdentifier(current, parent) ||\n isObjectPropertyKey(current, parent) ||\n hasLocalBindingCached(scope, current.name, localBindingCache)\n ) {\n return;\n }\n\n const key = `${current.start}:${current.end}:${current.name}`;\n refs.set(key, {\n end: current.end,\n name: current.name,\n start: current.start,\n });\n });\n\n const resolvedReferences = [...refs.values()];\n referenceCache?.set(node, resolvedReferences);\n return resolvedReferences;\n};\n\nconst isBindingDeclaredWithin = (binding: Binding, container: Node): boolean =>\n container.start <= binding.declaredAt && binding.declaredAt < container.end;\n\nconst literalCode = (value: unknown): string | null => {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? JSON.stringify(value) : null;\n }\n\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return JSON.stringify(value);\n }\n\n if (Array.isArray(value)) {\n return JSON.stringify(value);\n }\n\n if (typeof value === 'object' && value !== null) {\n return `(${JSON.stringify(value)})`;\n }\n\n return null;\n};\n\nconst isStaticSerializableValue = (value: unknown): boolean =>\n literalCode(value) !== null;\n\nconst cloneStaticValue = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map((item) => cloneStaticValue(item));\n }\n\n if (typeof value === 'object' && value !== null) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, cloneStaticValue(item)])\n );\n }\n\n return value;\n};\n\nconst getObjectMember = (\n objectValue: unknown,\n property: string | number\n): unknown | undefined => {\n if (\n objectValue === null ||\n objectValue === undefined ||\n (typeof objectValue !== 'object' &&\n typeof objectValue !== 'string' &&\n typeof objectValue !== 'number' &&\n typeof objectValue !== 'boolean')\n ) {\n return undefined;\n }\n\n return (objectValue as Record<string | number, unknown>)[property];\n};\n\ntype EvalEnv = Map<string, unknown>;\n\nconst oxcStaticCallableValue = Symbol('wyw.oxc.staticCallableValue');\n\ntype OxcStaticCallableValue = {\n [oxcStaticCallableValue]: unknown;\n};\n\nconst isOxcStaticCallableValue = (\n value: unknown\n): value is OxcStaticCallableValue =>\n typeof value === 'object' &&\n value !== null &&\n oxcStaticCallableValue in value;\n\nconst unwrapOxcStaticCallableValue = (value: unknown): unknown =>\n isOxcStaticCallableValue(value) ? value[oxcStaticCallableValue] : value;\n\nexport const createOxcStaticCallableValue = (\n value: unknown\n): OxcStaticCallableValue => ({\n [oxcStaticCallableValue]: value,\n});\n\nconst assignPatternValue = (\n pattern: Node,\n value: unknown,\n ctx: ExtractionContext,\n env: EvalEnv,\n stack: string[]\n): boolean => {\n if (pattern.type === 'Identifier') {\n env.set(pattern.name, value);\n return true;\n }\n\n if (pattern.type === 'AssignmentPattern') {\n return assignPatternValue(\n pattern.left,\n value === undefined\n ? evaluateStatic(pattern.right, ctx, env, stack)\n : value,\n ctx,\n env,\n stack\n );\n }\n\n if (pattern.type === 'ObjectPattern') {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n return pattern.properties.every((property) => {\n if (property.type === 'RestElement') {\n return false;\n }\n\n let key: unknown;\n if (property.computed) {\n key = evaluateStatic(property.key as Expression, ctx, env, stack);\n } else if (property.key.type === 'Identifier') {\n key = property.key.name;\n } else if (property.key.type === 'Literal') {\n key = property.key.value;\n }\n if (key === undefined || key === null) {\n return false;\n }\n\n return assignPatternValue(\n property.value,\n getObjectMember(value, key as string | number),\n ctx,\n env,\n stack\n );\n });\n }\n\n if (pattern.type === 'ArrayPattern') {\n if (!Array.isArray(value)) {\n return false;\n }\n\n return pattern.elements.every((element, index) =>\n element\n ? assignPatternValue(element, value[index], ctx, env, stack)\n : true\n );\n }\n\n return false;\n};\n\nconst applyRootMutation = (\n bindingName: string,\n baseValue: unknown,\n mutation: AssignmentExpression | UpdateExpression,\n ctx: ExtractionContext,\n env: EvalEnv,\n stack: string[]\n): unknown | undefined => {\n const resolvePath = (node: Node): { path: Array<string | number> } | null => {\n if (node.type === 'Identifier') {\n return node.name === bindingName ? { path: [] } : null;\n }\n\n if (node.type !== 'MemberExpression') {\n return null;\n }\n\n const parent = resolvePath(node.object);\n if (!parent) {\n return null;\n }\n\n let key: unknown;\n if (node.computed) {\n key = evaluateStatic(node.property as Expression, ctx, env, stack);\n } else if (node.property.type === 'Identifier') {\n key = node.property.name;\n }\n if (\n key === undefined ||\n key === null ||\n (typeof key !== 'string' && typeof key !== 'number')\n ) {\n return null;\n }\n\n return {\n path: [...parent.path, key],\n };\n };\n\n const pathInfo = resolvePath(\n mutation.type === 'AssignmentExpression' ? mutation.left : mutation.argument\n );\n if (!pathInfo) {\n return undefined;\n }\n\n const cloned = cloneStaticValue(baseValue);\n if (pathInfo.path.length === 0) {\n if (mutation.type !== 'AssignmentExpression') {\n return undefined;\n }\n\n return evaluateStatic(mutation.right, ctx, env, stack);\n }\n\n let target = cloned as Record<string | number, unknown>;\n for (let idx = 0; idx < pathInfo.path.length - 1; idx += 1) {\n const key = pathInfo.path[idx];\n const next = target?.[key];\n if (typeof next !== 'object' || next === null) {\n return undefined;\n }\n\n target = next as Record<string | number, unknown>;\n }\n\n const lastKey = pathInfo.path[pathInfo.path.length - 1]!;\n if (mutation.type === 'AssignmentExpression') {\n const nextValue = evaluateStatic(mutation.right, ctx, env, stack);\n if (nextValue === undefined) {\n return undefined;\n }\n\n target[lastKey] = nextValue;\n return cloned;\n }\n\n const currentValue = target[lastKey];\n if (typeof currentValue !== 'number') {\n return undefined;\n }\n\n target[lastKey] =\n mutation.operator === '++' ? currentValue + 1 : currentValue - 1;\n return cloned;\n};\n\nconst evaluateFunctionCall = (\n fn: OxcFunctionLikeNode,\n args: unknown[],\n ctx: ExtractionContext,\n env: EvalEnv,\n stack: string[]\n): unknown | undefined => {\n if (fn.async || !fn.body) {\n return undefined;\n }\n\n const localEnv = new Map(env);\n for (let idx = 0; idx < fn.params.length; idx += 1) {\n if (!assignPatternValue(fn.params[idx], args[idx], ctx, localEnv, stack)) {\n return undefined;\n }\n }\n\n if (fn.body.type !== 'BlockStatement') {\n return evaluateStatic(fn.body as Expression, ctx, localEnv, stack);\n }\n\n for (const statement of fn.body.body) {\n if (statement.type === 'VariableDeclaration') {\n for (const declarator of statement.declarations) {\n const value = declarator.init\n ? evaluateStatic(declarator.init, ctx, localEnv, stack)\n : undefined;\n if (!assignPatternValue(declarator.id, value, ctx, localEnv, stack)) {\n return undefined;\n }\n }\n continue;\n }\n\n if (statement.type === 'ReturnStatement') {\n if (!statement.argument) {\n return undefined;\n }\n\n return evaluateStatic(statement.argument, ctx, localEnv, stack);\n }\n\n return undefined;\n }\n\n return undefined;\n};\n\nconst getConstantReplacement = (\n binding: Binding | undefined,\n ctx: ExtractionContext\n): string | null => {\n const init = binding?.declarator?.init;\n if (!init) {\n return null;\n }\n\n if (init.type === 'Literal') {\n return literalCode(init.value);\n }\n\n if (\n init.type === 'ObjectExpression' &&\n binding?.isRoot &&\n binding.declarator?.id.type === 'Identifier'\n ) {\n const evaluated = evaluateStatic(binding.declarator.id, ctx);\n return literalCode(evaluated);\n }\n\n return null;\n};\n\nconst replaceIdentifierReferences = (\n expression: Expression,\n replacements: Map<string, string>,\n code: string\n): string => {\n const localReplacements: Replacement[] = [];\n const ancestors: Node[] = [];\n\n const walk = (current: Node, parent: Node | null) => {\n if (\n current.type === 'Identifier' &&\n replacements.has(current.name) &&\n !isInTypeContext(ancestors) &&\n !isBindingPosition(current, parent) &&\n !isPropertyOnlyIdentifier(current, parent) &&\n !isObjectPropertyKey(current, parent)\n ) {\n const replacement = replacements.get(current.name)!;\n // Shorthand property `{ width }` → `{ width: 500 }` when the\n // identifier is the value side of a shorthand ObjectProperty.\n const isShorthandValue =\n !!parent &&\n parent.type === 'Property' &&\n (parent as unknown as { shorthand?: boolean }).shorthand &&\n parent.value === current;\n localReplacements.push({\n start: isShorthandValue ? parent.start : current.start,\n end: current.end,\n value: isShorthandValue\n ? `${current.name}: ${replacement}`\n : replacement,\n });\n }\n\n ancestors.push(current);\n getChildren(current).forEach((child) => walk(child, current));\n ancestors.pop();\n };\n\n walk(expression, null);\n\n let result = code.slice(expression.start, expression.end);\n localReplacements\n .sort((a, b) => b.start - a.start)\n .forEach((replacement) => {\n const start = replacement.start - expression.start;\n const end = replacement.end - expression.start;\n result = result.slice(0, start) + replacement.value + result.slice(end);\n });\n\n return result;\n};\n\nconst applyExpressionReplacements = (\n expression: Expression,\n replacements: Replacement[],\n code: string\n): string => {\n let result = code.slice(expression.start, expression.end);\n replacements\n .sort((a, b) => b.start - a.start)\n .forEach((replacement) => {\n const start = replacement.start - expression.start;\n const end = replacement.end - expression.start;\n result = result.slice(0, start) + replacement.value + result.slice(end);\n });\n return result;\n};\n\nconst staticImportAliasPart = (value: string): string =>\n value.replace(/[^A-Za-z0-9_$]/g, '_') || 'value';\n\nconst allocateStaticImportAlias = (\n binding: Binding,\n imported: string,\n ctx: ExtractionContext\n): string => {\n const key = `${binding.importedFrom ?? ''}\\0${binding.name}\\0${imported}`;\n const existing = ctx.staticImportAliases.get(key);\n if (existing) {\n return existing;\n }\n\n const namespacePart = staticImportAliasPart(binding.name);\n const importedPart = staticImportAliasPart(imported);\n let alias = `_wyw_static_${namespacePart}_${importedPart}`;\n let idx = 1;\n while (ctx.usedNames.has(alias)) {\n idx += 1;\n alias = `_wyw_static_${namespacePart}_${importedPart}_${idx}`;\n }\n\n ctx.usedNames.add(alias);\n ctx.staticImportAliases.set(key, alias);\n return alias;\n};\n\nconst staticMemberPropertyName = (\n expression: MemberExpression\n): string | null => {\n if (!expression.computed && expression.property.type === 'Identifier') {\n return expression.property.name;\n }\n\n if (\n expression.computed &&\n expression.property.type === 'Literal' &&\n typeof expression.property.value === 'string'\n ) {\n return expression.property.value;\n }\n\n return null;\n};\n\nconst collectStaticNamespaceMemberReferences = (\n expression: Expression,\n ctx: ExtractionContext\n): {\n coveredReferenceStarts: Set<number>;\n imports: OxcStaticImportReference[];\n replacements: Replacement[];\n} => {\n const coveredReferenceStarts = new Set<number>();\n const imports = new Map<string, OxcStaticImportReference>();\n const replacements: Replacement[] = [];\n\n const walk = (node: Node): void => {\n if (node.type === 'MemberExpression' && node.object.type === 'Identifier') {\n const binding = resolveBindingAt(\n ctx,\n node.object.name,\n node.object.start\n );\n const imported = staticMemberPropertyName(node);\n if (\n binding?.importedFrom &&\n binding.imported === '*' &&\n imported !== null\n ) {\n const alias = allocateStaticImportAlias(binding, imported, ctx);\n imports.set(`${binding.importedFrom}\\0${imported}\\0${alias}`, {\n imported,\n importLocal: binding.name,\n local: alias,\n source: binding.importedFrom,\n });\n replacements.push({\n end: node.end,\n start: node.start,\n value: alias,\n });\n coveredReferenceStarts.add(node.object.start);\n }\n }\n\n getChildren(node).forEach(walk);\n };\n\n walk(expression);\n\n return {\n coveredReferenceStarts,\n imports: [...imports.values()],\n replacements,\n };\n};\n\nconst isProcessEnvMember = (node: Node): boolean => {\n if (node.type !== 'MemberExpression' || node.computed) {\n return false;\n }\n\n if (\n node.property.type !== 'Identifier' ||\n node.property.name !== 'env'\n ) {\n return false;\n }\n\n return node.object.type === 'Identifier' && node.object.name === 'process';\n};\n\nconst evaluateBinary = (\n expression: Expression,\n ctx: ExtractionContext,\n env: EvalEnv = new Map(),\n stack: string[] = []\n): unknown | undefined => {\n if (expression.type !== 'BinaryExpression') {\n return undefined;\n }\n\n const left = evaluateStatic(expression.left as Expression, ctx, env, stack);\n const right = evaluateStatic(expression.right as Expression, ctx, env, stack);\n if (left === undefined || right === undefined) {\n return undefined;\n }\n\n if (expression.operator === '+') {\n if (typeof left === 'number' && typeof right === 'number') {\n return left + right;\n }\n\n if (\n (typeof left === 'string' || typeof left === 'number') &&\n (typeof right === 'string' || typeof right === 'number')\n ) {\n return `${left}${right}`;\n }\n }\n\n if (typeof left === 'number' && typeof right === 'number') {\n switch (expression.operator) {\n case '-':\n return left - right;\n case '*':\n return left * right;\n case '/':\n return left / right;\n case '%':\n return left % right;\n case '**':\n return left ** right;\n default:\n break;\n }\n }\n\n return undefined;\n};\n\nconst evaluateStatic = (\n expression: Expression,\n ctx: ExtractionContext,\n env: EvalEnv = new Map(),\n stack: string[] = []\n): unknown | undefined => {\n if (\n expression.type === 'TSAsExpression' ||\n expression.type === 'TSSatisfiesExpression' ||\n expression.type === 'TSNonNullExpression' ||\n expression.type === 'TSInstantiationExpression' ||\n expression.type === 'TSTypeAssertion' ||\n expression.type === 'ParenthesizedExpression'\n ) {\n return evaluateStatic(expression.expression as Expression, ctx, env, stack);\n }\n\n if (expression.type === 'Literal') {\n return expression.value;\n }\n\n if (expression.type === 'UnaryExpression') {\n if (expression.operator === 'typeof') {\n const argIsProcessEnvAccess =\n expression.argument.type === 'MemberExpression' &&\n isProcessEnvMember(expression.argument.object);\n const arg = evaluateStatic(\n expression.argument as Expression,\n ctx,\n env,\n stack\n );\n if (arg === undefined) {\n return argIsProcessEnvAccess ? 'undefined' : undefined;\n }\n\n return typeof arg;\n }\n\n const arg = evaluateStatic(\n expression.argument as Expression,\n ctx,\n env,\n stack\n );\n if (arg === undefined) {\n return undefined;\n }\n\n switch (expression.operator) {\n case '-':\n return typeof arg === 'number' ? -arg : undefined;\n case '+':\n return typeof arg === 'number' ? +arg : undefined;\n case '!':\n return !arg;\n case '~':\n return typeof arg === 'number' ? ~arg : undefined;\n case 'void':\n return undefined;\n default:\n return undefined;\n }\n }\n\n if (expression.type === 'LogicalExpression') {\n const left = evaluateStatic(expression.left, ctx, env, stack);\n // process.env.X access is the only source we trust as \"deterministically\n // undefined\" — it's a build-time lookup we control. For everything else,\n // undefined means \"couldn't evaluate\" and we must bail to avoid inlining\n // a wrong fallback when the runtime value isn't actually nullish.\n const leftIsProcessEnvAccess =\n expression.left.type === 'MemberExpression' &&\n isProcessEnvMember(expression.left.object);\n\n if (left === undefined && !leftIsProcessEnvAccess) {\n return undefined;\n }\n\n if (expression.operator === '||') {\n return left || evaluateStatic(expression.right, ctx, env, stack);\n }\n\n if (expression.operator === '??') {\n return left ?? evaluateStatic(expression.right, ctx, env, stack);\n }\n\n if (expression.operator === '&&') {\n return left && evaluateStatic(expression.right, ctx, env, stack);\n }\n\n return undefined;\n }\n\n if (expression.type === 'ConditionalExpression') {\n const test = evaluateStatic(expression.test, ctx, env, stack);\n if (test === undefined) {\n return undefined;\n }\n\n return evaluateStatic(\n test ? expression.consequent : expression.alternate,\n ctx,\n env,\n stack\n );\n }\n\n if (expression.type === 'TemplateLiteral') {\n let result = '';\n\n for (let idx = 0; idx < expression.quasis.length; idx += 1) {\n result += expression.quasis[idx]?.value.cooked ?? '';\n\n const nextExpression = expression.expressions[idx];\n if (!nextExpression) {\n continue;\n }\n\n const value = evaluateStatic(nextExpression, ctx, env, stack);\n if (\n value === undefined ||\n (typeof value !== 'string' && typeof value !== 'number')\n ) {\n return undefined;\n }\n\n result += String(value);\n }\n\n return result;\n }\n\n if (expression.type === 'Identifier') {\n if (env.has(expression.name)) {\n return unwrapOxcStaticCallableValue(env.get(expression.name));\n }\n\n const binding = resolveBindingAt(ctx, expression.name, expression.start);\n if (!binding || binding.importedFrom) {\n return undefined;\n }\n\n if (binding.kind === 'param') {\n return undefined;\n }\n\n if (stack.includes(binding.name)) {\n return undefined;\n }\n\n let value: unknown | undefined;\n const { declarator } = binding;\n const init = declarator?.init;\n if (init) {\n if (declarator.id.type !== 'Identifier') {\n return undefined;\n }\n\n value = evaluateStatic(init, ctx, env, [...stack, binding.name]);\n } else if (binding.functionNode) {\n value = binding.functionNode;\n }\n\n if (\n value !== undefined &&\n binding.isRoot &&\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value)\n ) {\n const mutations = ctx.rootMutationsByBinding.get(binding.name) ?? [];\n let nextValue = cloneStaticValue(value);\n for (const mutation of mutations) {\n if (mutation.start >= ctx.currentExpressionStart) {\n break;\n }\n\n const applied = applyRootMutation(\n binding.name,\n nextValue,\n mutation,\n ctx,\n env,\n [...stack, binding.name]\n );\n if (applied === undefined) {\n return undefined;\n }\n\n nextValue = applied;\n }\n\n return nextValue;\n }\n\n return value;\n }\n\n if (expression.type === 'ObjectExpression') {\n const result: Record<string, unknown> = {};\n\n for (const property of expression.properties) {\n if (property.type === 'SpreadElement') {\n const spreadValue = evaluateStatic(property.argument, ctx, env, stack);\n if (typeof spreadValue !== 'object' || spreadValue === null) {\n return undefined;\n }\n\n Object.assign(result, spreadValue);\n continue;\n }\n\n let key: unknown;\n if (property.computed) {\n key = evaluateStatic(property.key as Expression, ctx, env, stack);\n } else if (property.key.type === 'Identifier') {\n key = property.key.name;\n } else if (property.key.type === 'Literal') {\n key = property.key.value;\n }\n if (\n key === undefined ||\n key === null ||\n (typeof key !== 'string' && typeof key !== 'number')\n ) {\n return undefined;\n }\n\n const value = evaluateStatic(property.value, ctx, env, stack);\n if (value === undefined) {\n return undefined;\n }\n\n result[key] = value;\n }\n\n return result;\n }\n\n if (expression.type === 'ArrayExpression') {\n const result: unknown[] = [];\n\n for (const element of expression.elements) {\n if (!element) {\n return undefined;\n }\n\n if (element.type === 'SpreadElement') {\n const spreadValue = evaluateStatic(element.argument, ctx, env, stack);\n if (!Array.isArray(spreadValue)) {\n return undefined;\n }\n\n result.push(...spreadValue);\n continue;\n }\n\n const value = evaluateStatic(element, ctx, env, stack);\n if (value === undefined) {\n return undefined;\n }\n\n result.push(value);\n }\n\n return result;\n }\n\n if (expression.type === 'MemberExpression') {\n let key: unknown;\n if (expression.computed) {\n key = evaluateStatic(expression.property as Expression, ctx, env, stack);\n } else if (expression.property.type === 'Identifier') {\n key = expression.property.name;\n }\n if (\n key === undefined ||\n key === null ||\n (typeof key !== 'string' && typeof key !== 'number')\n ) {\n return undefined;\n }\n\n if (\n isProcessEnvMember(expression.object) &&\n typeof key === 'string' &&\n !env.has('process')\n ) {\n // Treat process.env.X as deterministically undefined at build time.\n // Reading from real process.env would couple the bundle to whatever\n // happens to be set on the build machine; falling back to the\n // ?? / || branch (or a runtime read) is more predictable.\n return undefined;\n }\n\n const objectValue = evaluateStatic(expression.object, ctx, env, stack);\n if (objectValue === undefined) {\n return undefined;\n }\n\n return getObjectMember(objectValue, key);\n }\n\n if (expression.type === 'NewExpression') {\n if (\n expression.callee.type !== 'Identifier' ||\n expression.arguments.length !== 1\n ) {\n return undefined;\n }\n\n const [argument] = expression.arguments;\n if (!argument || argument.type === 'SpreadElement') {\n return undefined;\n }\n\n const value = evaluateStatic(argument, ctx, env, stack);\n if (value === undefined) {\n return undefined;\n }\n\n if (expression.callee.name === 'String') {\n return String(value);\n }\n\n if (expression.callee.name === 'Number') {\n return Number(value);\n }\n\n if (expression.callee.name === 'Boolean') {\n return Boolean(value);\n }\n\n return undefined;\n }\n\n if (expression.type === 'CallExpression') {\n if (expression.callee.type === 'Identifier') {\n const args = expression.arguments.map((arg) =>\n arg.type === 'SpreadElement'\n ? undefined\n : evaluateStatic(arg, ctx, env, stack)\n );\n if (args.some((value) => value === undefined)) {\n return undefined;\n }\n\n const staticCallable = env.get(expression.callee.name);\n if (\n isOxcStaticCallableValue(staticCallable) &&\n expression.arguments.length === 0\n ) {\n return unwrapOxcStaticCallableValue(staticCallable);\n }\n\n if (expression.callee.name === 'String' && args.length === 1) {\n return String(args[0]);\n }\n\n if (expression.callee.name === 'Number' && args.length === 1) {\n return Number(args[0]);\n }\n\n if (expression.callee.name === 'Boolean' && args.length === 1) {\n return Boolean(args[0]);\n }\n\n const binding = resolveBindingAt(\n ctx,\n expression.callee.name,\n expression.callee.start\n );\n const fn = binding?.functionNode ?? binding?.declarator?.init;\n if (\n fn &&\n (fn.type === 'ArrowFunctionExpression' ||\n fn.type === 'FunctionDeclaration' ||\n fn.type === 'FunctionExpression')\n ) {\n return evaluateFunctionCall(fn, args, ctx, env, [\n ...stack,\n expression.callee.name,\n ]);\n }\n }\n\n if (expression.callee.type === 'MemberExpression') {\n const objectValue = evaluateStatic(\n expression.callee.object,\n ctx,\n env,\n stack\n );\n let key: unknown;\n if (expression.callee.computed) {\n key = evaluateStatic(\n expression.callee.property as Expression,\n ctx,\n env,\n stack\n );\n } else if (expression.callee.property.type === 'Identifier') {\n key = expression.callee.property.name;\n }\n if (typeof objectValue === 'string') {\n if (key === 'toLowerCase' && expression.arguments.length === 0) {\n return objectValue.toLowerCase();\n }\n\n if (key === 'toUpperCase' && expression.arguments.length === 0) {\n return objectValue.toUpperCase();\n }\n }\n }\n }\n\n return evaluateBinary(expression, ctx, env, stack);\n};\n\nconst allocateExpressionName = (ctx: ExtractionContext): string => {\n let base = '_exp';\n let idx = 1;\n while (ctx.usedNames.has(base)) {\n idx += 1;\n base = `_exp${idx}`;\n }\n\n ctx.usedNames.add(base);\n return base;\n};\n\nconst hoistedBindingKey = (binding: Binding): string =>\n `${binding.scope.start}:${binding.scope.end}:${binding.declaredAt}:${binding.name}`;\n\nconst allocateHoistedBindingName = (\n originalName: string,\n ctx: ExtractionContext\n): string => {\n const sanitized = originalName.replace(/[^A-Za-z0-9_$]/g, '_') || 'hoisted';\n const base = /^[A-Za-z_$]/.test(sanitized) ? `_${sanitized}` : '_hoisted';\n let candidate = base;\n let idx = 2;\n\n while (ctx.usedNames.has(candidate)) {\n candidate = `${base}${idx}`;\n idx += 1;\n }\n\n ctx.usedNames.add(candidate);\n return candidate;\n};\n\nconst getHoistedBindingName = (\n binding: Binding,\n ctx: ExtractionContext\n): string => {\n const key = hoistedBindingKey(binding);\n const existing = ctx.hoistedBindingNames.get(key);\n if (existing) {\n return existing;\n }\n\n const next = allocateHoistedBindingName(binding.name, ctx);\n ctx.hoistedBindingNames.set(key, next);\n return next;\n};\n\nconst declarationInitCode = (\n init: Expression,\n ctx: ExtractionContext\n): string => {\n const renamedDependencies = new Map<string, string>();\n findReferences(init, ctx.referencesByNode).forEach(({ name, start }) => {\n const dependency = resolveBindingAt(ctx, name, start);\n if (\n !dependency ||\n dependency.importedFrom ||\n dependency.isRoot ||\n dependency.declarator?.id.type !== 'Identifier'\n ) {\n return;\n }\n\n renamedDependencies.set(name, getHoistedBindingName(dependency, ctx));\n });\n\n return renamedDependencies.size > 0\n ? replaceIdentifierReferences(init, renamedDependencies, ctx.code)\n : ctx.code.slice(init.start, init.end);\n};\n\nconst addHoistedCode = (\n key: string,\n code: string,\n ctx: ExtractionContext\n): void => {\n if (ctx.hoistedDeclarations.has(key)) {\n return;\n }\n\n ctx.hoistedDeclarations.set(key, code);\n const declarations =\n ctx.hoistedDeclarationsByInsertionPoint.get(ctx.currentInsertionPoint) ??\n [];\n declarations.push(code);\n ctx.hoistedDeclarationsByInsertionPoint.set(\n ctx.currentInsertionPoint,\n declarations\n );\n};\n\nconst declarationCode = (binding: Binding, ctx: ExtractionContext): string => {\n const { declarator } = binding;\n if (!declarator) {\n return '';\n }\n\n const { id } = declarator;\n if (id.type !== 'Identifier') {\n const idCode = ctx.code.slice(id.start, id.end);\n if (!declarator.init) {\n return `let ${idCode};`;\n }\n\n return `let ${idCode} = ${declarationInitCode(declarator.init, ctx)};`;\n }\n\n const hoistedName = getHoistedBindingName(binding, ctx);\n if (!declarator.init) {\n return `let ${hoistedName};`;\n }\n\n return `let ${hoistedName} = ${declarationInitCode(declarator.init, ctx)};`;\n};\n\nconst assertHoistable = (\n binding: Binding,\n ctx: ExtractionContext,\n stack: string[] = []\n): void => {\n if (!binding.declarator?.init || binding.importedFrom || binding.isRoot) {\n return;\n }\n\n if (stack.includes(binding.name)) {\n return;\n }\n\n const refs = findReferences(binding.declarator.init, ctx.referencesByNode);\n refs.forEach(({ name, start }) => {\n const nextBinding = resolveBindingAt(ctx, name, start);\n if (!nextBinding) {\n return;\n }\n\n if (nextBinding.kind === 'param') {\n throw new Error(\n `This identifier cannot be used in the template, because it is a function parameter.`\n );\n }\n\n assertHoistable(nextBinding, ctx, [...stack, binding.name]);\n });\n};\n\nconst addHoistedDeclaration = (\n binding: Binding,\n ctx: ExtractionContext,\n stack: string[] = []\n): void => {\n if (\n !binding.declaration ||\n !binding.declarator ||\n binding.importedFrom ||\n binding.isRoot ||\n stack.includes(binding.name)\n ) {\n return;\n }\n\n const hoistSource = binding.declarator.init ?? binding.declarator;\n findReferences(hoistSource, ctx.referencesByNode).forEach(\n ({ name, start }) => {\n const dependency = resolveBindingAt(ctx, name, start);\n if (dependency) {\n addHoistedDeclaration(dependency, ctx, [...stack, binding.name]);\n }\n }\n );\n\n if (!ctx.hoistedDeclarations.has(binding.name)) {\n addHoistedCode(binding.name, declarationCode(binding, ctx), ctx);\n }\n};\n\nconst literalExpressionValue = (\n expression: Expression,\n ctx: ExtractionContext\n): Omit<ExpressionValue, 'buildCodeFrameError'> | null => {\n if (expression.type !== 'Literal') {\n return null;\n }\n\n if (\n expression.value !== null &&\n typeof expression.value !== 'string' &&\n typeof expression.value !== 'number' &&\n typeof expression.value !== 'boolean'\n ) {\n return null;\n }\n\n let type:\n | 'BooleanLiteral'\n | 'NullLiteral'\n | 'NumericLiteral'\n | 'StringLiteral';\n if (expression.value === null) {\n type = 'NullLiteral';\n } else if (typeof expression.value === 'string') {\n type = 'StringLiteral';\n } else if (typeof expression.value === 'number') {\n type = 'NumericLiteral';\n } else {\n type = 'BooleanLiteral';\n }\n\n const loc = getSourceLocation(expression.start, expression.end, ctx);\n const ex =\n expression.value === null\n ? { loc, type }\n : {\n loc,\n type,\n value: expression.value,\n };\n\n return {\n ex,\n kind: ValueType.CONST,\n source: ctx.code.slice(expression.start, expression.end),\n value: expression.value,\n } as unknown as Omit<ExpressionValue, 'buildCodeFrameError'>;\n};\n\nconst extractExpression = (\n expression: Expression,\n ctx: ExtractionContext,\n evaluate: boolean\n): ExtractedExpression => {\n const source = ctx.code.slice(expression.start, expression.end);\n const isFunction =\n expression.type === 'FunctionExpression' ||\n expression.type === 'ArrowFunctionExpression';\n\n if (evaluate) {\n const evaluated = evaluateStatic(expression, ctx);\n const literal = literalCode(evaluated);\n if (literal) {\n findReferences(expression, ctx.referencesByNode).forEach(({ name }) =>\n ctx.dependencyNames.add(name)\n );\n return {\n expressionCode: literal,\n importedFrom: [],\n kind: isFunction ? ValueType.FUNCTION : ValueType.LAZY,\n staticImports: [],\n staticValue: isStaticSerializableValue(evaluated)\n ? cloneStaticValue(evaluated)\n : undefined,\n };\n }\n }\n\n const identifierReplacements = new Map<string, string>();\n const importedFrom: string[] = [];\n const namespaceStatic = collectStaticNamespaceMemberReferences(\n expression,\n ctx\n );\n const staticImports: OxcStaticImportReference[] = [\n ...namespaceStatic.imports,\n ];\n let hasNonStaticLocalReference = false;\n\n findReferences(expression, ctx.referencesByNode).forEach(\n ({ name, start }) => {\n const binding = resolveBindingAt(ctx, name, start);\n if (!binding) {\n return;\n }\n\n if (isFunction && isBindingDeclaredWithin(binding, expression)) {\n return;\n }\n\n ctx.dependencyNames.add(name);\n\n if (binding.importedFrom) {\n importedFrom.push(binding.importedFrom);\n if (binding.imported && binding.imported !== '*') {\n staticImports.push({\n imported: binding.imported,\n local: binding.name,\n source: binding.importedFrom,\n });\n } else if (\n binding.imported === '*' &&\n namespaceStatic.coveredReferenceStarts.has(start)\n ) {\n // The static candidate source gets a synthetic named import alias,\n // while the eval fallback keeps the original namespace expression.\n } else {\n hasNonStaticLocalReference = true;\n }\n return;\n }\n\n const replacement = getConstantReplacement(binding, ctx);\n if (evaluate && replacement) {\n identifierReplacements.set(name, replacement);\n return;\n }\n\n hasNonStaticLocalReference = true;\n assertHoistable(binding, ctx);\n addHoistedDeclaration(binding, ctx);\n if (!binding.isRoot && binding.declarator?.id.type === 'Identifier') {\n identifierReplacements.set(name, getHoistedBindingName(binding, ctx));\n }\n }\n );\n\n return {\n expressionCode:\n identifierReplacements.size > 0\n ? replaceIdentifierReferences(\n expression,\n identifierReplacements,\n ctx.code\n )\n : source,\n importedFrom,\n kind: isFunction ? ValueType.FUNCTION : ValueType.LAZY,\n staticExpressionCode:\n namespaceStatic.replacements.length > 0\n ? applyExpressionReplacements(\n expression,\n namespaceStatic.replacements,\n ctx.code\n )\n : undefined,\n staticImports: hasNonStaticLocalReference ? [] : staticImports,\n };\n};\n\nconst getInsertionPoints = (\n program: Program,\n expressions: Expression[]\n): number[] => {\n if (expressions.length === 0) {\n return [];\n }\n\n if (program.body.length === 0) {\n return expressions.map(() => 0);\n }\n\n const insertionPoints: number[] = [];\n let ownerIndex = 0;\n\n expressions.forEach((expression) => {\n while (\n ownerIndex < program.body.length - 1 &&\n program.body[ownerIndex]!.end < expression.start\n ) {\n ownerIndex += 1;\n }\n\n let owner: Program['body'][number] | undefined = program.body[ownerIndex];\n if (\n !owner ||\n owner.start > expression.start ||\n owner.end < expression.end\n ) {\n owner = program.body.find(\n (statement) =>\n statement.start <= expression.start && statement.end >= expression.end\n );\n }\n\n insertionPoints.push(owner?.start ?? 0);\n });\n\n return insertionPoints;\n};\n\nconst applyReplacements = (\n code: string,\n replacements: Replacement[]\n): string => {\n let result = code;\n replacements\n .sort((a, b) => b.start - a.start)\n .forEach((replacement) => {\n result =\n result.slice(0, replacement.start) +\n replacement.value +\n result.slice(replacement.end);\n });\n\n return result;\n};\n\nconst extractExpressions = (\n code: string,\n filename: string,\n evaluate: boolean,\n program: Program,\n analysis: Pick<\n ProgramAnalysis,\n 'bindingsByName' | 'rootMutationsByBinding' | 'usedNames'\n >,\n expressions: Expression[]\n): TemplateExtractionResult => {\n if (expressions.length === 0) {\n return {\n code,\n dependencyNames: [],\n expressionValues: [],\n staticValueCandidates: [],\n staticValues: [],\n };\n }\n\n const insertionPoints = getInsertionPoints(program, expressions);\n const ctx: ExtractionContext = {\n bindingResolutionCache: new Map(),\n bindingsByName: analysis.bindingsByName,\n code,\n currentInsertionPoint: insertionPoints[0] ?? 0,\n currentExpressionStart: expressions[0].start,\n dependencyNames: new Set(),\n expressionValues: [],\n filename,\n hoistedBindingNames: new Map(),\n hoistedDeclarations: new Map(),\n hoistedDeclarationsByInsertionPoint: new Map(),\n loc: createLocationLookup(code),\n referencesByNode: new WeakMap(),\n replacements: [],\n rootMutationsByBinding: analysis.rootMutationsByBinding,\n staticImportAliases: new Map(),\n staticValueCandidates: [],\n staticValues: [],\n usedNames: new Set(analysis.usedNames),\n };\n\n expressions.forEach((expression, index) => {\n ctx.currentInsertionPoint = insertionPoints[index] ?? 0;\n ctx.currentExpressionStart = expression.start;\n\n const literal = literalExpressionValue(expression, ctx);\n if (literal) {\n ctx.expressionValues.push(literal);\n return;\n }\n\n const {\n expressionCode,\n importedFrom,\n kind,\n staticExpressionCode,\n staticImports,\n staticValue,\n } = extractExpression(expression, ctx, evaluate);\n const expName = allocateExpressionName(ctx);\n\n addHoistedCode(\n expName,\n `const ${expName} = () => (${expressionCode});`,\n ctx\n );\n if (staticValue !== undefined && kind !== ValueType.FUNCTION) {\n ctx.staticValues.push({\n name: expName,\n value: staticValue,\n });\n } else if (staticImports.length > 0 && kind !== ValueType.FUNCTION) {\n const uniqueImports = new Map<string, OxcStaticImportReference>();\n staticImports.forEach((item) => {\n uniqueImports.set(\n `${item.local}\\0${item.importLocal ?? ''}\\0${item.source}\\0${\n item.imported\n }`,\n item\n );\n });\n ctx.staticValueCandidates.push({\n imports: [...uniqueImports.values()],\n name: expName,\n source: staticExpressionCode ?? expressionCode,\n });\n }\n ctx.replacements.push({\n start: expression.start,\n end: expression.end,\n value: `${expName}()`,\n });\n ctx.expressionValues.push({\n ex: {\n loc: getSourceLocation(expression.start, expression.end, ctx),\n name: expName,\n type: 'Identifier',\n },\n importedFrom,\n kind,\n source: ctx.code.slice(expression.start, expression.end),\n } as unknown as Omit<ExpressionValue, 'buildCodeFrameError'>);\n });\n\n ctx.hoistedDeclarationsByInsertionPoint.forEach((declarations, point) => {\n ctx.replacements.push({\n start: point,\n end: point,\n value: `${declarations.join('\\n')}\\n`,\n });\n });\n\n return {\n code: applyReplacements(code, ctx.replacements),\n dependencyNames: [...ctx.dependencyNames],\n expressionValues: ctx.expressionValues,\n staticValueCandidates: ctx.staticValueCandidates,\n staticValues: ctx.staticValues,\n };\n};\n\nexport const isOxcStaticSerializableValue = (value: unknown): boolean =>\n isStaticSerializableValue(value);\n\nexport const evaluateOxcStaticExpressionAt = (\n code: string,\n filename: string,\n expressionSpan: ExpressionSpan,\n staticBindings: Map<string, unknown> = new Map()\n): unknown | undefined => {\n const program = parseOxc(code, filename);\n const analysis = analyzeProgram(program, {\n collectTargetExpressions: true,\n expressionSpanLookup: createSpanLookup([expressionSpan]),\n });\n const [expression] = analysis.targetExpressions;\n if (!expression) {\n return undefined;\n }\n\n const ctx: ExtractionContext = {\n bindingResolutionCache: new Map(),\n bindingsByName: analysis.bindingsByName,\n code,\n currentInsertionPoint: 0,\n currentExpressionStart: expression.start,\n dependencyNames: new Set(),\n expressionValues: [],\n filename,\n hoistedBindingNames: new Map(),\n hoistedDeclarations: new Map(),\n hoistedDeclarationsByInsertionPoint: new Map(),\n loc: createLocationLookup(code),\n referencesByNode: new WeakMap(),\n replacements: [],\n rootMutationsByBinding: analysis.rootMutationsByBinding,\n staticImportAliases: new Map(),\n staticValueCandidates: [],\n staticValues: [],\n usedNames: new Set(analysis.usedNames),\n };\n\n return evaluateStatic(expression, ctx, new Map(staticBindings));\n};\n\nexport const evaluateOxcStaticExpression = (\n source: string,\n filename: string,\n staticBindings: Map<string, unknown> = new Map()\n): unknown | undefined => {\n const code = `const __wyw_static_value = ${source};`;\n const program = parseOxc(code, filename);\n const declaration = program.body[0];\n if (declaration?.type !== 'VariableDeclaration') {\n return undefined;\n }\n\n const [declarator] = declaration.declarations;\n if (!declarator?.init) {\n return undefined;\n }\n\n return evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: declarator.init.end,\n start: declarator.init.start,\n },\n staticBindings\n );\n};\n\nexport const collectOxcExpressionDependencies = (\n code: string,\n filename: string,\n evaluate = false,\n targetExpressionSpans?: ExpressionSpan[]\n): TemplateExtractionResult => {\n const program = parseOxc(code, filename);\n const analysis = analyzeProgram(program, {\n collectTargetExpressions: true,\n expressionSpanLookup: createSpanLookup(targetExpressionSpans),\n });\n\n return extractExpressions(\n code,\n filename,\n evaluate,\n program,\n analysis,\n analysis.targetExpressions\n );\n};\n\nexport const collectOxcTemplateDependencies = (\n code: string,\n filename: string,\n evaluate = false,\n targetTemplateSpans?: ExpressionSpan[]\n): TemplateExtractionResult => {\n const program = parseOxc(code, filename);\n const analysis = analyzeProgram(program, {\n collectTemplateLiterals: true,\n templateSpanLookup: createSpanLookup(targetTemplateSpans),\n });\n const expressions = analysis.templateLiterals.flatMap(\n (template) => template.expressions\n );\n\n return extractExpressions(\n code,\n filename,\n evaluate,\n program,\n analysis,\n expressions\n );\n};\n"],"file":"collectOxcTemplateDependencies.js"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// @ts-expect-error
|
|
2
|
-
Symbol.dispose ??= Symbol(
|
|
3
|
-
|
|
2
|
+
Symbol.dispose ??= Symbol("Symbol.dispose");
|
|
4
3
|
// @ts-expect-error
|
|
5
|
-
Symbol.asyncDispose ??= Symbol(
|
|
6
|
-
//# sourceMappingURL=dispose-polyfill.js.map
|
|
4
|
+
Symbol.asyncDispose ??= Symbol("Symbol.asyncDispose");
|
|
5
|
+
//# sourceMappingURL=dispose-polyfill.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":";AACA,OAAO,YAAY,OAAO,iBAAiB;;AAG3C,OAAO,iBAAiB,OAAO,sBAAsB","names":[],"sources":["../../src/utils/dispose-polyfill.ts"],"version":3,"sourcesContent":["// @ts-expect-error\nSymbol.dispose ??= Symbol('Symbol.dispose');\n\n// @ts-expect-error\nSymbol.asyncDispose ??= Symbol('Symbol.asyncDispose');\n"],"file":"dispose-polyfill.js"}
|
package/esm/utils/getFileIdx.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
let nextIdx = 1;
|
|
2
2
|
const processed = new Map();
|
|
3
3
|
export function getFileIdx(name) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
if (!processed.has(name)) {
|
|
5
|
+
// eslint-disable-next-line no-plusplus
|
|
6
|
+
processed.set(name, nextIdx++);
|
|
7
|
+
}
|
|
8
|
+
return processed.get(name).toString().padStart(5, "0");
|
|
9
9
|
}
|
|
10
|
-
//# sourceMappingURL=getFileIdx.js.map
|
|
10
|
+
//# sourceMappingURL=getFileIdx.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAAA,IAAI,UAAU;AACd,MAAM,YAAY,IAAI,KAAqB;AAE3C,OAAO,SAAS,WAAW,MAAsB;AAC/C,KAAI,CAAC,UAAU,IAAI,KAAK,EAAE;;AAExB,YAAU,IAAI,MAAM,UAAU;;AAGhC,QAAO,UAAU,IAAI,KAAK,CAAE,UAAU,CAAC,SAAS,GAAG,IAAI","names":[],"sources":["../../src/utils/getFileIdx.ts"],"version":3,"sourcesContent":["let nextIdx = 1;\nconst processed = new Map<string, number>();\n\nexport function getFileIdx(name: string): string {\n if (!processed.has(name)) {\n // eslint-disable-next-line no-plusplus\n processed.set(name, nextIdx++);\n }\n\n return processed.get(name)!.toString().padStart(5, '0');\n}\n"],"file":"getFileIdx.js"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export const getPluginKey = plugin => {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
export const getPluginKey = (plugin) => {
|
|
2
|
+
if (typeof plugin === "string") {
|
|
3
|
+
return plugin;
|
|
4
|
+
}
|
|
5
|
+
if (Array.isArray(plugin)) {
|
|
6
|
+
return getPluginKey(plugin[0]);
|
|
7
|
+
}
|
|
8
|
+
if (typeof plugin === "object" && plugin !== null && "key" in plugin) {
|
|
9
|
+
return plugin.key ?? null;
|
|
10
|
+
}
|
|
11
|
+
return null;
|
|
12
12
|
};
|
|
13
|
-
//# sourceMappingURL=getPluginKey.js.map
|
|
13
|
+
//# sourceMappingURL=getPluginKey.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAQA,OAAO,MAAM,gBAAgB,WAA0C;AACrE,KAAI,OAAO,WAAW,UAAU;AAC9B,SAAO;;AAGT,KAAI,MAAM,QAAQ,OAAO,EAAE;AACzB,SAAO,aAAa,OAAO,GAAG;;AAGhC,KAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,SAAS,QAAQ;AACpE,SAAQ,OAAmC,OAAO;;AAGpD,QAAO","names":[],"sources":["../../src/utils/getPluginKey.ts"],"version":3,"sourcesContent":["type PluginItemLike =\n | string\n | readonly [PluginItemLike, ...unknown[]]\n | { key?: string | null }\n | object\n | null\n | undefined;\n\nexport const getPluginKey = (plugin: PluginItemLike): string | null => {\n if (typeof plugin === 'string') {\n return plugin;\n }\n\n if (Array.isArray(plugin)) {\n return getPluginKey(plugin[0]);\n }\n\n if (typeof plugin === 'object' && plugin !== null && 'key' in plugin) {\n return (plugin as { key?: string | null }).key ?? null;\n }\n\n return null;\n};\n"],"file":"getPluginKey.js"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isNode } from "./isNode.js";
|
|
2
2
|
export function getVisitorKeys(node) {
|
|
3
|
-
|
|
3
|
+
return Object.keys(node).filter((key) => {
|
|
4
|
+
const value = node[key];
|
|
5
|
+
if (isNode(value)) {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
return Array.isArray(value) && value.some(isNode);
|
|
9
|
+
});
|
|
4
10
|
}
|
|
5
|
-
//# sourceMappingURL=getVisitorKeys.js.map
|
|
11
|
+
//# sourceMappingURL=getVisitorKeys.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAEA,SAAS,cAAc;AASvB,OAAO,SAAS,eACd,MACsB;AACtB,QAAO,OAAO,KAAK,KAAK,CAAC,QAAQ,QAAQ;EACvC,MAAM,QAAQ,KAAK;AACnB,MAAI,OAAO,MAAM,EAAE;AACjB,UAAO;;AAGT,SAAO,MAAM,QAAQ,MAAM,IAAI,MAAM,KAAK,OAAO;GACjD","names":[],"sources":["../../src/utils/getVisitorKeys.ts"],"version":3,"sourcesContent":["import type { AstNode } from '@wyw-in-js/shared';\n\nimport { isNode } from './isNode';\n\nexport type VisitorKeys<T extends AstNode> = {\n [K in keyof T]: Exclude<T[K], undefined> extends AstNode | AstNode[] | null\n ? K\n : never;\n}[keyof T] &\n string;\n\nexport function getVisitorKeys<TNode extends AstNode>(\n node: TNode\n): VisitorKeys<TNode>[] {\n return Object.keys(node).filter((key) => {\n const value = node[key as keyof TNode];\n if (isNode(value)) {\n return true;\n }\n\n return Array.isArray(value) && value.some(isNode);\n }) as VisitorKeys<TNode>[];\n}\n"],"file":"getVisitorKeys.js"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { collectOxcExportsAndImports } from "./collectOxcExportsAndImports.js";
|
|
3
|
+
import { stripQueryAndHash } from "./parseRequest.js";
|
|
4
|
+
export const hasCachedWywPrevalExport = (services, resolved, cached) => {
|
|
5
|
+
const knownExports = services.cache.get("exports", resolved);
|
|
6
|
+
if (knownExports) {
|
|
7
|
+
return knownExports.includes("__wywPreval") || knownExports.includes("*");
|
|
8
|
+
}
|
|
9
|
+
const filename = stripQueryAndHash(resolved);
|
|
10
|
+
const code = cached?.initialCode ?? cached?.loadedAndParsed?.code ?? fs.readFileSync(filename, "utf-8");
|
|
11
|
+
try {
|
|
12
|
+
const analyzed = collectOxcExportsAndImports(code, filename);
|
|
13
|
+
if (analyzed.reexports.some((reexport) => reexport.exported === "*")) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
const exportNames = Array.from(new Set([...Object.keys(analyzed.exports), ...analyzed.reexports.filter((reexport) => reexport.exported !== "*").map((reexport) => reexport.exported)]));
|
|
17
|
+
services.cache.add("exports", resolved, exportNames);
|
|
18
|
+
return exportNames.includes("__wywPreval");
|
|
19
|
+
} catch {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=hasCachedWywPrevalExport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"AAAA,OAAO,QAAQ;AAIf,SAAS,mCAAmC;AAC5C,SAAS,yBAAyB;AASlC,OAAO,MAAM,4BACX,UACA,UACA,WACY;CACZ,MAAM,eAAe,SAAS,MAAM,IAAI,WAAW,SAAS;AAG5D,KAAI,cAAc;AAChB,SAAO,aAAa,SAAS,cAAc,IAAI,aAAa,SAAS,IAAI;;CAG3E,MAAM,WAAW,kBAAkB,SAAS;CAC5C,MAAM,OACJ,QAAQ,eACR,QAAQ,iBAAiB,QACzB,GAAG,aAAa,UAAU,QAAQ;AAEpC,KAAI;EACF,MAAM,WAAW,4BAA4B,MAAM,SAAS;AAC5D,MAAI,SAAS,UAAU,MAAM,aAAa,SAAS,aAAa,IAAI,EAAE;AACpE,UAAO;;EAGT,MAAM,cAAc,MAAM,KACxB,IAAI,IAAI,CACN,GAAG,OAAO,KAAK,SAAS,QAAQ,EAChC,GAAG,SAAS,UACT,QAAQ,aAAa,SAAS,aAAa,IAAI,CAC/C,KAAK,aAAa,SAAS,SAAS,CACxC,CAAC,CACH;AACD,WAAS,MAAM,IAAI,WAAW,UAAU,YAAY;AACpD,SAAO,YAAY,SAAS,cAAc;SACpC;AACN,SAAO","names":[],"sources":["../../src/utils/hasCachedWywPrevalExport.ts"],"version":3,"sourcesContent":["import fs from 'node:fs';\n\nimport type { Services } from '../transform/types';\n\nimport { collectOxcExportsAndImports } from './collectOxcExportsAndImports';\nimport { stripQueryAndHash } from './parseRequest';\n\ntype CachedEntrypointLike = {\n evaluated?: boolean;\n ignored?: boolean;\n initialCode?: string;\n loadedAndParsed?: { code?: string; evalConfig?: { filename?: string } };\n};\n\nexport const hasCachedWywPrevalExport = (\n services: Services,\n resolved: string,\n cached: CachedEntrypointLike | undefined\n): boolean => {\n const knownExports = services.cache.get('exports', resolved) as\n | string[]\n | undefined;\n if (knownExports) {\n return knownExports.includes('__wywPreval') || knownExports.includes('*');\n }\n\n const filename = stripQueryAndHash(resolved);\n const code =\n cached?.initialCode ??\n cached?.loadedAndParsed?.code ??\n fs.readFileSync(filename, 'utf-8');\n\n try {\n const analyzed = collectOxcExportsAndImports(code, filename);\n if (analyzed.reexports.some((reexport) => reexport.exported === '*')) {\n return true;\n }\n\n const exportNames = Array.from(\n new Set([\n ...Object.keys(analyzed.exports),\n ...analyzed.reexports\n .filter((reexport) => reexport.exported !== '*')\n .map((reexport) => reexport.exported),\n ])\n );\n services.cache.add('exports', resolved, exportNames);\n return exportNames.includes('__wywPreval');\n } catch {\n return true;\n }\n};\n\nexport type { CachedEntrypointLike };\n"],"file":"hasCachedWywPrevalExport.js"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export default function hasWywPreval(exports) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
if (!exports || typeof exports !== "object") {
|
|
3
|
+
return false;
|
|
4
|
+
}
|
|
5
|
+
return "__wywPreval" in exports;
|
|
6
6
|
}
|
|
7
|
-
//# sourceMappingURL=hasWywPreval.js.map
|
|
7
|
+
//# sourceMappingURL=hasWywPreval.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAEA,eAAe,SAAS,aAAa,SAEnC;AACA,KAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,SAAO;;AAGT,QAAO,iBAAiB","names":[],"sources":["../../src/utils/hasWywPreval.ts"],"version":3,"sourcesContent":["import type { Value } from '@wyw-in-js/processor-utils';\n\nexport default function hasWywPreval(exports: unknown): exports is {\n __wywPreval: Record<string, () => Value> | null | undefined;\n} {\n if (!exports || typeof exports !== 'object') {\n return false;\n }\n\n return '__wywPreval' in exports;\n}\n"],"file":"hasWywPreval.js"}
|
|
@@ -1,107 +1,92 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
import { syncResolve } from
|
|
3
|
-
import { Minimatch } from
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { syncResolve } from "@wyw-in-js/shared";
|
|
3
|
+
import { Minimatch } from "minimatch";
|
|
4
4
|
export function toCanonicalFileKey(resolved, root) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
const rootDir = root ? path.resolve(root) : process.cwd();
|
|
6
|
+
const normalizedResolved = path.resolve(resolved);
|
|
7
|
+
let relative = path.relative(rootDir, normalizedResolved);
|
|
8
|
+
if (path.sep !== path.posix.sep) {
|
|
9
|
+
relative = relative.split(path.sep).join(path.posix.sep);
|
|
10
|
+
}
|
|
11
|
+
if (!relative.startsWith(".")) {
|
|
12
|
+
relative = `./${relative}`;
|
|
13
|
+
}
|
|
14
|
+
return relative;
|
|
15
15
|
}
|
|
16
|
-
export function toImportKey({
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return {
|
|
29
|
-
key: source,
|
|
30
|
-
kind: 'package'
|
|
31
|
-
};
|
|
16
|
+
export function toImportKey({ source, resolved, root }) {
|
|
17
|
+
const isFileImport = source.startsWith(".") || path.isAbsolute(source);
|
|
18
|
+
if (isFileImport && resolved) {
|
|
19
|
+
return {
|
|
20
|
+
key: toCanonicalFileKey(resolved, root),
|
|
21
|
+
kind: "file"
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
key: source,
|
|
26
|
+
kind: "package"
|
|
27
|
+
};
|
|
32
28
|
}
|
|
33
|
-
export function resolveMockSpecifier({
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
root,
|
|
37
|
-
stack
|
|
38
|
-
}) {
|
|
39
|
-
const specifier = mock.startsWith('.') && root ? path.resolve(root, mock) : mock;
|
|
40
|
-
return syncResolve(specifier, importer, stack);
|
|
29
|
+
export function resolveMockSpecifier({ importer, mock, root, stack }) {
|
|
30
|
+
const specifier = mock.startsWith(".") && root ? path.resolve(root, mock) : mock;
|
|
31
|
+
return syncResolve(specifier, importer, stack);
|
|
41
32
|
}
|
|
42
33
|
export function applyImportOverrideToOnly(only, override) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
34
|
+
if (override?.noShake) {
|
|
35
|
+
return ["*"];
|
|
36
|
+
}
|
|
37
|
+
return only;
|
|
47
38
|
}
|
|
48
39
|
const compiledImportOverridesCache = new WeakMap();
|
|
49
40
|
const minimatchOptions = {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
41
|
+
dot: true,
|
|
42
|
+
nocomment: true,
|
|
43
|
+
nonegate: true
|
|
53
44
|
};
|
|
54
45
|
function getPatternSpecificity(pattern) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
46
|
+
let wildcardCount = 0;
|
|
47
|
+
let escaped = false;
|
|
48
|
+
for (const char of pattern) {
|
|
49
|
+
if (escaped) {
|
|
50
|
+
escaped = false;
|
|
51
|
+
} else if (char === "\\") {
|
|
52
|
+
escaped = true;
|
|
53
|
+
} else if (char === "*" || char === "?") {
|
|
54
|
+
wildcardCount += 1;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return pattern.length - wildcardCount * 10;
|
|
67
58
|
}
|
|
68
59
|
function compileImportOverrides(importOverrides) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
matchers
|
|
85
|
-
};
|
|
60
|
+
const matchers = Object.entries(importOverrides).map(([pattern, override]) => {
|
|
61
|
+
return {
|
|
62
|
+
matcher: new Minimatch(pattern, minimatchOptions),
|
|
63
|
+
override,
|
|
64
|
+
pattern,
|
|
65
|
+
specificity: getPatternSpecificity(pattern)
|
|
66
|
+
};
|
|
67
|
+
}).sort((a, b) => {
|
|
68
|
+
const bySpecificity = b.specificity - a.specificity;
|
|
69
|
+
if (bySpecificity !== 0) return bySpecificity;
|
|
70
|
+
const byLength = b.pattern.length - a.pattern.length;
|
|
71
|
+
if (byLength !== 0) return byLength;
|
|
72
|
+
return a.pattern.localeCompare(b.pattern);
|
|
73
|
+
});
|
|
74
|
+
return { matchers };
|
|
86
75
|
}
|
|
87
76
|
function getCompiledImportOverrides(importOverrides) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
77
|
+
const cached = compiledImportOverridesCache.get(importOverrides);
|
|
78
|
+
if (cached) return cached;
|
|
79
|
+
const compiled = compileImportOverrides(importOverrides);
|
|
80
|
+
compiledImportOverridesCache.set(importOverrides, compiled);
|
|
81
|
+
return compiled;
|
|
93
82
|
}
|
|
94
83
|
export function getImportOverride(importOverrides, key) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
} = getCompiledImportOverrides(importOverrides);
|
|
103
|
-
return matchers.find(({
|
|
104
|
-
matcher
|
|
105
|
-
}) => matcher.match(key))?.override;
|
|
84
|
+
if (!importOverrides) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
const direct = importOverrides[key];
|
|
88
|
+
if (direct) return direct;
|
|
89
|
+
const { matchers } = getCompiledImportOverrides(importOverrides);
|
|
90
|
+
return matchers.find(({ matcher }) => matcher.match(key))?.override;
|
|
106
91
|
}
|
|
107
|
-
//# sourceMappingURL=importOverrides.js.map
|
|
92
|
+
//# sourceMappingURL=importOverrides.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAAA,OAAO,UAAU;AAEjB,SACE,mBAGK;AACP,SAAS,iBAAiB;AAS1B,OAAO,SAAS,mBACd,UACA,MACQ;CACR,MAAM,UAAU,OAAO,KAAK,QAAQ,KAAK,GAAG,QAAQ,KAAK;CACzD,MAAM,qBAAqB,KAAK,QAAQ,SAAS;CACjD,IAAI,WAAW,KAAK,SAAS,SAAS,mBAAmB;AAEzD,KAAI,KAAK,QAAQ,KAAK,MAAM,KAAK;AAC/B,aAAW,SAAS,MAAM,KAAK,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI;;AAG1D,KAAI,CAAC,SAAS,WAAW,IAAI,EAAE;AAC7B,aAAW,KAAK;;AAGlB,QAAO;;AAGT,OAAO,SAAS,YAAY,EAC1B,QACA,UACA,QAKY;CACZ,MAAM,eAAe,OAAO,WAAW,IAAI,IAAI,KAAK,WAAW,OAAO;AAEtE,KAAI,gBAAgB,UAAU;AAC5B,SAAO;GAAE,KAAK,mBAAmB,UAAU,KAAK;GAAE,MAAM;GAAQ;;AAGlE,QAAO;EAAE,KAAK;EAAQ,MAAM;EAAW;;AAGzC,OAAO,SAAS,qBAAqB,EACnC,UACA,MACA,MACA,SAMS;CACT,MAAM,YACJ,KAAK,WAAW,IAAI,IAAI,OAAO,KAAK,QAAQ,MAAM,KAAK,GAAG;AAE5D,QAAO,YAAY,WAAW,UAAU,MAAM;;AAGhD,OAAO,SAAS,0BACd,MACA,UACU;AACV,KAAI,UAAU,SAAS;AACrB,SAAO,CAAC,IAAI;;AAGd,QAAO;;AAYT,MAAM,+BAA+B,IAAI,SAGtC;AAEH,MAAM,mBAAmB;CACvB,KAAK;CACL,WAAW;CACX,UAAU;CACX;AAED,SAAS,sBAAsB,SAAyB;CACtD,IAAI,gBAAgB;CACpB,IAAI,UAAU;AACd,MAAK,MAAM,QAAQ,SAAS;AAC1B,MAAI,SAAS;AACX,aAAU;aACD,SAAS,MAAM;AACxB,aAAU;aACD,SAAS,OAAO,SAAS,KAAK;AACvC,oBAAiB;;;AAIrB,QAAO,QAAQ,SAAS,gBAAgB;;AAG1C,SAAS,uBACP,iBACyB;CACzB,MAAM,WAAW,OAAO,QAAQ,gBAAgB,CAC7C,KAAK,CAAC,SAAS,cAAc;AAC5B,SAAO;GACL,SAAS,IAAI,UAAU,SAAS,iBAAiB;GACjD;GACA;GACA,aAAa,sBAAsB,QAAQ;GAC5C;GACD,CACD,MAAM,GAAG,MAAM;EACd,MAAM,gBAAgB,EAAE,cAAc,EAAE;AACxC,MAAI,kBAAkB,EAAG,QAAO;EAEhC,MAAM,WAAW,EAAE,QAAQ,SAAS,EAAE,QAAQ;AAC9C,MAAI,aAAa,EAAG,QAAO;AAE3B,SAAO,EAAE,QAAQ,cAAc,EAAE,QAAQ;GACzC;AAEJ,QAAO,EAAE,UAAU;;AAGrB,SAAS,2BACP,iBACyB;CACzB,MAAM,SAAS,6BAA6B,IAAI,gBAAgB;AAChE,KAAI,OAAQ,QAAO;CAEnB,MAAM,WAAW,uBAAuB,gBAAgB;AACxD,8BAA6B,IAAI,iBAAiB,SAAS;AAC3D,QAAO;;AAGT,OAAO,SAAS,kBACd,iBACA,KAC4B;AAC5B,KAAI,CAAC,iBAAiB;AACpB,SAAO;;CAGT,MAAM,SAAS,gBAAgB;AAC/B,KAAI,OAAQ,QAAO;CAEnB,MAAM,EAAE,aAAa,2BAA2B,gBAAgB;AAChE,QAAO,SAAS,MAAM,EAAE,cAAc,QAAQ,MAAM,IAAI,CAAC,EAAE","names":[],"sources":["../../src/utils/importOverrides.ts"],"version":3,"sourcesContent":["import path from 'path';\n\nimport {\n syncResolve,\n type ImportOverride,\n type ImportOverrides,\n} from '@wyw-in-js/shared';\nimport { Minimatch } from 'minimatch';\n\nexport type ImportKeyKind = 'file' | 'package';\n\nexport type ImportKey = {\n key: string;\n kind: ImportKeyKind;\n};\n\nexport function toCanonicalFileKey(\n resolved: string,\n root: string | undefined\n): string {\n const rootDir = root ? path.resolve(root) : process.cwd();\n const normalizedResolved = path.resolve(resolved);\n let relative = path.relative(rootDir, normalizedResolved);\n\n if (path.sep !== path.posix.sep) {\n relative = relative.split(path.sep).join(path.posix.sep);\n }\n\n if (!relative.startsWith('.')) {\n relative = `./${relative}`;\n }\n\n return relative;\n}\n\nexport function toImportKey({\n source,\n resolved,\n root,\n}: {\n resolved: string | null;\n root: string | undefined;\n source: string;\n}): ImportKey {\n const isFileImport = source.startsWith('.') || path.isAbsolute(source);\n\n if (isFileImport && resolved) {\n return { key: toCanonicalFileKey(resolved, root), kind: 'file' };\n }\n\n return { key: source, kind: 'package' };\n}\n\nexport function resolveMockSpecifier({\n importer,\n mock,\n root,\n stack,\n}: {\n importer: string;\n mock: string;\n root: string | undefined;\n stack: string[];\n}): string {\n const specifier =\n mock.startsWith('.') && root ? path.resolve(root, mock) : mock;\n\n return syncResolve(specifier, importer, stack);\n}\n\nexport function applyImportOverrideToOnly(\n only: string[],\n override: ImportOverride | undefined\n): string[] {\n if (override?.noShake) {\n return ['*'];\n }\n\n return only;\n}\n\ntype CompiledImportOverrides = {\n matchers: Array<{\n matcher: Minimatch;\n override: ImportOverride;\n pattern: string;\n specificity: number;\n }>;\n};\n\nconst compiledImportOverridesCache = new WeakMap<\n ImportOverrides,\n CompiledImportOverrides\n>();\n\nconst minimatchOptions = {\n dot: true,\n nocomment: true,\n nonegate: true,\n} as const;\n\nfunction getPatternSpecificity(pattern: string): number {\n let wildcardCount = 0;\n let escaped = false;\n for (const char of pattern) {\n if (escaped) {\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === '*' || char === '?') {\n wildcardCount += 1;\n }\n }\n\n return pattern.length - wildcardCount * 10;\n}\n\nfunction compileImportOverrides(\n importOverrides: ImportOverrides\n): CompiledImportOverrides {\n const matchers = Object.entries(importOverrides)\n .map(([pattern, override]) => {\n return {\n matcher: new Minimatch(pattern, minimatchOptions),\n override,\n pattern,\n specificity: getPatternSpecificity(pattern),\n };\n })\n .sort((a, b) => {\n const bySpecificity = b.specificity - a.specificity;\n if (bySpecificity !== 0) return bySpecificity;\n\n const byLength = b.pattern.length - a.pattern.length;\n if (byLength !== 0) return byLength;\n\n return a.pattern.localeCompare(b.pattern);\n });\n\n return { matchers };\n}\n\nfunction getCompiledImportOverrides(\n importOverrides: ImportOverrides\n): CompiledImportOverrides {\n const cached = compiledImportOverridesCache.get(importOverrides);\n if (cached) return cached;\n\n const compiled = compileImportOverrides(importOverrides);\n compiledImportOverridesCache.set(importOverrides, compiled);\n return compiled;\n}\n\nexport function getImportOverride(\n importOverrides: ImportOverrides | undefined,\n key: string\n): ImportOverride | undefined {\n if (!importOverrides) {\n return undefined;\n }\n\n const direct = importOverrides[key];\n if (direct) return direct;\n\n const { matchers } = getCompiledImportOverrides(importOverrides);\n return matchers.find(({ matcher }) => matcher.match(key))?.override;\n}\n"],"file":"importOverrides.js"}
|