@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAAA,SAAS,gCAAgC;AACzC,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,eAAe;AAOxB,OAAO,MAAM,uBAAuB,EAClC,QAAQ,IAAI,0BAA0B,EACtC,aACA,eAAe,aAAa,OAC5B,iBAAiB,cACjB,MAAM,SACN,SACA,uBACgC;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACD","names":[],"sources":["../../../src/transform/helpers/withDefaultServices.ts"],"version":3,"sourcesContent":["import { TransformCacheCollection } from '../../cache';\nimport { EventEmitter } from '../../utils/EventEmitter';\nimport { loadAndParse } from '../Entrypoint.helpers';\nimport { rootLog } from '../rootLog';\nimport type { Services } from '../types';\n\ntype RequiredServices = 'options';\nexport type PartialServices = Partial<Omit<Services, RequiredServices>> &\n Pick<Services, RequiredServices>;\n\nexport const withDefaultServices = ({\n cache = new TransformCacheCollection(),\n emitWarning,\n eventEmitter = EventEmitter.dummy,\n loadAndParseFn = loadAndParse,\n log = rootLog,\n options,\n asyncResolveKey,\n}: PartialServices): Services => ({\n cache,\n emitWarning,\n eventEmitter,\n loadAndParseFn,\n log,\n options,\n asyncResolveKey,\n});\n"],"file":"withDefaultServices.js"}
|
|
@@ -1,153 +1,141 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { parseSync } from "oxc-parser";
|
|
2
|
+
const isNode = (value) => !!value && typeof value === "object" && "type" in value && typeof value.type === "string";
|
|
3
|
+
const getNodeType = (node) => node.type;
|
|
4
|
+
const parseOxc = (code, filename) => {
|
|
5
|
+
const parsed = parseSync(filename, code, {
|
|
6
|
+
astType: filename.endsWith(".ts") || filename.endsWith(".tsx") ? "ts" : "js",
|
|
7
|
+
range: true,
|
|
8
|
+
sourceType: "unambiguous"
|
|
9
|
+
});
|
|
10
|
+
const fatalError = parsed.errors.find((error) => error.severity === "Error");
|
|
11
|
+
if (fatalError) {
|
|
12
|
+
throw new Error(fatalError.message);
|
|
13
|
+
}
|
|
14
|
+
return parsed.program;
|
|
15
|
+
};
|
|
16
|
+
const isTypeOnlyImport = (statement) => {
|
|
17
|
+
if (statement.importKind === "type") {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
return Array.isArray(statement.specifiers) ? statement.specifiers.every((specifier) => isNode(specifier) && specifier.type === "ImportSpecifier" && specifier.importKind === "type") : false;
|
|
21
|
+
};
|
|
22
|
+
const isTypeOnlyReExport = (statement) => !!statement.source && statement.exportKind === "type";
|
|
23
|
+
const isWrapperExpression = (node) => node.type === "TSAsExpression" || node.type === "TSSatisfiesExpression" || node.type === "TSNonNullExpression" || node.type === "TSInstantiationExpression" || node.type === "TSTypeAssertion" || node.type === "ParenthesizedExpression";
|
|
24
|
+
const unwrapExpression = (expr) => {
|
|
25
|
+
let current = expr;
|
|
26
|
+
while (isWrapperExpression(current)) {
|
|
27
|
+
current = current.expression;
|
|
28
|
+
}
|
|
29
|
+
return current;
|
|
30
|
+
};
|
|
31
|
+
const isSafeLiteral = (expr) => getNodeType(expr) === "Literal" && (() => {
|
|
32
|
+
const { value } = expr;
|
|
33
|
+
return value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean" || typeof value === "bigint";
|
|
34
|
+
})();
|
|
35
|
+
const isSafeExpression = (expr) => {
|
|
36
|
+
const unwrapped = unwrapExpression(expr);
|
|
37
|
+
const type = unwrapped.type;
|
|
38
|
+
if (isSafeLiteral(unwrapped)) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
if (type === "ArrowFunctionExpression" || type === "FunctionExpression") {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
if (type === "Identifier") {
|
|
45
|
+
const identifier = unwrapped;
|
|
46
|
+
return identifier.name === "undefined" || identifier.name === "NaN" || identifier.name === "Infinity";
|
|
47
|
+
}
|
|
48
|
+
if (type === "TemplateLiteral") {
|
|
49
|
+
return unwrapped.expressions.every((item) => isSafeExpression(item));
|
|
50
|
+
}
|
|
51
|
+
if (type === "UnaryExpression") {
|
|
52
|
+
return isSafeExpression(unwrapped.argument);
|
|
53
|
+
}
|
|
54
|
+
if (type === "BinaryExpression" || type === "LogicalExpression") {
|
|
55
|
+
const binaryLike = unwrapped;
|
|
56
|
+
return isSafeExpression(binaryLike.left) && isSafeExpression(binaryLike.right);
|
|
57
|
+
}
|
|
58
|
+
if (type === "ConditionalExpression") {
|
|
59
|
+
const conditional = unwrapped;
|
|
60
|
+
return isSafeExpression(conditional.test) && isSafeExpression(conditional.consequent) && isSafeExpression(conditional.alternate);
|
|
61
|
+
}
|
|
62
|
+
if (type === "ArrayExpression") {
|
|
63
|
+
return unwrapped.elements.every((item) => {
|
|
64
|
+
if (!item) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
if (item.type === "SpreadElement") {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
return isSafeExpression(item);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (type === "ObjectExpression") {
|
|
74
|
+
return unwrapped.properties.every((property) => {
|
|
75
|
+
if (property.type === "SpreadElement") {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
const propertyNode = property;
|
|
79
|
+
if (propertyNode.computed) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
if (propertyNode.method) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
return isNode(propertyNode.value) && isSafeExpression(propertyNode.value);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
if (type === "CallExpression" || type === "NewExpression" || type === "TaggedTemplateExpression" || type === "AwaitExpression" || type === "YieldExpression" || type === "UpdateExpression" || type === "AssignmentExpression" || type === "SequenceExpression" || type === "ClassExpression" || type === "ClassDeclaration") {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
};
|
|
93
|
+
const isSafeDeclarator = (declarator) => !isNode(declarator.init) || isSafeExpression(declarator.init);
|
|
94
|
+
const isSafeVariableDeclaration = (statement) => statement.declarations.every((declarator) => isSafeDeclarator(declarator));
|
|
95
|
+
const isSafeStatement = (statement) => {
|
|
96
|
+
if (statement.type.startsWith("TS") || statement.type.startsWith("JSDoc")) {
|
|
97
|
+
return statement.type !== "TSEnumDeclaration";
|
|
98
|
+
}
|
|
99
|
+
if (statement.type === "ImportDeclaration") {
|
|
100
|
+
return isTypeOnlyImport(statement);
|
|
101
|
+
}
|
|
102
|
+
if (statement.type === "ExportAllDeclaration") {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
if (statement.type === "ExportNamedDeclaration") {
|
|
106
|
+
if (!isNode(statement.declaration)) {
|
|
107
|
+
return !isNode(statement.source) || isTypeOnlyReExport(statement);
|
|
108
|
+
}
|
|
109
|
+
if (statement.declaration.type === "FunctionDeclaration") {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
if (statement.declaration.type === "ClassDeclaration") {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
return statement.declaration.type === "VariableDeclaration" && isSafeVariableDeclaration(statement.declaration);
|
|
116
|
+
}
|
|
117
|
+
if (statement.type === "ExportDefaultDeclaration") {
|
|
118
|
+
const { declaration } = statement;
|
|
119
|
+
if (!isNode(declaration)) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
if (declaration.type === "FunctionDeclaration" || declaration.type === "FunctionExpression" || declaration.type === "ArrowFunctionExpression" || declaration.type === "ClassExpression" || declaration.type === "ClassDeclaration") {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
return isSafeExpression(declaration);
|
|
126
|
+
}
|
|
127
|
+
if (statement.type === "VariableDeclaration") {
|
|
128
|
+
return isSafeVariableDeclaration(statement);
|
|
129
|
+
}
|
|
130
|
+
if (statement.type === "FunctionDeclaration" || statement.type === "EmptyStatement") {
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
if (statement.type === "ExpressionStatement") {
|
|
134
|
+
return isNode(statement.expression) && isSafeLiteral(statement.expression);
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
};
|
|
138
|
+
export function isStaticallyEvaluatableModule(code, filename) {
|
|
139
|
+
return parseOxc(code, filename).body.every((statement) => isSafeStatement(statement));
|
|
7
140
|
}
|
|
8
|
-
|
|
9
|
-
if (!statement.source) {
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
12
|
-
return statement.exportKind === 'type';
|
|
13
|
-
}
|
|
14
|
-
function unwrapExpression(expr) {
|
|
15
|
-
let current = expr;
|
|
16
|
-
for (;;) {
|
|
17
|
-
if (isTSAsExpression(current)) {
|
|
18
|
-
current = current.expression;
|
|
19
|
-
// eslint-disable-next-line no-continue
|
|
20
|
-
continue;
|
|
21
|
-
}
|
|
22
|
-
if (isTSSatisfiesExpression(current)) {
|
|
23
|
-
current = current.expression;
|
|
24
|
-
// eslint-disable-next-line no-continue
|
|
25
|
-
continue;
|
|
26
|
-
}
|
|
27
|
-
if (isTSNonNullExpression(current)) {
|
|
28
|
-
current = current.expression;
|
|
29
|
-
// eslint-disable-next-line no-continue
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
if (isTSInstantiationExpression(current)) {
|
|
33
|
-
current = current.expression;
|
|
34
|
-
// eslint-disable-next-line no-continue
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
if (isParenthesizedExpression(current)) {
|
|
38
|
-
current = current.expression;
|
|
39
|
-
// eslint-disable-next-line no-continue
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
return current;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function isSafeExpression(expr) {
|
|
46
|
-
const unwrapped = unwrapExpression(expr);
|
|
47
|
-
if (isStringLiteral(unwrapped) || isNumericLiteral(unwrapped) || isBooleanLiteral(unwrapped) || isNullLiteral(unwrapped) || isBigIntLiteral(unwrapped)) {
|
|
48
|
-
return true;
|
|
49
|
-
}
|
|
50
|
-
if (isArrowFunctionExpression(unwrapped) || isFunctionExpression(unwrapped)) {
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
if (isIdentifier(unwrapped)) {
|
|
54
|
-
return unwrapped.name === 'undefined' || unwrapped.name === 'NaN' || unwrapped.name === 'Infinity';
|
|
55
|
-
}
|
|
56
|
-
if (isTemplateLiteral(unwrapped)) {
|
|
57
|
-
return unwrapped.expressions.every(item => isExpression(item) && isSafeExpression(item));
|
|
58
|
-
}
|
|
59
|
-
if (isUnaryExpression(unwrapped)) {
|
|
60
|
-
return isSafeExpression(unwrapped.argument);
|
|
61
|
-
}
|
|
62
|
-
if (isBinaryExpression(unwrapped) || isLogicalExpression(unwrapped)) {
|
|
63
|
-
return isSafeExpression(unwrapped.left) && isSafeExpression(unwrapped.right);
|
|
64
|
-
}
|
|
65
|
-
if (isConditionalExpression(unwrapped)) {
|
|
66
|
-
return isSafeExpression(unwrapped.test) && isSafeExpression(unwrapped.consequent) && isSafeExpression(unwrapped.alternate);
|
|
67
|
-
}
|
|
68
|
-
if (isArrayExpression(unwrapped)) {
|
|
69
|
-
return unwrapped.elements.every(item => {
|
|
70
|
-
if (item === null) return true;
|
|
71
|
-
if (isSpreadElement(item)) return false;
|
|
72
|
-
return isSafeExpression(item);
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
if (isObjectExpression(unwrapped)) {
|
|
76
|
-
return unwrapped.properties.every(prop => {
|
|
77
|
-
if (isSpreadElement(prop)) {
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
if (isObjectMethod(prop)) {
|
|
81
|
-
return !prop.computed;
|
|
82
|
-
}
|
|
83
|
-
if (isObjectProperty(prop)) {
|
|
84
|
-
if (prop.computed) {
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
return isExpression(prop.value) && isSafeExpression(prop.value);
|
|
88
|
-
}
|
|
89
|
-
return false;
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
if (isCallExpression(unwrapped) || isNewExpression(unwrapped) || isTaggedTemplateExpression(unwrapped) || isAwaitExpression(unwrapped) || isYieldExpression(unwrapped) || isUpdateExpression(unwrapped) || isAssignmentExpression(unwrapped) || isSequenceExpression(unwrapped)) {
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
function isSafeDeclarator(declarator) {
|
|
98
|
-
if (!declarator.init) {
|
|
99
|
-
return true;
|
|
100
|
-
}
|
|
101
|
-
return isSafeExpression(declarator.init);
|
|
102
|
-
}
|
|
103
|
-
function isSafeVariableDeclaration(decl) {
|
|
104
|
-
return decl.declarations.every(isSafeDeclarator);
|
|
105
|
-
}
|
|
106
|
-
function isSafeStatement(statement) {
|
|
107
|
-
if (isImportDeclaration(statement)) {
|
|
108
|
-
return isTypeOnlyImport(statement);
|
|
109
|
-
}
|
|
110
|
-
if (isExportAllDeclaration(statement)) {
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
if (isExportNamedDeclaration(statement)) {
|
|
114
|
-
if (!statement.declaration) {
|
|
115
|
-
return !statement.source || isTypeOnlyReExport(statement);
|
|
116
|
-
}
|
|
117
|
-
if (isFunctionDeclaration(statement.declaration)) {
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
if (isClassDeclaration(statement.declaration)) {
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
if (statement.declaration.type === 'VariableDeclaration') {
|
|
124
|
-
return isSafeVariableDeclaration(statement.declaration);
|
|
125
|
-
}
|
|
126
|
-
return false;
|
|
127
|
-
}
|
|
128
|
-
if (isExportDefaultDeclaration(statement)) {
|
|
129
|
-
const decl = statement.declaration;
|
|
130
|
-
if (isFunctionDeclaration(decl) || isFunctionExpression(decl) || isArrowFunctionExpression(decl) || isClassExpression(decl) || isClassDeclaration(decl)) {
|
|
131
|
-
return false;
|
|
132
|
-
}
|
|
133
|
-
return isSafeExpression(decl);
|
|
134
|
-
}
|
|
135
|
-
if (statement.type === 'VariableDeclaration') {
|
|
136
|
-
return isSafeVariableDeclaration(statement);
|
|
137
|
-
}
|
|
138
|
-
if (isFunctionDeclaration(statement)) {
|
|
139
|
-
return true;
|
|
140
|
-
}
|
|
141
|
-
if (isEmptyStatement(statement)) {
|
|
142
|
-
return true;
|
|
143
|
-
}
|
|
144
|
-
if (isExpressionStatement(statement)) {
|
|
145
|
-
// Directives (like "use strict") are safe.
|
|
146
|
-
return isStringLiteral(statement.expression);
|
|
147
|
-
}
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
export function isStaticallyEvaluatableModule(ast) {
|
|
151
|
-
return ast.program.body.every(isSafeStatement);
|
|
152
|
-
}
|
|
153
|
-
//# sourceMappingURL=isStaticallyEvaluatableModule.js.map
|
|
141
|
+
//# sourceMappingURL=isStaticallyEvaluatableModule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isStaticallyEvaluatableModule.js","names":["isArrayExpression","isArrowFunctionExpression","isAssignmentExpression","isAwaitExpression","isBinaryExpression","isBigIntLiteral","isBooleanLiteral","isCallExpression","isClassDeclaration","isClassExpression","isConditionalExpression","isEmptyStatement","isExportAllDeclaration","isExportDefaultDeclaration","isExportNamedDeclaration","isExpression","isExpressionStatement","isFunctionDeclaration","isFunctionExpression","isIdentifier","isImportDeclaration","isImportSpecifier","isLogicalExpression","isNewExpression","isNullLiteral","isNumericLiteral","isObjectExpression","isObjectMethod","isObjectProperty","isParenthesizedExpression","isSequenceExpression","isSpreadElement","isStringLiteral","isTaggedTemplateExpression","isTemplateLiteral","isTSAsExpression","isTSInstantiationExpression","isTSNonNullExpression","isTSSatisfiesExpression","isUnaryExpression","isUpdateExpression","isYieldExpression","isTypeOnlyImport","statement","importKind","specifiers","every","specifier","isTypeOnlyReExport","source","exportKind","unwrapExpression","expr","current","expression","isSafeExpression","unwrapped","name","expressions","item","argument","left","right","test","consequent","alternate","elements","properties","prop","computed","value","isSafeDeclarator","declarator","init","isSafeVariableDeclaration","decl","declarations","isSafeStatement","declaration","type","isStaticallyEvaluatableModule","ast","program","body"],"sources":["../../src/transform/isStaticallyEvaluatableModule.ts"],"sourcesContent":["import type {\n Expression,\n ImportDeclaration,\n ExportNamedDeclaration,\n File,\n Statement,\n VariableDeclaration,\n VariableDeclarator,\n} from '@babel/types';\nimport {\n isArrayExpression,\n isArrowFunctionExpression,\n isAssignmentExpression,\n isAwaitExpression,\n isBinaryExpression,\n isBigIntLiteral,\n isBooleanLiteral,\n isCallExpression,\n isClassDeclaration,\n isClassExpression,\n isConditionalExpression,\n isEmptyStatement,\n isExportAllDeclaration,\n isExportDefaultDeclaration,\n isExportNamedDeclaration,\n isExpression,\n isExpressionStatement,\n isFunctionDeclaration,\n isFunctionExpression,\n isIdentifier,\n isImportDeclaration,\n isImportSpecifier,\n isLogicalExpression,\n isNewExpression,\n isNullLiteral,\n isNumericLiteral,\n isObjectExpression,\n isObjectMethod,\n isObjectProperty,\n isParenthesizedExpression,\n isSequenceExpression,\n isSpreadElement,\n isStringLiteral,\n isTaggedTemplateExpression,\n isTemplateLiteral,\n isTSAsExpression,\n isTSInstantiationExpression,\n isTSNonNullExpression,\n isTSSatisfiesExpression,\n isUnaryExpression,\n isUpdateExpression,\n isYieldExpression,\n} from '@babel/types';\n\nfunction isTypeOnlyImport(statement: ImportDeclaration): boolean {\n if (statement.importKind === 'type') {\n return true;\n }\n\n return statement.specifiers.every(\n (specifier) =>\n isImportSpecifier(specifier) && specifier.importKind === 'type'\n );\n}\n\nfunction isTypeOnlyReExport(statement: ExportNamedDeclaration): boolean {\n if (!statement.source) {\n return false;\n }\n\n return statement.exportKind === 'type';\n}\n\nfunction unwrapExpression(expr: Expression): Expression {\n let current: Expression = expr;\n\n for (;;) {\n if (isTSAsExpression(current)) {\n current = current.expression;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isTSSatisfiesExpression(current)) {\n current = current.expression;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isTSNonNullExpression(current)) {\n current = current.expression;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isTSInstantiationExpression(current)) {\n current = current.expression;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isParenthesizedExpression(current)) {\n current = current.expression;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n return current;\n }\n}\n\nfunction isSafeExpression(expr: Expression): boolean {\n const unwrapped = unwrapExpression(expr);\n\n if (\n isStringLiteral(unwrapped) ||\n isNumericLiteral(unwrapped) ||\n isBooleanLiteral(unwrapped) ||\n isNullLiteral(unwrapped) ||\n isBigIntLiteral(unwrapped)\n ) {\n return true;\n }\n\n if (isArrowFunctionExpression(unwrapped) || isFunctionExpression(unwrapped)) {\n return true;\n }\n\n if (isIdentifier(unwrapped)) {\n return (\n unwrapped.name === 'undefined' ||\n unwrapped.name === 'NaN' ||\n unwrapped.name === 'Infinity'\n );\n }\n\n if (isTemplateLiteral(unwrapped)) {\n return unwrapped.expressions.every(\n (item) => isExpression(item) && isSafeExpression(item)\n );\n }\n\n if (isUnaryExpression(unwrapped)) {\n return isSafeExpression(unwrapped.argument as Expression);\n }\n\n if (isBinaryExpression(unwrapped) || isLogicalExpression(unwrapped)) {\n return (\n isSafeExpression(unwrapped.left as Expression) &&\n isSafeExpression(unwrapped.right as Expression)\n );\n }\n\n if (isConditionalExpression(unwrapped)) {\n return (\n isSafeExpression(unwrapped.test) &&\n isSafeExpression(unwrapped.consequent) &&\n isSafeExpression(unwrapped.alternate)\n );\n }\n\n if (isArrayExpression(unwrapped)) {\n return unwrapped.elements.every((item) => {\n if (item === null) return true;\n if (isSpreadElement(item)) return false;\n return isSafeExpression(item);\n });\n }\n\n if (isObjectExpression(unwrapped)) {\n return unwrapped.properties.every((prop) => {\n if (isSpreadElement(prop)) {\n return false;\n }\n\n if (isObjectMethod(prop)) {\n return !prop.computed;\n }\n\n if (isObjectProperty(prop)) {\n if (prop.computed) {\n return false;\n }\n\n return isExpression(prop.value) && isSafeExpression(prop.value);\n }\n\n return false;\n });\n }\n\n if (\n isCallExpression(unwrapped) ||\n isNewExpression(unwrapped) ||\n isTaggedTemplateExpression(unwrapped) ||\n isAwaitExpression(unwrapped) ||\n isYieldExpression(unwrapped) ||\n isUpdateExpression(unwrapped) ||\n isAssignmentExpression(unwrapped) ||\n isSequenceExpression(unwrapped)\n ) {\n return false;\n }\n\n return false;\n}\n\nfunction isSafeDeclarator(declarator: VariableDeclarator): boolean {\n if (!declarator.init) {\n return true;\n }\n\n return isSafeExpression(declarator.init);\n}\n\nfunction isSafeVariableDeclaration(decl: VariableDeclaration): boolean {\n return decl.declarations.every(isSafeDeclarator);\n}\n\nfunction isSafeStatement(statement: Statement): boolean {\n if (isImportDeclaration(statement)) {\n return isTypeOnlyImport(statement);\n }\n\n if (isExportAllDeclaration(statement)) {\n return false;\n }\n\n if (isExportNamedDeclaration(statement)) {\n if (!statement.declaration) {\n return !statement.source || isTypeOnlyReExport(statement);\n }\n\n if (isFunctionDeclaration(statement.declaration)) {\n return true;\n }\n\n if (isClassDeclaration(statement.declaration)) {\n return false;\n }\n\n if (statement.declaration.type === 'VariableDeclaration') {\n return isSafeVariableDeclaration(statement.declaration);\n }\n\n return false;\n }\n\n if (isExportDefaultDeclaration(statement)) {\n const decl = statement.declaration;\n if (\n isFunctionDeclaration(decl) ||\n isFunctionExpression(decl) ||\n isArrowFunctionExpression(decl) ||\n isClassExpression(decl) ||\n isClassDeclaration(decl)\n ) {\n return false;\n }\n\n return isSafeExpression(decl as Expression);\n }\n\n if (statement.type === 'VariableDeclaration') {\n return isSafeVariableDeclaration(statement);\n }\n\n if (isFunctionDeclaration(statement)) {\n return true;\n }\n\n if (isEmptyStatement(statement)) {\n return true;\n }\n\n if (isExpressionStatement(statement)) {\n // Directives (like \"use strict\") are safe.\n return isStringLiteral(statement.expression);\n }\n\n return false;\n}\n\nexport function isStaticallyEvaluatableModule(ast: File): boolean {\n return ast.program.body.every(isSafeStatement);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"mappings":"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","names":[],"sources":["../../src/transform/isStaticallyEvaluatableModule.ts"],"version":3,"sourcesContent":["import { parseSync } from 'oxc-parser';\nimport type {\n ExportNamedDeclaration,\n ImportDeclaration,\n Node,\n Program,\n VariableDeclaration,\n VariableDeclarator,\n} from 'oxc-parser';\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 getNodeType = (node: Pick<Node, 'type'>): string => node.type as string;\n\nconst parseOxc = (code: string, filename: string): Program => {\n const parsed = parseSync(filename, code, {\n astType:\n filename.endsWith('.ts') || filename.endsWith('.tsx') ? 'ts' : 'js',\n range: true,\n sourceType: 'unambiguous',\n });\n const fatalError = parsed.errors.find((error) => error.severity === 'Error');\n if (fatalError) {\n throw new Error(fatalError.message);\n }\n\n return parsed.program as Program;\n};\n\nconst isTypeOnlyImport = (statement: ImportDeclaration): boolean => {\n if (statement.importKind === 'type') {\n return true;\n }\n\n return Array.isArray(statement.specifiers)\n ? statement.specifiers.every(\n (specifier) =>\n isNode(specifier) &&\n specifier.type === 'ImportSpecifier' &&\n specifier.importKind === 'type'\n )\n : false;\n};\n\nconst isTypeOnlyReExport = (statement: ExportNamedDeclaration): boolean =>\n !!statement.source && statement.exportKind === 'type';\n\nconst isWrapperExpression = (node: Node): node is Node & { expression: Node } =>\n node.type === 'TSAsExpression' ||\n node.type === 'TSSatisfiesExpression' ||\n node.type === 'TSNonNullExpression' ||\n node.type === 'TSInstantiationExpression' ||\n node.type === 'TSTypeAssertion' ||\n node.type === 'ParenthesizedExpression';\n\nconst unwrapExpression = (expr: Node): Node => {\n let current = expr;\n\n while (isWrapperExpression(current)) {\n current = current.expression;\n }\n\n return current;\n};\n\nconst isSafeLiteral = (expr: Node): boolean =>\n getNodeType(expr) === 'Literal' &&\n (() => {\n const { value } = expr as Node & { value?: unknown };\n return (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'bigint'\n );\n })();\n\nconst isSafeExpression = (expr: Node): boolean => {\n const unwrapped = unwrapExpression(expr);\n const type = unwrapped.type as string;\n\n if (isSafeLiteral(unwrapped)) {\n return true;\n }\n\n if (type === 'ArrowFunctionExpression' || type === 'FunctionExpression') {\n return true;\n }\n\n if (type === 'Identifier') {\n const identifier = unwrapped as Node & { name: string };\n return (\n identifier.name === 'undefined' ||\n identifier.name === 'NaN' ||\n identifier.name === 'Infinity'\n );\n }\n\n if (type === 'TemplateLiteral') {\n return (unwrapped as Node & { expressions: Node[] }).expressions.every(\n (item) => isSafeExpression(item)\n );\n }\n\n if (type === 'UnaryExpression') {\n return isSafeExpression((unwrapped as Node & { argument: Node }).argument);\n }\n\n if (type === 'BinaryExpression' || type === 'LogicalExpression') {\n const binaryLike = unwrapped as Node & { left: Node; right: Node };\n return (\n isSafeExpression(binaryLike.left) && isSafeExpression(binaryLike.right)\n );\n }\n\n if (type === 'ConditionalExpression') {\n const conditional = unwrapped as Node & {\n alternate: Node;\n consequent: Node;\n test: Node;\n };\n return (\n isSafeExpression(conditional.test) &&\n isSafeExpression(conditional.consequent) &&\n isSafeExpression(conditional.alternate)\n );\n }\n\n if (type === 'ArrayExpression') {\n return (\n unwrapped as Node & { elements: Array<Node | null> }\n ).elements.every((item) => {\n if (!item) {\n return true;\n }\n\n if (item.type === 'SpreadElement') {\n return false;\n }\n\n return isSafeExpression(item);\n });\n }\n\n if (type === 'ObjectExpression') {\n return (unwrapped as Node & { properties: Node[] }).properties.every(\n (property) => {\n if (property.type === 'SpreadElement') {\n return false;\n }\n\n const propertyNode = property as Node & {\n computed?: boolean;\n method?: boolean;\n value?: Node;\n };\n\n if (propertyNode.computed) {\n return false;\n }\n\n if (propertyNode.method) {\n return true;\n }\n\n return (\n isNode(propertyNode.value) && isSafeExpression(propertyNode.value)\n );\n }\n );\n }\n\n if (\n type === 'CallExpression' ||\n type === 'NewExpression' ||\n type === 'TaggedTemplateExpression' ||\n type === 'AwaitExpression' ||\n type === 'YieldExpression' ||\n type === 'UpdateExpression' ||\n type === 'AssignmentExpression' ||\n type === 'SequenceExpression' ||\n type === 'ClassExpression' ||\n type === 'ClassDeclaration'\n ) {\n return false;\n }\n\n return false;\n};\n\nconst isSafeDeclarator = (declarator: VariableDeclarator): boolean =>\n !isNode(declarator.init) || isSafeExpression(declarator.init);\n\nconst isSafeVariableDeclaration = (statement: VariableDeclaration): boolean =>\n statement.declarations.every((declarator) => isSafeDeclarator(declarator));\n\nconst isSafeStatement = (statement: Node): boolean => {\n if (statement.type.startsWith('TS') || statement.type.startsWith('JSDoc')) {\n return statement.type !== 'TSEnumDeclaration';\n }\n\n if (statement.type === 'ImportDeclaration') {\n return isTypeOnlyImport(statement);\n }\n\n if (statement.type === 'ExportAllDeclaration') {\n return false;\n }\n\n if (statement.type === 'ExportNamedDeclaration') {\n if (!isNode(statement.declaration)) {\n return !isNode(statement.source) || isTypeOnlyReExport(statement);\n }\n\n if (statement.declaration.type === 'FunctionDeclaration') {\n return true;\n }\n\n if (statement.declaration.type === 'ClassDeclaration') {\n return false;\n }\n\n return (\n statement.declaration.type === 'VariableDeclaration' &&\n isSafeVariableDeclaration(statement.declaration)\n );\n }\n\n if (statement.type === 'ExportDefaultDeclaration') {\n const { declaration } = statement;\n if (!isNode(declaration)) {\n return false;\n }\n\n if (\n declaration.type === 'FunctionDeclaration' ||\n declaration.type === 'FunctionExpression' ||\n declaration.type === 'ArrowFunctionExpression' ||\n declaration.type === 'ClassExpression' ||\n declaration.type === 'ClassDeclaration'\n ) {\n return false;\n }\n\n return isSafeExpression(declaration);\n }\n\n if (statement.type === 'VariableDeclaration') {\n return isSafeVariableDeclaration(statement);\n }\n\n if (\n statement.type === 'FunctionDeclaration' ||\n statement.type === 'EmptyStatement'\n ) {\n return true;\n }\n\n if (statement.type === 'ExpressionStatement') {\n return isNode(statement.expression) && isSafeLiteral(statement.expression);\n }\n\n return false;\n};\n\nexport function isStaticallyEvaluatableModule(\n code: string,\n filename: string\n): boolean {\n return parseOxc(code, filename).body.every((statement) =>\n isSafeStatement(statement)\n );\n}\n"],"file":"isStaticallyEvaluatableModule.js"}
|