@wyw-in-js/transform 1.0.8 → 2.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/cache.js +426 -289
- package/esm/cache.js.map +1 -1
- package/esm/debug/fileReporter.js +137 -134
- package/esm/debug/fileReporter.js.map +1 -1
- package/esm/eval/broker.js +2134 -0
- package/esm/eval/broker.js.map +1 -0
- package/esm/eval/lru.js +36 -0
- package/esm/eval/lru.js.map +1 -0
- package/esm/eval/prepareModuleOnDemand.js +21 -0
- package/esm/eval/prepareModuleOnDemand.js.map +1 -0
- package/esm/eval/protocol.js +2 -0
- package/esm/eval/protocol.js.map +1 -0
- package/esm/eval/resolverStrategy.js +51 -0
- package/esm/eval/resolverStrategy.js.map +1 -0
- package/esm/eval/runner.js +1759 -0
- package/esm/eval/runner.js.map +1 -0
- package/esm/eval/serialize.js +333 -0
- package/esm/eval/serialize.js.map +1 -0
- package/esm/eval/writeQueue.js +81 -0
- package/esm/eval/writeQueue.js.map +1 -0
- package/esm/evaluators/index.js +11 -12
- package/esm/evaluators/index.js.map +1 -1
- package/esm/index.js +25 -28
- package/esm/index.js.map +1 -1
- package/esm/module.js +896 -520
- package/esm/module.js.map +1 -1
- package/esm/shaker.js +14 -80
- package/esm/shaker.js.map +1 -1
- package/esm/transform/BaseEntrypoint.js +162 -164
- package/esm/transform/BaseEntrypoint.js.map +1 -1
- package/esm/transform/Entrypoint.helpers.js +96 -253
- package/esm/transform/Entrypoint.helpers.js.map +1 -1
- package/esm/transform/Entrypoint.js +336 -270
- package/esm/transform/Entrypoint.js.map +1 -1
- package/esm/transform/Entrypoint.types.js +1 -1
- package/esm/transform/Entrypoint.types.js.map +1 -1
- package/esm/transform/EvaluatedEntrypoint.js +10 -4
- package/esm/transform/EvaluatedEntrypoint.js.map +1 -1
- package/esm/transform/actions/AbortError.js +6 -6
- package/esm/transform/actions/AbortError.js.map +1 -1
- package/esm/transform/actions/BaseAction.js +140 -136
- package/esm/transform/actions/BaseAction.js.map +1 -1
- package/esm/transform/actions/UnprocessedEntrypointError.js +6 -6
- package/esm/transform/actions/UnprocessedEntrypointError.js.map +1 -1
- package/esm/transform/actions/actionRunner.js +63 -66
- package/esm/transform/actions/actionRunner.js.map +1 -1
- package/esm/transform/actions/types.js +1 -1
- package/esm/transform/actions/types.js.map +1 -1
- package/esm/transform/barrelManifest.types.js +2 -0
- package/esm/transform/barrelManifest.types.js.map +1 -0
- package/esm/transform/generators/baseProcessingHandlers.js +15 -17
- package/esm/transform/generators/baseProcessingHandlers.js.map +1 -1
- package/esm/transform/generators/collect.js +27 -55
- package/esm/transform/generators/collect.js.map +1 -1
- package/esm/transform/generators/createStylisPreprocessor.js +353 -321
- package/esm/transform/generators/createStylisPreprocessor.js.map +1 -1
- package/esm/transform/generators/evalFile.js +48 -47
- package/esm/transform/generators/evalFile.js.map +1 -1
- package/esm/transform/generators/extract.js +78 -90
- package/esm/transform/generators/extract.js.map +1 -1
- package/esm/transform/generators/getExports.js +57 -74
- package/esm/transform/generators/getExports.js.map +1 -1
- package/esm/transform/generators/index.js +11 -11
- package/esm/transform/generators/index.js.map +1 -1
- package/esm/transform/generators/processEntrypoint.js +78 -67
- package/esm/transform/generators/processEntrypoint.js.map +1 -1
- package/esm/transform/generators/processImports.js +102 -67
- package/esm/transform/generators/processImports.js.map +1 -1
- package/esm/transform/generators/resolveImports.js +165 -196
- package/esm/transform/generators/resolveImports.js.map +1 -1
- package/esm/transform/generators/resolveStaticOxcValues.js +2911 -0
- package/esm/transform/generators/resolveStaticOxcValues.js.map +1 -0
- package/esm/transform/generators/rewriteOxcBarrelImports.js +822 -0
- package/esm/transform/generators/rewriteOxcBarrelImports.js.map +1 -0
- package/esm/transform/generators/transform.js +239 -248
- package/esm/transform/generators/transform.js.map +1 -1
- package/esm/transform/generators/workflow.js +87 -79
- package/esm/transform/generators/workflow.js.map +1 -1
- package/esm/transform/helpers/loadWywOptions.js +154 -73
- package/esm/transform/helpers/loadWywOptions.js.map +1 -1
- package/esm/transform/helpers/withDefaultServices.js +13 -22
- package/esm/transform/helpers/withDefaultServices.js.map +1 -1
- package/esm/transform/isStaticallyEvaluatableModule.js +140 -152
- package/esm/transform/isStaticallyEvaluatableModule.js.map +1 -1
- package/esm/transform/oxcBarrelManifest.js +349 -0
- package/esm/transform/oxcBarrelManifest.js.map +1 -0
- package/esm/transform/rootLog.js +3 -3
- package/esm/transform/rootLog.js.map +1 -1
- package/esm/transform/syntax.js +2 -0
- package/esm/transform/syntax.js.map +1 -0
- package/esm/transform/types.js +2 -2
- package/esm/transform/types.js.map +1 -1
- package/esm/transform.js +123 -147
- package/esm/transform.js.map +1 -1
- package/esm/types.js +4 -1
- package/esm/types.js.map +1 -1
- package/esm/utils/EventEmitter.js +46 -48
- package/esm/utils/EventEmitter.js.map +1 -1
- package/esm/utils/ShakerMetadata.js +2 -2
- package/esm/utils/ShakerMetadata.js.map +1 -1
- package/esm/utils/TransformDiagnostics.js +10 -0
- package/esm/utils/TransformDiagnostics.js.map +1 -0
- package/esm/utils/TransformMetadata.js +28 -10
- package/esm/utils/TransformMetadata.js.map +1 -1
- package/esm/utils/applyOxcProcessors.js +1217 -0
- package/esm/utils/applyOxcProcessors.js.map +1 -0
- package/esm/utils/collectOxcExportsAndImports.js +934 -0
- package/esm/utils/collectOxcExportsAndImports.js.map +1 -0
- package/esm/utils/collectOxcRuntime.js +220 -0
- package/esm/utils/collectOxcRuntime.js.map +1 -0
- package/esm/utils/collectOxcTemplateDependencies.js +1398 -0
- package/esm/utils/collectOxcTemplateDependencies.js.map +1 -0
- package/esm/utils/dispose-polyfill.js +3 -4
- package/esm/utils/dispose-polyfill.js.map +1 -1
- package/esm/utils/getFileIdx.js +6 -6
- package/esm/utils/getFileIdx.js.map +1 -1
- package/esm/utils/getPluginKey.js +12 -12
- package/esm/utils/getPluginKey.js.map +1 -1
- package/esm/utils/getVisitorKeys.js +9 -3
- package/esm/utils/getVisitorKeys.js.map +1 -1
- package/esm/utils/hasCachedWywPrevalExport.js +23 -0
- package/esm/utils/hasCachedWywPrevalExport.js.map +1 -0
- package/esm/utils/hasWywPreval.js +5 -5
- package/esm/utils/hasWywPreval.js.map +1 -1
- package/esm/utils/importOverrides.js +75 -90
- package/esm/utils/importOverrides.js.map +1 -1
- package/esm/utils/isNode.js +2 -2
- package/esm/utils/isNode.js.map +1 -1
- package/esm/utils/isNotNull.js +2 -2
- package/esm/utils/isNotNull.js.map +1 -1
- package/esm/utils/isSerializable.js +11 -11
- package/esm/utils/isSerializable.js.map +1 -1
- package/esm/utils/oxcAstService.js +121 -0
- package/esm/utils/oxcAstService.js.map +1 -0
- package/esm/utils/oxcEmit.js +447 -0
- package/esm/utils/oxcEmit.js.map +1 -0
- package/esm/utils/oxcPreevalStage.js +97 -0
- package/esm/utils/oxcPreevalStage.js.map +1 -0
- package/esm/utils/oxcPreevalTransforms.js +1054 -0
- package/esm/utils/oxcPreevalTransforms.js.map +1 -0
- package/esm/utils/oxcShaker.js +662 -0
- package/esm/utils/oxcShaker.js.map +1 -0
- package/esm/utils/parseOxc.js +37 -0
- package/esm/utils/parseOxc.js.map +1 -0
- package/esm/utils/parseRequest.js +27 -27
- package/esm/utils/parseRequest.js.map +1 -1
- package/esm/utils/peek.js +1 -1
- package/esm/utils/peek.js.map +1 -1
- package/esm/utils/processorLookup.js +125 -0
- package/esm/utils/processorLookup.js.map +1 -0
- package/esm/utils/resolveWithConditions.js +99 -0
- package/esm/utils/resolveWithConditions.js.map +1 -0
- package/esm/vm/createVmContext.js +140 -141
- package/esm/vm/createVmContext.js.map +1 -1
- package/esm/vm/process.js +11 -13
- package/esm/vm/process.js.map +1 -1
- package/package.json +18 -26
- package/types/cache.d.ts +17 -8
- package/types/cache.js +237 -95
- package/types/debug/fileReporter.js +22 -22
- package/types/eval/broker.d.ts +88 -0
- package/types/eval/broker.js +2262 -0
- package/types/eval/lru.d.ts +10 -0
- package/types/eval/lru.js +36 -0
- package/types/eval/prepareModuleOnDemand.d.ts +7 -0
- package/types/eval/prepareModuleOnDemand.js +24 -0
- package/types/eval/protocol.d.ts +97 -0
- package/types/eval/protocol.js +1 -0
- package/types/eval/resolverStrategy.d.ts +13 -0
- package/types/eval/resolverStrategy.js +46 -0
- package/types/eval/serialize.d.ts +78 -0
- package/types/eval/serialize.js +357 -0
- package/types/eval/writeQueue.d.ts +13 -0
- package/types/eval/writeQueue.js +80 -0
- package/types/evaluators/index.d.ts +2 -2
- package/types/evaluators/index.js +6 -9
- package/types/index.d.ts +7 -8
- package/types/index.js +24 -77
- package/types/module.d.ts +35 -7
- package/types/module.js +535 -163
- package/types/shaker.d.ts +2 -10
- package/types/shaker.js +10 -100
- package/types/transform/BaseEntrypoint.js +6 -11
- package/types/transform/Entrypoint.d.ts +15 -15
- package/types/transform/Entrypoint.helpers.d.ts +2 -5
- package/types/transform/Entrypoint.helpers.js +43 -203
- package/types/transform/Entrypoint.js +130 -53
- package/types/transform/Entrypoint.types.d.ts +28 -6
- package/types/transform/Entrypoint.types.js +1 -2
- package/types/transform/EvaluatedEntrypoint.d.ts +13 -2
- package/types/transform/EvaluatedEntrypoint.js +7 -6
- package/types/transform/actions/AbortError.js +2 -7
- package/types/transform/actions/BaseAction.js +4 -8
- package/types/transform/actions/UnprocessedEntrypointError.js +2 -7
- package/types/transform/actions/actionRunner.js +8 -12
- package/types/transform/actions/types.d.ts +6 -2
- package/types/transform/actions/types.js +1 -2
- package/types/transform/{barrelManifest.d.ts → barrelManifest.types.d.ts} +0 -2
- package/types/transform/barrelManifest.types.js +1 -0
- package/types/transform/generators/baseProcessingHandlers.d.ts +4 -5
- package/types/transform/generators/baseProcessingHandlers.js +10 -14
- package/types/transform/generators/collect.js +13 -39
- package/types/transform/generators/createStylisPreprocessor.js +19 -60
- package/types/transform/generators/evalFile.d.ts +2 -2
- package/types/transform/generators/evalFile.js +26 -28
- package/types/transform/generators/extract.js +5 -8
- package/types/transform/generators/getExports.js +23 -30
- package/types/transform/generators/index.d.ts +2 -2
- package/types/transform/generators/index.js +11 -14
- package/types/transform/generators/processEntrypoint.d.ts +2 -2
- package/types/transform/generators/processEntrypoint.js +60 -26
- package/types/transform/generators/processImports.d.ts +0 -3
- package/types/transform/generators/processImports.js +60 -20
- package/types/transform/generators/resolveImports.js +18 -22
- package/types/transform/generators/resolveStaticOxcValues.d.ts +2 -0
- package/types/transform/generators/resolveStaticOxcValues.js +3235 -0
- package/types/transform/generators/{rewriteBarrelImports.d.ts → rewriteOxcBarrelImports.d.ts} +2 -3
- package/types/transform/generators/{rewriteBarrelImports.js → rewriteOxcBarrelImports.js} +282 -225
- package/types/transform/generators/transform.d.ts +3 -7
- package/types/transform/generators/transform.js +203 -199
- package/types/transform/generators/workflow.js +62 -37
- package/types/transform/helpers/loadWywOptions.js +95 -20
- package/types/transform/helpers/withDefaultServices.d.ts +1 -1
- package/types/transform/helpers/withDefaultServices.js +6 -44
- package/types/transform/isStaticallyEvaluatableModule.d.ts +1 -2
- package/types/transform/isStaticallyEvaluatableModule.js +125 -126
- package/types/transform/oxcBarrelManifest.d.ts +2 -0
- package/types/transform/{barrelManifest.js → oxcBarrelManifest.js} +156 -97
- package/types/transform/rootLog.js +2 -5
- package/types/transform/syntax.d.ts +38 -0
- package/types/transform/syntax.js +1 -0
- package/types/transform/types.d.ts +9 -6
- package/types/transform/types.js +1 -4
- package/types/transform.d.ts +2 -2
- package/types/transform.js +88 -101
- package/types/types.d.ts +4 -24
- package/types/types.js +1 -2
- package/types/utils/EventEmitter.js +3 -9
- package/types/utils/ShakerMetadata.js +1 -5
- package/types/utils/TransformDiagnostics.d.ts +9 -0
- package/types/utils/TransformDiagnostics.js +11 -0
- package/types/utils/TransformMetadata.d.ts +22 -4
- package/types/utils/TransformMetadata.js +23 -8
- package/types/utils/applyOxcProcessors.d.ts +16 -0
- package/types/utils/applyOxcProcessors.js +1391 -0
- package/types/utils/collectOxcExportsAndImports.d.ts +35 -0
- package/types/utils/collectOxcExportsAndImports.js +957 -0
- package/types/utils/collectOxcRuntime.d.ts +14 -0
- package/types/utils/collectOxcRuntime.js +250 -0
- package/types/utils/collectOxcTemplateDependencies.d.ts +38 -0
- package/types/utils/collectOxcTemplateDependencies.js +1580 -0
- package/types/utils/getFileIdx.js +1 -4
- package/types/utils/getPluginKey.d.ts +5 -2
- package/types/utils/getPluginKey.js +2 -6
- package/types/utils/getVisitorKeys.d.ts +4 -4
- package/types/utils/getVisitorKeys.js +9 -6
- package/types/utils/hasCachedWywPrevalExport.d.ts +14 -0
- package/types/utils/hasCachedWywPrevalExport.js +30 -0
- package/types/utils/hasWywPreval.js +1 -4
- package/types/utils/importOverrides.js +17 -27
- package/types/utils/isNode.d.ts +2 -2
- package/types/utils/isNode.js +2 -6
- package/types/utils/isNotNull.js +1 -4
- package/types/utils/isSerializable.js +3 -6
- package/types/utils/oxcAstService.d.ts +11 -0
- package/types/utils/oxcAstService.js +79 -0
- package/types/utils/oxcEmit.d.ts +19 -0
- package/types/utils/oxcEmit.js +506 -0
- package/types/utils/oxcPreevalStage.d.ts +20 -0
- package/types/utils/oxcPreevalStage.js +102 -0
- package/types/utils/oxcPreevalTransforms.d.ts +13 -0
- package/types/utils/oxcPreevalTransforms.js +1179 -0
- package/types/utils/oxcShaker.d.ts +13 -0
- package/types/utils/oxcShaker.js +751 -0
- package/types/utils/parseOxc.d.ts +11 -0
- package/types/utils/parseOxc.js +38 -0
- package/types/utils/parseRequest.js +2 -7
- package/types/utils/peek.js +1 -5
- package/types/utils/processorLookup.d.ts +8 -0
- package/types/utils/processorLookup.js +135 -0
- package/types/utils/resolveWithConditions.d.ts +12 -0
- package/types/utils/resolveWithConditions.js +103 -0
- package/types/vm/createVmContext.d.ts +2 -2
- package/types/vm/createVmContext.js +25 -62
- package/types/vm/process.js +20 -26
- package/esm/babel.js +0 -2
- package/esm/babel.js.map +0 -1
- package/esm/options/buildOptions.js +0 -168
- package/esm/options/buildOptions.js.map +0 -1
- package/esm/options/buildOptions.test.js +0 -138
- package/esm/options/buildOptions.test.js.map +0 -1
- package/esm/options/loadBabelOptions.js +0 -24
- package/esm/options/loadBabelOptions.js.map +0 -1
- package/esm/plugins/babel-transform.js +0 -53
- package/esm/plugins/babel-transform.js.map +0 -1
- package/esm/plugins/collector.js +0 -60
- package/esm/plugins/collector.js.map +0 -1
- package/esm/plugins/dynamic-import.js +0 -56
- package/esm/plugins/dynamic-import.js.map +0 -1
- package/esm/plugins/preeval.js +0 -73
- package/esm/plugins/preeval.js.map +0 -1
- package/esm/plugins/shaker.js +0 -680
- package/esm/plugins/shaker.js.map +0 -1
- package/esm/transform/barrelManifest.js +0 -291
- package/esm/transform/barrelManifest.js.map +0 -1
- package/esm/transform/generators/explodeReexports.js +0 -64
- package/esm/transform/generators/explodeReexports.js.map +0 -1
- package/esm/transform/generators/rewriteBarrelImports.js +0 -733
- package/esm/transform/generators/rewriteBarrelImports.js.map +0 -1
- package/esm/utils/addIdentifierToWywPreval.js +0 -68
- package/esm/utils/addIdentifierToWywPreval.js.map +0 -1
- package/esm/utils/collectExportsAndImports.js +0 -1157
- package/esm/utils/collectExportsAndImports.js.map +0 -1
- package/esm/utils/collectTemplateDependencies.js +0 -228
- package/esm/utils/collectTemplateDependencies.js.map +0 -1
- package/esm/utils/createId.js +0 -6
- package/esm/utils/createId.js.map +0 -1
- package/esm/utils/findIdentifiers.js +0 -62
- package/esm/utils/findIdentifiers.js.map +0 -1
- package/esm/utils/getConstantStringValue.js +0 -58
- package/esm/utils/getConstantStringValue.js.map +0 -1
- package/esm/utils/getMemberExpressionPropertyName.js +0 -11
- package/esm/utils/getMemberExpressionPropertyName.js.map +0 -1
- package/esm/utils/getScope.js +0 -6
- package/esm/utils/getScope.js.map +0 -1
- package/esm/utils/getSource.js +0 -15
- package/esm/utils/getSource.js.map +0 -1
- package/esm/utils/getTagProcessor.js +0 -404
- package/esm/utils/getTagProcessor.js.map +0 -1
- package/esm/utils/isExports.js +0 -22
- package/esm/utils/isExports.js.map +0 -1
- package/esm/utils/isGlobal.js +0 -6
- package/esm/utils/isGlobal.js.map +0 -1
- package/esm/utils/isNodePath.js +0 -4
- package/esm/utils/isNodePath.js.map +0 -1
- package/esm/utils/isRemoved.js +0 -46
- package/esm/utils/isRemoved.js.map +0 -1
- package/esm/utils/isRequire.js +0 -13
- package/esm/utils/isRequire.js.map +0 -1
- package/esm/utils/isTypedNode.js +0 -6
- package/esm/utils/isTypedNode.js.map +0 -1
- package/esm/utils/isUnnecessaryReactCall.js +0 -72
- package/esm/utils/isUnnecessaryReactCall.js.map +0 -1
- package/esm/utils/removeDangerousCode.js +0 -276
- package/esm/utils/removeDangerousCode.js.map +0 -1
- package/esm/utils/replaceImportMetaEnv.js +0 -44
- package/esm/utils/replaceImportMetaEnv.js.map +0 -1
- package/esm/utils/scopeHelpers.js +0 -527
- package/esm/utils/scopeHelpers.js.map +0 -1
- package/esm/utils/traversalCache.js +0 -23
- package/esm/utils/traversalCache.js.map +0 -1
- package/esm/utils/unwrapExpression.js +0 -18
- package/esm/utils/unwrapExpression.js.map +0 -1
- package/esm/utils/unwrapSequence.js +0 -14
- package/esm/utils/unwrapSequence.js.map +0 -1
- package/esm/utils/valueToLiteral.js +0 -59
- package/esm/utils/valueToLiteral.js.map +0 -1
- package/esm/utils/visitors/JSXElementsRemover.js +0 -51
- package/esm/utils/visitors/JSXElementsRemover.js.map +0 -1
- package/lib/babel.js +0 -2
- package/lib/babel.js.map +0 -1
- package/lib/cache.js +0 -308
- package/lib/cache.js.map +0 -1
- package/lib/debug/fileReporter.js +0 -153
- package/lib/debug/fileReporter.js.map +0 -1
- package/lib/evaluators/index.js +0 -20
- package/lib/evaluators/index.js.map +0 -1
- package/lib/index.js +0 -257
- package/lib/index.js.map +0 -1
- package/lib/module.js +0 -552
- package/lib/module.js.map +0 -1
- package/lib/options/buildOptions.js +0 -176
- package/lib/options/buildOptions.js.map +0 -1
- package/lib/options/buildOptions.test.js +0 -141
- package/lib/options/buildOptions.test.js.map +0 -1
- package/lib/options/loadBabelOptions.js +0 -31
- package/lib/options/loadBabelOptions.js.map +0 -1
- package/lib/plugins/babel-transform.js +0 -60
- package/lib/plugins/babel-transform.js.map +0 -1
- package/lib/plugins/collector.js +0 -70
- package/lib/plugins/collector.js.map +0 -1
- package/lib/plugins/dynamic-import.js +0 -61
- package/lib/plugins/dynamic-import.js.map +0 -1
- package/lib/plugins/preeval.js +0 -81
- package/lib/plugins/preeval.js.map +0 -1
- package/lib/plugins/shaker.js +0 -691
- package/lib/plugins/shaker.js.map +0 -1
- package/lib/shaker.js +0 -95
- package/lib/shaker.js.map +0 -1
- package/lib/transform/BaseEntrypoint.js +0 -179
- package/lib/transform/BaseEntrypoint.js.map +0 -1
- package/lib/transform/Entrypoint.helpers.js +0 -279
- package/lib/transform/Entrypoint.helpers.js.map +0 -1
- package/lib/transform/Entrypoint.js +0 -289
- package/lib/transform/Entrypoint.js.map +0 -1
- package/lib/transform/Entrypoint.types.js +0 -2
- package/lib/transform/Entrypoint.types.js.map +0 -1
- package/lib/transform/EvaluatedEntrypoint.js +0 -13
- package/lib/transform/EvaluatedEntrypoint.js.map +0 -1
- package/lib/transform/actions/AbortError.js +0 -16
- package/lib/transform/actions/AbortError.js.map +0 -1
- package/lib/transform/actions/BaseAction.js +0 -150
- package/lib/transform/actions/BaseAction.js.map +0 -1
- package/lib/transform/actions/UnprocessedEntrypointError.js +0 -16
- package/lib/transform/actions/UnprocessedEntrypointError.js.map +0 -1
- package/lib/transform/actions/actionRunner.js +0 -82
- package/lib/transform/actions/actionRunner.js.map +0 -1
- package/lib/transform/actions/types.js +0 -2
- package/lib/transform/actions/types.js.map +0 -1
- package/lib/transform/barrelManifest.js +0 -300
- package/lib/transform/barrelManifest.js.map +0 -1
- package/lib/transform/generators/baseProcessingHandlers.js +0 -27
- package/lib/transform/generators/baseProcessingHandlers.js.map +0 -1
- package/lib/transform/generators/collect.js +0 -66
- package/lib/transform/generators/collect.js.map +0 -1
- package/lib/transform/generators/createStylisPreprocessor.js +0 -372
- package/lib/transform/generators/createStylisPreprocessor.js.map +0 -1
- package/lib/transform/generators/evalFile.js +0 -57
- package/lib/transform/generators/evalFile.js.map +0 -1
- package/lib/transform/generators/explodeReexports.js +0 -71
- package/lib/transform/generators/explodeReexports.js.map +0 -1
- package/lib/transform/generators/extract.js +0 -102
- package/lib/transform/generators/extract.js.map +0 -1
- package/lib/transform/generators/getExports.js +0 -85
- package/lib/transform/generators/getExports.js.map +0 -1
- package/lib/transform/generators/index.js +0 -19
- package/lib/transform/generators/index.js.map +0 -1
- package/lib/transform/generators/processEntrypoint.js +0 -76
- package/lib/transform/generators/processEntrypoint.js.map +0 -1
- package/lib/transform/generators/processImports.js +0 -82
- package/lib/transform/generators/processImports.js.map +0 -1
- package/lib/transform/generators/resolveImports.js +0 -221
- package/lib/transform/generators/resolveImports.js.map +0 -1
- package/lib/transform/generators/rewriteBarrelImports.js +0 -743
- package/lib/transform/generators/rewriteBarrelImports.js.map +0 -1
- package/lib/transform/generators/transform.js +0 -272
- package/lib/transform/generators/transform.js.map +0 -1
- package/lib/transform/generators/workflow.js +0 -90
- package/lib/transform/generators/workflow.js.map +0 -1
- package/lib/transform/helpers/loadWywOptions.js +0 -87
- package/lib/transform/helpers/loadWywOptions.js.map +0 -1
- package/lib/transform/helpers/withDefaultServices.js +0 -31
- package/lib/transform/helpers/withDefaultServices.js.map +0 -1
- package/lib/transform/isStaticallyEvaluatableModule.js +0 -159
- package/lib/transform/isStaticallyEvaluatableModule.js.map +0 -1
- package/lib/transform/rootLog.js +0 -9
- package/lib/transform/rootLog.js.map +0 -1
- package/lib/transform/types.js +0 -8
- package/lib/transform/types.js.map +0 -1
- package/lib/transform.js +0 -160
- package/lib/transform.js.map +0 -1
- package/lib/types.js +0 -2
- package/lib/types.js.map +0 -1
- package/lib/utils/EventEmitter.js +0 -61
- package/lib/utils/EventEmitter.js.map +0 -1
- package/lib/utils/ShakerMetadata.js +0 -9
- package/lib/utils/ShakerMetadata.js.map +0 -1
- package/lib/utils/TransformMetadata.js +0 -19
- package/lib/utils/TransformMetadata.js.map +0 -1
- package/lib/utils/addIdentifierToWywPreval.js +0 -75
- package/lib/utils/addIdentifierToWywPreval.js.map +0 -1
- package/lib/utils/collectExportsAndImports.js +0 -1173
- package/lib/utils/collectExportsAndImports.js.map +0 -1
- package/lib/utils/collectTemplateDependencies.js +0 -242
- package/lib/utils/collectTemplateDependencies.js.map +0 -1
- package/lib/utils/createId.js +0 -13
- package/lib/utils/createId.js.map +0 -1
- package/lib/utils/dispose-polyfill.js +0 -9
- package/lib/utils/dispose-polyfill.js.map +0 -1
- package/lib/utils/findIdentifiers.js +0 -73
- package/lib/utils/findIdentifiers.js.map +0 -1
- package/lib/utils/getConstantStringValue.js +0 -66
- package/lib/utils/getConstantStringValue.js.map +0 -1
- package/lib/utils/getFileIdx.js +0 -16
- package/lib/utils/getFileIdx.js.map +0 -1
- package/lib/utils/getMemberExpressionPropertyName.js +0 -18
- package/lib/utils/getMemberExpressionPropertyName.js.map +0 -1
- package/lib/utils/getPluginKey.js +0 -21
- package/lib/utils/getPluginKey.js.map +0 -1
- package/lib/utils/getScope.js +0 -12
- package/lib/utils/getScope.js.map +0 -1
- package/lib/utils/getSource.js +0 -24
- package/lib/utils/getSource.js.map +0 -1
- package/lib/utils/getTagProcessor.js +0 -424
- package/lib/utils/getTagProcessor.js.map +0 -1
- package/lib/utils/getVisitorKeys.js +0 -11
- package/lib/utils/getVisitorKeys.js.map +0 -1
- package/lib/utils/hasWywPreval.js +0 -13
- package/lib/utils/hasWywPreval.js.map +0 -1
- package/lib/utils/importOverrides.js +0 -119
- package/lib/utils/importOverrides.js.map +0 -1
- package/lib/utils/isExports.js +0 -27
- package/lib/utils/isExports.js.map +0 -1
- package/lib/utils/isGlobal.js +0 -13
- package/lib/utils/isGlobal.js.map +0 -1
- package/lib/utils/isNode.js +0 -9
- package/lib/utils/isNode.js.map +0 -1
- package/lib/utils/isNodePath.js +0 -10
- package/lib/utils/isNodePath.js.map +0 -1
- package/lib/utils/isNotNull.js +0 -10
- package/lib/utils/isNotNull.js.map +0 -1
- package/lib/utils/isRemoved.js +0 -52
- package/lib/utils/isRemoved.js.map +0 -1
- package/lib/utils/isRequire.js +0 -18
- package/lib/utils/isRequire.js.map +0 -1
- package/lib/utils/isSerializable.js +0 -19
- package/lib/utils/isSerializable.js.map +0 -1
- package/lib/utils/isTypedNode.js +0 -13
- package/lib/utils/isTypedNode.js.map +0 -1
- package/lib/utils/isUnnecessaryReactCall.js +0 -81
- package/lib/utils/isUnnecessaryReactCall.js.map +0 -1
- package/lib/utils/parseRequest.js +0 -37
- package/lib/utils/parseRequest.js.map +0 -1
- package/lib/utils/peek.js +0 -9
- package/lib/utils/peek.js.map +0 -1
- package/lib/utils/removeDangerousCode.js +0 -284
- package/lib/utils/removeDangerousCode.js.map +0 -1
- package/lib/utils/replaceImportMetaEnv.js +0 -50
- package/lib/utils/replaceImportMetaEnv.js.map +0 -1
- package/lib/utils/scopeHelpers.js +0 -557
- package/lib/utils/scopeHelpers.js.map +0 -1
- package/lib/utils/traversalCache.js +0 -31
- package/lib/utils/traversalCache.js.map +0 -1
- package/lib/utils/unwrapExpression.js +0 -25
- package/lib/utils/unwrapExpression.js.map +0 -1
- package/lib/utils/unwrapSequence.js +0 -20
- package/lib/utils/unwrapSequence.js.map +0 -1
- package/lib/utils/valueToLiteral.js +0 -65
- package/lib/utils/valueToLiteral.js.map +0 -1
- package/lib/utils/visitors/JSXElementsRemover.js +0 -57
- package/lib/utils/visitors/JSXElementsRemover.js.map +0 -1
- package/lib/vm/createVmContext.js +0 -166
- package/lib/vm/createVmContext.js.map +0 -1
- package/lib/vm/process.js +0 -38
- package/lib/vm/process.js.map +0 -1
- package/types/babel.d.ts +0 -2
- package/types/babel.js +0 -2
- package/types/options/buildOptions.d.ts +0 -6
- package/types/options/buildOptions.js +0 -178
- package/types/options/loadBabelOptions.d.ts +0 -3
- package/types/options/loadBabelOptions.js +0 -26
- package/types/plugins/babel-transform.d.ts +0 -4
- package/types/plugins/babel-transform.js +0 -49
- package/types/plugins/collector.d.ts +0 -20
- package/types/plugins/collector.js +0 -62
- package/types/plugins/dynamic-import.d.ts +0 -6
- package/types/plugins/dynamic-import.js +0 -60
- package/types/plugins/preeval.d.ts +0 -16
- package/types/plugins/preeval.js +0 -69
- package/types/plugins/shaker.d.ts +0 -14
- package/types/plugins/shaker.js +0 -724
- package/types/transform/generators/explodeReexports.d.ts +0 -7
- package/types/transform/generators/explodeReexports.js +0 -65
- package/types/utils/addIdentifierToWywPreval.d.ts +0 -4
- package/types/utils/addIdentifierToWywPreval.js +0 -74
- package/types/utils/collectExportsAndImports.d.ts +0 -31
- package/types/utils/collectExportsAndImports.js +0 -1147
- package/types/utils/collectTemplateDependencies.d.ts +0 -17
- package/types/utils/collectTemplateDependencies.js +0 -220
- package/types/utils/createId.d.ts +0 -2
- package/types/utils/createId.js +0 -9
- package/types/utils/findIdentifiers.d.ts +0 -6
- package/types/utils/findIdentifiers.js +0 -67
- package/types/utils/getConstantStringValue.d.ts +0 -2
- package/types/utils/getConstantStringValue.js +0 -94
- package/types/utils/getMemberExpressionPropertyName.d.ts +0 -2
- package/types/utils/getMemberExpressionPropertyName.js +0 -46
- package/types/utils/getScope.d.ts +0 -2
- package/types/utils/getScope.js +0 -10
- package/types/utils/getSource.d.ts +0 -2
- package/types/utils/getSource.js +0 -22
- package/types/utils/getTagProcessor.d.ts +0 -13
- package/types/utils/getTagProcessor.js +0 -411
- package/types/utils/isExports.d.ts +0 -6
- package/types/utils/isExports.js +0 -19
- package/types/utils/isGlobal.d.ts +0 -2
- package/types/utils/isGlobal.js +0 -9
- package/types/utils/isNodePath.d.ts +0 -3
- package/types/utils/isNodePath.js +0 -6
- package/types/utils/isRemoved.d.ts +0 -5
- package/types/utils/isRemoved.js +0 -41
- package/types/utils/isRequire.d.ts +0 -6
- package/types/utils/isRequire.js +0 -14
- package/types/utils/isTypedNode.d.ts +0 -5
- package/types/utils/isTypedNode.js +0 -9
- package/types/utils/isUnnecessaryReactCall.d.ts +0 -3
- package/types/utils/isUnnecessaryReactCall.js +0 -75
- package/types/utils/removeDangerousCode.d.ts +0 -4
- package/types/utils/removeDangerousCode.js +0 -326
- package/types/utils/replaceImportMetaEnv.d.ts +0 -3
- package/types/utils/replaceImportMetaEnv.js +0 -39
- package/types/utils/scopeHelpers.d.ts +0 -12
- package/types/utils/scopeHelpers.js +0 -580
- package/types/utils/traversalCache.d.ts +0 -4
- package/types/utils/traversalCache.js +0 -27
- package/types/utils/unwrapExpression.d.ts +0 -2
- package/types/utils/unwrapExpression.js +0 -57
- package/types/utils/unwrapSequence.d.ts +0 -8
- package/types/utils/unwrapSequence.js +0 -16
- package/types/utils/valueToLiteral.d.ts +0 -3
- package/types/utils/valueToLiteral.js +0 -63
- package/types/utils/visitors/JSXElementsRemover.d.ts +0 -3
- package/types/utils/visitors/JSXElementsRemover.js +0 -51
package/esm/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","names":["createHash","fs","logger","getFileIdx","stripQueryAndHash","hashContent","content","update","digest","isMissingFileError","error","code","cacheLogger","extend","cacheNames","loggers","reduce","acc","key","TransformCacheCollection","barrelManifestDependencies","Map","contentHashes","fileMtimes","exportDependencies","constructor","caches","barrelManifests","entrypoints","exports","add","cacheName","value","cache","undefined","has","get","delete","clearCacheDependencies","set","maybeOriginalCode","originalCode","isLoaded","initialCode","source","resolvedCode","setContentHash","fileContent","readFileSync","clear","forEach","name","invalidate","res","invalidateForFile","filename","invalidateIfChanged","previousVisitedFiles","changedFiles","Set","visitedFiles","fileEntrypoint","anyDepChanged","hasCachedDependencies","invalidateOnDependencyChange","dependenciesToCheck","dependency","dependencies","invalidationDependencies","dependencyFilename","getCachedDependencies","values","some","resolved","dependencyContent","dependencyChanged","existing","previousHash","newHash","otherSource","otherHash","setCacheDependencies","getDependencyCache","nextDependencies","filter","length","size","checkFreshness","strippedFilename","currentMtime","statSync","mtimeMs","cachedMtime","hash","current"],"sources":["../src/cache.ts"],"sourcesContent":["import { createHash } from 'crypto';\nimport fs from 'node:fs';\nimport { logger } from '@wyw-in-js/shared';\n\nimport type { BarrelManifestCacheEntry } from './transform/barrelManifest';\nimport type { Entrypoint } from './transform/Entrypoint';\nimport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nimport { getFileIdx } from './utils/getFileIdx';\nimport { stripQueryAndHash } from './utils/parseRequest';\n\nfunction hashContent(content: string) {\n return createHash('sha256').update(content).digest('hex');\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n const { code } = error as NodeJS.ErrnoException;\n return code === 'ENOENT' || code === 'ENOTDIR';\n}\n\ninterface IBaseCachedEntrypoint {\n dependencies: Map<string, { resolved: string | null }>;\n initialCode?: string;\n invalidateOnDependencyChange?: Set<string>;\n invalidationDependencies?: Map<string, { resolved: string | null }>;\n}\n\ninterface ICaches<TEntrypoint extends IBaseCachedEntrypoint> {\n barrelManifests: Map<string, BarrelManifestCacheEntry>;\n entrypoints: Map<string, TEntrypoint>;\n exports: Map<string, string[]>;\n}\n\ntype MapValue<T> = T extends Map<string, infer V> ? V : never;\n\nconst cacheLogger = logger.extend('cache');\n\nconst cacheNames = ['barrelManifests', 'entrypoints', 'exports'] as const;\ntype CacheNames = (typeof cacheNames)[number];\n\nconst loggers = cacheNames.reduce(\n (acc, key) => ({\n ...acc,\n [key]: cacheLogger.extend(key),\n }),\n {} as Record<CacheNames, typeof logger>\n);\n\nexport class TransformCacheCollection<\n TEntrypoint extends IBaseCachedEntrypoint = Entrypoint | IEvaluatedEntrypoint,\n> {\n public readonly barrelManifests: Map<string, BarrelManifestCacheEntry>;\n\n public readonly entrypoints: Map<string, TEntrypoint>;\n\n public readonly exports: Map<string, string[]>;\n\n private readonly barrelManifestDependencies = new Map<string, Set<string>>();\n\n private contentHashes = new Map<string, { fs?: string; loaded?: string }>();\n\n private fileMtimes = new Map<string, number>();\n\n private readonly exportDependencies = new Map<string, Set<string>>();\n\n constructor(caches: Partial<ICaches<TEntrypoint>> = {}) {\n this.barrelManifests = caches.barrelManifests || new Map();\n this.entrypoints = caches.entrypoints || new Map();\n this.exports = caches.exports || new Map();\n }\n\n public add<\n TCache extends CacheNames,\n TValue extends MapValue<ICaches<TEntrypoint>[TCache]>,\n >(cacheName: TCache, key: string, value: TValue): void {\n const cache = this[cacheName] as Map<string, TValue>;\n loggers[cacheName]('%s:add %s %f', getFileIdx(key), key, () => {\n if (value === undefined) {\n return cache.has(key) ? 'removed' : 'noop';\n }\n\n if (!cache.has(key)) {\n return 'added';\n }\n\n return cache.get(key) === value ? 'unchanged' : 'updated';\n });\n\n if (value === undefined) {\n cache.delete(key);\n this.contentHashes.delete(key);\n this.clearCacheDependencies(cacheName, key);\n return;\n }\n\n this.clearCacheDependencies(cacheName, key);\n cache.set(key, value);\n\n if ('initialCode' in value) {\n const maybeOriginalCode = (value as unknown as { originalCode?: unknown })\n .originalCode;\n const isLoaded = typeof value.initialCode === 'string';\n const source = isLoaded ? 'loaded' : 'fs';\n\n let resolvedCode: string | undefined;\n if (isLoaded) {\n resolvedCode = value.initialCode;\n } else if (typeof maybeOriginalCode === 'string') {\n resolvedCode = maybeOriginalCode;\n }\n\n if (resolvedCode !== undefined) {\n this.setContentHash(key, source, hashContent(resolvedCode));\n return;\n }\n\n try {\n const fileContent = fs.readFileSync(stripQueryAndHash(key), 'utf8');\n this.setContentHash(key, source, hashContent(fileContent));\n } catch {\n this.setContentHash(key, source, hashContent(''));\n }\n\n return;\n }\n\n if (cacheName === 'barrelManifests') {\n try {\n const fileContent = fs.readFileSync(stripQueryAndHash(key), 'utf8');\n this.setContentHash(key, 'fs', hashContent(fileContent));\n } catch {\n this.setContentHash(key, 'fs', hashContent(''));\n }\n }\n }\n\n public clear(cacheName: CacheNames | 'all'): void {\n if (cacheName === 'all') {\n cacheNames.forEach((name) => {\n this.clear(name);\n });\n\n return;\n }\n\n loggers[cacheName]('clear');\n const cache = this[cacheName] as Map<string, unknown>;\n\n cache.clear();\n this.clearCacheDependencies(cacheName);\n }\n\n public delete(cacheName: CacheNames, key: string): void {\n this.invalidate(cacheName, key);\n }\n\n public get<\n TCache extends CacheNames,\n TValue extends MapValue<ICaches<TEntrypoint>[TCache]>,\n >(cacheName: TCache, key: string): TValue | undefined {\n const cache = this[cacheName] as Map<string, TValue>;\n\n const res = cache.get(key);\n loggers[cacheName]('get', key, res === undefined ? 'miss' : 'hit');\n return res;\n }\n\n public has(cacheName: CacheNames, key: string): boolean {\n const cache = this[cacheName] as Map<string, unknown>;\n\n const res = cache.has(key);\n loggers[cacheName]('has', key, res);\n return res;\n }\n\n public invalidate(cacheName: CacheNames, key: string): void {\n const cache = this[cacheName] as Map<string, unknown>;\n if (!cache.has(key)) {\n return;\n }\n\n loggers[cacheName]('invalidate', key);\n\n cache.delete(key);\n this.clearCacheDependencies(cacheName, key);\n }\n\n public invalidateForFile(filename: string) {\n cacheNames.forEach((cacheName) => {\n this.invalidate(cacheName, filename);\n });\n }\n\n public invalidateIfChanged(\n filename: string,\n content: string,\n previousVisitedFiles?: Set<string>,\n source: 'fs' | 'loaded' = 'loaded',\n changedFiles = new Set<string>()\n ) {\n if (changedFiles.has(filename)) {\n return true;\n }\n\n const visitedFiles = new Set(previousVisitedFiles);\n const fileEntrypoint = this.get('entrypoints', filename);\n let anyDepChanged = false;\n\n // We need to check all dependencies of the file\n // because they might have changed as well.\n if (\n !visitedFiles.has(filename) &&\n (fileEntrypoint || this.hasCachedDependencies(filename))\n ) {\n visitedFiles.add(filename);\n const invalidateOnDependencyChange =\n fileEntrypoint?.invalidateOnDependencyChange;\n\n const dependenciesToCheck = new Map<\n string,\n { resolved: string | null }\n >();\n\n for (const [key, dependency] of fileEntrypoint?.dependencies ?? []) {\n dependenciesToCheck.set(key, dependency);\n }\n\n for (const [\n key,\n dependency,\n ] of fileEntrypoint?.invalidationDependencies ?? []) {\n if (!dependenciesToCheck.has(key)) {\n dependenciesToCheck.set(key, dependency);\n }\n }\n\n for (const dependencyFilename of this.getCachedDependencies(filename)) {\n if (\n ![...dependenciesToCheck.values()].some(\n (dependency) => dependency.resolved === dependencyFilename\n )\n ) {\n dependenciesToCheck.set(dependencyFilename, {\n resolved: dependencyFilename,\n });\n }\n }\n\n for (const [, dependency] of dependenciesToCheck) {\n const dependencyFilename = dependency.resolved;\n\n if (dependencyFilename) {\n let dependencyContent: string;\n try {\n dependencyContent = fs.readFileSync(\n stripQueryAndHash(dependencyFilename),\n 'utf8'\n );\n } catch (error) {\n if (!isMissingFileError(error)) {\n throw error;\n }\n\n this.invalidateForFile(dependencyFilename);\n anyDepChanged = true;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const dependencyChanged = this.invalidateIfChanged(\n dependencyFilename,\n dependencyContent,\n visitedFiles,\n 'fs',\n changedFiles\n );\n\n if (\n dependencyChanged &&\n invalidateOnDependencyChange?.has(dependencyFilename)\n ) {\n cacheLogger(\n 'dependency affecting output has changed, invalidate all for %s',\n filename\n );\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n\n return true;\n }\n\n if (dependencyChanged) {\n anyDepChanged = true;\n }\n }\n }\n }\n\n const existing = this.contentHashes.get(filename);\n const previousHash = existing?.[source];\n const newHash = hashContent(content);\n\n if (previousHash === undefined) {\n const otherSource = source === 'fs' ? 'loaded' : 'fs';\n const otherHash = existing?.[otherSource];\n\n if ((otherHash !== undefined && otherHash !== newHash) || anyDepChanged) {\n cacheLogger('content has changed, invalidate all for %s', filename);\n this.setContentHash(filename, source, newHash);\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n\n return true;\n }\n\n this.setContentHash(filename, source, newHash);\n if (anyDepChanged) {\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n return true;\n }\n return false;\n }\n\n if (previousHash !== newHash || anyDepChanged) {\n cacheLogger('content has changed, invalidate all for %s', filename);\n this.setContentHash(filename, source, newHash);\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n\n return true;\n }\n\n return false;\n }\n\n public setCacheDependencies(\n cacheName: 'barrelManifests' | 'exports',\n key: string,\n dependencies: Iterable<string>\n ): void {\n const cache = this.getDependencyCache(cacheName);\n const nextDependencies = new Set(\n [...dependencies].filter((dependency) => dependency.length > 0)\n );\n\n if (nextDependencies.size === 0) {\n cache.delete(key);\n return;\n }\n\n cache.set(key, nextDependencies);\n }\n\n private clearCacheDependencies(cacheName: CacheNames | 'all', key?: string) {\n if (cacheName === 'all') {\n this.barrelManifestDependencies.clear();\n this.exportDependencies.clear();\n return;\n }\n\n if (cacheName === 'barrelManifests') {\n if (key === undefined) {\n this.barrelManifestDependencies.clear();\n } else {\n this.barrelManifestDependencies.delete(key);\n }\n return;\n }\n\n if (cacheName === 'exports') {\n if (key === undefined) {\n this.exportDependencies.clear();\n } else {\n this.exportDependencies.delete(key);\n }\n }\n }\n\n private getCachedDependencies(filename: string): Set<string> {\n return new Set([\n ...(this.barrelManifestDependencies.get(filename) ?? []),\n ...(this.exportDependencies.get(filename) ?? []),\n ]);\n }\n\n private getDependencyCache(cacheName: 'barrelManifests' | 'exports') {\n return cacheName === 'barrelManifests'\n ? this.barrelManifestDependencies\n : this.exportDependencies;\n }\n\n private hasCachedDependencies(filename: string): boolean {\n return this.getCachedDependencies(filename).size > 0;\n }\n\n /**\n * Fast check if a file changed on disk since last seen.\n * Uses mtime as a fast path — only reads the file if mtime differs.\n * Returns true if the file changed (cache was invalidated).\n */\n public checkFreshness(filename: string, strippedFilename: string): boolean {\n try {\n const currentMtime = fs.statSync(strippedFilename).mtimeMs;\n const cachedMtime = this.fileMtimes.get(filename);\n\n if (cachedMtime !== undefined && currentMtime === cachedMtime) {\n return false;\n }\n\n const content = fs.readFileSync(strippedFilename, 'utf-8');\n this.fileMtimes.set(filename, currentMtime);\n\n if (this.invalidateIfChanged(filename, content, undefined, 'fs')) {\n return true;\n }\n\n return false;\n } catch (error) {\n if (!isMissingFileError(error)) {\n throw error;\n }\n\n this.invalidateForFile(filename);\n return true;\n }\n }\n\n private setContentHash(\n filename: string,\n source: 'fs' | 'loaded',\n hash: string\n ) {\n const current = this.contentHashes.get(filename);\n if (current) {\n current[source] = hash;\n } else {\n this.contentHashes.set(filename, { [source]: hash });\n }\n\n if (source === 'fs') {\n try {\n this.fileMtimes.set(\n filename,\n fs.statSync(stripQueryAndHash(filename)).mtimeMs\n );\n } catch {\n // ignore\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"mappings":"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","names":[],"sources":["../src/cache.ts"],"version":3,"sourcesContent":["import { createHash } from 'crypto';\nimport fs from 'node:fs';\nimport { logger } from '@wyw-in-js/shared';\n\nimport type { BarrelManifestCacheEntry } from './transform/barrelManifest.types';\nimport type { Entrypoint } from './transform/Entrypoint';\nimport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nimport { getFileIdx } from './utils/getFileIdx';\nimport { stripQueryAndHash } from './utils/parseRequest';\n\nfunction hashContent(content: string) {\n return createHash('sha256').update(content).digest('hex');\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n const { code } = error as NodeJS.ErrnoException;\n return code === 'ENOENT' || code === 'ENOTDIR';\n}\n\ninterface IBaseCachedEntrypoint {\n dependencies: Map<string, { resolved: string | null }>;\n initialCode?: string;\n invalidateOnDependencyChange?: Set<string>;\n invalidationDependencies?: Map<string, { resolved: string | null }>;\n}\n\ninterface ICaches<TEntrypoint extends IBaseCachedEntrypoint> {\n barrelManifests: Map<string, BarrelManifestCacheEntry>;\n entrypoints: Map<string, TEntrypoint>;\n exports: Map<string, string[]>;\n}\n\ntype MapValue<T> = T extends Map<string, infer V> ? V : never;\n\nconst cacheLogger = logger.extend('cache');\n\nconst cacheNames = ['barrelManifests', 'entrypoints', 'exports'] as const;\ntype CacheNames = (typeof cacheNames)[number];\n\nconst loggers = cacheNames.reduce(\n (acc, key) => ({\n ...acc,\n [key]: cacheLogger.extend(key),\n }),\n {} as Record<CacheNames, typeof logger>\n);\n\nexport class TransformCacheCollection<\n TEntrypoint extends IBaseCachedEntrypoint = Entrypoint | IEvaluatedEntrypoint,\n> {\n public readonly barrelManifests: Map<string, BarrelManifestCacheEntry>;\n\n public readonly entrypoints: Map<string, TEntrypoint>;\n\n public readonly exports: Map<string, string[]>;\n\n private readonly barrelManifestDependencies = new Map<string, Set<string>>();\n\n private contentHashes = new Map<string, { fs?: string; loaded?: string }>();\n\n private fileMtimes = new Map<string, number>();\n\n private readonly exportDependencies = new Map<string, Set<string>>();\n\n private keySalt: string | null = null;\n\n private invalidatedFiles = new Map<string, number>();\n\n private consumedInvalidationVersions = new Map<string, number>();\n\n constructor(caches: Partial<ICaches<TEntrypoint>> = {}) {\n this.barrelManifests = caches.barrelManifests || new Map();\n this.entrypoints = caches.entrypoints || new Map();\n this.exports = caches.exports || new Map();\n }\n\n public setKeySalt(keySalt: string | null) {\n if (this.keySalt === keySalt) return;\n\n const prevKeySalt = this.keySalt;\n this.keySalt = keySalt;\n\n if (prevKeySalt === null && keySalt) {\n const migrate = <TValue>(cache: Map<string, TValue>) => {\n const entries = Array.from(cache.entries());\n cache.clear();\n entries.forEach(([key, value]) => {\n cache.set(this.getKey(key), value);\n });\n };\n\n migrate(this.barrelManifests);\n migrate(this.entrypoints);\n migrate(this.exports);\n migrate(this.barrelManifestDependencies);\n migrate(this.exportDependencies);\n return;\n }\n\n this.barrelManifests.clear();\n this.entrypoints.clear();\n this.exports.clear();\n this.clearCacheDependencies('all');\n }\n\n private getKey(key: string) {\n if (!this.keySalt) return key;\n return `${key}::${this.keySalt}`;\n }\n\n public getKeySalt() {\n return this.keySalt;\n }\n\n public add<\n TCache extends CacheNames,\n TValue extends MapValue<ICaches<TEntrypoint>[TCache]>,\n >(cacheName: TCache, key: string, value: TValue): void {\n const cache = this[cacheName] as Map<string, TValue>;\n const cacheKey = this.getKey(key);\n loggers[cacheName]('%s:add %s %f', getFileIdx(key), key, () => {\n if (value === undefined) {\n return cache.has(cacheKey) ? 'removed' : 'noop';\n }\n\n if (!cache.has(cacheKey)) {\n return 'added';\n }\n\n return cache.get(cacheKey) === value ? 'unchanged' : 'updated';\n });\n\n if (value === undefined) {\n cache.delete(cacheKey);\n this.contentHashes.delete(key);\n this.clearCacheDependencies(cacheName, key);\n return;\n }\n\n this.clearCacheDependencies(cacheName, key);\n cache.set(cacheKey, value);\n\n if ('initialCode' in value) {\n const maybeOriginalCode = (value as unknown as { originalCode?: unknown })\n .originalCode;\n const isLoaded = typeof value.initialCode === 'string';\n const source = isLoaded ? 'loaded' : 'fs';\n\n let resolvedCode: string | undefined;\n if (isLoaded) {\n resolvedCode = value.initialCode;\n } else if (typeof maybeOriginalCode === 'string') {\n resolvedCode = maybeOriginalCode;\n }\n\n if (resolvedCode !== undefined) {\n this.setContentHash(key, source, hashContent(resolvedCode));\n return;\n }\n\n try {\n const fileContent = fs.readFileSync(stripQueryAndHash(key), 'utf8');\n this.setContentHash(key, source, hashContent(fileContent));\n } catch {\n this.setContentHash(key, source, hashContent(''));\n }\n\n return;\n }\n\n if (cacheName === 'barrelManifests' || cacheName === 'exports') {\n try {\n const fileContent = fs.readFileSync(stripQueryAndHash(key), 'utf8');\n this.setContentHash(key, 'fs', hashContent(fileContent));\n } catch {\n this.setContentHash(key, 'fs', hashContent(''));\n }\n }\n }\n\n public clear(cacheName: CacheNames | 'all'): void {\n if (cacheName === 'all') {\n cacheNames.forEach((name) => {\n this.clear(name);\n });\n\n return;\n }\n\n loggers[cacheName]('clear');\n const cache = this[cacheName] as Map<string, unknown>;\n\n cache.clear();\n this.clearCacheDependencies(cacheName);\n }\n\n public delete(cacheName: CacheNames, key: string): void {\n this.invalidate(cacheName, key);\n }\n\n public get<\n TCache extends CacheNames,\n TValue extends MapValue<ICaches<TEntrypoint>[TCache]>,\n >(cacheName: TCache, key: string): TValue | undefined {\n const cache = this[cacheName] as Map<string, TValue>;\n const res = cache.get(this.getKey(key));\n\n loggers[cacheName]('get', key, res === undefined ? 'miss' : 'hit');\n return res;\n }\n\n public has(cacheName: CacheNames, key: string): boolean {\n const cache = this[cacheName] as Map<string, unknown>;\n const res = cache.has(this.getKey(key));\n\n loggers[cacheName]('has', key, res);\n return res;\n }\n\n public invalidate(cacheName: CacheNames, key: string): void {\n const cache = this[cacheName] as Map<string, unknown>;\n const cacheKey = this.getKey(key);\n\n if (!cache.has(cacheKey)) {\n return;\n }\n\n loggers[cacheName]('invalidate', key);\n\n cache.delete(cacheKey);\n this.clearCacheDependencies(cacheName, key);\n }\n\n public invalidateForFile(filename: string) {\n cacheNames.forEach((cacheName) => {\n this.invalidate(cacheName, filename);\n });\n\n const key = stripQueryAndHash(filename);\n const version = this.invalidatedFiles.get(key) ?? 0;\n this.invalidatedFiles.set(key, version + 1);\n }\n\n public consumeInvalidation(filename: string) {\n const key = stripQueryAndHash(filename);\n const invalidationVersion = this.invalidatedFiles.get(key);\n\n if (invalidationVersion === undefined) {\n return false;\n }\n\n const consumedVersion =\n this.consumedInvalidationVersions.get(filename) ?? 0;\n if (consumedVersion >= invalidationVersion) {\n return false;\n }\n\n this.consumedInvalidationVersions.set(filename, invalidationVersion);\n return true;\n }\n\n public invalidateIfChanged(\n filename: string,\n content: string,\n previousVisitedFiles?: Set<string>,\n source: 'fs' | 'loaded' = 'loaded',\n changedFiles = new Set<string>(),\n dependencyChangeMemo = new Map<string, boolean>(),\n forceContentCheck = false\n ) {\n if (changedFiles.has(filename)) {\n return true;\n }\n\n const visitedFiles = new Set(previousVisitedFiles);\n const fileEntrypoint = this.get('entrypoints', filename);\n let anyDepChanged = false;\n\n if (\n !visitedFiles.has(filename) &&\n (fileEntrypoint || this.hasCachedDependencies(filename))\n ) {\n visitedFiles.add(filename);\n const invalidateOnDependencyChange =\n fileEntrypoint?.invalidateOnDependencyChange;\n const dependenciesToCheck = this.getDependenciesToCheck(\n filename,\n fileEntrypoint\n );\n\n for (const [, dependency] of dependenciesToCheck) {\n const dependencyFilename = dependency.resolved;\n\n if (dependencyFilename) {\n const dependencyChanged = this.didDependencyChange(\n dependencyFilename,\n visitedFiles,\n changedFiles,\n dependencyChangeMemo,\n forceContentCheck ||\n invalidateOnDependencyChange?.has(dependencyFilename) ||\n false\n );\n\n if (\n dependencyChanged &&\n invalidateOnDependencyChange?.has(dependencyFilename)\n ) {\n cacheLogger(\n 'dependency affecting output has changed, invalidate all for %s',\n filename\n );\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n\n return true;\n }\n\n if (dependencyChanged) {\n anyDepChanged = true;\n }\n }\n }\n }\n\n const existing = this.contentHashes.get(filename);\n const previousHash = existing?.[source];\n const newHash = hashContent(content);\n\n if (previousHash === undefined) {\n const otherSource = source === 'fs' ? 'loaded' : 'fs';\n const otherHash = existing?.[otherSource];\n\n if ((otherHash !== undefined && otherHash !== newHash) || anyDepChanged) {\n cacheLogger('content has changed, invalidate all for %s', filename);\n this.setContentHash(filename, source, newHash);\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n\n return true;\n }\n\n this.setContentHash(filename, source, newHash);\n\n if (anyDepChanged) {\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n return true;\n }\n\n return false;\n }\n\n if (previousHash !== newHash || anyDepChanged) {\n cacheLogger('content has changed, invalidate all for %s', filename);\n this.setContentHash(filename, source, newHash);\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n\n return true;\n }\n\n return false;\n }\n\n private getDependenciesToCheck(\n filename: string,\n fileEntrypoint?: TEntrypoint\n ): Map<string, { resolved: string | null }> {\n const dependenciesToCheck = new Map<string, { resolved: string | null }>();\n\n for (const [key, dependency] of fileEntrypoint?.dependencies ?? []) {\n dependenciesToCheck.set(key, dependency);\n }\n\n for (const [key, dependency] of fileEntrypoint?.invalidationDependencies ??\n []) {\n if (!dependenciesToCheck.has(key)) {\n dependenciesToCheck.set(key, dependency);\n }\n }\n\n for (const dependencyFilename of this.getCachedDependencies(filename)) {\n if (\n ![...dependenciesToCheck.values()].some(\n (dependency) => dependency.resolved === dependencyFilename\n )\n ) {\n dependenciesToCheck.set(dependencyFilename, {\n resolved: dependencyFilename,\n });\n }\n }\n\n return dependenciesToCheck;\n }\n\n private didDependencyChange(\n dependencyFilename: string,\n visitedFiles: Set<string>,\n changedFiles: Set<string>,\n dependencyChangeMemo: Map<string, boolean>,\n forceContentCheck = false\n ): boolean {\n if (changedFiles.has(dependencyFilename)) {\n return true;\n }\n\n const memoized = dependencyChangeMemo.get(dependencyFilename);\n if (memoized !== undefined) {\n return memoized;\n }\n\n if (visitedFiles.has(dependencyFilename)) {\n return false;\n }\n\n const strippedDependencyFilename = stripQueryAndHash(dependencyFilename);\n const cachedMtime = this.fileMtimes.get(dependencyFilename);\n const cachedEntrypoint = this.get('entrypoints', dependencyFilename);\n\n if (cachedMtime !== undefined) {\n let currentMtime: number;\n\n try {\n currentMtime = fs.statSync(strippedDependencyFilename).mtimeMs;\n } catch (error) {\n if (!isMissingFileError(error)) {\n throw error;\n }\n\n this.invalidateForFile(dependencyFilename);\n changedFiles.add(dependencyFilename);\n dependencyChangeMemo.set(dependencyFilename, true);\n return true;\n }\n\n if (currentMtime === cachedMtime) {\n const nestedDependencies = this.getDependenciesToCheck(\n dependencyFilename,\n cachedEntrypoint\n );\n\n if (\n forceContentCheck &&\n this.didFileContentHashChange(\n dependencyFilename,\n strippedDependencyFilename,\n changedFiles\n )\n ) {\n dependencyChangeMemo.set(dependencyFilename, true);\n return true;\n }\n\n // A cached file without a cached entrypoint was invalidated earlier.\n if (!cachedEntrypoint && nestedDependencies.size === 0) {\n dependencyChangeMemo.set(dependencyFilename, true);\n return true;\n }\n\n if (nestedDependencies.size === 0) {\n dependencyChangeMemo.set(dependencyFilename, false);\n return false;\n }\n\n const nextVisitedFiles = new Set(visitedFiles);\n nextVisitedFiles.add(dependencyFilename);\n\n for (const [, nestedDependency] of nestedDependencies) {\n if (\n nestedDependency.resolved &&\n this.didDependencyChange(\n nestedDependency.resolved,\n nextVisitedFiles,\n changedFiles,\n dependencyChangeMemo,\n forceContentCheck\n )\n ) {\n this.invalidateForFile(dependencyFilename);\n changedFiles.add(dependencyFilename);\n dependencyChangeMemo.set(dependencyFilename, true);\n return true;\n }\n }\n\n dependencyChangeMemo.set(dependencyFilename, false);\n return false;\n }\n }\n\n let dependencyContent: string;\n\n try {\n dependencyContent = fs.readFileSync(strippedDependencyFilename, 'utf8');\n } catch (error) {\n if (!isMissingFileError(error)) {\n throw error;\n }\n\n this.invalidateForFile(dependencyFilename);\n changedFiles.add(dependencyFilename);\n dependencyChangeMemo.set(dependencyFilename, true);\n return true;\n }\n\n const invalidated = this.invalidateIfChanged(\n dependencyFilename,\n dependencyContent,\n visitedFiles,\n 'fs',\n changedFiles,\n dependencyChangeMemo,\n forceContentCheck\n );\n\n dependencyChangeMemo.set(dependencyFilename, invalidated);\n return invalidated;\n }\n\n private didFileContentHashChange(\n filename: string,\n strippedFilename: string,\n changedFiles: Set<string>\n ): boolean {\n const previousHash = this.contentHashes.get(filename)?.fs;\n if (previousHash === undefined) {\n return false;\n }\n\n let content: string;\n try {\n content = fs.readFileSync(strippedFilename, 'utf8');\n } catch (error) {\n if (!isMissingFileError(error)) {\n throw error;\n }\n\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n return true;\n }\n\n const nextHash = hashContent(content);\n if (previousHash === nextHash) {\n return false;\n }\n\n this.setContentHash(filename, 'fs', nextHash);\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n return true;\n }\n\n public setCacheDependencies(\n cacheName: 'barrelManifests' | 'exports',\n key: string,\n dependencies: Iterable<string>\n ): void {\n const cache = this.getDependencyCache(cacheName);\n const nextDependencies = new Set(\n [...dependencies].filter((dependency) => dependency.length > 0)\n );\n const cacheKey = this.getKey(key);\n\n if (nextDependencies.size === 0) {\n cache.delete(cacheKey);\n return;\n }\n\n cache.set(cacheKey, nextDependencies);\n }\n\n /**\n * Fast check if a file changed on disk since last seen.\n * Uses mtime as a fast path and only reads the file if mtime differs.\n */\n public checkFreshness(filename: string, strippedFilename: string): boolean {\n try {\n const currentMtime = fs.statSync(strippedFilename).mtimeMs;\n const cachedMtime = this.fileMtimes.get(filename);\n\n if (cachedMtime !== undefined && currentMtime === cachedMtime) {\n return false;\n }\n\n const content = fs.readFileSync(strippedFilename, 'utf8');\n this.fileMtimes.set(filename, currentMtime);\n\n if (this.invalidateIfChanged(filename, content, undefined, 'fs')) {\n return true;\n }\n\n return false;\n } catch (error) {\n if (!isMissingFileError(error)) {\n throw error;\n }\n\n this.invalidateForFile(filename);\n return true;\n }\n }\n\n private clearCacheDependencies(cacheName: CacheNames | 'all', key?: string) {\n if (cacheName === 'all') {\n this.barrelManifestDependencies.clear();\n this.exportDependencies.clear();\n return;\n }\n\n if (cacheName === 'barrelManifests') {\n if (key === undefined) {\n this.barrelManifestDependencies.clear();\n } else {\n this.barrelManifestDependencies.delete(this.getKey(key));\n }\n return;\n }\n\n if (cacheName === 'exports') {\n if (key === undefined) {\n this.exportDependencies.clear();\n } else {\n this.exportDependencies.delete(this.getKey(key));\n }\n }\n }\n\n private getCachedDependencies(filename: string): Set<string> {\n const key = this.getKey(filename);\n\n return new Set([\n ...(this.barrelManifestDependencies.get(key) ?? []),\n ...(this.exportDependencies.get(key) ?? []),\n ]);\n }\n\n private getDependencyCache(cacheName: 'barrelManifests' | 'exports') {\n return cacheName === 'barrelManifests'\n ? this.barrelManifestDependencies\n : this.exportDependencies;\n }\n\n private hasCachedDependencies(filename: string): boolean {\n return this.getCachedDependencies(filename).size > 0;\n }\n\n private setContentHash(\n filename: string,\n source: 'fs' | 'loaded',\n hash: string\n ) {\n const current = this.contentHashes.get(filename);\n if (current) {\n current[source] = hash;\n } else {\n this.contentHashes.set(filename, { [source]: hash });\n }\n\n if (source === 'fs') {\n try {\n this.fileMtimes.set(\n filename,\n fs.statSync(stripQueryAndHash(filename)).mtimeMs\n );\n } catch {\n // ignore\n }\n }\n }\n}\n"],"file":"cache.js"}
|
|
@@ -1,144 +1,147 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
|
-
import { createWriteStream, existsSync, mkdirSync } from
|
|
3
|
-
import path from
|
|
4
|
-
import { EventEmitter, isOnActionStartArgs } from
|
|
2
|
+
import { createWriteStream, existsSync, mkdirSync } from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { EventEmitter, isOnActionStartArgs } from "../utils/EventEmitter.js";
|
|
5
5
|
const workingDir = process.cwd();
|
|
6
6
|
function replacer(_key, value) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
7
|
+
if (typeof value === "string" && path.isAbsolute(value)) {
|
|
8
|
+
return path.relative(workingDir, value);
|
|
9
|
+
}
|
|
10
|
+
if (value instanceof Map) {
|
|
11
|
+
return Array.from(value.entries()).reduce((obj, [k, v]) => {
|
|
12
|
+
const key = replacer(k, k);
|
|
13
|
+
return {
|
|
14
|
+
...obj,
|
|
15
|
+
[key]: replacer(key, v)
|
|
16
|
+
};
|
|
17
|
+
}, {});
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
20
|
}
|
|
21
21
|
function printTimings(timings, startedAt, sourceRoot) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
22
|
+
if (timings.size === 0) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
console.log(`\nTimings:`);
|
|
26
|
+
console.log(` Total: ${(performance.now() - startedAt).toFixed()}ms`);
|
|
27
|
+
Array.from(timings.entries()).forEach(([label, byLabel]) => {
|
|
28
|
+
console.log(`\n By ${label}:`);
|
|
29
|
+
const array = Array.from(byLabel.entries());
|
|
30
|
+
// array.sort(([, a], [, b]) => b - a);
|
|
31
|
+
array.sort(([a], [b]) => a.localeCompare(b)).forEach(([value, time]) => {
|
|
32
|
+
const name = value.startsWith(sourceRoot) ? path.relative(sourceRoot, value) : value;
|
|
33
|
+
console.log(` ${name}: ${time}ms`);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
36
|
}
|
|
37
37
|
const writeJSONl = (stream, data) => {
|
|
38
|
-
|
|
38
|
+
stream.write(`${JSON.stringify(data, replacer)}\n`);
|
|
39
39
|
};
|
|
40
40
|
export const createFileReporter = (options = false) => {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
41
|
+
if (!options || !options.dir) {
|
|
42
|
+
return {
|
|
43
|
+
emitter: EventEmitter.dummy,
|
|
44
|
+
onDone: () => {}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const reportFolder = existsSync(options.dir) ? options.dir : mkdirSync(options.dir, { recursive: true });
|
|
48
|
+
if (!reportFolder) {
|
|
49
|
+
throw new Error(`Could not create directory ${options.dir}`);
|
|
50
|
+
}
|
|
51
|
+
const actionStream = createWriteStream(path.join(options.dir, "actions.jsonl"));
|
|
52
|
+
const dependenciesStream = createWriteStream(path.join(options.dir, "dependencies.jsonl"));
|
|
53
|
+
const entrypointStream = createWriteStream(path.join(options.dir, "entrypoints.jsonl"));
|
|
54
|
+
const staticResolveStream = createWriteStream(path.join(options.dir, "static-resolve.jsonl"));
|
|
55
|
+
const startedAt = performance.now();
|
|
56
|
+
const timings = new Map();
|
|
57
|
+
const addTiming = (label, key, value) => {
|
|
58
|
+
if (!timings.has(label)) {
|
|
59
|
+
timings.set(label, new Map());
|
|
60
|
+
}
|
|
61
|
+
const forLabel = timings.get(label);
|
|
62
|
+
forLabel.set(key, Math.round((forLabel.get(key) || 0) + value));
|
|
63
|
+
};
|
|
64
|
+
const processDependencyEvent = ({ file, only, imports, fileIdx }) => {
|
|
65
|
+
writeJSONl(dependenciesStream, {
|
|
66
|
+
file,
|
|
67
|
+
only,
|
|
68
|
+
imports,
|
|
69
|
+
fileIdx
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
const processSingleEvent = (meta) => {
|
|
73
|
+
if (meta.type === "dependency") {
|
|
74
|
+
processDependencyEvent(meta);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (meta.type === "staticResolve") {
|
|
78
|
+
writeJSONl(staticResolveStream, meta);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const startTimes = new Map();
|
|
82
|
+
const onEvent = (meta, type) => {
|
|
83
|
+
if (type === "single") {
|
|
84
|
+
processSingleEvent(meta);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (type === "start") {
|
|
88
|
+
Object.entries(meta).forEach(([label, value]) => {
|
|
89
|
+
startTimes.set(`${label}\0${value}`, performance.now());
|
|
90
|
+
});
|
|
91
|
+
} else {
|
|
92
|
+
Object.entries(meta).forEach(([label, value]) => {
|
|
93
|
+
const startTime = startTimes.get(`${label}\0${value}`);
|
|
94
|
+
if (startTime) {
|
|
95
|
+
addTiming(label, String(value), performance.now() - startTime);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
let actionId = 0;
|
|
101
|
+
const onAction = (...args) => {
|
|
102
|
+
if (isOnActionStartArgs(args)) {
|
|
103
|
+
const [, timestamp, type, idx, entrypointRef] = args;
|
|
104
|
+
writeJSONl(actionStream, {
|
|
105
|
+
actionId,
|
|
106
|
+
entrypointRef,
|
|
107
|
+
idx,
|
|
108
|
+
startedAt: timestamp,
|
|
109
|
+
type
|
|
110
|
+
});
|
|
111
|
+
// eslint-disable-next-line no-plusplus
|
|
112
|
+
return actionId++;
|
|
113
|
+
}
|
|
114
|
+
const [result, timestamp, id, isAsync, error] = args;
|
|
115
|
+
writeJSONl(actionStream, {
|
|
116
|
+
actionId: id,
|
|
117
|
+
error,
|
|
118
|
+
finishedAt: timestamp,
|
|
119
|
+
isAsync,
|
|
120
|
+
result: `${result}ed`
|
|
121
|
+
});
|
|
122
|
+
return id;
|
|
123
|
+
};
|
|
124
|
+
const onEntrypointEvent = (emitterId, timestamp, event) => {
|
|
125
|
+
entrypointStream.write(`${JSON.stringify([
|
|
126
|
+
emitterId,
|
|
127
|
+
timestamp,
|
|
128
|
+
event
|
|
129
|
+
])}\n`);
|
|
130
|
+
};
|
|
131
|
+
const emitter = new EventEmitter(onEvent, onAction, onEntrypointEvent);
|
|
132
|
+
return {
|
|
133
|
+
emitter,
|
|
134
|
+
onDone: (sourceRoot) => {
|
|
135
|
+
if (options.print) {
|
|
136
|
+
printTimings(timings, startedAt, sourceRoot);
|
|
137
|
+
console.log("\nMemory usage:", process.memoryUsage());
|
|
138
|
+
}
|
|
139
|
+
actionStream.end();
|
|
140
|
+
dependenciesStream.end();
|
|
141
|
+
entrypointStream.end();
|
|
142
|
+
staticResolveStream.end();
|
|
143
|
+
timings.clear();
|
|
144
|
+
}
|
|
145
|
+
};
|
|
143
146
|
};
|
|
144
|
-
//# sourceMappingURL=fileReporter.js.map
|
|
147
|
+
//# sourceMappingURL=fileReporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileReporter.js","names":["createWriteStream","existsSync","mkdirSync","path","EventEmitter","isOnActionStartArgs","workingDir","process","cwd","replacer","_key","value","isAbsolute","relative","Map","Array","from","entries","reduce","obj","k","v","key","printTimings","timings","startedAt","sourceRoot","size","console","log","performance","now","toFixed","forEach","label","byLabel","array","sort","a","b","localeCompare","time","name","startsWith","writeJSONl","stream","data","write","JSON","stringify","createFileReporter","options","dir","emitter","dummy","onDone","reportFolder","recursive","Error","actionStream","join","dependenciesStream","entrypointStream","addTiming","has","set","forLabel","get","Math","round","processDependencyEvent","file","only","imports","fileIdx","processSingleEvent","meta","type","startTimes","onEvent","Object","startTime","String","actionId","onAction","args","timestamp","idx","entrypointRef","result","id","isAsync","error","finishedAt","onEntrypointEvent","emitterId","event","print","memoryUsage","end","clear"],"sources":["../../src/debug/fileReporter.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { createWriteStream, existsSync, mkdirSync } from 'fs';\nimport path from 'path';\n\nimport type {\n OnAction,\n OnEvent,\n OnActionFinishArgs,\n OnActionStartArgs,\n OnEntrypointEvent,\n} from '../utils/EventEmitter';\nimport { EventEmitter, isOnActionStartArgs } from '../utils/EventEmitter';\n\ntype Timings = Map<string, Map<string, number>>;\n\nexport interface IFileReporterOptions {\n dir?: string;\n print?: boolean;\n}\n\nexport interface IProcessedEvent {\n file: string;\n fileIdx: string;\n imports: { from: string; what: string[] }[];\n only: string[];\n phase?: 'initial' | 'rewritten';\n type: 'dependency';\n}\n\nexport interface IQueueActionEvent {\n action: string;\n args?: string[];\n datetime: Date;\n file: string;\n queueIdx: string;\n type: 'queue-action';\n}\n\nconst workingDir = process.cwd();\n\nfunction replacer(_key: string, value: unknown): unknown {\n if (typeof value === 'string' && path.isAbsolute(value)) {\n return path.relative(workingDir, value);\n }\n\n if (value instanceof Map) {\n return Array.from(value.entries()).reduce((obj, [k, v]) => {\n const key = replacer(k, k) as string;\n return {\n ...obj,\n [key]: replacer(key, v),\n };\n }, {});\n }\n\n return value;\n}\n\nfunction printTimings(timings: Timings, startedAt: number, sourceRoot: string) {\n if (timings.size === 0) {\n return;\n }\n\n console.log(`\\nTimings:`);\n console.log(` Total: ${(performance.now() - startedAt).toFixed()}ms`);\n\n Array.from(timings.entries()).forEach(([label, byLabel]) => {\n console.log(`\\n By ${label}:`);\n\n const array = Array.from(byLabel.entries());\n // array.sort(([, a], [, b]) => b - a);\n array\n .sort(([a], [b]) => a.localeCompare(b))\n .forEach(([value, time]) => {\n const name = value.startsWith(sourceRoot)\n ? path.relative(sourceRoot, value)\n : value;\n console.log(` ${name}: ${time}ms`);\n });\n });\n}\n\nconst writeJSONl = (stream: NodeJS.WritableStream, data: unknown) => {\n stream.write(`${JSON.stringify(data, replacer)}\\n`);\n};\n\nexport const createFileReporter = (\n options: IFileReporterOptions | false = false\n) => {\n if (!options || !options.dir) {\n return {\n emitter: EventEmitter.dummy,\n onDone: () => {},\n };\n }\n\n const reportFolder = existsSync(options.dir)\n ? options.dir\n : mkdirSync(options.dir, {\n recursive: true,\n });\n\n if (!reportFolder) {\n throw new Error(`Could not create directory ${options.dir}`);\n }\n\n const actionStream = createWriteStream(\n path.join(options.dir, 'actions.jsonl')\n );\n\n const dependenciesStream = createWriteStream(\n path.join(options.dir, 'dependencies.jsonl')\n );\n\n const entrypointStream = createWriteStream(\n path.join(options.dir, 'entrypoints.jsonl')\n );\n\n const startedAt = performance.now();\n const timings: Timings = new Map();\n const addTiming = (label: string, key: string, value: number) => {\n if (!timings.has(label)) {\n timings.set(label, new Map());\n }\n\n const forLabel = timings.get(label)!;\n forLabel.set(key, Math.round((forLabel.get(key) || 0) + value));\n };\n\n const processDependencyEvent = ({\n file,\n only,\n imports,\n fileIdx,\n }: IProcessedEvent) => {\n writeJSONl(dependenciesStream, {\n file,\n only,\n imports,\n fileIdx,\n });\n };\n\n const processSingleEvent = (\n meta: Record<string, unknown> | IProcessedEvent | IQueueActionEvent\n ) => {\n if (meta.type === 'dependency') {\n processDependencyEvent(meta as IProcessedEvent);\n }\n };\n\n const startTimes = new Map<string, number>();\n\n const onEvent: OnEvent = (meta, type) => {\n if (type === 'single') {\n processSingleEvent(meta);\n return;\n }\n\n if (type === 'start') {\n Object.entries(meta).forEach(([label, value]) => {\n startTimes.set(`${label}\\0${value}`, performance.now());\n });\n } else {\n Object.entries(meta).forEach(([label, value]) => {\n const startTime = startTimes.get(`${label}\\0${value}`);\n if (startTime) {\n addTiming(label, String(value), performance.now() - startTime);\n }\n });\n }\n };\n\n let actionId = 0;\n const onAction: OnAction = (\n ...args: OnActionStartArgs | OnActionFinishArgs\n ) => {\n if (isOnActionStartArgs(args)) {\n const [, timestamp, type, idx, entrypointRef] = args;\n writeJSONl(actionStream, {\n actionId,\n entrypointRef,\n idx,\n startedAt: timestamp,\n type,\n });\n\n // eslint-disable-next-line no-plusplus\n return actionId++;\n }\n\n const [result, timestamp, id, isAsync, error] = args;\n writeJSONl(actionStream, {\n actionId: id,\n error,\n finishedAt: timestamp,\n isAsync,\n result: `${result}ed`,\n });\n\n return id;\n };\n\n const onEntrypointEvent: OnEntrypointEvent = (\n emitterId,\n timestamp,\n event\n ) => {\n entrypointStream.write(\n `${JSON.stringify([emitterId, timestamp, event])}\\n`\n );\n };\n\n const emitter = new EventEmitter(onEvent, onAction, onEntrypointEvent);\n\n return {\n emitter,\n onDone: (sourceRoot: string) => {\n if (options.print) {\n printTimings(timings, startedAt, sourceRoot);\n\n console.log('\\nMemory usage:', process.memoryUsage());\n }\n\n actionStream.end();\n dependenciesStream.end();\n timings.clear();\n },\n };\n};\n"],"mappings":"AAAA;AACA,SAASA,iBAAiB,EAAEC,UAAU,EAAEC,SAAS,QAAQ,IAAI;AAC7D,OAAOC,IAAI,MAAM,MAAM;AASvB,SAASC,YAAY,EAAEC,mBAAmB,QAAQ,uBAAuB;AA2BzE,MAAMC,UAAU,GAAGC,OAAO,CAACC,GAAG,CAAC,CAAC;AAEhC,SAASC,QAAQA,CAACC,IAAY,EAAEC,KAAc,EAAW;EACvD,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIR,IAAI,CAACS,UAAU,CAACD,KAAK,CAAC,EAAE;IACvD,OAAOR,IAAI,CAACU,QAAQ,CAACP,UAAU,EAAEK,KAAK,CAAC;EACzC;EAEA,IAAIA,KAAK,YAAYG,GAAG,EAAE;IACxB,OAAOC,KAAK,CAACC,IAAI,CAACL,KAAK,CAACM,OAAO,CAAC,CAAC,CAAC,CAACC,MAAM,CAAC,CAACC,GAAG,EAAE,CAACC,CAAC,EAAEC,CAAC,CAAC,KAAK;MACzD,MAAMC,GAAG,GAAGb,QAAQ,CAACW,CAAC,EAAEA,CAAC,CAAW;MACpC,OAAO;QACL,GAAGD,GAAG;QACN,CAACG,GAAG,GAAGb,QAAQ,CAACa,GAAG,EAAED,CAAC;MACxB,CAAC;IACH,CAAC,EAAE,CAAC,CAAC,CAAC;EACR;EAEA,OAAOV,KAAK;AACd;AAEA,SAASY,YAAYA,CAACC,OAAgB,EAAEC,SAAiB,EAAEC,UAAkB,EAAE;EAC7E,IAAIF,OAAO,CAACG,IAAI,KAAK,CAAC,EAAE;IACtB;EACF;EAEAC,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;EACzBD,OAAO,CAACC,GAAG,CAAC,YAAY,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGN,SAAS,EAAEO,OAAO,CAAC,CAAC,IAAI,CAAC;EAEtEjB,KAAK,CAACC,IAAI,CAACQ,OAAO,CAACP,OAAO,CAAC,CAAC,CAAC,CAACgB,OAAO,CAAC,CAAC,CAACC,KAAK,EAAEC,OAAO,CAAC,KAAK;IAC1DP,OAAO,CAACC,GAAG,CAAC,UAAUK,KAAK,GAAG,CAAC;IAE/B,MAAME,KAAK,GAAGrB,KAAK,CAACC,IAAI,CAACmB,OAAO,CAAClB,OAAO,CAAC,CAAC,CAAC;IAC3C;IACAmB,KAAK,CACFC,IAAI,CAAC,CAAC,CAACC,CAAC,CAAC,EAAE,CAACC,CAAC,CAAC,KAAKD,CAAC,CAACE,aAAa,CAACD,CAAC,CAAC,CAAC,CACtCN,OAAO,CAAC,CAAC,CAACtB,KAAK,EAAE8B,IAAI,CAAC,KAAK;MAC1B,MAAMC,IAAI,GAAG/B,KAAK,CAACgC,UAAU,CAACjB,UAAU,CAAC,GACrCvB,IAAI,CAACU,QAAQ,CAACa,UAAU,EAAEf,KAAK,CAAC,GAChCA,KAAK;MACTiB,OAAO,CAACC,GAAG,CAAC,OAAOa,IAAI,KAAKD,IAAI,IAAI,CAAC;IACvC,CAAC,CAAC;EACN,CAAC,CAAC;AACJ;AAEA,MAAMG,UAAU,GAAGA,CAACC,MAA6B,EAAEC,IAAa,KAAK;EACnED,MAAM,CAACE,KAAK,CAAC,GAAGC,IAAI,CAACC,SAAS,CAACH,IAAI,EAAErC,QAAQ,CAAC,IAAI,CAAC;AACrD,CAAC;AAED,OAAO,MAAMyC,kBAAkB,GAAGA,CAChCC,OAAqC,GAAG,KAAK,KAC1C;EACH,IAAI,CAACA,OAAO,IAAI,CAACA,OAAO,CAACC,GAAG,EAAE;IAC5B,OAAO;MACLC,OAAO,EAAEjD,YAAY,CAACkD,KAAK;MAC3BC,MAAM,EAAEA,CAAA,KAAM,CAAC;IACjB,CAAC;EACH;EAEA,MAAMC,YAAY,GAAGvD,UAAU,CAACkD,OAAO,CAACC,GAAG,CAAC,GACxCD,OAAO,CAACC,GAAG,GACXlD,SAAS,CAACiD,OAAO,CAACC,GAAG,EAAE;IACrBK,SAAS,EAAE;EACb,CAAC,CAAC;EAEN,IAAI,CAACD,YAAY,EAAE;IACjB,MAAM,IAAIE,KAAK,CAAC,8BAA8BP,OAAO,CAACC,GAAG,EAAE,CAAC;EAC9D;EAEA,MAAMO,YAAY,GAAG3D,iBAAiB,CACpCG,IAAI,CAACyD,IAAI,CAACT,OAAO,CAACC,GAAG,EAAE,eAAe,CACxC,CAAC;EAED,MAAMS,kBAAkB,GAAG7D,iBAAiB,CAC1CG,IAAI,CAACyD,IAAI,CAACT,OAAO,CAACC,GAAG,EAAE,oBAAoB,CAC7C,CAAC;EAED,MAAMU,gBAAgB,GAAG9D,iBAAiB,CACxCG,IAAI,CAACyD,IAAI,CAACT,OAAO,CAACC,GAAG,EAAE,mBAAmB,CAC5C,CAAC;EAED,MAAM3B,SAAS,GAAGK,WAAW,CAACC,GAAG,CAAC,CAAC;EACnC,MAAMP,OAAgB,GAAG,IAAIV,GAAG,CAAC,CAAC;EAClC,MAAMiD,SAAS,GAAGA,CAAC7B,KAAa,EAAEZ,GAAW,EAAEX,KAAa,KAAK;IAC/D,IAAI,CAACa,OAAO,CAACwC,GAAG,CAAC9B,KAAK,CAAC,EAAE;MACvBV,OAAO,CAACyC,GAAG,CAAC/B,KAAK,EAAE,IAAIpB,GAAG,CAAC,CAAC,CAAC;IAC/B;IAEA,MAAMoD,QAAQ,GAAG1C,OAAO,CAAC2C,GAAG,CAACjC,KAAK,CAAE;IACpCgC,QAAQ,CAACD,GAAG,CAAC3C,GAAG,EAAE8C,IAAI,CAACC,KAAK,CAAC,CAACH,QAAQ,CAACC,GAAG,CAAC7C,GAAG,CAAC,IAAI,CAAC,IAAIX,KAAK,CAAC,CAAC;EACjE,CAAC;EAED,MAAM2D,sBAAsB,GAAGA,CAAC;IAC9BC,IAAI;IACJC,IAAI;IACJC,OAAO;IACPC;EACe,CAAC,KAAK;IACrB9B,UAAU,CAACiB,kBAAkB,EAAE;MAC7BU,IAAI;MACJC,IAAI;MACJC,OAAO;MACPC;IACF,CAAC,CAAC;EACJ,CAAC;EAED,MAAMC,kBAAkB,GACtBC,IAAmE,IAChE;IACH,IAAIA,IAAI,CAACC,IAAI,KAAK,YAAY,EAAE;MAC9BP,sBAAsB,CAACM,IAAuB,CAAC;IACjD;EACF,CAAC;EAED,MAAME,UAAU,GAAG,IAAIhE,GAAG,CAAiB,CAAC;EAE5C,MAAMiE,OAAgB,GAAGA,CAACH,IAAI,EAAEC,IAAI,KAAK;IACvC,IAAIA,IAAI,KAAK,QAAQ,EAAE;MACrBF,kBAAkB,CAACC,IAAI,CAAC;MACxB;IACF;IAEA,IAAIC,IAAI,KAAK,OAAO,EAAE;MACpBG,MAAM,CAAC/D,OAAO,CAAC2D,IAAI,CAAC,CAAC3C,OAAO,CAAC,CAAC,CAACC,KAAK,EAAEvB,KAAK,CAAC,KAAK;QAC/CmE,UAAU,CAACb,GAAG,CAAC,GAAG/B,KAAK,KAAKvB,KAAK,EAAE,EAAEmB,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC;MACzD,CAAC,CAAC;IACJ,CAAC,MAAM;MACLiD,MAAM,CAAC/D,OAAO,CAAC2D,IAAI,CAAC,CAAC3C,OAAO,CAAC,CAAC,CAACC,KAAK,EAAEvB,KAAK,CAAC,KAAK;QAC/C,MAAMsE,SAAS,GAAGH,UAAU,CAACX,GAAG,CAAC,GAAGjC,KAAK,KAAKvB,KAAK,EAAE,CAAC;QACtD,IAAIsE,SAAS,EAAE;UACblB,SAAS,CAAC7B,KAAK,EAAEgD,MAAM,CAACvE,KAAK,CAAC,EAAEmB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGkD,SAAS,CAAC;QAChE;MACF,CAAC,CAAC;IACJ;EACF,CAAC;EAED,IAAIE,QAAQ,GAAG,CAAC;EAChB,MAAMC,QAAkB,GAAGA,CACzB,GAAGC,IAA4C,KAC5C;IACH,IAAIhF,mBAAmB,CAACgF,IAAI,CAAC,EAAE;MAC7B,MAAM,GAAGC,SAAS,EAAET,IAAI,EAAEU,GAAG,EAAEC,aAAa,CAAC,GAAGH,IAAI;MACpDzC,UAAU,CAACe,YAAY,EAAE;QACvBwB,QAAQ;QACRK,aAAa;QACbD,GAAG;QACH9D,SAAS,EAAE6D,SAAS;QACpBT;MACF,CAAC,CAAC;;MAEF;MACA,OAAOM,QAAQ,EAAE;IACnB;IAEA,MAAM,CAACM,MAAM,EAAEH,SAAS,EAAEI,EAAE,EAAEC,OAAO,EAAEC,KAAK,CAAC,GAAGP,IAAI;IACpDzC,UAAU,CAACe,YAAY,EAAE;MACvBwB,QAAQ,EAAEO,EAAE;MACZE,KAAK;MACLC,UAAU,EAAEP,SAAS;MACrBK,OAAO;MACPF,MAAM,EAAE,GAAGA,MAAM;IACnB,CAAC,CAAC;IAEF,OAAOC,EAAE;EACX,CAAC;EAED,MAAMI,iBAAoC,GAAGA,CAC3CC,SAAS,EACTT,SAAS,EACTU,KAAK,KACF;IACHlC,gBAAgB,CAACf,KAAK,CACpB,GAAGC,IAAI,CAACC,SAAS,CAAC,CAAC8C,SAAS,EAAET,SAAS,EAAEU,KAAK,CAAC,CAAC,IAClD,CAAC;EACH,CAAC;EAED,MAAM3C,OAAO,GAAG,IAAIjD,YAAY,CAAC2E,OAAO,EAAEK,QAAQ,EAAEU,iBAAiB,CAAC;EAEtE,OAAO;IACLzC,OAAO;IACPE,MAAM,EAAG7B,UAAkB,IAAK;MAC9B,IAAIyB,OAAO,CAAC8C,KAAK,EAAE;QACjB1E,YAAY,CAACC,OAAO,EAAEC,SAAS,EAAEC,UAAU,CAAC;QAE5CE,OAAO,CAACC,GAAG,CAAC,iBAAiB,EAAEtB,OAAO,CAAC2F,WAAW,CAAC,CAAC,CAAC;MACvD;MAEAvC,YAAY,CAACwC,GAAG,CAAC,CAAC;MAClBtC,kBAAkB,CAACsC,GAAG,CAAC,CAAC;MACxB3E,OAAO,CAAC4E,KAAK,CAAC,CAAC;IACjB;EACF,CAAC;AACH,CAAC","ignoreList":[]}
|
|
1
|
+
{"mappings":"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","names":[],"sources":["../../src/debug/fileReporter.ts"],"version":3,"sourcesContent":["/* eslint-disable no-console */\nimport { createWriteStream, existsSync, mkdirSync } from 'fs';\nimport path from 'path';\n\nimport type {\n OnAction,\n OnEvent,\n OnActionFinishArgs,\n OnActionStartArgs,\n OnEntrypointEvent,\n} from '../utils/EventEmitter';\nimport { EventEmitter, isOnActionStartArgs } from '../utils/EventEmitter';\n\ntype Timings = Map<string, Map<string, number>>;\n\nexport interface IFileReporterOptions {\n dir?: string;\n print?: boolean;\n}\n\nexport interface IProcessedEvent {\n file: string;\n fileIdx: string;\n imports: { from: string; what: string[] }[];\n only: string[];\n phase?: 'initial' | 'rewritten';\n type: 'dependency';\n}\n\nexport interface IQueueActionEvent {\n action: string;\n args?: string[];\n datetime: Date;\n file: string;\n queueIdx: string;\n type: 'queue-action';\n}\n\nconst workingDir = process.cwd();\n\nfunction replacer(_key: string, value: unknown): unknown {\n if (typeof value === 'string' && path.isAbsolute(value)) {\n return path.relative(workingDir, value);\n }\n\n if (value instanceof Map) {\n return Array.from(value.entries()).reduce((obj, [k, v]) => {\n const key = replacer(k, k) as string;\n return {\n ...obj,\n [key]: replacer(key, v),\n };\n }, {});\n }\n\n return value;\n}\n\nfunction printTimings(timings: Timings, startedAt: number, sourceRoot: string) {\n if (timings.size === 0) {\n return;\n }\n\n console.log(`\\nTimings:`);\n console.log(` Total: ${(performance.now() - startedAt).toFixed()}ms`);\n\n Array.from(timings.entries()).forEach(([label, byLabel]) => {\n console.log(`\\n By ${label}:`);\n\n const array = Array.from(byLabel.entries());\n // array.sort(([, a], [, b]) => b - a);\n array\n .sort(([a], [b]) => a.localeCompare(b))\n .forEach(([value, time]) => {\n const name = value.startsWith(sourceRoot)\n ? path.relative(sourceRoot, value)\n : value;\n console.log(` ${name}: ${time}ms`);\n });\n });\n}\n\nconst writeJSONl = (stream: NodeJS.WritableStream, data: unknown) => {\n stream.write(`${JSON.stringify(data, replacer)}\\n`);\n};\n\nexport const createFileReporter = (\n options: IFileReporterOptions | false = false\n) => {\n if (!options || !options.dir) {\n return {\n emitter: EventEmitter.dummy,\n onDone: () => {},\n };\n }\n\n const reportFolder = existsSync(options.dir)\n ? options.dir\n : mkdirSync(options.dir, {\n recursive: true,\n });\n\n if (!reportFolder) {\n throw new Error(`Could not create directory ${options.dir}`);\n }\n\n const actionStream = createWriteStream(\n path.join(options.dir, 'actions.jsonl')\n );\n\n const dependenciesStream = createWriteStream(\n path.join(options.dir, 'dependencies.jsonl')\n );\n\n const entrypointStream = createWriteStream(\n path.join(options.dir, 'entrypoints.jsonl')\n );\n\n const staticResolveStream = createWriteStream(\n path.join(options.dir, 'static-resolve.jsonl')\n );\n\n const startedAt = performance.now();\n const timings: Timings = new Map();\n const addTiming = (label: string, key: string, value: number) => {\n if (!timings.has(label)) {\n timings.set(label, new Map());\n }\n\n const forLabel = timings.get(label)!;\n forLabel.set(key, Math.round((forLabel.get(key) || 0) + value));\n };\n\n const processDependencyEvent = ({\n file,\n only,\n imports,\n fileIdx,\n }: IProcessedEvent) => {\n writeJSONl(dependenciesStream, {\n file,\n only,\n imports,\n fileIdx,\n });\n };\n\n const processSingleEvent = (\n meta: Record<string, unknown> | IProcessedEvent | IQueueActionEvent\n ) => {\n if (meta.type === 'dependency') {\n processDependencyEvent(meta as IProcessedEvent);\n return;\n }\n\n if (meta.type === 'staticResolve') {\n writeJSONl(staticResolveStream, meta);\n }\n };\n\n const startTimes = new Map<string, number>();\n\n const onEvent: OnEvent = (meta, type) => {\n if (type === 'single') {\n processSingleEvent(meta);\n return;\n }\n\n if (type === 'start') {\n Object.entries(meta).forEach(([label, value]) => {\n startTimes.set(`${label}\\0${value}`, performance.now());\n });\n } else {\n Object.entries(meta).forEach(([label, value]) => {\n const startTime = startTimes.get(`${label}\\0${value}`);\n if (startTime) {\n addTiming(label, String(value), performance.now() - startTime);\n }\n });\n }\n };\n\n let actionId = 0;\n const onAction: OnAction = (\n ...args: OnActionStartArgs | OnActionFinishArgs\n ) => {\n if (isOnActionStartArgs(args)) {\n const [, timestamp, type, idx, entrypointRef] = args;\n writeJSONl(actionStream, {\n actionId,\n entrypointRef,\n idx,\n startedAt: timestamp,\n type,\n });\n\n // eslint-disable-next-line no-plusplus\n return actionId++;\n }\n\n const [result, timestamp, id, isAsync, error] = args;\n writeJSONl(actionStream, {\n actionId: id,\n error,\n finishedAt: timestamp,\n isAsync,\n result: `${result}ed`,\n });\n\n return id;\n };\n\n const onEntrypointEvent: OnEntrypointEvent = (\n emitterId,\n timestamp,\n event\n ) => {\n entrypointStream.write(\n `${JSON.stringify([emitterId, timestamp, event])}\\n`\n );\n };\n\n const emitter = new EventEmitter(onEvent, onAction, onEntrypointEvent);\n\n return {\n emitter,\n onDone: (sourceRoot: string) => {\n if (options.print) {\n printTimings(timings, startedAt, sourceRoot);\n\n console.log('\\nMemory usage:', process.memoryUsage());\n }\n\n actionStream.end();\n dependenciesStream.end();\n entrypointStream.end();\n staticResolveStream.end();\n timings.clear();\n },\n };\n};\n"],"file":"fileReporter.js"}
|