@wyw-in-js/transform 0.1.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/LICENSE +21 -0
- package/esm/babel.js +2 -0
- package/esm/babel.js.map +1 -0
- package/esm/cache.js +80 -0
- package/esm/cache.js.map +1 -0
- package/esm/debug/fileReporter.js +144 -0
- package/esm/debug/fileReporter.js.map +1 -0
- package/esm/evaluators/index.js +14 -0
- package/esm/evaluators/index.js.map +1 -0
- package/esm/index.js +24 -0
- package/esm/index.js.map +1 -0
- package/esm/module.js +316 -0
- package/esm/module.js.map +1 -0
- package/esm/options/babel-merge.d.js +2 -0
- package/esm/options/babel-merge.d.js.map +1 -0
- package/esm/options/buildOptions.js +28 -0
- package/esm/options/buildOptions.js.map +1 -0
- package/esm/options/loadBabelOptions.js +24 -0
- package/esm/options/loadBabelOptions.js.map +1 -0
- package/esm/plugins/babel-transform.js +53 -0
- package/esm/plugins/babel-transform.js.map +1 -0
- package/esm/plugins/collector.js +66 -0
- package/esm/plugins/collector.js.map +1 -0
- package/esm/plugins/dynamic-import.js +28 -0
- package/esm/plugins/dynamic-import.js.map +1 -0
- package/esm/plugins/preeval.js +75 -0
- package/esm/plugins/preeval.js.map +1 -0
- package/esm/plugins/shaker.js +296 -0
- package/esm/plugins/shaker.js.map +1 -0
- package/esm/shaker.js +50 -0
- package/esm/shaker.js.map +1 -0
- package/esm/transform/BaseEntrypoint.js +164 -0
- package/esm/transform/BaseEntrypoint.js.map +1 -0
- package/esm/transform/Entrypoint.helpers.js +168 -0
- package/esm/transform/Entrypoint.helpers.js.map +1 -0
- package/esm/transform/Entrypoint.js +212 -0
- package/esm/transform/Entrypoint.js.map +1 -0
- package/esm/transform/Entrypoint.types.js +2 -0
- package/esm/transform/Entrypoint.types.js.map +1 -0
- package/esm/transform/EvaluatedEntrypoint.js +6 -0
- package/esm/transform/EvaluatedEntrypoint.js.map +1 -0
- package/esm/transform/actions/AbortError.js +8 -0
- package/esm/transform/actions/AbortError.js.map +1 -0
- package/esm/transform/actions/BaseAction.js +134 -0
- package/esm/transform/actions/BaseAction.js.map +1 -0
- package/esm/transform/actions/UnprocessedEntrypointError.js +8 -0
- package/esm/transform/actions/UnprocessedEntrypointError.js.map +1 -0
- package/esm/transform/actions/actionRunner.js +73 -0
- package/esm/transform/actions/actionRunner.js.map +1 -0
- package/esm/transform/actions/types.js +2 -0
- package/esm/transform/actions/types.js.map +1 -0
- package/esm/transform/generators/baseProcessingHandlers.js +22 -0
- package/esm/transform/generators/baseProcessingHandlers.js.map +1 -0
- package/esm/transform/generators/collect.js +58 -0
- package/esm/transform/generators/collect.js.map +1 -0
- package/esm/transform/generators/evalFile.js +50 -0
- package/esm/transform/generators/evalFile.js.map +1 -0
- package/esm/transform/generators/explodeReexports.js +63 -0
- package/esm/transform/generators/explodeReexports.js.map +1 -0
- package/esm/transform/generators/extract.js +120 -0
- package/esm/transform/generators/extract.js.map +1 -0
- package/esm/transform/generators/getExports.js +73 -0
- package/esm/transform/generators/getExports.js.map +1 -0
- package/esm/transform/generators/index.js +13 -0
- package/esm/transform/generators/index.js.map +1 -0
- package/esm/transform/generators/processEntrypoint.js +43 -0
- package/esm/transform/generators/processEntrypoint.js.map +1 -0
- package/esm/transform/generators/processImports.js +23 -0
- package/esm/transform/generators/processImports.js.map +1 -0
- package/esm/transform/generators/resolveImports.js +148 -0
- package/esm/transform/generators/resolveImports.js.map +1 -0
- package/esm/transform/generators/transform.js +117 -0
- package/esm/transform/generators/transform.js.map +1 -0
- package/esm/transform/generators/workflow.js +82 -0
- package/esm/transform/generators/workflow.js.map +1 -0
- package/esm/transform/helpers/loadLinariaOptions.js +66 -0
- package/esm/transform/helpers/loadLinariaOptions.js.map +1 -0
- package/esm/transform/helpers/withDefaultServices.js +21 -0
- package/esm/transform/helpers/withDefaultServices.js.map +1 -0
- package/esm/transform/rootLog.js +3 -0
- package/esm/transform/rootLog.js.map +1 -0
- package/esm/transform/types.js +2 -0
- package/esm/transform/types.js.map +1 -0
- package/esm/transform.js +121 -0
- package/esm/transform.js.map +1 -0
- package/esm/types.js +2 -0
- package/esm/types.js.map +1 -0
- package/esm/utils/EventEmitter.js +52 -0
- package/esm/utils/EventEmitter.js.map +1 -0
- package/esm/utils/ShakerMetadata.js +2 -0
- package/esm/utils/ShakerMetadata.js.map +1 -0
- package/esm/utils/TransformMetadata.js +11 -0
- package/esm/utils/TransformMetadata.js.map +1 -0
- package/esm/utils/addIdentifierToLinariaPreval.js +68 -0
- package/esm/utils/addIdentifierToLinariaPreval.js.map +1 -0
- package/esm/utils/collectExportsAndImports.js +974 -0
- package/esm/utils/collectExportsAndImports.js.map +1 -0
- package/esm/utils/collectTemplateDependencies.js +219 -0
- package/esm/utils/collectTemplateDependencies.js.map +1 -0
- package/esm/utils/createId.js +6 -0
- package/esm/utils/createId.js.map +1 -0
- package/esm/utils/dispose-polyfill.js +6 -0
- package/esm/utils/dispose-polyfill.js.map +1 -0
- package/esm/utils/findIdentifiers.js +62 -0
- package/esm/utils/findIdentifiers.js.map +1 -0
- package/esm/utils/findPackageJSON.js +22 -0
- package/esm/utils/findPackageJSON.js.map +1 -0
- package/esm/utils/getFileIdx.js +10 -0
- package/esm/utils/getFileIdx.js.map +1 -0
- package/esm/utils/getPluginKey.js +13 -0
- package/esm/utils/getPluginKey.js.map +1 -0
- package/esm/utils/getScope.js +6 -0
- package/esm/utils/getScope.js.map +1 -0
- package/esm/utils/getSource.js +15 -0
- package/esm/utils/getSource.js.map +1 -0
- package/esm/utils/getTagProcessor.js +304 -0
- package/esm/utils/getTagProcessor.js.map +1 -0
- package/esm/utils/getVisitorKeys.js +5 -0
- package/esm/utils/getVisitorKeys.js.map +1 -0
- package/esm/utils/hasLinariaPreval.js +7 -0
- package/esm/utils/hasLinariaPreval.js.map +1 -0
- package/esm/utils/isExports.js +22 -0
- package/esm/utils/isExports.js.map +1 -0
- package/esm/utils/isGlobal.js +6 -0
- package/esm/utils/isGlobal.js.map +1 -0
- package/esm/utils/isNode.js +2 -0
- package/esm/utils/isNode.js.map +1 -0
- package/esm/utils/isNodePath.js +4 -0
- package/esm/utils/isNodePath.js.map +1 -0
- package/esm/utils/isNotNull.js +4 -0
- package/esm/utils/isNotNull.js.map +1 -0
- package/esm/utils/isRemoved.js +46 -0
- package/esm/utils/isRemoved.js.map +1 -0
- package/esm/utils/isRequire.js +13 -0
- package/esm/utils/isRequire.js.map +1 -0
- package/esm/utils/isSerializable.js +13 -0
- package/esm/utils/isSerializable.js.map +1 -0
- package/esm/utils/isTypedNode.js +6 -0
- package/esm/utils/isTypedNode.js.map +1 -0
- package/esm/utils/isUnnecessaryReactCall.js +72 -0
- package/esm/utils/isUnnecessaryReactCall.js.map +1 -0
- package/esm/utils/peek.js +2 -0
- package/esm/utils/peek.js.map +1 -0
- package/esm/utils/processTemplateExpression.js +11 -0
- package/esm/utils/processTemplateExpression.js.map +1 -0
- package/esm/utils/removeDangerousCode.js +127 -0
- package/esm/utils/removeDangerousCode.js.map +1 -0
- package/esm/utils/scopeHelpers.js +514 -0
- package/esm/utils/scopeHelpers.js.map +1 -0
- package/esm/utils/traversalCache.js +28 -0
- package/esm/utils/traversalCache.js.map +1 -0
- package/esm/utils/unwrapSequence.js +14 -0
- package/esm/utils/unwrapSequence.js.map +1 -0
- package/esm/utils/valueToLiteral.js +59 -0
- package/esm/utils/valueToLiteral.js.map +1 -0
- package/esm/utils/visitors/JSXElementsRemover.js +51 -0
- package/esm/utils/visitors/JSXElementsRemover.js.map +1 -0
- package/esm/vm/createVmContext.js +72 -0
- package/esm/vm/createVmContext.js.map +1 -0
- package/esm/vm/process.js +29 -0
- package/esm/vm/process.js.map +1 -0
- package/lib/babel.js +2 -0
- package/lib/babel.js.map +1 -0
- package/lib/cache.js +87 -0
- package/lib/cache.js.map +1 -0
- package/lib/debug/fileReporter.js +153 -0
- package/lib/debug/fileReporter.js.map +1 -0
- package/lib/evaluators/index.js +20 -0
- package/lib/evaluators/index.js.map +1 -0
- package/lib/index.js +225 -0
- package/lib/index.js.map +1 -0
- package/lib/module.js +327 -0
- package/lib/module.js.map +1 -0
- package/lib/options/babel-merge.d.js +2 -0
- package/lib/options/babel-merge.d.js.map +1 -0
- package/lib/options/buildOptions.js +35 -0
- package/lib/options/buildOptions.js.map +1 -0
- package/lib/options/loadBabelOptions.js +31 -0
- package/lib/options/loadBabelOptions.js.map +1 -0
- package/lib/plugins/babel-transform.js +60 -0
- package/lib/plugins/babel-transform.js.map +1 -0
- package/lib/plugins/collector.js +76 -0
- package/lib/plugins/collector.js.map +1 -0
- package/lib/plugins/dynamic-import.js +34 -0
- package/lib/plugins/dynamic-import.js.map +1 -0
- package/lib/plugins/preeval.js +82 -0
- package/lib/plugins/preeval.js.map +1 -0
- package/lib/plugins/shaker.js +303 -0
- package/lib/plugins/shaker.js.map +1 -0
- package/lib/shaker.js +58 -0
- package/lib/shaker.js.map +1 -0
- package/lib/transform/BaseEntrypoint.js +175 -0
- package/lib/transform/BaseEntrypoint.js.map +1 -0
- package/lib/transform/Entrypoint.helpers.js +182 -0
- package/lib/transform/Entrypoint.helpers.js.map +1 -0
- package/lib/transform/Entrypoint.js +226 -0
- package/lib/transform/Entrypoint.js.map +1 -0
- package/lib/transform/Entrypoint.types.js +2 -0
- package/lib/transform/Entrypoint.types.js.map +1 -0
- package/lib/transform/EvaluatedEntrypoint.js +13 -0
- package/lib/transform/EvaluatedEntrypoint.js.map +1 -0
- package/lib/transform/actions/AbortError.js +16 -0
- package/lib/transform/actions/AbortError.js.map +1 -0
- package/lib/transform/actions/BaseAction.js +144 -0
- package/lib/transform/actions/BaseAction.js.map +1 -0
- package/lib/transform/actions/UnprocessedEntrypointError.js +16 -0
- package/lib/transform/actions/UnprocessedEntrypointError.js.map +1 -0
- package/lib/transform/actions/actionRunner.js +82 -0
- package/lib/transform/actions/actionRunner.js.map +1 -0
- package/lib/transform/actions/types.js +2 -0
- package/lib/transform/actions/types.js.map +1 -0
- package/lib/transform/generators/baseProcessingHandlers.js +27 -0
- package/lib/transform/generators/baseProcessingHandlers.js.map +1 -0
- package/lib/transform/generators/collect.js +66 -0
- package/lib/transform/generators/collect.js.map +1 -0
- package/lib/transform/generators/evalFile.js +57 -0
- package/lib/transform/generators/evalFile.js.map +1 -0
- package/lib/transform/generators/explodeReexports.js +70 -0
- package/lib/transform/generators/explodeReexports.js.map +1 -0
- package/lib/transform/generators/extract.js +128 -0
- package/lib/transform/generators/extract.js.map +1 -0
- package/lib/transform/generators/getExports.js +80 -0
- package/lib/transform/generators/getExports.js.map +1 -0
- package/lib/transform/generators/index.js +19 -0
- package/lib/transform/generators/index.js.map +1 -0
- package/lib/transform/generators/processEntrypoint.js +49 -0
- package/lib/transform/generators/processEntrypoint.js.map +1 -0
- package/lib/transform/generators/processImports.js +29 -0
- package/lib/transform/generators/processImports.js.map +1 -0
- package/lib/transform/generators/resolveImports.js +158 -0
- package/lib/transform/generators/resolveImports.js.map +1 -0
- package/lib/transform/generators/transform.js +130 -0
- package/lib/transform/generators/transform.js.map +1 -0
- package/lib/transform/generators/workflow.js +90 -0
- package/lib/transform/generators/workflow.js.map +1 -0
- package/lib/transform/helpers/loadLinariaOptions.js +73 -0
- package/lib/transform/helpers/loadLinariaOptions.js.map +1 -0
- package/lib/transform/helpers/withDefaultServices.js +30 -0
- package/lib/transform/helpers/withDefaultServices.js.map +1 -0
- package/lib/transform/rootLog.js +9 -0
- package/lib/transform/rootLog.js.map +1 -0
- package/lib/transform/types.js +8 -0
- package/lib/transform/types.js.map +1 -0
- package/lib/transform.js +128 -0
- package/lib/transform.js.map +1 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/lib/utils/EventEmitter.js +61 -0
- package/lib/utils/EventEmitter.js.map +1 -0
- package/lib/utils/ShakerMetadata.js +9 -0
- package/lib/utils/ShakerMetadata.js.map +1 -0
- package/lib/utils/TransformMetadata.js +19 -0
- package/lib/utils/TransformMetadata.js.map +1 -0
- package/lib/utils/addIdentifierToLinariaPreval.js +75 -0
- package/lib/utils/addIdentifierToLinariaPreval.js.map +1 -0
- package/lib/utils/collectExportsAndImports.js +990 -0
- package/lib/utils/collectExportsAndImports.js.map +1 -0
- package/lib/utils/collectTemplateDependencies.js +233 -0
- package/lib/utils/collectTemplateDependencies.js.map +1 -0
- package/lib/utils/createId.js +13 -0
- package/lib/utils/createId.js.map +1 -0
- package/lib/utils/dispose-polyfill.js +9 -0
- package/lib/utils/dispose-polyfill.js.map +1 -0
- package/lib/utils/findIdentifiers.js +73 -0
- package/lib/utils/findIdentifiers.js.map +1 -0
- package/lib/utils/findPackageJSON.js +29 -0
- package/lib/utils/findPackageJSON.js.map +1 -0
- package/lib/utils/getFileIdx.js +16 -0
- package/lib/utils/getFileIdx.js.map +1 -0
- package/lib/utils/getPluginKey.js +21 -0
- package/lib/utils/getPluginKey.js.map +1 -0
- package/lib/utils/getScope.js +12 -0
- package/lib/utils/getScope.js.map +1 -0
- package/lib/utils/getSource.js +24 -0
- package/lib/utils/getSource.js.map +1 -0
- package/lib/utils/getTagProcessor.js +318 -0
- package/lib/utils/getTagProcessor.js.map +1 -0
- package/lib/utils/getVisitorKeys.js +11 -0
- package/lib/utils/getVisitorKeys.js.map +1 -0
- package/lib/utils/hasLinariaPreval.js +13 -0
- package/lib/utils/hasLinariaPreval.js.map +1 -0
- package/lib/utils/isExports.js +27 -0
- package/lib/utils/isExports.js.map +1 -0
- package/lib/utils/isGlobal.js +13 -0
- package/lib/utils/isGlobal.js.map +1 -0
- package/lib/utils/isNode.js +9 -0
- package/lib/utils/isNode.js.map +1 -0
- package/lib/utils/isNodePath.js +10 -0
- package/lib/utils/isNodePath.js.map +1 -0
- package/lib/utils/isNotNull.js +10 -0
- package/lib/utils/isNotNull.js.map +1 -0
- package/lib/utils/isRemoved.js +52 -0
- package/lib/utils/isRemoved.js.map +1 -0
- package/lib/utils/isRequire.js +18 -0
- package/lib/utils/isRequire.js.map +1 -0
- package/lib/utils/isSerializable.js +19 -0
- package/lib/utils/isSerializable.js.map +1 -0
- package/lib/utils/isTypedNode.js +13 -0
- package/lib/utils/isTypedNode.js.map +1 -0
- package/lib/utils/isUnnecessaryReactCall.js +81 -0
- package/lib/utils/isUnnecessaryReactCall.js.map +1 -0
- package/lib/utils/peek.js +9 -0
- package/lib/utils/peek.js.map +1 -0
- package/lib/utils/processTemplateExpression.js +18 -0
- package/lib/utils/processTemplateExpression.js.map +1 -0
- package/lib/utils/removeDangerousCode.js +134 -0
- package/lib/utils/removeDangerousCode.js.map +1 -0
- package/lib/utils/scopeHelpers.js +544 -0
- package/lib/utils/scopeHelpers.js.map +1 -0
- package/lib/utils/traversalCache.js +38 -0
- package/lib/utils/traversalCache.js.map +1 -0
- package/lib/utils/unwrapSequence.js +20 -0
- package/lib/utils/unwrapSequence.js.map +1 -0
- package/lib/utils/valueToLiteral.js +65 -0
- package/lib/utils/valueToLiteral.js.map +1 -0
- package/lib/utils/visitors/JSXElementsRemover.js +57 -0
- package/lib/utils/visitors/JSXElementsRemover.js.map +1 -0
- package/lib/vm/createVmContext.js +80 -0
- package/lib/vm/createVmContext.js.map +1 -0
- package/lib/vm/process.js +38 -0
- package/lib/vm/process.js.map +1 -0
- package/package.json +63 -0
- package/types/babel.d.ts +2 -0
- package/types/babel.js +2 -0
- package/types/cache.d.ts +24 -0
- package/types/cache.js +85 -0
- package/types/debug/fileReporter.d.ts +27 -0
- package/types/debug/fileReporter.js +151 -0
- package/types/evaluators/index.d.ts +10 -0
- package/types/evaluators/index.js +15 -0
- package/types/index.d.ts +30 -0
- package/types/index.js +69 -0
- package/types/module.d.ts +62 -0
- package/types/module.js +318 -0
- package/types/options/buildOptions.d.ts +7 -0
- package/types/options/buildOptions.js +35 -0
- package/types/options/loadBabelOptions.d.ts +3 -0
- package/types/options/loadBabelOptions.js +27 -0
- package/types/plugins/babel-transform.d.ts +4 -0
- package/types/plugins/babel-transform.js +49 -0
- package/types/plugins/collector.d.ts +16 -0
- package/types/plugins/collector.js +67 -0
- package/types/plugins/dynamic-import.d.ts +6 -0
- package/types/plugins/dynamic-import.js +32 -0
- package/types/plugins/preeval.d.ts +16 -0
- package/types/plugins/preeval.js +69 -0
- package/types/plugins/shaker.d.ts +11 -0
- package/types/plugins/shaker.js +299 -0
- package/types/shaker.d.ts +3 -0
- package/types/shaker.js +64 -0
- package/types/transform/BaseEntrypoint.d.ts +23 -0
- package/types/transform/BaseEntrypoint.js +182 -0
- package/types/transform/Entrypoint.d.ts +50 -0
- package/types/transform/Entrypoint.helpers.d.ts +14 -0
- package/types/transform/Entrypoint.helpers.js +169 -0
- package/types/transform/Entrypoint.js +223 -0
- package/types/transform/Entrypoint.types.d.ts +23 -0
- package/types/transform/Entrypoint.types.js +2 -0
- package/types/transform/EvaluatedEntrypoint.d.ts +16 -0
- package/types/transform/EvaluatedEntrypoint.js +9 -0
- package/types/transform/actions/AbortError.d.ts +4 -0
- package/types/transform/actions/AbortError.js +12 -0
- package/types/transform/actions/BaseAction.d.ts +40 -0
- package/types/transform/actions/BaseAction.js +149 -0
- package/types/transform/actions/UnprocessedEntrypointError.d.ts +6 -0
- package/types/transform/actions/UnprocessedEntrypointError.js +13 -0
- package/types/transform/actions/actionRunner.d.ts +4 -0
- package/types/transform/actions/actionRunner.js +86 -0
- package/types/transform/actions/types.d.ts +15 -0
- package/types/transform/actions/types.js +2 -0
- package/types/transform/generators/baseProcessingHandlers.d.ts +17 -0
- package/types/transform/generators/baseProcessingHandlers.js +23 -0
- package/types/transform/generators/collect.d.ts +6 -0
- package/types/transform/generators/collect.js +57 -0
- package/types/transform/generators/evalFile.d.ts +6 -0
- package/types/transform/generators/evalFile.js +56 -0
- package/types/transform/generators/explodeReexports.d.ts +7 -0
- package/types/transform/generators/explodeReexports.js +67 -0
- package/types/transform/generators/extract.d.ts +8 -0
- package/types/transform/generators/extract.js +116 -0
- package/types/transform/generators/getExports.d.ts +8 -0
- package/types/transform/generators/getExports.js +65 -0
- package/types/transform/generators/index.d.ts +15 -0
- package/types/transform/generators/index.js +15 -0
- package/types/transform/generators/processEntrypoint.d.ts +9 -0
- package/types/transform/generators/processEntrypoint.js +88 -0
- package/types/transform/generators/processImports.d.ts +5 -0
- package/types/transform/generators/processImports.js +21 -0
- package/types/transform/generators/resolveImports.d.ts +9 -0
- package/types/transform/generators/resolveImports.js +124 -0
- package/types/transform/generators/transform.d.ts +17 -0
- package/types/transform/generators/transform.js +115 -0
- package/types/transform/generators/workflow.d.ts +7 -0
- package/types/transform/generators/workflow.js +77 -0
- package/types/transform/helpers/loadLinariaOptions.d.ts +6 -0
- package/types/transform/helpers/loadLinariaOptions.js +86 -0
- package/types/transform/helpers/withDefaultServices.d.ts +5 -0
- package/types/transform/helpers/withDefaultServices.js +40 -0
- package/types/transform/rootLog.d.ts +3 -0
- package/types/transform/rootLog.js +5 -0
- package/types/transform/types.d.ts +137 -0
- package/types/transform/types.js +4 -0
- package/types/transform.d.ts +20 -0
- package/types/transform.js +121 -0
- package/types/types.d.ts +72 -0
- package/types/types.js +5 -0
- package/types/utils/EventEmitter.d.ts +58 -0
- package/types/utils/EventEmitter.js +61 -0
- package/types/utils/ShakerMetadata.d.ts +7 -0
- package/types/utils/ShakerMetadata.js +5 -0
- package/types/utils/TransformMetadata.d.ts +13 -0
- package/types/utils/TransformMetadata.js +17 -0
- package/types/utils/addIdentifierToLinariaPreval.d.ts +4 -0
- package/types/utils/addIdentifierToLinariaPreval.js +75 -0
- package/types/utils/collectExportsAndImports.d.ts +31 -0
- package/types/utils/collectExportsAndImports.js +962 -0
- package/types/utils/collectTemplateDependencies.d.ts +17 -0
- package/types/utils/collectTemplateDependencies.js +212 -0
- package/types/utils/createId.d.ts +2 -0
- package/types/utils/createId.js +9 -0
- package/types/utils/dispose-polyfill.d.ts +0 -0
- package/types/utils/dispose-polyfill.js +5 -0
- package/types/utils/findIdentifiers.d.ts +6 -0
- package/types/utils/findIdentifiers.js +68 -0
- package/types/utils/findPackageJSON.d.ts +1 -0
- package/types/utils/findPackageJSON.js +29 -0
- package/types/utils/getFileIdx.d.ts +1 -0
- package/types/utils/getFileIdx.js +13 -0
- package/types/utils/getPluginKey.d.ts +2 -0
- package/types/utils/getPluginKey.js +16 -0
- package/types/utils/getScope.d.ts +2 -0
- package/types/utils/getScope.js +11 -0
- package/types/utils/getSource.d.ts +2 -0
- package/types/utils/getSource.js +22 -0
- package/types/utils/getTagProcessor.d.ts +6 -0
- package/types/utils/getTagProcessor.js +315 -0
- package/types/utils/getVisitorKeys.d.ts +5 -0
- package/types/utils/getVisitorKeys.js +8 -0
- package/types/utils/hasLinariaPreval.d.ts +4 -0
- package/types/utils/hasLinariaPreval.js +9 -0
- package/types/utils/isExports.d.ts +6 -0
- package/types/utils/isExports.js +20 -0
- package/types/utils/isGlobal.d.ts +2 -0
- package/types/utils/isGlobal.js +9 -0
- package/types/utils/isNode.d.ts +2 -0
- package/types/utils/isNode.js +7 -0
- package/types/utils/isNodePath.d.ts +3 -0
- package/types/utils/isNodePath.js +7 -0
- package/types/utils/isNotNull.d.ts +1 -0
- package/types/utils/isNotNull.js +7 -0
- package/types/utils/isRemoved.d.ts +5 -0
- package/types/utils/isRemoved.js +42 -0
- package/types/utils/isRequire.d.ts +6 -0
- package/types/utils/isRequire.js +15 -0
- package/types/utils/isSerializable.d.ts +2 -0
- package/types/utils/isSerializable.js +18 -0
- package/types/utils/isTypedNode.d.ts +5 -0
- package/types/utils/isTypedNode.js +9 -0
- package/types/utils/isUnnecessaryReactCall.d.ts +3 -0
- package/types/utils/isUnnecessaryReactCall.js +76 -0
- package/types/utils/peek.d.ts +1 -0
- package/types/utils/peek.js +5 -0
- package/types/utils/processTemplateExpression.d.ts +5 -0
- package/types/utils/processTemplateExpression.js +17 -0
- package/types/utils/removeDangerousCode.d.ts +3 -0
- package/types/utils/removeDangerousCode.js +144 -0
- package/types/utils/scopeHelpers.d.ts +12 -0
- package/types/utils/scopeHelpers.js +568 -0
- package/types/utils/traversalCache.d.ts +5 -0
- package/types/utils/traversalCache.js +36 -0
- package/types/utils/unwrapSequence.d.ts +8 -0
- package/types/utils/unwrapSequence.js +17 -0
- package/types/utils/valueToLiteral.d.ts +3 -0
- package/types/utils/valueToLiteral.js +64 -0
- package/types/utils/visitors/JSXElementsRemover.d.ts +3 -0
- package/types/utils/visitors/JSXElementsRemover.js +52 -0
- package/types/vm/createVmContext.d.ts +7 -0
- package/types/vm/createVmContext.js +92 -0
- package/types/vm/process.d.ts +25 -0
- package/types/vm/process.js +32 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { logger } from '@wyw-in-js/shared';
|
|
2
|
+
import { collectExportsAndImports, sideEffectImport } from '../utils/collectExportsAndImports';
|
|
3
|
+
import { getFileIdx } from '../utils/getFileIdx';
|
|
4
|
+
import { isRemoved } from '../utils/isRemoved';
|
|
5
|
+
import { applyAction, dereference, findActionForNode, reference, removeWithRelated } from '../utils/scopeHelpers';
|
|
6
|
+
import { invalidateTraversalCache } from '../utils/traversalCache';
|
|
7
|
+
const EXT_REGEX = /\.[0-9a-z]+$/;
|
|
8
|
+
const ALLOWED_EXTENSIONS = ['.js', '.cjs', '.mjs'];
|
|
9
|
+
function shouldKeepSideEffect(importPath) {
|
|
10
|
+
const [ext] = importPath.match(EXT_REGEX) || [''];
|
|
11
|
+
return ext === '' || ALLOWED_EXTENSIONS.includes(ext);
|
|
12
|
+
}
|
|
13
|
+
function getBindingForExport(exportPath) {
|
|
14
|
+
if (exportPath.isIdentifier()) {
|
|
15
|
+
return exportPath.scope.getBinding(exportPath.node.name);
|
|
16
|
+
}
|
|
17
|
+
const variableDeclarator = exportPath.findParent(p => p.isVariableDeclarator());
|
|
18
|
+
if (variableDeclarator) {
|
|
19
|
+
const id = variableDeclarator.get('id');
|
|
20
|
+
if (id.isIdentifier()) {
|
|
21
|
+
return variableDeclarator.scope.getBinding(id.node.name);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (exportPath.isAssignmentExpression()) {
|
|
25
|
+
const left = exportPath.get('left');
|
|
26
|
+
if (left.isIdentifier()) {
|
|
27
|
+
return exportPath.scope.getBinding(left.node.name);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {
|
|
31
|
+
return exportPath.scope.getBinding(exportPath.node.id.name);
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
const withoutRemoved = items => items.filter(({
|
|
36
|
+
local
|
|
37
|
+
}) => !isRemoved(local));
|
|
38
|
+
function rearrangeExports({
|
|
39
|
+
types: t
|
|
40
|
+
}, root, exportRefs, exports) {
|
|
41
|
+
const rearranged = {
|
|
42
|
+
...exports
|
|
43
|
+
};
|
|
44
|
+
const rootScope = root.scope;
|
|
45
|
+
exportRefs.forEach((refs, name) => {
|
|
46
|
+
if (refs.length <= 1) {
|
|
47
|
+
if (refs.length === 1) {
|
|
48
|
+
// Maybe exports is assigned to another variable?
|
|
49
|
+
const declarator = refs[0].findParent(p => p.isVariableDeclarator());
|
|
50
|
+
if (!declarator) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
} else {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const uid = rootScope.generateUid(name);
|
|
58
|
+
// Define variable in the beginning
|
|
59
|
+
const [declaration] = root.unshiftContainer('body', [t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))])]);
|
|
60
|
+
rootScope.registerDeclaration(declaration);
|
|
61
|
+
|
|
62
|
+
// Replace every reference with defined variable
|
|
63
|
+
refs.forEach(ref => {
|
|
64
|
+
const [replaced] = ref.replaceWith(t.identifier(uid));
|
|
65
|
+
if (replaced.isBindingIdentifier()) {
|
|
66
|
+
rootScope.registerConstantViolation(replaced);
|
|
67
|
+
if (replaced.parentPath?.parentPath?.isVariableDeclarator()) {
|
|
68
|
+
// This is `const foo = exports.foo = "value"` case
|
|
69
|
+
reference(replaced, replaced, true);
|
|
70
|
+
}
|
|
71
|
+
} else {
|
|
72
|
+
reference(replaced);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// Assign defined variable to the export
|
|
77
|
+
const [pushed] = root.pushContainer('body', [t.expressionStatement(t.assignmentExpression('=', t.memberExpression(t.identifier('exports'), t.identifier(name)), t.identifier(uid)))]);
|
|
78
|
+
const local = pushed.get('expression.right');
|
|
79
|
+
reference(local);
|
|
80
|
+
rearranged[name] = local;
|
|
81
|
+
});
|
|
82
|
+
return rearranged;
|
|
83
|
+
}
|
|
84
|
+
export default function shakerPlugin(babel, {
|
|
85
|
+
keepSideEffects = false,
|
|
86
|
+
ifUnknownExport = 'skip-shaking',
|
|
87
|
+
onlyExports
|
|
88
|
+
}) {
|
|
89
|
+
const shakerLogger = logger.extend('shaker');
|
|
90
|
+
return {
|
|
91
|
+
name: '@wyw-in-js/transform/shaker',
|
|
92
|
+
pre(file) {
|
|
93
|
+
this.filename = file.opts.filename;
|
|
94
|
+
const log = shakerLogger.extend(getFileIdx(this.filename));
|
|
95
|
+
log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);
|
|
96
|
+
const onlyExportsSet = new Set(onlyExports);
|
|
97
|
+
const collected = collectExportsAndImports(file.path);
|
|
98
|
+
const sideEffectImports = collected.imports.filter(sideEffectImport);
|
|
99
|
+
log('import-and-exports', [`imports: ${collected.imports.length} (side-effects: ${sideEffectImports.length})`, `exports: ${Object.values(collected.exports).length}`, `reexports: ${collected.reexports.length}`].join(', '));
|
|
100
|
+
|
|
101
|
+
// We cannot just throw out exports if they are referred in the code
|
|
102
|
+
// Let's dome some replacements
|
|
103
|
+
const exports = rearrangeExports(babel, file.path, collected.exportRefs, collected.exports);
|
|
104
|
+
Object.values(exports).forEach(local => {
|
|
105
|
+
if (local.isAssignmentExpression()) {
|
|
106
|
+
const left = local.get('left');
|
|
107
|
+
if (left.isIdentifier()) {
|
|
108
|
+
// For some reason babel does not mark id in AssignmentExpression as a reference
|
|
109
|
+
// So we need to do it manually
|
|
110
|
+
reference(left, left, true);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
const hasLinariaPreval = exports.__linariaPreval !== undefined;
|
|
115
|
+
const hasDefault = exports.default !== undefined;
|
|
116
|
+
|
|
117
|
+
// If __linariaPreval is not exported, we can remove it from onlyExports
|
|
118
|
+
if (onlyExportsSet.has('__linariaPreval') && !hasLinariaPreval) {
|
|
119
|
+
onlyExportsSet.delete('__linariaPreval');
|
|
120
|
+
}
|
|
121
|
+
if (onlyExportsSet.size === 0) {
|
|
122
|
+
// Fast-lane: if there are no exports to keep, we can just shake out the whole file
|
|
123
|
+
this.imports = [];
|
|
124
|
+
this.exports = {};
|
|
125
|
+
this.reexports = [];
|
|
126
|
+
this.deadExports = Object.keys(exports);
|
|
127
|
+
file.path.get('body').forEach(p => {
|
|
128
|
+
p.remove();
|
|
129
|
+
});
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const importedAsSideEffect = onlyExportsSet.has('side-effect');
|
|
133
|
+
onlyExportsSet.delete('side-effect');
|
|
134
|
+
|
|
135
|
+
// Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be
|
|
136
|
+
// shaken as they will break interopRequireDefault babel helper
|
|
137
|
+
// See example in shaker-plugin.test.ts
|
|
138
|
+
// Real-world example was found in preact/compat npm package
|
|
139
|
+
if (onlyExportsSet.has('default') && hasDefault && !collected.isEsModule) {
|
|
140
|
+
this.imports = collected.imports;
|
|
141
|
+
this.exports = exports;
|
|
142
|
+
this.reexports = collected.reexports;
|
|
143
|
+
this.deadExports = [];
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (!onlyExportsSet.has('*')) {
|
|
147
|
+
// __esModule should be kept alive
|
|
148
|
+
onlyExportsSet.add('__esModule');
|
|
149
|
+
const aliveExports = new Set();
|
|
150
|
+
const importNames = collected.imports.map(({
|
|
151
|
+
imported
|
|
152
|
+
}) => imported);
|
|
153
|
+
Object.entries(exports).forEach(([exported, local]) => {
|
|
154
|
+
if (onlyExportsSet.has(exported)) {
|
|
155
|
+
aliveExports.add(local);
|
|
156
|
+
} else if (importNames.includes(local.node.name || '')) {
|
|
157
|
+
aliveExports.add(local);
|
|
158
|
+
} else if ([...aliveExports].some(alive => alive === local)) {
|
|
159
|
+
// It's possible to export multiple values from a single variable initializer, e.g
|
|
160
|
+
// export const { foo, bar } = baz();
|
|
161
|
+
// We need to treat all of them as used if any of them are used, since otherwise
|
|
162
|
+
// we'll attempt to delete the baz() call
|
|
163
|
+
aliveExports.add(local);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
collected.reexports.forEach(exp => {
|
|
167
|
+
if (onlyExportsSet.has(exp.exported)) {
|
|
168
|
+
aliveExports.add(exp.local);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
const exportToPath = new Map();
|
|
172
|
+
Object.entries(exports).forEach(([exported, local]) => {
|
|
173
|
+
exportToPath.set(exported, local);
|
|
174
|
+
});
|
|
175
|
+
collected.reexports.forEach(exp => {
|
|
176
|
+
exportToPath.set(exp.exported, exp.local);
|
|
177
|
+
});
|
|
178
|
+
const notFoundExports = [...onlyExportsSet].filter(exp => exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)));
|
|
179
|
+
exportToPath.clear();
|
|
180
|
+
const isAllExportsFound = notFoundExports.length === 0;
|
|
181
|
+
if (!isAllExportsFound && ifUnknownExport !== 'ignore') {
|
|
182
|
+
if (ifUnknownExport === 'error') {
|
|
183
|
+
throw new Error(`Unknown export(s) requested: ${onlyExports.join(',')}`);
|
|
184
|
+
}
|
|
185
|
+
if (ifUnknownExport === 'reexport-all') {
|
|
186
|
+
// If there are unknown exports, we have keep alive all re-exports.
|
|
187
|
+
if (exports['*'] !== undefined) {
|
|
188
|
+
aliveExports.add(exports['*']);
|
|
189
|
+
}
|
|
190
|
+
collected.reexports.forEach(exp => {
|
|
191
|
+
if (exp.exported === '*') {
|
|
192
|
+
aliveExports.add(exp.local);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
if (ifUnknownExport === 'skip-shaking') {
|
|
197
|
+
this.imports = collected.imports;
|
|
198
|
+
this.exports = exports;
|
|
199
|
+
this.reexports = collected.reexports;
|
|
200
|
+
this.deadExports = [];
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const forDeleting = [...Object.values(exports), ...collected.reexports.map(i => i.local)].filter(exp => !aliveExports.has(exp));
|
|
205
|
+
if (!keepSideEffects && !importedAsSideEffect) {
|
|
206
|
+
// Remove all imports that don't import something explicitly and should not be kept
|
|
207
|
+
sideEffectImports.forEach(i => {
|
|
208
|
+
if (!shouldKeepSideEffect(i.source)) {
|
|
209
|
+
forDeleting.push(i.local);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
const deleted = new Set();
|
|
214
|
+
let dereferenced = [];
|
|
215
|
+
let changed = true;
|
|
216
|
+
while (changed && deleted.size < forDeleting.length) {
|
|
217
|
+
changed = false;
|
|
218
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
219
|
+
for (const path of forDeleting) {
|
|
220
|
+
if (deleted.has(path)) {
|
|
221
|
+
// eslint-disable-next-line no-continue
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
const binding = getBindingForExport(path);
|
|
225
|
+
const action = findActionForNode(path);
|
|
226
|
+
const parent = action?.[1];
|
|
227
|
+
const outerReferences = (binding?.referencePaths || []).filter(ref => ref !== parent && !parent?.isAncestor(ref));
|
|
228
|
+
if (outerReferences.length > 0 && path.isIdentifier()) {
|
|
229
|
+
// Temporary deref it in order to simplify further checks.
|
|
230
|
+
dereference(path);
|
|
231
|
+
dereferenced.push(path);
|
|
232
|
+
}
|
|
233
|
+
if (!deleted.has(path) && (!binding || outerReferences.length === 0)) {
|
|
234
|
+
if (action) {
|
|
235
|
+
applyAction(action);
|
|
236
|
+
} else {
|
|
237
|
+
removeWithRelated([path]);
|
|
238
|
+
}
|
|
239
|
+
deleted.add(path);
|
|
240
|
+
changed = true;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
dereferenced.forEach(path => {
|
|
244
|
+
// If path is still alive, we need to reference it back
|
|
245
|
+
if (!isRemoved(path)) {
|
|
246
|
+
reference(path);
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
dereferenced = [];
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
this.imports = withoutRemoved(collected.imports);
|
|
253
|
+
this.exports = {};
|
|
254
|
+
this.deadExports = [];
|
|
255
|
+
Object.entries(exports).forEach(([exported, local]) => {
|
|
256
|
+
if (isRemoved(local)) {
|
|
257
|
+
this.deadExports.push(exported);
|
|
258
|
+
} else {
|
|
259
|
+
this.exports[exported] = local;
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
this.reexports = withoutRemoved(collected.reexports);
|
|
263
|
+
},
|
|
264
|
+
visitor: {},
|
|
265
|
+
post(file) {
|
|
266
|
+
const log = shakerLogger.extend(getFileIdx(file.opts.filename));
|
|
267
|
+
const processedImports = new Set();
|
|
268
|
+
const imports = new Map();
|
|
269
|
+
const addImport = ({
|
|
270
|
+
imported,
|
|
271
|
+
source
|
|
272
|
+
}) => {
|
|
273
|
+
if (processedImports.has(`${source}:${imported}`)) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
if (!imports.has(source)) {
|
|
277
|
+
imports.set(source, []);
|
|
278
|
+
}
|
|
279
|
+
if (imported) {
|
|
280
|
+
imports.get(source).push(imported);
|
|
281
|
+
}
|
|
282
|
+
processedImports.add(`${source}:${imported}`);
|
|
283
|
+
};
|
|
284
|
+
this.imports.forEach(addImport);
|
|
285
|
+
this.reexports.forEach(addImport);
|
|
286
|
+
log('end', `remaining imports: %O`, imports);
|
|
287
|
+
|
|
288
|
+
// eslint-disable-next-line no-param-reassign
|
|
289
|
+
file.metadata.linariaEvaluator = {
|
|
290
|
+
imports
|
|
291
|
+
};
|
|
292
|
+
invalidateTraversalCache(file.path);
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=shaker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shaker.js","names":["logger","collectExportsAndImports","sideEffectImport","getFileIdx","isRemoved","applyAction","dereference","findActionForNode","reference","removeWithRelated","invalidateTraversalCache","EXT_REGEX","ALLOWED_EXTENSIONS","shouldKeepSideEffect","importPath","ext","match","includes","getBindingForExport","exportPath","isIdentifier","scope","getBinding","node","name","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","withoutRemoved","items","filter","local","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","ref","replaced","replaceWith","isBindingIdentifier","registerConstantViolation","parentPath","pushed","pushContainer","expressionStatement","assignmentExpression","memberExpression","shakerPlugin","babel","keepSideEffects","ifUnknownExport","onlyExports","shakerLogger","extend","pre","file","filename","opts","log","join","onlyExportsSet","Set","collected","path","sideEffectImports","imports","Object","values","reexports","hasLinariaPreval","__linariaPreval","hasDefault","default","has","delete","size","deadExports","keys","remove","importedAsSideEffect","isEsModule","add","aliveExports","importNames","map","imported","entries","exported","some","alive","exp","exportToPath","Map","set","notFoundExports","clear","isAllExportsFound","Error","forDeleting","i","source","push","deleted","dereferenced","changed","binding","action","parent","outerReferences","referencePaths","isAncestor","visitor","post","processedImports","addImport","metadata","linariaEvaluator"],"sources":["../../src/plugins/shaker.ts"],"sourcesContent":["import type { BabelFile, PluginObj, NodePath } from '@babel/core';\nimport type { Binding } from '@babel/traverse';\nimport type {\n Identifier,\n MemberExpression,\n Program,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IMetadata } from '../utils/ShakerMetadata';\nimport type { Exports, IState } from '../utils/collectExportsAndImports';\nimport {\n collectExportsAndImports,\n sideEffectImport,\n} from '../utils/collectExportsAndImports';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { isRemoved } from '../utils/isRemoved';\nimport {\n applyAction,\n dereference,\n findActionForNode,\n reference,\n removeWithRelated,\n} from '../utils/scopeHelpers';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\n\nconst EXT_REGEX = /\\.[0-9a-z]+$/;\nconst ALLOWED_EXTENSIONS = ['.js', '.cjs', '.mjs'];\n\nfunction shouldKeepSideEffect(importPath: string) {\n const [ext] = importPath.match(EXT_REGEX) || [''];\n\n return ext === '' || ALLOWED_EXTENSIONS.includes(ext);\n}\n\nexport interface IShakerOptions {\n ifUnknownExport?: 'error' | 'ignore' | 'reexport-all' | 'skip-shaking';\n keepSideEffects?: boolean;\n onlyExports: string[];\n}\n\ninterface NodeWithName {\n name: string;\n}\n\nfunction getBindingForExport(exportPath: NodePath): Binding | undefined {\n if (exportPath.isIdentifier()) {\n return exportPath.scope.getBinding(exportPath.node.name);\n }\n\n const variableDeclarator = exportPath.findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n if (variableDeclarator) {\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n return variableDeclarator.scope.getBinding(id.node.name);\n }\n }\n\n if (exportPath.isAssignmentExpression()) {\n const left = exportPath.get('left');\n if (left.isIdentifier()) {\n return exportPath.scope.getBinding(left.node.name);\n }\n }\n\n if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {\n return exportPath.scope.getBinding(exportPath.node.id!.name);\n }\n\n return undefined;\n}\n\nconst withoutRemoved = <T extends { local: NodePath }>(items: T[]): T[] =>\n items.filter(({ local }) => !isRemoved(local));\n\nfunction rearrangeExports(\n { types: t }: Core,\n root: NodePath<Program>,\n exportRefs: Map<string, NodePath<MemberExpression>[]>,\n exports: Exports\n): Exports {\n const rearranged = {\n ...exports,\n };\n\n const rootScope = root.scope;\n exportRefs.forEach((refs, name) => {\n if (refs.length <= 1) {\n if (refs.length === 1) {\n // Maybe exports is assigned to another variable?\n const declarator = refs[0].findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n\n if (!declarator) {\n return;\n }\n } else {\n return;\n }\n }\n\n const uid = rootScope.generateUid(name);\n // Define variable in the beginning\n const [declaration] = root.unshiftContainer('body', [\n t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),\n ]);\n\n rootScope.registerDeclaration(declaration);\n\n // Replace every reference with defined variable\n refs.forEach((ref) => {\n const [replaced] = ref.replaceWith(t.identifier(uid));\n if (replaced.isBindingIdentifier()) {\n rootScope.registerConstantViolation(replaced);\n if (replaced.parentPath?.parentPath?.isVariableDeclarator()) {\n // This is `const foo = exports.foo = \"value\"` case\n reference(replaced, replaced, true);\n }\n } else {\n reference(replaced);\n }\n });\n\n // Assign defined variable to the export\n const [pushed] = root.pushContainer('body', [\n t.expressionStatement(\n t.assignmentExpression(\n '=',\n t.memberExpression(t.identifier('exports'), t.identifier(name)),\n t.identifier(uid)\n )\n ),\n ]);\n\n const local = pushed.get('expression.right') as NodePath<Identifier>;\n reference(local);\n\n rearranged[name] = local;\n });\n\n return rearranged;\n}\n\nexport default function shakerPlugin(\n babel: Core,\n {\n keepSideEffects = false,\n ifUnknownExport = 'skip-shaking',\n onlyExports,\n }: IShakerOptions\n): PluginObj<IState & { filename: string }> {\n const shakerLogger = logger.extend('shaker');\n\n return {\n name: '@wyw-in-js/transform/shaker',\n pre(file: BabelFile) {\n this.filename = file.opts.filename!;\n const log = shakerLogger.extend(getFileIdx(this.filename));\n\n log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);\n const onlyExportsSet = new Set(onlyExports);\n\n const collected = collectExportsAndImports(file.path);\n const sideEffectImports = collected.imports.filter(sideEffectImport);\n log(\n 'import-and-exports',\n [\n `imports: ${collected.imports.length} (side-effects: ${sideEffectImports.length})`,\n `exports: ${Object.values(collected.exports).length}`,\n `reexports: ${collected.reexports.length}`,\n ].join(', ')\n );\n\n // We cannot just throw out exports if they are referred in the code\n // Let's dome some replacements\n const exports = rearrangeExports(\n babel,\n file.path,\n collected.exportRefs,\n collected.exports\n );\n\n Object.values(exports).forEach((local) => {\n if (local.isAssignmentExpression()) {\n const left = local.get('left');\n if (left.isIdentifier()) {\n // For some reason babel does not mark id in AssignmentExpression as a reference\n // So we need to do it manually\n reference(left, left, true);\n }\n }\n });\n\n const hasLinariaPreval = exports.__linariaPreval !== undefined;\n const hasDefault = exports.default !== undefined;\n\n // If __linariaPreval is not exported, we can remove it from onlyExports\n if (onlyExportsSet.has('__linariaPreval') && !hasLinariaPreval) {\n onlyExportsSet.delete('__linariaPreval');\n }\n\n if (onlyExportsSet.size === 0) {\n // Fast-lane: if there are no exports to keep, we can just shake out the whole file\n this.imports = [];\n this.exports = {};\n this.reexports = [];\n this.deadExports = Object.keys(exports);\n\n file.path.get('body').forEach((p) => {\n p.remove();\n });\n\n return;\n }\n\n const importedAsSideEffect = onlyExportsSet.has('side-effect');\n onlyExportsSet.delete('side-effect');\n\n // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be\n // shaken as they will break interopRequireDefault babel helper\n // See example in shaker-plugin.test.ts\n // Real-world example was found in preact/compat npm package\n if (\n onlyExportsSet.has('default') &&\n hasDefault &&\n !collected.isEsModule\n ) {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n return;\n }\n\n if (!onlyExportsSet.has('*')) {\n // __esModule should be kept alive\n onlyExportsSet.add('__esModule');\n\n const aliveExports = new Set<NodePath>();\n const importNames = collected.imports.map(({ imported }) => imported);\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (onlyExportsSet.has(exported)) {\n aliveExports.add(local);\n } else if (\n importNames.includes((local.node as NodeWithName).name || '')\n ) {\n aliveExports.add(local);\n } else if ([...aliveExports].some((alive) => alive === local)) {\n // It's possible to export multiple values from a single variable initializer, e.g\n // export const { foo, bar } = baz();\n // We need to treat all of them as used if any of them are used, since otherwise\n // we'll attempt to delete the baz() call\n aliveExports.add(local);\n }\n });\n\n collected.reexports.forEach((exp) => {\n if (onlyExportsSet.has(exp.exported)) {\n aliveExports.add(exp.local);\n }\n });\n\n const exportToPath = new Map<string, NodePath>();\n Object.entries(exports).forEach(([exported, local]) => {\n exportToPath.set(exported, local);\n });\n\n collected.reexports.forEach((exp) => {\n exportToPath.set(exp.exported, exp.local);\n });\n\n const notFoundExports = [...onlyExportsSet].filter(\n (exp) =>\n exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)!)\n );\n exportToPath.clear();\n\n const isAllExportsFound = notFoundExports.length === 0;\n if (!isAllExportsFound && ifUnknownExport !== 'ignore') {\n if (ifUnknownExport === 'error') {\n throw new Error(\n `Unknown export(s) requested: ${onlyExports.join(',')}`\n );\n }\n\n if (ifUnknownExport === 'reexport-all') {\n // If there are unknown exports, we have keep alive all re-exports.\n if (exports['*'] !== undefined) {\n aliveExports.add(exports['*']);\n }\n\n collected.reexports.forEach((exp) => {\n if (exp.exported === '*') {\n aliveExports.add(exp.local);\n }\n });\n }\n\n if (ifUnknownExport === 'skip-shaking') {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n\n return;\n }\n }\n\n const forDeleting = [\n ...Object.values(exports),\n ...collected.reexports.map((i) => i.local),\n ].filter((exp) => !aliveExports.has(exp));\n\n if (!keepSideEffects && !importedAsSideEffect) {\n // Remove all imports that don't import something explicitly and should not be kept\n sideEffectImports.forEach((i) => {\n if (!shouldKeepSideEffect(i.source)) {\n forDeleting.push(i.local);\n }\n });\n }\n\n const deleted = new Set<NodePath>();\n\n let dereferenced: NodePath<Identifier>[] = [];\n let changed = true;\n while (changed && deleted.size < forDeleting.length) {\n changed = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const path of forDeleting) {\n if (deleted.has(path)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const binding = getBindingForExport(path);\n const action = findActionForNode(path);\n const parent = action?.[1];\n const outerReferences = (binding?.referencePaths || []).filter(\n (ref) => ref !== parent && !parent?.isAncestor(ref)\n );\n if (outerReferences.length > 0 && path.isIdentifier()) {\n // Temporary deref it in order to simplify further checks.\n dereference(path);\n dereferenced.push(path);\n }\n\n if (\n !deleted.has(path) &&\n (!binding || outerReferences.length === 0)\n ) {\n if (action) {\n applyAction(action);\n } else {\n removeWithRelated([path]);\n }\n\n deleted.add(path);\n changed = true;\n }\n }\n\n dereferenced.forEach((path) => {\n // If path is still alive, we need to reference it back\n if (!isRemoved(path)) {\n reference(path);\n }\n });\n\n dereferenced = [];\n }\n }\n\n this.imports = withoutRemoved(collected.imports);\n this.exports = {};\n this.deadExports = [];\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (isRemoved(local)) {\n this.deadExports.push(exported);\n } else {\n this.exports[exported] = local;\n }\n });\n\n this.reexports = withoutRemoved(collected.reexports);\n },\n visitor: {},\n post(file: BabelFile) {\n const log = shakerLogger.extend(getFileIdx(file.opts.filename!));\n\n const processedImports = new Set<string>();\n const imports = new Map<string, string[]>();\n const addImport = ({\n imported,\n source,\n }: {\n imported: string;\n source: string;\n }) => {\n if (processedImports.has(`${source}:${imported}`)) {\n return;\n }\n\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n if (imported) {\n imports.get(source)!.push(imported);\n }\n\n processedImports.add(`${source}:${imported}`);\n };\n\n this.imports.forEach(addImport);\n this.reexports.forEach(addImport);\n\n log('end', `remaining imports: %O`, imports);\n\n // eslint-disable-next-line no-param-reassign\n (file.metadata as IMetadata).linariaEvaluator = {\n imports,\n };\n\n invalidateTraversalCache(file.path);\n },\n };\n}\n"],"mappings":"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"}
|
package/esm/shaker.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { hasShakerMetadata } from './utils/ShakerMetadata';
|
|
2
|
+
import { getPluginKey } from './utils/getPluginKey';
|
|
3
|
+
const hasKeyInList = (plugin, list) => {
|
|
4
|
+
const pluginKey = getPluginKey(plugin);
|
|
5
|
+
return pluginKey ? list.some(i => pluginKey.includes(i)) : false;
|
|
6
|
+
};
|
|
7
|
+
const safeResolve = (id, paths) => {
|
|
8
|
+
try {
|
|
9
|
+
return require.resolve(id, {
|
|
10
|
+
paths: paths.filter(i => i !== null)
|
|
11
|
+
});
|
|
12
|
+
} catch {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const shaker = (evalConfig, ast, code, {
|
|
17
|
+
highPriorityPlugins,
|
|
18
|
+
...config
|
|
19
|
+
}, babel) => {
|
|
20
|
+
const preShakePlugins = evalConfig.plugins?.filter(i => hasKeyInList(i, highPriorityPlugins)) ?? [];
|
|
21
|
+
const plugins = [...preShakePlugins, [require.resolve('./plugins/shaker'), config], ...(evalConfig.plugins ?? []).filter(i => !hasKeyInList(i, highPriorityPlugins))];
|
|
22
|
+
const hasCommonjsPlugin = evalConfig.plugins?.some(i => getPluginKey(i) === 'transform-modules-commonjs');
|
|
23
|
+
if (!hasCommonjsPlugin) {
|
|
24
|
+
plugins.push(require.resolve('@babel/plugin-transform-modules-commonjs'));
|
|
25
|
+
}
|
|
26
|
+
if (evalConfig.filename?.endsWith('.ts') || evalConfig.filename?.endsWith('.tsx')) {
|
|
27
|
+
const hasTypescriptPlugin = evalConfig.plugins?.some(i => getPluginKey(i) === 'transform-typescript');
|
|
28
|
+
if (!hasTypescriptPlugin) {
|
|
29
|
+
const preset = safeResolve('@babel/preset-typescript', [evalConfig.filename]);
|
|
30
|
+
const plugin = safeResolve('@babel/plugin-transform-typescript', [evalConfig.filename, preset]);
|
|
31
|
+
if (plugin) {
|
|
32
|
+
plugins.push(plugin);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const transformOptions = {
|
|
37
|
+
...evalConfig,
|
|
38
|
+
caller: {
|
|
39
|
+
name: 'linaria'
|
|
40
|
+
},
|
|
41
|
+
plugins
|
|
42
|
+
};
|
|
43
|
+
const transformed = babel.transformFromAstSync(ast, code, transformOptions);
|
|
44
|
+
if (!transformed || !hasShakerMetadata(transformed.metadata)) {
|
|
45
|
+
throw new Error(`${evalConfig.filename} has no shaker metadata`);
|
|
46
|
+
}
|
|
47
|
+
return [transformed.ast, transformed.code ?? '', transformed.metadata.linariaEvaluator.imports];
|
|
48
|
+
};
|
|
49
|
+
export default shaker;
|
|
50
|
+
//# sourceMappingURL=shaker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shaker.js","names":["hasShakerMetadata","getPluginKey","hasKeyInList","plugin","list","pluginKey","some","i","includes","safeResolve","id","paths","require","resolve","filter","shaker","evalConfig","ast","code","highPriorityPlugins","config","babel","preShakePlugins","plugins","hasCommonjsPlugin","push","filename","endsWith","hasTypescriptPlugin","preset","transformOptions","caller","name","transformed","transformFromAstSync","metadata","Error","linariaEvaluator","imports"],"sources":["../src/shaker.ts"],"sourcesContent":["import type { TransformOptions, PluginItem } from '@babel/core';\n\nimport type { Evaluator } from '@wyw-in-js/shared';\n\nimport { hasShakerMetadata } from './utils/ShakerMetadata';\nimport { getPluginKey } from './utils/getPluginKey';\n\nconst hasKeyInList = (plugin: PluginItem, list: string[]): boolean => {\n const pluginKey = getPluginKey(plugin);\n return pluginKey ? list.some((i) => pluginKey.includes(i)) : false;\n};\n\nconst safeResolve = (id: string, paths: (string | null)[]): string | null => {\n try {\n return require.resolve(id, {\n paths: paths.filter((i) => i !== null) as string[],\n });\n } catch {\n return null;\n }\n};\n\nconst shaker: Evaluator = (\n evalConfig,\n ast,\n code,\n { highPriorityPlugins, ...config },\n babel\n) => {\n const preShakePlugins =\n evalConfig.plugins?.filter((i) => hasKeyInList(i, highPriorityPlugins)) ??\n [];\n\n const plugins = [\n ...preShakePlugins,\n [require.resolve('./plugins/shaker'), config],\n ...(evalConfig.plugins ?? []).filter(\n (i) => !hasKeyInList(i, highPriorityPlugins)\n ),\n ];\n\n const hasCommonjsPlugin = evalConfig.plugins?.some(\n (i) => getPluginKey(i) === 'transform-modules-commonjs'\n );\n\n if (!hasCommonjsPlugin) {\n plugins.push(require.resolve('@babel/plugin-transform-modules-commonjs'));\n }\n\n if (\n evalConfig.filename?.endsWith('.ts') ||\n evalConfig.filename?.endsWith('.tsx')\n ) {\n const hasTypescriptPlugin = evalConfig.plugins?.some(\n (i) => getPluginKey(i) === 'transform-typescript'\n );\n\n if (!hasTypescriptPlugin) {\n const preset = safeResolve('@babel/preset-typescript', [\n evalConfig.filename,\n ]);\n const plugin = safeResolve('@babel/plugin-transform-typescript', [\n evalConfig.filename,\n preset,\n ]);\n\n if (plugin) {\n plugins.push(plugin);\n }\n }\n }\n\n const transformOptions: TransformOptions = {\n ...evalConfig,\n caller: {\n name: 'linaria',\n },\n plugins,\n };\n\n const transformed = babel.transformFromAstSync(ast, code, transformOptions);\n\n if (!transformed || !hasShakerMetadata(transformed.metadata)) {\n throw new Error(`${evalConfig.filename} has no shaker metadata`);\n }\n\n return [\n transformed.ast!,\n transformed.code ?? '',\n transformed.metadata.linariaEvaluator.imports,\n ];\n};\n\nexport default shaker;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/* eslint-disable no-param-reassign */
|
|
2
|
+
|
|
3
|
+
import { getFileIdx } from '../utils/getFileIdx';
|
|
4
|
+
const hasKey = (obj, key) => (typeof obj === 'object' || typeof obj === 'function') && obj !== null && key in obj;
|
|
5
|
+
const VALUES = Symbol('values');
|
|
6
|
+
const isProxy = obj => typeof obj === 'object' && obj !== null && VALUES in obj;
|
|
7
|
+
export const createExports = log => {
|
|
8
|
+
let exports = {};
|
|
9
|
+
const lazyFields = new Set();
|
|
10
|
+
return new Proxy(exports, {
|
|
11
|
+
get: (_target, key) => {
|
|
12
|
+
if (key === VALUES) {
|
|
13
|
+
return exports;
|
|
14
|
+
}
|
|
15
|
+
let value;
|
|
16
|
+
if (key in exports) {
|
|
17
|
+
value = exports[key];
|
|
18
|
+
} else {
|
|
19
|
+
// Support Object.prototype methods on `exports`
|
|
20
|
+
// e.g `exports.hasOwnProperty`
|
|
21
|
+
value = Reflect.get(exports, key);
|
|
22
|
+
}
|
|
23
|
+
if (value === undefined && 'default' in exports) {
|
|
24
|
+
const defaultValue = exports.default;
|
|
25
|
+
if (hasKey(defaultValue, key)) {
|
|
26
|
+
log('⚠️ %s has been found in `default`. It indicates that ESM to CJS conversion went wrong.', key);
|
|
27
|
+
value = defaultValue[key];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (value !== undefined && lazyFields.has(key)) {
|
|
31
|
+
value = value();
|
|
32
|
+
}
|
|
33
|
+
log('get %s: %o', key, value);
|
|
34
|
+
return value;
|
|
35
|
+
},
|
|
36
|
+
has: (_target, key) => {
|
|
37
|
+
if (key === VALUES) return true;
|
|
38
|
+
return key in exports;
|
|
39
|
+
},
|
|
40
|
+
ownKeys: () => {
|
|
41
|
+
return Object.keys(exports);
|
|
42
|
+
},
|
|
43
|
+
set: (_target, key, value) => {
|
|
44
|
+
if (key === VALUES) {
|
|
45
|
+
exports = value;
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
if (key !== '__esModule') {
|
|
49
|
+
log('set %s: %o', key, value);
|
|
50
|
+
}
|
|
51
|
+
if (value !== undefined) {
|
|
52
|
+
exports[key] = value;
|
|
53
|
+
lazyFields.delete(key);
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
},
|
|
57
|
+
defineProperty: (_target, key, descriptor) => {
|
|
58
|
+
const {
|
|
59
|
+
value
|
|
60
|
+
} = descriptor;
|
|
61
|
+
if (value !== undefined) {
|
|
62
|
+
if (key !== '__esModule') {
|
|
63
|
+
log('defineProperty %s with value %o', key, value);
|
|
64
|
+
}
|
|
65
|
+
exports[key] = value;
|
|
66
|
+
lazyFields.delete(key);
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
if ('get' in descriptor) {
|
|
70
|
+
if (lazyFields.has(key)) {
|
|
71
|
+
const prev = exports[key];
|
|
72
|
+
exports[key] = () => {
|
|
73
|
+
const v = descriptor.get?.();
|
|
74
|
+
if (v !== undefined) {
|
|
75
|
+
return v;
|
|
76
|
+
}
|
|
77
|
+
return prev();
|
|
78
|
+
};
|
|
79
|
+
} else {
|
|
80
|
+
const prev = exports[key];
|
|
81
|
+
exports[key] = () => {
|
|
82
|
+
const v = descriptor.get?.();
|
|
83
|
+
if (v !== undefined) {
|
|
84
|
+
return v;
|
|
85
|
+
}
|
|
86
|
+
return prev;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
lazyFields.add(key);
|
|
90
|
+
log('defineProperty %s with getter', key);
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
},
|
|
94
|
+
getOwnPropertyDescriptor: (_target, key) => {
|
|
95
|
+
if (key in exports) return {
|
|
96
|
+
enumerable: true,
|
|
97
|
+
configurable: true
|
|
98
|
+
};
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
const EXPORTS = Symbol('exports');
|
|
104
|
+
let entrypointSeqId = 0;
|
|
105
|
+
export class BaseEntrypoint {
|
|
106
|
+
static createExports = createExports;
|
|
107
|
+
// eslint-disable-next-line no-plusplus
|
|
108
|
+
seqId = entrypointSeqId++;
|
|
109
|
+
#exports;
|
|
110
|
+
constructor(services, evaluatedOnly, exports, generation, name, only, parents) {
|
|
111
|
+
this.services = services;
|
|
112
|
+
this.evaluatedOnly = evaluatedOnly;
|
|
113
|
+
this.generation = generation;
|
|
114
|
+
this.name = name;
|
|
115
|
+
this.only = only;
|
|
116
|
+
this.parents = parents;
|
|
117
|
+
this.idx = getFileIdx(name);
|
|
118
|
+
this.log = parents[0]?.log.extend(this.ref, '->') ?? services.log.extend(this.ref);
|
|
119
|
+
let isExportsInherited = false;
|
|
120
|
+
if (exports) {
|
|
121
|
+
if (isProxy(exports)) {
|
|
122
|
+
this.#exports = exports;
|
|
123
|
+
isExportsInherited = true;
|
|
124
|
+
} else {
|
|
125
|
+
this.#exports = createExports(this.log);
|
|
126
|
+
this.#exports[EXPORTS] = exports;
|
|
127
|
+
}
|
|
128
|
+
this.exports = exports;
|
|
129
|
+
} else {
|
|
130
|
+
this.#exports = BaseEntrypoint.createExports(this.log);
|
|
131
|
+
}
|
|
132
|
+
services.eventEmitter.entrypointEvent(this.seqId, {
|
|
133
|
+
class: this.constructor.name,
|
|
134
|
+
evaluatedOnly: this.evaluatedOnly,
|
|
135
|
+
filename: name,
|
|
136
|
+
generation,
|
|
137
|
+
idx: this.idx,
|
|
138
|
+
isExportsInherited,
|
|
139
|
+
only,
|
|
140
|
+
parentId: parents[0]?.seqId ?? null,
|
|
141
|
+
type: 'created'
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
get exports() {
|
|
145
|
+
if (EXPORTS in this.#exports) {
|
|
146
|
+
return this.#exports[EXPORTS];
|
|
147
|
+
}
|
|
148
|
+
return this.#exports;
|
|
149
|
+
}
|
|
150
|
+
set exports(value) {
|
|
151
|
+
if (isProxy(value)) {
|
|
152
|
+
this.#exports[VALUES] = value[VALUES];
|
|
153
|
+
} else {
|
|
154
|
+
this.#exports[EXPORTS] = value;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
get ref() {
|
|
158
|
+
return `${this.idx}#${this.generation}`;
|
|
159
|
+
}
|
|
160
|
+
get exportsProxy() {
|
|
161
|
+
return this.#exports;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=BaseEntrypoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseEntrypoint.js","names":["getFileIdx","hasKey","obj","key","VALUES","Symbol","isProxy","createExports","log","exports","lazyFields","Set","Proxy","get","_target","value","Reflect","undefined","defaultValue","default","has","ownKeys","Object","keys","set","delete","defineProperty","descriptor","prev","v","add","getOwnPropertyDescriptor","enumerable","configurable","EXPORTS","entrypointSeqId","BaseEntrypoint","seqId","constructor","services","evaluatedOnly","generation","name","only","parents","idx","extend","ref","isExportsInherited","eventEmitter","entrypointEvent","class","filename","parentId","type","exportsProxy"],"sources":["../../src/transform/BaseEntrypoint.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { Debugger } from '@wyw-in-js/shared';\n\nimport type { ParentEntrypoint } from '../types';\nimport { getFileIdx } from '../utils/getFileIdx';\n\nimport type { Services } from './types';\n\nconst hasKey = <TKey extends string | symbol>(\n obj: unknown,\n key: TKey\n): obj is Record<TKey, unknown> =>\n (typeof obj === 'object' || typeof obj === 'function') &&\n obj !== null &&\n key in obj;\n\nconst VALUES = Symbol('values');\n\nconst isProxy = (\n obj: unknown\n): obj is { [VALUES]: Record<string | symbol, unknown> } =>\n typeof obj === 'object' && obj !== null && VALUES in obj;\n\nexport const createExports = (log: Debugger) => {\n let exports: Record<string | symbol, unknown> = {};\n const lazyFields = new Set<string | symbol>();\n\n return new Proxy(exports, {\n get: (_target, key) => {\n if (key === VALUES) {\n return exports;\n }\n\n let value: unknown;\n if (key in exports) {\n value = exports[key];\n } else {\n // Support Object.prototype methods on `exports`\n // e.g `exports.hasOwnProperty`\n value = Reflect.get(exports, key);\n }\n\n if (value === undefined && 'default' in exports) {\n const defaultValue = exports.default;\n if (hasKey(defaultValue, key)) {\n log(\n '⚠️ %s has been found in `default`. It indicates that ESM to CJS conversion went wrong.',\n key\n );\n value = defaultValue[key];\n }\n }\n\n if (value !== undefined && lazyFields.has(key)) {\n value = (value as () => unknown)();\n }\n\n log('get %s: %o', key, value);\n return value;\n },\n has: (_target, key) => {\n if (key === VALUES) return true;\n return key in exports;\n },\n ownKeys: () => {\n return Object.keys(exports);\n },\n set: (_target, key, value) => {\n if (key === VALUES) {\n exports = value;\n return true;\n }\n\n if (key !== '__esModule') {\n log('set %s: %o', key, value);\n }\n\n if (value !== undefined) {\n exports[key] = value;\n lazyFields.delete(key);\n }\n\n return true;\n },\n defineProperty: (_target, key, descriptor) => {\n const { value } = descriptor;\n if (value !== undefined) {\n if (key !== '__esModule') {\n log('defineProperty %s with value %o', key, value);\n }\n\n exports[key] = value;\n lazyFields.delete(key);\n\n return true;\n }\n\n if ('get' in descriptor) {\n if (lazyFields.has(key)) {\n const prev = exports[key] as () => void;\n exports[key] = () => {\n const v = descriptor.get?.();\n if (v !== undefined) {\n return v;\n }\n\n return prev();\n };\n } else {\n const prev = exports[key];\n exports[key] = () => {\n const v = descriptor.get?.();\n if (v !== undefined) {\n return v;\n }\n\n return prev;\n };\n }\n\n lazyFields.add(key);\n log('defineProperty %s with getter', key);\n }\n\n return true;\n },\n getOwnPropertyDescriptor: (_target, key) => {\n if (key in exports)\n return {\n enumerable: true,\n configurable: true,\n };\n\n return undefined;\n },\n });\n};\n\nconst EXPORTS = Symbol('exports');\n\nlet entrypointSeqId = 0;\n\nexport abstract class BaseEntrypoint {\n public static createExports = createExports;\n\n public readonly idx: string;\n\n public readonly log: Debugger;\n\n // eslint-disable-next-line no-plusplus\n public readonly seqId = entrypointSeqId++;\n\n readonly #exports: Record<string | symbol, unknown>;\n\n protected constructor(\n protected services: Services,\n public readonly evaluatedOnly: string[],\n exports: Record<string | symbol, unknown> | undefined,\n public readonly generation: number,\n public readonly name: string,\n public readonly only: string[],\n public readonly parents: ParentEntrypoint[]\n ) {\n this.idx = getFileIdx(name);\n this.log =\n parents[0]?.log.extend(this.ref, '->') ?? services.log.extend(this.ref);\n\n let isExportsInherited = false;\n if (exports) {\n if (isProxy(exports)) {\n this.#exports = exports;\n isExportsInherited = true;\n } else {\n this.#exports = createExports(this.log);\n this.#exports[EXPORTS] = exports;\n }\n this.exports = exports;\n } else {\n this.#exports = BaseEntrypoint.createExports(this.log);\n }\n\n services.eventEmitter.entrypointEvent(this.seqId, {\n class: this.constructor.name,\n evaluatedOnly: this.evaluatedOnly,\n filename: name,\n generation,\n idx: this.idx,\n isExportsInherited,\n only,\n parentId: parents[0]?.seqId ?? null,\n type: 'created',\n });\n }\n\n public get exports(): Record<string | symbol, unknown> {\n if (EXPORTS in this.#exports) {\n return this.#exports[EXPORTS] as Record<string | symbol, unknown>;\n }\n\n return this.#exports;\n }\n\n public set exports(value: unknown) {\n if (isProxy(value)) {\n this.#exports[VALUES] = value[VALUES];\n } else {\n this.#exports[EXPORTS] = value;\n }\n }\n\n public get ref() {\n return `${this.idx}#${this.generation}`;\n }\n\n protected get exportsProxy() {\n return this.#exports;\n }\n}\n"],"mappings":"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"}
|