@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/eval/broker.ts"],"version":3,"sourcesContent":["/* eslint-disable no-continue, no-plusplus, no-nested-ternary, no-void, no-await-in-loop, @typescript-eslint/no-use-before-define */\nimport { createHash } from 'crypto';\nimport fs from 'fs';\nimport NativeModule from 'module';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { spawn, type ChildProcessWithoutNullStreams } from 'child_process';\n\nimport { invariant } from 'ts-invariant';\n\nimport type {\n EvalOptionsV2,\n EvalWarning,\n FeatureFlags,\n ImportLoaderContext,\n ImportLoaders,\n} from '@wyw-in-js/shared';\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport type { Entrypoint } from '../transform/Entrypoint';\nimport type { ParentEntrypoint } from '../types';\nimport { isStaticallyEvaluatableModule } from '../transform/isStaticallyEvaluatableModule';\nimport type { Services } from '../transform/types';\nimport {\n applyImportOverrideToOnly,\n getImportOverride,\n resolveMockSpecifier,\n toImportKey,\n} from '../utils/importOverrides';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { collectOxcExportsAndImports } from '../utils/collectOxcExportsAndImports';\nimport { parseRequest, stripQueryAndHash } from '../utils/parseRequest';\nimport { resolveFilenameWithConditions } from '../utils/resolveWithConditions';\nimport {\n hasCachedWywPrevalExport,\n type CachedEntrypointLike,\n} from '../utils/hasCachedWywPrevalExport';\nimport { isSuperSet, mergeOnly } from '../transform/Entrypoint.helpers';\nimport { oxcShaker } from '../shaker';\nimport { analyzeOxcBarrelFile } from '../transform/oxcBarrelManifest';\n\nimport {\n type EvalRunnerInitPayload,\n type EvalResultPayload,\n type LoadRequestPayload,\n type LoadResultPayload,\n type MainToRunnerMessage,\n type ResolveRequestPayload,\n type RunnerToMainMessage,\n} from './protocol';\nimport { LruCache } from './lru';\nimport {\n prepareModuleOnDemand,\n type PreparedModule,\n} from './prepareModuleOnDemand';\nimport {\n deserializeValue,\n encodeGlobals,\n serializeValue,\n type SerializedValue,\n} from './serialize';\nimport { createWriteQueue, type WriteQueue, writeToStream } from './writeQueue';\n\ntype HiddenModuleMembers = {\n _extensions: Record<string, () => void>;\n _resolveFilename: (\n id: string,\n options: { filename: string; id: string; paths: string[] },\n isMain?: boolean,\n resolveOptions?: { conditions?: Set<string> }\n ) => string;\n _nodeModulePaths(filename: string): string[];\n};\n\nconst DefaultModuleImplementation = NativeModule as typeof NativeModule &\n HiddenModuleMembers;\n\nconst CJS_DEFAULT_CONDITIONS = ['require', 'node', 'default'] as const;\n\nconst expandConditions = (conditionNames: string[]): Set<string> => {\n const result = new Set<string>();\n\n conditionNames.forEach((name) => {\n if (name === '...') {\n CJS_DEFAULT_CONDITIONS.forEach((condition) => result.add(condition));\n return;\n }\n\n result.add(name);\n });\n\n return result;\n};\n\nconst NOOP = () => {};\n\nconst isBuiltinSpecifier = (specifier: string) => {\n const normalized = specifier.startsWith('node:')\n ? specifier.slice(5)\n : specifier;\n return (\n DefaultModuleImplementation.builtinModules?.includes(normalized) ||\n DefaultModuleImplementation.builtinModules?.includes(`node:${normalized}`)\n );\n};\n\nconst isVirtualSpecifier = (specifier: string) =>\n specifier.startsWith('/@') ||\n specifier.startsWith('virtual:') ||\n specifier.startsWith('\\0');\n\nconst isEvalOnlyKey = (key: string) =>\n key === '__wywPreval' || key === 'side-effect';\n\nconst isPreparedOnlySuperSet = (\n currentOnly: string[],\n requestedOnly: string[]\n): boolean => {\n if (\n requestedOnly.includes('__wywPreval') &&\n !currentOnly.includes('__wywPreval')\n ) {\n return false;\n }\n\n return isSuperSet(currentOnly, requestedOnly);\n};\n\nconst hasPreparedExportKeys = (\n prepared: {\n code?: string;\n exports?: Record<string, SerializedValue>;\n },\n requestedOnly: string[]\n): boolean => {\n const requestedKeys = requestedOnly.filter(\n (key) => !isEvalOnlyKey(key) && key !== '*'\n );\n\n if (requestedKeys.length === 0) {\n return true;\n }\n\n if (!prepared.exports) {\n if (!prepared.code) {\n return false;\n }\n\n try {\n const collected = collectOxcExportsAndImports(\n prepared.code,\n 'prepared-module.js'\n );\n if (collected.reexports.some((reexport) => reexport.exported === '*')) {\n return true;\n }\n\n const exportNames = new Set([\n ...Object.keys(collected.exports),\n ...collected.reexports\n .filter((reexport) => reexport.exported !== '*')\n .map((reexport) => reexport.exported),\n ]);\n\n return requestedKeys.every((key) => exportNames.has(key));\n } catch {\n return false;\n }\n }\n\n return requestedKeys.every((key) =>\n Object.prototype.hasOwnProperty.call(prepared.exports, key)\n );\n};\n\nconst isPreparedCacheHit = (\n prepared: {\n exports?: Record<string, SerializedValue>;\n only: string[];\n },\n requestedOnly: string[]\n): boolean =>\n isPreparedOnlySuperSet(prepared.only, requestedOnly) &&\n hasPreparedExportKeys(prepared, requestedOnly);\n\nconst isExportContainer = (\n value: unknown\n): value is Record<string | symbol, unknown> =>\n value !== null && (typeof value === 'object' || typeof value === 'function');\n\nconst hasCachedExport = (\n source: Record<string | symbol, unknown>,\n key: string\n) => {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n return true;\n }\n if (key === 'default') {\n return false;\n }\n const fallback = source.default;\n return (\n isExportContainer(fallback) &&\n Object.prototype.hasOwnProperty.call(fallback, key)\n );\n};\n\nconst resolveCachedExport = (\n source: Record<string | symbol, unknown>,\n key: string\n) => {\n if (key === 'default') {\n return Object.prototype.hasOwnProperty.call(source, 'default')\n ? (source as Record<string, unknown>).default\n : undefined;\n }\n\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n return (source as Record<string, unknown>)[key];\n }\n\n const fallback = (source as Record<string, unknown>).default;\n if (\n isExportContainer(fallback) &&\n Object.prototype.hasOwnProperty.call(fallback, key)\n ) {\n return (fallback as Record<string, unknown>)[key];\n }\n\n return undefined;\n};\n\nconst serializeCachedExports = (\n exportsValue: Record<string | symbol, unknown>,\n requiredOnly: string[]\n): Record<string, SerializedValue> | null => {\n if (requiredOnly.some(isEvalOnlyKey)) {\n return null;\n }\n\n const keys = requiredOnly.includes('*')\n ? Object.keys(exportsValue).filter((key) => !isEvalOnlyKey(key))\n : requiredOnly.filter((key) => !isEvalOnlyKey(key));\n\n if (keys.length === 0) {\n return null;\n }\n\n const serialized: Record<string, SerializedValue> = {};\n for (const key of keys) {\n if (!hasCachedExport(exportsValue, key)) {\n return null;\n }\n try {\n const encoded = serializeValue(resolveCachedExport(exportsValue, key));\n if (encoded.kind === 'function') {\n return null;\n }\n serialized[key] = encoded;\n } catch {\n return null;\n }\n }\n\n return serialized;\n};\n\ntype CachedExportEntrypointLike = {\n evaluatedOnly?: string[];\n exports?: Record<string | symbol, unknown>;\n loadedAndParsed?: {\n code?: string;\n evalConfig?: { filename?: null | string };\n evaluator?: unknown;\n };\n};\n\nconst collectKnownExportNames = (\n services: Services,\n id: string,\n cachedEntrypoint?: CachedExportEntrypointLike\n): string[] | undefined => {\n let knownExports = services.cache.get('exports', id) as string[] | undefined;\n if (knownExports || !cachedEntrypoint) {\n return knownExports;\n }\n\n const { loadedAndParsed } = cachedEntrypoint;\n if (loadedAndParsed?.evaluator !== oxcShaker || !loadedAndParsed.code) {\n return undefined;\n }\n\n const analyzed = collectOxcExportsAndImports(\n loadedAndParsed.code,\n loadedAndParsed.evalConfig?.filename ?? id\n );\n if (analyzed.reexports.some((reexport) => reexport.exported === '*')) {\n return undefined;\n }\n\n knownExports = Array.from(\n new Set([\n ...Object.keys(analyzed.exports),\n ...analyzed.reexports.map((reexport) => reexport.exported),\n ])\n );\n services.cache.add('exports', id, knownExports);\n return knownExports;\n};\n\nconst getSerializableStaticImportKeys = (\n services: Services,\n id: string,\n cachedEntrypoint: CachedExportEntrypointLike,\n requiredOnly: string[],\n request?: string | null,\n importerId?: string | null\n): string[] | null => {\n const isStaticImportLoad = Boolean(request && importerId);\n const requestedExports = requiredOnly.includes('*')\n ? null\n : requiredOnly.filter((key) => !isEvalOnlyKey(key) && key !== '*');\n const knownExports = collectKnownExportNames(\n services,\n id,\n cachedEntrypoint\n )?.filter((key) => !isEvalOnlyKey(key) && key !== '*');\n\n if (isStaticImportLoad) {\n if (\n !requestedExports?.length ||\n !knownExports?.length ||\n !isSuperSet(cachedEntrypoint.evaluatedOnly ?? [], knownExports)\n ) {\n return null;\n }\n\n if (!requestedExports.every((key) => knownExports.includes(key))) {\n return null;\n }\n\n return isSuperSet(cachedEntrypoint.evaluatedOnly ?? [], requestedExports)\n ? requestedExports\n : null;\n }\n\n if (knownExports?.length) {\n return isSuperSet(cachedEntrypoint.evaluatedOnly ?? [], knownExports)\n ? knownExports\n : null;\n }\n\n const evaluatedOnly = cachedEntrypoint.evaluatedOnly ?? requiredOnly;\n return requiredOnly.includes('*') ? evaluatedOnly : requiredOnly;\n};\n\nconst DEFAULT_EVAL_OPTIONS: Required<\n Pick<EvalOptionsV2, 'mode' | 'require' | 'resolver'>\n> = {\n mode: 'strict',\n require: 'warn-and-run',\n resolver: 'bundler',\n};\n\nconst MAX_MESSAGE_SIZE = 10 * 1024 * 1024;\nconst MAX_CHUNK_SIZE = 512 * 1024;\nconst RESOLVE_CACHE_SIZE = 5000;\nconst LOAD_CACHE_SIZE = 1000;\nconst IDENTIFIER_RE = /^[A-Za-z_$][\\w$]*$/u;\nconst REQUEST_TIMEOUT_MS = 30_000;\nconst EVAL_TIMEOUT_MS = Number(process.env.WYW_EVAL_TIMEOUT_MS ?? 300_000);\nconst INIT_TIMEOUT_MS = 120_000;\nconst HAPPYDOM_INIT_TIMEOUT_MS = Number(\n process.env.WYW_EVAL_HAPPYDOM_INIT_TIMEOUT_MS ??\n process.env.WYW_HAPPYDOM_TIMEOUT_MS ??\n 15_000\n);\n\ntype ResolveCacheEntry = {\n resolvedId: string | null;\n external?: boolean;\n usedNodeFallback?: boolean;\n};\n\ntype ResolveResult = ResolveCacheEntry & {\n only: string[];\n};\n\ntype PreparedCacheEntry = PreparedModule & {\n hash: string;\n exports?: Record<string, SerializedValue>;\n};\n\ntype CachedDependencyRecord = {\n only?: string[];\n resolved: string | null;\n};\n\ntype CachedDependencyOwner = {\n dependencies?: Map<string, CachedDependencyRecord>;\n};\n\ntype DirectBarrelBinding =\n | {\n kind: 'named';\n imported: string;\n source: string;\n }\n | {\n kind: 'namespace';\n source: string;\n };\n\ntype ModuleNameNode =\n | { type: 'Identifier'; name: string }\n | { type: 'StringLiteral'; value: string };\n\ntype ModuleSpecifierNode = {\n exportKind?: string | null;\n exported: ModuleNameNode;\n imported: ModuleNameNode;\n importKind?: string | null;\n local: ModuleNameNode & { name: string };\n type: string;\n};\n\ntype ModuleStatement = {\n declaration: { name: string; type: string };\n exportKind?: string | null;\n importKind?: string | null;\n source: { value: string };\n specifiers: ModuleSpecifierNode[];\n type: string;\n};\n\ntype ParsedModuleAst = {\n program: {\n body: ModuleStatement[];\n };\n};\n\ntype PendingRequest = {\n resolve: (payload: unknown) => void;\n reject: (error: Error) => void;\n timeout: ReturnType<typeof setTimeout>;\n};\n\ntype EvaluateResult = {\n values: Map<string, unknown> | null;\n dependencies: string[];\n};\n\ntype PendingEval = {\n entrypoint: Entrypoint;\n services: Services | undefined;\n resolve: (value: EvaluateResult) => void;\n reject: (reason?: unknown) => void;\n};\n\n// Mirrors runner.js `isFullModuleLoad`: wildcard `['*']` (or empty) is the\n// only shape stored in the runner's moduleCache; everything else lands in\n// moduleVariants. The shipped-code dedup must respect this shape because the\n// runner picks its lookup map based on the LoadResult's `only`.\nconst isWildcardOnly = (only: string[] | undefined | null): boolean =>\n !only || only.length === 0 || (only.length === 1 && only[0] === '*');\n\nconst isEvalTimeoutError = (error: unknown): boolean => {\n if (!error || typeof error !== 'object') return false;\n if ('code' in error && (error as { code?: string }).code) {\n return (error as { code?: string }).code === 'WYW_EVAL_TIMEOUT';\n }\n return false;\n};\n\n// ---------------------------------------------------------------------------\n// WYW_DEBUG eval dump\n// ---------------------------------------------------------------------------\n\nconst resolveDebugEvalDir = (): string | undefined => {\n const override = process.env.WYW_DUMP_EVALS_DIR;\n if (override) {\n return path.resolve(override);\n }\n\n const base = process.env.WYW_DUMP_EVALS;\n if (!base) {\n return undefined;\n }\n\n const ts = new Date()\n .toISOString()\n .slice(0, 19)\n .replace(/[-:T]/g, (c) => (c === 'T' ? '-' : ''));\n const root = base === '1' || base === 'true' ? './tmp' : base;\n return path.resolve(root, `wyw-dump-evals-${ts}`);\n};\n\nconst debugEvalDir = resolveDebugEvalDir();\nlet debugEvalDirReady = false;\n\nconst ensureDebugEvalDir = () => {\n if (!debugEvalDir || debugEvalDirReady) {\n return;\n }\n fs.mkdirSync(debugEvalDir, { recursive: true });\n debugEvalDirReady = true;\n};\n\nlet debugEvalSeq = 0;\n\nconst dumpEvalCode = (\n id: string,\n code: string,\n only: string[],\n source: string,\n evalSeq: number\n) => {\n if (!debugEvalDir) {\n return;\n }\n ensureDebugEvalDir();\n const seq = String(++debugEvalSeq).padStart(5, '0');\n const eSeq = String(evalSeq).padStart(5, '0');\n const relId = path.relative(process.cwd(), stripQueryAndHash(id));\n const safeName = relId.replace(/[/\\\\]/g, '__').replace(/^__/, '');\n const filename = `seq${seq}_eval${eSeq}_${safeName}.js`;\n const header = [\n `// id: ${id}`,\n `// only: ${JSON.stringify(only)}`,\n `// source: ${source}`,\n `// seq: ${seq}`,\n `// eval: #${eSeq}`,\n '',\n ].join('\\n');\n fs.writeFileSync(path.join(debugEvalDir, filename), header + code);\n};\n\nlet debugActionStream: fs.WriteStream | null = null;\n\nconst debugAction = (event: Record<string, unknown>) => {\n if (!debugEvalDir) {\n return;\n }\n ensureDebugEvalDir();\n if (!debugActionStream) {\n debugActionStream = fs.createWriteStream(\n path.join(debugEvalDir, 'actions.jsonl')\n );\n }\n debugActionStream.write(`${JSON.stringify(event)}\\n`);\n};\n\nconst flushDebugStreams = () => {\n debugActionStream?.end();\n debugActionStream = null;\n};\n\n// ---------------------------------------------------------------------------\n\nconst warnedUnknownImportsByServices = new WeakMap<Services, Set<string>>();\n\nconst getWarnedUnknownImports = (services: Services): Set<string> => {\n const cached = warnedUnknownImportsByServices.get(services);\n if (cached) return cached;\n const created = new Set<string>();\n warnedUnknownImportsByServices.set(services, created);\n return created;\n};\n\nconst warnedSlowImportsByServices = new WeakMap<Services, Set<string>>();\n\nconst getWarnedSlowImports = (services: Services): Set<string> => {\n const cached = warnedSlowImportsByServices.get(services);\n if (cached) return cached;\n const created = new Set<string>();\n warnedSlowImportsByServices.set(services, created);\n return created;\n};\n\nconst isWarningEnabled = (value: string | undefined): boolean =>\n Boolean(value) && value !== '0' && value !== 'false';\n\nconst getSlowImportThresholdMs = () => {\n const raw = process.env.WYW_WARN_SLOW_IMPORTS_MS;\n if (!raw) return 50;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed)) return 50;\n return parsed;\n};\n\nconst getEvalOptions = (services: Services): EvalOptionsV2 => ({\n ...DEFAULT_EVAL_OPTIONS,\n ...(services.options.pluginOptions.eval ?? {}),\n});\n\nconst buildRunnerPath = (): string => {\n const url = new URL('./runner.js', import.meta.url);\n return fileURLToPath(url);\n};\n\nexport const stripEntrypointGlobalsFromRunnerContext = (\n globals: Record<string, unknown>,\n entrypoint: string\n): Record<string, unknown> => {\n const entrypointDir = path.dirname(entrypoint);\n const shouldStripFilename =\n Object.prototype.hasOwnProperty.call(globals, '__filename') &&\n globals.__filename === entrypoint;\n const shouldStripDirname =\n Object.prototype.hasOwnProperty.call(globals, '__dirname') &&\n globals.__dirname === entrypointDir;\n\n if (!shouldStripFilename && !shouldStripDirname) {\n return globals;\n }\n\n const nextGlobals = { ...globals };\n if (shouldStripFilename) {\n delete nextGlobals.__filename;\n }\n if (shouldStripDirname) {\n delete nextGlobals.__dirname;\n }\n\n return nextGlobals;\n};\n\nconst getEntrypointResolveRoot = (entrypoint: Entrypoint): string => {\n let current: { name: string; parents: ParentEntrypoint[] } = entrypoint;\n const seen = new Set<string>();\n\n while (current.parents.length > 0 && !seen.has(current.name)) {\n seen.add(current.name);\n [current] = current.parents;\n }\n\n return current.name;\n};\n\nconst buildRunnerInitPayload = (\n services: Services,\n entrypoint: Entrypoint,\n featuresOverride?: FeatureFlags<'happyDOM'>\n): EvalRunnerInitPayload => {\n const evalOptions = getEvalOptions(services);\n const { pluginOptions } = services.options;\n const root = services.options.root ?? process.cwd();\n const { overrideContext, importOverrides, extensions } = pluginOptions;\n const features = featuresOverride ?? pluginOptions.features;\n const baseGlobals: Record<string, unknown> = {\n ...(evalOptions.globals ?? {}),\n };\n const withFilename = {\n ...baseGlobals,\n __filename: entrypoint.name,\n __dirname: path.dirname(entrypoint.name),\n };\n const globals = overrideContext\n ? overrideContext(withFilename, entrypoint.name)\n : baseGlobals;\n const sanitizedGlobals = stripEntrypointGlobalsFromRunnerContext(\n globals,\n entrypoint.name\n );\n\n return {\n evalOptions: {\n globals: encodeGlobalsCached(sanitizedGlobals),\n importOverrides,\n mode: evalOptions.mode ?? 'strict',\n require: evalOptions.require ?? 'warn-and-run',\n root,\n extensions,\n },\n features,\n entrypoint: entrypoint.name,\n };\n};\n\nconst emitWarning = (services: Services, message: string) => {\n if (services.emitWarning) {\n services.emitWarning(message);\n return;\n }\n\n // eslint-disable-next-line no-console\n console.warn(message);\n};\n\nconst emitEvalWarning = (services: Services, warning: EvalWarning) => {\n const { onWarn } = getEvalOptions(services);\n onWarn?.(warning);\n emitWarning(services, warning.message);\n};\n\nconst defaultImportLoaders: ImportLoaders = {\n raw: 'raw',\n url: 'url',\n};\n\nconst loadByImportLoaders = (\n services: Services,\n request: string,\n resolved: string,\n importer: string\n): { handled: boolean; value: unknown } => {\n const { pluginOptions } = services.options;\n const importLoaders =\n pluginOptions.importLoaders === undefined\n ? defaultImportLoaders\n : { ...defaultImportLoaders, ...pluginOptions.importLoaders };\n\n const { query, hash } = parseRequest(request);\n if (!query) return { handled: false, value: undefined };\n\n const params = new URLSearchParams(query);\n const matchedKey = Array.from(params.keys()).find(\n (key) => importLoaders[key] !== undefined && importLoaders[key] !== false\n );\n\n if (!matchedKey) return { handled: false, value: undefined };\n\n const loader = importLoaders[matchedKey];\n\n const filename = stripQueryAndHash(resolved);\n const importerFilename = stripQueryAndHash(importer);\n const importerDir = path.dirname(importerFilename);\n\n const toUrl = () => {\n const relative = path\n .relative(importerDir, filename)\n .replace(/\\\\/g, path.posix.sep);\n\n if (relative.startsWith('.') || path.isAbsolute(relative)) {\n return relative;\n }\n\n return `./${relative}`;\n };\n\n const readFile = () => fs.readFileSync(filename, 'utf-8');\n\n const context: ImportLoaderContext = {\n importer: importerFilename,\n request,\n resolved,\n filename,\n query,\n hash,\n emitWarning: (message) => emitWarning(services, message),\n readFile,\n toUrl,\n };\n\n if (loader === 'raw') {\n return { handled: true, value: context.readFile() };\n }\n\n if (loader === 'url') {\n return { handled: true, value: context.toUrl() };\n }\n\n if (typeof loader === 'function') {\n return { handled: true, value: loader(context) };\n }\n\n return { handled: false, value: undefined };\n};\n\nconst hashContent = (content: string): string =>\n createHash('sha256').update(content).digest('hex');\n\nconst isTypeOnlyImport = (statement: ModuleStatement): boolean => {\n if (statement.type !== 'ImportDeclaration') {\n return false;\n }\n\n if (statement.importKind === 'type') {\n return true;\n }\n\n if (statement.specifiers.length === 0) {\n return false;\n }\n\n return statement.specifiers.every(\n (specifier) =>\n specifier.type === 'ImportSpecifier' && specifier.importKind === 'type'\n );\n};\n\nconst isTypeOnlyExport = (statement: ModuleStatement): boolean =>\n statement.exportKind === 'type';\n\nconst getModuleExportName = (node: ModuleNameNode): string =>\n node.type === 'Identifier' ? node.name : node.value;\n\nconst getImportSpecifierName = (specifier: ModuleSpecifierNode): string =>\n getModuleExportName(specifier.imported);\n\nconst buildDirectBarrelProxy = (\n services: Services,\n id: string,\n only: string[]\n): PreparedModule | null => {\n const requested = only.filter((key) => !isEvalOnlyKey(key));\n if (requested.length === 0 || requested.includes('*')) {\n return null;\n }\n\n const loadedAndParsed = services.loadAndParseFn(\n services,\n id,\n undefined,\n services.log\n );\n\n if (\n loadedAndParsed.evaluator === 'ignored' ||\n loadedAndParsed.ast === undefined\n ) {\n return null;\n }\n\n if (loadedAndParsed.evaluator === oxcShaker) {\n return buildDirectOxcBarrelProxy(id, loadedAndParsed.code, only);\n }\n\n const importedBindings = new Map<string, DirectBarrelBinding>();\n const exportedBindings = new Map<string, DirectBarrelBinding>();\n const ast = loadedAndParsed.ast as unknown as ParsedModuleAst;\n\n for (const statement of ast.program.body) {\n if (statement.type === 'ImportDeclaration') {\n if (isTypeOnlyImport(statement)) {\n continue;\n }\n\n if (statement.specifiers.length === 0) {\n return null;\n }\n\n for (const specifier of statement.specifiers) {\n if (\n specifier.type === 'ImportSpecifier' &&\n specifier.importKind === 'type'\n ) {\n continue;\n }\n\n if (specifier.type === 'ImportSpecifier') {\n importedBindings.set(specifier.local.name, {\n kind: 'named',\n imported: getImportSpecifierName(specifier),\n source: statement.source.value,\n });\n continue;\n }\n\n if (specifier.type === 'ImportDefaultSpecifier') {\n importedBindings.set(specifier.local.name, {\n kind: 'named',\n imported: 'default',\n source: statement.source.value,\n });\n continue;\n }\n\n importedBindings.set(specifier.local.name, {\n kind: 'namespace',\n source: statement.source.value,\n });\n }\n\n continue;\n }\n\n if (statement.type === 'ExportNamedDeclaration') {\n if (isTypeOnlyExport(statement)) {\n continue;\n }\n\n if (statement.source) {\n for (const specifier of statement.specifiers) {\n if (specifier.type === 'ExportSpecifier') {\n if (specifier.exportKind === 'type') {\n continue;\n }\n\n exportedBindings.set(getModuleExportName(specifier.exported), {\n kind: 'named',\n imported: getModuleExportName(specifier.local),\n source: statement.source.value,\n });\n continue;\n }\n\n if (specifier.type === 'ExportDefaultSpecifier') {\n exportedBindings.set(getModuleExportName(specifier.exported), {\n kind: 'named',\n imported: 'default',\n source: statement.source.value,\n });\n continue;\n }\n\n if (specifier.type === 'ExportNamespaceSpecifier') {\n exportedBindings.set(getModuleExportName(specifier.exported), {\n kind: 'namespace',\n source: statement.source.value,\n });\n continue;\n }\n\n return null;\n }\n\n continue;\n }\n\n if (statement.declaration) {\n return null;\n }\n\n for (const specifier of statement.specifiers) {\n if (\n specifier.type !== 'ExportSpecifier' ||\n specifier.exportKind === 'type'\n ) {\n return null;\n }\n\n if (specifier.local.type !== 'Identifier') {\n return null;\n }\n\n const binding = importedBindings.get(specifier.local.name);\n if (!binding) {\n return null;\n }\n\n exportedBindings.set(getModuleExportName(specifier.exported), binding);\n }\n\n continue;\n }\n\n if (statement.type === 'ExportDefaultDeclaration') {\n if (statement.declaration.type !== 'Identifier') {\n return null;\n }\n\n const binding = importedBindings.get(statement.declaration.name);\n if (!binding || binding.kind !== 'named') {\n return null;\n }\n\n exportedBindings.set('default', binding);\n continue;\n }\n\n if (\n statement.type === 'EmptyStatement' ||\n statement.type === 'TSDeclareFunction' ||\n statement.type === 'TSInterfaceDeclaration' ||\n statement.type === 'TSTypeAliasDeclaration'\n ) {\n continue;\n }\n\n return null;\n }\n\n const imports = new Map<string, string[]>();\n const lines: string[] = [];\n let namespaceIdx = 0;\n\n const addImport = (source: string, imported: string) => {\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n const bucket = imports.get(source)!;\n if (!bucket.includes(imported)) {\n bucket.push(imported);\n }\n };\n\n for (const exported of requested) {\n const binding = exportedBindings.get(exported);\n if (!binding) {\n return null;\n }\n\n if (binding.kind === 'namespace') {\n if (exported === 'default' || !IDENTIFIER_RE.test(exported)) {\n return null;\n }\n\n const local = `__wyw_ns_${namespaceIdx++}`;\n lines.push(\n `import * as ${local} from ${JSON.stringify(binding.source)};`\n );\n lines.push(`export { ${local} as ${exported} };`);\n addImport(binding.source, '*');\n continue;\n }\n\n if (\n binding.imported !== 'default' &&\n !IDENTIFIER_RE.test(binding.imported)\n ) {\n return null;\n }\n\n if (exported !== 'default' && !IDENTIFIER_RE.test(exported)) {\n return null;\n }\n\n const imported =\n binding.imported === 'default' ? 'default' : binding.imported;\n const exportClause =\n exported === 'default'\n ? `${imported} as default`\n : imported === exported\n ? imported\n : `${imported} as ${exported}`;\n\n lines.push(\n `export { ${exportClause} } from ${JSON.stringify(binding.source)};`\n );\n addImport(binding.source, binding.imported);\n }\n\n if (lines.length === 0) {\n return null;\n }\n\n return {\n code: `${lines.join('\\n')}\\n`,\n imports,\n only,\n };\n};\n\nconst buildDirectOxcBarrelProxy = (\n id: string,\n code: string,\n only: string[]\n): PreparedModule | null => {\n const requested = only.filter((key) => !isEvalOnlyKey(key));\n const analyzed = analyzeOxcBarrelFile(code, id);\n if (!('reexports' in analyzed)) {\n return null;\n }\n\n const imports = new Map<string, string[]>();\n const lines: string[] = [];\n let namespaceIdx = 0;\n\n const addImport = (source: string, imported: string) => {\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n const bucket = imports.get(source)!;\n if (!bucket.includes(imported)) {\n bucket.push(imported);\n }\n };\n\n for (const exported of requested) {\n const binding = analyzed.reexports.find(\n (reexport) => reexport.exported === exported\n );\n if (!binding) {\n return null;\n }\n\n if (binding.kind === 'namespace') {\n if (exported === 'default' || !IDENTIFIER_RE.test(exported)) {\n return null;\n }\n\n const local = `__wyw_ns_${namespaceIdx++}`;\n lines.push(\n `import * as ${local} from ${JSON.stringify(binding.source)};`\n );\n lines.push(`export { ${local} as ${exported} };`);\n addImport(binding.source, '*');\n continue;\n }\n\n if (\n binding.imported !== 'default' &&\n !IDENTIFIER_RE.test(binding.imported)\n ) {\n return null;\n }\n\n if (exported !== 'default' && !IDENTIFIER_RE.test(exported)) {\n return null;\n }\n\n const imported =\n binding.imported === 'default' ? 'default' : binding.imported;\n const exportClause =\n exported === 'default'\n ? `${imported} as default`\n : imported === exported\n ? imported\n : `${imported} as ${exported}`;\n\n lines.push(\n `export { ${exportClause} } from ${JSON.stringify(binding.source)};`\n );\n addImport(binding.source, binding.imported);\n }\n\n if (lines.length === 0) {\n return null;\n }\n\n return {\n code: `${lines.join('\\n')}\\n`,\n imports,\n only,\n };\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst canonicalizeForHash = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map((item) => canonicalizeForHash(item));\n }\n\n if (isPlainObject(value)) {\n return Object.fromEntries(\n Object.keys(value)\n .sort()\n .map((key) => [key, canonicalizeForHash(value[key])])\n );\n }\n\n return value;\n};\n\nconst getInitPayloadKey = (payload: EvalRunnerInitPayload): string =>\n createHash('sha256')\n .update(JSON.stringify(canonicalizeForHash(payload)))\n .digest('hex');\n\n// Hash everything in the init payload that affects whether the runner needs\n// a fresh INIT — i.e. everything except `entrypoint` (which only affects\n// __filename/__dirname rebinding, not context reuse). The broker memoizes\n// this per-services so we replace per-evaluate SHA-256 of the full payload\n// with one SHA-256 of the stable bits + a cheap string concat per\n// entrypoint.\nconst getStableInitPayloadHash = (\n payload: EvalRunnerInitPayload\n): string => {\n const { entrypoint: _entrypoint, ...stable } = payload;\n return createHash('sha256')\n .update(JSON.stringify(canonicalizeForHash(stable)))\n .digest('hex');\n};\n\n// Memoize encodeGlobals on input reference. The user's globals object is\n// stable across a build, so we can encode it once instead of per evaluate.\n// If the input ref changes, fall through to a fresh encode (and reset the\n// cache).\nconst encodeGlobalsMemo = new WeakMap<object, Record<string, unknown>>();\nconst encodeGlobalsCached = (input: unknown): Record<string, unknown> => {\n if (input !== null && typeof input === 'object') {\n const obj = input as object;\n const cached = encodeGlobalsMemo.get(obj);\n if (cached) return cached;\n const encoded = encodeGlobals(input) as Record<string, unknown>;\n encodeGlobalsMemo.set(obj, encoded);\n return encoded;\n }\n return encodeGlobals(input) as Record<string, unknown>;\n};\n\nconst formatLoaderResult = (code: string, loader?: string | null) => {\n if (loader === 'json') {\n return `export default ${JSON.stringify(JSON.parse(code))};`;\n }\n if (loader === 'raw' || loader === 'text') {\n return `export default ${JSON.stringify(code)};`;\n }\n return code;\n};\n\nconst toSerializedError = (error: unknown) => {\n const err = error instanceof Error ? error : new Error(String(error));\n return {\n message: err.message,\n name: err.name,\n stack: err.stack,\n };\n};\n\nexport class EvalBroker {\n private runner: ChildProcessWithoutNullStreams | null = null;\n\n private runnerInputQueue: WriteQueue | null = null;\n\n private runnerReady: Promise<void> | null = null;\n\n private lastInitKey: string | null = null;\n\n private lastHappyDomEnabled = false;\n\n private evalQueue: Promise<void> = Promise.resolve();\n\n private readonly pending = new Map<string, PendingRequest>();\n\n private nextId = 0;\n\n private readonly resolveCache = new LruCache<string, ResolveCacheEntry>(\n RESOLVE_CACHE_SIZE\n );\n\n private readonly resolveInFlight = new Map<\n string,\n Promise<ResolveCacheEntry>\n >();\n\n private readonly loadCache = new LruCache<string, PreparedCacheEntry>(\n LOAD_CACHE_SIZE\n );\n\n private readonly loadInFlight = new Map<\n string,\n Promise<PreparedCacheEntry>\n >();\n\n private readonly importsByModule = new Map<string, Map<string, string[]>>();\n\n private readonly onlyByModule = new Map<string, string[]>();\n\n private readonly runtimeDependenciesByModule = new Map<string, Set<string>>();\n\n private readonly emittedDependencies = new Set<string>();\n\n // Mirrors the runner's view: for each module id, the (hash, mergedOnly) of\n // the most recent LoadResult we shipped with non-empty `code`. Subsequent\n // loads with a matching hash and a subset `only` skip the code transmission\n // (and the eval dump) — the runner's hash-match branch returns its cached\n // SourceTextModule. Cleared whenever the runner is killed/respawned so the\n // mirror cannot drift from the runner's actual moduleCache.\n private readonly lastSentLoadByModule = new Map<\n string,\n { hash: string; only: string[] }\n >();\n\n // Batch queue: concurrent evaluate() callers (e.g. parallel webpack-loader\n // transform() invocations) pile up here within one event-loop turn, then a\n // microtask flushes them as a single sequential runner pass. Each call\n // still gets its own resolved Promise; this only collapses the per-call\n // evalQueue chain + state-clear churn.\n private pendingEvals: PendingEval[] = [];\n\n private evalFlushScheduled = false;\n\n // Cached stable init payload hash. Keyed on the refs that feed the stable\n // bits (pluginOptions.eval and pluginOptions itself). Any reference change\n // invalidates the cache. The full per-entrypoint init key is\n // `${stableHash}::${entrypoint.name}` — cheap string concat instead of\n // re-canonicalizing+stringifying+SHA-256ing the whole payload per call.\n private stableInitHashCache: {\n pluginOptionsRef: unknown;\n evalOptionsRef: unknown;\n featuresRef: FeatureFlags<'happyDOM'>;\n rootRef: string | undefined;\n hash: string;\n } | null = null;\n\n private evalSeq = 0;\n\n private happyDomDisabled = false;\n\n private happyDomDisableWarned = false;\n\n private activeResolveRootId: string | null = null;\n\n private currentServices: Services;\n\n constructor(\n private readonly services: Services,\n private readonly asyncResolve: (\n what: string,\n importer: string,\n stack: string[]\n ) => Promise<string | null>\n ) {\n this.currentServices = services;\n }\n\n private ensureImportsMapping(\n id: string,\n imports: Map<string, string[]> | null | undefined\n ) {\n if (!imports || imports.size === 0) {\n if (!this.importsByModule.has(id)) {\n this.importsByModule.set(id, new Map());\n }\n return;\n }\n\n const existing = this.importsByModule.get(id);\n if (!existing || existing.size === 0) {\n this.importsByModule.set(id, imports);\n return;\n }\n\n // Merge: widen each specifier's import list rather than replacing.\n // Different variants of the same module may import different subsets\n // from the same dependency. The widest set must be preserved so that\n // any still-linking variant can resolve all its bindings.\n for (const [specifier, keys] of imports) {\n const existingKeys = existing.get(specifier);\n if (!existingKeys) {\n existing.set(specifier, keys);\n } else {\n existing.set(specifier, mergeOnly(existingKeys, keys));\n }\n }\n }\n\n private getImportOnly(\n importerId: string | null | undefined,\n specifier: string\n ): string[] {\n const importsOnly = importerId\n ? this.importsByModule.get(importerId)?.get(specifier)\n : undefined;\n const importerOnly = importerId\n ? this.onlyByModule.get(importerId) ?? ['*']\n : ['*'];\n return importerOnly.includes('__wywPreval')\n ? mergeOnly(importsOnly ?? ['*'], ['__wywPreval'])\n : importsOnly ?? ['*'];\n }\n\n private getLoadRequestOnly(\n id: string,\n importerId: string | null | undefined,\n request: string | null | undefined\n ): string[] | null {\n if (!request || !importerId || importerId === id) {\n return null;\n }\n\n const imports = this.importsByModule.get(importerId);\n if (!imports?.has(request)) {\n return null;\n }\n\n const { root } = this.services.options;\n const keyInfo = toImportKey({\n source: request,\n resolved: id,\n root,\n });\n const override = getImportOverride(\n this.services.options.pluginOptions.importOverrides,\n keyInfo.key\n );\n let nextOnly = applyImportOverrideToOnly(\n this.getImportOnly(importerId, request),\n override\n );\n const cached = this.services.cache.get('entrypoints', id) as\n | CachedEntrypointLike\n | undefined;\n if (\n nextOnly.includes('__wywPreval') &&\n cached?.evaluated &&\n !cached.ignored &&\n !hasCachedWywPrevalExport(this.services, id, cached)\n ) {\n nextOnly = nextOnly.filter((item) => item !== '__wywPreval');\n }\n\n return nextOnly;\n }\n\n public async evaluate(\n entrypoint: Entrypoint,\n services?: Services\n ): Promise<EvaluateResult> {\n return new Promise<EvaluateResult>((resolve, reject) => {\n this.pendingEvals.push({ entrypoint, services, resolve, reject });\n this.scheduleEvalFlush();\n });\n }\n\n private scheduleEvalFlush() {\n if (this.evalFlushScheduled) return;\n this.evalFlushScheduled = true;\n queueMicrotask(() => {\n this.evalFlushScheduled = false;\n if (this.pendingEvals.length === 0) return;\n const batch = this.pendingEvals;\n this.pendingEvals = [];\n this.evalQueue = this.evalQueue.then(() => this.runEvalBatch(batch));\n });\n }\n\n private async runEvalBatch(batch: PendingEval[]): Promise<void> {\n try {\n await this.ensureRunner();\n } catch (error) {\n for (const member of batch) member.reject(error);\n return;\n }\n for (const member of batch) {\n try {\n const result = await this.runOneEntrypoint(\n member.entrypoint,\n member.services\n );\n member.resolve(result);\n } catch (error) {\n member.reject(error);\n }\n }\n }\n\n private async runOneEntrypoint(\n entrypoint: Entrypoint,\n services: Services | undefined\n ): Promise<EvaluateResult> {\n const activeServices = services ?? this.currentServices;\n const resolveRootId = getEntrypointResolveRoot(entrypoint);\n this.currentServices = activeServices;\n this.activeResolveRootId = resolveRootId;\n this.resetPerEntrypointState(entrypoint);\n this.evalSeq += 1;\n\n if (debugEvalDir) {\n debugAction({\n type: 'eval:start',\n evalSeq: this.evalSeq,\n entrypoint: entrypoint.name,\n ts: performance.now(),\n });\n }\n\n try {\n await this.initRunner(entrypoint);\n\n const payload = await this.request<EvalResultPayload>(\n 'EVAL',\n { id: entrypoint.name },\n EVAL_TIMEOUT_MS\n );\n\n if (debugEvalDir) {\n debugAction({\n type: 'eval:finish',\n evalSeq: this.evalSeq,\n entrypoint: entrypoint.name,\n hasValues: Boolean(payload.values),\n ts: performance.now(),\n });\n }\n\n if (payload.modules) {\n this.applyModuleExports(payload.modules);\n }\n\n if (!payload.values) {\n return { values: null, dependencies: [] };\n }\n\n const values = new Map<string, unknown>();\n Object.entries(payload.values).forEach(([key, serialized]) => {\n values.set(key, deserializeValue(serialized));\n });\n\n return {\n values,\n dependencies: this.collectEntrypointDependencies(entrypoint.name),\n };\n } finally {\n if (this.activeResolveRootId === resolveRootId) {\n this.activeResolveRootId = null;\n }\n }\n }\n\n private resetPerEntrypointState(entrypoint: Entrypoint) {\n this.runtimeDependenciesByModule.clear();\n this.emittedDependencies.clear();\n this.importsByModule.clear();\n this.onlyByModule.clear();\n this.resolveCache.clear();\n this.resolveInFlight.clear();\n this.onlyByModule.set(entrypoint.name, ['__wywPreval']);\n }\n\n private applyModuleExports(\n modules: Record<string, Record<string, SerializedValue>>\n ) {\n Object.entries(modules).forEach(([id, serializedExports]) => {\n if (!serializedExports || Object.keys(serializedExports).length === 0) {\n return;\n }\n\n const cached = this.services.cache.get('entrypoints', id);\n if (!cached || cached.ignored) {\n return;\n }\n\n const existingEvaluatedOnly = cached.evaluatedOnly ?? [];\n const target =\n cached.evaluated || !('createEvaluated' in cached)\n ? cached\n : cached.createEvaluated();\n\n const exportsProxy = target.exports;\n Object.entries(serializedExports).forEach(([key, serialized]) => {\n exportsProxy[key] = deserializeValue(serialized);\n });\n\n const knownExports = collectKnownExportNames(this.services, id, target);\n const serializedKeys = Object.keys(serializedExports);\n const coversAllKnownExports =\n Array.isArray(knownExports) &&\n knownExports.filter((key) => !isEvalOnlyKey(key)).length > 0 &&\n knownExports\n .filter((key) => !isEvalOnlyKey(key))\n .every((key) => serializedKeys.includes(key));\n const coversModule = coversAllKnownExports;\n const merged = mergeOnly(\n existingEvaluatedOnly,\n coversModule ? ['*'] : serializedKeys\n );\n if (target.evaluatedOnly) {\n target.evaluatedOnly.splice(0, target.evaluatedOnly.length, ...merged);\n }\n\n this.services.cache.add('entrypoints', id, target);\n });\n }\n\n public dispose() {\n if (this.runner) {\n this.runner.removeAllListeners();\n this.runner.kill();\n this.runner = null;\n this.runnerReady = null;\n this.runnerInputQueue = null;\n }\n this.lastInitKey = null;\n this.lastHappyDomEnabled = false;\n this.lastSentLoadByModule.clear();\n this.stableInitHashCache = null;\n flushDebugStreams();\n }\n\n private createRunnerProcess(): ChildProcessWithoutNullStreams {\n const runnerPath = buildRunnerPath();\n const nodeBinary =\n process.env.WYW_NODE_BINARY ||\n (process.execPath.includes('bun') ? 'node' : process.execPath);\n\n const runner = spawn(\n nodeBinary,\n ['--experimental-vm-modules', runnerPath],\n {\n stdio: ['pipe', 'pipe', 'pipe'],\n cwd: this.services.options.root ?? process.cwd(),\n env: {\n ...process.env,\n WYW_EVAL_RUNNER: '1',\n NODE_NO_WARNINGS: '1',\n },\n }\n );\n\n runner.stdout.setEncoding('utf8');\n\n return runner;\n }\n\n private attachRunnerListeners(runner: ChildProcessWithoutNullStreams) {\n runner.stdout.on('data', (chunk) => this.onData(String(chunk)));\n runner.stderr.on('data', (chunk: Buffer) => {\n this.handleRunnerStderr(chunk);\n });\n runner.on('exit', (code, signal) => {\n if (this.runner !== runner) {\n return;\n }\n const reason = `Eval runner exited (${code ?? 'null'} / ${\n signal ?? 'null'\n })`;\n this.rejectAllPending(new Error(reason));\n this.runner = null;\n this.runnerInputQueue = null;\n this.runnerReady = null;\n this.lastInitKey = null;\n this.lastHappyDomEnabled = false;\n this.lastSentLoadByModule.clear();\n });\n }\n\n private async ensureRunner() {\n if (this.runnerReady) {\n await this.runnerReady;\n return;\n }\n\n this.runner = this.createRunnerProcess();\n this.runnerInputQueue = createWriteQueue(\n this.runner.stdin,\n 'eval runner stdin'\n );\n this.attachRunnerListeners(this.runner);\n this.runnerReady = Promise.resolve();\n await this.runnerReady;\n }\n\n private async initIsolatedRunner(\n payload: EvalRunnerInitPayload,\n timeoutMs: number\n ): Promise<ChildProcessWithoutNullStreams> {\n const runner = this.createRunnerProcess();\n const requestId = `candidate-init-${++this.nextId}`;\n let buffer = '';\n\n return new Promise<ChildProcessWithoutNullStreams>((resolve, reject) => {\n let settled = false;\n\n const cleanup = () => {\n runner.stdout.off('data', onStdout);\n runner.stderr.off('data', onStderr);\n runner.off('exit', onExit);\n };\n\n const finalizeResolve = (value: ChildProcessWithoutNullStreams) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeout);\n cleanup();\n resolve(value);\n };\n\n const finalizeReject = (\n value: Error | { message: string; stack?: string }\n ) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeout);\n cleanup();\n reject(value);\n };\n\n const onStderr = (chunk: Buffer) => {\n this.handleRunnerStderr(chunk);\n };\n\n const onExit = (code: number | null, signal: NodeJS.Signals | null) => {\n finalizeReject(\n new Error(\n `Eval runner exited during init (${code ?? 'null'} / ${\n signal ?? 'null'\n })`\n )\n );\n };\n\n const onStdout = (chunk: string | Buffer) => {\n const next = `${buffer}${chunk.toString()}`;\n const lines = next.split('\\n');\n buffer = lines.pop() ?? '';\n\n lines.forEach((line) => {\n if (!line.trim()) return;\n\n let message: RunnerToMainMessage;\n try {\n message = JSON.parse(line);\n } catch {\n emitWarning(\n this.services,\n `[wyw-eval-runner] Failed to parse message: ${line}`\n );\n return;\n }\n\n if (message.type === 'WARN') {\n this.handleWarn(message.payload);\n return;\n }\n\n if (message.type !== 'INIT_ACK' || message.id !== requestId) {\n return;\n }\n\n if (message.error) {\n runner.kill();\n finalizeReject(message.error);\n return;\n }\n\n finalizeResolve(runner);\n });\n };\n\n const timeout = setTimeout(() => {\n const error = new Error(`[wyw-in-js] Eval runner timed out for INIT`);\n (error as { code?: string }).code = 'WYW_EVAL_TIMEOUT';\n runner.kill();\n finalizeReject(error);\n }, timeoutMs);\n\n runner.stdout.on('data', onStdout);\n runner.stderr.on('data', onStderr);\n runner.on('exit', onExit);\n\n const message: MainToRunnerMessage = {\n type: 'INIT',\n id: requestId,\n payload,\n };\n writeToStream(\n runner.stdin,\n `${JSON.stringify(message)}\\n`,\n 'eval runner stdin'\n ).catch((error) => {\n runner.kill();\n finalizeReject(\n error instanceof Error ? error : new Error(String(error))\n );\n });\n });\n }\n\n private replaceRunner(nextRunner: ChildProcessWithoutNullStreams) {\n if (this.runner) {\n this.runner.removeAllListeners();\n this.runner.kill();\n }\n\n this.runner = nextRunner;\n this.runnerInputQueue = createWriteQueue(\n nextRunner.stdin,\n 'eval runner stdin'\n );\n this.attachRunnerListeners(nextRunner);\n this.runnerReady = Promise.resolve();\n // New process ⇒ runner's moduleCache/moduleHashes are empty, so our mirror\n // of \"what we already shipped\" is stale.\n this.lastSentLoadByModule.clear();\n }\n\n private getStableInitHash(\n services: Services,\n features: FeatureFlags<'happyDOM'>\n ): string {\n const pluginOptionsRef = services.options.pluginOptions;\n const evalOptionsRef = pluginOptionsRef.eval;\n const rootRef = services.options.root;\n if (\n this.stableInitHashCache !== null &&\n this.stableInitHashCache.pluginOptionsRef === pluginOptionsRef &&\n this.stableInitHashCache.evalOptionsRef === evalOptionsRef &&\n this.stableInitHashCache.featuresRef === features &&\n this.stableInitHashCache.rootRef === rootRef\n ) {\n return this.stableInitHashCache.hash;\n }\n // Build a sample payload (entrypoint name doesn't affect stable hash; we\n // pass any name and strip it inside getStableInitPayloadHash).\n // encodeGlobals is memoized so this is the only place it actually runs\n // per config change.\n const samplePayload = buildRunnerInitPayload(\n services,\n { name: '\\0stable-init-sample\\0' } as Entrypoint,\n features\n );\n samplePayload.reuseModules = true;\n const hash = getStableInitPayloadHash(samplePayload);\n this.stableInitHashCache = {\n pluginOptionsRef,\n evalOptionsRef,\n featuresRef: features,\n rootRef,\n hash,\n };\n return hash;\n }\n\n private async initRunner(entrypoint: Entrypoint) {\n const features = this.getRunnerFeatures();\n const stableHash = this.getStableInitHash(this.currentServices, features);\n const initKey = `${stableHash}::${entrypoint.name}`;\n if (this.lastInitKey === initKey) {\n return;\n }\n const nextHappyDomEnabled = isFeatureEnabled(\n features,\n 'happyDOM',\n entrypoint.name\n );\n const payload = buildRunnerInitPayload(this.services, entrypoint, features);\n payload.reuseModules = true;\n const timeoutMs = this.getInitTimeoutMs(entrypoint, features);\n\n if (\n this.runner &&\n this.lastInitKey !== null &&\n nextHappyDomEnabled &&\n !this.lastHappyDomEnabled &&\n !this.happyDomDisabled\n ) {\n try {\n const nextRunner = await this.initIsolatedRunner(payload, timeoutMs);\n this.replaceRunner(nextRunner);\n this.lastInitKey = initKey;\n this.lastHappyDomEnabled = true;\n return;\n } catch (error) {\n if (isEvalTimeoutError(error)) {\n this.happyDomDisabled = true;\n this.warnHappyDomDisabledOnce(timeoutMs);\n const fallbackFeatures = this.getRunnerFeatures();\n const fallbackPayload = buildRunnerInitPayload(\n this.services,\n entrypoint,\n fallbackFeatures\n );\n fallbackPayload.reuseModules = true;\n await this.request('INIT', fallbackPayload, INIT_TIMEOUT_MS);\n this.lastInitKey = `${this.getStableInitHash(this.currentServices, fallbackFeatures)}::${entrypoint.name}`;\n this.lastHappyDomEnabled = false;\n return;\n }\n\n throw error;\n }\n }\n\n try {\n await this.request('INIT', payload, timeoutMs);\n this.lastInitKey = initKey;\n this.lastHappyDomEnabled = nextHappyDomEnabled;\n } catch (error) {\n if (\n isEvalTimeoutError(error) &&\n !this.happyDomDisabled &&\n isFeatureEnabled(features, 'happyDOM', entrypoint.name)\n ) {\n this.happyDomDisabled = true;\n this.warnHappyDomDisabledOnce(timeoutMs);\n this.dispose();\n await this.ensureRunner();\n const fallbackFeatures = this.getRunnerFeatures();\n const fallbackPayload = buildRunnerInitPayload(\n this.services,\n entrypoint,\n fallbackFeatures\n );\n fallbackPayload.reuseModules = true;\n await this.request('INIT', fallbackPayload, INIT_TIMEOUT_MS);\n this.lastInitKey = getInitPayloadKey(fallbackPayload);\n this.lastHappyDomEnabled = false;\n return;\n }\n throw error;\n }\n }\n\n private getRunnerFeatures(): FeatureFlags<'happyDOM'> {\n const base = this.services.options.pluginOptions.features;\n if (!this.happyDomDisabled) return base;\n return { ...base, happyDOM: false };\n }\n\n private getInitTimeoutMs(\n entrypoint: Entrypoint,\n features: FeatureFlags<'happyDOM'>\n ) {\n if (\n this.happyDomDisabled ||\n !HAPPYDOM_INIT_TIMEOUT_MS ||\n HAPPYDOM_INIT_TIMEOUT_MS <= 0\n ) {\n return INIT_TIMEOUT_MS;\n }\n\n if (isFeatureEnabled(features, 'happyDOM', entrypoint.name)) {\n return Math.min(INIT_TIMEOUT_MS, HAPPYDOM_INIT_TIMEOUT_MS);\n }\n\n return INIT_TIMEOUT_MS;\n }\n\n private warnHappyDomDisabledOnce(timeoutMs: number) {\n if (this.happyDomDisableWarned) return;\n this.happyDomDisableWarned = true;\n emitWarning(\n this.services,\n [\n `[wyw-in-js] DOM emulation initialization exceeded ${timeoutMs}ms and will be disabled for this run.`,\n `WyW will continue without DOM emulation (as if features.happyDOM:false).`,\n ``,\n `To silence this warning: set features: { happyDOM: false }.`,\n `To restore DOM emulation, ensure \"happy-dom\" can be imported in the build-time runtime.`,\n `You can tune the timeout with WYW_EVAL_HAPPYDOM_INIT_TIMEOUT_MS.`,\n ].join('\\n')\n );\n }\n\n private onData(chunk: string) {\n const buffer = (this.onData as { buffer?: string }).buffer ?? '';\n const next = `${buffer}${chunk}`;\n const lines = next.split('\\n');\n (this.onData as { buffer?: string }).buffer = lines.pop() ?? '';\n lines.forEach((line) => {\n if (!line.trim()) return;\n let message: RunnerToMainMessage;\n try {\n message = JSON.parse(line);\n } catch (error) {\n emitWarning(\n this.services,\n `[wyw-eval-runner] Failed to parse message: ${line}`\n );\n return;\n }\n\n this.handleMessage(message);\n });\n }\n\n private handleMessage(message: RunnerToMainMessage) {\n switch (message.type) {\n case 'INIT_ACK':\n if (message.error) {\n this.rejectPending(message.id, message.error);\n this.runner?.kill();\n return;\n }\n if (message.modulesReset) {\n // Runner just cleared its moduleCache during this INIT (full\n // context rebuild or reuseModules:false). Drop our shipped-code\n // mirror so handleLoad ships fresh code on the next LOAD.\n this.lastSentLoadByModule.clear();\n }\n this.resolvePending(message.id, {});\n return;\n case 'EVAL_RESULT':\n if (message.error) {\n this.rejectPending(message.id, message.error);\n return;\n }\n this.resolvePending(message.id, message.payload);\n return;\n case 'RESOLVE':\n this.handleResolve(message.id, message.payload).catch((error) => {\n void this.sendMessage({\n type: 'RESOLVE_RESULT',\n id: message.id,\n payload: {\n resolvedId: null,\n error: toSerializedError(error),\n },\n }).catch((sendError) => this.handleSendMessageError(sendError));\n });\n return;\n case 'LOAD':\n this.handleLoad(message.id, message.payload).catch((error) => {\n void this.sendMessage({\n type: 'LOAD_RESULT',\n id: message.id,\n payload: {\n id: message.payload.id,\n error: toSerializedError(error),\n },\n }).catch((sendError) => this.handleSendMessageError(sendError));\n });\n return;\n case 'WARN':\n this.handleWarn(message.payload);\n break;\n default:\n break;\n }\n }\n\n private handleRunnerStderr(chunk: Buffer) {\n const evalConsole =\n this.currentServices.options.pluginOptions.evalConsole ?? 'pipe';\n if (evalConsole === 'warning') {\n const text = chunk.toString('utf8');\n for (const line of text.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed) {\n emitWarning(this.currentServices, trimmed);\n }\n }\n } else if (evalConsole === 'pipe') {\n process.stderr.write(chunk);\n }\n }\n\n private handleWarn(warning: EvalWarning) {\n if (warning.importer && warning.specifier) {\n this.trackRuntimeDependency(warning.importer, warning.specifier);\n }\n emitEvalWarning(this.currentServices, warning);\n }\n\n private async handleResolve(id: string, payload: ResolveRequestPayload) {\n const result = await this.resolveImport(payload);\n\n if (debugEvalDir) {\n debugAction({\n type: 'resolve',\n evalSeq: this.evalSeq,\n specifier: payload.specifier,\n importer: payload.importerId,\n kind: payload.kind,\n resolvedId: result.resolvedId ?? null,\n external: result.external ?? false,\n ts: performance.now(),\n });\n }\n\n await this.sendMessage({\n type: 'RESOLVE_RESULT',\n id,\n payload: {\n resolvedId: result.resolvedId,\n external: result.external,\n },\n });\n }\n\n private normalizeResolvedId(\n resolvedId: string,\n specifier: string,\n importerId?: string\n ): string {\n const stripped = stripQueryAndHash(resolvedId);\n if (!stripped) return resolvedId;\n if (path.extname(stripped)) return resolvedId;\n\n const isFileSpecifier =\n specifier.startsWith('.') || path.isAbsolute(specifier);\n if (!isFileSpecifier && !path.isAbsolute(stripped)) {\n return resolvedId;\n }\n\n let candidate = stripped;\n if (!path.isAbsolute(candidate)) {\n if (!importerId) {\n return resolvedId;\n }\n const importerFile = stripQueryAndHash(importerId);\n candidate = path.resolve(path.dirname(importerFile), candidate);\n }\n\n const suffix = resolvedId.slice(stripped.length);\n for (const ext of this.services.options.pluginOptions.extensions) {\n const fileCandidate = `${candidate}${ext}`;\n if (fs.existsSync(fileCandidate)) {\n return `${fileCandidate}${suffix}`;\n }\n\n const indexCandidate = path.join(candidate, `index${ext}`);\n if (fs.existsSync(indexCandidate)) {\n return `${indexCandidate}${suffix}`;\n }\n }\n\n if (importerId) {\n try {\n const importerFile = stripQueryAndHash(importerId);\n const resolved = DefaultModuleImplementation._resolveFilename(\n stripped,\n {\n id: importerFile,\n filename: importerFile,\n paths: DefaultModuleImplementation._nodeModulePaths(\n path.dirname(importerFile)\n ),\n }\n );\n if (resolved && resolved !== stripped) {\n return `${resolved}${suffix}`;\n }\n } catch {\n // ignore fallback failures\n }\n }\n\n return resolvedId;\n }\n\n private async resolveImport({\n specifier,\n importerId,\n kind,\n }: ResolveRequestPayload): Promise<ResolveResult> {\n return this.services.eventEmitter.action(\n 'eval:resolveImport',\n `${importerId}\\0${kind}\\0${specifier}`,\n importerId,\n () => this.resolveImportImpl({ specifier, importerId, kind })\n );\n }\n\n private getResolveStack(importerId: string): string[] {\n if (!this.activeResolveRootId || this.activeResolveRootId === importerId) {\n return [importerId];\n }\n\n return [importerId, this.activeResolveRootId];\n }\n\n private async resolveImportImpl({\n specifier,\n importerId,\n kind,\n }: ResolveRequestPayload): Promise<ResolveResult> {\n if (process.env.WYW_DEBUG_EVAL_RESOLVE) {\n // eslint-disable-next-line no-console\n console.warn('[wyw-eval:resolve]', { specifier, importerId, kind });\n }\n const key = `${kind}:${importerId}:${specifier}`;\n const evalOptions = getEvalOptions(this.services);\n const stack = this.getResolveStack(importerId);\n const importsOnly = this.importsByModule.get(importerId)?.get(specifier);\n const only = this.getImportOnly(importerId, specifier);\n if (process.env.WYW_DEBUG_EVAL_RESOLVE && !importsOnly) {\n // eslint-disable-next-line no-console\n console.warn('[wyw-eval:resolve:only-miss]', {\n specifier,\n importerId,\n kind,\n });\n }\n const strippedSpecifier = stripQueryAndHash(specifier);\n if (path.isAbsolute(strippedSpecifier)) {\n const normalized = this.normalizeResolvedId(\n specifier,\n specifier,\n importerId\n );\n const overridden = this.applyImportOverrides(\n {\n source: specifier,\n resolved: normalized,\n only,\n external: false,\n },\n importerId,\n stack\n );\n this.resolveCache.set(key, { resolvedId: normalized, external: false });\n return this.finalizeResolvedImport(importerId, specifier, overridden);\n }\n\n const cached = this.resolveCache.get(key);\n if (cached) {\n if (!cached.resolvedId) {\n return this.finalizeResolvedImport(importerId, specifier, {\n resolvedId: null,\n only: ['*'],\n });\n }\n\n const normalized = this.normalizeResolvedId(\n cached.resolvedId,\n specifier,\n importerId\n );\n const overridden = this.applyImportOverrides(\n {\n source: specifier,\n resolved: normalized,\n only,\n external: cached.external,\n },\n importerId,\n stack\n );\n if (cached.usedNodeFallback) {\n this.maybeWarnNodeFallback({\n importerId,\n specifier,\n resolvedId: normalized,\n kind,\n });\n }\n return this.finalizeResolvedImport(importerId, specifier, overridden);\n }\n\n const inFlight = this.resolveInFlight.get(key);\n if (inFlight) {\n const cachedResult = await inFlight;\n if (!cachedResult.resolvedId) {\n return this.finalizeResolvedImport(importerId, specifier, {\n resolvedId: null,\n only: ['*'],\n });\n }\n const normalized = this.normalizeResolvedId(\n cachedResult.resolvedId,\n specifier,\n importerId\n );\n const overridden = this.applyImportOverrides(\n {\n source: specifier,\n resolved: normalized,\n only,\n external: cachedResult.external,\n },\n importerId,\n stack\n );\n if (cachedResult.usedNodeFallback) {\n this.maybeWarnNodeFallback({\n importerId,\n specifier,\n resolvedId: normalized,\n kind,\n });\n }\n return this.finalizeResolvedImport(importerId, specifier, overridden);\n }\n\n const task: Promise<ResolveCacheEntry> = (async () => {\n if (evalOptions.customResolver) {\n const customResolved = await evalOptions.customResolver(\n specifier,\n importerId,\n kind\n );\n if (customResolved) {\n const normalized = this.normalizeResolvedId(\n customResolved.id,\n specifier,\n importerId\n );\n if (process.env.WYW_DEBUG_EVAL_RESOLVE) {\n // eslint-disable-next-line no-console\n console.warn('[wyw-eval:resolve:custom]', {\n specifier,\n importerId,\n resolved: customResolved.id,\n normalized,\n external: customResolved.external,\n });\n }\n return {\n resolvedId: normalized,\n external: customResolved.external,\n };\n }\n\n if (evalOptions.resolver === 'custom') {\n return { resolvedId: null };\n }\n }\n\n if (evalOptions.resolver !== 'node') {\n let resolved: string | null = null;\n try {\n resolved = await this.asyncResolve(specifier, importerId, stack);\n } catch {\n resolved = null;\n }\n if (resolved) {\n const normalized = this.normalizeResolvedId(\n resolved,\n specifier,\n importerId\n );\n if (process.env.WYW_DEBUG_EVAL_RESOLVE) {\n // eslint-disable-next-line no-console\n console.warn('[wyw-eval:resolve:async]', {\n specifier,\n importerId,\n resolved,\n normalized,\n });\n }\n return {\n resolvedId: normalized,\n };\n }\n }\n\n if (evalOptions.resolver === 'node' || evalOptions.require !== 'off') {\n const nodeResolved = this.resolveWithNodeFallback(\n specifier,\n importerId\n );\n if (process.env.WYW_DEBUG_EVAL_RESOLVE) {\n // eslint-disable-next-line no-console\n console.warn('[wyw-eval:resolve:node]', {\n specifier,\n importerId,\n resolved: nodeResolved.resolvedId,\n });\n }\n return {\n ...nodeResolved,\n usedNodeFallback: evalOptions.resolver !== 'node',\n };\n }\n\n if (process.env.WYW_DEBUG_EVAL_RESOLVE) {\n // eslint-disable-next-line no-console\n console.warn('[wyw-eval:resolve:none]', {\n specifier,\n importerId,\n });\n }\n return { resolvedId: null };\n })();\n\n this.resolveInFlight.set(key, task);\n\n try {\n const result = await task;\n this.resolveCache.set(key, result);\n\n if (!result.resolvedId) {\n return this.finalizeResolvedImport(importerId, specifier, {\n resolvedId: null,\n only: ['*'],\n });\n }\n\n const overridden = this.applyImportOverrides(\n {\n source: specifier,\n resolved: result.resolvedId,\n only,\n external: result.external,\n },\n importerId,\n stack\n );\n\n if (result.usedNodeFallback && result.resolvedId) {\n this.maybeWarnNodeFallback({\n importerId,\n specifier,\n resolvedId: result.resolvedId,\n kind,\n });\n }\n\n return this.finalizeResolvedImport(importerId, specifier, overridden);\n } finally {\n this.resolveInFlight.delete(key);\n }\n }\n\n private finalizeResolvedImport(\n importerId: string,\n specifier: string,\n result: ResolveResult\n ): ResolveResult {\n this.trackImporterDependency(\n importerId,\n specifier,\n result.resolvedId,\n result.only\n );\n this.emitDependency(importerId, specifier, result.resolvedId, result.only);\n return result;\n }\n\n private emitDependency(\n importerId: string,\n specifier: string,\n resolvedId: string | null,\n only: string[]\n ) {\n if (resolvedId === null) {\n return;\n }\n\n const key = `${importerId}\\0${specifier}\\0${resolvedId}\\0${only.join(',')}`;\n if (this.emittedDependencies.has(key)) {\n return;\n }\n this.emittedDependencies.add(key);\n\n this.services.eventEmitter.single({\n type: 'dependency',\n file: importerId,\n only,\n imports: [{ from: resolvedId, what: only }],\n fileIdx: getFileIdx(importerId),\n });\n }\n\n private trackRuntimeDependency(importerId: string, specifier: string) {\n if (isBuiltinSpecifier(specifier) || isVirtualSpecifier(specifier)) {\n return;\n }\n\n const dependencies =\n this.runtimeDependenciesByModule.get(importerId) ?? new Set<string>();\n dependencies.add(specifier);\n this.runtimeDependenciesByModule.set(importerId, dependencies);\n }\n\n private trackImporterDependency(\n importerId: string,\n source: string,\n resolved: string | null,\n only: string[]\n ) {\n const importerEntrypoint = this.services.cache.get(\n 'entrypoints',\n importerId\n ) as\n | {\n dependencies?: Map<\n string,\n {\n source: string;\n resolved: string | null;\n only: string[];\n }\n >;\n }\n | undefined;\n\n const dependencies = importerEntrypoint?.dependencies;\n if (!dependencies) return;\n\n if (resolved === null) {\n dependencies.delete(source);\n return;\n }\n\n const cached = dependencies.get(source);\n dependencies.set(source, {\n source,\n resolved,\n only: cached ? mergeOnly(cached.only, only) : [...only],\n });\n }\n\n private collectEntrypointDependencies(entrypointId: string): string[] {\n const collected = new Set(\n this.runtimeDependenciesByModule.get(entrypointId) ?? []\n );\n const cachedEntrypoint = this.services.cache.get(\n 'entrypoints',\n entrypointId\n ) as\n | {\n dependencies?: Map<\n string,\n {\n source: string;\n resolved: string | null;\n only: string[];\n }\n >;\n }\n | undefined;\n cachedEntrypoint?.dependencies?.forEach((dependency, specifier) => {\n if (\n dependency.resolved !== null &&\n !isBuiltinSpecifier(specifier) &&\n !isVirtualSpecifier(specifier)\n ) {\n collected.add(specifier);\n }\n });\n return Array.from(collected);\n }\n\n private applyImportOverrides(\n resolved: {\n source: string;\n resolved: string;\n only: string[];\n external?: boolean;\n },\n importerId: string,\n stack: string[]\n ): ResolveResult {\n const { root } = this.services.options;\n const keyInfo = toImportKey({\n source: resolved.source,\n resolved: resolved.resolved,\n root,\n });\n const override = getImportOverride(\n this.services.options.pluginOptions.importOverrides,\n keyInfo.key\n );\n\n let nextResolved = resolved.resolved;\n let nextExternal = resolved.external;\n if (override?.mock) {\n nextResolved = resolveMockSpecifier({\n mock: override.mock,\n importer: importerId,\n root,\n stack,\n });\n nextExternal = false;\n }\n\n let nextOnly = applyImportOverrideToOnly(resolved.only, override);\n const cached = this.services.cache.get('entrypoints', nextResolved) as\n | CachedEntrypointLike\n | undefined;\n if (\n nextOnly.includes('__wywPreval') &&\n cached?.evaluated &&\n !cached.ignored &&\n !hasCachedWywPrevalExport(this.services, nextResolved, cached)\n ) {\n nextOnly = nextOnly.filter((item) => item !== '__wywPreval');\n }\n const storedOnly = this.onlyByModule.get(nextResolved);\n this.onlyByModule.set(\n nextResolved,\n storedOnly ? mergeOnly(storedOnly, nextOnly) : nextOnly\n );\n return {\n resolvedId: nextResolved,\n external: nextExternal,\n only: nextOnly,\n };\n }\n\n private resolveWithNodeFallback(\n specifier: string,\n importerId: string\n ): ResolveCacheEntry {\n const extensions = DefaultModuleImplementation._extensions;\n const added: string[] = [];\n const { conditionNames } = this.services.options.pluginOptions;\n const conditions = conditionNames?.length\n ? expandConditions(conditionNames)\n : undefined;\n\n try {\n this.services.options.pluginOptions.extensions.forEach((ext) => {\n if (ext in extensions) return;\n extensions[ext] = NOOP;\n added.push(ext);\n });\n\n const filename = importerId;\n const strippedId = stripQueryAndHash(specifier);\n\n let resolved: string;\n try {\n resolved = resolveFilenameWithConditions(\n DefaultModuleImplementation,\n strippedId,\n {\n id: filename,\n filename,\n paths: DefaultModuleImplementation._nodeModulePaths(\n path.dirname(filename)\n ),\n },\n conditions\n );\n } catch (error) {\n throw new Error(\n [\n `[wyw-in-js] Node resolver failed during eval.`,\n ``,\n `importer: ${filename}`,\n `source: ${specifier}`,\n ``,\n `error: ${error instanceof Error ? error.message : String(error)}`,\n ].join('\\n')\n );\n }\n\n const isFileSpecifier =\n strippedId.startsWith('.') || path.isAbsolute(strippedId);\n\n if (\n isFileSpecifier &&\n path.extname(strippedId) === '' &&\n resolved.endsWith('.cjs') &&\n fs.existsSync(`${resolved.slice(0, -4)}.js`)\n ) {\n resolved = `${resolved.slice(0, -4)}.js`;\n }\n\n return {\n resolvedId: this.normalizeResolvedId(resolved, specifier, importerId),\n };\n } finally {\n added.forEach((ext) => delete extensions[ext]);\n }\n }\n\n private maybeWarnNodeFallback({\n importerId,\n specifier,\n resolvedId,\n kind,\n }: {\n importerId: string;\n specifier: string;\n resolvedId: string;\n kind: ResolveRequestPayload['kind'];\n }) {\n const evalOptions = getEvalOptions(this.services);\n const { root } = this.services.options;\n const keyInfo = toImportKey({\n source: specifier,\n resolved: resolvedId,\n root,\n });\n\n const override = getImportOverride(\n this.services.options.pluginOptions.importOverrides,\n keyInfo.key\n );\n\n if (override && override.unknown === undefined) {\n return;\n }\n\n const basePolicy: 'warn' | 'error' =\n evalOptions.require === 'warn-and-run' ? 'warn' : 'error';\n let policy = override?.unknown ?? basePolicy;\n if (evalOptions.require === 'off' && policy !== 'error') {\n policy = 'error';\n }\n\n if (policy === 'error') {\n throw new Error(\n [\n `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,\n ``,\n `importer: ${importerId}`,\n `source: ${specifier}`,\n `resolved: ${resolvedId}`,\n ``,\n `config key: ${keyInfo.key}`,\n `docs: https://wyw-in-js.dev/troubleshooting`,\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n\n const warnedUnknownImports = getWarnedUnknownImports(this.services);\n if (policy === 'warn' && !warnedUnknownImports.has(keyInfo.key)) {\n warnedUnknownImports.add(keyInfo.key);\n const warningMessage = [\n `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,\n ``,\n `importer: ${importerId}`,\n `source: ${specifier}`,\n `resolved: ${resolvedId}`,\n ``,\n `config key: ${keyInfo.key}`,\n `hint: add { importOverrides: { ${JSON.stringify(\n keyInfo.key\n )}: { unknown: 'allow' } } } to silence warnings, or use { mock } / { noShake: true } overrides.`,\n `docs: https://wyw-in-js.dev/troubleshooting`,\n ]\n .filter(Boolean)\n .join('\\n');\n\n emitEvalWarning(this.currentServices, {\n code: kind === 'require' ? 'require-fallback' : 'resolve-fallback',\n message: warningMessage,\n importer: importerId,\n specifier,\n resolved: resolvedId ?? null,\n callstack: [importerId],\n hint: `Use importOverrides or eval.require settings to avoid fallback.`,\n });\n }\n }\n\n private async handleLoad(id: string, payload: LoadRequestPayload) {\n const prepared = await this.loadModule(payload);\n\n // Decide once whether the runner already has this exact prepared variant.\n // The runner caches by id and short-circuits when the LoadResult hash\n // matches `moduleHashes.get(id)` (runner.js:1834). So when our prior\n // shipment under the same hash already covered the requested `only`,\n // re-shipping the code is pure waste — both over IPC and to the dump dir.\n const previouslySent = prepared.hash\n ? this.lastSentLoadByModule.get(payload.id)\n : undefined;\n // Runner stores by hash but classifies storage by `only` shape: wildcard\n // (`['*']`) ⇒ moduleCache, anything else ⇒ moduleVariants (runner.js\n // isFullModuleLoad / runner.js:1832-1842). Reusing across shapes would\n // hit the wrong map and miss. Require the same shape AND the prepared\n // `only` to be a subset of what we already shipped — same hash already\n // implies identical bytes.\n const sameStorageShape = Boolean(\n previouslySent &&\n isWildcardOnly(previouslySent.only) === isWildcardOnly(prepared.only)\n );\n const runnerHasCachedVariant = Boolean(\n prepared.hash &&\n previouslySent &&\n previouslySent.hash === prepared.hash &&\n sameStorageShape &&\n isSuperSet(previouslySent.only, prepared.only)\n );\n const shouldShipCode = Boolean(\n prepared.code && !prepared.exports && !runnerHasCachedVariant\n );\n\n if (debugEvalDir) {\n if (shouldShipCode) {\n dumpEvalCode(\n payload.id,\n prepared.code!,\n prepared.only,\n prepared.hash ? `cache:${prepared.hash}` : 'fresh',\n this.evalSeq\n );\n }\n\n debugAction({\n type: 'load',\n evalSeq: this.evalSeq,\n id: payload.id,\n importer: payload.importerId ?? null,\n only: prepared.only,\n hasCode: Boolean(prepared.code),\n hasExports: Boolean(prepared.exports),\n hash: prepared.hash ?? null,\n shipped: shouldShipCode,\n ts: performance.now(),\n });\n }\n\n await this.sendLoadResult(id, {\n id: payload.id,\n code: shouldShipCode ? prepared.code : '',\n map: null,\n hash: prepared.hash,\n only: prepared.only,\n exports: prepared.exports,\n });\n\n if (shouldShipCode && prepared.hash) {\n const merged =\n previouslySent?.hash === prepared.hash\n ? mergeOnly(previouslySent.only, prepared.only)\n : [...prepared.only];\n this.lastSentLoadByModule.set(payload.id, {\n hash: prepared.hash,\n only: merged,\n });\n }\n }\n\n private async loadModule({\n id,\n importerId,\n request,\n }: LoadRequestPayload): Promise<PreparedCacheEntry> {\n const actionEntrypoint = importerId ?? id;\n return this.services.eventEmitter.action(\n 'eval:loadModule',\n `${actionEntrypoint}\\0${id}`,\n actionEntrypoint,\n () => this.loadModuleImpl({ id, importerId, request })\n );\n }\n\n private async loadModuleImpl({\n id,\n importerId,\n request,\n }: LoadRequestPayload): Promise<PreparedCacheEntry> {\n let cached = this.loadCache.get(id);\n if (this.services.cache.consumeInvalidation(id)) {\n this.loadCache.delete(id);\n cached = undefined;\n }\n\n const loadRequestOnly = this.getLoadRequestOnly(id, importerId, request);\n if (loadRequestOnly) {\n const storedOnly = this.onlyByModule.get(id);\n this.onlyByModule.set(\n id,\n storedOnly ? mergeOnly(storedOnly, loadRequestOnly) : loadRequestOnly\n );\n this.trackImporterDependency(importerId!, request!, id, loadRequestOnly);\n this.emitDependency(importerId!, request!, id, loadRequestOnly);\n }\n\n let requiredOnly = this.mergeKnownDependencyOnly(id);\n\n // Merge the specific exports the importer needs from this module.\n // The broker's onlyByModule is populated by RESOLVE handlers, but\n // concurrent message processing can cause a LOAD to arrive before\n // all pending RESOLVEs are complete. Directly consulting the\n // importer's imports map ensures we never serve a module with\n // fewer exports than the requesting importer actually imports.\n if (importerId && request) {\n const importerImports = this.importsByModule.get(importerId);\n if (importerImports) {\n const specifierOnly = importerImports.get(request);\n if (specifierOnly && specifierOnly.length > 0) {\n requiredOnly = requiredOnly.includes('*')\n ? requiredOnly\n : mergeOnly(requiredOnly, specifierOnly);\n }\n }\n }\n const cachedEntrypoint = this.services.cache.get('entrypoints', id) as\n | {\n evaluated?: boolean;\n evaluatedOnly?: string[];\n exports?: Record<string | symbol, unknown>;\n ignored?: boolean;\n initialCode?: string;\n originalCode?: string;\n }\n | undefined;\n if (\n cachedEntrypoint &&\n cachedEntrypoint.evaluated &&\n !cachedEntrypoint.ignored &&\n cachedEntrypoint.exports &&\n !requiredOnly.includes('*') &&\n !requiredOnly.some(isEvalOnlyKey) &&\n isSuperSet(cachedEntrypoint.evaluatedOnly ?? [], requiredOnly)\n ) {\n const serializeOnly = getSerializableStaticImportKeys(\n this.services,\n id,\n cachedEntrypoint,\n requiredOnly,\n request,\n importerId\n );\n if (serializeOnly) {\n const serialized = serializeCachedExports(\n cachedEntrypoint.exports,\n serializeOnly\n );\n if (serialized) {\n const hash = hashContent(`exports:${JSON.stringify(serialized)}`);\n return {\n code: '',\n imports: null,\n only: serializeOnly,\n hash,\n exports: serialized,\n };\n }\n }\n }\n // prepareModuleOnDemand is deterministic given (id, requiredOnly): the\n // shaker output depends only on source bytes (invalidated via\n // consumeInvalidation when the file changes) and the requested `only`.\n // Side effects from __wywPreval happen at runtime in the runner, not at\n // preparation time — so caching prepared bytes is safe even for self-loads\n // with __wywPreval. This lets incremental rebuilds reuse the prepared\n // entrypoint when its source is unchanged; my IPC dedup mirror then\n // suppresses re-shipping to the runner.\n if (cached && isPreparedCacheHit(cached, requiredOnly)) {\n this.ensureImportsMapping(id, cached.imports);\n return cached;\n }\n\n const inflight = this.loadInFlight.get(id);\n if (inflight) {\n const result = await inflight;\n if (isPreparedCacheHit(result, requiredOnly)) {\n this.ensureImportsMapping(id, result.imports);\n return result;\n }\n }\n\n const slowImportWarningsEnabled = isWarningEnabled(\n process.env.WYW_WARN_SLOW_IMPORTS\n );\n const slowImportThresholdMs = slowImportWarningsEnabled\n ? getSlowImportThresholdMs()\n : 0;\n const warnedSlowImports = slowImportWarningsEnabled\n ? getWarnedSlowImports(this.services)\n : null;\n const shouldWarnSlowImport = Boolean(\n slowImportWarningsEnabled &&\n warnedSlowImports &&\n slowImportThresholdMs > 0 &&\n request &&\n importerId &&\n importerId !== id\n );\n const slowImportStartedAt = shouldWarnSlowImport ? performance.now() : 0;\n\n const task = (async () => {\n const evalOptions = getEvalOptions(this.services);\n\n if (evalOptions.customLoader) {\n const loaded = await evalOptions.customLoader(id);\n if (loaded) {\n const code = formatLoaderResult(loaded.code, loaded.loader);\n return {\n code,\n imports: null,\n only: requiredOnly,\n hash: hashContent(code),\n };\n }\n }\n\n if (request && importerId) {\n const loaded = loadByImportLoaders(\n this.services,\n request,\n id,\n importerId\n );\n if (loaded.handled) {\n const code = `export default ${JSON.stringify(loaded.value)};`;\n return {\n code,\n imports: null,\n only: requiredOnly,\n hash: hashContent(code),\n };\n }\n }\n\n const strippedId = stripQueryAndHash(id);\n const extension = path.extname(strippedId);\n if (extension === '.json') {\n const jsonSource = fs.readFileSync(strippedId, 'utf-8');\n const code = `export default ${JSON.stringify(\n JSON.parse(jsonSource)\n )};`;\n return {\n code,\n imports: null,\n only: requiredOnly,\n hash: hashContent(code),\n };\n }\n\n if (\n extension &&\n !this.services.options.pluginOptions.extensions.includes(extension)\n ) {\n const code = `export default ${JSON.stringify(id)};`;\n return {\n code,\n imports: null,\n only: requiredOnly,\n hash: hashContent(code),\n };\n }\n\n const directBarrelProxy = buildDirectBarrelProxy(\n this.services,\n id,\n requiredOnly\n );\n if (directBarrelProxy) {\n return {\n ...directBarrelProxy,\n hash: hashContent(directBarrelProxy.code),\n };\n }\n\n if (!requiredOnly.includes('*')) {\n const loadedAndParsed = this.services.loadAndParseFn(\n this.services,\n id,\n undefined,\n this.services.log\n );\n\n if (\n loadedAndParsed.evaluator !== 'ignored' &&\n loadedAndParsed.evaluator === oxcShaker &&\n isStaticallyEvaluatableModule(loadedAndParsed.code, id)\n ) {\n requiredOnly = ['*'];\n this.onlyByModule.set(id, requiredOnly);\n }\n }\n\n const prepareOnly =\n requiredOnly.includes('__wywPreval') || !cached\n ? requiredOnly\n : mergeOnly(cached.only, requiredOnly);\n const prepared = prepareModuleOnDemand(this.services, id, prepareOnly);\n\n this.ensureImportsMapping(id, prepared.imports);\n\n if (shouldWarnSlowImport && request && importerId) {\n const durationMs = performance.now() - slowImportStartedAt;\n if (durationMs >= slowImportThresholdMs) {\n const { root } = this.services.options;\n const resolvedKey = stripQueryAndHash(id);\n const { key: importKey } = toImportKey({\n source: request,\n resolved: resolvedKey,\n root,\n });\n const dedupeKey = `${importerId}::${importKey}`;\n if (warnedSlowImports && !warnedSlowImports.has(dedupeKey)) {\n warnedSlowImports.add(dedupeKey);\n const warning = [\n `[wyw-in-js] Slow import during prepare stage`,\n ``,\n `file: ${importerId}`,\n `import: ${request}`,\n `resolved: ${resolvedKey}`,\n `duration: ${durationMs.toFixed(1)}ms`,\n ``,\n `tip: if this import is runtime-only or heavy, mock it during evaluation via importOverrides:`,\n ` importOverrides: {`,\n ` '${importKey}': { mock: './path/to/mock' },`,\n ` }`,\n ``,\n `note: importOverrides affects only build-time evaluation (it does not change your bundler runtime behavior)`,\n ``,\n `note: configure threshold with WYW_WARN_SLOW_IMPORTS_MS (current: ${slowImportThresholdMs}ms)`,\n ].join('\\n');\n emitWarning(this.currentServices, warning);\n }\n }\n }\n\n const hash = hashContent(prepared.code);\n return { ...prepared, hash };\n })();\n\n this.loadInFlight.set(id, task);\n\n try {\n const result = await task;\n // Register imports for ALL code paths (barrel proxy, prepareModuleOnDemand,\n // custom loaders). Without this, the barrel proxy path skips\n // ensureImportsMapping, so getLoadRequestOnly can't determine what a barrel\n // module imports from its sub-dependencies.\n this.ensureImportsMapping(id, result.imports);\n this.loadCache.set(id, result);\n return result;\n } finally {\n this.loadInFlight.delete(id);\n }\n }\n\n private async sendLoadResult(\n id: string,\n payload: Omit<LoadResultPayload, 'chunkIndex' | 'chunkCount' | 'codeChunk'>\n ) {\n if (!payload.code) {\n await this.sendMessage({\n type: 'LOAD_RESULT',\n id,\n payload,\n });\n return;\n }\n\n const message: MainToRunnerMessage = {\n type: 'LOAD_RESULT',\n id,\n payload,\n };\n const serialized = JSON.stringify(message);\n if (serialized.length < MAX_MESSAGE_SIZE) {\n await this.sendMessage(message);\n return;\n }\n\n const { code } = payload;\n const chunkCount = Math.ceil(code.length / MAX_CHUNK_SIZE);\n for (let index = 0; index < chunkCount; index += 1) {\n const start = index * MAX_CHUNK_SIZE;\n const end = start + MAX_CHUNK_SIZE;\n const codeChunk = code.slice(start, end);\n const chunkPayload: LoadResultPayload = {\n id: payload.id,\n codeChunk,\n chunkIndex: index,\n chunkCount,\n };\n\n if (index === 0) {\n chunkPayload.map = payload.map;\n chunkPayload.hash = payload.hash;\n chunkPayload.only = payload.only;\n chunkPayload.exports = payload.exports;\n chunkPayload.error = payload.error;\n }\n\n await this.sendMessage({\n type: 'LOAD_RESULT',\n id,\n payload: chunkPayload,\n });\n }\n }\n\n private sendMessage(message: MainToRunnerMessage): Promise<void> {\n const payload = `${JSON.stringify(message)}\\n`;\n invariant(payload.length < MAX_MESSAGE_SIZE, 'Message too large');\n\n if (!this.runnerInputQueue) {\n return Promise.reject(new Error('Eval runner is not ready'));\n }\n\n return this.runnerInputQueue.write(payload);\n }\n\n private handleSendMessageError(error: unknown, id?: string) {\n const serialized =\n error instanceof Error\n ? { message: error.message, stack: error.stack }\n : { message: String(error) };\n\n if (id) {\n this.rejectPending(id, serialized);\n }\n\n this.runner?.kill();\n }\n\n private request<TPayload>(\n type: MainToRunnerMessage['type'],\n payload: unknown,\n timeoutMs: number = REQUEST_TIMEOUT_MS\n ): Promise<TPayload> {\n this.nextId += 1;\n const id = `${this.nextId}`;\n const message: MainToRunnerMessage = {\n type: type as MainToRunnerMessage['type'],\n id,\n payload: payload as never,\n } as MainToRunnerMessage;\n\n return new Promise<TPayload>((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.pending.delete(id);\n this.runner?.kill();\n const error = new Error(\n `[wyw-in-js] Eval runner timed out for ${type}`\n );\n (error as { code?: string }).code = 'WYW_EVAL_TIMEOUT';\n reject(error);\n }, timeoutMs);\n\n this.pending.set(id, {\n resolve: resolve as PendingRequest['resolve'],\n reject,\n timeout,\n });\n\n this.sendMessage(message).catch((error) =>\n this.handleSendMessageError(error, id)\n );\n });\n }\n\n private resolvePending(id: string, payload: unknown) {\n const pending = this.pending.get(id);\n if (!pending) return;\n clearTimeout(pending.timeout);\n this.pending.delete(id);\n pending.resolve(payload);\n }\n\n private rejectPending(\n id: string,\n error: {\n message: string;\n stack?: string;\n cause?: { message: string; stack?: string };\n }\n ) {\n const pending = this.pending.get(id);\n if (!pending) return;\n clearTimeout(pending.timeout);\n this.pending.delete(id);\n const cause = error.cause\n ? Object.assign(new Error(error.cause.message), {\n stack: error.cause.stack,\n })\n : undefined;\n const err = cause\n ? new Error(error.message, { cause })\n : new Error(error.message);\n if (error.stack) {\n err.stack = error.stack;\n }\n pending.reject(err);\n }\n\n private rejectAllPending(error: Error) {\n this.pending.forEach((pending) => {\n clearTimeout(pending.timeout);\n pending.reject(error);\n });\n this.pending.clear();\n }\n\n private mergeKnownDependencyOnly(id: string): string[] {\n const storedOnly = this.onlyByModule.get(id) ?? ['*'];\n if (storedOnly.includes('*')) {\n return storedOnly;\n }\n\n let mergedOnly = storedOnly;\n for (const cachedEntrypoint of this.services.cache.entrypoints.values() as Iterable<CachedDependencyOwner>) {\n const { dependencies } = cachedEntrypoint;\n if (!dependencies) {\n continue;\n }\n\n for (const dependency of dependencies.values()) {\n if (dependency.resolved !== id || !dependency.only) {\n continue;\n }\n\n mergedOnly = mergeOnly(mergedOnly, dependency.only);\n if (mergedOnly.includes('*')) {\n this.onlyByModule.set(id, mergedOnly);\n return mergedOnly;\n }\n }\n }\n\n this.onlyByModule.set(id, mergedOnly);\n return mergedOnly;\n }\n}\n\nconst evalBrokers = new WeakMap<\n Services['cache'],\n { key: string; broker: EvalBroker }\n>();\n\nexport const disposeEvalBroker = (cache: Services['cache']) => {\n const cached = evalBrokers.get(cache);\n if (!cached) return;\n cached.broker.dispose();\n evalBrokers.delete(cache);\n};\n\nexport const getEvalBroker = (\n services: Services,\n asyncResolve: (\n what: string,\n importer: string,\n stack: string[]\n ) => Promise<string | null>,\n cacheKey: string\n) => {\n const cached = evalBrokers.get(services.cache);\n if (cached && cached.key === cacheKey) return cached.broker;\n\n if (cached) {\n disposeEvalBroker(services.cache);\n }\n const broker = new EvalBroker(services, asyncResolve);\n evalBrokers.set(services.cache, { key: cacheKey, broker });\n return broker;\n};\n"],"file":"broker.js"}
|
package/esm/eval/lru.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export class LruCache {
|
|
2
|
+
maxSize;
|
|
3
|
+
map = new Map();
|
|
4
|
+
constructor(maxSize) {
|
|
5
|
+
this.maxSize = Math.max(1, maxSize);
|
|
6
|
+
}
|
|
7
|
+
get(key) {
|
|
8
|
+
const value = this.map.get(key);
|
|
9
|
+
if (value === undefined) return undefined;
|
|
10
|
+
this.map.delete(key);
|
|
11
|
+
this.map.set(key, value);
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
set(key, value) {
|
|
15
|
+
if (this.map.has(key)) {
|
|
16
|
+
this.map.delete(key);
|
|
17
|
+
}
|
|
18
|
+
this.map.set(key, value);
|
|
19
|
+
if (this.map.size > this.maxSize) {
|
|
20
|
+
const firstKey = this.map.keys().next().value;
|
|
21
|
+
if (firstKey !== undefined) {
|
|
22
|
+
this.map.delete(firstKey);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
has(key) {
|
|
27
|
+
return this.map.has(key);
|
|
28
|
+
}
|
|
29
|
+
delete(key) {
|
|
30
|
+
this.map.delete(key);
|
|
31
|
+
}
|
|
32
|
+
clear() {
|
|
33
|
+
this.map.clear();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=lru.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"AAAA,OAAO,MAAM,SAAe;CAC1B,AAAiB;CAEjB,AAAiB,MAAM,IAAI,KAAW;CAEtC,YAAY,SAAiB;AAC3B,OAAK,UAAU,KAAK,IAAI,GAAG,QAAQ;;CAGrC,AAAO,IAAI,KAAuB;EAChC,MAAM,QAAQ,KAAK,IAAI,IAAI,IAAI;AAC/B,MAAI,UAAU,UAAW,QAAO;AAEhC,OAAK,IAAI,OAAO,IAAI;AACpB,OAAK,IAAI,IAAI,KAAK,MAAM;AACxB,SAAO;;CAGT,AAAO,IAAI,KAAQ,OAAgB;AACjC,MAAI,KAAK,IAAI,IAAI,IAAI,EAAE;AACrB,QAAK,IAAI,OAAO,IAAI;;AAGtB,OAAK,IAAI,IAAI,KAAK,MAAM;AAExB,MAAI,KAAK,IAAI,OAAO,KAAK,SAAS;GAChC,MAAM,WAAW,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC;AACxC,OAAI,aAAa,WAAW;AAC1B,SAAK,IAAI,OAAO,SAAS;;;;CAK/B,AAAO,IAAI,KAAiB;AAC1B,SAAO,KAAK,IAAI,IAAI,IAAI;;CAG1B,AAAO,OAAO,KAAc;AAC1B,OAAK,IAAI,OAAO,IAAI;;CAGtB,AAAO,QAAc;AACnB,OAAK,IAAI,OAAO","names":[],"sources":["../../src/eval/lru.ts"],"version":3,"sourcesContent":["export class LruCache<K, V> {\n private readonly maxSize: number;\n\n private readonly map = new Map<K, V>();\n\n constructor(maxSize: number) {\n this.maxSize = Math.max(1, maxSize);\n }\n\n public get(key: K): V | undefined {\n const value = this.map.get(key);\n if (value === undefined) return undefined;\n\n this.map.delete(key);\n this.map.set(key, value);\n return value;\n }\n\n public set(key: K, value: V): void {\n if (this.map.has(key)) {\n this.map.delete(key);\n }\n\n this.map.set(key, value);\n\n if (this.map.size > this.maxSize) {\n const firstKey = this.map.keys().next().value as K | undefined;\n if (firstKey !== undefined) {\n this.map.delete(firstKey);\n }\n }\n }\n\n public has(key: K): boolean {\n return this.map.has(key);\n }\n\n public delete(key: K): void {\n this.map.delete(key);\n }\n\n public clear(): void {\n this.map.clear();\n }\n}\n"],"file":"lru.js"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { oxcShaker } from "../shaker.js";
|
|
2
|
+
import { Entrypoint } from "../transform/Entrypoint.js";
|
|
3
|
+
import { prepareCodeForEvalRuntime } from "../transform/generators/transform.js";
|
|
4
|
+
export function prepareModuleOnDemand(services, id, only) {
|
|
5
|
+
const entrypoint = Entrypoint.createRoot(services, id, only, undefined, { mergeCachedOnly: !only.includes("__wywPreval") });
|
|
6
|
+
if (entrypoint.ignored) {
|
|
7
|
+
return {
|
|
8
|
+
code: entrypoint.loadedAndParsed.code ?? "",
|
|
9
|
+
imports: null,
|
|
10
|
+
only: entrypoint.only
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
const ast = entrypoint.loadedAndParsed.evaluator === oxcShaker ? null : entrypoint.loadedAndParsed.ast;
|
|
14
|
+
const [code, imports] = prepareCodeForEvalRuntime(services, entrypoint, ast);
|
|
15
|
+
return {
|
|
16
|
+
code,
|
|
17
|
+
imports,
|
|
18
|
+
only: entrypoint.only
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=prepareModuleOnDemand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"AAAA,SAAS,iBAAiB;AAE1B,SAAS,kBAAkB;AAC3B,SAAS,iCAAiC;AAQ1C,OAAO,SAAS,sBACd,UACA,IACA,MACgB;CAChB,MAAM,aAAa,WAAW,WAAW,UAAU,IAAI,MAAM,WAAW,EACtE,iBAAiB,CAAC,KAAK,SAAS,cAAc,EAC/C,CAAC;AAEF,KAAI,WAAW,SAAS;AACtB,SAAO;GACL,MAAM,WAAW,gBAAgB,QAAQ;GACzC,SAAS;GACT,MAAM,WAAW;GAClB;;CAGH,MAAM,MACJ,WAAW,gBAAgB,cAAc,YACrC,OACC,WAAW,gBAAgB;CAGlC,MAAM,CAAC,MAAM,WAAW,0BAA0B,UAAU,YAAY,IAAI;AAE5E,QAAO;EACL;EACA;EACA,MAAM,WAAW;EAClB","names":[],"sources":["../../src/eval/prepareModuleOnDemand.ts"],"version":3,"sourcesContent":["import { oxcShaker } from '../shaker';\nimport type { Services } from '../transform/types';\nimport { Entrypoint } from '../transform/Entrypoint';\nimport { prepareCodeForEvalRuntime } from '../transform/generators/transform';\n\nexport type PreparedModule = {\n code: string;\n imports: Map<string, string[]> | null;\n only: string[];\n};\n\nexport function prepareModuleOnDemand(\n services: Services,\n id: string,\n only: string[]\n): PreparedModule {\n const entrypoint = Entrypoint.createRoot(services, id, only, undefined, {\n mergeCachedOnly: !only.includes('__wywPreval'),\n });\n\n if (entrypoint.ignored) {\n return {\n code: entrypoint.loadedAndParsed.code ?? '',\n imports: null,\n only: entrypoint.only,\n };\n }\n\n const ast =\n entrypoint.loadedAndParsed.evaluator === oxcShaker\n ? null\n : (entrypoint.loadedAndParsed.ast as Parameters<\n typeof prepareCodeForEvalRuntime\n >[2]);\n const [code, imports] = prepareCodeForEvalRuntime(services, entrypoint, ast);\n\n return {\n code,\n imports,\n only: entrypoint.only,\n };\n}\n"],"file":"prepareModuleOnDemand.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"","names":[],"sources":["../../src/eval/protocol.ts"],"version":3,"sourcesContent":["import type {\n EvalResolverKind,\n EvalWarning,\n FeatureFlags,\n ImportOverrides,\n} from '@wyw-in-js/shared';\n\nimport type { SerializedError, SerializedValue } from './serialize';\n\nexport type EvalRunnerInitPayload = {\n evalOptions: {\n mode: 'strict' | 'loose';\n require: 'warn-and-run' | 'error' | 'off';\n globals: Record<string, unknown>;\n importOverrides?: ImportOverrides;\n root?: string;\n extensions?: string[];\n };\n features: FeatureFlags<'happyDOM'>;\n entrypoint: string;\n reuseModules?: boolean;\n};\n\nexport type EvalRequest = {\n id: string;\n};\n\nexport type EvalResultPayload = {\n values: Record<string, SerializedValue> | null;\n modules?: Record<string, Record<string, SerializedValue>>;\n};\n\nexport type ResolveRequestPayload = {\n specifier: string;\n importerId: string;\n kind: EvalResolverKind;\n};\n\nexport type ResolveResultPayload = {\n resolvedId: string | null;\n external?: boolean;\n error?: SerializedError;\n};\n\nexport type LoadRequestPayload = {\n id: string;\n importerId?: string | null;\n request?: string | null;\n};\n\nexport type LoadResultPayload = {\n id: string;\n code?: string;\n codeChunk?: string;\n chunkIndex?: number;\n chunkCount?: number;\n map?: unknown;\n hash?: string;\n only?: string[];\n exports?: Record<string, SerializedValue>;\n error?: SerializedError;\n};\n\nexport type InitMessage = {\n type: 'INIT';\n id: string;\n payload: EvalRunnerInitPayload;\n};\n\nexport type InitAckMessage = {\n type: 'INIT_ACK';\n id: string;\n error?: SerializedError;\n // Set by the runner when it just reset its moduleCache during INIT (full\n // reset on context rebuild, or `reuseModules: false`). The broker uses\n // this to invalidate its \"what runner has\" mirror without doing any\n // payload hashing or stringification on its own hot path.\n modulesReset?: boolean;\n};\n\nexport type EvalMessage = {\n type: 'EVAL';\n id: string;\n payload: EvalRequest;\n};\n\nexport type EvalResultMessage = {\n type: 'EVAL_RESULT';\n id: string;\n payload: EvalResultPayload;\n error?: SerializedError;\n};\n\nexport type ResolveMessage = {\n type: 'RESOLVE';\n id: string;\n payload: ResolveRequestPayload;\n};\n\nexport type ResolveResultMessage = {\n type: 'RESOLVE_RESULT';\n id: string;\n payload: ResolveResultPayload;\n};\n\nexport type LoadMessage = {\n type: 'LOAD';\n id: string;\n payload: LoadRequestPayload;\n};\n\nexport type LoadResultMessage = {\n type: 'LOAD_RESULT';\n id: string;\n payload: LoadResultPayload;\n};\n\nexport type WarnMessage = {\n type: 'WARN';\n payload: EvalWarning;\n};\n\nexport type RunnerToMainMessage =\n | ResolveMessage\n | LoadMessage\n | WarnMessage\n | InitAckMessage\n | EvalResultMessage;\n\nexport type MainToRunnerMessage =\n | InitMessage\n | EvalMessage\n | ResolveResultMessage\n | LoadResultMessage;\n"],"file":"protocol.js"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export const defaultBundlerOwnedSpecifierPrefixes = [
|
|
2
|
+
"\0",
|
|
3
|
+
"/@",
|
|
4
|
+
"virtual:"
|
|
5
|
+
];
|
|
6
|
+
export const getResolverPrecedence = (mode) => {
|
|
7
|
+
if (mode === "hybrid") {
|
|
8
|
+
return [
|
|
9
|
+
"customResolver",
|
|
10
|
+
"safeOxcResolver",
|
|
11
|
+
"bundlerResolver",
|
|
12
|
+
"nodeFallback"
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
if (mode === "bundler") {
|
|
16
|
+
return [
|
|
17
|
+
"customResolver",
|
|
18
|
+
"bundlerResolver",
|
|
19
|
+
"nodeFallback"
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
if (mode === "custom") {
|
|
23
|
+
return ["customResolver"];
|
|
24
|
+
}
|
|
25
|
+
return ["nodeFallback"];
|
|
26
|
+
};
|
|
27
|
+
export const classifyHybridResolverSpecifier = (specifier, { bundlerOwnedPrefixes = defaultBundlerOwnedSpecifierPrefixes } = {}) => {
|
|
28
|
+
if (bundlerOwnedPrefixes.some((prefix) => specifier.startsWith(prefix))) {
|
|
29
|
+
return {
|
|
30
|
+
reason: "bundler-owned-prefix",
|
|
31
|
+
route: "bundler"
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (!specifier.startsWith("./") && !specifier.startsWith("../")) {
|
|
35
|
+
return {
|
|
36
|
+
reason: "ambiguous-specifier",
|
|
37
|
+
route: "bundler"
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (/[?#]/.test(specifier)) {
|
|
41
|
+
return {
|
|
42
|
+
reason: "query-or-hash",
|
|
43
|
+
route: "bundler"
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
reason: "safe-relative-specifier",
|
|
48
|
+
route: "oxc"
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=resolverStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"AAmBA,OAAO,MAAM,uCAAuC;CAClD;CACA;CACA;CACD;AAED,OAAO,MAAM,yBACX,SACsB;AACtB,KAAI,SAAS,UAAU;AACrB,SAAO;GACL;GACA;GACA;GACA;GACD;;AAGH,KAAI,SAAS,WAAW;AACtB,SAAO;GAAC;GAAkB;GAAmB;GAAe;;AAG9D,KAAI,SAAS,UAAU;AACrB,SAAO,CAAC,iBAAiB;;AAG3B,QAAO,CAAC,eAAe;;AAGzB,OAAO,MAAM,mCACX,WACA,EACE,uBAAuB,yCACY,EAAE,KACZ;AAC3B,KAAI,qBAAqB,MAAM,WAAW,UAAU,WAAW,OAAO,CAAC,EAAE;AACvE,SAAO;GACL,QAAQ;GACR,OAAO;GACR;;AAGH,KAAI,CAAC,UAAU,WAAW,KAAK,IAAI,CAAC,UAAU,WAAW,MAAM,EAAE;AAC/D,SAAO;GACL,QAAQ;GACR,OAAO;GACR;;AAGH,KAAI,OAAO,KAAK,UAAU,EAAE;AAC1B,SAAO;GACL,QAAQ;GACR,OAAO;GACR;;AAGH,QAAO;EACL,QAAQ;EACR,OAAO;EACR","names":[],"sources":["../../src/eval/resolverStrategy.ts"],"version":3,"sourcesContent":["import type { EvalResolverMode } from '@wyw-in-js/shared';\n\nexport type HybridResolverRoute = 'bundler' | 'oxc';\n\nexport type HybridResolverReason =\n | 'ambiguous-specifier'\n | 'bundler-owned-prefix'\n | 'query-or-hash'\n | 'safe-relative-specifier';\n\nexport type HybridResolverDecision = {\n reason: HybridResolverReason;\n route: HybridResolverRoute;\n};\n\nexport type HybridResolverClassifierOptions = {\n bundlerOwnedPrefixes?: readonly string[];\n};\n\nexport const defaultBundlerOwnedSpecifierPrefixes = [\n '\\0',\n '/@',\n 'virtual:',\n] as const;\n\nexport const getResolverPrecedence = (\n mode: EvalResolverMode\n): readonly string[] => {\n if (mode === 'hybrid') {\n return [\n 'customResolver',\n 'safeOxcResolver',\n 'bundlerResolver',\n 'nodeFallback',\n ];\n }\n\n if (mode === 'bundler') {\n return ['customResolver', 'bundlerResolver', 'nodeFallback'];\n }\n\n if (mode === 'custom') {\n return ['customResolver'];\n }\n\n return ['nodeFallback'];\n};\n\nexport const classifyHybridResolverSpecifier = (\n specifier: string,\n {\n bundlerOwnedPrefixes = defaultBundlerOwnedSpecifierPrefixes,\n }: HybridResolverClassifierOptions = {}\n): HybridResolverDecision => {\n if (bundlerOwnedPrefixes.some((prefix) => specifier.startsWith(prefix))) {\n return {\n reason: 'bundler-owned-prefix',\n route: 'bundler',\n };\n }\n\n if (!specifier.startsWith('./') && !specifier.startsWith('../')) {\n return {\n reason: 'ambiguous-specifier',\n route: 'bundler',\n };\n }\n\n if (/[?#]/.test(specifier)) {\n return {\n reason: 'query-or-hash',\n route: 'bundler',\n };\n }\n\n return {\n reason: 'safe-relative-specifier',\n route: 'oxc',\n };\n};\n"],"file":"resolverStrategy.js"}
|