@wyw-in-js/transform 1.0.7 → 1.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/esm/cache.js +60 -5
- package/esm/cache.js.map +1 -1
- package/esm/index.js +2 -1
- package/esm/index.js.map +1 -1
- package/esm/module.js +8 -3
- package/esm/module.js.map +1 -1
- package/esm/transform/Entrypoint.js +8 -3
- package/esm/transform/Entrypoint.js.map +1 -1
- package/esm/transform/actions/BaseAction.js +2 -1
- package/esm/transform/actions/BaseAction.js.map +1 -1
- package/esm/transform/actions/actionRunner.js +2 -2
- package/esm/transform/actions/actionRunner.js.map +1 -1
- package/esm/transform/actions/types.js.map +1 -1
- package/esm/transform/generators/processEntrypoint.js +5 -1
- package/esm/transform/generators/processEntrypoint.js.map +1 -1
- package/esm/transform/generators/workflow.js +11 -0
- package/esm/transform/generators/workflow.js.map +1 -1
- package/esm/transform/helpers/loadWywOptions.js +1 -0
- package/esm/transform/helpers/loadWywOptions.js.map +1 -1
- package/esm/transform/types.js.map +1 -1
- package/esm/transform.js +45 -23
- package/esm/transform.js.map +1 -1
- package/esm/types.js.map +1 -1
- package/esm/utils/TransformDiagnostics.js +10 -0
- package/esm/utils/TransformDiagnostics.js.map +1 -0
- package/esm/utils/TransformMetadata.js +20 -0
- package/esm/utils/TransformMetadata.js.map +1 -1
- package/esm/utils/collectTemplateDependencies.js +9 -0
- package/esm/utils/collectTemplateDependencies.js.map +1 -1
- package/lib/cache.js +60 -5
- package/lib/cache.js.map +1 -1
- package/lib/index.js +29 -0
- package/lib/index.js.map +1 -1
- package/lib/module.js +10 -5
- package/lib/module.js.map +1 -1
- package/lib/transform/Entrypoint.js +8 -3
- package/lib/transform/Entrypoint.js.map +1 -1
- package/lib/transform/actions/BaseAction.js +2 -1
- package/lib/transform/actions/BaseAction.js.map +1 -1
- package/lib/transform/actions/actionRunner.js +2 -2
- package/lib/transform/actions/actionRunner.js.map +1 -1
- package/lib/transform/actions/types.js.map +1 -1
- package/lib/transform/generators/processEntrypoint.js +5 -1
- package/lib/transform/generators/processEntrypoint.js.map +1 -1
- package/lib/transform/generators/workflow.js +10 -0
- package/lib/transform/generators/workflow.js.map +1 -1
- package/lib/transform/helpers/loadWywOptions.js +1 -0
- package/lib/transform/helpers/loadWywOptions.js.map +1 -1
- package/lib/transform/types.js.map +1 -1
- package/lib/transform.js +45 -23
- package/lib/transform.js.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/utils/TransformDiagnostics.js +20 -0
- package/lib/utils/TransformDiagnostics.js.map +1 -0
- package/lib/utils/TransformMetadata.js +27 -1
- package/lib/utils/TransformMetadata.js.map +1 -1
- package/lib/utils/collectTemplateDependencies.js +9 -0
- package/lib/utils/collectTemplateDependencies.js.map +1 -1
- package/package.json +3 -3
- package/types/cache.d.ts +7 -0
- package/types/cache.js +59 -3
- package/types/index.d.ts +4 -2
- package/types/index.js +6 -1
- package/types/module.js +8 -3
- package/types/plugins/collector.d.ts +4 -1
- package/types/transform/Entrypoint.d.ts +1 -1
- package/types/transform/Entrypoint.js +8 -3
- package/types/transform/actions/BaseAction.d.ts +2 -1
- package/types/transform/actions/BaseAction.js +3 -1
- package/types/transform/actions/actionRunner.js +2 -2
- package/types/transform/actions/types.d.ts +4 -0
- package/types/transform/generators/processEntrypoint.js +4 -1
- package/types/transform/generators/workflow.js +8 -0
- package/types/transform/helpers/loadWywOptions.js +1 -0
- package/types/transform/types.d.ts +1 -0
- package/types/transform.js +47 -23
- package/types/types.d.ts +4 -1
- package/types/utils/TransformDiagnostics.d.ts +9 -0
- package/types/utils/TransformDiagnostics.js +15 -0
- package/types/utils/TransformMetadata.d.ts +22 -4
- package/types/utils/TransformMetadata.js +24 -1
- package/types/utils/collectTemplateDependencies.js +9 -0
package/esm/transform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","names":["isFeatureEnabled","loadWywOptions","TransformCacheCollection","Entrypoint","asyncActionRunner","syncActionRunner","baseHandlers","asyncResolveImports","syncResolveImports","withDefaultServices","memoizedSyncResolve","WeakMap","memoizedAsyncResolve","transformSync","partialServices","originalCode","syncResolve","customHandlers","options","pluginOptions","services","features","filename","cache","entrypoint","createRoot","ignored","code","sourceMap","inputSourceMap","workflowAction","createAction","undefined","has","set","resolveImports","call","result","get","log","name","err","console","error","transform","asyncResolve"],"sources":["../src/transform.ts"],"sourcesContent":["/**\n * This file exposes sync and async transform functions that:\n * - parse the passed code to AST\n * - builds a dependency graph for the file\n * - shakes each dependency and removes unused code\n * - runs generated code in a sandbox\n * - collects artifacts\n * - returns transformed code (without WYW template literals), generated CSS, source maps and babel metadata from transform step.\n */\n\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport type { PartialOptions } from './transform/helpers/loadWywOptions';\nimport { loadWywOptions } from './transform/helpers/loadWywOptions';\nimport { TransformCacheCollection } from './cache';\nimport { Entrypoint } from './transform/Entrypoint';\nimport {\n asyncActionRunner,\n syncActionRunner,\n} from './transform/actions/actionRunner';\nimport { baseHandlers } from './transform/generators';\nimport {\n asyncResolveImports,\n syncResolveImports,\n} from './transform/generators/resolveImports';\nimport { withDefaultServices } from './transform/helpers/withDefaultServices';\nimport type {\n Handler,\n Handlers,\n IResolveImportsAction,\n Services,\n} from './transform/types';\nimport type { Result } from './types';\n\ntype PartialServices = Partial<Omit<Services, 'options'>> & {\n options: Omit<Services['options'], 'pluginOptions'> & {\n pluginOptions?: PartialOptions;\n };\n};\n\ntype AllHandlers<TMode extends 'async' | 'sync'> = Handlers<TMode>;\n\nconst memoizedSyncResolve = new WeakMap<\n (what: string, importer: string, stack: string[]) => string | null,\n Handler<'sync', IResolveImportsAction>\n>();\n\nconst memoizedAsyncResolve = new WeakMap<\n (what: string, importer: string, stack: string[]) => Promise<string | null>,\n Handler<'async' | 'sync', IResolveImportsAction>\n>();\n\nexport function transformSync(\n partialServices: PartialServices,\n originalCode: string,\n syncResolve: (what: string, importer: string, stack: string[]) => string,\n customHandlers: Partial<AllHandlers<'sync'>> = {}\n): Result {\n const { options } = partialServices;\n const pluginOptions = loadWywOptions(options.pluginOptions);\n const services = withDefaultServices({\n ...partialServices,\n options: {\n ...options,\n pluginOptions,\n },\n });\n\n if (\n !isFeatureEnabled(pluginOptions.features, 'globalCache', options.filename)\n ) {\n // If global cache is disabled, we need to create a new cache for each file\n services.cache = new TransformCacheCollection();\n }\n\n const entrypoint = Entrypoint.createRoot(\n services,\n options.filename,\n ['__wywPreval'],\n originalCode\n );\n\n if (entrypoint.ignored) {\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n const workflowAction = entrypoint.createAction('workflow', undefined);\n\n if (!memoizedSyncResolve.has(syncResolve)) {\n memoizedSyncResolve.set(\n syncResolve,\n function resolveImports(this: IResolveImportsAction) {\n return syncResolveImports.call(this, syncResolve);\n }\n );\n }\n\n try {\n const result = syncActionRunner(workflowAction, {\n ...baseHandlers,\n ...customHandlers,\n resolveImports: memoizedSyncResolve.get(syncResolve)!,\n });\n\n entrypoint.log('%s is ready', entrypoint.name);\n\n return result;\n } catch (err) {\n entrypoint.log('Unhandled error %O', err);\n\n if (\n isFeatureEnabled(pluginOptions.features, 'softErrors', options.filename)\n ) {\n // eslint-disable-next-line no-console\n console.error(`Error during transform of ${entrypoint.name}:`, err);\n\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n throw err;\n }\n}\n\nexport async function transform(\n partialServices: PartialServices,\n originalCode: string,\n asyncResolve: (\n what: string,\n importer: string,\n stack: string[]\n ) => Promise<string | null>,\n customHandlers: Partial<AllHandlers<'sync'>> = {}\n): Promise<Result> {\n const { options } = partialServices;\n const pluginOptions = loadWywOptions(options.pluginOptions);\n const services = withDefaultServices({\n ...partialServices,\n options: {\n ...options,\n pluginOptions,\n },\n });\n\n if (\n !isFeatureEnabled(pluginOptions.features, 'globalCache', options.filename)\n ) {\n // If global cache is disabled, we need to create a new cache for each file\n services.cache = new TransformCacheCollection();\n }\n\n /*\n * This method can be run simultaneously for multiple files.\n * A shared cache is accessible for all runs, but each run has its own queue\n * to maintain the correct processing order. The cache stores the outcome\n * of tree-shaking, and if the result is already stored in the cache\n * but the \"only\" option has changed, the file will be re-processed using\n * the combined \"only\" option.\n */\n const entrypoint = Entrypoint.createRoot(\n services,\n options.filename,\n ['__wywPreval'],\n originalCode\n );\n\n if (entrypoint.ignored) {\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n const workflowAction = entrypoint.createAction('workflow', undefined);\n\n if (!memoizedAsyncResolve.has(asyncResolve)) {\n const resolveImports = function resolveImports(\n this: IResolveImportsAction\n ) {\n return asyncResolveImports.call(this, asyncResolve);\n };\n\n memoizedAsyncResolve.set(asyncResolve, resolveImports);\n }\n\n try {\n const result = await asyncActionRunner(workflowAction, {\n ...baseHandlers,\n ...customHandlers,\n resolveImports: memoizedAsyncResolve.get(asyncResolve)!,\n });\n\n entrypoint.log('%s is ready', entrypoint.name);\n\n return result;\n } catch (err) {\n entrypoint.log('Unhandled error %O', err);\n\n if (\n isFeatureEnabled(pluginOptions.features, 'softErrors', options.filename)\n ) {\n // eslint-disable-next-line no-console\n console.error(`Error during transform of ${entrypoint.name}:`, err);\n\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n throw err;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"transform.js","names":["isFeatureEnabled","loadWywOptions","TransformCacheCollection","Entrypoint","asyncActionRunner","syncActionRunner","baseHandlers","asyncResolveImports","syncResolveImports","withDefaultServices","memoizedSyncResolve","WeakMap","memoizedAsyncResolve","EMPTY_CUSTOM_HANDLERS","memoizedActionContexts","getActionContext","resolveImportsHandler","customHandlers","customHandlersKey","Object","keys","length","actionContextsByHandlers","get","set","actionContext","transformSync","partialServices","originalCode","syncResolve","options","pluginOptions","services","features","filename","cache","has","resolveImports","call","actionHandlers","entrypoint","createRoot","ignored","code","sourceMap","inputSourceMap","workflowAction","createAction","undefined","result","log","name","err","console","error","transform","asyncResolve"],"sources":["../src/transform.ts"],"sourcesContent":["/**\n * This file exposes sync and async transform functions that:\n * - parse the passed code to AST\n * - builds a dependency graph for the file\n * - shakes each dependency and removes unused code\n * - runs generated code in a sandbox\n * - collects artifacts\n * - returns transformed code (without WYW template literals), generated CSS, source maps and babel metadata from transform step.\n */\n\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport type { PartialOptions } from './transform/helpers/loadWywOptions';\nimport { loadWywOptions } from './transform/helpers/loadWywOptions';\nimport { TransformCacheCollection } from './cache';\nimport { Entrypoint } from './transform/Entrypoint';\nimport {\n asyncActionRunner,\n syncActionRunner,\n} from './transform/actions/actionRunner';\nimport { baseHandlers } from './transform/generators';\nimport {\n asyncResolveImports,\n syncResolveImports,\n} from './transform/generators/resolveImports';\nimport { withDefaultServices } from './transform/helpers/withDefaultServices';\nimport type {\n Handler,\n Handlers,\n IResolveImportsAction,\n Services,\n} from './transform/types';\nimport type { Result } from './types';\n\ntype PartialServices = Partial<Omit<Services, 'options'>> & {\n options: Omit<Services['options'], 'pluginOptions'> & {\n pluginOptions?: PartialOptions;\n };\n};\n\ntype AllHandlers<TMode extends 'async' | 'sync'> = Handlers<TMode>;\n\nconst memoizedSyncResolve = new WeakMap<\n (what: string, importer: string, stack: string[]) => string | null,\n Handler<'sync', IResolveImportsAction>\n>();\n\nconst memoizedAsyncResolve = new WeakMap<\n (what: string, importer: string, stack: string[]) => Promise<string | null>,\n Handler<'async' | 'sync', IResolveImportsAction>\n>();\n\nconst EMPTY_CUSTOM_HANDLERS = {};\nconst memoizedActionContexts = new WeakMap<object, WeakMap<object, object>>();\n\nconst getActionContext = (\n resolveImportsHandler: object,\n customHandlers: object\n): object => {\n const customHandlersKey =\n Object.keys(customHandlers).length === 0\n ? EMPTY_CUSTOM_HANDLERS\n : customHandlers;\n let actionContextsByHandlers = memoizedActionContexts.get(\n resolveImportsHandler\n );\n if (!actionContextsByHandlers) {\n actionContextsByHandlers = new WeakMap();\n memoizedActionContexts.set(resolveImportsHandler, actionContextsByHandlers);\n }\n\n let actionContext = actionContextsByHandlers.get(customHandlersKey);\n if (!actionContext) {\n actionContext = {};\n actionContextsByHandlers.set(customHandlersKey, actionContext);\n }\n\n return actionContext;\n};\n\nexport function transformSync(\n partialServices: PartialServices,\n originalCode: string,\n syncResolve: (what: string, importer: string, stack: string[]) => string,\n customHandlers: Partial<AllHandlers<'sync'>> = {}\n): Result {\n const { options } = partialServices;\n const pluginOptions = loadWywOptions(options.pluginOptions);\n const services = withDefaultServices({\n ...partialServices,\n options: {\n ...options,\n pluginOptions,\n },\n });\n\n if (\n !isFeatureEnabled(pluginOptions.features, 'globalCache', options.filename)\n ) {\n // If global cache is disabled, we need to create a new cache for each file\n services.cache = new TransformCacheCollection();\n }\n\n if (!memoizedSyncResolve.has(syncResolve)) {\n memoizedSyncResolve.set(\n syncResolve,\n function resolveImports(this: IResolveImportsAction) {\n return syncResolveImports.call(this, syncResolve);\n }\n );\n }\n\n const resolveImportsHandler = memoizedSyncResolve.get(syncResolve)!;\n const actionHandlers = {\n ...baseHandlers,\n ...customHandlers,\n resolveImports: resolveImportsHandler,\n };\n const actionContext = getActionContext(resolveImportsHandler, customHandlers);\n\n const entrypoint = Entrypoint.createRoot(\n services,\n options.filename,\n ['__wywPreval'],\n originalCode\n );\n\n if (entrypoint.ignored) {\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n const workflowAction = entrypoint.createAction(\n 'workflow',\n undefined,\n null,\n actionContext\n );\n\n try {\n const result = syncActionRunner(workflowAction, actionHandlers);\n\n entrypoint.log('%s is ready', entrypoint.name);\n\n return result;\n } catch (err) {\n entrypoint.log('Unhandled error %O', err);\n\n if (\n isFeatureEnabled(pluginOptions.features, 'softErrors', options.filename)\n ) {\n // eslint-disable-next-line no-console\n console.error(`Error during transform of ${entrypoint.name}:`, err);\n\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n throw err;\n }\n}\n\nexport async function transform(\n partialServices: PartialServices,\n originalCode: string,\n asyncResolve: (\n what: string,\n importer: string,\n stack: string[]\n ) => Promise<string | null>,\n customHandlers: Partial<AllHandlers<'sync'>> = {}\n): Promise<Result> {\n const { options } = partialServices;\n const pluginOptions = loadWywOptions(options.pluginOptions);\n const services = withDefaultServices({\n ...partialServices,\n options: {\n ...options,\n pluginOptions,\n },\n });\n\n if (\n !isFeatureEnabled(pluginOptions.features, 'globalCache', options.filename)\n ) {\n // If global cache is disabled, we need to create a new cache for each file\n services.cache = new TransformCacheCollection();\n }\n\n /*\n * This method can be run simultaneously for multiple files.\n * A shared cache is accessible for all runs, but each run has its own queue\n * to maintain the correct processing order. The cache stores the outcome\n * of tree-shaking, and if the result is already stored in the cache\n * but the \"only\" option has changed, the file will be re-processed using\n * the combined \"only\" option.\n */\n if (!memoizedAsyncResolve.has(asyncResolve)) {\n const resolveImports = function resolveImports(\n this: IResolveImportsAction\n ) {\n return asyncResolveImports.call(this, asyncResolve);\n };\n\n memoizedAsyncResolve.set(asyncResolve, resolveImports);\n }\n\n const resolveImportsHandler = memoizedAsyncResolve.get(asyncResolve)!;\n const actionHandlers = {\n ...baseHandlers,\n ...customHandlers,\n resolveImports: resolveImportsHandler,\n };\n const actionContext = getActionContext(resolveImportsHandler, customHandlers);\n\n const entrypoint = Entrypoint.createRoot(\n services,\n options.filename,\n ['__wywPreval'],\n originalCode\n );\n\n if (entrypoint.ignored) {\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n const workflowAction = entrypoint.createAction(\n 'workflow',\n undefined,\n null,\n actionContext\n );\n\n try {\n const result = await asyncActionRunner(workflowAction, actionHandlers);\n\n entrypoint.log('%s is ready', entrypoint.name);\n\n return result;\n } catch (err) {\n entrypoint.log('Unhandled error %O', err);\n\n if (\n isFeatureEnabled(pluginOptions.features, 'softErrors', options.filename)\n ) {\n // eslint-disable-next-line no-console\n console.error(`Error during transform of ${entrypoint.name}:`, err);\n\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n throw err;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/esm/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { BabelFile, PluginPass } from '@babel/core';\nimport type { NodePath } from '@babel/traverse';\nimport type { File, Program } from '@babel/types';\nimport type { RawSourceMap } from 'source-map';\n\nimport type { BaseProcessor } from '@wyw-in-js/processor-utils';\nimport type {\n Debugger,\n Replacement,\n Rules,\n StrictOptions,\n} from '@wyw-in-js/shared';\n\nimport type {
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { BabelFile, PluginPass } from '@babel/core';\nimport type { NodePath } from '@babel/traverse';\nimport type { File, Program } from '@babel/types';\nimport type { RawSourceMap } from 'source-map';\n\nimport type { BaseProcessor } from '@wyw-in-js/processor-utils';\nimport type {\n Debugger,\n Replacement,\n Rules,\n StrictOptions,\n} from '@wyw-in-js/shared';\n\nimport type {\n WYWTransformMetadata,\n WYWTransformResultMetadata,\n} from './utils/TransformMetadata';\nimport type { WYWTransformDiagnostic } from './utils/TransformDiagnostics';\n\nexport type PluginOptions = StrictOptions & {\n configFile?: string | false;\n stage?: Stage;\n};\n\nexport type ParentEntrypoint = {\n evaluated: boolean;\n log: Debugger;\n name: string;\n parents: ParentEntrypoint[];\n seqId: number;\n};\n\nexport type Dependencies = string[];\n\nexport interface IPluginState extends PluginPass {\n dependencies: Dependencies;\n file: BabelFile & {\n metadata: {\n wywInJS?: WYWTransformMetadata;\n };\n };\n processors: BaseProcessor[];\n}\n\nexport interface ITransformFileResult {\n code: string;\n metadata: WYWTransformMetadata | null;\n}\n\nexport type Stage = 'preeval' | 'collect';\n\nexport type Result = {\n code: string;\n cssSourceMapText?: string;\n cssText?: string;\n dependencies?: string[];\n diagnostics?: WYWTransformDiagnostic[];\n metadata?: WYWTransformResultMetadata;\n replacements?: Replacement[];\n rules?: Rules;\n sourceMap?: RawSourceMap | null;\n};\n\nexport type Options = {\n filename: string;\n inputSourceMap?: RawSourceMap;\n keepComments?: boolean | RegExp;\n outputFilename?: string;\n pluginOptions?: Partial<PluginOptions>;\n prefixer?: boolean;\n preprocessor?: Preprocessor;\n root?: string;\n};\n\nexport type PreprocessorFn = (selector: string, cssText: string) => string;\nexport type Preprocessor = 'none' | 'stylis' | PreprocessorFn | void;\n\nexport type MissedBabelCoreTypes = {\n File: new (\n options: { filename: string },\n file: { ast: File; code: string }\n ) => { path: NodePath<Program> };\n};\n\nexport type JSONValue =\n | null\n | string\n | number\n | boolean\n | JSONObject\n | JSONArray;\n\nexport interface JSONObject {\n [x: string]: JSONValue;\n}\n\nexport type JSONArray = Array<JSONValue>;\n\nexport type Serializable = JSONValue;\n\n/**\n * CSS-related types\n */\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { isProcessorDiagnosticArtifact } from '@wyw-in-js/processor-utils';
|
|
2
|
+
export const collectTransformDiagnostics = (filename, processors) => processors.flatMap(processor => processor.artifacts.filter(isProcessorDiagnosticArtifact).map(([, diagnostic]) => ({
|
|
3
|
+
...diagnostic,
|
|
4
|
+
className: processor.className,
|
|
5
|
+
displayName: processor.displayName,
|
|
6
|
+
end: diagnostic.end ?? null,
|
|
7
|
+
filename,
|
|
8
|
+
start: diagnostic.start ?? null
|
|
9
|
+
})));
|
|
10
|
+
//# sourceMappingURL=TransformDiagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransformDiagnostics.js","names":["isProcessorDiagnosticArtifact","collectTransformDiagnostics","filename","processors","flatMap","processor","artifacts","filter","map","diagnostic","className","displayName","end","start"],"sources":["../../src/utils/TransformDiagnostics.ts"],"sourcesContent":["import type {\n BaseProcessor,\n ProcessorDiagnostic,\n} from '@wyw-in-js/processor-utils';\nimport { isProcessorDiagnosticArtifact } from '@wyw-in-js/processor-utils';\n\ntype DiagnosticProcessor = Pick<\n BaseProcessor,\n 'artifacts' | 'className' | 'displayName'\n>;\n\nexport type WYWTransformDiagnostic = ProcessorDiagnostic & {\n className: string;\n displayName: string;\n filename: string;\n};\n\nexport const collectTransformDiagnostics = (\n filename: string,\n processors: DiagnosticProcessor[]\n): WYWTransformDiagnostic[] =>\n processors.flatMap((processor) =>\n processor.artifacts\n .filter(isProcessorDiagnosticArtifact)\n .map(([, diagnostic]) => ({\n ...diagnostic,\n className: processor.className,\n displayName: processor.displayName,\n end: diagnostic.end ?? null,\n filename,\n start: diagnostic.start ?? null,\n }))\n );\n"],"mappings":"AAIA,SAASA,6BAA6B,QAAQ,4BAA4B;AAa1E,OAAO,MAAMC,2BAA2B,GAAGA,CACzCC,QAAgB,EAChBC,UAAiC,KAEjCA,UAAU,CAACC,OAAO,CAAEC,SAAS,IAC3BA,SAAS,CAACC,SAAS,CAChBC,MAAM,CAACP,6BAA6B,CAAC,CACrCQ,GAAG,CAAC,CAAC,GAAGC,UAAU,CAAC,MAAM;EACxB,GAAGA,UAAU;EACbC,SAAS,EAAEL,SAAS,CAACK,SAAS;EAC9BC,WAAW,EAAEN,SAAS,CAACM,WAAW;EAClCC,GAAG,EAAEH,UAAU,CAACG,GAAG,IAAI,IAAI;EAC3BV,QAAQ;EACRW,KAAK,EAAEJ,UAAU,CAACI,KAAK,IAAI;AAC7B,CAAC,CAAC,CACN,CAAC","ignoreList":[]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isProcessorDiagnosticArtifact } from '@wyw-in-js/processor-utils';
|
|
1
2
|
export const withTransformMetadata = value => typeof value === 'object' && value !== null && typeof value.wywInJS === 'object';
|
|
2
3
|
export const getTransformMetadata = value => {
|
|
3
4
|
if (withTransformMetadata(value) && value.wywInJS !== null) {
|
|
@@ -8,4 +9,23 @@ export const getTransformMetadata = value => {
|
|
|
8
9
|
}
|
|
9
10
|
return undefined;
|
|
10
11
|
};
|
|
12
|
+
export const toTransformResultMetadata = (metadata, dependencies) => ({
|
|
13
|
+
dependencies,
|
|
14
|
+
processors: metadata.processors.map(processor => ({
|
|
15
|
+
artifacts: processor.artifacts.filter(artifact => !isProcessorDiagnosticArtifact(artifact)).map(([type, data]) => [type, data]),
|
|
16
|
+
className: processor.className,
|
|
17
|
+
displayName: processor.displayName,
|
|
18
|
+
start: processor.location?.start ?? null
|
|
19
|
+
})),
|
|
20
|
+
replacements: [...metadata.replacements],
|
|
21
|
+
rules: {
|
|
22
|
+
...metadata.rules
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
export const createTransformManifest = (metadata, context) => ({
|
|
26
|
+
...metadata,
|
|
27
|
+
...context,
|
|
28
|
+
version: 1
|
|
29
|
+
});
|
|
30
|
+
export const stringifyTransformManifest = manifest => `${JSON.stringify(manifest, null, 2)}\n`;
|
|
11
31
|
//# sourceMappingURL=TransformMetadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransformMetadata.js","names":["withTransformMetadata","value","wywInJS","getTransformMetadata","metadata","undefined"],"sources":["../../src/utils/TransformMetadata.ts"],"sourcesContent":["import type { Artifact, Replacement, Rules } from '@wyw-in-js/shared';\n\nexport type WYWTransformMetadata = {\n dependencies: string[];\n processors: {
|
|
1
|
+
{"version":3,"file":"TransformMetadata.js","names":["isProcessorDiagnosticArtifact","withTransformMetadata","value","wywInJS","getTransformMetadata","metadata","undefined","toTransformResultMetadata","dependencies","processors","map","processor","artifacts","filter","artifact","type","data","className","displayName","start","location","replacements","rules","createTransformManifest","context","version","stringifyTransformManifest","manifest","JSON","stringify"],"sources":["../../src/utils/TransformMetadata.ts"],"sourcesContent":["import type { BaseProcessor } from '@wyw-in-js/processor-utils';\nimport { isProcessorDiagnosticArtifact } from '@wyw-in-js/processor-utils';\nimport type { Artifact, Location, Replacement, Rules } from '@wyw-in-js/shared';\n\ntype TransformMetadataProcessor = Pick<\n BaseProcessor,\n 'artifacts' | 'className' | 'displayName' | 'location'\n>;\n\nexport type WYWTransformMetadata = {\n dependencies: string[];\n processors: TransformMetadataProcessor[];\n replacements: Replacement[];\n rules: Rules;\n};\n\nexport type WYWTransformProcessorMetadata = {\n artifacts: Artifact[];\n className: string;\n displayName: string;\n start: Location | null | undefined;\n};\n\nexport type WYWTransformResultMetadata = Omit<\n WYWTransformMetadata,\n 'processors'\n> & {\n processors: WYWTransformProcessorMetadata[];\n};\n\nexport type WYWTransformManifest = WYWTransformResultMetadata & {\n cssFile?: string;\n source: string;\n version: 1;\n};\n\nexport const withTransformMetadata = (\n value: unknown\n): value is { wywInJS: WYWTransformMetadata } =>\n typeof value === 'object' &&\n value !== null &&\n typeof (value as { wywInJS: unknown }).wywInJS === 'object';\n\nexport const getTransformMetadata = (\n value: unknown\n): WYWTransformMetadata | undefined => {\n if (withTransformMetadata(value) && value.wywInJS !== null) {\n const metadata = value.wywInJS;\n // eslint-disable-next-line no-param-reassign\n delete (value as { wywInJS: unknown }).wywInJS;\n return metadata;\n }\n\n return undefined;\n};\n\nexport const toTransformResultMetadata = (\n metadata: WYWTransformMetadata,\n dependencies: string[]\n): WYWTransformResultMetadata => ({\n dependencies,\n processors: metadata.processors.map((processor) => ({\n artifacts: processor.artifacts\n .filter((artifact) => !isProcessorDiagnosticArtifact(artifact))\n .map(([type, data]) => [type, data] as Artifact),\n className: processor.className,\n displayName: processor.displayName,\n start: processor.location?.start ?? null,\n })),\n replacements: [...metadata.replacements],\n rules: { ...metadata.rules },\n});\n\nexport const createTransformManifest = (\n metadata: WYWTransformResultMetadata,\n context: Pick<WYWTransformManifest, 'cssFile' | 'source'>\n): WYWTransformManifest => ({\n ...metadata,\n ...context,\n version: 1,\n});\n\nexport const stringifyTransformManifest = (\n manifest: WYWTransformManifest\n): string => `${JSON.stringify(manifest, null, 2)}\\n`;\n"],"mappings":"AACA,SAASA,6BAA6B,QAAQ,4BAA4B;AAmC1E,OAAO,MAAMC,qBAAqB,GAChCC,KAAc,IAEd,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,KAAK,IAAI,IACd,OAAQA,KAAK,CAA0BC,OAAO,KAAK,QAAQ;AAE7D,OAAO,MAAMC,oBAAoB,GAC/BF,KAAc,IACuB;EACrC,IAAID,qBAAqB,CAACC,KAAK,CAAC,IAAIA,KAAK,CAACC,OAAO,KAAK,IAAI,EAAE;IAC1D,MAAME,QAAQ,GAAGH,KAAK,CAACC,OAAO;IAC9B;IACA,OAAQD,KAAK,CAA0BC,OAAO;IAC9C,OAAOE,QAAQ;EACjB;EAEA,OAAOC,SAAS;AAClB,CAAC;AAED,OAAO,MAAMC,yBAAyB,GAAGA,CACvCF,QAA8B,EAC9BG,YAAsB,MACU;EAChCA,YAAY;EACZC,UAAU,EAAEJ,QAAQ,CAACI,UAAU,CAACC,GAAG,CAAEC,SAAS,KAAM;IAClDC,SAAS,EAAED,SAAS,CAACC,SAAS,CAC3BC,MAAM,CAAEC,QAAQ,IAAK,CAACd,6BAA6B,CAACc,QAAQ,CAAC,CAAC,CAC9DJ,GAAG,CAAC,CAAC,CAACK,IAAI,EAAEC,IAAI,CAAC,KAAK,CAACD,IAAI,EAAEC,IAAI,CAAa,CAAC;IAClDC,SAAS,EAAEN,SAAS,CAACM,SAAS;IAC9BC,WAAW,EAAEP,SAAS,CAACO,WAAW;IAClCC,KAAK,EAAER,SAAS,CAACS,QAAQ,EAAED,KAAK,IAAI;EACtC,CAAC,CAAC,CAAC;EACHE,YAAY,EAAE,CAAC,GAAGhB,QAAQ,CAACgB,YAAY,CAAC;EACxCC,KAAK,EAAE;IAAE,GAAGjB,QAAQ,CAACiB;EAAM;AAC7B,CAAC,CAAC;AAEF,OAAO,MAAMC,uBAAuB,GAAGA,CACrClB,QAAoC,EACpCmB,OAAyD,MAC/B;EAC1B,GAAGnB,QAAQ;EACX,GAAGmB,OAAO;EACVC,OAAO,EAAE;AACX,CAAC,CAAC;AAEF,OAAO,MAAMC,0BAA0B,GACrCC,QAA8B,IACnB,GAAGC,IAAI,CAACC,SAAS,CAACF,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI","ignoreList":[]}
|
|
@@ -15,6 +15,15 @@ import { mutate, referenceAll } from './scopeHelpers';
|
|
|
15
15
|
import { valueToLiteral } from './valueToLiteral';
|
|
16
16
|
function staticEval(ex, evaluate = false) {
|
|
17
17
|
if (!evaluate) return undefined;
|
|
18
|
+
if (ex.isIdentifier()) {
|
|
19
|
+
const binding = ex.scope.getBinding(ex.node.name);
|
|
20
|
+
|
|
21
|
+
// Babel may "evaluate" a destructured binding to its source container
|
|
22
|
+
// object/array instead of the bound value, which changes template semantics.
|
|
23
|
+
if (binding?.path.isVariableDeclarator() && !binding.path.get('id').isIdentifier()) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
18
27
|
const result = ex.evaluate();
|
|
19
28
|
if (result.confident && !hasEvalMeta(result.value)) {
|
|
20
29
|
return [result.value];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collectTemplateDependencies.js","names":["statement","cloneNode","hasEvalMeta","ValueType","logger","createId","findIdentifiers","getSource","mutate","referenceAll","valueToLiteral","staticEval","ex","evaluate","undefined","result","confident","value","expressionDeclarationTpl","preserveComments","unsupported","reason","buildCodeFrameError","isIdentifier","getUidInRootScope","path","name","node","rootScope","scope","getProgramParent","hasBinding","generateUid","hoistVariableDeclarator","parent","referencedIdentifiers","forEach","identifier","hoistIdentifier","bindingIdentifiers","newName","rename","statementInRoot","findParent","p","parentPath","isProgram","declaration","type","kind","declarations","inserted","insertBefore","registerDeclaration","idPath","isReferenced","binding","getBinding","includes","bindingPath","isVariableDeclarator","extractExpression","imports","isLiteral","CONST","loc","isFunction","isFunctionExpression","isArrowFunctionExpression","expUid","evaluated","id","evaluatedId","replaceWith","FUNCTION","LAZY","expId","expression","importedFrom","findImportSourceOfIdentifier","exBindingIdentifier","exImport","find","i","local","push","source","traverse","Identifier","callee","arguments","debug","extend","collectTemplateDependencies","quasi","get","quasis","expressions","length","expressionValues","map","bind","isExpression","extracted"],"sources":["../../src/utils/collectTemplateDependencies.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n\n/**\n * This file is a visitor that checks TaggedTemplateExpressions and look for WYW template literals.\n * For each template it makes a list of dependencies, try to evaluate expressions, and if it is not possible, mark them as lazy dependencies.\n */\n\nimport { statement } from '@babel/template';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n Expression,\n Identifier,\n JSXIdentifier,\n Statement,\n TaggedTemplateExpression,\n TemplateElement,\n TSType,\n VariableDeclaration,\n VariableDeclarator,\n} from '@babel/types';\nimport { cloneNode } from '@babel/types';\n\nimport type {\n ConstValue,\n ExpressionValue,\n FunctionValue,\n LazyValue,\n} from '@wyw-in-js/shared';\nimport { hasEvalMeta, ValueType, logger } from '@wyw-in-js/shared';\n\nimport type { IImport } from './collectExportsAndImports';\nimport { createId } from './createId';\nimport { findIdentifiers } from './findIdentifiers';\nimport { getSource } from './getSource';\nimport { mutate, referenceAll } from './scopeHelpers';\nimport { valueToLiteral } from './valueToLiteral';\n\nfunction staticEval(\n ex: NodePath<Expression>,\n evaluate = false\n): [unknown] | undefined {\n if (!evaluate) return undefined;\n\n const result = ex.evaluate();\n if (result.confident && !hasEvalMeta(result.value)) {\n return [result.value];\n }\n\n return undefined;\n}\n\nconst expressionDeclarationTpl = statement(\n 'const %%expId%% = () => %%expression%%',\n {\n preserveComments: true,\n }\n);\n\nconst unsupported = (ex: NodePath, reason?: string): Error =>\n ex.buildCodeFrameError(\n `This ${\n ex.isIdentifier() ? 'identifier' : 'expression'\n } cannot be used in the template${reason ? `, because it ${reason}` : ''}.`\n );\n\nfunction getUidInRootScope(path: NodePath<Identifier | JSXIdentifier>): string {\n const { name } = path.node;\n const rootScope = path.scope.getProgramParent();\n if (rootScope.hasBinding(name)) {\n return rootScope.generateUid(name);\n }\n\n return name;\n}\n\nfunction hoistVariableDeclarator(ex: NodePath<VariableDeclarator>) {\n if (!ex.scope.parent) {\n // It is already in the root scope\n return;\n }\n\n const referencedIdentifiers = findIdentifiers([ex], 'reference');\n referencedIdentifiers.forEach((identifier) => {\n if (identifier.isIdentifier()) {\n hoistIdentifier(identifier);\n }\n });\n\n const bindingIdentifiers = findIdentifiers([ex], 'declaration');\n\n bindingIdentifiers.forEach((path) => {\n const newName = getUidInRootScope(path);\n if (newName !== path.node.name) {\n path.scope.rename(path.node.name, newName);\n }\n });\n\n const rootScope = ex.scope.getProgramParent();\n\n const statementInRoot = ex.findParent(\n (p) => p.parentPath?.isProgram() === true\n ) as NodePath<Statement>;\n\n const declaration: VariableDeclaration = {\n type: 'VariableDeclaration',\n kind: 'let',\n declarations: [cloneNode(ex.node)],\n };\n\n const [inserted] = statementInRoot.insertBefore(declaration);\n referenceAll(inserted);\n rootScope.registerDeclaration(inserted);\n}\n\nfunction hoistIdentifier(idPath: NodePath<Identifier>): void {\n if (!idPath.isReferenced()) {\n throw unsupported(idPath);\n }\n\n const binding = idPath.scope.getBinding(idPath.node.name);\n if (!binding) {\n // It's something strange\n throw unsupported(idPath, 'is undefined');\n }\n\n if (binding.kind === 'module') {\n // Modules are global by default\n return;\n }\n\n if (!['var', 'let', 'const', 'hoisted'].includes(binding.kind)) {\n // This is not a variable, we can't hoist it\n throw unsupported(binding.path, 'is a function parameter');\n }\n\n const { scope, path: bindingPath } = binding;\n // parent here can be null or undefined in different versions of babel\n if (!scope.parent) {\n // The variable is already in the root scope\n return;\n }\n\n if (bindingPath.isVariableDeclarator()) {\n hoistVariableDeclarator(bindingPath);\n\n return;\n }\n\n throw unsupported(idPath);\n}\n\n/**\n * Only an expression that can be evaluated in the root scope can be\n * used in a WYW template. This function tries to hoist the expression.\n * @param ex The expression to hoist.\n * @param evaluate If true, we try to statically evaluate the expression.\n * @param imports All the imports of the file.\n */\nexport function extractExpression(\n ex: NodePath<Expression>,\n evaluate = false,\n imports: IImport[] = []\n): Omit<ExpressionValue, 'buildCodeFrameError' | 'source'> {\n if (\n ex.isLiteral() &&\n ('value' in ex.node || ex.node.type === 'NullLiteral')\n ) {\n return {\n ex: ex.node,\n kind: ValueType.CONST,\n value: ex.node.type === 'NullLiteral' ? null : ex.node.value,\n } as Omit<ConstValue, 'buildCodeFrameError' | 'source'>;\n }\n\n const { loc } = ex.node;\n\n const rootScope = ex.scope.getProgramParent();\n const statementInRoot = ex.findParent(\n (p) => p.parentPath?.isProgram() === true\n ) as NodePath<Statement>;\n\n const isFunction =\n ex.isFunctionExpression() || ex.isArrowFunctionExpression();\n\n // Generate next _expN name\n const expUid = rootScope.generateUid('exp');\n\n const evaluated = staticEval(ex, evaluate);\n\n if (!evaluated) {\n // If expression is not statically evaluable,\n // we need to hoist all its referenced identifiers\n\n // Collect all referenced identifiers\n findIdentifiers([ex], 'reference').forEach((id) => {\n if (!id.isIdentifier()) return;\n\n // Try to evaluate and inline them…\n const evaluatedId = staticEval(id, evaluate);\n if (evaluatedId) {\n mutate(id, (p) => {\n p.replaceWith(valueToLiteral(evaluatedId[0], ex));\n });\n } else {\n // … or hoist them to the root scope\n hoistIdentifier(id);\n }\n });\n }\n\n const kind = isFunction ? ValueType.FUNCTION : ValueType.LAZY;\n\n // Declare _expN const with the lazy expression\n const declaration = expressionDeclarationTpl({\n expId: createId(expUid),\n expression: evaluated\n ? valueToLiteral(evaluated[0], ex)\n : cloneNode(ex.node),\n }) as VariableDeclaration;\n\n // Insert the declaration as close as possible to the original expression\n const [inserted] = statementInRoot.insertBefore(declaration);\n referenceAll(inserted);\n rootScope.registerDeclaration(inserted);\n\n const importedFrom: string[] = [];\n function findImportSourceOfIdentifier(idPath: NodePath<Identifier>) {\n const exBindingIdentifier = idPath.scope.getBinding(idPath.node.name)\n ?.identifier;\n const exImport =\n imports.find((i) => i.local.node === exBindingIdentifier) ?? null;\n if (exImport) {\n importedFrom.push(exImport.source);\n }\n }\n\n if (ex.isIdentifier()) {\n findImportSourceOfIdentifier(ex);\n } else {\n ex.traverse({\n Identifier: findImportSourceOfIdentifier,\n });\n }\n\n // Replace the expression with the _expN() call\n mutate(ex, (p) => {\n p.replaceWith({\n type: 'CallExpression',\n callee: createId(expUid),\n arguments: [],\n });\n });\n\n // eslint-disable-next-line no-param-reassign\n ex.node.loc = loc;\n\n // noinspection UnnecessaryLocalVariableJS\n const result: Omit<\n LazyValue | FunctionValue,\n 'buildCodeFrameError' | 'source'\n > = {\n kind,\n ex: createId(expUid, loc),\n importedFrom,\n };\n\n return result;\n}\n\nconst debug = logger.extend('template-parse:identify-expressions');\n\n/**\n * Collects, hoists, and makes lazy all expressions in the given template\n * If evaluate is true, it will try to evaluate the expressions\n */\nexport function collectTemplateDependencies(\n path: NodePath<TaggedTemplateExpression>,\n evaluate = false\n): [quasis: TemplateElement[], expressionValues: ExpressionValue[]] {\n const quasi = path.get('quasi');\n const quasis = quasi.get('quasis');\n const expressions = quasi.get('expressions');\n\n debug('Found: %s', expressions.length);\n\n const expressionValues: ExpressionValue[] = expressions.map(\n (ex: NodePath<Expression | TSType>): ExpressionValue => {\n const buildCodeFrameError = ex.buildCodeFrameError.bind(ex);\n const source = getSource(ex);\n\n if (!ex.isExpression()) {\n throw buildCodeFrameError(\n `The expression '${source}' is not supported.`\n );\n }\n\n const extracted = extractExpression(ex, evaluate);\n\n return {\n ...extracted,\n source,\n buildCodeFrameError,\n } as ExpressionValue;\n }\n );\n\n return [quasis.map((p) => p.node), expressionValues];\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"collectTemplateDependencies.js","names":["statement","cloneNode","hasEvalMeta","ValueType","logger","createId","findIdentifiers","getSource","mutate","referenceAll","valueToLiteral","staticEval","ex","evaluate","undefined","isIdentifier","binding","scope","getBinding","node","name","path","isVariableDeclarator","get","result","confident","value","expressionDeclarationTpl","preserveComments","unsupported","reason","buildCodeFrameError","getUidInRootScope","rootScope","getProgramParent","hasBinding","generateUid","hoistVariableDeclarator","parent","referencedIdentifiers","forEach","identifier","hoistIdentifier","bindingIdentifiers","newName","rename","statementInRoot","findParent","p","parentPath","isProgram","declaration","type","kind","declarations","inserted","insertBefore","registerDeclaration","idPath","isReferenced","includes","bindingPath","extractExpression","imports","isLiteral","CONST","loc","isFunction","isFunctionExpression","isArrowFunctionExpression","expUid","evaluated","id","evaluatedId","replaceWith","FUNCTION","LAZY","expId","expression","importedFrom","findImportSourceOfIdentifier","exBindingIdentifier","exImport","find","i","local","push","source","traverse","Identifier","callee","arguments","debug","extend","collectTemplateDependencies","quasi","quasis","expressions","length","expressionValues","map","bind","isExpression","extracted"],"sources":["../../src/utils/collectTemplateDependencies.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n\n/**\n * This file is a visitor that checks TaggedTemplateExpressions and look for WYW template literals.\n * For each template it makes a list of dependencies, try to evaluate expressions, and if it is not possible, mark them as lazy dependencies.\n */\n\nimport { statement } from '@babel/template';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n Expression,\n Identifier,\n JSXIdentifier,\n Statement,\n TaggedTemplateExpression,\n TemplateElement,\n TSType,\n VariableDeclaration,\n VariableDeclarator,\n} from '@babel/types';\nimport { cloneNode } from '@babel/types';\n\nimport type {\n ConstValue,\n ExpressionValue,\n FunctionValue,\n LazyValue,\n} from '@wyw-in-js/shared';\nimport { hasEvalMeta, ValueType, logger } from '@wyw-in-js/shared';\n\nimport type { IImport } from './collectExportsAndImports';\nimport { createId } from './createId';\nimport { findIdentifiers } from './findIdentifiers';\nimport { getSource } from './getSource';\nimport { mutate, referenceAll } from './scopeHelpers';\nimport { valueToLiteral } from './valueToLiteral';\n\nfunction staticEval(\n ex: NodePath<Expression>,\n evaluate = false\n): [unknown] | undefined {\n if (!evaluate) return undefined;\n\n if (ex.isIdentifier()) {\n const binding = ex.scope.getBinding(ex.node.name);\n\n // Babel may \"evaluate\" a destructured binding to its source container\n // object/array instead of the bound value, which changes template semantics.\n if (\n binding?.path.isVariableDeclarator() &&\n !binding.path.get('id').isIdentifier()\n ) {\n return undefined;\n }\n }\n\n const result = ex.evaluate();\n if (result.confident && !hasEvalMeta(result.value)) {\n return [result.value];\n }\n\n return undefined;\n}\n\nconst expressionDeclarationTpl = statement(\n 'const %%expId%% = () => %%expression%%',\n {\n preserveComments: true,\n }\n);\n\nconst unsupported = (ex: NodePath, reason?: string): Error =>\n ex.buildCodeFrameError(\n `This ${\n ex.isIdentifier() ? 'identifier' : 'expression'\n } cannot be used in the template${reason ? `, because it ${reason}` : ''}.`\n );\n\nfunction getUidInRootScope(path: NodePath<Identifier | JSXIdentifier>): string {\n const { name } = path.node;\n const rootScope = path.scope.getProgramParent();\n if (rootScope.hasBinding(name)) {\n return rootScope.generateUid(name);\n }\n\n return name;\n}\n\nfunction hoistVariableDeclarator(ex: NodePath<VariableDeclarator>) {\n if (!ex.scope.parent) {\n // It is already in the root scope\n return;\n }\n\n const referencedIdentifiers = findIdentifiers([ex], 'reference');\n referencedIdentifiers.forEach((identifier) => {\n if (identifier.isIdentifier()) {\n hoistIdentifier(identifier);\n }\n });\n\n const bindingIdentifiers = findIdentifiers([ex], 'declaration');\n\n bindingIdentifiers.forEach((path) => {\n const newName = getUidInRootScope(path);\n if (newName !== path.node.name) {\n path.scope.rename(path.node.name, newName);\n }\n });\n\n const rootScope = ex.scope.getProgramParent();\n\n const statementInRoot = ex.findParent(\n (p) => p.parentPath?.isProgram() === true\n ) as NodePath<Statement>;\n\n const declaration: VariableDeclaration = {\n type: 'VariableDeclaration',\n kind: 'let',\n declarations: [cloneNode(ex.node)],\n };\n\n const [inserted] = statementInRoot.insertBefore(declaration);\n referenceAll(inserted);\n rootScope.registerDeclaration(inserted);\n}\n\nfunction hoistIdentifier(idPath: NodePath<Identifier>): void {\n if (!idPath.isReferenced()) {\n throw unsupported(idPath);\n }\n\n const binding = idPath.scope.getBinding(idPath.node.name);\n if (!binding) {\n // It's something strange\n throw unsupported(idPath, 'is undefined');\n }\n\n if (binding.kind === 'module') {\n // Modules are global by default\n return;\n }\n\n if (!['var', 'let', 'const', 'hoisted'].includes(binding.kind)) {\n // This is not a variable, we can't hoist it\n throw unsupported(binding.path, 'is a function parameter');\n }\n\n const { scope, path: bindingPath } = binding;\n // parent here can be null or undefined in different versions of babel\n if (!scope.parent) {\n // The variable is already in the root scope\n return;\n }\n\n if (bindingPath.isVariableDeclarator()) {\n hoistVariableDeclarator(bindingPath);\n\n return;\n }\n\n throw unsupported(idPath);\n}\n\n/**\n * Only an expression that can be evaluated in the root scope can be\n * used in a WYW template. This function tries to hoist the expression.\n * @param ex The expression to hoist.\n * @param evaluate If true, we try to statically evaluate the expression.\n * @param imports All the imports of the file.\n */\nexport function extractExpression(\n ex: NodePath<Expression>,\n evaluate = false,\n imports: IImport[] = []\n): Omit<ExpressionValue, 'buildCodeFrameError' | 'source'> {\n if (\n ex.isLiteral() &&\n ('value' in ex.node || ex.node.type === 'NullLiteral')\n ) {\n return {\n ex: ex.node,\n kind: ValueType.CONST,\n value: ex.node.type === 'NullLiteral' ? null : ex.node.value,\n } as Omit<ConstValue, 'buildCodeFrameError' | 'source'>;\n }\n\n const { loc } = ex.node;\n\n const rootScope = ex.scope.getProgramParent();\n const statementInRoot = ex.findParent(\n (p) => p.parentPath?.isProgram() === true\n ) as NodePath<Statement>;\n\n const isFunction =\n ex.isFunctionExpression() || ex.isArrowFunctionExpression();\n\n // Generate next _expN name\n const expUid = rootScope.generateUid('exp');\n\n const evaluated = staticEval(ex, evaluate);\n\n if (!evaluated) {\n // If expression is not statically evaluable,\n // we need to hoist all its referenced identifiers\n\n // Collect all referenced identifiers\n findIdentifiers([ex], 'reference').forEach((id) => {\n if (!id.isIdentifier()) return;\n\n // Try to evaluate and inline them…\n const evaluatedId = staticEval(id, evaluate);\n if (evaluatedId) {\n mutate(id, (p) => {\n p.replaceWith(valueToLiteral(evaluatedId[0], ex));\n });\n } else {\n // … or hoist them to the root scope\n hoistIdentifier(id);\n }\n });\n }\n\n const kind = isFunction ? ValueType.FUNCTION : ValueType.LAZY;\n\n // Declare _expN const with the lazy expression\n const declaration = expressionDeclarationTpl({\n expId: createId(expUid),\n expression: evaluated\n ? valueToLiteral(evaluated[0], ex)\n : cloneNode(ex.node),\n }) as VariableDeclaration;\n\n // Insert the declaration as close as possible to the original expression\n const [inserted] = statementInRoot.insertBefore(declaration);\n referenceAll(inserted);\n rootScope.registerDeclaration(inserted);\n\n const importedFrom: string[] = [];\n function findImportSourceOfIdentifier(idPath: NodePath<Identifier>) {\n const exBindingIdentifier = idPath.scope.getBinding(idPath.node.name)\n ?.identifier;\n const exImport =\n imports.find((i) => i.local.node === exBindingIdentifier) ?? null;\n if (exImport) {\n importedFrom.push(exImport.source);\n }\n }\n\n if (ex.isIdentifier()) {\n findImportSourceOfIdentifier(ex);\n } else {\n ex.traverse({\n Identifier: findImportSourceOfIdentifier,\n });\n }\n\n // Replace the expression with the _expN() call\n mutate(ex, (p) => {\n p.replaceWith({\n type: 'CallExpression',\n callee: createId(expUid),\n arguments: [],\n });\n });\n\n // eslint-disable-next-line no-param-reassign\n ex.node.loc = loc;\n\n // noinspection UnnecessaryLocalVariableJS\n const result: Omit<\n LazyValue | FunctionValue,\n 'buildCodeFrameError' | 'source'\n > = {\n kind,\n ex: createId(expUid, loc),\n importedFrom,\n };\n\n return result;\n}\n\nconst debug = logger.extend('template-parse:identify-expressions');\n\n/**\n * Collects, hoists, and makes lazy all expressions in the given template\n * If evaluate is true, it will try to evaluate the expressions\n */\nexport function collectTemplateDependencies(\n path: NodePath<TaggedTemplateExpression>,\n evaluate = false\n): [quasis: TemplateElement[], expressionValues: ExpressionValue[]] {\n const quasi = path.get('quasi');\n const quasis = quasi.get('quasis');\n const expressions = quasi.get('expressions');\n\n debug('Found: %s', expressions.length);\n\n const expressionValues: ExpressionValue[] = expressions.map(\n (ex: NodePath<Expression | TSType>): ExpressionValue => {\n const buildCodeFrameError = ex.buildCodeFrameError.bind(ex);\n const source = getSource(ex);\n\n if (!ex.isExpression()) {\n throw buildCodeFrameError(\n `The expression '${source}' is not supported.`\n );\n }\n\n const extracted = extractExpression(ex, evaluate);\n\n return {\n ...extracted,\n source,\n buildCodeFrameError,\n } as ExpressionValue;\n }\n );\n\n return [quasis.map((p) => p.node), expressionValues];\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/cache.js
CHANGED
|
@@ -13,6 +13,15 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
13
13
|
function hashContent(content) {
|
|
14
14
|
return (0, _crypto.createHash)('sha256').update(content).digest('hex');
|
|
15
15
|
}
|
|
16
|
+
function isMissingFileError(error) {
|
|
17
|
+
if (!error || typeof error !== 'object') {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const {
|
|
21
|
+
code
|
|
22
|
+
} = error;
|
|
23
|
+
return code === 'ENOENT' || code === 'ENOTDIR';
|
|
24
|
+
}
|
|
16
25
|
const cacheLogger = _shared.logger.extend('cache');
|
|
17
26
|
const cacheNames = ['barrelManifests', 'entrypoints', 'exports'];
|
|
18
27
|
const loggers = cacheNames.reduce((acc, key) => ({
|
|
@@ -22,6 +31,7 @@ const loggers = cacheNames.reduce((acc, key) => ({
|
|
|
22
31
|
class TransformCacheCollection {
|
|
23
32
|
barrelManifestDependencies = new Map();
|
|
24
33
|
contentHashes = new Map();
|
|
34
|
+
fileMtimes = new Map();
|
|
25
35
|
exportDependencies = new Map();
|
|
26
36
|
constructor(caches = {}) {
|
|
27
37
|
this.barrelManifests = caches.barrelManifests || new Map();
|
|
@@ -153,7 +163,18 @@ class TransformCacheCollection {
|
|
|
153
163
|
for (const [, dependency] of dependenciesToCheck) {
|
|
154
164
|
const dependencyFilename = dependency.resolved;
|
|
155
165
|
if (dependencyFilename) {
|
|
156
|
-
|
|
166
|
+
let dependencyContent;
|
|
167
|
+
try {
|
|
168
|
+
dependencyContent = _nodeFs.default.readFileSync((0, _parseRequest.stripQueryAndHash)(dependencyFilename), 'utf8');
|
|
169
|
+
} catch (error) {
|
|
170
|
+
if (!isMissingFileError(error)) {
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
this.invalidateForFile(dependencyFilename);
|
|
174
|
+
anyDepChanged = true;
|
|
175
|
+
// eslint-disable-next-line no-continue
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
157
178
|
const dependencyChanged = this.invalidateIfChanged(dependencyFilename, dependencyContent, visitedFiles, 'fs', changedFiles);
|
|
158
179
|
if (dependencyChanged && invalidateOnDependencyChange !== null && invalidateOnDependencyChange !== void 0 && invalidateOnDependencyChange.has(dependencyFilename)) {
|
|
159
180
|
cacheLogger('dependency affecting output has changed, invalidate all for %s', filename);
|
|
@@ -238,15 +259,49 @@ class TransformCacheCollection {
|
|
|
238
259
|
hasCachedDependencies(filename) {
|
|
239
260
|
return this.getCachedDependencies(filename).size > 0;
|
|
240
261
|
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Fast check if a file changed on disk since last seen.
|
|
265
|
+
* Uses mtime as a fast path — only reads the file if mtime differs.
|
|
266
|
+
* Returns true if the file changed (cache was invalidated).
|
|
267
|
+
*/
|
|
268
|
+
checkFreshness(filename, strippedFilename) {
|
|
269
|
+
try {
|
|
270
|
+
const currentMtime = _nodeFs.default.statSync(strippedFilename).mtimeMs;
|
|
271
|
+
const cachedMtime = this.fileMtimes.get(filename);
|
|
272
|
+
if (cachedMtime !== undefined && currentMtime === cachedMtime) {
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
const content = _nodeFs.default.readFileSync(strippedFilename, 'utf-8');
|
|
276
|
+
this.fileMtimes.set(filename, currentMtime);
|
|
277
|
+
if (this.invalidateIfChanged(filename, content, undefined, 'fs')) {
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
return false;
|
|
281
|
+
} catch (error) {
|
|
282
|
+
if (!isMissingFileError(error)) {
|
|
283
|
+
throw error;
|
|
284
|
+
}
|
|
285
|
+
this.invalidateForFile(filename);
|
|
286
|
+
return true;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
241
289
|
setContentHash(filename, source, hash) {
|
|
242
290
|
const current = this.contentHashes.get(filename);
|
|
243
291
|
if (current) {
|
|
244
292
|
current[source] = hash;
|
|
245
|
-
|
|
293
|
+
} else {
|
|
294
|
+
this.contentHashes.set(filename, {
|
|
295
|
+
[source]: hash
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
if (source === 'fs') {
|
|
299
|
+
try {
|
|
300
|
+
this.fileMtimes.set(filename, _nodeFs.default.statSync((0, _parseRequest.stripQueryAndHash)(filename)).mtimeMs);
|
|
301
|
+
} catch {
|
|
302
|
+
// ignore
|
|
303
|
+
}
|
|
246
304
|
}
|
|
247
|
-
this.contentHashes.set(filename, {
|
|
248
|
-
[source]: hash
|
|
249
|
-
});
|
|
250
305
|
}
|
|
251
306
|
}
|
|
252
307
|
exports.TransformCacheCollection = TransformCacheCollection;
|
package/lib/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","names":["_crypto","require","_nodeFs","_interopRequireDefault","_shared","_getFileIdx","_parseRequest","e","__esModule","default","hashContent","content","createHash","update","digest","cacheLogger","logger","extend","cacheNames","loggers","reduce","acc","key","TransformCacheCollection","barrelManifestDependencies","Map","contentHashes","exportDependencies","constructor","caches","barrelManifests","entrypoints","exports","add","cacheName","value","cache","getFileIdx","undefined","has","get","delete","clearCacheDependencies","set","maybeOriginalCode","originalCode","isLoaded","initialCode","source","resolvedCode","setContentHash","fileContent","fs","readFileSync","stripQueryAndHash","clear","forEach","name","invalidate","res","invalidateForFile","filename","invalidateIfChanged","previousVisitedFiles","changedFiles","Set","visitedFiles","fileEntrypoint","anyDepChanged","hasCachedDependencies","invalidateOnDependencyChange","dependenciesToCheck","dependency","_fileEntrypoint$depen","dependencies","_fileEntrypoint$inval","invalidationDependencies","dependencyFilename","getCachedDependencies","values","some","resolved","dependencyContent","dependencyChanged","existing","previousHash","newHash","otherSource","otherHash","setCacheDependencies","getDependencyCache","nextDependencies","filter","length","size","_this$barrelManifestD","_this$exportDependenc","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\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 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 const dependencyContent = fs.readFileSync(\n stripQueryAndHash(dependencyFilename),\n 'utf8'\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 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 return;\n }\n\n this.contentHashes.set(filename, { [source]: hash });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"cache.js","names":["_crypto","require","_nodeFs","_interopRequireDefault","_shared","_getFileIdx","_parseRequest","e","__esModule","default","hashContent","content","createHash","update","digest","isMissingFileError","error","code","cacheLogger","logger","extend","cacheNames","loggers","reduce","acc","key","TransformCacheCollection","barrelManifestDependencies","Map","contentHashes","fileMtimes","exportDependencies","constructor","caches","barrelManifests","entrypoints","exports","add","cacheName","value","cache","getFileIdx","undefined","has","get","delete","clearCacheDependencies","set","maybeOriginalCode","originalCode","isLoaded","initialCode","source","resolvedCode","setContentHash","fileContent","fs","readFileSync","stripQueryAndHash","clear","forEach","name","invalidate","res","invalidateForFile","filename","invalidateIfChanged","previousVisitedFiles","changedFiles","Set","visitedFiles","fileEntrypoint","anyDepChanged","hasCachedDependencies","invalidateOnDependencyChange","dependenciesToCheck","dependency","_fileEntrypoint$depen","dependencies","_fileEntrypoint$inval","invalidationDependencies","dependencyFilename","getCachedDependencies","values","some","resolved","dependencyContent","dependencyChanged","existing","previousHash","newHash","otherSource","otherHash","setCacheDependencies","getDependencyCache","nextDependencies","filter","length","size","_this$barrelManifestD","_this$exportDependenc","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":[]}
|
package/lib/index.js
CHANGED
|
@@ -8,8 +8,12 @@ var _exportNames = {
|
|
|
8
8
|
createFileReporter: true,
|
|
9
9
|
babelTransformPlugin: true,
|
|
10
10
|
preeval: true,
|
|
11
|
+
createTransformManifest: true,
|
|
11
12
|
getTransformMetadata: true,
|
|
13
|
+
stringifyTransformManifest: true,
|
|
14
|
+
toTransformResultMetadata: true,
|
|
12
15
|
withTransformMetadata: true,
|
|
16
|
+
collectTransformDiagnostics: true,
|
|
13
17
|
Module: true,
|
|
14
18
|
DefaultModuleImplementation: true,
|
|
15
19
|
shaker: true,
|
|
@@ -101,12 +105,24 @@ Object.defineProperty(exports, "baseHandlers", {
|
|
|
101
105
|
return _generators.baseHandlers;
|
|
102
106
|
}
|
|
103
107
|
});
|
|
108
|
+
Object.defineProperty(exports, "collectTransformDiagnostics", {
|
|
109
|
+
enumerable: true,
|
|
110
|
+
get: function () {
|
|
111
|
+
return _TransformDiagnostics.collectTransformDiagnostics;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
104
114
|
Object.defineProperty(exports, "createFileReporter", {
|
|
105
115
|
enumerable: true,
|
|
106
116
|
get: function () {
|
|
107
117
|
return _fileReporter.createFileReporter;
|
|
108
118
|
}
|
|
109
119
|
});
|
|
120
|
+
Object.defineProperty(exports, "createTransformManifest", {
|
|
121
|
+
enumerable: true,
|
|
122
|
+
get: function () {
|
|
123
|
+
return _TransformMetadata.createTransformManifest;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
110
126
|
Object.defineProperty(exports, "findIdentifiers", {
|
|
111
127
|
enumerable: true,
|
|
112
128
|
get: function () {
|
|
@@ -185,12 +201,24 @@ Object.defineProperty(exports, "slugify", {
|
|
|
185
201
|
return _shared.slugify;
|
|
186
202
|
}
|
|
187
203
|
});
|
|
204
|
+
Object.defineProperty(exports, "stringifyTransformManifest", {
|
|
205
|
+
enumerable: true,
|
|
206
|
+
get: function () {
|
|
207
|
+
return _TransformMetadata.stringifyTransformManifest;
|
|
208
|
+
}
|
|
209
|
+
});
|
|
188
210
|
Object.defineProperty(exports, "syncResolveImports", {
|
|
189
211
|
enumerable: true,
|
|
190
212
|
get: function () {
|
|
191
213
|
return _resolveImports.syncResolveImports;
|
|
192
214
|
}
|
|
193
215
|
});
|
|
216
|
+
Object.defineProperty(exports, "toTransformResultMetadata", {
|
|
217
|
+
enumerable: true,
|
|
218
|
+
get: function () {
|
|
219
|
+
return _TransformMetadata.toTransformResultMetadata;
|
|
220
|
+
}
|
|
221
|
+
});
|
|
194
222
|
Object.defineProperty(exports, "transform", {
|
|
195
223
|
enumerable: true,
|
|
196
224
|
get: function () {
|
|
@@ -220,6 +248,7 @@ var _fileReporter = require("./debug/fileReporter");
|
|
|
220
248
|
var _babelTransform = _interopRequireDefault(require("./plugins/babel-transform"));
|
|
221
249
|
var _preeval = _interopRequireDefault(require("./plugins/preeval"));
|
|
222
250
|
var _TransformMetadata = require("./utils/TransformMetadata");
|
|
251
|
+
var _TransformDiagnostics = require("./utils/TransformDiagnostics");
|
|
223
252
|
var _module = require("./module");
|
|
224
253
|
var _shaker = _interopRequireDefault(require("./shaker"));
|
|
225
254
|
var _transform = require("./transform");
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_shared","require","_fileReporter","_babelTransform","_interopRequireDefault","_preeval","_TransformMetadata","_module","_shaker","_transform","_UnprocessedEntrypointError","_types","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_EvaluatedEntrypoint","_Entrypoint","_generators","_transform2","_Entrypoint2","_createStylisPreprocessor","_resolveImports","_loadWywOptions","_withDefaultServices","_EventEmitter","_isNode","_getFileIdx","_getTagProcessor","_getVisitorKeys","_peek","_cache","_findIdentifiers","e","__esModule","default"],"sources":["../src/index.ts"],"sourcesContent":["export { slugify } from '@wyw-in-js/shared';\n\nexport { createFileReporter } from './debug/fileReporter';\nexport type { IFileReporterOptions } from './debug/fileReporter';\nexport { default as babelTransformPlugin } from './plugins/babel-transform';\nexport { default as preeval } from './plugins/preeval';\nexport {\n getTransformMetadata,\n withTransformMetadata,\n} from './utils/TransformMetadata';\nexport type {
|
|
1
|
+
{"version":3,"file":"index.js","names":["_shared","require","_fileReporter","_babelTransform","_interopRequireDefault","_preeval","_TransformMetadata","_TransformDiagnostics","_module","_shaker","_transform","_UnprocessedEntrypointError","_types","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_EvaluatedEntrypoint","_Entrypoint","_generators","_transform2","_Entrypoint2","_createStylisPreprocessor","_resolveImports","_loadWywOptions","_withDefaultServices","_EventEmitter","_isNode","_getFileIdx","_getTagProcessor","_getVisitorKeys","_peek","_cache","_findIdentifiers","e","__esModule","default"],"sources":["../src/index.ts"],"sourcesContent":["export { slugify } from '@wyw-in-js/shared';\n\nexport { createFileReporter } from './debug/fileReporter';\nexport type { IFileReporterOptions } from './debug/fileReporter';\nexport { default as babelTransformPlugin } from './plugins/babel-transform';\nexport { default as preeval } from './plugins/preeval';\nexport {\n createTransformManifest,\n getTransformMetadata,\n stringifyTransformManifest,\n toTransformResultMetadata,\n withTransformMetadata,\n} from './utils/TransformMetadata';\nexport type {\n WYWTransformManifest,\n WYWTransformMetadata,\n WYWTransformProcessorMetadata,\n WYWTransformResultMetadata,\n} from './utils/TransformMetadata';\nexport { collectTransformDiagnostics } from './utils/TransformDiagnostics';\nexport type { WYWTransformDiagnostic } from './utils/TransformDiagnostics';\nexport { Module, DefaultModuleImplementation } from './module';\nexport { default as shaker } from './shaker';\nexport { transform } from './transform';\nexport {\n isUnprocessedEntrypointError,\n UnprocessedEntrypointError,\n} from './transform/actions/UnprocessedEntrypointError';\nexport * from './types';\nexport { EvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nexport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nexport { parseFile } from './transform/Entrypoint.helpers';\nexport type { LoadAndParseFn } from './transform/Entrypoint.types';\nexport { baseHandlers } from './transform/generators';\nexport { prepareCode } from './transform/generators/transform';\nexport { Entrypoint } from './transform/Entrypoint';\nexport { transformUrl } from './transform/generators/createStylisPreprocessor';\nexport {\n asyncResolveImports,\n syncResolveImports,\n} from './transform/generators/resolveImports';\nexport { loadWywOptions } from './transform/helpers/loadWywOptions';\nexport { withDefaultServices } from './transform/helpers/withDefaultServices';\nexport type { Services } from './transform/types';\nexport { EventEmitter } from './utils/EventEmitter';\nexport type {\n EntrypointEvent,\n OnEvent,\n OnActionStartArgs,\n OnActionFinishArgs,\n} from './utils/EventEmitter';\nexport { isNode } from './utils/isNode';\nexport { getFileIdx } from './utils/getFileIdx';\nexport { applyProcessors } from './utils/getTagProcessor';\nexport { getVisitorKeys } from './utils/getVisitorKeys';\nexport type { VisitorKeys } from './utils/getVisitorKeys';\nexport { peek } from './utils/peek';\nexport { TransformCacheCollection } from './cache';\nexport { findIdentifiers } from './utils/findIdentifiers';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,aAAA,GAAAD,OAAA;AAEA,IAAAE,eAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,QAAA,GAAAD,sBAAA,CAAAH,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA;AAaA,IAAAM,qBAAA,GAAAN,OAAA;AAEA,IAAAO,OAAA,GAAAP,OAAA;AACA,IAAAQ,OAAA,GAAAL,sBAAA,CAAAH,OAAA;AACA,IAAAS,UAAA,GAAAT,OAAA;AACA,IAAAU,2BAAA,GAAAV,OAAA;AAIA,IAAAW,MAAA,GAAAX,OAAA;AAAAY,MAAA,CAAAC,IAAA,CAAAF,MAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,MAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,MAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,oBAAA,GAAAxB,OAAA;AAEA,IAAAyB,WAAA,GAAAzB,OAAA;AAEA,IAAA0B,WAAA,GAAA1B,OAAA;AACA,IAAA2B,WAAA,GAAA3B,OAAA;AACA,IAAA4B,YAAA,GAAA5B,OAAA;AACA,IAAA6B,yBAAA,GAAA7B,OAAA;AACA,IAAA8B,eAAA,GAAA9B,OAAA;AAIA,IAAA+B,eAAA,GAAA/B,OAAA;AACA,IAAAgC,oBAAA,GAAAhC,OAAA;AAEA,IAAAiC,aAAA,GAAAjC,OAAA;AAOA,IAAAkC,OAAA,GAAAlC,OAAA;AACA,IAAAmC,WAAA,GAAAnC,OAAA;AACA,IAAAoC,gBAAA,GAAApC,OAAA;AACA,IAAAqC,eAAA,GAAArC,OAAA;AAEA,IAAAsC,KAAA,GAAAtC,OAAA;AACA,IAAAuC,MAAA,GAAAvC,OAAA;AACA,IAAAwC,gBAAA,GAAAxC,OAAA;AAA0D,SAAAG,uBAAAsC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
|
package/lib/module.js
CHANGED
|
@@ -301,18 +301,23 @@ class Module {
|
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
303
|
getEntrypoint(filename, only, log) {
|
|
304
|
-
var _entrypoint$evaluated;
|
|
304
|
+
var _entrypoint$evaluated, _entrypoint;
|
|
305
305
|
const strippedFilename = (0, _parseRequest.stripQueryAndHash)(filename);
|
|
306
306
|
const extension = _path.default.extname(strippedFilename);
|
|
307
307
|
if (extension !== '.json' && !this.extensions.includes(extension)) {
|
|
308
308
|
return null;
|
|
309
309
|
}
|
|
310
|
-
|
|
310
|
+
let entrypoint = this.cache.get('entrypoints', filename);
|
|
311
311
|
if (entrypoint && (0, _Entrypoint2.isSuperSet)((_entrypoint$evaluated = entrypoint.evaluatedOnly) !== null && _entrypoint$evaluated !== void 0 ? _entrypoint$evaluated : [], only)) {
|
|
312
|
-
|
|
313
|
-
|
|
312
|
+
if (this.cache.checkFreshness(filename, strippedFilename)) {
|
|
313
|
+
entrypoint = undefined;
|
|
314
|
+
}
|
|
315
|
+
if (entrypoint) {
|
|
316
|
+
log('✅ file has been already evaluated');
|
|
317
|
+
return entrypoint;
|
|
318
|
+
}
|
|
314
319
|
}
|
|
315
|
-
if (entrypoint !== null &&
|
|
320
|
+
if ((_entrypoint = entrypoint) !== null && _entrypoint !== void 0 && _entrypoint.ignored) {
|
|
316
321
|
log('✅ file has been ignored during prepare stage. Original code will be used');
|
|
317
322
|
return entrypoint;
|
|
318
323
|
}
|