@wyw-in-js/transform 1.0.4 → 1.0.5

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.
Files changed (66) hide show
  1. package/esm/cache.js +47 -6
  2. package/esm/cache.js.map +1 -1
  3. package/esm/module.js +2 -2
  4. package/esm/module.js.map +1 -1
  5. package/esm/options/buildOptions.js +23 -2
  6. package/esm/options/buildOptions.js.map +1 -1
  7. package/esm/options/buildOptions.test.js +97 -0
  8. package/esm/options/buildOptions.test.js.map +1 -1
  9. package/esm/plugins/shaker.js +87 -9
  10. package/esm/plugins/shaker.js.map +1 -1
  11. package/esm/transform/Entrypoint.helpers.js +8 -1
  12. package/esm/transform/Entrypoint.helpers.js.map +1 -1
  13. package/esm/transform/Entrypoint.js +5 -3
  14. package/esm/transform/Entrypoint.js.map +1 -1
  15. package/esm/transform/EvaluatedEntrypoint.js.map +1 -1
  16. package/esm/transform/actions/BaseAction.js +1 -1
  17. package/esm/transform/actions/BaseAction.js.map +1 -1
  18. package/esm/transform/generators/processImports.js +53 -0
  19. package/esm/transform/generators/processImports.js.map +1 -1
  20. package/esm/transform/generators/resolveImports.js +2 -2
  21. package/esm/transform/generators/resolveImports.js.map +1 -1
  22. package/esm/utils/importOverrides.js +60 -0
  23. package/esm/utils/importOverrides.js.map +1 -1
  24. package/esm/vm/createVmContext.js +48 -16
  25. package/esm/vm/createVmContext.js.map +1 -1
  26. package/lib/cache.js +47 -7
  27. package/lib/cache.js.map +1 -1
  28. package/lib/module.js +2 -2
  29. package/lib/module.js.map +1 -1
  30. package/lib/options/buildOptions.js +23 -3
  31. package/lib/options/buildOptions.js.map +1 -1
  32. package/lib/options/buildOptions.test.js +97 -0
  33. package/lib/options/buildOptions.test.js.map +1 -1
  34. package/lib/plugins/shaker.js +88 -9
  35. package/lib/plugins/shaker.js.map +1 -1
  36. package/lib/transform/Entrypoint.helpers.js +8 -1
  37. package/lib/transform/Entrypoint.helpers.js.map +1 -1
  38. package/lib/transform/Entrypoint.js +5 -3
  39. package/lib/transform/Entrypoint.js.map +1 -1
  40. package/lib/transform/EvaluatedEntrypoint.js.map +1 -1
  41. package/lib/transform/actions/BaseAction.js +1 -1
  42. package/lib/transform/actions/BaseAction.js.map +1 -1
  43. package/lib/transform/generators/processImports.js +53 -0
  44. package/lib/transform/generators/processImports.js.map +1 -1
  45. package/lib/transform/generators/resolveImports.js +1 -1
  46. package/lib/transform/generators/resolveImports.js.map +1 -1
  47. package/lib/utils/importOverrides.js +62 -0
  48. package/lib/utils/importOverrides.js.map +1 -1
  49. package/lib/vm/createVmContext.js +48 -16
  50. package/lib/vm/createVmContext.js.map +1 -1
  51. package/package.json +5 -4
  52. package/types/cache.d.ts +2 -1
  53. package/types/cache.js +48 -6
  54. package/types/module.js +1 -1
  55. package/types/options/buildOptions.js +29 -2
  56. package/types/plugins/shaker.js +104 -9
  57. package/types/transform/Entrypoint.helpers.js +10 -1
  58. package/types/transform/Entrypoint.js +5 -3
  59. package/types/transform/EvaluatedEntrypoint.d.ts +2 -0
  60. package/types/transform/EvaluatedEntrypoint.js +1 -0
  61. package/types/transform/actions/BaseAction.js +1 -1
  62. package/types/transform/generators/processImports.js +70 -0
  63. package/types/transform/generators/resolveImports.js +1 -1
  64. package/types/utils/importOverrides.d.ts +2 -1
  65. package/types/utils/importOverrides.js +63 -0
  66. package/types/vm/createVmContext.js +61 -13
@@ -1 +1 @@
1
- {"version":3,"file":"Entrypoint.helpers.js","names":["_fs","require","_path","_shared","_buildOptions","_loadBabelOptions","_getFileIdx","_getPluginKey","_parseRequest","getMatchedRule","rules","filename","code","i","length","rule","test","RegExp","action","parseFile","babel","originalCode","parseConfig","log","logger","extend","getFileIdx","parseResult","parseSync","Error","isModuleResolver","plugin","key","getPluginKey","includes","moduleResolverWarned","normalizeBabelKey","replace","isBabelPresetTypescript","normalized","isBabelTransformTypescriptPlugin","withAllowDeclareFields","item","Array","isArray","allowDeclareFields","target","rawOptions","rest","options","ensureAllowDeclareFieldsInBabelOptions","babelOptions","scope","_babelOptions$presets","_babelOptions$plugins","presetsChanged","pluginsChanged","overridesChanged","envChanged","presets","map","plugins","overrides","baseOverrides","patchedOverrides","override","some","patchedOverride","idx","env","baseEnv","entries","Object","patchedEntries","envName","envOptions","patched","fromEntries","next","buildConfigs","services","name","pluginOptions","_parseConfig$plugins","_rawConfig$plugins","commonOptions","ast","inputSourceMap","root","sourceFileName","sourceMaps","isTypescriptFile","endsWith","rawConfig","buildOptions","useBabelConfigs","isFeatureEnabled","features","configFile","loadBabelOptions","babelrc","parseHasModuleResolver","rawHasModuleResolver","_parseConfig$plugins$","_parseConfig$plugins2","_rawConfig$plugins2","console","warn","filter","evalConfig","loadAndParse","loadedCode","eventEmitter","stripQueryAndHash","extension","extname","extensions","isAbsolute","evaluator","reason","readFileSync","getOrParse","perf","resolve","paths","dirname","default","getStack","entrypoint","stack","parents","push","mergeOnly","a","b","result","Set","forEach","add","sort","isSuperSet","aSet","every","has","exports"],"sources":["../../src/transform/Entrypoint.helpers.ts"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { dirname, extname, isAbsolute } from 'path';\n\nimport type { TransformOptions, PluginItem } from '@babel/core';\nimport type { File } from '@babel/types';\n\nimport type {\n Debugger,\n EvalRule,\n Evaluator,\n StrictOptions,\n} from '@wyw-in-js/shared';\nimport { logger, isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport { buildOptions } from '../options/buildOptions';\nimport { loadBabelOptions } from '../options/loadBabelOptions';\nimport type { ParentEntrypoint } from '../types';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { getPluginKey } from '../utils/getPluginKey';\n\nimport type { IEntrypointCode, IIgnoredEntrypoint } from './Entrypoint.types';\nimport type { Services } from './types';\nimport { stripQueryAndHash } from '../utils/parseRequest';\n\nexport function getMatchedRule(\n rules: EvalRule[],\n filename: string,\n code: string\n): EvalRule {\n for (let i = rules.length - 1; i >= 0; i--) {\n const rule = rules[i];\n if (!rule.test) {\n return rule;\n }\n\n if (typeof rule.test === 'function' && rule.test(filename, code)) {\n return rule;\n }\n\n if (rule.test instanceof RegExp && rule.test.test(filename)) {\n return rule;\n }\n }\n\n return { action: 'ignore' };\n}\n\nexport function parseFile(\n babel: Core,\n filename: string,\n originalCode: string,\n parseConfig: TransformOptions\n): File {\n const log = logger.extend('transform:parse').extend(getFileIdx(filename));\n\n const parseResult = babel.parseSync(originalCode, parseConfig);\n if (!parseResult) {\n throw new Error(`Failed to parse ${filename}`);\n }\n\n log('stage-1', `${filename} has been parsed`);\n\n return parseResult;\n}\n\nconst isModuleResolver = (plugin: PluginItem) => {\n const key = getPluginKey(plugin);\n if (!key) return false;\n\n if (['module-resolver', 'babel-plugin-module-resolver'].includes(key)) {\n return true;\n }\n\n return /([\\\\/])babel-plugin-module-resolver\\1/.test(key);\n};\n\nlet moduleResolverWarned = false;\n\nconst normalizeBabelKey = (key: string) => key.replace(/\\\\/g, '/');\n\nconst isBabelPresetTypescript = (key: string) => {\n const normalized = normalizeBabelKey(key);\n\n if (normalized === 'typescript') return true;\n return normalized.includes('preset-typescript');\n};\n\nconst isBabelTransformTypescriptPlugin = (key: string) => {\n const normalized = normalizeBabelKey(key);\n\n if (normalized === 'transform-typescript') return true;\n return normalized.includes('plugin-transform-typescript');\n};\n\nconst withAllowDeclareFields = (item: PluginItem): PluginItem => {\n if (!Array.isArray(item)) {\n return [item, { allowDeclareFields: true }];\n }\n\n const [target, rawOptions, ...rest] = item;\n const options =\n typeof rawOptions === 'object' &&\n rawOptions !== null &&\n !Array.isArray(rawOptions)\n ? rawOptions\n : {};\n\n if ('allowDeclareFields' in options) {\n return item;\n }\n\n return [target, { ...options, allowDeclareFields: true }, ...rest];\n};\n\ntype AllowDeclareFieldsPatchScope = 'top' | 'env' | 'override';\n\nconst ensureAllowDeclareFieldsInBabelOptions = (\n babelOptions: TransformOptions,\n scope: AllowDeclareFieldsPatchScope = 'top'\n): TransformOptions => {\n let presetsChanged = false;\n let pluginsChanged = false;\n let overridesChanged = false;\n let envChanged = false;\n\n const presets = babelOptions.presets?.map((item) => {\n const key = getPluginKey(item);\n if (!key || !isBabelPresetTypescript(key)) {\n return item;\n }\n\n presetsChanged = true;\n return withAllowDeclareFields(item);\n });\n\n const plugins = babelOptions.plugins?.map((item) => {\n const key = getPluginKey(item);\n if (!key || !isBabelTransformTypescriptPlugin(key)) {\n return item;\n }\n\n pluginsChanged = true;\n return withAllowDeclareFields(item);\n });\n\n const { overrides: baseOverrides } = babelOptions;\n let overrides = baseOverrides;\n if (scope === 'top' && baseOverrides) {\n const patchedOverrides = baseOverrides.map((override) =>\n ensureAllowDeclareFieldsInBabelOptions(\n override as TransformOptions,\n 'override'\n )\n );\n\n if (\n patchedOverrides.some(\n (patchedOverride, idx) => patchedOverride !== baseOverrides[idx]\n )\n ) {\n overridesChanged = true;\n overrides = patchedOverrides;\n }\n }\n\n const { env: baseEnv } = babelOptions;\n let env = baseEnv;\n if (scope === 'top' && baseEnv) {\n const entries = Object.entries(baseEnv);\n const patchedEntries = entries.map(([envName, envOptions]) => [\n envName,\n envOptions\n ? ensureAllowDeclareFieldsInBabelOptions(envOptions, 'env')\n : envOptions,\n ]) as Array<[string, TransformOptions | null | undefined]>;\n\n if (\n patchedEntries.some(([, patched], idx) => patched !== entries[idx][1])\n ) {\n envChanged = true;\n env = Object.fromEntries(patchedEntries);\n }\n }\n\n if (!presetsChanged && !pluginsChanged && !overridesChanged && !envChanged) {\n return babelOptions;\n }\n\n const next: TransformOptions = { ...babelOptions };\n if (presetsChanged) next.presets = presets;\n if (pluginsChanged) next.plugins = plugins;\n if (overridesChanged) next.overrides = overrides;\n if (envChanged) next.env = env;\n\n return next;\n};\n\nfunction buildConfigs(\n services: Services,\n name: string,\n pluginOptions: StrictOptions,\n babelOptions: TransformOptions | undefined\n): {\n evalConfig: TransformOptions;\n parseConfig: TransformOptions;\n} {\n const { babel, options } = services;\n\n const commonOptions = {\n ast: true,\n filename: name,\n inputSourceMap: options.inputSourceMap,\n root: options.root,\n sourceFileName: name,\n sourceMaps: true,\n };\n\n const isTypescriptFile =\n name.endsWith('.ts') ||\n name.endsWith('.tsx') ||\n name.endsWith('.mts') ||\n name.endsWith('.cts');\n\n let rawConfig = buildOptions(\n pluginOptions?.babelOptions,\n babelOptions,\n commonOptions\n );\n\n if (isTypescriptFile) {\n rawConfig = ensureAllowDeclareFieldsInBabelOptions(rawConfig);\n }\n\n const useBabelConfigs = isFeatureEnabled(\n pluginOptions.features,\n 'useBabelConfigs',\n name\n );\n\n if (!useBabelConfigs) {\n rawConfig = {\n ...rawConfig,\n configFile: false,\n };\n }\n\n const parseConfig = loadBabelOptions(babel, name, {\n babelrc: useBabelConfigs,\n ...rawConfig,\n });\n\n const parseHasModuleResolver = parseConfig.plugins?.some(isModuleResolver);\n const rawHasModuleResolver = rawConfig.plugins?.some(isModuleResolver);\n\n if (parseHasModuleResolver && !rawHasModuleResolver) {\n if (!moduleResolverWarned) {\n // eslint-disable-next-line no-console\n console.warn(\n `[wyw-in-js] ${name} has a module-resolver plugin in its babelrc, but it is not present ` +\n `in the babelOptions for the wyw-in-js plugin. This works for now but will be an error in the future. ` +\n `Please add the module-resolver plugin to the babelOptions for the wyw-in-js plugin.`\n );\n\n moduleResolverWarned = true;\n }\n\n rawConfig = {\n ...rawConfig,\n plugins: [\n ...(parseConfig.plugins?.filter((plugin) => isModuleResolver(plugin)) ??\n []),\n ...(rawConfig.plugins ?? []),\n ],\n };\n }\n\n const evalConfig = loadBabelOptions(babel, name, {\n babelrc: false,\n ...rawConfig,\n });\n\n return {\n evalConfig,\n parseConfig,\n };\n}\n\nexport function loadAndParse(\n services: Services,\n name: string,\n loadedCode: string | undefined,\n log: Debugger\n): IEntrypointCode | IIgnoredEntrypoint {\n const {\n babel,\n eventEmitter,\n options: { pluginOptions },\n } = services;\n\n const filename = stripQueryAndHash(name);\n const extension = extname(filename);\n\n if (!pluginOptions.extensions.includes(extension)) {\n log(\n '[createEntrypoint] %s is ignored. If you want it to be processed, you should add \\'%s\\' to the \"extensions\" option.',\n filename,\n extension\n );\n\n return {\n code: isAbsolute(filename) ? loadedCode : '',\n evaluator: 'ignored',\n reason: 'extension',\n };\n }\n\n const code = loadedCode ?? readFileSync(filename, 'utf-8');\n\n const { action, babelOptions } = getMatchedRule(\n pluginOptions.rules,\n filename,\n code\n );\n\n let ast: File | undefined;\n\n const { evalConfig, parseConfig } = buildConfigs(\n services,\n filename,\n pluginOptions,\n babelOptions\n );\n\n const getOrParse = () => {\n if (ast) return ast;\n ast = eventEmitter.perf('parseFile', () =>\n parseFile(babel, name, code, parseConfig)\n );\n\n return ast;\n };\n\n if (action === 'ignore') {\n log('[createEntrypoint] %s is ignored by rule', name);\n return {\n get ast() {\n return getOrParse();\n },\n code,\n evaluator: 'ignored',\n reason: 'rule',\n };\n }\n\n const evaluator: Evaluator =\n typeof action === 'function'\n ? action\n : require(\n require.resolve(action, {\n paths: [dirname(filename)],\n })\n ).default;\n\n return {\n get ast() {\n return getOrParse();\n },\n code,\n evaluator,\n evalConfig,\n };\n}\n\nexport function getStack(entrypoint: ParentEntrypoint) {\n if (!entrypoint) return [];\n\n const stack = [entrypoint.name];\n\n let { parents } = entrypoint;\n while (parents.length) {\n stack.push(parents[0].name);\n parents = parents[0].parents;\n }\n\n return stack;\n}\n\nexport function mergeOnly(a: string[], b: string[]) {\n const result = new Set(a);\n b.forEach((item) => result.add(item));\n return [...result].filter((i) => i).sort();\n}\n\nexport const isSuperSet = <T>(a: (T | '*')[], b: (T | '*')[]) => {\n if (a.includes('*')) return true;\n if (b.length === 0) return true;\n const aSet = new Set(a);\n return b.every((item) => aSet.has(item));\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Entrypoint.helpers.js","names":["_fs","require","_path","_shared","_buildOptions","_loadBabelOptions","_getFileIdx","_getPluginKey","_parseRequest","getMatchedRule","rules","filename","code","i","length","rule","test","RegExp","action","parseFile","babel","originalCode","parseConfig","log","logger","extend","getFileIdx","parseResult","parseSync","Error","isModuleResolver","plugin","key","getPluginKey","includes","moduleResolverWarned","normalizeBabelKey","replace","isBabelPresetTypescript","normalized","isBabelTransformTypescriptPlugin","withAllowDeclareFields","item","Array","isArray","allowDeclareFields","target","rawOptions","rest","options","ensureAllowDeclareFieldsInBabelOptions","babelOptions","scope","_babelOptions$presets","_babelOptions$plugins","presetsChanged","pluginsChanged","overridesChanged","envChanged","presets","map","plugins","overrides","baseOverrides","patchedOverrides","override","some","patchedOverride","idx","env","baseEnv","entries","Object","patchedEntries","envName","envOptions","patched","fromEntries","next","buildConfigs","services","name","pluginOptions","_parseConfig$plugins","_rawConfig$plugins","commonOptions","ast","inputSourceMap","root","sourceFileName","sourceMaps","isTypescriptFile","endsWith","rawConfig","buildOptions","useBabelConfigs","isFeatureEnabled","features","configFile","loadBabelOptions","babelrc","parseHasModuleResolver","rawHasModuleResolver","_parseConfig$plugins$","_parseConfig$plugins2","_rawConfig$plugins2","console","warn","filter","evalConfig","loadAndParse","loadedCode","eventEmitter","stripQueryAndHash","extension","extname","extensions","isAbsolute","evaluator","reason","undefined","cachedEntrypoint","cache","get","initialCode","readFileSync","getOrParse","perf","resolve","paths","dirname","default","getStack","entrypoint","stack","parents","push","mergeOnly","a","b","result","Set","forEach","add","sort","isSuperSet","aSet","every","has","exports"],"sources":["../../src/transform/Entrypoint.helpers.ts"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { dirname, extname, isAbsolute } from 'path';\n\nimport type { TransformOptions, PluginItem } from '@babel/core';\nimport type { File } from '@babel/types';\n\nimport type {\n Debugger,\n EvalRule,\n Evaluator,\n StrictOptions,\n} from '@wyw-in-js/shared';\nimport { logger, isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport { buildOptions } from '../options/buildOptions';\nimport { loadBabelOptions } from '../options/loadBabelOptions';\nimport type { ParentEntrypoint } from '../types';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { getPluginKey } from '../utils/getPluginKey';\n\nimport type { IEntrypointCode, IIgnoredEntrypoint } from './Entrypoint.types';\nimport type { Services } from './types';\nimport { stripQueryAndHash } from '../utils/parseRequest';\n\nexport function getMatchedRule(\n rules: EvalRule[],\n filename: string,\n code: string\n): EvalRule {\n for (let i = rules.length - 1; i >= 0; i--) {\n const rule = rules[i];\n if (!rule.test) {\n return rule;\n }\n\n if (typeof rule.test === 'function' && rule.test(filename, code)) {\n return rule;\n }\n\n if (rule.test instanceof RegExp && rule.test.test(filename)) {\n return rule;\n }\n }\n\n return { action: 'ignore' };\n}\n\nexport function parseFile(\n babel: Core,\n filename: string,\n originalCode: string,\n parseConfig: TransformOptions\n): File {\n const log = logger.extend('transform:parse').extend(getFileIdx(filename));\n\n const parseResult = babel.parseSync(originalCode, parseConfig);\n if (!parseResult) {\n throw new Error(`Failed to parse ${filename}`);\n }\n\n log('stage-1', `${filename} has been parsed`);\n\n return parseResult;\n}\n\nconst isModuleResolver = (plugin: PluginItem) => {\n const key = getPluginKey(plugin);\n if (!key) return false;\n\n if (['module-resolver', 'babel-plugin-module-resolver'].includes(key)) {\n return true;\n }\n\n return /([\\\\/])babel-plugin-module-resolver\\1/.test(key);\n};\n\nlet moduleResolverWarned = false;\n\nconst normalizeBabelKey = (key: string) => key.replace(/\\\\/g, '/');\n\nconst isBabelPresetTypescript = (key: string) => {\n const normalized = normalizeBabelKey(key);\n\n if (normalized === 'typescript') return true;\n return normalized.includes('preset-typescript');\n};\n\nconst isBabelTransformTypescriptPlugin = (key: string) => {\n const normalized = normalizeBabelKey(key);\n\n if (normalized === 'transform-typescript') return true;\n return normalized.includes('plugin-transform-typescript');\n};\n\nconst withAllowDeclareFields = (item: PluginItem): PluginItem => {\n if (!Array.isArray(item)) {\n return [item, { allowDeclareFields: true }];\n }\n\n const [target, rawOptions, ...rest] = item;\n const options =\n typeof rawOptions === 'object' &&\n rawOptions !== null &&\n !Array.isArray(rawOptions)\n ? rawOptions\n : {};\n\n if ('allowDeclareFields' in options) {\n return item;\n }\n\n return [target, { ...options, allowDeclareFields: true }, ...rest];\n};\n\ntype AllowDeclareFieldsPatchScope = 'top' | 'env' | 'override';\n\nconst ensureAllowDeclareFieldsInBabelOptions = (\n babelOptions: TransformOptions,\n scope: AllowDeclareFieldsPatchScope = 'top'\n): TransformOptions => {\n let presetsChanged = false;\n let pluginsChanged = false;\n let overridesChanged = false;\n let envChanged = false;\n\n const presets = babelOptions.presets?.map((item) => {\n const key = getPluginKey(item);\n if (!key || !isBabelPresetTypescript(key)) {\n return item;\n }\n\n presetsChanged = true;\n return withAllowDeclareFields(item);\n });\n\n const plugins = babelOptions.plugins?.map((item) => {\n const key = getPluginKey(item);\n if (!key || !isBabelTransformTypescriptPlugin(key)) {\n return item;\n }\n\n pluginsChanged = true;\n return withAllowDeclareFields(item);\n });\n\n const { overrides: baseOverrides } = babelOptions;\n let overrides = baseOverrides;\n if (scope === 'top' && baseOverrides) {\n const patchedOverrides = baseOverrides.map((override) =>\n ensureAllowDeclareFieldsInBabelOptions(\n override as TransformOptions,\n 'override'\n )\n );\n\n if (\n patchedOverrides.some(\n (patchedOverride, idx) => patchedOverride !== baseOverrides[idx]\n )\n ) {\n overridesChanged = true;\n overrides = patchedOverrides;\n }\n }\n\n const { env: baseEnv } = babelOptions;\n let env = baseEnv;\n if (scope === 'top' && baseEnv) {\n const entries = Object.entries(baseEnv);\n const patchedEntries = entries.map(([envName, envOptions]) => [\n envName,\n envOptions\n ? ensureAllowDeclareFieldsInBabelOptions(envOptions, 'env')\n : envOptions,\n ]) as Array<[string, TransformOptions | null | undefined]>;\n\n if (\n patchedEntries.some(([, patched], idx) => patched !== entries[idx][1])\n ) {\n envChanged = true;\n env = Object.fromEntries(patchedEntries);\n }\n }\n\n if (!presetsChanged && !pluginsChanged && !overridesChanged && !envChanged) {\n return babelOptions;\n }\n\n const next: TransformOptions = { ...babelOptions };\n if (presetsChanged) next.presets = presets;\n if (pluginsChanged) next.plugins = plugins;\n if (overridesChanged) next.overrides = overrides;\n if (envChanged) next.env = env;\n\n return next;\n};\n\nfunction buildConfigs(\n services: Services,\n name: string,\n pluginOptions: StrictOptions,\n babelOptions: TransformOptions | undefined\n): {\n evalConfig: TransformOptions;\n parseConfig: TransformOptions;\n} {\n const { babel, options } = services;\n\n const commonOptions = {\n ast: true,\n filename: name,\n inputSourceMap: options.inputSourceMap,\n root: options.root,\n sourceFileName: name,\n sourceMaps: true,\n };\n\n const isTypescriptFile =\n name.endsWith('.ts') ||\n name.endsWith('.tsx') ||\n name.endsWith('.mts') ||\n name.endsWith('.cts');\n\n let rawConfig = buildOptions(\n pluginOptions?.babelOptions,\n babelOptions,\n commonOptions\n );\n\n if (isTypescriptFile) {\n rawConfig = ensureAllowDeclareFieldsInBabelOptions(rawConfig);\n }\n\n const useBabelConfigs = isFeatureEnabled(\n pluginOptions.features,\n 'useBabelConfigs',\n name\n );\n\n if (!useBabelConfigs) {\n rawConfig = {\n ...rawConfig,\n configFile: false,\n };\n }\n\n const parseConfig = loadBabelOptions(babel, name, {\n babelrc: useBabelConfigs,\n ...rawConfig,\n });\n\n const parseHasModuleResolver = parseConfig.plugins?.some(isModuleResolver);\n const rawHasModuleResolver = rawConfig.plugins?.some(isModuleResolver);\n\n if (parseHasModuleResolver && !rawHasModuleResolver) {\n if (!moduleResolverWarned) {\n // eslint-disable-next-line no-console\n console.warn(\n `[wyw-in-js] ${name} has a module-resolver plugin in its babelrc, but it is not present ` +\n `in the babelOptions for the wyw-in-js plugin. This works for now but will be an error in the future. ` +\n `Please add the module-resolver plugin to the babelOptions for the wyw-in-js plugin.`\n );\n\n moduleResolverWarned = true;\n }\n\n rawConfig = {\n ...rawConfig,\n plugins: [\n ...(parseConfig.plugins?.filter((plugin) => isModuleResolver(plugin)) ??\n []),\n ...(rawConfig.plugins ?? []),\n ],\n };\n }\n\n const evalConfig = loadBabelOptions(babel, name, {\n babelrc: false,\n ...rawConfig,\n });\n\n return {\n evalConfig,\n parseConfig,\n };\n}\n\nexport function loadAndParse(\n services: Services,\n name: string,\n loadedCode: string | undefined,\n log: Debugger\n): IEntrypointCode | IIgnoredEntrypoint {\n const {\n babel,\n eventEmitter,\n options: { pluginOptions },\n } = services;\n\n const filename = stripQueryAndHash(name);\n const extension = extname(filename);\n\n if (!pluginOptions.extensions.includes(extension)) {\n log(\n '[createEntrypoint] %s is ignored. If you want it to be processed, you should add \\'%s\\' to the \"extensions\" option.',\n filename,\n extension\n );\n\n return {\n code: isAbsolute(filename) ? loadedCode : '',\n evaluator: 'ignored',\n reason: 'extension',\n };\n }\n\n let code = loadedCode;\n\n if (code === undefined) {\n const cachedEntrypoint = services.cache.get('entrypoints', name);\n if (\n cachedEntrypoint &&\n 'initialCode' in cachedEntrypoint &&\n typeof cachedEntrypoint.initialCode === 'string'\n ) {\n code = cachedEntrypoint.initialCode;\n }\n }\n\n code ??= readFileSync(filename, 'utf-8');\n\n const { action, babelOptions } = getMatchedRule(\n pluginOptions.rules,\n filename,\n code\n );\n\n let ast: File | undefined;\n\n const { evalConfig, parseConfig } = buildConfigs(\n services,\n filename,\n pluginOptions,\n babelOptions\n );\n\n const getOrParse = () => {\n if (ast) return ast;\n ast = eventEmitter.perf('parseFile', () =>\n parseFile(babel, name, code, parseConfig)\n );\n\n return ast;\n };\n\n if (action === 'ignore') {\n log('[createEntrypoint] %s is ignored by rule', name);\n return {\n get ast() {\n return getOrParse();\n },\n code,\n evaluator: 'ignored',\n reason: 'rule',\n };\n }\n\n const evaluator: Evaluator =\n typeof action === 'function'\n ? action\n : require(\n require.resolve(action, {\n paths: [dirname(filename)],\n })\n ).default;\n\n return {\n get ast() {\n return getOrParse();\n },\n code,\n evaluator,\n evalConfig,\n };\n}\n\nexport function getStack(entrypoint: ParentEntrypoint) {\n if (!entrypoint) return [];\n\n const stack = [entrypoint.name];\n\n let { parents } = entrypoint;\n while (parents.length) {\n stack.push(parents[0].name);\n parents = parents[0].parents;\n }\n\n return stack;\n}\n\nexport function mergeOnly(a: string[], b: string[]) {\n const result = new Set(a);\n b.forEach((item) => result.add(item));\n return [...result].filter((i) => i).sort();\n}\n\nexport const isSuperSet = <T>(a: (T | '*')[], b: (T | '*')[]) => {\n if (a.includes('*')) return true;\n if (b.length === 0) return true;\n const aSet = new Set(a);\n return b.every((item) => aSet.has(item));\n};\n"],"mappings":"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","ignoreList":[]}
@@ -40,7 +40,7 @@ class Entrypoint extends _BaseEntrypoint.BaseEntrypoint {
40
40
  this.dependencies = dependencies;
41
41
  this.loadedAndParsed = loadedAndParsed !== null && loadedAndParsed !== void 0 ? loadedAndParsed : services.loadAndParseFn(services, name, initialCode, (_parents$0$log = (_parents$ = parents[0]) === null || _parents$ === void 0 ? void 0 : _parents$.log) !== null && _parents$0$log !== void 0 ? _parents$0$log : services.log);
42
42
  if (this.loadedAndParsed.code !== undefined) {
43
- services.cache.invalidateIfChanged(name, this.loadedAndParsed.code);
43
+ services.cache.invalidateIfChanged(name, this.loadedAndParsed.code, undefined, this.initialCode === undefined ? 'fs' : 'loaded');
44
44
  }
45
45
  const code = this.loadedAndParsed.evaluator === 'ignored' ? '[IGNORED]' : this.originalCode || EMPTY_FILE;
46
46
  this.log.extend('source')('created %s (%o)\n%s', name, only, code);
@@ -102,7 +102,7 @@ class Entrypoint extends _BaseEntrypoint.BaseEntrypoint {
102
102
  cache
103
103
  } = services;
104
104
  const cached = cache.get('entrypoints', name);
105
- const changed = loadedCode !== undefined ? cache.invalidateIfChanged(name, loadedCode) : false;
105
+ const changed = loadedCode !== undefined ? cache.invalidateIfChanged(name, loadedCode, undefined, 'loaded') : false;
106
106
  if (!(cached !== null && cached !== void 0 && cached.evaluated) && cached !== null && cached !== void 0 && cached.ignored) {
107
107
  return ['cached', cached];
108
108
  }
@@ -189,7 +189,9 @@ class Entrypoint extends _BaseEntrypoint.BaseEntrypoint {
189
189
  createEvaluated() {
190
190
  const evaluatedOnly = (0, _Entrypoint.mergeOnly)(this.evaluatedOnly, this.only);
191
191
  this.log('create EvaluatedEntrypoint for %o', evaluatedOnly);
192
- return new _EvaluatedEntrypoint.EvaluatedEntrypoint(this.services, evaluatedOnly, this.exportsProxy, this.generation + 1, this.name, this.only, this.parents, this.dependencies);
192
+ const evaluated = new _EvaluatedEntrypoint.EvaluatedEntrypoint(this.services, evaluatedOnly, this.exportsProxy, this.generation + 1, this.name, this.only, this.parents, this.dependencies);
193
+ evaluated.initialCode = this.initialCode;
194
+ return evaluated;
193
195
  }
194
196
  getDependency(name) {
195
197
  return this.dependencies.get(name);
@@ -1 +1 @@
1
- {"version":3,"file":"Entrypoint.js","names":["_tsInvariant","require","_BaseEntrypoint","_Entrypoint","_isStaticallyEvaluatableModule","_EvaluatedEntrypoint","_AbortError","_BaseAction","_UnprocessedEntrypointError","EMPTY_FILE","hasLoop","name","parent","processed","includes","p","parents","found","Entrypoint","BaseEntrypoint","evaluated","onSupersedeHandlers","actionsCache","Map","hasWywMetadata","supersededWith","transformResultCode","constructor","services","initialCode","only","exports","evaluatedOnly","loadedAndParsed","resolveTasks","dependencies","generation","_parents$0$log","_parents$","loadAndParseFn","log","code","undefined","cache","invalidateIfChanged","evaluator","originalCode","extend","ignored","_this$supersededWith$","_this$supersededWith","transformedCode","_ref","_this$transformResult","_this$supersededWith2","createRoot","loadedCode","created","create","invariant","eventEmitter","perf","status","entrypoint","innerCreate","seqId","add","_cached$evaluatedOnly","cached","get","changed","mergedOnly","mergeOnly","isLoop","map","push","isSuperSet","supersede","newEntrypoint","ast","isStaticallyEvaluatableModule","length","addDependency","dependency","delete","source","set","addResolveTask","assertNotSuperseded","AbortError","assertTransformed","_this$supersededWith3","UnprocessedEntrypointError","createAction","actionType","data","abortSignal","_cached$abortSignal","has","aborted","newAction","BaseAction","entrypointEvent","type","actionIdx","idx","createChild","createEvaluated","EvaluatedEntrypoint","exportsProxy","getDependency","getResolveTask","onSupersede","callback","index","indexOf","splice","setTransformResult","res","_res$code","Boolean","metadata","isNull","newOnlyOrEntrypoint","with","forEach","handler"],"sources":["../../src/transform/Entrypoint.ts"],"sourcesContent":["import { invariant } from 'ts-invariant';\n\nimport type { ParentEntrypoint, ITransformFileResult } from '../types';\n\nimport { BaseEntrypoint } from './BaseEntrypoint';\nimport { isSuperSet, mergeOnly } from './Entrypoint.helpers';\nimport { isStaticallyEvaluatableModule } from './isStaticallyEvaluatableModule';\nimport type {\n IEntrypointCode,\n IEntrypointDependency,\n IIgnoredEntrypoint,\n} from './Entrypoint.types';\nimport { EvaluatedEntrypoint } from './EvaluatedEntrypoint';\nimport { AbortError } from './actions/AbortError';\nimport type { ActionByType } from './actions/BaseAction';\nimport { BaseAction } from './actions/BaseAction';\nimport { UnprocessedEntrypointError } from './actions/UnprocessedEntrypointError';\nimport type { Services, ActionTypes, ActionQueueItem } from './types';\n\nconst EMPTY_FILE = '=== empty file ===';\n\nfunction hasLoop(\n name: string,\n parent: ParentEntrypoint,\n processed: string[] = []\n): boolean {\n if (parent.name === name || processed.includes(parent.name)) {\n return true;\n }\n\n for (const p of parent.parents) {\n const found = hasLoop(name, p, [...processed, parent.name]);\n if (found) {\n return found;\n }\n }\n\n return false;\n}\n\nexport class Entrypoint extends BaseEntrypoint {\n public readonly evaluated = false;\n\n public readonly loadedAndParsed: IEntrypointCode | IIgnoredEntrypoint;\n\n protected onSupersedeHandlers: Array<(newEntrypoint: Entrypoint) => void> =\n [];\n\n private actionsCache: Map<\n ActionTypes,\n Map<unknown, BaseAction<ActionQueueItem>>\n > = new Map();\n\n #hasWywMetadata: boolean = false;\n\n #supersededWith: Entrypoint | null = null;\n\n #transformResultCode: string | null = null;\n\n private constructor(\n services: Services,\n parents: ParentEntrypoint[],\n public readonly initialCode: string | undefined,\n name: string,\n only: string[],\n exports: Record<string | symbol, unknown> | undefined,\n evaluatedOnly: string[],\n loadedAndParsed?: IEntrypointCode | IIgnoredEntrypoint,\n protected readonly resolveTasks = new Map<\n string,\n Promise<IEntrypointDependency>\n >(),\n readonly dependencies = new Map<string, IEntrypointDependency>(),\n generation = 1\n ) {\n super(\n services,\n evaluatedOnly,\n exports,\n generation,\n name,\n only,\n parents,\n dependencies\n );\n\n this.loadedAndParsed =\n loadedAndParsed ??\n services.loadAndParseFn(\n services,\n name,\n initialCode,\n parents[0]?.log ?? services.log\n );\n\n if (this.loadedAndParsed.code !== undefined) {\n services.cache.invalidateIfChanged(name, this.loadedAndParsed.code);\n }\n\n const code =\n this.loadedAndParsed.evaluator === 'ignored'\n ? '[IGNORED]'\n : this.originalCode || EMPTY_FILE;\n\n this.log.extend('source')('created %s (%o)\\n%s', name, only, code);\n }\n\n public get ignored() {\n return this.loadedAndParsed.evaluator === 'ignored';\n }\n\n public get originalCode() {\n return this.loadedAndParsed.code;\n }\n\n public get supersededWith(): Entrypoint | null {\n return this.#supersededWith?.supersededWith ?? this.#supersededWith;\n }\n\n public get transformedCode(): string | null {\n return (\n this.#transformResultCode ?? this.supersededWith?.transformedCode ?? null\n );\n }\n\n public static createRoot(\n services: Services,\n name: string,\n only: string[],\n loadedCode: string | undefined\n ): Entrypoint {\n const created = Entrypoint.create(services, null, name, only, loadedCode);\n invariant(created !== 'loop', 'loop detected');\n\n return created;\n }\n\n /**\n * Creates an entrypoint for the specified file.\n * If there is already an entrypoint for this file, there will be four possible outcomes:\n * 1. If `loadedCode` is specified and is different from the one that was used to create the existing entrypoint,\n * the existing entrypoint will be superseded by a new one and all cached results for it will be invalidated.\n * It can happen if the file was changed and the watcher notified us about it, or we received a new version\n * of the file from a loader whereas the previous one was loaded from the filesystem.\n * The new entrypoint will be returned.\n * 2. If `only` is subset of the existing entrypoint's `only`, the existing entrypoint will be returned.\n * 3. If `only` is superset of the existing entrypoint's `only`, the existing entrypoint will be superseded and the new one will be returned.\n * 4. If a loop is detected, 'ignored' will be returned, the existing entrypoint will be superseded or not depending on the `only` value.\n */\n protected static create(\n services: Services,\n parent: ParentEntrypoint | null,\n name: string,\n only: string[],\n loadedCode: string | undefined\n ): Entrypoint | 'loop' {\n const { cache, eventEmitter } = services;\n return eventEmitter.perf('createEntrypoint', () => {\n const [status, entrypoint] = Entrypoint.innerCreate(\n services,\n parent\n ? {\n evaluated: parent.evaluated,\n log: parent.log,\n name: parent.name,\n parents: parent.parents,\n seqId: parent.seqId,\n }\n : null,\n name,\n only,\n loadedCode\n );\n\n if (status !== 'cached') {\n cache.add('entrypoints', name, entrypoint);\n }\n\n return status === 'loop' ? 'loop' : entrypoint;\n });\n }\n\n private static innerCreate(\n services: Services,\n parent: ParentEntrypoint | null,\n name: string,\n only: string[],\n loadedCode: string | undefined\n ): ['loop' | 'created' | 'cached', Entrypoint] {\n const { cache } = services;\n\n const cached = cache.get('entrypoints', name);\n const changed =\n loadedCode !== undefined\n ? cache.invalidateIfChanged(name, loadedCode)\n : false;\n\n if (!cached?.evaluated && cached?.ignored) {\n return ['cached', cached];\n }\n\n const exports = cached?.exports;\n const evaluatedOnly = changed ? [] : cached?.evaluatedOnly ?? [];\n\n const mergedOnly = cached?.only ? mergeOnly(cached.only, only) : [...only];\n\n if (cached?.evaluated) {\n cached.log('is already evaluated with', cached.evaluatedOnly);\n }\n\n if (!changed && cached && !cached.evaluated) {\n const isLoop = parent && hasLoop(name, parent);\n if (isLoop) {\n parent.log('[createEntrypoint] %s is a loop', name);\n }\n\n if (parent && !cached.parents.map((p) => p.name).includes(parent.name)) {\n cached.parents.push(parent);\n }\n\n if (isSuperSet(cached.only, mergedOnly)) {\n cached.log('is cached', name);\n return [isLoop ? 'loop' : 'cached', cached];\n }\n\n cached.log(\n 'is cached, but with different `only` %o (the cached one %o)',\n only,\n cached?.only\n );\n\n return [isLoop ? 'loop' : 'created', cached.supersede(mergedOnly)];\n }\n\n const newEntrypoint = new Entrypoint(\n services,\n parent ? [parent] : [],\n loadedCode,\n name,\n mergedOnly,\n exports,\n evaluatedOnly,\n undefined,\n cached && 'resolveTasks' in cached ? cached.resolveTasks : undefined,\n cached && 'dependencies' in cached ? cached.dependencies : undefined,\n cached ? cached.generation + 1 : 1\n );\n\n if (\n !newEntrypoint.ignored &&\n !newEntrypoint.only.includes('*') &&\n !newEntrypoint.only.includes('__wywPreval') &&\n !newEntrypoint.only.includes('side-effect')\n ) {\n const { ast } = newEntrypoint.loadedAndParsed;\n\n if (ast && isStaticallyEvaluatableModule(ast)) {\n newEntrypoint.log(\n '[entrypoint] promote `only` to \"*\" for statically evaluatable module'\n );\n newEntrypoint.only.length = 0;\n newEntrypoint.only.push('*');\n }\n }\n\n if (cached && !cached.evaluated) {\n cached.log('is cached, but with different code');\n cached.supersede(newEntrypoint);\n }\n\n return ['created', newEntrypoint];\n }\n\n public addDependency(dependency: IEntrypointDependency): void {\n this.resolveTasks.delete(dependency.source);\n this.dependencies.set(dependency.source, dependency);\n }\n\n public addResolveTask(\n name: string,\n dependency: Promise<IEntrypointDependency>\n ): void {\n this.resolveTasks.set(name, dependency);\n }\n\n public assertNotSuperseded() {\n if (this.supersededWith) {\n this.log('superseded');\n throw new AbortError('superseded');\n }\n }\n\n public assertTransformed() {\n if (this.transformedCode === null) {\n this.log('not transformed');\n throw new UnprocessedEntrypointError(this.supersededWith ?? this);\n }\n }\n\n public createAction<\n TType extends ActionTypes,\n TAction extends ActionByType<TType>,\n >(\n actionType: TType,\n data: TAction['data'],\n abortSignal: AbortSignal | null = null\n ): BaseAction<TAction> {\n if (!this.actionsCache.has(actionType)) {\n this.actionsCache.set(actionType, new Map());\n }\n\n const cache = this.actionsCache.get(actionType)!;\n const cached = cache.get(data);\n if (cached && !cached.abortSignal?.aborted) {\n return cached as BaseAction<TAction>;\n }\n\n const newAction = new BaseAction<TAction>(\n actionType as TAction['type'],\n this.services,\n this,\n data,\n abortSignal\n );\n\n cache.set(data, newAction);\n\n this.services.eventEmitter.entrypointEvent(this.seqId, {\n type: 'actionCreated',\n actionType,\n actionIdx: newAction.idx,\n });\n\n return newAction;\n }\n\n public createChild(\n name: string,\n only: string[],\n loadedCode?: string\n ): Entrypoint | 'loop' {\n return Entrypoint.create(this.services, this, name, only, loadedCode);\n }\n\n public createEvaluated() {\n const evaluatedOnly = mergeOnly(this.evaluatedOnly, this.only);\n this.log('create EvaluatedEntrypoint for %o', evaluatedOnly);\n\n return new EvaluatedEntrypoint(\n this.services,\n evaluatedOnly,\n this.exportsProxy,\n this.generation + 1,\n this.name,\n this.only,\n this.parents,\n this.dependencies\n );\n }\n\n public getDependency(name: string): IEntrypointDependency | undefined {\n return this.dependencies.get(name);\n }\n\n public getResolveTask(\n name: string\n ): Promise<IEntrypointDependency> | undefined {\n return this.resolveTasks.get(name);\n }\n\n public hasWywMetadata() {\n return this.#hasWywMetadata;\n }\n\n public onSupersede(callback: (newEntrypoint: Entrypoint) => void) {\n if (this.#supersededWith) {\n callback(this.#supersededWith);\n return () => {};\n }\n\n this.onSupersedeHandlers.push(callback);\n\n return () => {\n const index = this.onSupersedeHandlers.indexOf(callback);\n if (index >= 0) {\n this.onSupersedeHandlers.splice(index, 1);\n }\n };\n }\n\n public setTransformResult(res: ITransformFileResult | null) {\n this.#hasWywMetadata = Boolean(res?.metadata);\n this.#transformResultCode = res?.code ?? null;\n\n this.services.eventEmitter.entrypointEvent(this.seqId, {\n isNull: res === null,\n type: 'setTransformResult',\n });\n }\n\n private supersede(newOnlyOrEntrypoint: string[] | Entrypoint): Entrypoint {\n const newEntrypoint =\n newOnlyOrEntrypoint instanceof Entrypoint\n ? newOnlyOrEntrypoint\n : new Entrypoint(\n this.services,\n this.parents,\n this.initialCode,\n this.name,\n newOnlyOrEntrypoint,\n this.exports,\n this.evaluatedOnly,\n this.loadedAndParsed,\n this.resolveTasks,\n this.dependencies,\n this.generation + 1\n );\n\n this.services.eventEmitter.entrypointEvent(this.seqId, {\n type: 'superseded',\n with: newEntrypoint.seqId,\n });\n this.log(\n 'superseded by %s (%o -> %o)',\n newEntrypoint.name,\n this.only,\n newEntrypoint.only\n );\n this.#supersededWith = newEntrypoint;\n this.onSupersedeHandlers.forEach((handler) => handler(newEntrypoint));\n\n return newEntrypoint;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Entrypoint.js","names":["_tsInvariant","require","_BaseEntrypoint","_Entrypoint","_isStaticallyEvaluatableModule","_EvaluatedEntrypoint","_AbortError","_BaseAction","_UnprocessedEntrypointError","EMPTY_FILE","hasLoop","name","parent","processed","includes","p","parents","found","Entrypoint","BaseEntrypoint","evaluated","onSupersedeHandlers","actionsCache","Map","hasWywMetadata","supersededWith","transformResultCode","constructor","services","initialCode","only","exports","evaluatedOnly","loadedAndParsed","resolveTasks","dependencies","generation","_parents$0$log","_parents$","loadAndParseFn","log","code","undefined","cache","invalidateIfChanged","evaluator","originalCode","extend","ignored","_this$supersededWith$","_this$supersededWith","transformedCode","_ref","_this$transformResult","_this$supersededWith2","createRoot","loadedCode","created","create","invariant","eventEmitter","perf","status","entrypoint","innerCreate","seqId","add","_cached$evaluatedOnly","cached","get","changed","mergedOnly","mergeOnly","isLoop","map","push","isSuperSet","supersede","newEntrypoint","ast","isStaticallyEvaluatableModule","length","addDependency","dependency","delete","source","set","addResolveTask","assertNotSuperseded","AbortError","assertTransformed","_this$supersededWith3","UnprocessedEntrypointError","createAction","actionType","data","abortSignal","_cached$abortSignal","has","aborted","newAction","BaseAction","entrypointEvent","type","actionIdx","idx","createChild","createEvaluated","EvaluatedEntrypoint","exportsProxy","getDependency","getResolveTask","onSupersede","callback","index","indexOf","splice","setTransformResult","res","_res$code","Boolean","metadata","isNull","newOnlyOrEntrypoint","with","forEach","handler"],"sources":["../../src/transform/Entrypoint.ts"],"sourcesContent":["import { invariant } from 'ts-invariant';\n\nimport type { ParentEntrypoint, ITransformFileResult } from '../types';\n\nimport { BaseEntrypoint } from './BaseEntrypoint';\nimport { isSuperSet, mergeOnly } from './Entrypoint.helpers';\nimport { isStaticallyEvaluatableModule } from './isStaticallyEvaluatableModule';\nimport type {\n IEntrypointCode,\n IEntrypointDependency,\n IIgnoredEntrypoint,\n} from './Entrypoint.types';\nimport { EvaluatedEntrypoint } from './EvaluatedEntrypoint';\nimport { AbortError } from './actions/AbortError';\nimport type { ActionByType } from './actions/BaseAction';\nimport { BaseAction } from './actions/BaseAction';\nimport { UnprocessedEntrypointError } from './actions/UnprocessedEntrypointError';\nimport type { Services, ActionTypes, ActionQueueItem } from './types';\n\nconst EMPTY_FILE = '=== empty file ===';\n\nfunction hasLoop(\n name: string,\n parent: ParentEntrypoint,\n processed: string[] = []\n): boolean {\n if (parent.name === name || processed.includes(parent.name)) {\n return true;\n }\n\n for (const p of parent.parents) {\n const found = hasLoop(name, p, [...processed, parent.name]);\n if (found) {\n return found;\n }\n }\n\n return false;\n}\n\nexport class Entrypoint extends BaseEntrypoint {\n public readonly evaluated = false;\n\n public readonly loadedAndParsed: IEntrypointCode | IIgnoredEntrypoint;\n\n protected onSupersedeHandlers: Array<(newEntrypoint: Entrypoint) => void> =\n [];\n\n private actionsCache: Map<\n ActionTypes,\n Map<unknown, BaseAction<ActionQueueItem>>\n > = new Map();\n\n #hasWywMetadata: boolean = false;\n\n #supersededWith: Entrypoint | null = null;\n\n #transformResultCode: string | null = null;\n\n private constructor(\n services: Services,\n parents: ParentEntrypoint[],\n public readonly initialCode: string | undefined,\n name: string,\n only: string[],\n exports: Record<string | symbol, unknown> | undefined,\n evaluatedOnly: string[],\n loadedAndParsed?: IEntrypointCode | IIgnoredEntrypoint,\n protected readonly resolveTasks = new Map<\n string,\n Promise<IEntrypointDependency>\n >(),\n readonly dependencies = new Map<string, IEntrypointDependency>(),\n generation = 1\n ) {\n super(\n services,\n evaluatedOnly,\n exports,\n generation,\n name,\n only,\n parents,\n dependencies\n );\n\n this.loadedAndParsed =\n loadedAndParsed ??\n services.loadAndParseFn(\n services,\n name,\n initialCode,\n parents[0]?.log ?? services.log\n );\n\n if (this.loadedAndParsed.code !== undefined) {\n services.cache.invalidateIfChanged(\n name,\n this.loadedAndParsed.code,\n undefined,\n this.initialCode === undefined ? 'fs' : 'loaded'\n );\n }\n\n const code =\n this.loadedAndParsed.evaluator === 'ignored'\n ? '[IGNORED]'\n : this.originalCode || EMPTY_FILE;\n\n this.log.extend('source')('created %s (%o)\\n%s', name, only, code);\n }\n\n public get ignored() {\n return this.loadedAndParsed.evaluator === 'ignored';\n }\n\n public get originalCode() {\n return this.loadedAndParsed.code;\n }\n\n public get supersededWith(): Entrypoint | null {\n return this.#supersededWith?.supersededWith ?? this.#supersededWith;\n }\n\n public get transformedCode(): string | null {\n return (\n this.#transformResultCode ?? this.supersededWith?.transformedCode ?? null\n );\n }\n\n public static createRoot(\n services: Services,\n name: string,\n only: string[],\n loadedCode: string | undefined\n ): Entrypoint {\n const created = Entrypoint.create(services, null, name, only, loadedCode);\n invariant(created !== 'loop', 'loop detected');\n\n return created;\n }\n\n /**\n * Creates an entrypoint for the specified file.\n * If there is already an entrypoint for this file, there will be four possible outcomes:\n * 1. If `loadedCode` is specified and is different from the one that was used to create the existing entrypoint,\n * the existing entrypoint will be superseded by a new one and all cached results for it will be invalidated.\n * It can happen if the file was changed and the watcher notified us about it, or we received a new version\n * of the file from a loader whereas the previous one was loaded from the filesystem.\n * The new entrypoint will be returned.\n * 2. If `only` is subset of the existing entrypoint's `only`, the existing entrypoint will be returned.\n * 3. If `only` is superset of the existing entrypoint's `only`, the existing entrypoint will be superseded and the new one will be returned.\n * 4. If a loop is detected, 'ignored' will be returned, the existing entrypoint will be superseded or not depending on the `only` value.\n */\n protected static create(\n services: Services,\n parent: ParentEntrypoint | null,\n name: string,\n only: string[],\n loadedCode: string | undefined\n ): Entrypoint | 'loop' {\n const { cache, eventEmitter } = services;\n return eventEmitter.perf('createEntrypoint', () => {\n const [status, entrypoint] = Entrypoint.innerCreate(\n services,\n parent\n ? {\n evaluated: parent.evaluated,\n log: parent.log,\n name: parent.name,\n parents: parent.parents,\n seqId: parent.seqId,\n }\n : null,\n name,\n only,\n loadedCode\n );\n\n if (status !== 'cached') {\n cache.add('entrypoints', name, entrypoint);\n }\n\n return status === 'loop' ? 'loop' : entrypoint;\n });\n }\n\n private static innerCreate(\n services: Services,\n parent: ParentEntrypoint | null,\n name: string,\n only: string[],\n loadedCode: string | undefined\n ): ['loop' | 'created' | 'cached', Entrypoint] {\n const { cache } = services;\n\n const cached = cache.get('entrypoints', name);\n const changed =\n loadedCode !== undefined\n ? cache.invalidateIfChanged(name, loadedCode, undefined, 'loaded')\n : false;\n\n if (!cached?.evaluated && cached?.ignored) {\n return ['cached', cached];\n }\n\n const exports = cached?.exports;\n const evaluatedOnly = changed ? [] : cached?.evaluatedOnly ?? [];\n\n const mergedOnly = cached?.only ? mergeOnly(cached.only, only) : [...only];\n\n if (cached?.evaluated) {\n cached.log('is already evaluated with', cached.evaluatedOnly);\n }\n\n if (!changed && cached && !cached.evaluated) {\n const isLoop = parent && hasLoop(name, parent);\n if (isLoop) {\n parent.log('[createEntrypoint] %s is a loop', name);\n }\n\n if (parent && !cached.parents.map((p) => p.name).includes(parent.name)) {\n cached.parents.push(parent);\n }\n\n if (isSuperSet(cached.only, mergedOnly)) {\n cached.log('is cached', name);\n return [isLoop ? 'loop' : 'cached', cached];\n }\n\n cached.log(\n 'is cached, but with different `only` %o (the cached one %o)',\n only,\n cached?.only\n );\n\n return [isLoop ? 'loop' : 'created', cached.supersede(mergedOnly)];\n }\n\n const newEntrypoint = new Entrypoint(\n services,\n parent ? [parent] : [],\n loadedCode,\n name,\n mergedOnly,\n exports,\n evaluatedOnly,\n undefined,\n cached && 'resolveTasks' in cached ? cached.resolveTasks : undefined,\n cached && 'dependencies' in cached ? cached.dependencies : undefined,\n cached ? cached.generation + 1 : 1\n );\n\n if (\n !newEntrypoint.ignored &&\n !newEntrypoint.only.includes('*') &&\n !newEntrypoint.only.includes('__wywPreval') &&\n !newEntrypoint.only.includes('side-effect')\n ) {\n const { ast } = newEntrypoint.loadedAndParsed;\n\n if (ast && isStaticallyEvaluatableModule(ast)) {\n newEntrypoint.log(\n '[entrypoint] promote `only` to \"*\" for statically evaluatable module'\n );\n newEntrypoint.only.length = 0;\n newEntrypoint.only.push('*');\n }\n }\n\n if (cached && !cached.evaluated) {\n cached.log('is cached, but with different code');\n cached.supersede(newEntrypoint);\n }\n\n return ['created', newEntrypoint];\n }\n\n public addDependency(dependency: IEntrypointDependency): void {\n this.resolveTasks.delete(dependency.source);\n this.dependencies.set(dependency.source, dependency);\n }\n\n public addResolveTask(\n name: string,\n dependency: Promise<IEntrypointDependency>\n ): void {\n this.resolveTasks.set(name, dependency);\n }\n\n public assertNotSuperseded() {\n if (this.supersededWith) {\n this.log('superseded');\n throw new AbortError('superseded');\n }\n }\n\n public assertTransformed() {\n if (this.transformedCode === null) {\n this.log('not transformed');\n throw new UnprocessedEntrypointError(this.supersededWith ?? this);\n }\n }\n\n public createAction<\n TType extends ActionTypes,\n TAction extends ActionByType<TType>,\n >(\n actionType: TType,\n data: TAction['data'],\n abortSignal: AbortSignal | null = null\n ): BaseAction<TAction> {\n if (!this.actionsCache.has(actionType)) {\n this.actionsCache.set(actionType, new Map());\n }\n\n const cache = this.actionsCache.get(actionType)!;\n const cached = cache.get(data);\n if (cached && !cached.abortSignal?.aborted) {\n return cached as BaseAction<TAction>;\n }\n\n const newAction = new BaseAction<TAction>(\n actionType as TAction['type'],\n this.services,\n this,\n data,\n abortSignal\n );\n\n cache.set(data, newAction);\n\n this.services.eventEmitter.entrypointEvent(this.seqId, {\n type: 'actionCreated',\n actionType,\n actionIdx: newAction.idx,\n });\n\n return newAction;\n }\n\n public createChild(\n name: string,\n only: string[],\n loadedCode?: string\n ): Entrypoint | 'loop' {\n return Entrypoint.create(this.services, this, name, only, loadedCode);\n }\n\n public createEvaluated() {\n const evaluatedOnly = mergeOnly(this.evaluatedOnly, this.only);\n this.log('create EvaluatedEntrypoint for %o', evaluatedOnly);\n\n const evaluated = new EvaluatedEntrypoint(\n this.services,\n evaluatedOnly,\n this.exportsProxy,\n this.generation + 1,\n this.name,\n this.only,\n this.parents,\n this.dependencies\n );\n\n evaluated.initialCode = this.initialCode;\n\n return evaluated;\n }\n\n public getDependency(name: string): IEntrypointDependency | undefined {\n return this.dependencies.get(name);\n }\n\n public getResolveTask(\n name: string\n ): Promise<IEntrypointDependency> | undefined {\n return this.resolveTasks.get(name);\n }\n\n public hasWywMetadata() {\n return this.#hasWywMetadata;\n }\n\n public onSupersede(callback: (newEntrypoint: Entrypoint) => void) {\n if (this.#supersededWith) {\n callback(this.#supersededWith);\n return () => {};\n }\n\n this.onSupersedeHandlers.push(callback);\n\n return () => {\n const index = this.onSupersedeHandlers.indexOf(callback);\n if (index >= 0) {\n this.onSupersedeHandlers.splice(index, 1);\n }\n };\n }\n\n public setTransformResult(res: ITransformFileResult | null) {\n this.#hasWywMetadata = Boolean(res?.metadata);\n this.#transformResultCode = res?.code ?? null;\n\n this.services.eventEmitter.entrypointEvent(this.seqId, {\n isNull: res === null,\n type: 'setTransformResult',\n });\n }\n\n private supersede(newOnlyOrEntrypoint: string[] | Entrypoint): Entrypoint {\n const newEntrypoint =\n newOnlyOrEntrypoint instanceof Entrypoint\n ? newOnlyOrEntrypoint\n : new Entrypoint(\n this.services,\n this.parents,\n this.initialCode,\n this.name,\n newOnlyOrEntrypoint,\n this.exports,\n this.evaluatedOnly,\n this.loadedAndParsed,\n this.resolveTasks,\n this.dependencies,\n this.generation + 1\n );\n\n this.services.eventEmitter.entrypointEvent(this.seqId, {\n type: 'superseded',\n with: newEntrypoint.seqId,\n });\n this.log(\n 'superseded by %s (%o -> %o)',\n newEntrypoint.name,\n this.only,\n newEntrypoint.only\n );\n this.#supersededWith = newEntrypoint;\n this.onSupersedeHandlers.forEach((handler) => handler(newEntrypoint));\n\n return newEntrypoint;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"EvaluatedEntrypoint.js","names":["_BaseEntrypoint","require","EvaluatedEntrypoint","BaseEntrypoint","evaluated","ignored","exports"],"sources":["../../src/transform/EvaluatedEntrypoint.ts"],"sourcesContent":["import type { Debugger } from '@wyw-in-js/shared';\n\nimport { BaseEntrypoint } from './BaseEntrypoint';\nimport type { IEntrypointDependency } from './Entrypoint.types';\n\nexport interface IEvaluatedEntrypoint {\n dependencies: Map<string, IEntrypointDependency>;\n evaluated: true;\n evaluatedOnly: string[];\n exports: Record<string | symbol, unknown>;\n generation: number;\n ignored: false;\n log: Debugger;\n only: string[];\n}\n\nexport class EvaluatedEntrypoint\n extends BaseEntrypoint\n implements IEvaluatedEntrypoint\n{\n public readonly evaluated = true;\n\n public readonly ignored = false;\n}\n"],"mappings":";;;;;;AAEA,IAAAA,eAAA,GAAAC,OAAA;AAcO,MAAMC,mBAAmB,SACtBC,8BAAc,CAExB;EACkBC,SAAS,GAAG,IAAI;EAEhBC,OAAO,GAAG,KAAK;AACjC;AAACC,OAAA,CAAAJ,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"file":"EvaluatedEntrypoint.js","names":["_BaseEntrypoint","require","EvaluatedEntrypoint","BaseEntrypoint","evaluated","ignored","exports"],"sources":["../../src/transform/EvaluatedEntrypoint.ts"],"sourcesContent":["import type { Debugger } from '@wyw-in-js/shared';\n\nimport { BaseEntrypoint } from './BaseEntrypoint';\nimport type { IEntrypointDependency } from './Entrypoint.types';\n\nexport interface IEvaluatedEntrypoint {\n dependencies: Map<string, IEntrypointDependency>;\n evaluated: true;\n evaluatedOnly: string[];\n exports: Record<string | symbol, unknown>;\n generation: number;\n ignored: false;\n initialCode?: string;\n log: Debugger;\n only: string[];\n}\n\nexport class EvaluatedEntrypoint\n extends BaseEntrypoint\n implements IEvaluatedEntrypoint\n{\n public readonly evaluated = true;\n\n public readonly ignored = false;\n\n public initialCode?: string;\n}\n"],"mappings":";;;;;;AAEA,IAAAA,eAAA,GAAAC,OAAA;AAeO,MAAMC,mBAAmB,SACtBC,8BAAc,CAExB;EACkBC,SAAS,GAAG,IAAI;EAEhBC,OAAO,GAAG,KAAK;AAGjC;AAACC,OAAA,CAAAJ,mBAAA,GAAAA,mBAAA","ignoreList":[]}
@@ -59,7 +59,7 @@ class BaseAction {
59
59
  }
60
60
  run(handler) {
61
61
  if (this.handler && this.handler !== handler) {
62
- throw new Error(`action handler is already set`);
62
+ throw new Error(`action handler is already set for ${this.ref} (${this.entrypoint.name})`);
63
63
  }
64
64
  this.handler = handler;
65
65
  if (!this.activeScenario) {
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAction.js","names":["require","_types","actionIdx","BaseAction","result","Pending","activeScenario","activeScenarioNextResults","handler","constructor","type","services","entrypoint","data","abortSignal","idx","toString","padStart","log","extend","ref","createAbortSignal","abortController","AbortController","unsubscribeFromParentAbort","onAbort","abort","unsubscribeFromSupersede","onSupersede","signal","Symbol","dispose","getNext","fn","_this$abortSignal","addEventListener","_this$abortSignal2","removeEventListener","run","Error","call","nextIdx","throwFn","e","emitAction","throw","nextFn","arg","next","processNextResult","onError","then","r","done","value","push","processError","length","nextResult","errorInGenerator","recover","activeScenarioError","processNext","rethrowActiveScenarioError","yieldIdx","eventEmitter","action","exports"],"sources":["../../../src/transform/actions/BaseAction.ts"],"sourcesContent":["/* eslint-disable no-plusplus */\nimport '../../utils/dispose-polyfill';\nimport type { Debugger } from '@wyw-in-js/shared';\n\nimport type { Entrypoint } from '../Entrypoint';\nimport type {\n ActionQueueItem,\n ActionTypes,\n AnyIteratorResult,\n AsyncScenarioForAction,\n Handler,\n IBaseAction,\n Services,\n SyncScenarioForAction,\n TypeOfResult,\n YieldResult,\n} from '../types';\nimport { Pending } from '../types';\n\nlet actionIdx = 0;\n\nexport type ActionByType<TType extends ActionTypes> = Extract<\n ActionQueueItem,\n {\n type: TType;\n }\n>;\n\ntype GetBase<TAction extends ActionQueueItem> = IBaseAction<\n TAction,\n TypeOfResult<TAction>,\n TAction['data']\n>;\n\nexport class BaseAction<TAction extends ActionQueueItem>\n implements GetBase<TAction>\n{\n public readonly idx: string;\n\n public result: TypeOfResult<TAction> | typeof Pending = Pending;\n\n private activeScenario:\n | SyncScenarioForAction<TAction>\n | AsyncScenarioForAction<TAction>\n | null = null;\n\n private activeScenarioError?: unknown;\n\n private activeScenarioNextResults: AnyIteratorResult<\n 'async' | 'sync',\n TypeOfResult<TAction>\n >[] = [];\n\n private handler: null | unknown = null;\n\n public constructor(\n public readonly type: TAction['type'],\n public readonly services: Services,\n public readonly entrypoint: Entrypoint,\n public readonly data: TAction['data'],\n public readonly abortSignal: AbortSignal | null\n ) {\n actionIdx += 1;\n this.idx = actionIdx.toString(16).padStart(6, '0');\n }\n\n public get log(): Debugger {\n return this.entrypoint.log.extend(this.ref);\n }\n\n public get ref() {\n return `${this.type}@${this.idx}`;\n }\n\n public createAbortSignal(): AbortSignal & Disposable {\n const abortController = new AbortController();\n\n const unsubscribeFromParentAbort = this.onAbort(() => {\n this.entrypoint.log('parent aborted');\n abortController.abort();\n });\n\n const unsubscribeFromSupersede = this.entrypoint.onSupersede(() => {\n this.entrypoint.log('entrypoint superseded, aborting processing');\n abortController.abort();\n });\n\n const abortSignal = abortController.signal as AbortSignal & Disposable;\n abortSignal[Symbol.dispose] = () => {\n unsubscribeFromParentAbort();\n unsubscribeFromSupersede();\n };\n\n return abortSignal;\n }\n\n public *getNext<\n TNextType extends ActionTypes,\n TNextAction extends ActionByType<TNextType> = ActionByType<TNextType>,\n >(\n type: TNextType,\n entrypoint: Entrypoint,\n data: TNextAction['data'],\n abortSignal: AbortSignal | null = this.abortSignal\n ): Generator<\n [TNextType, Entrypoint, TNextAction['data'], AbortSignal | null],\n TypeOfResult<TNextAction>,\n YieldResult\n > {\n return (yield [\n type,\n entrypoint,\n data,\n abortSignal,\n ]) as TypeOfResult<TNextAction>;\n }\n\n public onAbort(fn: () => void): () => void {\n this.abortSignal?.addEventListener('abort', fn);\n\n return () => {\n this.abortSignal?.removeEventListener('abort', fn);\n };\n }\n\n public run<\n TMode extends 'async' | 'sync',\n THandler extends Handler<TMode, TAction> = Handler<TMode, TAction>,\n >(handler: THandler) {\n type IterationResult = AnyIteratorResult<TMode, TypeOfResult<TAction>>;\n\n if (this.handler && this.handler !== handler) {\n throw new Error(`action handler is already set`);\n }\n\n this.handler = handler;\n\n if (!this.activeScenario) {\n this.activeScenario = handler.call(this);\n this.activeScenarioNextResults = [];\n }\n\n let nextIdx = 0;\n\n const throwFn = (e: unknown) =>\n this.emitAction(nextIdx, () => this.activeScenario!.throw(e));\n\n const nextFn = (arg: YieldResult) =>\n this.emitAction(nextIdx, () => this.activeScenario!.next(arg));\n\n const processNextResult = (\n result: IterationResult,\n onError?: (e: unknown) => void\n ) => {\n if ('then' in result) {\n result.then((r) => {\n if (r.done) {\n this.result = r.value;\n }\n }, onError);\n } else if (result.done) {\n this.result = result.value;\n }\n\n this.activeScenarioNextResults.push(result);\n };\n\n const processError = (e: unknown) => {\n if (this.activeScenarioNextResults.length > nextIdx) {\n this.log(\n 'error was already handled in another branch, result idx is %d',\n nextIdx\n );\n return;\n }\n\n this.log('error processing, result idx is %d', nextIdx);\n\n try {\n const nextResult = throwFn(e);\n processNextResult(nextResult as IterationResult, processError);\n } catch (errorInGenerator) {\n const { recover } = handler;\n if (recover) {\n const nextResult = {\n done: false,\n value: recover(errorInGenerator, this),\n };\n\n processNextResult(nextResult as IterationResult, processError);\n return;\n }\n\n this.activeScenarioError = errorInGenerator;\n throw errorInGenerator;\n }\n };\n\n const processNext = (arg: YieldResult) => {\n if (this.activeScenarioNextResults.length > nextIdx) {\n this.log(\n 'next was already handled in another branch, result idx is %d',\n nextIdx\n );\n return;\n }\n\n this.log('next processing, result idx is %d', nextIdx);\n\n try {\n const nextResult = nextFn(arg);\n processNextResult(nextResult as IterationResult, processError);\n } catch (e) {\n processError(e);\n }\n };\n\n return {\n next: (arg: YieldResult): IterationResult => {\n this.rethrowActiveScenarioError();\n processNext(arg);\n return this.activeScenarioNextResults[nextIdx++] as IterationResult;\n },\n throw: (e: unknown): IterationResult => {\n this.rethrowActiveScenarioError();\n processError(e);\n return this.activeScenarioNextResults[nextIdx++] as IterationResult;\n },\n };\n }\n\n protected emitAction<TRes>(yieldIdx: number, fn: () => TRes) {\n return this.services.eventEmitter.action(\n this.type,\n `${this.idx}:${yieldIdx + 1}`,\n this.entrypoint.ref,\n fn\n );\n }\n\n private rethrowActiveScenarioError() {\n if (!this.activeScenarioError) {\n return;\n }\n\n this.log(\n 'scenario has an unhandled error from another branch, rethrow %o',\n this.activeScenarioError\n );\n\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw this.activeScenarioError;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BaseAction.js","names":["require","_types","actionIdx","BaseAction","result","Pending","activeScenario","activeScenarioNextResults","handler","constructor","type","services","entrypoint","data","abortSignal","idx","toString","padStart","log","extend","ref","createAbortSignal","abortController","AbortController","unsubscribeFromParentAbort","onAbort","abort","unsubscribeFromSupersede","onSupersede","signal","Symbol","dispose","getNext","fn","_this$abortSignal","addEventListener","_this$abortSignal2","removeEventListener","run","Error","name","call","nextIdx","throwFn","e","emitAction","throw","nextFn","arg","next","processNextResult","onError","then","r","done","value","push","processError","length","nextResult","errorInGenerator","recover","activeScenarioError","processNext","rethrowActiveScenarioError","yieldIdx","eventEmitter","action","exports"],"sources":["../../../src/transform/actions/BaseAction.ts"],"sourcesContent":["/* eslint-disable no-plusplus */\nimport '../../utils/dispose-polyfill';\nimport type { Debugger } from '@wyw-in-js/shared';\n\nimport type { Entrypoint } from '../Entrypoint';\nimport type {\n ActionQueueItem,\n ActionTypes,\n AnyIteratorResult,\n AsyncScenarioForAction,\n Handler,\n IBaseAction,\n Services,\n SyncScenarioForAction,\n TypeOfResult,\n YieldResult,\n} from '../types';\nimport { Pending } from '../types';\n\nlet actionIdx = 0;\n\nexport type ActionByType<TType extends ActionTypes> = Extract<\n ActionQueueItem,\n {\n type: TType;\n }\n>;\n\ntype GetBase<TAction extends ActionQueueItem> = IBaseAction<\n TAction,\n TypeOfResult<TAction>,\n TAction['data']\n>;\n\nexport class BaseAction<TAction extends ActionQueueItem>\n implements GetBase<TAction>\n{\n public readonly idx: string;\n\n public result: TypeOfResult<TAction> | typeof Pending = Pending;\n\n private activeScenario:\n | SyncScenarioForAction<TAction>\n | AsyncScenarioForAction<TAction>\n | null = null;\n\n private activeScenarioError?: unknown;\n\n private activeScenarioNextResults: AnyIteratorResult<\n 'async' | 'sync',\n TypeOfResult<TAction>\n >[] = [];\n\n private handler: null | unknown = null;\n\n public constructor(\n public readonly type: TAction['type'],\n public readonly services: Services,\n public readonly entrypoint: Entrypoint,\n public readonly data: TAction['data'],\n public readonly abortSignal: AbortSignal | null\n ) {\n actionIdx += 1;\n this.idx = actionIdx.toString(16).padStart(6, '0');\n }\n\n public get log(): Debugger {\n return this.entrypoint.log.extend(this.ref);\n }\n\n public get ref() {\n return `${this.type}@${this.idx}`;\n }\n\n public createAbortSignal(): AbortSignal & Disposable {\n const abortController = new AbortController();\n\n const unsubscribeFromParentAbort = this.onAbort(() => {\n this.entrypoint.log('parent aborted');\n abortController.abort();\n });\n\n const unsubscribeFromSupersede = this.entrypoint.onSupersede(() => {\n this.entrypoint.log('entrypoint superseded, aborting processing');\n abortController.abort();\n });\n\n const abortSignal = abortController.signal as AbortSignal & Disposable;\n abortSignal[Symbol.dispose] = () => {\n unsubscribeFromParentAbort();\n unsubscribeFromSupersede();\n };\n\n return abortSignal;\n }\n\n public *getNext<\n TNextType extends ActionTypes,\n TNextAction extends ActionByType<TNextType> = ActionByType<TNextType>,\n >(\n type: TNextType,\n entrypoint: Entrypoint,\n data: TNextAction['data'],\n abortSignal: AbortSignal | null = this.abortSignal\n ): Generator<\n [TNextType, Entrypoint, TNextAction['data'], AbortSignal | null],\n TypeOfResult<TNextAction>,\n YieldResult\n > {\n return (yield [\n type,\n entrypoint,\n data,\n abortSignal,\n ]) as TypeOfResult<TNextAction>;\n }\n\n public onAbort(fn: () => void): () => void {\n this.abortSignal?.addEventListener('abort', fn);\n\n return () => {\n this.abortSignal?.removeEventListener('abort', fn);\n };\n }\n\n public run<\n TMode extends 'async' | 'sync',\n THandler extends Handler<TMode, TAction> = Handler<TMode, TAction>,\n >(handler: THandler) {\n type IterationResult = AnyIteratorResult<TMode, TypeOfResult<TAction>>;\n\n if (this.handler && this.handler !== handler) {\n throw new Error(\n `action handler is already set for ${this.ref} (${this.entrypoint.name})`\n );\n }\n\n this.handler = handler;\n\n if (!this.activeScenario) {\n this.activeScenario = handler.call(this);\n this.activeScenarioNextResults = [];\n }\n\n let nextIdx = 0;\n\n const throwFn = (e: unknown) =>\n this.emitAction(nextIdx, () => this.activeScenario!.throw(e));\n\n const nextFn = (arg: YieldResult) =>\n this.emitAction(nextIdx, () => this.activeScenario!.next(arg));\n\n const processNextResult = (\n result: IterationResult,\n onError?: (e: unknown) => void\n ) => {\n if ('then' in result) {\n result.then((r) => {\n if (r.done) {\n this.result = r.value;\n }\n }, onError);\n } else if (result.done) {\n this.result = result.value;\n }\n\n this.activeScenarioNextResults.push(result);\n };\n\n const processError = (e: unknown) => {\n if (this.activeScenarioNextResults.length > nextIdx) {\n this.log(\n 'error was already handled in another branch, result idx is %d',\n nextIdx\n );\n return;\n }\n\n this.log('error processing, result idx is %d', nextIdx);\n\n try {\n const nextResult = throwFn(e);\n processNextResult(nextResult as IterationResult, processError);\n } catch (errorInGenerator) {\n const { recover } = handler;\n if (recover) {\n const nextResult = {\n done: false,\n value: recover(errorInGenerator, this),\n };\n\n processNextResult(nextResult as IterationResult, processError);\n return;\n }\n\n this.activeScenarioError = errorInGenerator;\n throw errorInGenerator;\n }\n };\n\n const processNext = (arg: YieldResult) => {\n if (this.activeScenarioNextResults.length > nextIdx) {\n this.log(\n 'next was already handled in another branch, result idx is %d',\n nextIdx\n );\n return;\n }\n\n this.log('next processing, result idx is %d', nextIdx);\n\n try {\n const nextResult = nextFn(arg);\n processNextResult(nextResult as IterationResult, processError);\n } catch (e) {\n processError(e);\n }\n };\n\n return {\n next: (arg: YieldResult): IterationResult => {\n this.rethrowActiveScenarioError();\n processNext(arg);\n return this.activeScenarioNextResults[nextIdx++] as IterationResult;\n },\n throw: (e: unknown): IterationResult => {\n this.rethrowActiveScenarioError();\n processError(e);\n return this.activeScenarioNextResults[nextIdx++] as IterationResult;\n },\n };\n }\n\n protected emitAction<TRes>(yieldIdx: number, fn: () => TRes) {\n return this.services.eventEmitter.action(\n this.type,\n `${this.idx}:${yieldIdx + 1}`,\n this.entrypoint.ref,\n fn\n );\n }\n\n private rethrowActiveScenarioError() {\n if (!this.activeScenarioError) {\n return;\n }\n\n this.log(\n 'scenario has an unhandled error from another branch, rethrow %o',\n this.activeScenarioError\n );\n\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw this.activeScenarioError;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,12 +4,46 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.processImports = processImports;
7
+ var _importOverrides = require("../../utils/importOverrides");
7
8
  /* eslint-disable no-continue */
8
9
 
10
+ const warnedSlowImportsByServices = new WeakMap();
11
+ function emitWarning(services, message) {
12
+ if (services.emitWarning) {
13
+ services.emitWarning(message);
14
+ return;
15
+ }
16
+
17
+ // eslint-disable-next-line no-console
18
+ console.warn(message);
19
+ }
20
+ function getWarnedSlowImports(services) {
21
+ const cached = warnedSlowImportsByServices.get(services);
22
+ if (cached) return cached;
23
+ const created = new Set();
24
+ warnedSlowImportsByServices.set(services, created);
25
+ return created;
26
+ }
27
+ function isWarningEnabled(value) {
28
+ return Boolean(value) && value !== '0' && value !== 'false';
29
+ }
30
+
9
31
  /**
10
32
  * Creates new entrypoints and emits processEntrypoint for each resolved import
11
33
  */
12
34
  function* processImports() {
35
+ const slowImportWarningsEnabled = isWarningEnabled(process.env.WYW_WARN_SLOW_IMPORTS);
36
+ const slowImportThresholdMs = (() => {
37
+ const raw = process.env.WYW_WARN_SLOW_IMPORTS_MS;
38
+ if (!raw) return 50;
39
+ const parsed = Number(raw);
40
+ if (!Number.isFinite(parsed)) return 50;
41
+ return parsed;
42
+ })();
43
+ const warnedSlowImports = slowImportWarningsEnabled ? getWarnedSlowImports(this.services) : null;
44
+ const {
45
+ root
46
+ } = this.services.options;
13
47
  for (const dependency of this.data.resolved) {
14
48
  const {
15
49
  resolved,
@@ -23,7 +57,26 @@ function* processImports() {
23
57
  if (nextEntrypoint === 'loop' || nextEntrypoint.ignored) {
24
58
  continue;
25
59
  }
60
+ const startedAt = slowImportWarningsEnabled ? performance.now() : 0;
26
61
  yield* this.getNext('processEntrypoint', nextEntrypoint, undefined, null);
62
+ if (slowImportWarningsEnabled && warnedSlowImports && slowImportThresholdMs > 0) {
63
+ const durationMs = performance.now() - startedAt;
64
+ if (durationMs >= slowImportThresholdMs) {
65
+ const {
66
+ key: importKey
67
+ } = (0, _importOverrides.toImportKey)({
68
+ source: dependency.source,
69
+ resolved,
70
+ root
71
+ });
72
+ const dedupeKey = `${this.entrypoint.name}::${importKey}`;
73
+ if (!warnedSlowImports.has(dedupeKey)) {
74
+ warnedSlowImports.add(dedupeKey);
75
+ const warning = [`[wyw-in-js] Slow import during prepare stage`, ``, `file: ${this.entrypoint.name}`, `import: ${dependency.source}`, `resolved: ${resolved}`, `duration: ${durationMs.toFixed(1)}ms`, ``, `tip: if this import is runtime-only or heavy, mock it during evaluation via importOverrides:`, ` importOverrides: {`, ` '${importKey}': { mock: './path/to/mock' },`, ` }`, ``, `note: importOverrides affects only build-time evaluation (it does not change your bundler runtime behavior)`, ``, `note: configure threshold with WYW_WARN_SLOW_IMPORTS_MS (current: ${slowImportThresholdMs}ms)`].join('\n');
76
+ emitWarning(this.services, warning);
77
+ }
78
+ }
79
+ }
27
80
  }
28
81
  }
29
82
  //# sourceMappingURL=processImports.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"processImports.js","names":["processImports","dependency","data","resolved","only","entrypoint","addDependency","nextEntrypoint","createChild","ignored","getNext","undefined"],"sources":["../../../src/transform/generators/processImports.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport type { IProcessImportsAction, SyncScenarioForAction } from '../types';\n\n/**\n * Creates new entrypoints and emits processEntrypoint for each resolved import\n */\nexport function* processImports(\n this: IProcessImportsAction\n): SyncScenarioForAction<IProcessImportsAction> {\n for (const dependency of this.data.resolved) {\n const { resolved, only } = dependency;\n if (!resolved) {\n continue;\n }\n\n this.entrypoint.addDependency(dependency);\n\n const nextEntrypoint = this.entrypoint.createChild(resolved, only);\n if (nextEntrypoint === 'loop' || nextEntrypoint.ignored) {\n continue;\n }\n\n yield* this.getNext('processEntrypoint', nextEntrypoint, undefined, null);\n }\n}\n"],"mappings":";;;;;;AAAA;;AAGA;AACA;AACA;AACO,UAAUA,cAAcA,CAAA,EAEiB;EAC9C,KAAK,MAAMC,UAAU,IAAI,IAAI,CAACC,IAAI,CAACC,QAAQ,EAAE;IAC3C,MAAM;MAAEA,QAAQ;MAAEC;IAAK,CAAC,GAAGH,UAAU;IACrC,IAAI,CAACE,QAAQ,EAAE;MACb;IACF;IAEA,IAAI,CAACE,UAAU,CAACC,aAAa,CAACL,UAAU,CAAC;IAEzC,MAAMM,cAAc,GAAG,IAAI,CAACF,UAAU,CAACG,WAAW,CAACL,QAAQ,EAAEC,IAAI,CAAC;IAClE,IAAIG,cAAc,KAAK,MAAM,IAAIA,cAAc,CAACE,OAAO,EAAE;MACvD;IACF;IAEA,OAAO,IAAI,CAACC,OAAO,CAAC,mBAAmB,EAAEH,cAAc,EAAEI,SAAS,EAAE,IAAI,CAAC;EAC3E;AACF","ignoreList":[]}
1
+ {"version":3,"file":"processImports.js","names":["_importOverrides","require","warnedSlowImportsByServices","WeakMap","emitWarning","services","message","console","warn","getWarnedSlowImports","cached","get","created","Set","set","isWarningEnabled","value","Boolean","processImports","slowImportWarningsEnabled","process","env","WYW_WARN_SLOW_IMPORTS","slowImportThresholdMs","raw","WYW_WARN_SLOW_IMPORTS_MS","parsed","Number","isFinite","warnedSlowImports","root","options","dependency","data","resolved","only","entrypoint","addDependency","nextEntrypoint","createChild","ignored","startedAt","performance","now","getNext","undefined","durationMs","key","importKey","toImportKey","source","dedupeKey","name","has","add","warning","toFixed","join"],"sources":["../../../src/transform/generators/processImports.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport type {\n IProcessImportsAction,\n Services,\n SyncScenarioForAction,\n} from '../types';\n\nimport { toImportKey } from '../../utils/importOverrides';\n\nconst warnedSlowImportsByServices = new WeakMap<Services, Set<string>>();\n\nfunction emitWarning(services: Services, message: string) {\n if (services.emitWarning) {\n services.emitWarning(message);\n return;\n }\n\n // eslint-disable-next-line no-console\n console.warn(message);\n}\n\nfunction getWarnedSlowImports(services: Services): Set<string> {\n const cached = warnedSlowImportsByServices.get(services);\n if (cached) return cached;\n\n const created = new Set<string>();\n warnedSlowImportsByServices.set(services, created);\n return created;\n}\n\nfunction isWarningEnabled(value: string | undefined): boolean {\n return Boolean(value) && value !== '0' && value !== 'false';\n}\n\n/**\n * Creates new entrypoints and emits processEntrypoint for each resolved import\n */\nexport function* processImports(\n this: IProcessImportsAction\n): SyncScenarioForAction<IProcessImportsAction> {\n const slowImportWarningsEnabled = isWarningEnabled(\n process.env.WYW_WARN_SLOW_IMPORTS\n );\n const slowImportThresholdMs = (() => {\n const raw = process.env.WYW_WARN_SLOW_IMPORTS_MS;\n if (!raw) return 50;\n\n const parsed = Number(raw);\n if (!Number.isFinite(parsed)) return 50;\n return parsed;\n })();\n\n const warnedSlowImports = slowImportWarningsEnabled\n ? getWarnedSlowImports(this.services)\n : null;\n\n const { root } = this.services.options;\n\n for (const dependency of this.data.resolved) {\n const { resolved, only } = dependency;\n if (!resolved) {\n continue;\n }\n\n this.entrypoint.addDependency(dependency);\n\n const nextEntrypoint = this.entrypoint.createChild(resolved, only);\n if (nextEntrypoint === 'loop' || nextEntrypoint.ignored) {\n continue;\n }\n\n const startedAt = slowImportWarningsEnabled ? performance.now() : 0;\n yield* this.getNext('processEntrypoint', nextEntrypoint, undefined, null);\n\n if (\n slowImportWarningsEnabled &&\n warnedSlowImports &&\n slowImportThresholdMs > 0\n ) {\n const durationMs = performance.now() - startedAt;\n if (durationMs >= slowImportThresholdMs) {\n const { key: importKey } = toImportKey({\n source: dependency.source,\n resolved,\n root,\n });\n const dedupeKey = `${this.entrypoint.name}::${importKey}`;\n\n if (!warnedSlowImports.has(dedupeKey)) {\n warnedSlowImports.add(dedupeKey);\n\n const warning = [\n `[wyw-in-js] Slow import during prepare stage`,\n ``,\n `file: ${this.entrypoint.name}`,\n `import: ${dependency.source}`,\n `resolved: ${resolved}`,\n `duration: ${durationMs.toFixed(1)}ms`,\n ``,\n `tip: if this import is runtime-only or heavy, mock it during evaluation via importOverrides:`,\n ` importOverrides: {`,\n ` '${importKey}': { mock: './path/to/mock' },`,\n ` }`,\n ``,\n `note: importOverrides affects only build-time evaluation (it does not change your bundler runtime behavior)`,\n ``,\n `note: configure threshold with WYW_WARN_SLOW_IMPORTS_MS (current: ${slowImportThresholdMs}ms)`,\n ].join('\\n');\n\n emitWarning(this.services, warning);\n }\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -28,7 +28,7 @@ function applyImportOverrides(services, entrypoint, resolvedImports) {
28
28
  resolved: dependency.resolved,
29
29
  root
30
30
  });
31
- const override = overrides[key];
31
+ const override = (0, _importOverrides.getImportOverride)(overrides, key);
32
32
  if (!override) {
33
33
  return dependency;
34
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolveImports.js","names":["_getFileIdx","require","_Entrypoint","_importOverrides","applyImportOverrides","services","entrypoint","resolvedImports","overrides","options","pluginOptions","importOverrides","Object","keys","length","root","importer","name","stack","getStack","map","dependency","key","toImportKey","source","resolved","override","nextOnly","applyImportOverrideToOnly","only","nextResolved","mock","resolveMockSpecifier","emitDependency","emitter","imports","single","type","file","from","what","fileIdx","getFileIdx","filterUnresolved","filter","i","log","syncResolveImports","resolve","_imports$entries","data","eventEmitter","listOfImports","Array","entries","err","overriddenImports","filteredImports","asyncResolveImports","_imports$entries2","getResolveTask","Promise","all","importsOnly","cached","getDependency","mergeOnly","task","newTask","then","res","isSuperSet","merged","addResolveTask","resolveTask"],"sources":["../../../src/transform/generators/resolveImports.ts"],"sourcesContent":["/* eslint-disable no-continue,no-await-in-loop,require-yield */\nimport { getFileIdx } from '../../utils/getFileIdx';\nimport type { Entrypoint } from '../Entrypoint';\nimport { getStack, isSuperSet, mergeOnly } from '../Entrypoint.helpers';\nimport type { IEntrypointDependency } from '../Entrypoint.types';\nimport {\n applyImportOverrideToOnly,\n resolveMockSpecifier,\n toImportKey,\n} from '../../utils/importOverrides';\nimport type {\n AsyncScenarioForAction,\n IResolveImportsAction,\n Services,\n SyncScenarioForAction,\n} from '../types';\n\nfunction applyImportOverrides(\n services: Services,\n entrypoint: Entrypoint,\n resolvedImports: IEntrypointDependency[]\n): IEntrypointDependency[] {\n const overrides = services.options.pluginOptions.importOverrides;\n if (!overrides || Object.keys(overrides).length === 0) {\n return resolvedImports;\n }\n\n const { root } = services.options;\n const importer = entrypoint.name;\n const stack = getStack(entrypoint);\n\n return resolvedImports.map((dependency) => {\n const { key } = toImportKey({\n source: dependency.source,\n resolved: dependency.resolved,\n root,\n });\n const override = overrides[key];\n if (!override) {\n return dependency;\n }\n\n const nextOnly = applyImportOverrideToOnly(dependency.only, override);\n const nextResolved = override.mock\n ? resolveMockSpecifier({\n mock: override.mock,\n importer,\n root,\n stack,\n })\n : dependency.resolved;\n\n return {\n ...dependency,\n only: nextOnly,\n resolved: nextResolved,\n };\n });\n}\n\nfunction emitDependency(\n emitter: Services['eventEmitter'],\n entrypoint: IResolveImportsAction['entrypoint'],\n imports: IEntrypointDependency[]\n) {\n emitter.single({\n type: 'dependency',\n file: entrypoint.name,\n only: entrypoint.only,\n imports: imports.map(({ resolved, only }) => ({\n from: resolved,\n what: only,\n })),\n fileIdx: getFileIdx(entrypoint.name),\n });\n}\n\nfunction filterUnresolved(\n entrypoint: Entrypoint,\n resolvedImports: IEntrypointDependency[]\n): IEntrypointDependency[] {\n return resolvedImports.filter((i): i is IEntrypointDependency => {\n if (i.resolved === null) {\n entrypoint.log(\n `[resolve] ✅ %s in %s is ignored`,\n i.source,\n entrypoint.name\n );\n return false;\n }\n\n return true;\n });\n}\n\n/**\n * Synchronously resolves specified imports with a provided resolver.\n */\nexport function* syncResolveImports(\n this: IResolveImportsAction,\n resolve: (what: string, importer: string, stack: string[]) => string\n): SyncScenarioForAction<IResolveImportsAction> {\n const {\n data: { imports },\n entrypoint,\n services: { eventEmitter },\n } = this;\n const listOfImports = Array.from(imports?.entries() ?? []);\n const { log } = entrypoint;\n\n if (listOfImports.length === 0) {\n emitDependency(eventEmitter, entrypoint, []);\n\n log('%s has no imports', entrypoint.name);\n return [];\n }\n\n const resolvedImports = listOfImports.map(([source, only]) => {\n let resolved: string | null = null;\n try {\n resolved = resolve(source, entrypoint.name, getStack(entrypoint));\n log('[sync-resolve] ✅ %s -> %s (only: %o)', source, resolved, only);\n } catch (err) {\n log('[sync-resolve] ❌ cannot resolve %s: %O', source, err);\n }\n\n return {\n source,\n only,\n resolved,\n };\n });\n\n const overriddenImports = applyImportOverrides(\n this.services,\n entrypoint,\n resolvedImports\n );\n const filteredImports = filterUnresolved(entrypoint, overriddenImports);\n emitDependency(eventEmitter, entrypoint, filteredImports);\n\n return filteredImports;\n}\n\n/**\n * Asynchronously resolves specified imports with a provided resolver.\n */\nexport async function* asyncResolveImports(\n this: IResolveImportsAction,\n resolve: (\n what: string,\n importer: string,\n stack: string[]\n ) => Promise<string | null>\n): AsyncScenarioForAction<IResolveImportsAction> {\n const {\n data: { imports },\n entrypoint,\n services: { eventEmitter },\n } = this;\n const listOfImports = Array.from(imports?.entries() ?? []);\n const { log } = entrypoint;\n\n if (listOfImports.length === 0) {\n emitDependency(eventEmitter, entrypoint, []);\n\n log('%s has no imports', entrypoint.name);\n return [];\n }\n\n log('resolving %d imports', listOfImports.length);\n\n const getResolveTask = async (\n source: string,\n only: string[]\n ): Promise<IEntrypointDependency> => {\n let resolved: string | null = null;\n try {\n resolved = await resolve(source, entrypoint.name, getStack(entrypoint));\n } catch (err) {\n log(\n '[async-resolve] ❌ cannot resolve %s in %s: %O',\n source,\n entrypoint.name,\n err\n );\n }\n\n if (resolved !== null) {\n log(\n '[async-resolve] ✅ %s (%o) in %s -> %s',\n source,\n only,\n entrypoint.name,\n resolved\n );\n }\n\n return {\n source,\n only,\n resolved,\n };\n };\n\n const resolvedImports = await Promise.all<IEntrypointDependency>(\n listOfImports.map(([source, importsOnly]) => {\n const cached = entrypoint.getDependency(source);\n if (cached) {\n return {\n source,\n only: mergeOnly(cached.only, importsOnly),\n resolved: cached.resolved,\n };\n }\n\n const task = entrypoint.getResolveTask(source);\n if (task) {\n // If we have cached task, we need to merge only…\n const newTask = task.then((res) => {\n if (isSuperSet(res.only, importsOnly)) {\n return res;\n }\n\n // Is this branch even possible?\n const merged = mergeOnly(res.only, importsOnly);\n\n log('merging imports %o and %o: %o', importsOnly, res.only, merged);\n\n return { ...res, only: merged };\n });\n\n // … and update the cache\n entrypoint.addResolveTask(source, newTask);\n return newTask;\n }\n\n const resolveTask = getResolveTask(source, importsOnly);\n\n entrypoint.addResolveTask(source, resolveTask);\n\n return resolveTask;\n })\n );\n\n log('resolved %d imports', resolvedImports.length);\n\n const overriddenImports = applyImportOverrides(\n this.services,\n entrypoint,\n resolvedImports\n );\n const filteredImports = filterUnresolved(entrypoint, overriddenImports);\n emitDependency(eventEmitter, entrypoint, filteredImports);\n return filteredImports;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"resolveImports.js","names":["_getFileIdx","require","_Entrypoint","_importOverrides","applyImportOverrides","services","entrypoint","resolvedImports","overrides","options","pluginOptions","importOverrides","Object","keys","length","root","importer","name","stack","getStack","map","dependency","key","toImportKey","source","resolved","override","getImportOverride","nextOnly","applyImportOverrideToOnly","only","nextResolved","mock","resolveMockSpecifier","emitDependency","emitter","imports","single","type","file","from","what","fileIdx","getFileIdx","filterUnresolved","filter","i","log","syncResolveImports","resolve","_imports$entries","data","eventEmitter","listOfImports","Array","entries","err","overriddenImports","filteredImports","asyncResolveImports","_imports$entries2","getResolveTask","Promise","all","importsOnly","cached","getDependency","mergeOnly","task","newTask","then","res","isSuperSet","merged","addResolveTask","resolveTask"],"sources":["../../../src/transform/generators/resolveImports.ts"],"sourcesContent":["/* eslint-disable no-continue,no-await-in-loop,require-yield */\nimport { getFileIdx } from '../../utils/getFileIdx';\nimport type { Entrypoint } from '../Entrypoint';\nimport { getStack, isSuperSet, mergeOnly } from '../Entrypoint.helpers';\nimport type { IEntrypointDependency } from '../Entrypoint.types';\nimport {\n applyImportOverrideToOnly,\n getImportOverride,\n resolveMockSpecifier,\n toImportKey,\n} from '../../utils/importOverrides';\nimport type {\n AsyncScenarioForAction,\n IResolveImportsAction,\n Services,\n SyncScenarioForAction,\n} from '../types';\n\nfunction applyImportOverrides(\n services: Services,\n entrypoint: Entrypoint,\n resolvedImports: IEntrypointDependency[]\n): IEntrypointDependency[] {\n const overrides = services.options.pluginOptions.importOverrides;\n if (!overrides || Object.keys(overrides).length === 0) {\n return resolvedImports;\n }\n\n const { root } = services.options;\n const importer = entrypoint.name;\n const stack = getStack(entrypoint);\n\n return resolvedImports.map((dependency) => {\n const { key } = toImportKey({\n source: dependency.source,\n resolved: dependency.resolved,\n root,\n });\n const override = getImportOverride(overrides, key);\n if (!override) {\n return dependency;\n }\n\n const nextOnly = applyImportOverrideToOnly(dependency.only, override);\n const nextResolved = override.mock\n ? resolveMockSpecifier({\n mock: override.mock,\n importer,\n root,\n stack,\n })\n : dependency.resolved;\n\n return {\n ...dependency,\n only: nextOnly,\n resolved: nextResolved,\n };\n });\n}\n\nfunction emitDependency(\n emitter: Services['eventEmitter'],\n entrypoint: IResolveImportsAction['entrypoint'],\n imports: IEntrypointDependency[]\n) {\n emitter.single({\n type: 'dependency',\n file: entrypoint.name,\n only: entrypoint.only,\n imports: imports.map(({ resolved, only }) => ({\n from: resolved,\n what: only,\n })),\n fileIdx: getFileIdx(entrypoint.name),\n });\n}\n\nfunction filterUnresolved(\n entrypoint: Entrypoint,\n resolvedImports: IEntrypointDependency[]\n): IEntrypointDependency[] {\n return resolvedImports.filter((i): i is IEntrypointDependency => {\n if (i.resolved === null) {\n entrypoint.log(\n `[resolve] ✅ %s in %s is ignored`,\n i.source,\n entrypoint.name\n );\n return false;\n }\n\n return true;\n });\n}\n\n/**\n * Synchronously resolves specified imports with a provided resolver.\n */\nexport function* syncResolveImports(\n this: IResolveImportsAction,\n resolve: (what: string, importer: string, stack: string[]) => string\n): SyncScenarioForAction<IResolveImportsAction> {\n const {\n data: { imports },\n entrypoint,\n services: { eventEmitter },\n } = this;\n const listOfImports = Array.from(imports?.entries() ?? []);\n const { log } = entrypoint;\n\n if (listOfImports.length === 0) {\n emitDependency(eventEmitter, entrypoint, []);\n\n log('%s has no imports', entrypoint.name);\n return [];\n }\n\n const resolvedImports = listOfImports.map(([source, only]) => {\n let resolved: string | null = null;\n try {\n resolved = resolve(source, entrypoint.name, getStack(entrypoint));\n log('[sync-resolve] ✅ %s -> %s (only: %o)', source, resolved, only);\n } catch (err) {\n log('[sync-resolve] ❌ cannot resolve %s: %O', source, err);\n }\n\n return {\n source,\n only,\n resolved,\n };\n });\n\n const overriddenImports = applyImportOverrides(\n this.services,\n entrypoint,\n resolvedImports\n );\n const filteredImports = filterUnresolved(entrypoint, overriddenImports);\n emitDependency(eventEmitter, entrypoint, filteredImports);\n\n return filteredImports;\n}\n\n/**\n * Asynchronously resolves specified imports with a provided resolver.\n */\nexport async function* asyncResolveImports(\n this: IResolveImportsAction,\n resolve: (\n what: string,\n importer: string,\n stack: string[]\n ) => Promise<string | null>\n): AsyncScenarioForAction<IResolveImportsAction> {\n const {\n data: { imports },\n entrypoint,\n services: { eventEmitter },\n } = this;\n const listOfImports = Array.from(imports?.entries() ?? []);\n const { log } = entrypoint;\n\n if (listOfImports.length === 0) {\n emitDependency(eventEmitter, entrypoint, []);\n\n log('%s has no imports', entrypoint.name);\n return [];\n }\n\n log('resolving %d imports', listOfImports.length);\n\n const getResolveTask = async (\n source: string,\n only: string[]\n ): Promise<IEntrypointDependency> => {\n let resolved: string | null = null;\n try {\n resolved = await resolve(source, entrypoint.name, getStack(entrypoint));\n } catch (err) {\n log(\n '[async-resolve] ❌ cannot resolve %s in %s: %O',\n source,\n entrypoint.name,\n err\n );\n }\n\n if (resolved !== null) {\n log(\n '[async-resolve] ✅ %s (%o) in %s -> %s',\n source,\n only,\n entrypoint.name,\n resolved\n );\n }\n\n return {\n source,\n only,\n resolved,\n };\n };\n\n const resolvedImports = await Promise.all<IEntrypointDependency>(\n listOfImports.map(([source, importsOnly]) => {\n const cached = entrypoint.getDependency(source);\n if (cached) {\n return {\n source,\n only: mergeOnly(cached.only, importsOnly),\n resolved: cached.resolved,\n };\n }\n\n const task = entrypoint.getResolveTask(source);\n if (task) {\n // If we have cached task, we need to merge only…\n const newTask = task.then((res) => {\n if (isSuperSet(res.only, importsOnly)) {\n return res;\n }\n\n // Is this branch even possible?\n const merged = mergeOnly(res.only, importsOnly);\n\n log('merging imports %o and %o: %o', importsOnly, res.only, merged);\n\n return { ...res, only: merged };\n });\n\n // … and update the cache\n entrypoint.addResolveTask(source, newTask);\n return newTask;\n }\n\n const resolveTask = getResolveTask(source, importsOnly);\n\n entrypoint.addResolveTask(source, resolveTask);\n\n return resolveTask;\n })\n );\n\n log('resolved %d imports', resolvedImports.length);\n\n const overriddenImports = applyImportOverrides(\n this.services,\n entrypoint,\n resolvedImports\n );\n const filteredImports = filterUnresolved(entrypoint, overriddenImports);\n emitDependency(eventEmitter, entrypoint, filteredImports);\n return filteredImports;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,11 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.applyImportOverrideToOnly = applyImportOverrideToOnly;
7
+ exports.getImportOverride = getImportOverride;
7
8
  exports.resolveMockSpecifier = resolveMockSpecifier;
8
9
  exports.toCanonicalFileKey = toCanonicalFileKey;
9
10
  exports.toImportKey = toImportKey;
10
11
  var _path = _interopRequireDefault(require("path"));
11
12
  var _shared = require("@wyw-in-js/shared");
13
+ var _minimatch = require("minimatch");
12
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
15
  function toCanonicalFileKey(resolved, root) {
14
16
  const rootDir = root ? _path.default.resolve(root) : process.cwd();
@@ -54,4 +56,64 @@ function applyImportOverrideToOnly(only, override) {
54
56
  }
55
57
  return only;
56
58
  }
59
+ const compiledImportOverridesCache = new WeakMap();
60
+ const minimatchOptions = {
61
+ dot: true,
62
+ nocomment: true,
63
+ nonegate: true
64
+ };
65
+ function getPatternSpecificity(pattern) {
66
+ let wildcardCount = 0;
67
+ let escaped = false;
68
+ for (const char of pattern) {
69
+ if (escaped) {
70
+ escaped = false;
71
+ } else if (char === '\\') {
72
+ escaped = true;
73
+ } else if (char === '*' || char === '?') {
74
+ wildcardCount += 1;
75
+ }
76
+ }
77
+ return pattern.length - wildcardCount * 10;
78
+ }
79
+ function compileImportOverrides(importOverrides) {
80
+ const matchers = Object.entries(importOverrides).map(([pattern, override]) => {
81
+ return {
82
+ matcher: new _minimatch.Minimatch(pattern, minimatchOptions),
83
+ override,
84
+ pattern,
85
+ specificity: getPatternSpecificity(pattern)
86
+ };
87
+ }).sort((a, b) => {
88
+ const bySpecificity = b.specificity - a.specificity;
89
+ if (bySpecificity !== 0) return bySpecificity;
90
+ const byLength = b.pattern.length - a.pattern.length;
91
+ if (byLength !== 0) return byLength;
92
+ return a.pattern.localeCompare(b.pattern);
93
+ });
94
+ return {
95
+ matchers
96
+ };
97
+ }
98
+ function getCompiledImportOverrides(importOverrides) {
99
+ const cached = compiledImportOverridesCache.get(importOverrides);
100
+ if (cached) return cached;
101
+ const compiled = compileImportOverrides(importOverrides);
102
+ compiledImportOverridesCache.set(importOverrides, compiled);
103
+ return compiled;
104
+ }
105
+ function getImportOverride(importOverrides, key) {
106
+ var _matchers$find;
107
+ if (!importOverrides) {
108
+ return undefined;
109
+ }
110
+ const direct = importOverrides[key];
111
+ if (direct) return direct;
112
+ const {
113
+ matchers
114
+ } = getCompiledImportOverrides(importOverrides);
115
+ return (_matchers$find = matchers.find(({
116
+ matcher
117
+ }) => matcher.match(key))) === null || _matchers$find === void 0 ? void 0 : _matchers$find.override;
118
+ }
57
119
  //# sourceMappingURL=importOverrides.js.map