@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,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createFileReporter = void 0;
|
|
7
|
+
/* eslint-disable no-console */
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const EventEmitter_1 = require("../utils/EventEmitter");
|
|
11
|
+
const workingDir = process.cwd();
|
|
12
|
+
function replacer(_key, value) {
|
|
13
|
+
if (typeof value === 'string' && path_1.default.isAbsolute(value)) {
|
|
14
|
+
return path_1.default.relative(workingDir, value);
|
|
15
|
+
}
|
|
16
|
+
if (value instanceof Map) {
|
|
17
|
+
return Array.from(value.entries()).reduce((obj, [k, v]) => {
|
|
18
|
+
const key = replacer(k, k);
|
|
19
|
+
return {
|
|
20
|
+
...obj,
|
|
21
|
+
[key]: replacer(key, v),
|
|
22
|
+
};
|
|
23
|
+
}, {});
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
function printTimings(timings, startedAt, sourceRoot) {
|
|
28
|
+
if (timings.size === 0) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
console.log(`\nTimings:`);
|
|
32
|
+
console.log(` Total: ${(performance.now() - startedAt).toFixed()}ms`);
|
|
33
|
+
Array.from(timings.entries()).forEach(([label, byLabel]) => {
|
|
34
|
+
console.log(`\n By ${label}:`);
|
|
35
|
+
const array = Array.from(byLabel.entries());
|
|
36
|
+
// array.sort(([, a], [, b]) => b - a);
|
|
37
|
+
array
|
|
38
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
39
|
+
.forEach(([value, time]) => {
|
|
40
|
+
const name = value.startsWith(sourceRoot)
|
|
41
|
+
? path_1.default.relative(sourceRoot, value)
|
|
42
|
+
: value;
|
|
43
|
+
console.log(` ${name}: ${time}ms`);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const writeJSONl = (stream, data) => {
|
|
48
|
+
stream.write(`${JSON.stringify(data, replacer)}\n`);
|
|
49
|
+
};
|
|
50
|
+
const createFileReporter = (options = false) => {
|
|
51
|
+
if (!options || !options.dir) {
|
|
52
|
+
return {
|
|
53
|
+
emitter: EventEmitter_1.EventEmitter.dummy,
|
|
54
|
+
onDone: () => { },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const reportFolder = (0, fs_1.existsSync)(options.dir)
|
|
58
|
+
? options.dir
|
|
59
|
+
: (0, fs_1.mkdirSync)(options.dir, {
|
|
60
|
+
recursive: true,
|
|
61
|
+
});
|
|
62
|
+
if (!reportFolder) {
|
|
63
|
+
throw new Error(`Could not create directory ${options.dir}`);
|
|
64
|
+
}
|
|
65
|
+
const actionStream = (0, fs_1.createWriteStream)(path_1.default.join(options.dir, 'actions.jsonl'));
|
|
66
|
+
const dependenciesStream = (0, fs_1.createWriteStream)(path_1.default.join(options.dir, 'dependencies.jsonl'));
|
|
67
|
+
const entrypointStream = (0, fs_1.createWriteStream)(path_1.default.join(options.dir, 'entrypoints.jsonl'));
|
|
68
|
+
const startedAt = performance.now();
|
|
69
|
+
const timings = new Map();
|
|
70
|
+
const addTiming = (label, key, value) => {
|
|
71
|
+
if (!timings.has(label)) {
|
|
72
|
+
timings.set(label, new Map());
|
|
73
|
+
}
|
|
74
|
+
const forLabel = timings.get(label);
|
|
75
|
+
forLabel.set(key, Math.round((forLabel.get(key) || 0) + value));
|
|
76
|
+
};
|
|
77
|
+
const processDependencyEvent = ({ file, only, imports, fileIdx, }) => {
|
|
78
|
+
writeJSONl(dependenciesStream, {
|
|
79
|
+
file,
|
|
80
|
+
only,
|
|
81
|
+
imports,
|
|
82
|
+
fileIdx,
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
const processSingleEvent = (meta) => {
|
|
86
|
+
if (meta.type === 'dependency') {
|
|
87
|
+
processDependencyEvent(meta);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const startTimes = new Map();
|
|
91
|
+
const onEvent = (meta, type) => {
|
|
92
|
+
if (type === 'single') {
|
|
93
|
+
processSingleEvent(meta);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (type === 'start') {
|
|
97
|
+
Object.entries(meta).forEach(([label, value]) => {
|
|
98
|
+
startTimes.set(`${label}\0${value}`, performance.now());
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
Object.entries(meta).forEach(([label, value]) => {
|
|
103
|
+
const startTime = startTimes.get(`${label}\0${value}`);
|
|
104
|
+
if (startTime) {
|
|
105
|
+
addTiming(label, String(value), performance.now() - startTime);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
let actionId = 0;
|
|
111
|
+
const onAction = (...args) => {
|
|
112
|
+
if ((0, EventEmitter_1.isOnActionStartArgs)(args)) {
|
|
113
|
+
const [, timestamp, type, idx, entrypointRef] = args;
|
|
114
|
+
writeJSONl(actionStream, {
|
|
115
|
+
actionId,
|
|
116
|
+
entrypointRef,
|
|
117
|
+
idx,
|
|
118
|
+
startedAt: timestamp,
|
|
119
|
+
type,
|
|
120
|
+
});
|
|
121
|
+
// eslint-disable-next-line no-plusplus
|
|
122
|
+
return actionId++;
|
|
123
|
+
}
|
|
124
|
+
const [result, timestamp, id, isAsync, error] = args;
|
|
125
|
+
writeJSONl(actionStream, {
|
|
126
|
+
actionId: id,
|
|
127
|
+
error,
|
|
128
|
+
finishedAt: timestamp,
|
|
129
|
+
isAsync,
|
|
130
|
+
result: `${result}ed`,
|
|
131
|
+
});
|
|
132
|
+
return id;
|
|
133
|
+
};
|
|
134
|
+
const onEntrypointEvent = (emitterId, timestamp, event) => {
|
|
135
|
+
entrypointStream.write(`${JSON.stringify([emitterId, timestamp, event])}\n`);
|
|
136
|
+
};
|
|
137
|
+
const emitter = new EventEmitter_1.EventEmitter(onEvent, onAction, onEntrypointEvent);
|
|
138
|
+
return {
|
|
139
|
+
emitter,
|
|
140
|
+
onDone: (sourceRoot) => {
|
|
141
|
+
if (options.print) {
|
|
142
|
+
printTimings(timings, startedAt, sourceRoot);
|
|
143
|
+
console.log('\nMemory usage:', process.memoryUsage());
|
|
144
|
+
}
|
|
145
|
+
actionStream.end();
|
|
146
|
+
dependenciesStream.end();
|
|
147
|
+
timings.clear();
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
exports.createFileReporter = createFileReporter;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is an entry point for module evaluation for getting lazy dependencies.
|
|
3
|
+
*/
|
|
4
|
+
import type { Entrypoint } from '../transform/Entrypoint';
|
|
5
|
+
import type { Services } from '../transform/types';
|
|
6
|
+
export interface IEvaluateResult {
|
|
7
|
+
dependencies: string[];
|
|
8
|
+
value: Record<string | symbol, unknown>;
|
|
9
|
+
}
|
|
10
|
+
export default function evaluate(services: Services, entrypoint: Entrypoint): IEvaluateResult;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* This file is an entry point for module evaluation for getting lazy dependencies.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const module_1 = require("../module");
|
|
7
|
+
function evaluate(services, entrypoint) {
|
|
8
|
+
const m = new module_1.Module(services, entrypoint);
|
|
9
|
+
m.evaluate();
|
|
10
|
+
return {
|
|
11
|
+
value: entrypoint.exports,
|
|
12
|
+
dependencies: m.dependencies,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
exports.default = evaluate;
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export { slugify } from '@wyw-in-js/shared';
|
|
2
|
+
export { createFileReporter } from './debug/fileReporter';
|
|
3
|
+
export type { IFileReporterOptions } from './debug/fileReporter';
|
|
4
|
+
export { default as preeval } from './plugins/preeval';
|
|
5
|
+
export { getTransformMetadata, withTransformMetadata, } from './utils/TransformMetadata';
|
|
6
|
+
export type { WYWTransformMetadata } from './utils/TransformMetadata';
|
|
7
|
+
export { Module, DefaultModuleImplementation } from './module';
|
|
8
|
+
export { transform } from './transform';
|
|
9
|
+
export { isUnprocessedEntrypointError, UnprocessedEntrypointError, } from './transform/actions/UnprocessedEntrypointError';
|
|
10
|
+
export * from './types';
|
|
11
|
+
export { EvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';
|
|
12
|
+
export type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';
|
|
13
|
+
export { parseFile } from './transform/Entrypoint.helpers';
|
|
14
|
+
export type { LoadAndParseFn } from './transform/Entrypoint.types';
|
|
15
|
+
export { baseHandlers } from './transform/generators';
|
|
16
|
+
export { prepareCode } from './transform/generators/transform';
|
|
17
|
+
export { Entrypoint } from './transform/Entrypoint';
|
|
18
|
+
export { transformUrl } from './transform/generators/extract';
|
|
19
|
+
export { asyncResolveImports, syncResolveImports, } from './transform/generators/resolveImports';
|
|
20
|
+
export { loadLinariaOptions } from './transform/helpers/loadLinariaOptions';
|
|
21
|
+
export { withDefaultServices } from './transform/helpers/withDefaultServices';
|
|
22
|
+
export type { Services } from './transform/types';
|
|
23
|
+
export type { EventEmitter } from './utils/EventEmitter';
|
|
24
|
+
export { isNode } from './utils/isNode';
|
|
25
|
+
export { getTagProcessor } from './utils/getTagProcessor';
|
|
26
|
+
export { getVisitorKeys } from './utils/getVisitorKeys';
|
|
27
|
+
export type { VisitorKeys } from './utils/getVisitorKeys';
|
|
28
|
+
export { peek } from './utils/peek';
|
|
29
|
+
export { processTemplateExpression } from './utils/processTemplateExpression';
|
|
30
|
+
export { TransformCacheCollection } from './cache';
|
package/types/index.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.TransformCacheCollection = exports.processTemplateExpression = exports.peek = exports.getVisitorKeys = exports.getTagProcessor = exports.isNode = exports.withDefaultServices = exports.loadLinariaOptions = exports.syncResolveImports = exports.asyncResolveImports = exports.transformUrl = exports.Entrypoint = exports.prepareCode = exports.baseHandlers = exports.parseFile = exports.EvaluatedEntrypoint = exports.UnprocessedEntrypointError = exports.isUnprocessedEntrypointError = exports.transform = exports.DefaultModuleImplementation = exports.Module = exports.withTransformMetadata = exports.getTransformMetadata = exports.preeval = exports.createFileReporter = exports.slugify = void 0;
|
|
21
|
+
var shared_1 = require("@wyw-in-js/shared");
|
|
22
|
+
Object.defineProperty(exports, "slugify", { enumerable: true, get: function () { return shared_1.slugify; } });
|
|
23
|
+
var fileReporter_1 = require("./debug/fileReporter");
|
|
24
|
+
Object.defineProperty(exports, "createFileReporter", { enumerable: true, get: function () { return fileReporter_1.createFileReporter; } });
|
|
25
|
+
var preeval_1 = require("./plugins/preeval");
|
|
26
|
+
Object.defineProperty(exports, "preeval", { enumerable: true, get: function () { return __importDefault(preeval_1).default; } });
|
|
27
|
+
var TransformMetadata_1 = require("./utils/TransformMetadata");
|
|
28
|
+
Object.defineProperty(exports, "getTransformMetadata", { enumerable: true, get: function () { return TransformMetadata_1.getTransformMetadata; } });
|
|
29
|
+
Object.defineProperty(exports, "withTransformMetadata", { enumerable: true, get: function () { return TransformMetadata_1.withTransformMetadata; } });
|
|
30
|
+
var module_1 = require("./module");
|
|
31
|
+
Object.defineProperty(exports, "Module", { enumerable: true, get: function () { return module_1.Module; } });
|
|
32
|
+
Object.defineProperty(exports, "DefaultModuleImplementation", { enumerable: true, get: function () { return module_1.DefaultModuleImplementation; } });
|
|
33
|
+
var transform_1 = require("./transform");
|
|
34
|
+
Object.defineProperty(exports, "transform", { enumerable: true, get: function () { return transform_1.transform; } });
|
|
35
|
+
var UnprocessedEntrypointError_1 = require("./transform/actions/UnprocessedEntrypointError");
|
|
36
|
+
Object.defineProperty(exports, "isUnprocessedEntrypointError", { enumerable: true, get: function () { return UnprocessedEntrypointError_1.isUnprocessedEntrypointError; } });
|
|
37
|
+
Object.defineProperty(exports, "UnprocessedEntrypointError", { enumerable: true, get: function () { return UnprocessedEntrypointError_1.UnprocessedEntrypointError; } });
|
|
38
|
+
__exportStar(require("./types"), exports);
|
|
39
|
+
var EvaluatedEntrypoint_1 = require("./transform/EvaluatedEntrypoint");
|
|
40
|
+
Object.defineProperty(exports, "EvaluatedEntrypoint", { enumerable: true, get: function () { return EvaluatedEntrypoint_1.EvaluatedEntrypoint; } });
|
|
41
|
+
var Entrypoint_helpers_1 = require("./transform/Entrypoint.helpers");
|
|
42
|
+
Object.defineProperty(exports, "parseFile", { enumerable: true, get: function () { return Entrypoint_helpers_1.parseFile; } });
|
|
43
|
+
var generators_1 = require("./transform/generators");
|
|
44
|
+
Object.defineProperty(exports, "baseHandlers", { enumerable: true, get: function () { return generators_1.baseHandlers; } });
|
|
45
|
+
var transform_2 = require("./transform/generators/transform");
|
|
46
|
+
Object.defineProperty(exports, "prepareCode", { enumerable: true, get: function () { return transform_2.prepareCode; } });
|
|
47
|
+
var Entrypoint_1 = require("./transform/Entrypoint");
|
|
48
|
+
Object.defineProperty(exports, "Entrypoint", { enumerable: true, get: function () { return Entrypoint_1.Entrypoint; } });
|
|
49
|
+
var extract_1 = require("./transform/generators/extract");
|
|
50
|
+
Object.defineProperty(exports, "transformUrl", { enumerable: true, get: function () { return extract_1.transformUrl; } });
|
|
51
|
+
var resolveImports_1 = require("./transform/generators/resolveImports");
|
|
52
|
+
Object.defineProperty(exports, "asyncResolveImports", { enumerable: true, get: function () { return resolveImports_1.asyncResolveImports; } });
|
|
53
|
+
Object.defineProperty(exports, "syncResolveImports", { enumerable: true, get: function () { return resolveImports_1.syncResolveImports; } });
|
|
54
|
+
var loadLinariaOptions_1 = require("./transform/helpers/loadLinariaOptions");
|
|
55
|
+
Object.defineProperty(exports, "loadLinariaOptions", { enumerable: true, get: function () { return loadLinariaOptions_1.loadLinariaOptions; } });
|
|
56
|
+
var withDefaultServices_1 = require("./transform/helpers/withDefaultServices");
|
|
57
|
+
Object.defineProperty(exports, "withDefaultServices", { enumerable: true, get: function () { return withDefaultServices_1.withDefaultServices; } });
|
|
58
|
+
var isNode_1 = require("./utils/isNode");
|
|
59
|
+
Object.defineProperty(exports, "isNode", { enumerable: true, get: function () { return isNode_1.isNode; } });
|
|
60
|
+
var getTagProcessor_1 = require("./utils/getTagProcessor");
|
|
61
|
+
Object.defineProperty(exports, "getTagProcessor", { enumerable: true, get: function () { return getTagProcessor_1.getTagProcessor; } });
|
|
62
|
+
var getVisitorKeys_1 = require("./utils/getVisitorKeys");
|
|
63
|
+
Object.defineProperty(exports, "getVisitorKeys", { enumerable: true, get: function () { return getVisitorKeys_1.getVisitorKeys; } });
|
|
64
|
+
var peek_1 = require("./utils/peek");
|
|
65
|
+
Object.defineProperty(exports, "peek", { enumerable: true, get: function () { return peek_1.peek; } });
|
|
66
|
+
var processTemplateExpression_1 = require("./utils/processTemplateExpression");
|
|
67
|
+
Object.defineProperty(exports, "processTemplateExpression", { enumerable: true, get: function () { return processTemplateExpression_1.processTemplateExpression; } });
|
|
68
|
+
var cache_1 = require("./cache");
|
|
69
|
+
Object.defineProperty(exports, "TransformCacheCollection", { enumerable: true, get: function () { return cache_1.TransformCacheCollection; } });
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This is a custom implementation for the module system for evaluating code,
|
|
3
|
+
* used for resolving values for dependencies interpolated in `css` or `styled`.
|
|
4
|
+
*
|
|
5
|
+
* This serves 2 purposes:
|
|
6
|
+
* - Avoid leakage from evaluated code to module cache in current context, e.g. `babel-register`
|
|
7
|
+
* - Allow us to invalidate the module cache without affecting other stuff, necessary for rebuilds
|
|
8
|
+
*
|
|
9
|
+
* We also use it to transpile the code with Babel by default.
|
|
10
|
+
* We also store source maps for it to provide correct error stacktraces.
|
|
11
|
+
*
|
|
12
|
+
*/
|
|
13
|
+
/// <reference types="node" />
|
|
14
|
+
/// <reference types="debug" />
|
|
15
|
+
import NativeModule from 'module';
|
|
16
|
+
import type { Debugger } from '@wyw-in-js/shared';
|
|
17
|
+
import './utils/dispose-polyfill';
|
|
18
|
+
import { Entrypoint } from './transform/Entrypoint';
|
|
19
|
+
import type { IEntrypointDependency } from './transform/Entrypoint.types';
|
|
20
|
+
import type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';
|
|
21
|
+
import type { Services } from './transform/types';
|
|
22
|
+
type HiddenModuleMembers = {
|
|
23
|
+
_extensions: Record<string, () => void>;
|
|
24
|
+
_resolveFilename: (id: string, options: {
|
|
25
|
+
filename: string;
|
|
26
|
+
id: string;
|
|
27
|
+
paths: string[];
|
|
28
|
+
}) => string;
|
|
29
|
+
_nodeModulePaths(filename: string): string[];
|
|
30
|
+
};
|
|
31
|
+
export declare const DefaultModuleImplementation: typeof NativeModule & HiddenModuleMembers;
|
|
32
|
+
export declare class Module {
|
|
33
|
+
#private;
|
|
34
|
+
private services;
|
|
35
|
+
private moduleImpl;
|
|
36
|
+
readonly callstack: string[];
|
|
37
|
+
readonly debug: Debugger;
|
|
38
|
+
readonly dependencies: string[];
|
|
39
|
+
readonly extensions: string[];
|
|
40
|
+
readonly filename: string;
|
|
41
|
+
id: string;
|
|
42
|
+
readonly idx: string;
|
|
43
|
+
readonly ignored: boolean;
|
|
44
|
+
isEvaluated: boolean;
|
|
45
|
+
readonly parentIsIgnored: boolean;
|
|
46
|
+
require: {
|
|
47
|
+
(id: string): unknown;
|
|
48
|
+
ensure: () => void;
|
|
49
|
+
resolve: (id: string) => string;
|
|
50
|
+
};
|
|
51
|
+
resolve: (id: string) => string;
|
|
52
|
+
private cache;
|
|
53
|
+
constructor(services: Services, entrypoint: Entrypoint, parentModule?: Module, moduleImpl?: HiddenModuleMembers);
|
|
54
|
+
get exports(): Record<string | symbol, unknown>;
|
|
55
|
+
set exports(value: Record<string | symbol, unknown>);
|
|
56
|
+
protected get entrypoint(): Entrypoint;
|
|
57
|
+
evaluate(): void;
|
|
58
|
+
getEntrypoint(filename: string, only: string[], log: Debugger): Entrypoint | IEvaluatedEntrypoint | null;
|
|
59
|
+
resolveDependency: (id: string) => IEntrypointDependency;
|
|
60
|
+
protected createChild(entrypoint: Entrypoint): Module;
|
|
61
|
+
}
|
|
62
|
+
export {};
|
package/types/module.js
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* This is a custom implementation for the module system for evaluating code,
|
|
4
|
+
* used for resolving values for dependencies interpolated in `css` or `styled`.
|
|
5
|
+
*
|
|
6
|
+
* This serves 2 purposes:
|
|
7
|
+
* - Avoid leakage from evaluated code to module cache in current context, e.g. `babel-register`
|
|
8
|
+
* - Allow us to invalidate the module cache without affecting other stuff, necessary for rebuilds
|
|
9
|
+
*
|
|
10
|
+
* We also use it to transpile the code with Babel by default.
|
|
11
|
+
* We also store source maps for it to provide correct error stacktraces.
|
|
12
|
+
*
|
|
13
|
+
*/
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.Module = exports.DefaultModuleImplementation = void 0;
|
|
19
|
+
const fs_1 = __importDefault(require("fs"));
|
|
20
|
+
const module_1 = __importDefault(require("module"));
|
|
21
|
+
const path_1 = __importDefault(require("path"));
|
|
22
|
+
const vm_1 = __importDefault(require("vm"));
|
|
23
|
+
const ts_invariant_1 = require("ts-invariant");
|
|
24
|
+
require("./utils/dispose-polyfill");
|
|
25
|
+
const Entrypoint_1 = require("./transform/Entrypoint");
|
|
26
|
+
const Entrypoint_helpers_1 = require("./transform/Entrypoint.helpers");
|
|
27
|
+
const UnprocessedEntrypointError_1 = require("./transform/actions/UnprocessedEntrypointError");
|
|
28
|
+
const createVmContext_1 = require("./vm/createVmContext");
|
|
29
|
+
exports.DefaultModuleImplementation = module_1.default;
|
|
30
|
+
// Supported node builtins based on the modules polyfilled by webpack
|
|
31
|
+
// `true` means module is polyfilled, `false` means module is empty
|
|
32
|
+
const builtins = {
|
|
33
|
+
assert: true,
|
|
34
|
+
buffer: true,
|
|
35
|
+
child_process: false,
|
|
36
|
+
cluster: false,
|
|
37
|
+
console: true,
|
|
38
|
+
constants: true,
|
|
39
|
+
crypto: true,
|
|
40
|
+
dgram: false,
|
|
41
|
+
dns: false,
|
|
42
|
+
domain: true,
|
|
43
|
+
events: true,
|
|
44
|
+
fs: false,
|
|
45
|
+
http: true,
|
|
46
|
+
https: true,
|
|
47
|
+
module: false,
|
|
48
|
+
net: false,
|
|
49
|
+
os: true,
|
|
50
|
+
path: true,
|
|
51
|
+
punycode: true,
|
|
52
|
+
process: true,
|
|
53
|
+
querystring: true,
|
|
54
|
+
readline: false,
|
|
55
|
+
repl: false,
|
|
56
|
+
stream: true,
|
|
57
|
+
string_decoder: true,
|
|
58
|
+
sys: true,
|
|
59
|
+
timers: true,
|
|
60
|
+
tls: false,
|
|
61
|
+
tty: true,
|
|
62
|
+
url: true,
|
|
63
|
+
util: true,
|
|
64
|
+
vm: true,
|
|
65
|
+
zlib: true,
|
|
66
|
+
};
|
|
67
|
+
const NOOP = () => { };
|
|
68
|
+
function getUncached(cached, test) {
|
|
69
|
+
const cachedSet = new Set(typeof cached === 'string' ? cached.split(',') : cached);
|
|
70
|
+
if (cachedSet.has('*')) {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
return test.filter((t) => !cachedSet.has(t));
|
|
74
|
+
}
|
|
75
|
+
function resolve(id) {
|
|
76
|
+
const { resolved } = this.resolveDependency(id);
|
|
77
|
+
(0, ts_invariant_1.invariant)(resolved, `Unable to resolve "${id}"`);
|
|
78
|
+
return resolved;
|
|
79
|
+
}
|
|
80
|
+
class Module {
|
|
81
|
+
services;
|
|
82
|
+
moduleImpl;
|
|
83
|
+
callstack = [];
|
|
84
|
+
debug;
|
|
85
|
+
dependencies;
|
|
86
|
+
extensions;
|
|
87
|
+
filename;
|
|
88
|
+
id;
|
|
89
|
+
idx;
|
|
90
|
+
ignored;
|
|
91
|
+
isEvaluated = false;
|
|
92
|
+
parentIsIgnored;
|
|
93
|
+
require = Object.assign((id) => {
|
|
94
|
+
if (id in builtins) {
|
|
95
|
+
// The module is in the allowed list of builtin node modules
|
|
96
|
+
// Ideally we should prevent importing them, but webpack polyfills some
|
|
97
|
+
// So we check for the list of polyfills to determine which ones to support
|
|
98
|
+
if (builtins[id]) {
|
|
99
|
+
this.debug('require', `builtin '${id}'`);
|
|
100
|
+
return require(id);
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
// Resolve module id (and filename) relatively to parent module
|
|
105
|
+
const dependency = this.resolveDependency(id);
|
|
106
|
+
if (dependency.resolved === id && !path_1.default.isAbsolute(id)) {
|
|
107
|
+
// The module is a builtin node modules, but not in the allowed list
|
|
108
|
+
throw new Error(`Unable to import "${id}". Importing Node builtins is not supported in the sandbox.`);
|
|
109
|
+
}
|
|
110
|
+
(0, ts_invariant_1.invariant)(dependency.resolved, `Dependency ${dependency.source} cannot be resolved`);
|
|
111
|
+
this.dependencies.push(id);
|
|
112
|
+
this.debug('require', `${id} -> ${dependency.resolved}`);
|
|
113
|
+
const entrypoint = this.getEntrypoint(dependency.resolved, dependency.only, this.debug);
|
|
114
|
+
if (entrypoint === null) {
|
|
115
|
+
return dependency.resolved;
|
|
116
|
+
}
|
|
117
|
+
if (entrypoint.evaluated ||
|
|
118
|
+
(0, Entrypoint_helpers_1.isSuperSet)(entrypoint.evaluatedOnly, dependency.only)) {
|
|
119
|
+
return entrypoint.exports;
|
|
120
|
+
}
|
|
121
|
+
const m = this.createChild(entrypoint);
|
|
122
|
+
m.evaluate();
|
|
123
|
+
return entrypoint.exports;
|
|
124
|
+
}, {
|
|
125
|
+
ensure: NOOP,
|
|
126
|
+
resolve: resolve.bind(this),
|
|
127
|
+
});
|
|
128
|
+
resolve = resolve.bind(this);
|
|
129
|
+
cache;
|
|
130
|
+
#entrypointRef;
|
|
131
|
+
constructor(services, entrypoint, parentModule, moduleImpl = exports.DefaultModuleImplementation) {
|
|
132
|
+
this.services = services;
|
|
133
|
+
this.moduleImpl = moduleImpl;
|
|
134
|
+
this.cache = services.cache;
|
|
135
|
+
this.#entrypointRef = new WeakRef(entrypoint);
|
|
136
|
+
this.idx = entrypoint.idx;
|
|
137
|
+
this.id = entrypoint.name;
|
|
138
|
+
this.filename = entrypoint.name;
|
|
139
|
+
this.dependencies = [];
|
|
140
|
+
this.debug = entrypoint.log.extend('module');
|
|
141
|
+
this.parentIsIgnored = parentModule?.ignored ?? false;
|
|
142
|
+
this.ignored = entrypoint.ignored ?? this.parentIsIgnored;
|
|
143
|
+
if (parentModule) {
|
|
144
|
+
this.callstack = [entrypoint.name, ...parentModule.callstack];
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this.callstack = [entrypoint.name];
|
|
148
|
+
}
|
|
149
|
+
this.extensions = services.options.pluginOptions.extensions;
|
|
150
|
+
this.debug('init', entrypoint.name);
|
|
151
|
+
}
|
|
152
|
+
get exports() {
|
|
153
|
+
return this.entrypoint.exports;
|
|
154
|
+
}
|
|
155
|
+
set exports(value) {
|
|
156
|
+
this.entrypoint.exports = value;
|
|
157
|
+
this.debug('the whole exports was overridden with %O', value);
|
|
158
|
+
}
|
|
159
|
+
get entrypoint() {
|
|
160
|
+
const entrypoint = this.#entrypointRef.deref();
|
|
161
|
+
(0, ts_invariant_1.invariant)(entrypoint, `Module ${this.idx} is disposed`);
|
|
162
|
+
return entrypoint;
|
|
163
|
+
}
|
|
164
|
+
evaluate() {
|
|
165
|
+
const { entrypoint } = this;
|
|
166
|
+
entrypoint.assertTransformed();
|
|
167
|
+
const cached = this.cache.get('entrypoints', entrypoint.name);
|
|
168
|
+
let evaluatedCreated = false;
|
|
169
|
+
if (!entrypoint.supersededWith) {
|
|
170
|
+
this.cache.add('entrypoints', entrypoint.name, entrypoint.createEvaluated());
|
|
171
|
+
evaluatedCreated = true;
|
|
172
|
+
}
|
|
173
|
+
const { transformedCode: source } = entrypoint;
|
|
174
|
+
const { pluginOptions } = this.services.options;
|
|
175
|
+
if (!source) {
|
|
176
|
+
this.debug(`evaluate`, 'there is nothing to evaluate');
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (this.isEvaluated) {
|
|
180
|
+
this.debug('evaluate', `is already evaluated`);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
this.debug('evaluate');
|
|
184
|
+
this.debug.extend('source')('%s', source);
|
|
185
|
+
this.isEvaluated = true;
|
|
186
|
+
const { filename } = this;
|
|
187
|
+
if (/\.json$/.test(filename)) {
|
|
188
|
+
// For JSON files, parse it to a JS object similar to Node
|
|
189
|
+
this.exports = JSON.parse(source);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const { context, teardown } = (0, createVmContext_1.createVmContext)(filename, pluginOptions.features, {
|
|
193
|
+
module: this,
|
|
194
|
+
exports: entrypoint.exports,
|
|
195
|
+
require: this.require,
|
|
196
|
+
__wyw_dynamic_import: async (id) => this.require(id),
|
|
197
|
+
__dirname: path_1.default.dirname(filename),
|
|
198
|
+
}, pluginOptions.overrideContext);
|
|
199
|
+
try {
|
|
200
|
+
const script = new vm_1.default.Script(`(function (exports) { ${source}\n})(exports);`, {
|
|
201
|
+
filename,
|
|
202
|
+
});
|
|
203
|
+
script.runInContext(context);
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
this.isEvaluated = false;
|
|
207
|
+
if (evaluatedCreated) {
|
|
208
|
+
this.cache.add('entrypoints', entrypoint.name, cached);
|
|
209
|
+
}
|
|
210
|
+
if ((0, UnprocessedEntrypointError_1.isUnprocessedEntrypointError)(e)) {
|
|
211
|
+
// It will be handled by evalFile scenario
|
|
212
|
+
throw e;
|
|
213
|
+
}
|
|
214
|
+
if (e instanceof EvalError) {
|
|
215
|
+
this.debug('%O', e);
|
|
216
|
+
throw e;
|
|
217
|
+
}
|
|
218
|
+
this.debug('%O\n%O', e, this.callstack);
|
|
219
|
+
throw new EvalError(`${e.message} in${this.callstack.join('\n| ')}\n`);
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
teardown();
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
getEntrypoint(filename, only, log) {
|
|
226
|
+
const extension = path_1.default.extname(filename);
|
|
227
|
+
if (extension !== '.json' && !this.extensions.includes(extension)) {
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
const entrypoint = this.cache.get('entrypoints', filename);
|
|
231
|
+
if (entrypoint && (0, Entrypoint_helpers_1.isSuperSet)(entrypoint.evaluatedOnly ?? [], only)) {
|
|
232
|
+
log('✅ file has been already evaluated');
|
|
233
|
+
return entrypoint;
|
|
234
|
+
}
|
|
235
|
+
if (entrypoint?.ignored) {
|
|
236
|
+
log('✅ file has been ignored during prepare stage. Original code will be used');
|
|
237
|
+
return entrypoint;
|
|
238
|
+
}
|
|
239
|
+
if (this.ignored) {
|
|
240
|
+
log('✅ one of the parent files has been ignored during prepare stage. Original code will be used');
|
|
241
|
+
const newEntrypoint = this.entrypoint.createChild(filename, ['*'], fs_1.default.readFileSync(filename, 'utf-8'));
|
|
242
|
+
if (newEntrypoint === 'loop') {
|
|
243
|
+
const stack = (0, Entrypoint_helpers_1.getStack)(this.entrypoint);
|
|
244
|
+
throw new Error(`Circular dependency detected: ${stack.join(' -> ')} -> ${filename}`);
|
|
245
|
+
}
|
|
246
|
+
return newEntrypoint;
|
|
247
|
+
}
|
|
248
|
+
// Requested file can be already prepared for evaluation on the stage 1
|
|
249
|
+
if (only && entrypoint) {
|
|
250
|
+
const uncachedExports = getUncached(entrypoint.only ?? [], only);
|
|
251
|
+
if (uncachedExports.length === 0) {
|
|
252
|
+
log('✅ ready for evaluation');
|
|
253
|
+
return entrypoint;
|
|
254
|
+
}
|
|
255
|
+
log('❌ file has been processed during prepare stage but %o is not evaluated yet (evaluated: %o)', uncachedExports, entrypoint.only);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
log('❌ file has not been processed during prepare stage');
|
|
259
|
+
}
|
|
260
|
+
// If code wasn't extracted from cache, it indicates that we were unable
|
|
261
|
+
// to process some of the imports on stage1. Let's try to reprocess.
|
|
262
|
+
const code = fs_1.default.readFileSync(filename, 'utf-8');
|
|
263
|
+
const newEntrypoint = Entrypoint_1.Entrypoint.createRoot(this.services, filename, only, code);
|
|
264
|
+
if (newEntrypoint.evaluated) {
|
|
265
|
+
log('✅ file has been already evaluated');
|
|
266
|
+
return newEntrypoint;
|
|
267
|
+
}
|
|
268
|
+
if (newEntrypoint.ignored) {
|
|
269
|
+
log('✅ file has been ignored during prepare stage. Original code will be used');
|
|
270
|
+
return newEntrypoint;
|
|
271
|
+
}
|
|
272
|
+
return newEntrypoint;
|
|
273
|
+
}
|
|
274
|
+
resolveDependency = (id) => {
|
|
275
|
+
const cached = this.entrypoint.getDependency(id);
|
|
276
|
+
(0, ts_invariant_1.invariant)(!(cached instanceof Promise), 'Dependency is not resolved yet');
|
|
277
|
+
if (cached) {
|
|
278
|
+
return cached;
|
|
279
|
+
}
|
|
280
|
+
if (!this.ignored) {
|
|
281
|
+
this.debug('❌ import has not been resolved during prepare stage. Fallback to Node.js resolver');
|
|
282
|
+
}
|
|
283
|
+
const extensions = this.moduleImpl._extensions;
|
|
284
|
+
const added = [];
|
|
285
|
+
try {
|
|
286
|
+
// Check for supported extensions
|
|
287
|
+
this.extensions.forEach((ext) => {
|
|
288
|
+
if (ext in extensions) {
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// When an extension is not supported, add it
|
|
292
|
+
// And keep track of it to clean it up after resolving
|
|
293
|
+
// Use noop for the transform function since we handle it
|
|
294
|
+
extensions[ext] = NOOP;
|
|
295
|
+
added.push(ext);
|
|
296
|
+
});
|
|
297
|
+
const { filename } = this;
|
|
298
|
+
const resolved = this.moduleImpl._resolveFilename(id, {
|
|
299
|
+
id: filename,
|
|
300
|
+
filename,
|
|
301
|
+
paths: this.moduleImpl._nodeModulePaths(path_1.default.dirname(filename)),
|
|
302
|
+
});
|
|
303
|
+
return {
|
|
304
|
+
source: id,
|
|
305
|
+
only: ['*'],
|
|
306
|
+
resolved,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
finally {
|
|
310
|
+
// Cleanup the extensions we added to restore previous behaviour
|
|
311
|
+
added.forEach((ext) => delete extensions[ext]);
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
createChild(entrypoint) {
|
|
315
|
+
return new Module(this.services, entrypoint, this, this.moduleImpl);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
exports.Module = Module;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="src/options/babel-merge" />
|
|
2
|
+
import type { TransformOptions } from '@babel/core';
|
|
3
|
+
/**
|
|
4
|
+
* Merges babel configs together. If a pair of configs were merged before,
|
|
5
|
+
* it will return the cached result.
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildOptions(...configs: (TransformOptions | null | undefined)[]): TransformOptions;
|