@wyw-in-js/transform 1.0.3 → 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":"createVmContext.js","names":["vm","isFeatureEnabled","process","NOOP","IMPORT_META_ENV","importMetaEnvWarned","createImportMetaEnvProxy","target","Object","create","warnOnce","console","warn","join","Proxy","get","obj","key","Reflect","has","getOwnPropertyDescriptor","ownKeys","set","value","createWindow","Window","GlobalWindow","require","HappyWindow","win","Buffer","Uint8Array","setReferencePropertyIfNotPresent","context","createBaseContext","additionalContext","baseContext","document","clearImmediate","clearInterval","clearTimeout","setImmediate","requestAnimationFrame","setInterval","setTimeout","createHappyDOMWindow","teardown","happyDOM","abort","window","createNothing","undefined","createVmContext","filename","features","overrideContext","i","isHappyDOMEnabled","envContext","__filename","createContext"],"sources":["../../src/vm/createVmContext.ts"],"sourcesContent":["import * as vm from 'vm';\n\nimport type { Window } from 'happy-dom';\n\nimport type { FeatureFlags, StrictOptions } from '@wyw-in-js/shared';\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport * as process from './process';\n\nconst NOOP = () => {};\nconst IMPORT_META_ENV = '__wyw_import_meta_env';\n\nlet importMetaEnvWarned = false;\n\nfunction createImportMetaEnvProxy(): Record<string, unknown> {\n const target = Object.create(null) as Record<string, unknown>;\n\n const warnOnce = () => {\n if (importMetaEnvWarned) return;\n importMetaEnvWarned = true;\n // eslint-disable-next-line no-console\n console.warn(\n [\n `[wyw-in-js] import.meta.env was accessed during build-time evaluation, but no env values were provided.`,\n ``,\n `If you're using Vite, make sure @wyw-in-js/vite plugin is enabled (it injects Vite env for evaluation).`,\n `Otherwise provide \"__wyw_import_meta_env\" via pluginOptions.overrideContext.`,\n ].join('\\n')\n );\n };\n\n return new Proxy(target, {\n get(obj, key) {\n if (typeof key === 'symbol') {\n return Reflect.get(obj, key);\n }\n\n warnOnce();\n return obj[key];\n },\n has(obj, key) {\n if (typeof key === 'symbol') {\n return Reflect.has(obj, key);\n }\n\n warnOnce();\n return Reflect.has(obj, key);\n },\n getOwnPropertyDescriptor(obj, key) {\n return Reflect.getOwnPropertyDescriptor(obj, key);\n },\n ownKeys(obj) {\n return Reflect.ownKeys(obj);\n },\n set(obj, key, value) {\n if (typeof key === 'symbol') {\n return Reflect.set(obj, key, value);\n }\n\n warnOnce();\n return Reflect.set(obj, key, value);\n },\n });\n}\n\nfunction createWindow(): Window {\n const { Window, GlobalWindow } = require('happy-dom');\n const HappyWindow = GlobalWindow || Window;\n const win = new HappyWindow();\n\n // TODO: browser doesn't expose Buffer, but a lot of dependencies use it\n win.Buffer = Buffer;\n win.Uint8Array = Uint8Array;\n\n return win;\n}\n\n/**\n * `happy-dom` already has required references, so we don't need to set them.\n */\nfunction setReferencePropertyIfNotPresent(\n context: vm.Context,\n key: string\n): void {\n if (context[key] === context) {\n return;\n }\n\n context[key] = context;\n}\n\nfunction createBaseContext(\n win: Window | undefined,\n additionalContext: Partial<vm.Context>\n): Partial<vm.Context> {\n const baseContext: vm.Context = win ?? {};\n\n setReferencePropertyIfNotPresent(baseContext, 'window');\n setReferencePropertyIfNotPresent(baseContext, 'self');\n setReferencePropertyIfNotPresent(baseContext, 'top');\n setReferencePropertyIfNotPresent(baseContext, 'parent');\n setReferencePropertyIfNotPresent(baseContext, 'global');\n setReferencePropertyIfNotPresent(baseContext, 'process');\n\n baseContext.document = win?.document;\n baseContext.process = process;\n\n baseContext.clearImmediate = NOOP;\n baseContext.clearInterval = NOOP;\n baseContext.clearTimeout = NOOP;\n baseContext.setImmediate = NOOP;\n baseContext.requestAnimationFrame = NOOP;\n baseContext.setInterval = NOOP;\n baseContext.setTimeout = NOOP;\n\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in additionalContext) {\n baseContext[key] = additionalContext[key];\n }\n\n return baseContext;\n}\n\nfunction createHappyDOMWindow() {\n const win = createWindow();\n\n return {\n teardown: () => {\n win.happyDOM.abort();\n },\n window: win,\n };\n}\n\nfunction createNothing() {\n return {\n teardown: () => {},\n window: undefined,\n };\n}\n\nexport function createVmContext(\n filename: string,\n features: FeatureFlags<'happyDOM'>,\n additionalContext: Partial<vm.Context>,\n overrideContext: StrictOptions['overrideContext'] = (i) => i\n) {\n const isHappyDOMEnabled = isFeatureEnabled(features, 'happyDOM', filename);\n\n const { teardown, window } = isHappyDOMEnabled\n ? createHappyDOMWindow()\n : createNothing();\n const envContext: Partial<vm.Context> = {\n [IMPORT_META_ENV]: createImportMetaEnvProxy(),\n };\n const baseContext = createBaseContext(\n window,\n overrideContext(\n {\n __filename: filename,\n ...envContext,\n ...additionalContext,\n },\n filename\n )\n );\n\n const context = vm.createContext(baseContext);\n\n return {\n context,\n teardown,\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"createVmContext.js","names":["vm","isFeatureEnabled","process","NOOP","IMPORT_META_ENV","HAPPY_DOM_REQUIRE_HOOK","importMetaEnvWarned","happyDomRequireEsmWarned","happyDomUnavailable","isErrRequireEsm","error","code","createImportMetaEnvProxy","target","Object","create","warnOnce","console","warn","join","Proxy","get","obj","key","Reflect","has","getOwnPropertyDescriptor","ownKeys","set","value","requireHappyDom","hook","globalThis","require","createWindow","undefined","Window","GlobalWindow","HappyWindow","win","Buffer","Uint8Array","hasCustomRequireHook","setReferencePropertyIfNotPresent","context","createBaseContext","additionalContext","baseContext","document","clearImmediate","clearInterval","clearTimeout","setImmediate","requestAnimationFrame","setInterval","setTimeout","createNothing","teardown","window","createHappyDOMWindow","happyDOM","abort","createVmContext","filename","features","overrideContext","i","isHappyDOMEnabled","envContext","__filename","createContext"],"sources":["../../src/vm/createVmContext.ts"],"sourcesContent":["import * as vm from 'vm';\n\nimport type { Window } from 'happy-dom';\n\nimport type { FeatureFlags, StrictOptions } from '@wyw-in-js/shared';\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport * as process from './process';\n\nconst NOOP = () => {};\nconst IMPORT_META_ENV = '__wyw_import_meta_env';\nconst HAPPY_DOM_REQUIRE_HOOK = '__wyw_requireHappyDom';\n\nlet importMetaEnvWarned = false;\nlet happyDomRequireEsmWarned = false;\nlet happyDomUnavailable = false;\n\nfunction isErrRequireEsm(error: unknown): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as { code?: unknown }).code === 'ERR_REQUIRE_ESM'\n );\n}\n\nfunction createImportMetaEnvProxy(): Record<string, unknown> {\n const target = Object.create(null) as Record<string, unknown>;\n\n const warnOnce = () => {\n if (importMetaEnvWarned) return;\n importMetaEnvWarned = true;\n // eslint-disable-next-line no-console\n console.warn(\n [\n `[wyw-in-js] import.meta.env was accessed during build-time evaluation, but no env values were provided.`,\n ``,\n `If you're using Vite, make sure @wyw-in-js/vite plugin is enabled (it injects Vite env for evaluation).`,\n `Otherwise provide \"__wyw_import_meta_env\" via pluginOptions.overrideContext.`,\n ].join('\\n')\n );\n };\n\n return new Proxy(target, {\n get(obj, key) {\n if (typeof key === 'symbol') {\n return Reflect.get(obj, key);\n }\n\n warnOnce();\n return obj[key];\n },\n has(obj, key) {\n if (typeof key === 'symbol') {\n return Reflect.has(obj, key);\n }\n\n warnOnce();\n return Reflect.has(obj, key);\n },\n getOwnPropertyDescriptor(obj, key) {\n return Reflect.getOwnPropertyDescriptor(obj, key);\n },\n ownKeys(obj) {\n return Reflect.ownKeys(obj);\n },\n set(obj, key, value) {\n if (typeof key === 'symbol') {\n return Reflect.set(obj, key, value);\n }\n\n warnOnce();\n return Reflect.set(obj, key, value);\n },\n });\n}\n\ntype HappyDomExports = {\n GlobalWindow?: new () => Window;\n Window: new () => Window;\n};\n\nfunction requireHappyDom(): HappyDomExports {\n const hook = (globalThis as Record<string, unknown>)[HAPPY_DOM_REQUIRE_HOOK];\n if (typeof hook === 'function') {\n return (hook as () => HappyDomExports)();\n }\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return require('happy-dom') as HappyDomExports;\n}\n\nfunction createWindow(): Window | undefined {\n if (happyDomUnavailable) return undefined;\n\n try {\n const { Window, GlobalWindow } = requireHappyDom();\n const HappyWindow = GlobalWindow || Window;\n const win = new HappyWindow();\n\n // TODO: browser doesn't expose Buffer, but a lot of dependencies use it\n win.Buffer = Buffer;\n win.Uint8Array = Uint8Array;\n\n return win;\n } catch (error) {\n if (!isErrRequireEsm(error)) {\n throw error;\n }\n\n const hasCustomRequireHook =\n typeof (globalThis as Record<string, unknown>)[HAPPY_DOM_REQUIRE_HOOK] ===\n 'function';\n if (!hasCustomRequireHook) {\n happyDomUnavailable = true;\n }\n\n if (happyDomRequireEsmWarned) return undefined;\n happyDomRequireEsmWarned = true;\n\n // eslint-disable-next-line no-console\n console.warn(\n [\n `[wyw-in-js] DOM emulation is enabled (features.happyDOM), but \"happy-dom\" could not be loaded in this build-time runtime.`,\n `This usually happens because \"happy-dom\" is ESM-only and cannot be loaded via require() in a CJS build.`,\n ``,\n `WyW will continue without DOM emulation (as if features.happyDOM:false).`,\n ``,\n `To silence this warning: set features: { happyDOM: false }.`,\n `To get real DOM emulation in Node 20+, WyW needs an ESM-only eval architecture (planned for v2.0.0),`,\n `or a runtime that supports require(ESM) (Node 24+).`,\n ].join('\\n')\n );\n\n return undefined;\n }\n}\n\n/**\n * `happy-dom` already has required references, so we don't need to set them.\n */\nfunction setReferencePropertyIfNotPresent(\n context: vm.Context,\n key: string\n): void {\n if (context[key] === context) {\n return;\n }\n\n context[key] = context;\n}\n\nfunction createBaseContext(\n win: Window | undefined,\n additionalContext: Partial<vm.Context>\n): Partial<vm.Context> {\n const baseContext: vm.Context = win ?? {};\n\n setReferencePropertyIfNotPresent(baseContext, 'window');\n setReferencePropertyIfNotPresent(baseContext, 'self');\n setReferencePropertyIfNotPresent(baseContext, 'top');\n setReferencePropertyIfNotPresent(baseContext, 'parent');\n setReferencePropertyIfNotPresent(baseContext, 'global');\n setReferencePropertyIfNotPresent(baseContext, 'process');\n\n baseContext.document = win?.document;\n baseContext.process = process;\n\n baseContext.clearImmediate = NOOP;\n baseContext.clearInterval = NOOP;\n baseContext.clearTimeout = NOOP;\n baseContext.setImmediate = NOOP;\n baseContext.requestAnimationFrame = NOOP;\n baseContext.setInterval = NOOP;\n baseContext.setTimeout = NOOP;\n\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in additionalContext) {\n baseContext[key] = additionalContext[key];\n }\n\n return baseContext;\n}\n\nfunction createNothing() {\n return {\n teardown: () => {},\n window: undefined,\n };\n}\n\nfunction createHappyDOMWindow() {\n const win = createWindow();\n if (!win) return createNothing();\n\n return {\n teardown: () => {\n win.happyDOM.abort();\n },\n window: win,\n };\n}\n\nexport function createVmContext(\n filename: string,\n features: FeatureFlags<'happyDOM'>,\n additionalContext: Partial<vm.Context>,\n overrideContext: StrictOptions['overrideContext'] = (i) => i\n) {\n const isHappyDOMEnabled = isFeatureEnabled(features, 'happyDOM', filename);\n\n const { teardown, window } = isHappyDOMEnabled\n ? createHappyDOMWindow()\n : createNothing();\n const envContext: Partial<vm.Context> = {\n [IMPORT_META_ENV]: createImportMetaEnvProxy(),\n };\n const baseContext = createBaseContext(\n window,\n overrideContext(\n {\n __filename: filename,\n ...envContext,\n ...additionalContext,\n },\n filename\n )\n );\n\n const context = vm.createContext(baseContext);\n\n return {\n context,\n teardown,\n };\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/cache.js CHANGED
@@ -43,8 +43,25 @@ class TransformCacheCollection {
43
43
  }
44
44
  cache.set(key, value);
45
45
  if ('initialCode' in value) {
46
- var _value$initialCode;
47
- this.contentHashes.set(key, hashContent((_value$initialCode = value.initialCode) !== null && _value$initialCode !== void 0 ? _value$initialCode : ''));
46
+ const maybeOriginalCode = value.originalCode;
47
+ const isLoaded = typeof value.initialCode === 'string';
48
+ const source = isLoaded ? 'loaded' : 'fs';
49
+ let resolvedCode;
50
+ if (isLoaded) {
51
+ resolvedCode = value.initialCode;
52
+ } else if (typeof maybeOriginalCode === 'string') {
53
+ resolvedCode = maybeOriginalCode;
54
+ }
55
+ if (resolvedCode !== undefined) {
56
+ this.setContentHash(key, source, hashContent(resolvedCode));
57
+ return;
58
+ }
59
+ try {
60
+ const fileContent = _nodeFs.default.readFileSync((0, _parseRequest.stripQueryAndHash)(key), 'utf8');
61
+ this.setContentHash(key, source, hashContent(fileContent));
62
+ } catch {
63
+ this.setContentHash(key, source, hashContent(''));
64
+ }
48
65
  }
49
66
  }
50
67
  clear(cacheName) {
@@ -86,7 +103,7 @@ class TransformCacheCollection {
86
103
  this.invalidate(cacheName, filename);
87
104
  });
88
105
  }
89
- invalidateIfChanged(filename, content, previousVisitedFiles) {
106
+ invalidateIfChanged(filename, content, previousVisitedFiles, source = 'loaded') {
90
107
  const visitedFiles = new Set(previousVisitedFiles);
91
108
  const fileEntrypoint = this.get('entrypoints', filename);
92
109
 
@@ -98,20 +115,43 @@ class TransformCacheCollection {
98
115
  const dependencyFilename = dependency.resolved;
99
116
  if (dependencyFilename) {
100
117
  const dependencyContent = _nodeFs.default.readFileSync((0, _parseRequest.stripQueryAndHash)(dependencyFilename), 'utf8');
101
- this.invalidateIfChanged(dependencyFilename, dependencyContent, visitedFiles);
118
+ this.invalidateIfChanged(dependencyFilename, dependencyContent, visitedFiles, 'fs');
102
119
  }
103
120
  }
104
121
  }
105
- const hash = this.contentHashes.get(filename);
122
+ const existing = this.contentHashes.get(filename);
123
+ const previousHash = existing === null || existing === void 0 ? void 0 : existing[source];
106
124
  const newHash = hashContent(content);
107
- if (hash !== newHash) {
125
+ if (previousHash === undefined) {
126
+ const otherSource = source === 'fs' ? 'loaded' : 'fs';
127
+ const otherHash = existing === null || existing === void 0 ? void 0 : existing[otherSource];
128
+ if (otherHash !== undefined && otherHash !== newHash) {
129
+ cacheLogger('content has changed, invalidate all for %s', filename);
130
+ this.setContentHash(filename, source, newHash);
131
+ this.invalidateForFile(filename);
132
+ return true;
133
+ }
134
+ this.setContentHash(filename, source, newHash);
135
+ return false;
136
+ }
137
+ if (previousHash !== newHash) {
108
138
  cacheLogger('content has changed, invalidate all for %s', filename);
109
- this.contentHashes.set(filename, newHash);
139
+ this.setContentHash(filename, source, newHash);
110
140
  this.invalidateForFile(filename);
111
141
  return true;
112
142
  }
113
143
  return false;
114
144
  }
145
+ setContentHash(filename, source, hash) {
146
+ const current = this.contentHashes.get(filename);
147
+ if (current) {
148
+ current[source] = hash;
149
+ return;
150
+ }
151
+ this.contentHashes.set(filename, {
152
+ [source]: hash
153
+ });
154
+ }
115
155
  }
116
156
  exports.TransformCacheCollection = TransformCacheCollection;
117
157
  //# sourceMappingURL=cache.js.map
package/lib/cache.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","names":["_crypto","require","_nodeFs","_interopRequireDefault","_shared","_getFileIdx","_parseRequest","e","__esModule","default","hashContent","content","createHash","update","digest","cacheLogger","logger","extend","cacheNames","loggers","reduce","acc","key","TransformCacheCollection","contentHashes","Map","constructor","caches","entrypoints","exports","add","cacheName","value","cache","getFileIdx","undefined","has","get","delete","set","_value$initialCode","initialCode","clear","forEach","name","invalidate","res","invalidateForFile","filename","invalidateIfChanged","previousVisitedFiles","visitedFiles","Set","fileEntrypoint","dependency","dependencies","dependencyFilename","resolved","dependencyContent","fs","readFileSync","stripQueryAndHash","hash","newHash"],"sources":["../src/cache.ts"],"sourcesContent":["import { createHash } from 'crypto';\nimport fs from 'node:fs';\nimport { logger } from '@wyw-in-js/shared';\n\nimport type { Entrypoint } from './transform/Entrypoint';\nimport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nimport { getFileIdx } from './utils/getFileIdx';\nimport { stripQueryAndHash } from './utils/parseRequest';\n\nfunction hashContent(content: string) {\n return createHash('sha256').update(content).digest('hex');\n}\n\ninterface IBaseCachedEntrypoint {\n dependencies: Map<string, { resolved: string | null }>;\n initialCode?: string;\n}\n\ninterface ICaches<TEntrypoint extends IBaseCachedEntrypoint> {\n entrypoints: Map<string, TEntrypoint>;\n exports: Map<string, string[]>;\n}\n\ntype MapValue<T> = T extends Map<string, infer V> ? V : never;\n\nconst cacheLogger = logger.extend('cache');\n\nconst cacheNames = ['entrypoints', 'exports'] as const;\ntype CacheNames = (typeof cacheNames)[number];\n\nconst loggers = cacheNames.reduce(\n (acc, key) => ({\n ...acc,\n [key]: cacheLogger.extend(key),\n }),\n {} as Record<CacheNames, typeof logger>\n);\n\nexport class TransformCacheCollection<\n TEntrypoint extends IBaseCachedEntrypoint = Entrypoint | IEvaluatedEntrypoint,\n> {\n public readonly entrypoints: Map<string, TEntrypoint>;\n\n public readonly exports: Map<string, string[]>;\n\n private contentHashes = new Map<string, string>();\n\n constructor(caches: Partial<ICaches<TEntrypoint>> = {}) {\n this.entrypoints = caches.entrypoints || new Map();\n this.exports = caches.exports || new Map();\n }\n\n public add<\n TCache extends CacheNames,\n TValue extends MapValue<ICaches<TEntrypoint>[TCache]>,\n >(cacheName: TCache, key: string, value: TValue): void {\n const cache = this[cacheName] as Map<string, TValue>;\n loggers[cacheName]('%s:add %s %f', getFileIdx(key), key, () => {\n if (value === undefined) {\n return cache.has(key) ? 'removed' : 'noop';\n }\n\n if (!cache.has(key)) {\n return 'added';\n }\n\n return cache.get(key) === value ? 'unchanged' : 'updated';\n });\n\n if (value === undefined) {\n cache.delete(key);\n this.contentHashes.delete(key);\n return;\n }\n\n cache.set(key, value);\n\n if ('initialCode' in value) {\n this.contentHashes.set(key, hashContent(value.initialCode ?? ''));\n }\n }\n\n public clear(cacheName: CacheNames | 'all'): void {\n if (cacheName === 'all') {\n cacheNames.forEach((name) => {\n this.clear(name);\n });\n\n return;\n }\n\n loggers[cacheName]('clear');\n const cache = this[cacheName] as Map<string, unknown>;\n\n cache.clear();\n }\n\n public delete(cacheName: CacheNames, key: string): void {\n this.invalidate(cacheName, key);\n }\n\n public get<\n TCache extends CacheNames,\n TValue extends MapValue<ICaches<TEntrypoint>[TCache]>,\n >(cacheName: TCache, key: string): TValue | undefined {\n const cache = this[cacheName] as Map<string, TValue>;\n\n const res = cache.get(key);\n loggers[cacheName]('get', key, res === undefined ? 'miss' : 'hit');\n return res;\n }\n\n public has(cacheName: CacheNames, key: string): boolean {\n const cache = this[cacheName] as Map<string, unknown>;\n\n const res = cache.has(key);\n loggers[cacheName]('has', key, res);\n return res;\n }\n\n public invalidate(cacheName: CacheNames, key: string): void {\n const cache = this[cacheName] as Map<string, unknown>;\n if (!cache.has(key)) {\n return;\n }\n\n loggers[cacheName]('invalidate', key);\n\n cache.delete(key);\n }\n\n public invalidateForFile(filename: string) {\n cacheNames.forEach((cacheName) => {\n this.invalidate(cacheName, filename);\n });\n }\n\n public invalidateIfChanged(\n filename: string,\n content: string,\n previousVisitedFiles?: Set<string>\n ) {\n const visitedFiles = new Set(previousVisitedFiles);\n const fileEntrypoint = this.get('entrypoints', filename);\n\n // We need to check all dependencies of the file\n // because they might have changed as well.\n if (fileEntrypoint && !visitedFiles.has(filename)) {\n visitedFiles.add(filename);\n\n for (const [, dependency] of fileEntrypoint.dependencies) {\n const dependencyFilename = dependency.resolved;\n\n if (dependencyFilename) {\n const dependencyContent = fs.readFileSync(\n stripQueryAndHash(dependencyFilename),\n 'utf8'\n );\n this.invalidateIfChanged(\n dependencyFilename,\n dependencyContent,\n visitedFiles\n );\n }\n }\n }\n\n const hash = this.contentHashes.get(filename);\n const newHash = hashContent(content);\n\n if (hash !== newHash) {\n cacheLogger('content has changed, invalidate all for %s', filename);\n this.contentHashes.set(filename, newHash);\n this.invalidateForFile(filename);\n\n return true;\n }\n\n return false;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"cache.js","names":["_crypto","require","_nodeFs","_interopRequireDefault","_shared","_getFileIdx","_parseRequest","e","__esModule","default","hashContent","content","createHash","update","digest","cacheLogger","logger","extend","cacheNames","loggers","reduce","acc","key","TransformCacheCollection","contentHashes","Map","constructor","caches","entrypoints","exports","add","cacheName","value","cache","getFileIdx","undefined","has","get","delete","set","maybeOriginalCode","originalCode","isLoaded","initialCode","source","resolvedCode","setContentHash","fileContent","fs","readFileSync","stripQueryAndHash","clear","forEach","name","invalidate","res","invalidateForFile","filename","invalidateIfChanged","previousVisitedFiles","visitedFiles","Set","fileEntrypoint","dependency","dependencies","dependencyFilename","resolved","dependencyContent","existing","previousHash","newHash","otherSource","otherHash","hash","current"],"sources":["../src/cache.ts"],"sourcesContent":["import { createHash } from 'crypto';\nimport fs from 'node:fs';\nimport { logger } from '@wyw-in-js/shared';\n\nimport type { Entrypoint } from './transform/Entrypoint';\nimport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nimport { getFileIdx } from './utils/getFileIdx';\nimport { stripQueryAndHash } from './utils/parseRequest';\n\nfunction hashContent(content: string) {\n return createHash('sha256').update(content).digest('hex');\n}\n\ninterface IBaseCachedEntrypoint {\n dependencies: Map<string, { resolved: string | null }>;\n initialCode?: string;\n}\n\ninterface ICaches<TEntrypoint extends IBaseCachedEntrypoint> {\n entrypoints: Map<string, TEntrypoint>;\n exports: Map<string, string[]>;\n}\n\ntype MapValue<T> = T extends Map<string, infer V> ? V : never;\n\nconst cacheLogger = logger.extend('cache');\n\nconst cacheNames = ['entrypoints', 'exports'] as const;\ntype CacheNames = (typeof cacheNames)[number];\n\nconst loggers = cacheNames.reduce(\n (acc, key) => ({\n ...acc,\n [key]: cacheLogger.extend(key),\n }),\n {} as Record<CacheNames, typeof logger>\n);\n\nexport class TransformCacheCollection<\n TEntrypoint extends IBaseCachedEntrypoint = Entrypoint | IEvaluatedEntrypoint,\n> {\n public readonly entrypoints: Map<string, TEntrypoint>;\n\n public readonly exports: Map<string, string[]>;\n\n private contentHashes = new Map<string, { fs?: string; loaded?: string }>();\n\n constructor(caches: Partial<ICaches<TEntrypoint>> = {}) {\n this.entrypoints = caches.entrypoints || new Map();\n this.exports = caches.exports || new Map();\n }\n\n public add<\n TCache extends CacheNames,\n TValue extends MapValue<ICaches<TEntrypoint>[TCache]>,\n >(cacheName: TCache, key: string, value: TValue): void {\n const cache = this[cacheName] as Map<string, TValue>;\n loggers[cacheName]('%s:add %s %f', getFileIdx(key), key, () => {\n if (value === undefined) {\n return cache.has(key) ? 'removed' : 'noop';\n }\n\n if (!cache.has(key)) {\n return 'added';\n }\n\n return cache.get(key) === value ? 'unchanged' : 'updated';\n });\n\n if (value === undefined) {\n cache.delete(key);\n this.contentHashes.delete(key);\n return;\n }\n\n cache.set(key, value);\n\n if ('initialCode' in value) {\n const maybeOriginalCode = (value as unknown as { originalCode?: unknown })\n .originalCode;\n const isLoaded = typeof value.initialCode === 'string';\n const source = isLoaded ? 'loaded' : 'fs';\n\n let resolvedCode: string | undefined;\n if (isLoaded) {\n resolvedCode = value.initialCode;\n } else if (typeof maybeOriginalCode === 'string') {\n resolvedCode = maybeOriginalCode;\n }\n\n if (resolvedCode !== undefined) {\n this.setContentHash(key, source, hashContent(resolvedCode));\n return;\n }\n\n try {\n const fileContent = fs.readFileSync(stripQueryAndHash(key), 'utf8');\n this.setContentHash(key, source, hashContent(fileContent));\n } catch {\n this.setContentHash(key, source, hashContent(''));\n }\n }\n }\n\n public clear(cacheName: CacheNames | 'all'): void {\n if (cacheName === 'all') {\n cacheNames.forEach((name) => {\n this.clear(name);\n });\n\n return;\n }\n\n loggers[cacheName]('clear');\n const cache = this[cacheName] as Map<string, unknown>;\n\n cache.clear();\n }\n\n public delete(cacheName: CacheNames, key: string): void {\n this.invalidate(cacheName, key);\n }\n\n public get<\n TCache extends CacheNames,\n TValue extends MapValue<ICaches<TEntrypoint>[TCache]>,\n >(cacheName: TCache, key: string): TValue | undefined {\n const cache = this[cacheName] as Map<string, TValue>;\n\n const res = cache.get(key);\n loggers[cacheName]('get', key, res === undefined ? 'miss' : 'hit');\n return res;\n }\n\n public has(cacheName: CacheNames, key: string): boolean {\n const cache = this[cacheName] as Map<string, unknown>;\n\n const res = cache.has(key);\n loggers[cacheName]('has', key, res);\n return res;\n }\n\n public invalidate(cacheName: CacheNames, key: string): void {\n const cache = this[cacheName] as Map<string, unknown>;\n if (!cache.has(key)) {\n return;\n }\n\n loggers[cacheName]('invalidate', key);\n\n cache.delete(key);\n }\n\n public invalidateForFile(filename: string) {\n cacheNames.forEach((cacheName) => {\n this.invalidate(cacheName, filename);\n });\n }\n\n public invalidateIfChanged(\n filename: string,\n content: string,\n previousVisitedFiles?: Set<string>,\n source: 'fs' | 'loaded' = 'loaded'\n ) {\n const visitedFiles = new Set(previousVisitedFiles);\n const fileEntrypoint = this.get('entrypoints', filename);\n\n // We need to check all dependencies of the file\n // because they might have changed as well.\n if (fileEntrypoint && !visitedFiles.has(filename)) {\n visitedFiles.add(filename);\n\n for (const [, dependency] of fileEntrypoint.dependencies) {\n const dependencyFilename = dependency.resolved;\n\n if (dependencyFilename) {\n const dependencyContent = fs.readFileSync(\n stripQueryAndHash(dependencyFilename),\n 'utf8'\n );\n this.invalidateIfChanged(\n dependencyFilename,\n dependencyContent,\n visitedFiles,\n 'fs'\n );\n }\n }\n }\n\n const existing = this.contentHashes.get(filename);\n const previousHash = existing?.[source];\n const newHash = hashContent(content);\n\n if (previousHash === undefined) {\n const otherSource = source === 'fs' ? 'loaded' : 'fs';\n const otherHash = existing?.[otherSource];\n\n if (otherHash !== undefined && otherHash !== newHash) {\n cacheLogger('content has changed, invalidate all for %s', filename);\n this.setContentHash(filename, source, newHash);\n this.invalidateForFile(filename);\n\n return true;\n }\n\n this.setContentHash(filename, source, newHash);\n return false;\n }\n\n if (previousHash !== newHash) {\n cacheLogger('content has changed, invalidate all for %s', filename);\n this.setContentHash(filename, source, newHash);\n this.invalidateForFile(filename);\n\n return true;\n }\n\n return false;\n }\n\n private setContentHash(\n filename: string,\n source: 'fs' | 'loaded',\n hash: string\n ) {\n const current = this.contentHashes.get(filename);\n if (current) {\n current[source] = hash;\n return;\n }\n\n this.contentHashes.set(filename, { [source]: hash });\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/module.js CHANGED
@@ -349,7 +349,7 @@ class Module {
349
349
  const extensions = this.moduleImpl._extensions;
350
350
  const added = [];
351
351
  try {
352
- var _this$services$option, _override$unknown;
352
+ var _override$unknown;
353
353
  // Check for supported extensions
354
354
  this.extensions.forEach(ext => {
355
355
  if (ext in extensions) {
@@ -386,7 +386,7 @@ class Module {
386
386
  resolved,
387
387
  root
388
388
  });
389
- const override = (_this$services$option = this.services.options.pluginOptions.importOverrides) === null || _this$services$option === void 0 ? void 0 : _this$services$option[keyInfo.key];
389
+ const override = (0, _importOverrides.getImportOverride)(this.services.options.pluginOptions.importOverrides, keyInfo.key);
390
390
  const policy = (_override$unknown = override === null || override === void 0 ? void 0 : override.unknown) !== null && _override$unknown !== void 0 ? _override$unknown : override !== null && override !== void 0 && override.mock ? 'allow' : 'warn';
391
391
  const shouldWarn = !this.ignored && policy === 'warn';
392
392
  let finalResolved = resolved;
package/lib/module.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","names":["_fs","_interopRequireDefault","require","_module","_path","_vm","_tsInvariant","_shared","_Entrypoint","_Entrypoint2","_UnprocessedEntrypointError","_importOverrides","_parseRequest","_createVmContext","e","__esModule","default","DefaultModuleImplementation","exports","NativeModule","builtins","assert","buffer","child_process","cluster","console","constants","crypto","dgram","dns","domain","events","fs","http","https","module","net","os","path","punycode","process","querystring","readline","repl","stream","string_decoder","sys","timers","tls","tty","url","util","vm","zlib","VITE_VIRTUAL_PREFIX","REACT_REFRESH_VIRTUAL_ID","reactRefreshRuntime","createSignatureFunctionForTransform","NOOP","browserOnlyEvalHintTriggers","getBrowserOnlyEvalHint","error","message","Error","String","looksLikeBrowserOnly","some","trigger","includes","join","warnedUnknownImportsByServices","WeakMap","emitWarning","services","warn","getWarnedUnknownImports","cached","get","created","Set","set","getUncached","test","cachedSet","split","has","filter","t","resolve","id","resolved","resolveDependency","invariant","defaultImportLoaders","raw","Module","callstack","isEvaluated","Object","assign","dependencies","push","debug","startsWith","dependency","isAbsolute","source","loaded","loadByImportLoaders","handled","value","entrypoint","getEntrypoint","only","evaluated","isSuperSet","evaluatedOnly","m","createChild","evaluate","ensure","bind","entrypointRef","constructor","parentModule","moduleImpl","_parentModule$ignored","_entrypoint$ignored","cache","isFeatureEnabled","options","pluginOptions","features","name","WeakRef","idx","filename","log","extend","parentIsIgnored","ignored","extensions","deref","assertTransformed","evaluatedCreated","supersededWith","add","createEvaluated","transformedCode","stripQueryAndHash","JSON","parse","context","teardown","createVmContext","__wyw_dynamic_import","__dirname","dirname","overrideContext","script","Script","runInContext","isUnprocessedEntrypointError","EvalError","baseMessage","hint","_entrypoint$evaluated","strippedFilename","extension","extname","newEntrypoint","readFileSync","stack","getStack","uncachedExports","reprocessOnly","_entrypoint$evaluated2","_entrypoint$only","_entrypoint$evaluated3","evaluatedExports","length","mergeOnly","code","Entrypoint","createRoot","getDependency","Promise","_extensions","added","_this$services$option","_override$unknown","forEach","ext","strippedId","_resolveFilename","paths","_nodeModulePaths","isFileSpecifier","endsWith","existsSync","slice","root","keyInfo","toImportKey","override","importOverrides","key","policy","unknown","mock","shouldWarn","finalResolved","resolveMockSpecifier","importer","_message","errorMessage","map","item","Boolean","warnedUnknownImports","stringify","applyImportOverrideToOnly","request","importLoaders","undefined","query","hash","parseRequest","params","URLSearchParams","matchedKey","Array","from","keys","find","loader","importerDir","toUrl","relative","replace","posix","sep","readFile"],"sources":["../src/module.ts"],"sourcesContent":["/**\n * This is a custom implementation for the module system for evaluating code,\n * used for resolving values for dependencies interpolated in `css` or `styled`.\n *\n * This serves 2 purposes:\n * - Avoid leakage from evaluated code to module cache in current context, e.g. `babel-register`\n * - Allow us to invalidate the module cache without affecting other stuff, necessary for rebuilds\n *\n * We also use it to transpile the code with Babel by default.\n * We also store source maps for it to provide correct error stacktraces.\n *\n */\n\nimport fs from 'fs';\nimport NativeModule from 'module';\nimport path from 'path';\nimport vm from 'vm';\n\nimport { invariant } from 'ts-invariant';\n\nimport {\n isFeatureEnabled,\n type Debugger,\n type ImportLoaderContext,\n type ImportLoaders,\n} from '@wyw-in-js/shared';\n\nimport './utils/dispose-polyfill';\nimport type { TransformCacheCollection } from './cache';\nimport { Entrypoint } from './transform/Entrypoint';\nimport {\n getStack,\n isSuperSet,\n mergeOnly,\n} from './transform/Entrypoint.helpers';\nimport type { IEntrypointDependency } from './transform/Entrypoint.types';\nimport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nimport { isUnprocessedEntrypointError } from './transform/actions/UnprocessedEntrypointError';\nimport type { Services } from './transform/types';\nimport {\n applyImportOverrideToOnly,\n resolveMockSpecifier,\n toImportKey,\n} from './utils/importOverrides';\nimport { parseRequest, stripQueryAndHash } from './utils/parseRequest';\nimport { createVmContext } from './vm/createVmContext';\n\ntype HiddenModuleMembers = {\n _extensions: Record<string, () => void>;\n _resolveFilename: (\n id: string,\n options: { filename: string; id: string; paths: string[] }\n ) => string;\n _nodeModulePaths(filename: string): string[];\n};\n\nexport const DefaultModuleImplementation = NativeModule as typeof NativeModule &\n HiddenModuleMembers;\n\n// Supported node builtins based on the modules polyfilled by webpack\n// `true` means module is polyfilled, `false` means module is empty\nconst builtins = {\n assert: true,\n buffer: true,\n child_process: false,\n cluster: false,\n console: true,\n constants: true,\n crypto: true,\n dgram: false,\n dns: false,\n domain: true,\n events: true,\n fs: false,\n http: true,\n https: true,\n module: false,\n net: false,\n os: true,\n path: true,\n punycode: true,\n process: true,\n querystring: true,\n readline: false,\n repl: false,\n stream: true,\n string_decoder: true,\n sys: true,\n timers: true,\n tls: false,\n tty: true,\n url: true,\n util: true,\n vm: true,\n zlib: true,\n};\n\nconst VITE_VIRTUAL_PREFIX = '/@';\nconst REACT_REFRESH_VIRTUAL_ID = '/@react-refresh';\nconst reactRefreshRuntime = {\n createSignatureFunctionForTransform: () => () => {},\n};\n\nconst NOOP = () => {};\n\nconst browserOnlyEvalHintTriggers = [\n 'window is not defined',\n \"evaluating 'window\",\n 'document is not defined',\n \"evaluating 'document\",\n 'navigator is not defined',\n \"evaluating 'navigator\",\n 'self is not defined',\n \"evaluating 'self\",\n];\n\nconst getBrowserOnlyEvalHint = (error: unknown): string | null => {\n const message = error instanceof Error ? error.message : String(error);\n const looksLikeBrowserOnly = browserOnlyEvalHintTriggers.some((trigger) =>\n message.includes(trigger)\n );\n if (!looksLikeBrowserOnly) return null;\n\n return [\n '',\n '[wyw-in-js] Evaluation hint:',\n 'This usually means browser-only code ran during build-time evaluation.',\n 'Move browser-only initialization out of evaluated modules, or mock the import via `importOverrides`.',\n \"Example: importOverrides: { 'msw/browser': { mock: './src/__mocks__/msw-browser.js' } }\",\n ].join('\\n');\n};\n\nconst warnedUnknownImportsByServices = 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 getWarnedUnknownImports(services: Services): Set<string> {\n const cached = warnedUnknownImportsByServices.get(services);\n if (cached) {\n return cached;\n }\n\n const created = new Set<string>();\n warnedUnknownImportsByServices.set(services, created);\n return created;\n}\n\nfunction getUncached(cached: string | string[], test: string[]): string[] {\n const cachedSet = new Set(\n typeof cached === 'string' ? cached.split(',') : cached\n );\n\n if (cachedSet.has('*')) {\n return [];\n }\n\n return test.filter((t) => !cachedSet.has(t));\n}\n\nfunction resolve(\n this: { resolveDependency: (id: string) => IEntrypointDependency },\n id: string\n): string {\n const { resolved } = this.resolveDependency(id);\n invariant(resolved, `Unable to resolve \"${id}\"`);\n return resolved;\n}\n\nconst defaultImportLoaders: ImportLoaders = {\n raw: 'raw',\n url: 'url',\n};\n\nexport class Module {\n public readonly callstack: string[] = [];\n\n public readonly debug: Debugger;\n\n public readonly dependencies: string[];\n\n public readonly extensions: string[];\n\n public readonly filename: string;\n\n public id: string;\n\n public readonly idx: string;\n\n public readonly ignored: boolean;\n\n public isEvaluated: boolean = false;\n\n public readonly parentIsIgnored: boolean;\n\n public require: {\n (id: string): unknown;\n ensure: () => void;\n resolve: (id: string) => string;\n } = Object.assign(\n (id: string) => {\n if (id === REACT_REFRESH_VIRTUAL_ID) {\n this.dependencies.push(id);\n this.debug('require', `vite virtual '${id}'`);\n return reactRefreshRuntime;\n }\n\n if (id.startsWith(VITE_VIRTUAL_PREFIX)) {\n this.dependencies.push(id);\n this.debug('require', `vite virtual '${id}'`);\n return {};\n }\n\n if (id in builtins) {\n // The module is in the allowed list of builtin node modules\n // Ideally we should prevent importing them, but webpack polyfills some\n // So we check for the list of polyfills to determine which ones to support\n if (builtins[id as keyof typeof builtins]) {\n this.debug('require', `builtin '${id}'`);\n return require(id);\n }\n\n return null;\n }\n\n // Resolve module id (and filename) relatively to parent module\n const dependency = this.resolveDependency(id);\n if (dependency.resolved === id && !path.isAbsolute(id)) {\n // The module is a builtin node modules, but not in the allowed list\n throw new Error(\n `Unable to import \"${id}\". Importing Node builtins is not supported in the sandbox.`\n );\n }\n\n invariant(\n dependency.resolved,\n `Dependency ${dependency.source} cannot be resolved`\n );\n\n const loaded = this.loadByImportLoaders(id, dependency.resolved);\n if (loaded.handled) {\n this.dependencies.push(id);\n this.debug('require', `${id} -> ${dependency.resolved} (loader)`);\n return loaded.value;\n }\n\n this.dependencies.push(id);\n\n this.debug('require', `${id} -> ${dependency.resolved}`);\n\n const entrypoint = this.getEntrypoint(\n dependency.resolved,\n dependency.only,\n this.debug\n );\n\n if (entrypoint === null) {\n return dependency.resolved;\n }\n\n if (\n entrypoint.evaluated ||\n isSuperSet(entrypoint.evaluatedOnly, dependency.only)\n ) {\n return entrypoint.exports;\n }\n\n const m = this.createChild(entrypoint);\n m.evaluate();\n\n return entrypoint.exports;\n },\n {\n ensure: NOOP,\n resolve: resolve.bind(this),\n }\n );\n\n public resolve = resolve.bind(this);\n\n private cache: TransformCacheCollection;\n\n #entrypointRef: WeakRef<Entrypoint> | Entrypoint;\n\n constructor(\n private services: Services,\n entrypoint: Entrypoint,\n parentModule?: Module,\n private moduleImpl: HiddenModuleMembers = DefaultModuleImplementation\n ) {\n this.cache = services.cache;\n this.#entrypointRef = isFeatureEnabled(\n services.options.pluginOptions.features,\n 'useWeakRefInEval',\n entrypoint.name\n )\n ? new WeakRef(entrypoint)\n : entrypoint;\n this.idx = entrypoint.idx;\n this.id = entrypoint.name;\n this.filename = entrypoint.name;\n this.dependencies = [];\n this.debug = entrypoint.log.extend('module');\n this.parentIsIgnored = parentModule?.ignored ?? false;\n this.ignored = entrypoint.ignored ?? this.parentIsIgnored;\n\n if (parentModule) {\n this.callstack = [entrypoint.name, ...parentModule.callstack];\n } else {\n this.callstack = [entrypoint.name];\n }\n\n this.extensions = services.options.pluginOptions.extensions;\n\n this.debug('init', entrypoint.name);\n }\n\n public get exports() {\n return this.entrypoint.exports;\n }\n\n public set exports(value) {\n this.entrypoint.exports = value;\n\n this.debug('the whole exports was overridden with %O', value);\n }\n\n protected get entrypoint(): Entrypoint {\n const entrypoint =\n this.#entrypointRef instanceof WeakRef\n ? this.#entrypointRef.deref()\n : this.#entrypointRef;\n invariant(entrypoint, `Module ${this.idx} is disposed`);\n return entrypoint;\n }\n\n evaluate(): void {\n const { entrypoint } = this;\n entrypoint.assertTransformed();\n\n const cached = this.cache.get('entrypoints', entrypoint.name)!;\n let evaluatedCreated = false;\n if (!entrypoint.supersededWith) {\n this.cache.add(\n 'entrypoints',\n entrypoint.name,\n entrypoint.createEvaluated()\n );\n evaluatedCreated = true;\n }\n\n const { transformedCode: source } = entrypoint;\n const { pluginOptions } = this.services.options;\n\n if (!source) {\n this.debug(`evaluate`, 'there is nothing to evaluate');\n return;\n }\n\n if (this.isEvaluated) {\n this.debug('evaluate', `is already evaluated`);\n return;\n }\n\n this.debug('evaluate');\n this.debug.extend('source')('%s', source);\n\n this.isEvaluated = true;\n\n const filename = stripQueryAndHash(this.filename);\n\n if (/\\.json$/.test(filename)) {\n // For JSON files, parse it to a JS object similar to Node\n this.exports = JSON.parse(source);\n return;\n }\n\n const { context, teardown } = createVmContext(\n filename,\n pluginOptions.features,\n {\n module: this,\n exports: entrypoint.exports,\n require: this.require,\n __wyw_dynamic_import: async (id: unknown) => this.require(String(id)),\n __dirname: path.dirname(filename),\n },\n pluginOptions.overrideContext\n );\n\n try {\n const script = new vm.Script(\n `(function (exports) { ${source}\\n})(exports);`,\n {\n filename,\n }\n );\n\n script.runInContext(context);\n } catch (e) {\n this.isEvaluated = false;\n if (evaluatedCreated) {\n this.cache.add('entrypoints', entrypoint.name, cached);\n }\n\n if (isUnprocessedEntrypointError(e)) {\n // It will be handled by evalFile scenario\n throw e;\n }\n\n if (e instanceof EvalError) {\n this.debug('%O', e);\n\n throw e;\n }\n\n this.debug('%O\\n%O', e, this.callstack);\n const baseMessage = `${(e as Error).message} in${this.callstack.join(\n '\\n| '\n )}\\n`;\n const hint = getBrowserOnlyEvalHint(e);\n\n throw new EvalError(hint ? `${baseMessage}${hint}\\n` : baseMessage);\n } finally {\n teardown();\n }\n }\n\n getEntrypoint(\n filename: string,\n only: string[],\n log: Debugger\n ): Entrypoint | IEvaluatedEntrypoint | null {\n const strippedFilename = stripQueryAndHash(filename);\n const extension = path.extname(strippedFilename);\n if (extension !== '.json' && !this.extensions.includes(extension)) {\n return null;\n }\n\n const entrypoint = this.cache.get('entrypoints', filename);\n if (entrypoint && isSuperSet(entrypoint.evaluatedOnly ?? [], only)) {\n log('✅ file has been already evaluated');\n return entrypoint;\n }\n\n if (entrypoint?.ignored) {\n log(\n '✅ file has been ignored during prepare stage. Original code will be used'\n );\n return entrypoint;\n }\n\n if (this.ignored) {\n log(\n '✅ one of the parent files has been ignored during prepare stage. Original code will be used'\n );\n\n const newEntrypoint = this.entrypoint.createChild(\n filename,\n ['*'],\n fs.readFileSync(strippedFilename, 'utf-8')\n );\n\n if (newEntrypoint === 'loop') {\n const stack = getStack(this.entrypoint);\n throw new Error(\n `Circular dependency detected: ${stack.join(' -> ')} -> ${filename}`\n );\n }\n\n return newEntrypoint;\n }\n\n let uncachedExports: string[] | null = null;\n let reprocessOnly: string[] = only;\n // Requested file can be already prepared for evaluation on the stage 1\n if (only && entrypoint) {\n const evaluatedExports =\n entrypoint.evaluatedOnly?.length !== 0\n ? entrypoint.evaluatedOnly\n : entrypoint.only ?? [];\n uncachedExports = getUncached(evaluatedExports, only);\n if (uncachedExports.length === 0) {\n log('✅ ready for evaluation');\n return entrypoint;\n }\n\n if (entrypoint.evaluatedOnly?.length) {\n reprocessOnly = mergeOnly(evaluatedExports, only);\n }\n\n log(\n '❌ file has been processed during prepare stage but %o is not evaluated yet (evaluated: %o)',\n uncachedExports,\n evaluatedExports\n );\n } else {\n log('❌ file has not been processed during prepare stage');\n }\n\n // If code wasn't extracted from cache, it indicates that we were unable\n // to process some of the imports on stage1. Let's try to reprocess.\n const code = fs.readFileSync(strippedFilename, 'utf-8');\n const newEntrypoint = Entrypoint.createRoot(\n this.services,\n filename,\n reprocessOnly,\n code\n );\n\n if (newEntrypoint.evaluated) {\n log('✅ file has been already evaluated');\n return newEntrypoint;\n }\n\n if (newEntrypoint.ignored) {\n log(\n '✅ file has been ignored during prepare stage. Original code will be used'\n );\n return newEntrypoint;\n }\n\n return newEntrypoint;\n }\n\n resolveDependency = (id: string): IEntrypointDependency => {\n const cached = this.entrypoint.getDependency(id);\n invariant(!(cached instanceof Promise), 'Dependency is not resolved yet');\n\n if (cached) {\n return cached;\n }\n\n if (!this.ignored) {\n this.debug(\n '❌ import has not been resolved during prepare stage. Fallback to Node.js resolver'\n );\n }\n\n const extensions = this.moduleImpl._extensions;\n const added: string[] = [];\n\n try {\n // Check for supported extensions\n this.extensions.forEach((ext) => {\n if (ext in extensions) {\n return;\n }\n\n // When an extension is not supported, add it\n // And keep track of it to clean it up after resolving\n // Use noop for the transform function since we handle it\n extensions[ext] = NOOP;\n added.push(ext);\n });\n\n const { filename } = this;\n const strippedId = stripQueryAndHash(id);\n\n let resolved = this.moduleImpl._resolveFilename(strippedId, {\n id: filename,\n filename,\n paths: this.moduleImpl._nodeModulePaths(path.dirname(filename)),\n });\n\n const isFileSpecifier =\n strippedId.startsWith('.') || path.isAbsolute(strippedId);\n\n if (\n isFileSpecifier &&\n path.extname(strippedId) === '' &&\n resolved.endsWith('.cjs') &&\n fs.existsSync(`${resolved.slice(0, -4)}.js`)\n ) {\n // When both `.cjs` and `.js` exist for an extensionless specifier, the\n // resolver may pick `.cjs` depending on the environment/extensions.\n // Prefer `.js` to keep resolved paths stable (e.g. importOverrides keys).\n resolved = `${resolved.slice(0, -4)}.js`;\n }\n\n const { root } = this.services.options;\n const keyInfo = toImportKey({\n source: id,\n resolved,\n root,\n });\n\n const override =\n this.services.options.pluginOptions.importOverrides?.[keyInfo.key];\n\n const policy = override?.unknown ?? (override?.mock ? 'allow' : 'warn');\n const shouldWarn = !this.ignored && policy === 'warn';\n\n let finalResolved = resolved;\n if (override?.mock) {\n try {\n finalResolved = resolveMockSpecifier({\n mock: override.mock,\n importer: filename,\n root,\n stack: this.callstack,\n });\n } catch (e) {\n const errorMessage = String((e as Error)?.message ?? e);\n throw new Error(\n `[wyw-in-js] Failed to resolve import mock for \"${keyInfo.key}\" (${id} from ${filename}): ${errorMessage}`\n );\n }\n }\n\n if (policy === 'error') {\n throw new Error(\n [\n `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n `resolved: ${resolved}`,\n override?.mock\n ? `mock: ${override.mock} -> ${finalResolved}`\n : ``,\n ``,\n `callstack:`,\n ...this.callstack.map((item) => ` ${item}`),\n ``,\n `config key: ${keyInfo.key}`,\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n\n const warnedUnknownImports = getWarnedUnknownImports(this.services);\n\n if (shouldWarn && !warnedUnknownImports.has(keyInfo.key)) {\n warnedUnknownImports.add(keyInfo.key);\n emitWarning(\n this.services,\n [\n `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n `resolved: ${resolved}`,\n override?.mock\n ? `mock: ${override.mock} -> ${finalResolved}`\n : ``,\n ``,\n `callstack:`,\n ...this.callstack.map((item) => ` ${item}`),\n ``,\n `config key: ${keyInfo.key}`,\n `hint: add { importOverrides: { ${JSON.stringify(\n keyInfo.key\n )}: { unknown: 'allow' } } } to silence warnings, or use { mock } / { noShake: true } overrides.`,\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n\n return {\n source: id,\n only: applyImportOverrideToOnly(['*'], override),\n resolved: finalResolved,\n };\n } finally {\n // Cleanup the extensions we added to restore previous behaviour\n added.forEach((ext) => delete extensions[ext]);\n }\n };\n\n protected createChild(entrypoint: Entrypoint): Module {\n return new Module(this.services, entrypoint, this, this.moduleImpl);\n }\n\n private loadByImportLoaders(\n request: string,\n resolved: string\n ): { handled: boolean; value: unknown } {\n const { pluginOptions } = this.services.options;\n const importLoaders =\n pluginOptions.importLoaders === undefined\n ? defaultImportLoaders\n : { ...defaultImportLoaders, ...pluginOptions.importLoaders };\n\n const { query, hash } = parseRequest(request);\n if (!query) return { handled: false, value: undefined };\n\n const params = new URLSearchParams(query);\n const matchedKey = Array.from(params.keys()).find(\n (key) => importLoaders[key] !== undefined && importLoaders[key] !== false\n );\n\n if (!matchedKey) return { handled: false, value: undefined };\n\n const loader = importLoaders[matchedKey];\n\n const filename = stripQueryAndHash(resolved);\n const importer = stripQueryAndHash(this.filename);\n const importerDir = path.dirname(importer);\n\n const toUrl = () => {\n const relative = path\n .relative(importerDir, filename)\n .replace(/\\\\/g, path.posix.sep);\n\n if (relative.startsWith('.') || path.isAbsolute(relative)) {\n return relative;\n }\n\n return `./${relative}`;\n };\n\n const readFile = () => fs.readFileSync(filename, 'utf-8');\n\n const context: ImportLoaderContext = {\n importer,\n request,\n resolved,\n filename,\n query,\n hash,\n emitWarning: (message) => emitWarning(this.services, message),\n readFile,\n toUrl,\n };\n\n if (loader === 'raw') {\n return { handled: true, value: context.readFile() };\n }\n\n if (loader === 'url') {\n return { handled: true, value: context.toUrl() };\n }\n\n if (typeof loader === 'function') {\n return { handled: true, value: loader(context) };\n }\n\n return { handled: false, value: undefined };\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"module.js","names":["_fs","_interopRequireDefault","require","_module","_path","_vm","_tsInvariant","_shared","_Entrypoint","_Entrypoint2","_UnprocessedEntrypointError","_importOverrides","_parseRequest","_createVmContext","e","__esModule","default","DefaultModuleImplementation","exports","NativeModule","builtins","assert","buffer","child_process","cluster","console","constants","crypto","dgram","dns","domain","events","fs","http","https","module","net","os","path","punycode","process","querystring","readline","repl","stream","string_decoder","sys","timers","tls","tty","url","util","vm","zlib","VITE_VIRTUAL_PREFIX","REACT_REFRESH_VIRTUAL_ID","reactRefreshRuntime","createSignatureFunctionForTransform","NOOP","browserOnlyEvalHintTriggers","getBrowserOnlyEvalHint","error","message","Error","String","looksLikeBrowserOnly","some","trigger","includes","join","warnedUnknownImportsByServices","WeakMap","emitWarning","services","warn","getWarnedUnknownImports","cached","get","created","Set","set","getUncached","test","cachedSet","split","has","filter","t","resolve","id","resolved","resolveDependency","invariant","defaultImportLoaders","raw","Module","callstack","isEvaluated","Object","assign","dependencies","push","debug","startsWith","dependency","isAbsolute","source","loaded","loadByImportLoaders","handled","value","entrypoint","getEntrypoint","only","evaluated","isSuperSet","evaluatedOnly","m","createChild","evaluate","ensure","bind","entrypointRef","constructor","parentModule","moduleImpl","_parentModule$ignored","_entrypoint$ignored","cache","isFeatureEnabled","options","pluginOptions","features","name","WeakRef","idx","filename","log","extend","parentIsIgnored","ignored","extensions","deref","assertTransformed","evaluatedCreated","supersededWith","add","createEvaluated","transformedCode","stripQueryAndHash","JSON","parse","context","teardown","createVmContext","__wyw_dynamic_import","__dirname","dirname","overrideContext","script","Script","runInContext","isUnprocessedEntrypointError","EvalError","baseMessage","hint","_entrypoint$evaluated","strippedFilename","extension","extname","newEntrypoint","readFileSync","stack","getStack","uncachedExports","reprocessOnly","_entrypoint$evaluated2","_entrypoint$only","_entrypoint$evaluated3","evaluatedExports","length","mergeOnly","code","Entrypoint","createRoot","getDependency","Promise","_extensions","added","_override$unknown","forEach","ext","strippedId","_resolveFilename","paths","_nodeModulePaths","isFileSpecifier","endsWith","existsSync","slice","root","keyInfo","toImportKey","override","getImportOverride","importOverrides","key","policy","unknown","mock","shouldWarn","finalResolved","resolveMockSpecifier","importer","_message","errorMessage","map","item","Boolean","warnedUnknownImports","stringify","applyImportOverrideToOnly","request","importLoaders","undefined","query","hash","parseRequest","params","URLSearchParams","matchedKey","Array","from","keys","find","loader","importerDir","toUrl","relative","replace","posix","sep","readFile"],"sources":["../src/module.ts"],"sourcesContent":["/**\n * This is a custom implementation for the module system for evaluating code,\n * used for resolving values for dependencies interpolated in `css` or `styled`.\n *\n * This serves 2 purposes:\n * - Avoid leakage from evaluated code to module cache in current context, e.g. `babel-register`\n * - Allow us to invalidate the module cache without affecting other stuff, necessary for rebuilds\n *\n * We also use it to transpile the code with Babel by default.\n * We also store source maps for it to provide correct error stacktraces.\n *\n */\n\nimport fs from 'fs';\nimport NativeModule from 'module';\nimport path from 'path';\nimport vm from 'vm';\n\nimport { invariant } from 'ts-invariant';\n\nimport {\n isFeatureEnabled,\n type Debugger,\n type ImportLoaderContext,\n type ImportLoaders,\n} from '@wyw-in-js/shared';\n\nimport './utils/dispose-polyfill';\nimport type { TransformCacheCollection } from './cache';\nimport { Entrypoint } from './transform/Entrypoint';\nimport {\n getStack,\n isSuperSet,\n mergeOnly,\n} from './transform/Entrypoint.helpers';\nimport type { IEntrypointDependency } from './transform/Entrypoint.types';\nimport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nimport { isUnprocessedEntrypointError } from './transform/actions/UnprocessedEntrypointError';\nimport type { Services } from './transform/types';\nimport {\n applyImportOverrideToOnly,\n getImportOverride,\n resolveMockSpecifier,\n toImportKey,\n} from './utils/importOverrides';\nimport { parseRequest, stripQueryAndHash } from './utils/parseRequest';\nimport { createVmContext } from './vm/createVmContext';\n\ntype HiddenModuleMembers = {\n _extensions: Record<string, () => void>;\n _resolveFilename: (\n id: string,\n options: { filename: string; id: string; paths: string[] }\n ) => string;\n _nodeModulePaths(filename: string): string[];\n};\n\nexport const DefaultModuleImplementation = NativeModule as typeof NativeModule &\n HiddenModuleMembers;\n\n// Supported node builtins based on the modules polyfilled by webpack\n// `true` means module is polyfilled, `false` means module is empty\nconst builtins = {\n assert: true,\n buffer: true,\n child_process: false,\n cluster: false,\n console: true,\n constants: true,\n crypto: true,\n dgram: false,\n dns: false,\n domain: true,\n events: true,\n fs: false,\n http: true,\n https: true,\n module: false,\n net: false,\n os: true,\n path: true,\n punycode: true,\n process: true,\n querystring: true,\n readline: false,\n repl: false,\n stream: true,\n string_decoder: true,\n sys: true,\n timers: true,\n tls: false,\n tty: true,\n url: true,\n util: true,\n vm: true,\n zlib: true,\n};\n\nconst VITE_VIRTUAL_PREFIX = '/@';\nconst REACT_REFRESH_VIRTUAL_ID = '/@react-refresh';\nconst reactRefreshRuntime = {\n createSignatureFunctionForTransform: () => () => {},\n};\n\nconst NOOP = () => {};\n\nconst browserOnlyEvalHintTriggers = [\n 'window is not defined',\n \"evaluating 'window\",\n 'document is not defined',\n \"evaluating 'document\",\n 'navigator is not defined',\n \"evaluating 'navigator\",\n 'self is not defined',\n \"evaluating 'self\",\n];\n\nconst getBrowserOnlyEvalHint = (error: unknown): string | null => {\n const message = error instanceof Error ? error.message : String(error);\n const looksLikeBrowserOnly = browserOnlyEvalHintTriggers.some((trigger) =>\n message.includes(trigger)\n );\n if (!looksLikeBrowserOnly) return null;\n\n return [\n '',\n '[wyw-in-js] Evaluation hint:',\n 'This usually means browser-only code ran during build-time evaluation.',\n 'Move browser-only initialization out of evaluated modules, or mock the import via `importOverrides`.',\n \"Example: importOverrides: { 'msw/browser': { mock: './src/__mocks__/msw-browser.js' } }\",\n ].join('\\n');\n};\n\nconst warnedUnknownImportsByServices = 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 getWarnedUnknownImports(services: Services): Set<string> {\n const cached = warnedUnknownImportsByServices.get(services);\n if (cached) {\n return cached;\n }\n\n const created = new Set<string>();\n warnedUnknownImportsByServices.set(services, created);\n return created;\n}\n\nfunction getUncached(cached: string | string[], test: string[]): string[] {\n const cachedSet = new Set(\n typeof cached === 'string' ? cached.split(',') : cached\n );\n\n if (cachedSet.has('*')) {\n return [];\n }\n\n return test.filter((t) => !cachedSet.has(t));\n}\n\nfunction resolve(\n this: { resolveDependency: (id: string) => IEntrypointDependency },\n id: string\n): string {\n const { resolved } = this.resolveDependency(id);\n invariant(resolved, `Unable to resolve \"${id}\"`);\n return resolved;\n}\n\nconst defaultImportLoaders: ImportLoaders = {\n raw: 'raw',\n url: 'url',\n};\n\nexport class Module {\n public readonly callstack: string[] = [];\n\n public readonly debug: Debugger;\n\n public readonly dependencies: string[];\n\n public readonly extensions: string[];\n\n public readonly filename: string;\n\n public id: string;\n\n public readonly idx: string;\n\n public readonly ignored: boolean;\n\n public isEvaluated: boolean = false;\n\n public readonly parentIsIgnored: boolean;\n\n public require: {\n (id: string): unknown;\n ensure: () => void;\n resolve: (id: string) => string;\n } = Object.assign(\n (id: string) => {\n if (id === REACT_REFRESH_VIRTUAL_ID) {\n this.dependencies.push(id);\n this.debug('require', `vite virtual '${id}'`);\n return reactRefreshRuntime;\n }\n\n if (id.startsWith(VITE_VIRTUAL_PREFIX)) {\n this.dependencies.push(id);\n this.debug('require', `vite virtual '${id}'`);\n return {};\n }\n\n if (id in builtins) {\n // The module is in the allowed list of builtin node modules\n // Ideally we should prevent importing them, but webpack polyfills some\n // So we check for the list of polyfills to determine which ones to support\n if (builtins[id as keyof typeof builtins]) {\n this.debug('require', `builtin '${id}'`);\n return require(id);\n }\n\n return null;\n }\n\n // Resolve module id (and filename) relatively to parent module\n const dependency = this.resolveDependency(id);\n if (dependency.resolved === id && !path.isAbsolute(id)) {\n // The module is a builtin node modules, but not in the allowed list\n throw new Error(\n `Unable to import \"${id}\". Importing Node builtins is not supported in the sandbox.`\n );\n }\n\n invariant(\n dependency.resolved,\n `Dependency ${dependency.source} cannot be resolved`\n );\n\n const loaded = this.loadByImportLoaders(id, dependency.resolved);\n if (loaded.handled) {\n this.dependencies.push(id);\n this.debug('require', `${id} -> ${dependency.resolved} (loader)`);\n return loaded.value;\n }\n\n this.dependencies.push(id);\n\n this.debug('require', `${id} -> ${dependency.resolved}`);\n\n const entrypoint = this.getEntrypoint(\n dependency.resolved,\n dependency.only,\n this.debug\n );\n\n if (entrypoint === null) {\n return dependency.resolved;\n }\n\n if (\n entrypoint.evaluated ||\n isSuperSet(entrypoint.evaluatedOnly, dependency.only)\n ) {\n return entrypoint.exports;\n }\n\n const m = this.createChild(entrypoint);\n m.evaluate();\n\n return entrypoint.exports;\n },\n {\n ensure: NOOP,\n resolve: resolve.bind(this),\n }\n );\n\n public resolve = resolve.bind(this);\n\n private cache: TransformCacheCollection;\n\n #entrypointRef: WeakRef<Entrypoint> | Entrypoint;\n\n constructor(\n private services: Services,\n entrypoint: Entrypoint,\n parentModule?: Module,\n private moduleImpl: HiddenModuleMembers = DefaultModuleImplementation\n ) {\n this.cache = services.cache;\n this.#entrypointRef = isFeatureEnabled(\n services.options.pluginOptions.features,\n 'useWeakRefInEval',\n entrypoint.name\n )\n ? new WeakRef(entrypoint)\n : entrypoint;\n this.idx = entrypoint.idx;\n this.id = entrypoint.name;\n this.filename = entrypoint.name;\n this.dependencies = [];\n this.debug = entrypoint.log.extend('module');\n this.parentIsIgnored = parentModule?.ignored ?? false;\n this.ignored = entrypoint.ignored ?? this.parentIsIgnored;\n\n if (parentModule) {\n this.callstack = [entrypoint.name, ...parentModule.callstack];\n } else {\n this.callstack = [entrypoint.name];\n }\n\n this.extensions = services.options.pluginOptions.extensions;\n\n this.debug('init', entrypoint.name);\n }\n\n public get exports() {\n return this.entrypoint.exports;\n }\n\n public set exports(value) {\n this.entrypoint.exports = value;\n\n this.debug('the whole exports was overridden with %O', value);\n }\n\n protected get entrypoint(): Entrypoint {\n const entrypoint =\n this.#entrypointRef instanceof WeakRef\n ? this.#entrypointRef.deref()\n : this.#entrypointRef;\n invariant(entrypoint, `Module ${this.idx} is disposed`);\n return entrypoint;\n }\n\n evaluate(): void {\n const { entrypoint } = this;\n entrypoint.assertTransformed();\n\n const cached = this.cache.get('entrypoints', entrypoint.name)!;\n let evaluatedCreated = false;\n if (!entrypoint.supersededWith) {\n this.cache.add(\n 'entrypoints',\n entrypoint.name,\n entrypoint.createEvaluated()\n );\n evaluatedCreated = true;\n }\n\n const { transformedCode: source } = entrypoint;\n const { pluginOptions } = this.services.options;\n\n if (!source) {\n this.debug(`evaluate`, 'there is nothing to evaluate');\n return;\n }\n\n if (this.isEvaluated) {\n this.debug('evaluate', `is already evaluated`);\n return;\n }\n\n this.debug('evaluate');\n this.debug.extend('source')('%s', source);\n\n this.isEvaluated = true;\n\n const filename = stripQueryAndHash(this.filename);\n\n if (/\\.json$/.test(filename)) {\n // For JSON files, parse it to a JS object similar to Node\n this.exports = JSON.parse(source);\n return;\n }\n\n const { context, teardown } = createVmContext(\n filename,\n pluginOptions.features,\n {\n module: this,\n exports: entrypoint.exports,\n require: this.require,\n __wyw_dynamic_import: async (id: unknown) => this.require(String(id)),\n __dirname: path.dirname(filename),\n },\n pluginOptions.overrideContext\n );\n\n try {\n const script = new vm.Script(\n `(function (exports) { ${source}\\n})(exports);`,\n {\n filename,\n }\n );\n\n script.runInContext(context);\n } catch (e) {\n this.isEvaluated = false;\n if (evaluatedCreated) {\n this.cache.add('entrypoints', entrypoint.name, cached);\n }\n\n if (isUnprocessedEntrypointError(e)) {\n // It will be handled by evalFile scenario\n throw e;\n }\n\n if (e instanceof EvalError) {\n this.debug('%O', e);\n\n throw e;\n }\n\n this.debug('%O\\n%O', e, this.callstack);\n const baseMessage = `${(e as Error).message} in${this.callstack.join(\n '\\n| '\n )}\\n`;\n const hint = getBrowserOnlyEvalHint(e);\n\n throw new EvalError(hint ? `${baseMessage}${hint}\\n` : baseMessage);\n } finally {\n teardown();\n }\n }\n\n getEntrypoint(\n filename: string,\n only: string[],\n log: Debugger\n ): Entrypoint | IEvaluatedEntrypoint | null {\n const strippedFilename = stripQueryAndHash(filename);\n const extension = path.extname(strippedFilename);\n if (extension !== '.json' && !this.extensions.includes(extension)) {\n return null;\n }\n\n const entrypoint = this.cache.get('entrypoints', filename);\n if (entrypoint && isSuperSet(entrypoint.evaluatedOnly ?? [], only)) {\n log('✅ file has been already evaluated');\n return entrypoint;\n }\n\n if (entrypoint?.ignored) {\n log(\n '✅ file has been ignored during prepare stage. Original code will be used'\n );\n return entrypoint;\n }\n\n if (this.ignored) {\n log(\n '✅ one of the parent files has been ignored during prepare stage. Original code will be used'\n );\n\n const newEntrypoint = this.entrypoint.createChild(\n filename,\n ['*'],\n fs.readFileSync(strippedFilename, 'utf-8')\n );\n\n if (newEntrypoint === 'loop') {\n const stack = getStack(this.entrypoint);\n throw new Error(\n `Circular dependency detected: ${stack.join(' -> ')} -> ${filename}`\n );\n }\n\n return newEntrypoint;\n }\n\n let uncachedExports: string[] | null = null;\n let reprocessOnly: string[] = only;\n // Requested file can be already prepared for evaluation on the stage 1\n if (only && entrypoint) {\n const evaluatedExports =\n entrypoint.evaluatedOnly?.length !== 0\n ? entrypoint.evaluatedOnly\n : entrypoint.only ?? [];\n uncachedExports = getUncached(evaluatedExports, only);\n if (uncachedExports.length === 0) {\n log('✅ ready for evaluation');\n return entrypoint;\n }\n\n if (entrypoint.evaluatedOnly?.length) {\n reprocessOnly = mergeOnly(evaluatedExports, only);\n }\n\n log(\n '❌ file has been processed during prepare stage but %o is not evaluated yet (evaluated: %o)',\n uncachedExports,\n evaluatedExports\n );\n } else {\n log('❌ file has not been processed during prepare stage');\n }\n\n // If code wasn't extracted from cache, it indicates that we were unable\n // to process some of the imports on stage1. Let's try to reprocess.\n const code = fs.readFileSync(strippedFilename, 'utf-8');\n const newEntrypoint = Entrypoint.createRoot(\n this.services,\n filename,\n reprocessOnly,\n code\n );\n\n if (newEntrypoint.evaluated) {\n log('✅ file has been already evaluated');\n return newEntrypoint;\n }\n\n if (newEntrypoint.ignored) {\n log(\n '✅ file has been ignored during prepare stage. Original code will be used'\n );\n return newEntrypoint;\n }\n\n return newEntrypoint;\n }\n\n resolveDependency = (id: string): IEntrypointDependency => {\n const cached = this.entrypoint.getDependency(id);\n invariant(!(cached instanceof Promise), 'Dependency is not resolved yet');\n\n if (cached) {\n return cached;\n }\n\n if (!this.ignored) {\n this.debug(\n '❌ import has not been resolved during prepare stage. Fallback to Node.js resolver'\n );\n }\n\n const extensions = this.moduleImpl._extensions;\n const added: string[] = [];\n\n try {\n // Check for supported extensions\n this.extensions.forEach((ext) => {\n if (ext in extensions) {\n return;\n }\n\n // When an extension is not supported, add it\n // And keep track of it to clean it up after resolving\n // Use noop for the transform function since we handle it\n extensions[ext] = NOOP;\n added.push(ext);\n });\n\n const { filename } = this;\n const strippedId = stripQueryAndHash(id);\n\n let resolved = this.moduleImpl._resolveFilename(strippedId, {\n id: filename,\n filename,\n paths: this.moduleImpl._nodeModulePaths(path.dirname(filename)),\n });\n\n const isFileSpecifier =\n strippedId.startsWith('.') || path.isAbsolute(strippedId);\n\n if (\n isFileSpecifier &&\n path.extname(strippedId) === '' &&\n resolved.endsWith('.cjs') &&\n fs.existsSync(`${resolved.slice(0, -4)}.js`)\n ) {\n // When both `.cjs` and `.js` exist for an extensionless specifier, the\n // resolver may pick `.cjs` depending on the environment/extensions.\n // Prefer `.js` to keep resolved paths stable (e.g. importOverrides keys).\n resolved = `${resolved.slice(0, -4)}.js`;\n }\n\n const { root } = this.services.options;\n const keyInfo = toImportKey({\n source: id,\n resolved,\n root,\n });\n\n const override = getImportOverride(\n this.services.options.pluginOptions.importOverrides,\n keyInfo.key\n );\n\n const policy = override?.unknown ?? (override?.mock ? 'allow' : 'warn');\n const shouldWarn = !this.ignored && policy === 'warn';\n\n let finalResolved = resolved;\n if (override?.mock) {\n try {\n finalResolved = resolveMockSpecifier({\n mock: override.mock,\n importer: filename,\n root,\n stack: this.callstack,\n });\n } catch (e) {\n const errorMessage = String((e as Error)?.message ?? e);\n throw new Error(\n `[wyw-in-js] Failed to resolve import mock for \"${keyInfo.key}\" (${id} from ${filename}): ${errorMessage}`\n );\n }\n }\n\n if (policy === 'error') {\n throw new Error(\n [\n `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n `resolved: ${resolved}`,\n override?.mock\n ? `mock: ${override.mock} -> ${finalResolved}`\n : ``,\n ``,\n `callstack:`,\n ...this.callstack.map((item) => ` ${item}`),\n ``,\n `config key: ${keyInfo.key}`,\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n\n const warnedUnknownImports = getWarnedUnknownImports(this.services);\n\n if (shouldWarn && !warnedUnknownImports.has(keyInfo.key)) {\n warnedUnknownImports.add(keyInfo.key);\n emitWarning(\n this.services,\n [\n `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n `resolved: ${resolved}`,\n override?.mock\n ? `mock: ${override.mock} -> ${finalResolved}`\n : ``,\n ``,\n `callstack:`,\n ...this.callstack.map((item) => ` ${item}`),\n ``,\n `config key: ${keyInfo.key}`,\n `hint: add { importOverrides: { ${JSON.stringify(\n keyInfo.key\n )}: { unknown: 'allow' } } } to silence warnings, or use { mock } / { noShake: true } overrides.`,\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n\n return {\n source: id,\n only: applyImportOverrideToOnly(['*'], override),\n resolved: finalResolved,\n };\n } finally {\n // Cleanup the extensions we added to restore previous behaviour\n added.forEach((ext) => delete extensions[ext]);\n }\n };\n\n protected createChild(entrypoint: Entrypoint): Module {\n return new Module(this.services, entrypoint, this, this.moduleImpl);\n }\n\n private loadByImportLoaders(\n request: string,\n resolved: string\n ): { handled: boolean; value: unknown } {\n const { pluginOptions } = this.services.options;\n const importLoaders =\n pluginOptions.importLoaders === undefined\n ? defaultImportLoaders\n : { ...defaultImportLoaders, ...pluginOptions.importLoaders };\n\n const { query, hash } = parseRequest(request);\n if (!query) return { handled: false, value: undefined };\n\n const params = new URLSearchParams(query);\n const matchedKey = Array.from(params.keys()).find(\n (key) => importLoaders[key] !== undefined && importLoaders[key] !== false\n );\n\n if (!matchedKey) return { handled: false, value: undefined };\n\n const loader = importLoaders[matchedKey];\n\n const filename = stripQueryAndHash(resolved);\n const importer = stripQueryAndHash(this.filename);\n const importerDir = path.dirname(importer);\n\n const toUrl = () => {\n const relative = path\n .relative(importerDir, filename)\n .replace(/\\\\/g, path.posix.sep);\n\n if (relative.startsWith('.') || path.isAbsolute(relative)) {\n return relative;\n }\n\n return `./${relative}`;\n };\n\n const readFile = () => fs.readFileSync(filename, 'utf-8');\n\n const context: ImportLoaderContext = {\n importer,\n request,\n resolved,\n filename,\n query,\n hash,\n emitWarning: (message) => emitWarning(this.services, message),\n readFile,\n toUrl,\n };\n\n if (loader === 'raw') {\n return { handled: true, value: context.readFile() };\n }\n\n if (loader === 'url') {\n return { handled: true, value: context.toUrl() };\n }\n\n if (typeof loader === 'function') {\n return { handled: true, value: loader(context) };\n }\n\n return { handled: false, value: undefined };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -46,9 +46,29 @@ const getItemOptions = item => {
46
46
  const toItemWithOptions = (key, options) => Object.keys(options).length ? [key, options] : key;
47
47
  const normalizeKey = key => key.replace(/\\/g, '/');
48
48
  const extractPackageNameFromPath = key => {
49
- var _match$;
50
- const match = normalizeKey(key).match(/\/node_modules\/(@[^/]+\/[^/]+|[^/]+)\//);
51
- return (_match$ = match === null || match === void 0 ? void 0 : match[1]) !== null && _match$ !== void 0 ? _match$ : null;
49
+ const normalized = normalizeKey(key);
50
+ const token = '/node_modules/';
51
+ let nodeModulesIndex = normalized.lastIndexOf(token);
52
+ while (nodeModulesIndex !== -1) {
53
+ const start = nodeModulesIndex + token.length;
54
+ const firstChar = normalized[start];
55
+ if (!firstChar) return null;
56
+ let packageName = null;
57
+ if (firstChar === '@') {
58
+ const scopeEnd = normalized.indexOf('/', start);
59
+ if (scopeEnd === -1) return null;
60
+ const nameEnd = normalized.indexOf('/', scopeEnd + 1);
61
+ if (nameEnd === -1) return null;
62
+ packageName = normalized.slice(start, nameEnd);
63
+ } else {
64
+ const nameEnd = normalized.indexOf('/', start);
65
+ if (nameEnd === -1) return null;
66
+ packageName = normalized.slice(start, nameEnd);
67
+ }
68
+ if (!packageName.startsWith('.')) return packageName;
69
+ nodeModulesIndex = normalized.lastIndexOf(token, nodeModulesIndex - 1);
70
+ }
71
+ return null;
52
72
  };
53
73
  const addBabelVariants = (kind, variants, key) => {
54
74
  const prefix = kind === 'preset' ? ['@babel/preset-', 'babel-preset-'] : ['@babel/plugin-', 'babel-plugin-'];
@@ -1 +1 @@
1
- {"version":3,"file":"buildOptions.js","names":["_isNotNull","require","cache","WeakMap","isPlainObject","value","prototype","Object","getPrototypeOf","mergeArraysUnique","source","overrides","Set","mergeUnknown","Array","isArray","result","key","entries","getItemKey","item","getItemOptions","options","toItemWithOptions","keys","length","normalizeKey","replace","extractPackageNameFromPath","_match$","match","addBabelVariants","kind","variants","prefix","normalized","add","packageNameFromPath","p","startsWith","slice","includes","areKeysCompatible","a","b","aVariants","bVariants","aVar","has","mergeConfigItems","combined","reduce","reduction","override","_getItemKey","overrideKey","push","overrideOptions","base","find","candidate","baseKey","index","indexOf","baseOptions","splice","babelMerge","plugins","sourcePlugins","presets","sourcePresets","env","sourceEnv","sourceRest","overridesPlugins","overridesPresets","overridesEnv","overridesRest","merged","envNames","size","name","_sourceEnv$name","_overridesEnv$name","merge","set","cacheForA","get","buildOptions","configs","map","i","filter","isNotNull"],"sources":["../../src/options/buildOptions.ts"],"sourcesContent":["import type { TransformOptions } from '@babel/core';\n\nimport { isNotNull } from '../utils/isNotNull';\n\nconst cache = new WeakMap<\n TransformOptions,\n WeakMap<TransformOptions, TransformOptions>\n>();\n\ntype PlainObject = Record<string, unknown>;\n\nconst isPlainObject = (value: unknown): value is PlainObject => {\n if (typeof value !== 'object' || value === null) return false;\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n};\n\ntype ItemKind = 'plugin' | 'preset';\n\nconst mergeArraysUnique = <T>(source: T[] = [], overrides: T[] = []) => [\n ...new Set([...source, ...overrides]),\n];\n\nconst mergeUnknown = (source: unknown, overrides: unknown): unknown => {\n if (Array.isArray(source) && Array.isArray(overrides)) {\n return mergeArraysUnique(source, overrides);\n }\n\n if (isPlainObject(source) && isPlainObject(overrides)) {\n const result: PlainObject = { ...source };\n\n for (const [key, value] of Object.entries(overrides)) {\n result[key] = key in source ? mergeUnknown(source[key], value) : value;\n }\n\n return result;\n }\n\n return overrides;\n};\n\ntype PluginOrPresetItem = NonNullable<\n TransformOptions['plugins']\n>[number] extends never\n ? unknown\n : NonNullable<TransformOptions['plugins']>[number];\n\nconst getItemKey = (item: unknown): string | null => {\n if (typeof item === 'string') return item;\n if (Array.isArray(item)) return getItemKey(item[0]);\n if (typeof item === 'object' && item !== null && 'key' in item) {\n const { key } = item as { key?: unknown };\n return typeof key === 'string' ? key : null;\n }\n\n return null;\n};\n\nconst getItemOptions = (item: unknown): PlainObject => {\n if (!Array.isArray(item)) return {};\n const options = item[1];\n return isPlainObject(options) ? options : {};\n};\n\nconst toItemWithOptions = (key: string, options: PlainObject) =>\n Object.keys(options).length ? ([key, options] as const) : key;\n\nconst normalizeKey = (key: string) => key.replace(/\\\\/g, '/');\n\nconst extractPackageNameFromPath = (key: string): string | null => {\n const match = normalizeKey(key).match(\n /\\/node_modules\\/(@[^/]+\\/[^/]+|[^/]+)\\//\n );\n\n return match?.[1] ?? null;\n};\n\nconst addBabelVariants = (\n kind: ItemKind,\n variants: Set<string>,\n key: string\n) => {\n const prefix =\n kind === 'preset'\n ? ['@babel/preset-', 'babel-preset-']\n : ['@babel/plugin-', 'babel-plugin-'];\n\n const normalized = normalizeKey(key);\n variants.add(normalized);\n\n const packageNameFromPath = extractPackageNameFromPath(normalized);\n if (packageNameFromPath) {\n variants.add(packageNameFromPath);\n }\n\n for (const p of prefix) {\n if (normalized.startsWith(p)) {\n variants.add(normalized.slice(p.length));\n }\n }\n\n if (!normalized.includes('/') && !normalized.startsWith('.')) {\n variants.add(`${prefix[0]}${normalized}`);\n variants.add(`${prefix[1]}${normalized}`);\n }\n};\n\nconst areKeysCompatible = (kind: ItemKind, a: string, b: string) => {\n const aVariants = new Set<string>();\n addBabelVariants(kind, aVariants, a);\n\n const bVariants = new Set<string>();\n addBabelVariants(kind, bVariants, b);\n\n for (const aVar of aVariants) {\n if (bVariants.has(aVar)) return true;\n }\n\n return false;\n};\n\nconst mergeConfigItems = (\n kind: ItemKind,\n source: PluginOrPresetItem[] | null | undefined,\n overrides: PluginOrPresetItem[] | null | undefined\n) => {\n const combined = [...(source ?? []), ...(overrides ?? [])];\n\n return combined.reduce<PluginOrPresetItem[]>((reduction, override) => {\n const overrideKey = getItemKey(override);\n if (!overrideKey) {\n reduction.push(override);\n return reduction;\n }\n\n const overrideOptions = getItemOptions(override);\n\n const base = reduction.find((candidate) => {\n const baseKey = getItemKey(candidate);\n return baseKey ? areKeysCompatible(kind, baseKey, overrideKey) : false;\n });\n\n if (!base) {\n reduction.push(\n toItemWithOptions(overrideKey, overrideOptions) as PluginOrPresetItem\n );\n return reduction;\n }\n\n const index = reduction.indexOf(base);\n const baseKey = getItemKey(base) ?? overrideKey;\n const baseOptions = getItemOptions(base);\n const options = mergeUnknown(baseOptions, overrideOptions) as PlainObject;\n\n reduction.splice(\n index,\n 1,\n toItemWithOptions(baseKey, options) as PluginOrPresetItem\n );\n return reduction;\n }, []);\n};\n\nconst babelMerge = (source: TransformOptions, overrides: TransformOptions) => {\n const {\n plugins: sourcePlugins,\n presets: sourcePresets,\n env: sourceEnv,\n ...sourceRest\n } = source;\n const {\n plugins: overridesPlugins,\n presets: overridesPresets,\n env: overridesEnv,\n ...overridesRest\n } = overrides;\n\n const plugins = mergeConfigItems('plugin', sourcePlugins, overridesPlugins);\n const presets = mergeConfigItems('preset', sourcePresets, overridesPresets);\n\n const merged: TransformOptions = mergeUnknown(\n sourceRest,\n overridesRest\n ) as TransformOptions;\n if (presets.length) merged.presets = presets;\n if (plugins.length) merged.plugins = plugins;\n\n const envNames = new Set([\n ...Object.keys(sourceEnv ?? {}),\n ...Object.keys(overridesEnv ?? {}),\n ]);\n\n if (envNames.size) {\n merged.env = {};\n for (const name of envNames) {\n merged.env[name] = babelMerge(\n sourceEnv?.[name] ?? {},\n overridesEnv?.[name] ?? {}\n );\n }\n }\n\n return merged;\n};\n\nconst merge = (a: TransformOptions, b: TransformOptions) => {\n if (!cache.has(a)) {\n cache.set(a, new WeakMap());\n }\n\n const cacheForA = cache.get(a)!;\n if (cacheForA.has(b)) {\n return cacheForA.get(b)!;\n }\n\n const result = babelMerge(a, b);\n cacheForA.set(b, result);\n return result;\n};\n\n/**\n * Merges babel configs together. If a pair of configs were merged before,\n * it will return the cached result.\n */\nexport function buildOptions(\n ...configs: (TransformOptions | null | undefined)[]\n): TransformOptions {\n // Merge all configs together\n return configs\n .map((i) => i ?? null)\n .filter(isNotNull)\n .reduce(merge);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"buildOptions.js","names":["_isNotNull","require","cache","WeakMap","isPlainObject","value","prototype","Object","getPrototypeOf","mergeArraysUnique","source","overrides","Set","mergeUnknown","Array","isArray","result","key","entries","getItemKey","item","getItemOptions","options","toItemWithOptions","keys","length","normalizeKey","replace","extractPackageNameFromPath","normalized","token","nodeModulesIndex","lastIndexOf","start","firstChar","packageName","scopeEnd","indexOf","nameEnd","slice","startsWith","addBabelVariants","kind","variants","prefix","add","packageNameFromPath","p","includes","areKeysCompatible","a","b","aVariants","bVariants","aVar","has","mergeConfigItems","combined","reduce","reduction","override","_getItemKey","overrideKey","push","overrideOptions","base","find","candidate","baseKey","index","baseOptions","splice","babelMerge","plugins","sourcePlugins","presets","sourcePresets","env","sourceEnv","sourceRest","overridesPlugins","overridesPresets","overridesEnv","overridesRest","merged","envNames","size","name","_sourceEnv$name","_overridesEnv$name","merge","set","cacheForA","get","buildOptions","configs","map","i","filter","isNotNull"],"sources":["../../src/options/buildOptions.ts"],"sourcesContent":["import type { TransformOptions } from '@babel/core';\n\nimport { isNotNull } from '../utils/isNotNull';\n\nconst cache = new WeakMap<\n TransformOptions,\n WeakMap<TransformOptions, TransformOptions>\n>();\n\ntype PlainObject = Record<string, unknown>;\n\nconst isPlainObject = (value: unknown): value is PlainObject => {\n if (typeof value !== 'object' || value === null) return false;\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n};\n\ntype ItemKind = 'plugin' | 'preset';\n\nconst mergeArraysUnique = <T>(source: T[] = [], overrides: T[] = []) => [\n ...new Set([...source, ...overrides]),\n];\n\nconst mergeUnknown = (source: unknown, overrides: unknown): unknown => {\n if (Array.isArray(source) && Array.isArray(overrides)) {\n return mergeArraysUnique(source, overrides);\n }\n\n if (isPlainObject(source) && isPlainObject(overrides)) {\n const result: PlainObject = { ...source };\n\n for (const [key, value] of Object.entries(overrides)) {\n result[key] = key in source ? mergeUnknown(source[key], value) : value;\n }\n\n return result;\n }\n\n return overrides;\n};\n\ntype PluginOrPresetItem = NonNullable<\n TransformOptions['plugins']\n>[number] extends never\n ? unknown\n : NonNullable<TransformOptions['plugins']>[number];\n\nconst getItemKey = (item: unknown): string | null => {\n if (typeof item === 'string') return item;\n if (Array.isArray(item)) return getItemKey(item[0]);\n if (typeof item === 'object' && item !== null && 'key' in item) {\n const { key } = item as { key?: unknown };\n return typeof key === 'string' ? key : null;\n }\n\n return null;\n};\n\nconst getItemOptions = (item: unknown): PlainObject => {\n if (!Array.isArray(item)) return {};\n const options = item[1];\n return isPlainObject(options) ? options : {};\n};\n\nconst toItemWithOptions = (key: string, options: PlainObject) =>\n Object.keys(options).length ? ([key, options] as const) : key;\n\nconst normalizeKey = (key: string) => key.replace(/\\\\/g, '/');\n\nconst extractPackageNameFromPath = (key: string): string | null => {\n const normalized = normalizeKey(key);\n const token = '/node_modules/';\n\n let nodeModulesIndex = normalized.lastIndexOf(token);\n while (nodeModulesIndex !== -1) {\n const start = nodeModulesIndex + token.length;\n const firstChar = normalized[start];\n if (!firstChar) return null;\n\n let packageName: string | null = null;\n if (firstChar === '@') {\n const scopeEnd = normalized.indexOf('/', start);\n if (scopeEnd === -1) return null;\n const nameEnd = normalized.indexOf('/', scopeEnd + 1);\n if (nameEnd === -1) return null;\n packageName = normalized.slice(start, nameEnd);\n } else {\n const nameEnd = normalized.indexOf('/', start);\n if (nameEnd === -1) return null;\n packageName = normalized.slice(start, nameEnd);\n }\n\n if (!packageName.startsWith('.')) return packageName;\n\n nodeModulesIndex = normalized.lastIndexOf(token, nodeModulesIndex - 1);\n }\n\n return null;\n};\n\nconst addBabelVariants = (\n kind: ItemKind,\n variants: Set<string>,\n key: string\n) => {\n const prefix =\n kind === 'preset'\n ? ['@babel/preset-', 'babel-preset-']\n : ['@babel/plugin-', 'babel-plugin-'];\n\n const normalized = normalizeKey(key);\n variants.add(normalized);\n\n const packageNameFromPath = extractPackageNameFromPath(normalized);\n if (packageNameFromPath) {\n variants.add(packageNameFromPath);\n }\n\n for (const p of prefix) {\n if (normalized.startsWith(p)) {\n variants.add(normalized.slice(p.length));\n }\n }\n\n if (!normalized.includes('/') && !normalized.startsWith('.')) {\n variants.add(`${prefix[0]}${normalized}`);\n variants.add(`${prefix[1]}${normalized}`);\n }\n};\n\nconst areKeysCompatible = (kind: ItemKind, a: string, b: string) => {\n const aVariants = new Set<string>();\n addBabelVariants(kind, aVariants, a);\n\n const bVariants = new Set<string>();\n addBabelVariants(kind, bVariants, b);\n\n for (const aVar of aVariants) {\n if (bVariants.has(aVar)) return true;\n }\n\n return false;\n};\n\nconst mergeConfigItems = (\n kind: ItemKind,\n source: PluginOrPresetItem[] | null | undefined,\n overrides: PluginOrPresetItem[] | null | undefined\n) => {\n const combined = [...(source ?? []), ...(overrides ?? [])];\n\n return combined.reduce<PluginOrPresetItem[]>((reduction, override) => {\n const overrideKey = getItemKey(override);\n if (!overrideKey) {\n reduction.push(override);\n return reduction;\n }\n\n const overrideOptions = getItemOptions(override);\n\n const base = reduction.find((candidate) => {\n const baseKey = getItemKey(candidate);\n return baseKey ? areKeysCompatible(kind, baseKey, overrideKey) : false;\n });\n\n if (!base) {\n reduction.push(\n toItemWithOptions(overrideKey, overrideOptions) as PluginOrPresetItem\n );\n return reduction;\n }\n\n const index = reduction.indexOf(base);\n const baseKey = getItemKey(base) ?? overrideKey;\n const baseOptions = getItemOptions(base);\n const options = mergeUnknown(baseOptions, overrideOptions) as PlainObject;\n\n reduction.splice(\n index,\n 1,\n toItemWithOptions(baseKey, options) as PluginOrPresetItem\n );\n return reduction;\n }, []);\n};\n\nconst babelMerge = (source: TransformOptions, overrides: TransformOptions) => {\n const {\n plugins: sourcePlugins,\n presets: sourcePresets,\n env: sourceEnv,\n ...sourceRest\n } = source;\n const {\n plugins: overridesPlugins,\n presets: overridesPresets,\n env: overridesEnv,\n ...overridesRest\n } = overrides;\n\n const plugins = mergeConfigItems('plugin', sourcePlugins, overridesPlugins);\n const presets = mergeConfigItems('preset', sourcePresets, overridesPresets);\n\n const merged: TransformOptions = mergeUnknown(\n sourceRest,\n overridesRest\n ) as TransformOptions;\n if (presets.length) merged.presets = presets;\n if (plugins.length) merged.plugins = plugins;\n\n const envNames = new Set([\n ...Object.keys(sourceEnv ?? {}),\n ...Object.keys(overridesEnv ?? {}),\n ]);\n\n if (envNames.size) {\n merged.env = {};\n for (const name of envNames) {\n merged.env[name] = babelMerge(\n sourceEnv?.[name] ?? {},\n overridesEnv?.[name] ?? {}\n );\n }\n }\n\n return merged;\n};\n\nconst merge = (a: TransformOptions, b: TransformOptions) => {\n if (!cache.has(a)) {\n cache.set(a, new WeakMap());\n }\n\n const cacheForA = cache.get(a)!;\n if (cacheForA.has(b)) {\n return cacheForA.get(b)!;\n }\n\n const result = babelMerge(a, b);\n cacheForA.set(b, result);\n return result;\n};\n\n/**\n * Merges babel configs together. If a pair of configs were merged before,\n * it will return the cached result.\n */\nexport function buildOptions(\n ...configs: (TransformOptions | null | undefined)[]\n): TransformOptions {\n // Merge all configs together\n return configs\n .map((i) => i ?? null)\n .filter(isNotNull)\n .reduce(merge);\n}\n"],"mappings":"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","ignoreList":[]}