@wyw-in-js/transform 1.0.8 → 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 -28
- 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 -79
- package/esm/transform/generators/workflow.js.map +1 -1
- package/esm/transform/helpers/loadWywOptions.js +154 -73
- 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 +10 -0
- package/esm/utils/TransformDiagnostics.js.map +1 -0
- package/esm/utils/TransformMetadata.js +28 -10
- 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 +7 -8
- package/types/index.js +24 -77
- 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 +6 -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 -37
- package/types/transform/helpers/loadWywOptions.js +95 -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 +4 -24
- package/types/types.js +1 -2
- package/types/utils/EventEmitter.js +3 -9
- package/types/utils/ShakerMetadata.js +1 -5
- package/types/utils/TransformDiagnostics.d.ts +9 -0
- package/types/utils/TransformDiagnostics.js +11 -0
- package/types/utils/TransformMetadata.d.ts +22 -4
- package/types/utils/TransformMetadata.js +23 -8
- 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 -257
- 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 -90
- package/lib/transform/generators/workflow.js.map +0 -1
- package/lib/transform/helpers/loadWywOptions.js +0 -87
- 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/TransformMetadata.js +0 -19
- 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 -20
- package/types/plugins/collector.js +0 -62
- package/types/plugins/dynamic-import.d.ts +0 -6
- package/types/plugins/dynamic-import.js +0 -60
- package/types/plugins/preeval.d.ts +0 -16
- package/types/plugins/preeval.js +0 -69
- package/types/plugins/shaker.d.ts +0 -14
- package/types/plugins/shaker.js +0 -724
- package/types/transform/generators/explodeReexports.d.ts +0 -7
- package/types/transform/generators/explodeReexports.js +0 -65
- package/types/utils/addIdentifierToWywPreval.d.ts +0 -4
- package/types/utils/addIdentifierToWywPreval.js +0 -74
- package/types/utils/collectExportsAndImports.d.ts +0 -31
- package/types/utils/collectExportsAndImports.js +0 -1147
- package/types/utils/collectTemplateDependencies.d.ts +0 -17
- package/types/utils/collectTemplateDependencies.js +0 -220
- package/types/utils/createId.d.ts +0 -2
- package/types/utils/createId.js +0 -9
- package/types/utils/findIdentifiers.d.ts +0 -6
- package/types/utils/findIdentifiers.js +0 -67
- package/types/utils/getConstantStringValue.d.ts +0 -2
- package/types/utils/getConstantStringValue.js +0 -94
- package/types/utils/getMemberExpressionPropertyName.d.ts +0 -2
- package/types/utils/getMemberExpressionPropertyName.js +0 -46
- package/types/utils/getScope.d.ts +0 -2
- package/types/utils/getScope.js +0 -10
- package/types/utils/getSource.d.ts +0 -2
- package/types/utils/getSource.js +0 -22
- package/types/utils/getTagProcessor.d.ts +0 -13
- package/types/utils/getTagProcessor.js +0 -411
- package/types/utils/isExports.d.ts +0 -6
- package/types/utils/isExports.js +0 -19
- package/types/utils/isGlobal.d.ts +0 -2
- package/types/utils/isGlobal.js +0 -9
- package/types/utils/isNodePath.d.ts +0 -3
- package/types/utils/isNodePath.js +0 -6
- package/types/utils/isRemoved.d.ts +0 -5
- package/types/utils/isRemoved.js +0 -41
- package/types/utils/isRequire.d.ts +0 -6
- package/types/utils/isRequire.js +0 -14
- package/types/utils/isTypedNode.d.ts +0 -5
- package/types/utils/isTypedNode.js +0 -9
- package/types/utils/isUnnecessaryReactCall.d.ts +0 -3
- package/types/utils/isUnnecessaryReactCall.js +0 -75
- package/types/utils/removeDangerousCode.d.ts +0 -4
- package/types/utils/removeDangerousCode.js +0 -326
- package/types/utils/replaceImportMetaEnv.d.ts +0 -3
- package/types/utils/replaceImportMetaEnv.js +0 -39
- package/types/utils/scopeHelpers.d.ts +0 -12
- package/types/utils/scopeHelpers.js +0 -580
- package/types/utils/traversalCache.d.ts +0 -4
- package/types/utils/traversalCache.js +0 -27
- package/types/utils/unwrapExpression.d.ts +0 -2
- package/types/utils/unwrapExpression.js +0 -57
- package/types/utils/unwrapSequence.d.ts +0 -8
- package/types/utils/unwrapSequence.js +0 -16
- package/types/utils/valueToLiteral.d.ts +0 -3
- package/types/utils/valueToLiteral.js +0 -63
- package/types/utils/visitors/JSXElementsRemover.d.ts +0 -3
- package/types/utils/visitors/JSXElementsRemover.js +0 -51
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","names":[],"sources":["../../src/utils/oxcShaker.ts"],"version":3,"sourcesContent":["/* eslint-disable no-restricted-syntax */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport type { Node, Program } from 'oxc-parser';\n\nimport { syncResolve, type ImportOverrides } from '@wyw-in-js/shared';\n\nimport { collectOxcExportsAndImportsFromProgram } from './collectOxcExportsAndImports';\nimport type {\n collectOxcExportsAndImports,\n OxcCollectedImport,\n} from './collectOxcExportsAndImports';\nimport { getImportOverride, toImportKey } from './importOverrides';\nimport { parseOxcCached } from './parseOxc';\nimport { stripQueryAndHash } from './parseRequest';\n\ntype AnyNode = Node & Record<string, unknown>;\n\ntype Replacement = {\n end: number;\n start: number;\n value: string;\n};\n\ntype OxcShakerOptions = {\n importOverrides?: ImportOverrides;\n keepSideEffects?: boolean;\n onlyExports: string[];\n root?: string;\n};\n\ntype StatementInfo = {\n bindings: Set<string>;\n exportNames: Set<string>;\n imports: OxcCollectedImport[];\n mutations: Set<string>;\n node: Node;\n references: Set<string>;\n sideEffectImport: boolean;\n};\n\nexport type OxcShakerResult = {\n code: string;\n imports: Map<string, string[]>;\n};\ntype ParsedOxcProgram = ReturnType<typeof parseOxc>;\ntype RemoveUnusedImportSpecifiersResult = {\n code: string;\n parsed: ParsedOxcProgram;\n};\n\nconst warnedDynamicImportFiles = new Set<string>();\n\nconst isNode = (value: unknown): value is Node =>\n !!value &&\n typeof value === 'object' &&\n 'type' in value &&\n typeof (value as { type?: unknown }).type === 'string';\n\nconst getChildren = (node: Node): Node[] => {\n const result: Node[] = [];\n const record = node as AnyNode;\n\n Object.keys(record).forEach((key) => {\n if (key === 'type' || key === 'start' || key === 'end' || key === 'range') {\n return;\n }\n\n const value = record[key];\n if (isNode(value)) {\n result.push(value);\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item) => {\n if (isNode(item)) {\n result.push(item);\n }\n });\n }\n });\n\n return result;\n};\n\nconst parseOxc = (\n code: string,\n filename: string\n): { isEsModule: boolean; program: Program } => {\n try {\n const parsed = parseOxcCached(filename, code, 'unambiguous');\n return {\n isEsModule: parsed.module.hasModuleSyntax,\n program: parsed.program,\n };\n } catch (error) {\n if (process.env.WYW_DEBUG_SHAKER_DUMP) {\n const dumpFile = path.join(\n '/tmp',\n `wyw-oxc-shaker-${path\n .basename(filename)\n .replace(/[^a-z0-9_.-]/gi, '_')}-${Date.now()}.js`\n );\n fs.writeFileSync(dumpFile, code);\n const message =\n error instanceof Error\n ? error.message\n : 'Unknown Oxc shaker parse error';\n throw new Error(`${message} [${filename}] [dump: ${dumpFile}]`);\n }\n\n throw error;\n }\n};\n\nconst applyReplacements = (\n code: string,\n replacements: Replacement[]\n): string => {\n let result = code;\n replacements\n .sort((a, b) => b.start - a.start)\n .forEach((replacement) => {\n result =\n result.slice(0, replacement.start) +\n replacement.value +\n result.slice(replacement.end);\n });\n\n return result;\n};\n\nconst collectBindingNames = (node: Node | null | undefined): string[] => {\n if (!node) {\n return [];\n }\n\n if (node.type === 'Identifier') {\n return [node.name];\n }\n\n if (node.type === 'RestElement') {\n return collectBindingNames(node.argument);\n }\n\n if (node.type === 'AssignmentPattern') {\n return collectBindingNames(node.left);\n }\n\n if (node.type === 'ObjectPattern') {\n return node.properties.flatMap((property) =>\n property.type === 'RestElement'\n ? collectBindingNames(property.argument)\n : collectBindingNames(property.value)\n );\n }\n\n if (node.type === 'ArrayPattern') {\n return node.elements.flatMap((element) => collectBindingNames(element));\n }\n\n return [];\n};\n\nconst declarationBindings = (\n declaration: Node | null | undefined\n): string[] => {\n if (!declaration) {\n return [];\n }\n\n if (declaration.type === 'VariableDeclaration') {\n return declaration.declarations.flatMap((item) =>\n collectBindingNames(item.id)\n );\n }\n\n if (\n (declaration.type === 'FunctionDeclaration' ||\n declaration.type === 'ClassDeclaration' ||\n declaration.type === 'TSEnumDeclaration') &&\n declaration.id\n ) {\n return [declaration.id.name];\n }\n\n return [];\n};\n\nconst moduleExportName = (node: Node): string | null => {\n if (node.type === 'Identifier' || node.type === 'Literal') {\n return String((node as AnyNode).name ?? (node as AnyNode).value);\n }\n\n return null;\n};\n\nconst isBindingIdentifier = (node: Node, parent: Node | null): boolean => {\n if (node.type !== 'Identifier' || !parent) {\n return false;\n }\n\n const parentNode = parent as AnyNode;\n if (parent.type === 'VariableDeclarator' && parentNode.id === node) {\n return true;\n }\n\n if (\n (parent.type === 'FunctionDeclaration' ||\n parent.type === 'FunctionExpression' ||\n parent.type === 'ClassDeclaration' ||\n parent.type === 'ClassExpression' ||\n parent.type === 'TSEnumDeclaration') &&\n parentNode.id === node\n ) {\n return true;\n }\n\n if (\n (parent.type === 'ImportSpecifier' ||\n parent.type === 'ImportDefaultSpecifier' ||\n parent.type === 'ImportNamespaceSpecifier') &&\n parentNode.local === node\n ) {\n return true;\n }\n\n return false;\n};\n\nconst isIdentifierReference = (\n node: Node,\n parent: Node | null,\n grandparent: Node | null\n): boolean => {\n if (node.type !== 'Identifier') {\n return false;\n }\n\n if (isBindingIdentifier(node, parent)) {\n return false;\n }\n\n if (!parent) {\n return true;\n }\n\n const parentNode = parent as AnyNode;\n if (\n parent.type === 'Property' &&\n parentNode.key === node &&\n !parentNode.computed\n ) {\n return false;\n }\n\n if (\n parent.type === 'MemberExpression' &&\n parentNode.property === node &&\n !parentNode.computed\n ) {\n return false;\n }\n\n if (parent.type === 'ExportSpecifier' && parentNode.exported === node) {\n return false;\n }\n\n if (parent.type === 'ExportSpecifier' && parentNode.local === node) {\n return grandparent?.type === 'ExportNamedDeclaration'\n ? !grandparent.source\n : true;\n }\n\n // The `imported` name of `import { X as Y }` is what to take from the source\n // module — it does not reference a local binding `X` in the current module.\n if (parent.type === 'ImportSpecifier' && parentNode.imported === node) {\n return false;\n }\n\n return true;\n};\n\nconst TS_EXPRESSION_WRAPPER_TYPES = new Set([\n 'TSAsExpression',\n 'TSSatisfiesExpression',\n 'TSTypeAssertion',\n 'TSNonNullExpression',\n 'TSInstantiationExpression',\n]);\n\nconst collectReferences = (node: Node): Set<string> => {\n const references = new Set<string>();\n\n const visit = (\n current: Node,\n parent: Node | null = null,\n grandparent: Node | null = null\n ): void => {\n if (TS_EXPRESSION_WRAPPER_TYPES.has(current.type)) {\n const expression = (current as AnyNode).expression as Node | undefined;\n if (expression) {\n visit(expression, current, parent);\n }\n return;\n }\n\n if (current.type.startsWith('TS') && current.type !== 'TSEnumDeclaration') {\n return;\n }\n\n if (isIdentifierReference(current, parent, grandparent)) {\n references.add((current as AnyNode).name as string);\n }\n\n getChildren(current).forEach((child) => visit(child, current, parent));\n };\n\n visit(node);\n\n return references;\n};\n\nconst getMutatedBinding = (node: Node): string | null => {\n if (node.type === 'Identifier') {\n return node.name;\n }\n\n if (node.type === 'MemberExpression' && node.object.type === 'Identifier') {\n return node.object.name;\n }\n\n return null;\n};\n\nconst getMutationCallTarget = (node: Node): string | null => {\n if (node.type !== 'CallExpression') {\n return null;\n }\n\n const { callee } = node;\n if (\n callee.type !== 'MemberExpression' ||\n callee.object.type !== 'Identifier' ||\n callee.object.name !== 'Object' ||\n callee.computed ||\n callee.property.type !== 'Identifier'\n ) {\n return null;\n }\n\n if (\n callee.property.name !== 'assign' &&\n callee.property.name !== 'defineProperty' &&\n callee.property.name !== 'defineProperties'\n ) {\n return null;\n }\n\n const [target] = node.arguments;\n if (!target || target.type === 'SpreadElement') {\n return null;\n }\n\n return getMutatedBinding(target);\n};\n\nconst collectMutations = (node: Node): Set<string> => {\n const mutations = new Set<string>();\n\n const visit = (current: Node): void => {\n if (current.type === 'AssignmentExpression') {\n const mutated = getMutatedBinding(current.left);\n if (mutated) {\n mutations.add(mutated);\n }\n } else if (current.type === 'UpdateExpression') {\n const mutated = getMutatedBinding(current.argument);\n if (mutated) {\n mutations.add(mutated);\n }\n } else {\n const mutated = getMutationCallTarget(current);\n if (mutated) {\n mutations.add(mutated);\n }\n }\n\n getChildren(current).forEach(visit);\n };\n\n visit(node);\n return mutations;\n};\n\nconst buildStatementInfo = (\n program: Program,\n collected: ReturnType<typeof collectOxcExportsAndImports>\n): StatementInfo[] => {\n const { exports: collectedExports, imports: collectedImports } = collected;\n const importsByStart = new Map<number, OxcCollectedImport[]>();\n collectedImports.forEach((item) => {\n const bucket = importsByStart.get(item.local.start) ?? [];\n bucket.push(item);\n importsByStart.set(item.local.start, bucket);\n });\n\n return program.body.map((statement) => {\n const node = statement as Node;\n const exportNames = new Set<string>();\n const bindings = new Set<string>();\n const imports: OxcCollectedImport[] = [];\n const references = collectReferences(node);\n let sideEffectImport = false;\n\n if (node.type === 'ImportDeclaration') {\n sideEffectImport = node.specifiers.length === 0;\n node.specifiers.forEach((specifier) => {\n bindings.add(specifier.local.name);\n const matched = importsByStart.get(specifier.local.start) ?? [];\n imports.push(...matched);\n });\n\n if (sideEffectImport) {\n const matched = collectedImports.filter(\n (item) =>\n item.imported === 'side-effect' &&\n item.local.start === node.start &&\n item.local.end === node.end\n );\n imports.push(...matched);\n }\n } else if (node.type === 'ExportNamedDeclaration') {\n declarationBindings(node.declaration).forEach((name) =>\n bindings.add(name)\n );\n if (node.declaration) {\n declarationBindings(node.declaration).forEach((name) =>\n exportNames.add(name)\n );\n }\n\n node.specifiers.forEach((specifier) => {\n const local = moduleExportName(specifier.local);\n const exported = moduleExportName(specifier.exported);\n if (local && !node.source) references.add(local);\n if (exported) exportNames.add(exported);\n });\n } else if (node.type === 'ExportDefaultDeclaration') {\n exportNames.add('default');\n declarationBindings(node.declaration).forEach((name) =>\n bindings.add(name)\n );\n } else if (node.type === 'ExportAllDeclaration') {\n if (node.exported) {\n const exported = moduleExportName(node.exported);\n if (exported) {\n exportNames.add(exported);\n }\n } else {\n exportNames.add('*');\n }\n } else {\n Object.entries(collectedExports).forEach(([exported, local]) => {\n if (local.start >= node.start && local.end <= node.end) {\n exportNames.add(exported);\n }\n });\n declarationBindings(node).forEach((name) => bindings.add(name));\n }\n\n return {\n bindings,\n exportNames,\n imports,\n mutations: collectMutations(node),\n node,\n references,\n sideEffectImport,\n };\n });\n};\n\nconst collectImportLocalNames = (node: Node): string[] => {\n if (node.type !== 'ImportDeclaration') {\n return [];\n }\n\n return node.specifiers.map((specifier) => specifier.local.name);\n};\n\nconst getImportSpecifierLocalName = (node: Node): string | null => {\n const { local } = node as AnyNode;\n return isNode(local) && 'name' in local && typeof local.name === 'string'\n ? local.name\n : null;\n};\n\nconst expandImportRemovalRange = (\n code: string,\n start: number,\n end: number\n): Replacement => {\n let removalStart = start;\n while (\n removalStart > 0 &&\n (code[removalStart - 1] === ' ' || code[removalStart - 1] === '\\t')\n ) {\n removalStart -= 1;\n }\n\n let removalEnd = end;\n if (code[removalEnd] === ';') {\n removalEnd += 1;\n }\n\n while (\n removalEnd < code.length &&\n (code[removalEnd] === ' ' || code[removalEnd] === '\\t')\n ) {\n removalEnd += 1;\n }\n\n if (code[removalEnd] === '\\r' && code[removalEnd + 1] === '\\n') {\n removalEnd += 2;\n } else if (code[removalEnd] === '\\n') {\n removalEnd += 1;\n }\n\n return {\n end: removalEnd,\n start: removalStart,\n value: '',\n };\n};\n\nconst expandImportSpecifierRemovalRange = (\n code: string,\n start: number,\n end: number\n): Replacement => {\n let removalStart = start;\n let removalEnd = end;\n\n let whitespaceStart = removalStart;\n while (\n whitespaceStart > 0 &&\n (code[whitespaceStart - 1] === ' ' || code[whitespaceStart - 1] === '\\t')\n ) {\n whitespaceStart -= 1;\n }\n if (code[whitespaceStart - 1] !== '{') {\n removalStart = whitespaceStart;\n }\n\n while (\n removalEnd < code.length &&\n (code[removalEnd] === ' ' || code[removalEnd] === '\\t')\n ) {\n removalEnd += 1;\n }\n\n if (code[removalEnd] === ',') {\n removalEnd += 1;\n while (\n removalEnd < code.length &&\n (code[removalEnd] === ' ' || code[removalEnd] === '\\t')\n ) {\n removalEnd += 1;\n }\n } else {\n while (\n removalStart > 0 &&\n (code[removalStart - 1] === ' ' || code[removalStart - 1] === '\\t')\n ) {\n removalStart -= 1;\n }\n\n if (code[removalStart - 1] === ',') {\n removalStart -= 1;\n while (\n removalStart > 0 &&\n (code[removalStart - 1] === ' ' || code[removalStart - 1] === '\\t')\n ) {\n removalStart -= 1;\n }\n }\n }\n\n return {\n end: removalEnd,\n start: removalStart,\n value: '',\n };\n};\n\nconst mergeEmptyRemovalRanges = (removals: Replacement[]): Replacement[] => {\n if (removals.length <= 1) {\n return removals;\n }\n\n const sorted = [...removals].sort((a, b) => a.start - b.start);\n const merged: Replacement[] = [];\n\n sorted.forEach((removal) => {\n const previous = merged[merged.length - 1];\n if (\n previous &&\n previous.value === '' &&\n removal.value === '' &&\n removal.start <= previous.end\n ) {\n previous.end = Math.max(previous.end, removal.end);\n return;\n }\n\n merged.push({ ...removal });\n });\n\n return merged;\n};\n\nconst removeUnusedImportSpecifiers = (\n code: string,\n filename: string\n): RemoveUnusedImportSpecifiersResult => {\n const parsed = parseOxc(code, filename);\n const { program } = parsed;\n const referencedNames = new Set<string>();\n\n program.body.forEach((statement) => {\n if (statement.type === 'ImportDeclaration') {\n return;\n }\n\n collectReferences(statement as Node).forEach((name) =>\n referencedNames.add(name)\n );\n });\n\n const removals: Replacement[] = [];\n program.body.forEach((statement) => {\n if (statement.type !== 'ImportDeclaration') {\n return;\n }\n\n if (statement.specifiers.length === 0) {\n return;\n }\n\n const localNames = collectImportLocalNames(statement);\n if (localNames.every((localName) => !referencedNames.has(localName))) {\n removals.push(\n expandImportRemovalRange(code, statement.start, statement.end)\n );\n return;\n }\n\n if (statement.specifiers.length <= 1) {\n return;\n }\n\n statement.specifiers.forEach((specifier) => {\n const localName = getImportSpecifierLocalName(specifier);\n if (localName && !referencedNames.has(localName)) {\n removals.push(\n expandImportSpecifierRemovalRange(\n code,\n specifier.start,\n specifier.end\n )\n );\n }\n });\n });\n\n if (removals.length === 0) {\n return {\n code,\n parsed,\n };\n }\n\n const mergedRemovals = mergeEmptyRemovalRanges(removals);\n const nextCode = applyReplacements(code, mergedRemovals);\n\n try {\n return {\n code: nextCode,\n parsed: parseOxc(nextCode, filename),\n };\n } catch {\n return {\n code,\n parsed,\n };\n }\n};\n\nconst hasImportOverride = (\n source: string,\n options: Pick<OxcShakerOptions, 'importOverrides' | 'root'>\n): boolean => {\n const { importOverrides } = options;\n if (!importOverrides || Object.keys(importOverrides).length === 0) {\n return false;\n }\n\n const stripped = stripQueryAndHash(source);\n const direct =\n getImportOverride(importOverrides, source) ??\n (stripped !== source ? getImportOverride(importOverrides, stripped) : null);\n\n if (direct && ('mock' in direct || 'noShake' in direct)) {\n return true;\n }\n\n if (!stripped.startsWith('.') && !path.isAbsolute(stripped)) {\n return false;\n }\n\n return false;\n};\n\nconst importsToMap = (\n collected: ReturnType<typeof collectOxcExportsAndImports>\n): Map<string, string[]> => {\n const result = new Map<string, string[]>();\n\n const add = (source: string, imported: string): void => {\n const bucket = result.get(source) ?? [];\n if (!bucket.includes(imported)) {\n bucket.push(imported);\n }\n\n result.set(source, bucket);\n };\n\n collected.imports.forEach((item) => {\n const imported = item.imported || 'side-effect';\n add(item.source, imported);\n });\n\n collected.reexports.forEach((item) => {\n add(item.source, item.imported || 'side-effect');\n });\n\n return result;\n};\n\nconst dynamicImportWarningsEnabled = (): boolean =>\n Boolean(process.env.WYW_WARN_DYNAMIC_IMPORTS) &&\n process.env.WYW_WARN_DYNAMIC_IMPORTS !== '0' &&\n process.env.WYW_WARN_DYNAMIC_IMPORTS !== 'false';\n\nconst filterDynamicImportsForWarning = (\n imports: OxcCollectedImport[],\n filename: string,\n options: OxcShakerOptions\n): string[] => {\n const sources = Array.from(\n new Set(\n imports\n .filter((item) => item.type === 'dynamic')\n .map((item) => item.source)\n )\n ).sort();\n\n if (\n !options.importOverrides ||\n Object.keys(options.importOverrides).length === 0\n ) {\n return sources;\n }\n\n const shouldWarn = (source: string): boolean => {\n const strippedSource = stripQueryAndHash(source);\n const direct =\n getImportOverride(options.importOverrides, source) ??\n (strippedSource !== source\n ? getImportOverride(options.importOverrides, strippedSource)\n : undefined);\n\n if (direct !== undefined) {\n return false;\n }\n\n const isFileImport =\n strippedSource.startsWith('.') || path.isAbsolute(strippedSource);\n if (!isFileImport) {\n return true;\n }\n\n try {\n const resolved = syncResolve(strippedSource, filename, []);\n const importKey = toImportKey({\n resolved,\n root: options.root,\n source: strippedSource,\n }).key;\n\n return (\n getImportOverride(options.importOverrides, importKey) === undefined\n );\n } catch {\n return true;\n }\n };\n\n return sources.filter(shouldWarn);\n};\n\nconst warnDynamicImports = (\n imports: OxcCollectedImport[],\n filename: string,\n options: OxcShakerOptions\n): void => {\n if (\n !dynamicImportWarningsEnabled() ||\n warnedDynamicImportFiles.has(filename)\n ) {\n return;\n }\n\n const sourcesToWarn = filterDynamicImportsForWarning(\n imports,\n filename,\n options\n );\n if (sourcesToWarn.length === 0) {\n return;\n }\n\n warnedDynamicImportFiles.add(filename);\n\n const overrideKeys = sourcesToWarn\n .map((source) => {\n const strippedSource = stripQueryAndHash(source);\n const isFileImport =\n strippedSource.startsWith('.') || path.isAbsolute(strippedSource);\n\n if (!isFileImport) {\n return { key: source, source };\n }\n\n try {\n const resolved = syncResolve(strippedSource, filename, []);\n return {\n key: toImportKey({\n resolved,\n root: options.root,\n source: strippedSource,\n }).key,\n source,\n };\n } catch {\n return { key: strippedSource, source };\n }\n })\n .filter((item, index, array) => {\n const firstIndexForKey = array.findIndex((i) => i.key === item.key);\n return firstIndexForKey === index;\n });\n\n const warning = [\n `[wyw-in-js] Dynamic imports reached prepare stage`,\n ``,\n `file: ${filename}`,\n `count: ${sourcesToWarn.length}`,\n `sources:`,\n ...sourcesToWarn.map((source) => ` - ${source}`),\n ``,\n `note: these imports will be resolved/processed even if they are lazy (e.g. React.lazy(() => import(...)))`,\n ``,\n `tip: if the imported module is runtime-only or heavy, mock it during evaluation via importOverrides:`,\n ` importOverrides: {`,\n ...overrideKeys.map(\n ({ key, source }) =>\n ` '${key}': { mock: './path/to/mock' }, // from ${source}`\n ),\n ` }`,\n ``,\n `note: importOverrides affects only build-time evaluation (it does not change your bundler runtime behavior)`,\n ].join('\\n');\n\n // eslint-disable-next-line no-console\n console.warn(warning);\n};\n\nconst removeExportKeyword = (code: string, node: Node): Replacement | null => {\n if (\n node.type !== 'ExportNamedDeclaration' ||\n !node.declaration ||\n node.start === node.declaration.start\n ) {\n return null;\n }\n\n return {\n end: node.declaration.start,\n start: node.start,\n value: '',\n };\n};\n\nconst splitExportedVariableDeclaration = (\n code: string,\n node: Node,\n requested: Set<string>\n): Replacement | null => {\n if (\n node.type !== 'ExportNamedDeclaration' ||\n !node.declaration ||\n node.declaration.type !== 'VariableDeclaration' ||\n node.declaration.declarations.length <= 1\n ) {\n return null;\n }\n\n const declarators = node.declaration.declarations;\n const declaratorNames = declarators.map((declarator) =>\n collectBindingNames(declarator.id)\n );\n const requestedNames = declaratorNames\n .flat()\n .filter((name) => requested.has(name));\n\n if (\n requestedNames.length === 0 ||\n requestedNames.length === declaratorNames.flat().length\n ) {\n return null;\n }\n\n const declarationCode = `${node.declaration.kind} ${declarators\n .map((declarator) => code.slice(declarator.start, declarator.end))\n .join(', ')};`;\n\n return {\n end: node.end,\n start: node.start,\n value: `${declarationCode}\\nexport { ${requestedNames.join(', ')} };`,\n };\n};\n\nexport const shakeOxcToESM = (\n code: string,\n filename: string,\n options: OxcShakerOptions\n): OxcShakerResult => {\n const parsed = parseOxc(code, filename);\n const { program } = parsed;\n const collected = collectOxcExportsAndImportsFromProgram(\n program,\n code,\n parsed.isEsModule\n );\n const statements = buildStatementInfo(program, collected);\n const bindingOwners = new Map<string, StatementInfo>();\n statements.forEach((statement) => {\n statement.bindings.forEach((binding) => {\n if (!bindingOwners.has(binding)) {\n bindingOwners.set(binding, statement);\n }\n });\n });\n\n const requested = new Set(options.onlyExports);\n const keepAllExports = requested.has('*');\n const liveStatements = new Set<StatementInfo>();\n const liveExportStatements = new Set<StatementInfo>();\n const queue: StatementInfo[] = [];\n const mutationsByBinding = new Map<string, StatementInfo[]>();\n\n statements.forEach((statement) => {\n statement.mutations.forEach((binding) => {\n const bucket = mutationsByBinding.get(binding) ?? [];\n bucket.push(statement);\n mutationsByBinding.set(binding, bucket);\n });\n });\n\n const mark = (statement: StatementInfo, exported = false): void => {\n if (!liveStatements.has(statement)) {\n liveStatements.add(statement);\n queue.push(statement);\n }\n\n if (exported) {\n liveExportStatements.add(statement);\n }\n };\n\n statements.forEach((statement) => {\n const hasWildcardReexport = statement.exportNames.has('*');\n if (\n statement.exportNames.size > 0 &&\n (keepAllExports ||\n (hasWildcardReexport &&\n requested.size > 0 &&\n !requested.has('side-effect')) ||\n [...statement.exportNames].some((name) => requested.has(name)))\n ) {\n mark(statement, true);\n }\n\n if (\n statement.sideEffectImport &&\n (requested.has('side-effect') ||\n options.keepSideEffects ||\n statement.imports.some((item) =>\n hasImportOverride(item.source, options)\n ))\n ) {\n mark(statement);\n }\n });\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n current.references.forEach((name) => {\n const owner = bindingOwners.get(name);\n if (owner) {\n mark(owner);\n }\n });\n current.bindings.forEach((binding) => {\n mutationsByBinding.get(binding)?.forEach((mutation) => {\n mark(mutation);\n });\n });\n }\n\n const replacements: Replacement[] = [];\n statements.forEach((statement) => {\n if (!liveStatements.has(statement)) {\n replacements.push({\n end: statement.node.end,\n start: statement.node.start,\n value: '',\n });\n return;\n }\n\n if (!liveExportStatements.has(statement)) {\n const replacement = removeExportKeyword(code, statement.node);\n if (replacement) {\n replacements.push(replacement);\n }\n return;\n }\n\n const splitReplacement = splitExportedVariableDeclaration(\n code,\n statement.node,\n requested\n );\n if (splitReplacement) {\n replacements.push(splitReplacement);\n }\n });\n\n const cleaned = removeUnusedImportSpecifiers(\n applyReplacements(code, replacements),\n filename\n );\n const nextCode = cleaned.code;\n const nextCollected = collectOxcExportsAndImportsFromProgram(\n cleaned.parsed.program,\n nextCode,\n cleaned.parsed.isEsModule\n );\n warnDynamicImports(nextCollected.imports, filename, options);\n\n return {\n code: nextCode,\n imports: importsToMap(nextCollected),\n };\n};\n"],"file":"oxcShaker.js"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { parseSync } from "oxc-parser";
|
|
2
|
+
const MAX_PARSE_CACHE_ENTRIES = 200;
|
|
3
|
+
const parseCache = new Map();
|
|
4
|
+
const getAstType = (filename) => filename.endsWith(".ts") || filename.endsWith(".tsx") ? "ts" : "js";
|
|
5
|
+
const makeCacheKey = (filename, code, sourceType) => `${sourceType}\0${filename}\0${code}`;
|
|
6
|
+
const setCachedParse = (key, value) => {
|
|
7
|
+
parseCache.set(key, value);
|
|
8
|
+
if (parseCache.size > MAX_PARSE_CACHE_ENTRIES) {
|
|
9
|
+
const oldestKey = parseCache.keys().next().value;
|
|
10
|
+
if (oldestKey) {
|
|
11
|
+
parseCache.delete(oldestKey);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
};
|
|
16
|
+
export const parseOxcCached = (filename, code, sourceType) => {
|
|
17
|
+
const cacheKey = makeCacheKey(filename, code, sourceType);
|
|
18
|
+
const cached = parseCache.get(cacheKey);
|
|
19
|
+
if (cached) {
|
|
20
|
+
return cached;
|
|
21
|
+
}
|
|
22
|
+
const parsed = parseSync(filename, code, {
|
|
23
|
+
astType: getAstType(filename),
|
|
24
|
+
range: true,
|
|
25
|
+
sourceType
|
|
26
|
+
});
|
|
27
|
+
const fatalError = parsed.errors.find((error) => error.severity === "Error");
|
|
28
|
+
if (fatalError) {
|
|
29
|
+
throw new Error(fatalError.message);
|
|
30
|
+
}
|
|
31
|
+
return setCachedParse(cacheKey, {
|
|
32
|
+
module: { hasModuleSyntax: parsed.module.hasModuleSyntax },
|
|
33
|
+
program: parsed.program
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
export const parseOxcProgramCached = (filename, code, sourceType) => parseOxcCached(filename, code, sourceType).program;
|
|
37
|
+
//# sourceMappingURL=parseOxc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"AAAA,SAAS,iBAAiB;AAY1B,MAAM,0BAA0B;AAChC,MAAM,aAAa,IAAI,KAAwB;AAE/C,MAAM,cAAc,aAClB,SAAS,SAAS,MAAM,IAAI,SAAS,SAAS,OAAO,GAAG,OAAO;AAEjE,MAAM,gBACJ,UACA,MACA,eACW,GAAG,WAAW,IAAI,SAAS,IAAI;AAE5C,MAAM,kBAAkB,KAAa,UAAgC;AACnE,YAAW,IAAI,KAAK,MAAM;AAC1B,KAAI,WAAW,OAAO,yBAAyB;EAC7C,MAAM,YAAY,WAAW,MAAM,CAAC,MAAM,CAAC;AAC3C,MAAI,WAAW;AACb,cAAW,OAAO,UAAU;;;AAIhC,QAAO;;AAGT,OAAO,MAAM,kBACX,UACA,MACA,eACc;CACd,MAAM,WAAW,aAAa,UAAU,MAAM,WAAW;CACzD,MAAM,SAAS,WAAW,IAAI,SAAS;AACvC,KAAI,QAAQ;AACV,SAAO;;CAGT,MAAM,SAAS,UAAU,UAAU,MAAM;EACvC,SAAS,WAAW,SAAS;EAC7B,OAAO;EACP;EACD,CAAC;CACF,MAAM,aAAa,OAAO,OAAO,MAAM,UAAU,MAAM,aAAa,QAAQ;AAC5E,KAAI,YAAY;AACd,QAAM,IAAI,MAAM,WAAW,QAAQ;;AAGrC,QAAO,eAAe,UAAU;EAC9B,QAAQ,EACN,iBAAiB,OAAO,OAAO,iBAChC;EACD,SAAS,OAAO;EACjB,CAAC;;AAGJ,OAAO,MAAM,yBACX,UACA,MACA,eACY,eAAe,UAAU,MAAM,WAAW,CAAC","names":[],"sources":["../../src/utils/parseOxc.ts"],"version":3,"sourcesContent":["import { parseSync } from 'oxc-parser';\nimport type { Program } from 'oxc-parser';\n\ntype OxcSourceType = 'module' | 'unambiguous';\n\ntype ParsedOxc = {\n module: {\n hasModuleSyntax: boolean;\n };\n program: Program;\n};\n\nconst MAX_PARSE_CACHE_ENTRIES = 200;\nconst parseCache = new Map<string, ParsedOxc>();\n\nconst getAstType = (filename: string): 'js' | 'ts' =>\n filename.endsWith('.ts') || filename.endsWith('.tsx') ? 'ts' : 'js';\n\nconst makeCacheKey = (\n filename: string,\n code: string,\n sourceType: OxcSourceType\n): string => `${sourceType}\\0${filename}\\0${code}`;\n\nconst setCachedParse = (key: string, value: ParsedOxc): ParsedOxc => {\n parseCache.set(key, value);\n if (parseCache.size > MAX_PARSE_CACHE_ENTRIES) {\n const oldestKey = parseCache.keys().next().value;\n if (oldestKey) {\n parseCache.delete(oldestKey);\n }\n }\n\n return value;\n};\n\nexport const parseOxcCached = (\n filename: string,\n code: string,\n sourceType: OxcSourceType\n): ParsedOxc => {\n const cacheKey = makeCacheKey(filename, code, sourceType);\n const cached = parseCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n const parsed = parseSync(filename, code, {\n astType: getAstType(filename),\n range: true,\n sourceType,\n });\n const fatalError = parsed.errors.find((error) => error.severity === 'Error');\n if (fatalError) {\n throw new Error(fatalError.message);\n }\n\n return setCachedParse(cacheKey, {\n module: {\n hasModuleSyntax: parsed.module.hasModuleSyntax,\n },\n program: parsed.program as Program,\n });\n};\n\nexport const parseOxcProgramCached = (\n filename: string,\n code: string,\n sourceType: OxcSourceType\n): Program => parseOxcCached(filename, code, sourceType).program;\n"],"file":"parseOxc.js"}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
const getFirstSuffixIndex = request => {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
const getFirstSuffixIndex = (request) => {
|
|
2
|
+
const queryIdx = request.indexOf("?");
|
|
3
|
+
const hashIdx = request.indexOf("#");
|
|
4
|
+
if (queryIdx === -1) return hashIdx;
|
|
5
|
+
if (hashIdx === -1) return queryIdx;
|
|
6
|
+
return Math.min(queryIdx, hashIdx);
|
|
7
7
|
};
|
|
8
|
-
export const parseRequest = request => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
8
|
+
export const parseRequest = (request) => {
|
|
9
|
+
const firstSuffixIndex = getFirstSuffixIndex(request);
|
|
10
|
+
if (firstSuffixIndex === -1) {
|
|
11
|
+
return {
|
|
12
|
+
filename: request,
|
|
13
|
+
hash: "",
|
|
14
|
+
query: ""
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const filename = request.slice(0, firstSuffixIndex);
|
|
18
|
+
const queryIdx = request.indexOf("?");
|
|
19
|
+
const hashIdx = request.indexOf("#");
|
|
20
|
+
const query = queryIdx === -1 ? "" : request.slice(queryIdx + 1, hashIdx !== -1 ? hashIdx : undefined);
|
|
21
|
+
const hash = hashIdx === -1 ? "" : request.slice(hashIdx + 1);
|
|
22
|
+
return {
|
|
23
|
+
filename,
|
|
24
|
+
hash,
|
|
25
|
+
query
|
|
26
|
+
};
|
|
27
27
|
};
|
|
28
|
-
export const stripQueryAndHash = request => parseRequest(request).filename;
|
|
29
|
-
//# sourceMappingURL=parseRequest.js.map
|
|
28
|
+
export const stripQueryAndHash = (request) => parseRequest(request).filename;
|
|
29
|
+
//# sourceMappingURL=parseRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAMA,MAAM,uBAAuB,YAAoB;CAC/C,MAAM,WAAW,QAAQ,QAAQ,IAAI;CACrC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAEpC,KAAI,aAAa,CAAC,EAAG,QAAO;AAC5B,KAAI,YAAY,CAAC,EAAG,QAAO;AAE3B,QAAO,KAAK,IAAI,UAAU,QAAQ;;AAGpC,OAAO,MAAM,gBAAgB,YAAmC;CAC9D,MAAM,mBAAmB,oBAAoB,QAAQ;AACrD,KAAI,qBAAqB,CAAC,GAAG;AAC3B,SAAO;GAAE,UAAU;GAAS,MAAM;GAAI,OAAO;GAAI;;CAGnD,MAAM,WAAW,QAAQ,MAAM,GAAG,iBAAiB;CAEnD,MAAM,WAAW,QAAQ,QAAQ,IAAI;CACrC,MAAM,UAAU,QAAQ,QAAQ,IAAI;CAEpC,MAAM,QACJ,aAAa,CAAC,IACV,KACA,QAAQ,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,UAAU,UAAU;CACvE,MAAM,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,MAAM,UAAU,EAAE;AAE7D,QAAO;EAAE;EAAU;EAAM;EAAO;;AAGlC,OAAO,MAAM,qBAAqB,YAChC,aAAa,QAAQ,CAAC","names":[],"sources":["../../src/utils/parseRequest.ts"],"version":3,"sourcesContent":["export type ParsedRequest = {\n filename: string;\n hash: string;\n query: string;\n};\n\nconst getFirstSuffixIndex = (request: string) => {\n const queryIdx = request.indexOf('?');\n const hashIdx = request.indexOf('#');\n\n if (queryIdx === -1) return hashIdx;\n if (hashIdx === -1) return queryIdx;\n\n return Math.min(queryIdx, hashIdx);\n};\n\nexport const parseRequest = (request: string): ParsedRequest => {\n const firstSuffixIndex = getFirstSuffixIndex(request);\n if (firstSuffixIndex === -1) {\n return { filename: request, hash: '', query: '' };\n }\n\n const filename = request.slice(0, firstSuffixIndex);\n\n const queryIdx = request.indexOf('?');\n const hashIdx = request.indexOf('#');\n\n const query =\n queryIdx === -1\n ? ''\n : request.slice(queryIdx + 1, hashIdx !== -1 ? hashIdx : undefined);\n const hash = hashIdx === -1 ? '' : request.slice(hashIdx + 1);\n\n return { filename, hash, query };\n};\n\nexport const stripQueryAndHash = (request: string) =>\n parseRequest(request).filename;\n"],"file":"parseRequest.js"}
|
package/esm/utils/peek.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const peek = (stack, offset = 1) => stack[stack.length - offset];
|
|
2
|
-
//# sourceMappingURL=peek.js.map
|
|
2
|
+
//# sourceMappingURL=peek.js.map
|
package/esm/utils/peek.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAAA,OAAO,MAAM,QAAW,OAAY,SAAS,MAC3C,MAAM,MAAM,SAAS","names":[],"sources":["../../src/utils/peek.ts"],"version":3,"sourcesContent":["export const peek = <T>(stack: T[], offset = 1): T =>\n stack[stack.length - offset];\n"],"file":"peek.js"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
import { createRequire } from "module";
|
|
3
|
+
import { dirname, join } from "path";
|
|
4
|
+
import { BaseProcessor } from "@wyw-in-js/processor-utils";
|
|
5
|
+
import { findPackageJSON, syncResolve } from "@wyw-in-js/shared";
|
|
6
|
+
const nodeRequire = createRequire(import.meta.url);
|
|
7
|
+
const definedTagsCache = new Map();
|
|
8
|
+
const resolvedTagResolverSourceCache = new Map();
|
|
9
|
+
const packageProcessorLookupCache = new Map();
|
|
10
|
+
const tagResolverProcessorLookupCache = new WeakMap();
|
|
11
|
+
const createTagResolverLookupCacheKey = (source, imported, filename) => `${filename ?? ""}\0${source}\0${imported}`;
|
|
12
|
+
const createPackageLookupCacheKey = (source, imported) => `${source}\0${imported}`;
|
|
13
|
+
const URL_SCHEME_RE = /^[A-Za-z][A-Za-z\d+.-]*:/;
|
|
14
|
+
const isPackageLookupCandidate = (source) => {
|
|
15
|
+
if (!source || source.startsWith(".") || source.startsWith("/") || source.startsWith("\\") || source.startsWith("\0") || source.startsWith("@/") || source.startsWith("~/") || source.startsWith("#") || source.includes("?") || source.includes("#") || URL_SCHEME_RE.test(source)) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
if (source.startsWith("@")) {
|
|
19
|
+
const [scope, pkg] = source.split("/", 2);
|
|
20
|
+
return scope.length > 1 && !!pkg;
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
};
|
|
24
|
+
const getTagResolverLookupCache = (tagResolver) => {
|
|
25
|
+
const existing = tagResolverProcessorLookupCache.get(tagResolver);
|
|
26
|
+
if (existing) {
|
|
27
|
+
return existing;
|
|
28
|
+
}
|
|
29
|
+
const created = new Map();
|
|
30
|
+
tagResolverProcessorLookupCache.set(tagResolver, created);
|
|
31
|
+
return created;
|
|
32
|
+
};
|
|
33
|
+
const getResolvedTagResolverSource = (source, sourceFile) => {
|
|
34
|
+
if (!sourceFile) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const key = `${sourceFile}\0${source}`;
|
|
38
|
+
if (resolvedTagResolverSourceCache.has(key)) {
|
|
39
|
+
return resolvedTagResolverSourceCache.get(key);
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const resolved = syncResolve(source, sourceFile, []);
|
|
43
|
+
resolvedTagResolverSourceCache.set(key, resolved);
|
|
44
|
+
return resolved;
|
|
45
|
+
} catch {
|
|
46
|
+
resolvedTagResolverSourceCache.set(key, undefined);
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const getDefinedTagsFromPackage = (pkgName, filename) => {
|
|
51
|
+
if (definedTagsCache.has(pkgName)) {
|
|
52
|
+
return definedTagsCache.get(pkgName);
|
|
53
|
+
}
|
|
54
|
+
const packageJSONPath = findPackageJSON(pkgName, filename);
|
|
55
|
+
if (!packageJSONPath) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
const packageDir = dirname(packageJSONPath);
|
|
59
|
+
const packageJSON = JSON.parse(readFileSync(packageJSONPath, "utf8"));
|
|
60
|
+
const definedTags = packageJSON["wyw-in-js"]?.tags;
|
|
61
|
+
const normalizedTags = definedTags ? Object.entries(definedTags).reduce((acc, [key, value]) => ({
|
|
62
|
+
...acc,
|
|
63
|
+
[key]: value.startsWith(".") ? join(packageDir, value) : nodeRequire.resolve(value, { paths: [packageDir] })
|
|
64
|
+
}), {}) : undefined;
|
|
65
|
+
definedTagsCache.set(pkgName, normalizedTags);
|
|
66
|
+
return normalizedTags;
|
|
67
|
+
};
|
|
68
|
+
const isValidProcessorClass = (module) => module instanceof BaseProcessor.constructor;
|
|
69
|
+
const getProcessorFromPackage = (packageName, tagName, filename) => {
|
|
70
|
+
const definedTags = getDefinedTagsFromPackage(packageName, filename);
|
|
71
|
+
const processorPath = definedTags?.[tagName];
|
|
72
|
+
if (!processorPath) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
const Processor = nodeRequire(processorPath).default;
|
|
76
|
+
if (!isValidProcessorClass(Processor)) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return Processor;
|
|
80
|
+
};
|
|
81
|
+
const getProcessorFromFile = (processorPath) => {
|
|
82
|
+
const Processor = nodeRequire(processorPath).default;
|
|
83
|
+
if (!isValidProcessorClass(Processor)) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
return Processor;
|
|
87
|
+
};
|
|
88
|
+
export const getProcessorForImport = ({ imported, source }, filename, options) => {
|
|
89
|
+
const { tagResolver } = options;
|
|
90
|
+
const packageLookupCandidate = isPackageLookupCandidate(source);
|
|
91
|
+
if (!tagResolver && !packageLookupCandidate) {
|
|
92
|
+
return [null, {
|
|
93
|
+
imported,
|
|
94
|
+
source
|
|
95
|
+
}];
|
|
96
|
+
}
|
|
97
|
+
const cacheKey = tagResolver ? createTagResolverLookupCacheKey(source, imported, filename) : createPackageLookupCacheKey(source, imported);
|
|
98
|
+
const lookupCache = tagResolver ? getTagResolverLookupCache(tagResolver) : packageProcessorLookupCache;
|
|
99
|
+
if (lookupCache.has(cacheKey)) {
|
|
100
|
+
return [lookupCache.get(cacheKey) ?? null, {
|
|
101
|
+
imported,
|
|
102
|
+
source
|
|
103
|
+
}];
|
|
104
|
+
}
|
|
105
|
+
let customFile = null;
|
|
106
|
+
if (tagResolver) {
|
|
107
|
+
const tagResolverMeta = {
|
|
108
|
+
sourceFile: filename,
|
|
109
|
+
resolvedSource: getResolvedTagResolverSource(source, filename)
|
|
110
|
+
};
|
|
111
|
+
customFile = tagResolver(source, imported, tagResolverMeta);
|
|
112
|
+
}
|
|
113
|
+
let processor = null;
|
|
114
|
+
if (customFile) {
|
|
115
|
+
processor = getProcessorFromFile(customFile);
|
|
116
|
+
} else if (packageLookupCandidate) {
|
|
117
|
+
processor = getProcessorFromPackage(source, imported, filename);
|
|
118
|
+
}
|
|
119
|
+
lookupCache.set(cacheKey, processor);
|
|
120
|
+
return [processor, {
|
|
121
|
+
imported,
|
|
122
|
+
source
|
|
123
|
+
}];
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=processorLookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","names":[],"sources":["../../src/utils/processorLookup.ts"],"version":3,"sourcesContent":["import { readFileSync } from 'fs';\nimport { createRequire } from 'module';\nimport { dirname, join } from 'path';\n\nimport { BaseProcessor } from '@wyw-in-js/processor-utils';\nimport type { TagSource } from '@wyw-in-js/processor-utils';\nimport { findPackageJSON, syncResolve } from '@wyw-in-js/shared';\nimport type { StrictOptions, TagResolverMeta } from '@wyw-in-js/shared';\n\nconst nodeRequire = createRequire(import.meta.url);\n\nexport type ProcessorClass = new (\n ...args: ConstructorParameters<typeof BaseProcessor>\n) => BaseProcessor;\n\nconst definedTagsCache = new Map<string, Record<string, string> | undefined>();\nconst resolvedTagResolverSourceCache = new Map<string, string | undefined>();\nconst packageProcessorLookupCache = new Map<string, ProcessorClass | null>();\nconst tagResolverProcessorLookupCache = new WeakMap<\n NonNullable<StrictOptions['tagResolver']>,\n Map<string, ProcessorClass | null>\n>();\n\nconst createTagResolverLookupCacheKey = (\n source: string,\n imported: string,\n filename: string | null | undefined\n): string => `${filename ?? ''}\\0${source}\\0${imported}`;\n\nconst createPackageLookupCacheKey = (\n source: string,\n imported: string\n): string => `${source}\\0${imported}`;\n\nconst URL_SCHEME_RE = /^[A-Za-z][A-Za-z\\d+.-]*:/;\n\nconst isPackageLookupCandidate = (source: string): boolean => {\n if (\n !source ||\n source.startsWith('.') ||\n source.startsWith('/') ||\n source.startsWith('\\\\') ||\n source.startsWith('\\0') ||\n source.startsWith('@/') ||\n source.startsWith('~/') ||\n source.startsWith('#') ||\n source.includes('?') ||\n source.includes('#') ||\n URL_SCHEME_RE.test(source)\n ) {\n return false;\n }\n\n if (source.startsWith('@')) {\n const [scope, pkg] = source.split('/', 2);\n return scope.length > 1 && !!pkg;\n }\n\n return true;\n};\n\nconst getTagResolverLookupCache = (\n tagResolver: NonNullable<StrictOptions['tagResolver']>\n): Map<string, ProcessorClass | null> => {\n const existing = tagResolverProcessorLookupCache.get(tagResolver);\n if (existing) {\n return existing;\n }\n\n const created = new Map<string, ProcessorClass | null>();\n tagResolverProcessorLookupCache.set(tagResolver, created);\n return created;\n};\n\nconst getResolvedTagResolverSource = (\n source: string,\n sourceFile: string | null | undefined\n): string | undefined => {\n if (!sourceFile) {\n return undefined;\n }\n\n const key = `${sourceFile}\\0${source}`;\n if (resolvedTagResolverSourceCache.has(key)) {\n return resolvedTagResolverSourceCache.get(key);\n }\n\n try {\n const resolved = syncResolve(source, sourceFile, []);\n resolvedTagResolverSourceCache.set(key, resolved);\n return resolved;\n } catch {\n resolvedTagResolverSourceCache.set(key, undefined);\n return undefined;\n }\n};\n\nconst getDefinedTagsFromPackage = (\n pkgName: string,\n filename: string | null | undefined\n): Record<string, string> | undefined => {\n if (definedTagsCache.has(pkgName)) {\n return definedTagsCache.get(pkgName);\n }\n\n const packageJSONPath = findPackageJSON(pkgName, filename);\n if (!packageJSONPath) {\n return undefined;\n }\n\n const packageDir = dirname(packageJSONPath);\n const packageJSON = JSON.parse(readFileSync(packageJSONPath, 'utf8'));\n const definedTags: Record<string, string> | undefined =\n packageJSON['wyw-in-js']?.tags;\n\n const normalizedTags = definedTags\n ? Object.entries(definedTags).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: value.startsWith('.')\n ? join(packageDir, value)\n : nodeRequire.resolve(value, { paths: [packageDir] }),\n }),\n {} as Record<string, string>\n )\n : undefined;\n\n definedTagsCache.set(pkgName, normalizedTags);\n\n return normalizedTags;\n};\n\nconst isValidProcessorClass = (module: unknown): module is ProcessorClass =>\n module instanceof BaseProcessor.constructor;\n\nconst getProcessorFromPackage = (\n packageName: string,\n tagName: string,\n filename: string | null | undefined\n): ProcessorClass | null => {\n const definedTags = getDefinedTagsFromPackage(packageName, filename);\n const processorPath = definedTags?.[tagName];\n if (!processorPath) {\n return null;\n }\n\n const Processor = nodeRequire(processorPath).default;\n if (!isValidProcessorClass(Processor)) {\n return null;\n }\n\n return Processor;\n};\n\nconst getProcessorFromFile = (processorPath: string): ProcessorClass | null => {\n const Processor = nodeRequire(processorPath).default;\n if (!isValidProcessorClass(Processor)) {\n return null;\n }\n\n return Processor;\n};\n\nexport const getProcessorForImport = (\n { imported, source }: { imported: string; source: string },\n filename: string | null | undefined,\n options: Pick<StrictOptions, 'tagResolver'>\n): [ProcessorClass | null, TagSource] => {\n const { tagResolver } = options;\n const packageLookupCandidate = isPackageLookupCandidate(source);\n\n if (!tagResolver && !packageLookupCandidate) {\n return [null, { imported, source }];\n }\n\n const cacheKey = tagResolver\n ? createTagResolverLookupCacheKey(source, imported, filename)\n : createPackageLookupCacheKey(source, imported);\n const lookupCache = tagResolver\n ? getTagResolverLookupCache(tagResolver)\n : packageProcessorLookupCache;\n\n if (lookupCache.has(cacheKey)) {\n return [lookupCache.get(cacheKey) ?? null, { imported, source }];\n }\n\n let customFile: string | null = null;\n if (tagResolver) {\n const tagResolverMeta: TagResolverMeta = {\n sourceFile: filename,\n resolvedSource: getResolvedTagResolverSource(source, filename),\n };\n\n customFile = tagResolver(source, imported, tagResolverMeta);\n }\n let processor: ProcessorClass | null = null;\n if (customFile) {\n processor = getProcessorFromFile(customFile);\n } else if (packageLookupCandidate) {\n processor = getProcessorFromPackage(source, imported, filename);\n }\n\n lookupCache.set(cacheKey, processor);\n return [processor, { imported, source }];\n};\n"],"file":"processorLookup.js"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { spawnSync } from "child_process";
|
|
2
|
+
import NativeModule from "module";
|
|
3
|
+
const NODE_CONDITIONAL_RESOLVE_SCRIPT = String.raw`
|
|
4
|
+
const fs = require('node:fs');
|
|
5
|
+
const Module = require('node:module');
|
|
6
|
+
|
|
7
|
+
const input = JSON.parse(fs.readFileSync(0, 'utf8'));
|
|
8
|
+
|
|
9
|
+
try {
|
|
10
|
+
const resolved = Module._resolveFilename(
|
|
11
|
+
input.id,
|
|
12
|
+
input.parent,
|
|
13
|
+
false,
|
|
14
|
+
input.conditions ? { conditions: new Set(input.conditions) } : undefined
|
|
15
|
+
);
|
|
16
|
+
fs.writeFileSync(1, JSON.stringify({ resolved }));
|
|
17
|
+
} catch (error) {
|
|
18
|
+
fs.writeFileSync(
|
|
19
|
+
1,
|
|
20
|
+
JSON.stringify({
|
|
21
|
+
error: {
|
|
22
|
+
code:
|
|
23
|
+
error && typeof error === 'object' && 'code' in error
|
|
24
|
+
? error.code
|
|
25
|
+
: undefined,
|
|
26
|
+
message: error instanceof Error ? error.message : String(error),
|
|
27
|
+
},
|
|
28
|
+
})
|
|
29
|
+
);
|
|
30
|
+
process.exitCode = 1;
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
const isBunRuntime = () => process.execPath.includes("bun");
|
|
34
|
+
const nativeResolveFilename = NativeModule._resolveFilename;
|
|
35
|
+
const resolveWithNodeProcess = (id, parent, conditions) => {
|
|
36
|
+
const nodeBinary = process.env.WYW_NODE_BINARY || "node";
|
|
37
|
+
const result = spawnSync(nodeBinary, ["-e", NODE_CONDITIONAL_RESOLVE_SCRIPT], {
|
|
38
|
+
encoding: "utf8",
|
|
39
|
+
input: JSON.stringify({
|
|
40
|
+
conditions: [...conditions],
|
|
41
|
+
id,
|
|
42
|
+
parent
|
|
43
|
+
}),
|
|
44
|
+
maxBuffer: 1024 * 1024
|
|
45
|
+
});
|
|
46
|
+
if (result.error) {
|
|
47
|
+
throw result.error;
|
|
48
|
+
}
|
|
49
|
+
let parsed = null;
|
|
50
|
+
const stdout = result.stdout.trim();
|
|
51
|
+
if (stdout) {
|
|
52
|
+
try {
|
|
53
|
+
parsed = JSON.parse(stdout);
|
|
54
|
+
} catch {
|
|
55
|
+
throw new Error([
|
|
56
|
+
"[wyw-in-js] Failed to parse Node resolver fallback output.",
|
|
57
|
+
`stdout: ${stdout}`,
|
|
58
|
+
result.stderr ? `stderr: ${result.stderr.trim()}` : ""
|
|
59
|
+
].filter(Boolean).join("\n"));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (parsed?.error) {
|
|
63
|
+
const error = new Error(parsed.error.message);
|
|
64
|
+
error.code = parsed.error.code;
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
if (result.status !== 0 || !parsed?.resolved) {
|
|
68
|
+
throw new Error([
|
|
69
|
+
"[wyw-in-js] Node resolver fallback failed.",
|
|
70
|
+
`status: ${result.status ?? "null"}`,
|
|
71
|
+
result.stderr ? `stderr: ${result.stderr.trim()}` : ""
|
|
72
|
+
].filter(Boolean).join("\n"));
|
|
73
|
+
}
|
|
74
|
+
return parsed.resolved;
|
|
75
|
+
};
|
|
76
|
+
export const resolveFilenameWithConditions = (moduleImpl, id, parent, conditions) => {
|
|
77
|
+
const resolveOptions = conditions ? { conditions } : undefined;
|
|
78
|
+
const usesNativeResolver = moduleImpl._resolveFilename === nativeResolveFilename;
|
|
79
|
+
if (!conditions || !isBunRuntime() || !usesNativeResolver) {
|
|
80
|
+
return moduleImpl._resolveFilename(id, parent, false, resolveOptions);
|
|
81
|
+
}
|
|
82
|
+
// Bun crashes on macOS/Silicon in this exact path:
|
|
83
|
+
// Module._resolveFilename(specifier, parent, false, { conditions })
|
|
84
|
+
// We reproduced it both with a tiny standalone script and through the
|
|
85
|
+
// `EvalBroker > passes conditionNames to node fallback resolution` test,
|
|
86
|
+
// including on Bun 1.3.13. Keep this fallback narrow: only conditioned
|
|
87
|
+
// resolution under Bun goes through a short-lived Node subprocess.
|
|
88
|
+
//
|
|
89
|
+
// Cleanup criteria:
|
|
90
|
+
// 1. Bun passes the minimal local `_resolveFilename(..., { conditions })`
|
|
91
|
+
// repro on macOS without segfaulting.
|
|
92
|
+
// 2. The conditionNames runner path passes without this fallback.
|
|
93
|
+
//
|
|
94
|
+
// As of 2026-04-20 we did not find an exact open upstream Bun issue for this
|
|
95
|
+
// `_resolveFilename(..., { conditions })` crash, so keep the comment factual
|
|
96
|
+
// and the workaround self-contained.
|
|
97
|
+
return resolveWithNodeProcess(id, parent, conditions);
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=resolveWithConditions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"AAAA,SAAS,iBAAiB;AAC1B,OAAO,kBAAkB;AAsBzB,MAAM,kCAAkC,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BlD,MAAM,qBAAqB,QAAQ,SAAS,SAAS,MAAM;AAE3D,MAAM,wBACJ,aACA;AAEF,MAAM,0BACJ,IACA,QACA,eACW;CACX,MAAM,aAAa,QAAQ,IAAI,mBAAmB;CAClD,MAAM,SAAS,UACb,YACA,CAAC,MAAM,gCAAgC,EACvC;EACE,UAAU;EACV,OAAO,KAAK,UAAU;GACpB,YAAY,CAAC,GAAG,WAAW;GAC3B;GACA;GACD,CAAC;EACF,WAAW,OAAO;EACnB,CACF;AAED,KAAI,OAAO,OAAO;AAChB,QAAM,OAAO;;CAGf,IAAI,SAA8C;CAClD,MAAM,SAAS,OAAO,OAAO,MAAM;AACnC,KAAI,QAAQ;AACV,MAAI;AACF,YAAS,KAAK,MAAM,OAAO;UACrB;AACN,SAAM,IAAI,MACR;IACE;IACA,WAAW;IACX,OAAO,SAAS,WAAW,OAAO,OAAO,MAAM,KAAK;IACrD,CACE,OAAO,QAAQ,CACf,KAAK,KAAK,CACd;;;AAIL,KAAI,QAAQ,OAAO;EACjB,MAAM,QAAQ,IAAI,MAAM,OAAO,MAAM,QAAQ;AAC7C,QAAM,OAAO,OAAO,MAAM;AAC1B,QAAM;;AAGR,KAAI,OAAO,WAAW,KAAK,CAAC,QAAQ,UAAU;AAC5C,QAAM,IAAI,MACR;GACE;GACA,WAAW,OAAO,UAAU;GAC5B,OAAO,SAAS,WAAW,OAAO,OAAO,MAAM,KAAK;GACrD,CACE,OAAO,QAAQ,CACf,KAAK,KAAK,CACd;;AAGH,QAAO,OAAO;;AAGhB,OAAO,MAAM,iCACX,YACA,IACA,QACA,eACW;CACX,MAAM,iBAAiB,aAAa,EAAE,YAAY,GAAG;CACrD,MAAM,qBACJ,WAAW,qBAAqB;AAElC,KAAI,CAAC,cAAc,CAAC,cAAc,IAAI,CAAC,oBAAoB;AACzD,SAAO,WAAW,iBAAiB,IAAI,QAAQ,OAAO,eAAe;;;;;;;;;;;;;;;;;AAkBvE,QAAO,uBAAuB,IAAI,QAAQ,WAAW","names":[],"sources":["../../src/utils/resolveWithConditions.ts"],"version":3,"sourcesContent":["import { spawnSync } from 'child_process';\nimport NativeModule from 'module';\n\ntype ResolveFilenameParent = {\n filename: string;\n id: string;\n paths: string[];\n};\n\ntype ResolveFilenameModuleImplementation = {\n _resolveFilename: (\n id: string,\n options: ResolveFilenameParent,\n isMain?: boolean,\n resolveOptions?: { conditions?: Set<string> }\n ) => string;\n};\n\ntype NodeConditionalResolveResult = {\n error?: { code?: string; message: string };\n resolved?: string;\n};\n\nconst NODE_CONDITIONAL_RESOLVE_SCRIPT = String.raw`\nconst fs = require('node:fs');\nconst Module = require('node:module');\n\nconst input = JSON.parse(fs.readFileSync(0, 'utf8'));\n\ntry {\n const resolved = Module._resolveFilename(\n input.id,\n input.parent,\n false,\n input.conditions ? { conditions: new Set(input.conditions) } : undefined\n );\n fs.writeFileSync(1, JSON.stringify({ resolved }));\n} catch (error) {\n fs.writeFileSync(\n 1,\n JSON.stringify({\n error: {\n code:\n error && typeof error === 'object' && 'code' in error\n ? error.code\n : undefined,\n message: error instanceof Error ? error.message : String(error),\n },\n })\n );\n process.exitCode = 1;\n}\n`;\n\nconst isBunRuntime = () => process.execPath.includes('bun');\n\nconst nativeResolveFilename = (\n NativeModule as unknown as ResolveFilenameModuleImplementation\n)._resolveFilename;\n\nconst resolveWithNodeProcess = (\n id: string,\n parent: ResolveFilenameParent,\n conditions: Set<string>\n): string => {\n const nodeBinary = process.env.WYW_NODE_BINARY || 'node';\n const result = spawnSync(\n nodeBinary,\n ['-e', NODE_CONDITIONAL_RESOLVE_SCRIPT],\n {\n encoding: 'utf8',\n input: JSON.stringify({\n conditions: [...conditions],\n id,\n parent,\n }),\n maxBuffer: 1024 * 1024,\n }\n );\n\n if (result.error) {\n throw result.error;\n }\n\n let parsed: NodeConditionalResolveResult | null = null;\n const stdout = result.stdout.trim();\n if (stdout) {\n try {\n parsed = JSON.parse(stdout) as NodeConditionalResolveResult;\n } catch {\n throw new Error(\n [\n '[wyw-in-js] Failed to parse Node resolver fallback output.',\n `stdout: ${stdout}`,\n result.stderr ? `stderr: ${result.stderr.trim()}` : '',\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n }\n\n if (parsed?.error) {\n const error = new Error(parsed.error.message) as NodeJS.ErrnoException;\n error.code = parsed.error.code;\n throw error;\n }\n\n if (result.status !== 0 || !parsed?.resolved) {\n throw new Error(\n [\n '[wyw-in-js] Node resolver fallback failed.',\n `status: ${result.status ?? 'null'}`,\n result.stderr ? `stderr: ${result.stderr.trim()}` : '',\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n\n return parsed.resolved;\n};\n\nexport const resolveFilenameWithConditions = (\n moduleImpl: ResolveFilenameModuleImplementation,\n id: string,\n parent: ResolveFilenameParent,\n conditions?: Set<string>\n): string => {\n const resolveOptions = conditions ? { conditions } : undefined;\n const usesNativeResolver =\n moduleImpl._resolveFilename === nativeResolveFilename;\n\n if (!conditions || !isBunRuntime() || !usesNativeResolver) {\n return moduleImpl._resolveFilename(id, parent, false, resolveOptions);\n }\n\n // Bun crashes on macOS/Silicon in this exact path:\n // Module._resolveFilename(specifier, parent, false, { conditions })\n // We reproduced it both with a tiny standalone script and through the\n // `EvalBroker > passes conditionNames to node fallback resolution` test,\n // including on Bun 1.3.13. Keep this fallback narrow: only conditioned\n // resolution under Bun goes through a short-lived Node subprocess.\n //\n // Cleanup criteria:\n // 1. Bun passes the minimal local `_resolveFilename(..., { conditions })`\n // repro on macOS without segfaulting.\n // 2. The conditionNames runner path passes without this fallback.\n //\n // As of 2026-04-20 we did not find an exact open upstream Bun issue for this\n // `_resolveFilename(..., { conditions })` crash, so keep the comment factual\n // and the workaround self-contained.\n return resolveWithNodeProcess(id, parent, conditions);\n};\n"],"file":"resolveWithConditions.js"}
|