@wyw-in-js/transform 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/esm/module.js CHANGED
@@ -69,6 +69,13 @@ const reactRefreshRuntime = {
69
69
  createSignatureFunctionForTransform: () => () => {}
70
70
  };
71
71
  const NOOP = () => {};
72
+ const browserOnlyEvalHintTriggers = ['window is not defined', "evaluating 'window", 'document is not defined', "evaluating 'document", 'navigator is not defined', "evaluating 'navigator", 'self is not defined', "evaluating 'self"];
73
+ const getBrowserOnlyEvalHint = error => {
74
+ const message = error instanceof Error ? error.message : String(error);
75
+ const looksLikeBrowserOnly = browserOnlyEvalHintTriggers.some(trigger => message.includes(trigger));
76
+ if (!looksLikeBrowserOnly) return null;
77
+ return ['', '[wyw-in-js] Evaluation hint:', 'This usually means browser-only code ran during build-time evaluation.', 'Move browser-only initialization out of evaluated modules, or mock the import via `importOverrides`.', "Example: importOverrides: { 'msw/browser': { mock: './src/__mocks__/msw-browser.js' } }"].join('\n');
78
+ };
72
79
  const warnedUnknownImportsByServices = new WeakMap();
73
80
  function emitWarning(services, message) {
74
81
  if (services.emitWarning) {
@@ -257,7 +264,9 @@ export class Module {
257
264
  throw e;
258
265
  }
259
266
  this.debug('%O\n%O', e, this.callstack);
260
- throw new EvalError(`${e.message} in${this.callstack.join('\n| ')}\n`);
267
+ const baseMessage = `${e.message} in${this.callstack.join('\n| ')}\n`;
268
+ const hint = getBrowserOnlyEvalHint(e);
269
+ throw new EvalError(hint ? `${baseMessage}${hint}\n` : baseMessage);
261
270
  } finally {
262
271
  teardown();
263
272
  }
package/esm/module.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","names":["fs","NativeModule","path","vm","invariant","isFeatureEnabled","Entrypoint","getStack","isSuperSet","mergeOnly","isUnprocessedEntrypointError","applyImportOverrideToOnly","resolveMockSpecifier","toImportKey","parseRequest","stripQueryAndHash","createVmContext","DefaultModuleImplementation","builtins","assert","buffer","child_process","cluster","console","constants","crypto","dgram","dns","domain","events","http","https","module","net","os","punycode","process","querystring","readline","repl","stream","string_decoder","sys","timers","tls","tty","url","util","zlib","VITE_VIRTUAL_PREFIX","REACT_REFRESH_VIRTUAL_ID","reactRefreshRuntime","createSignatureFunctionForTransform","NOOP","warnedUnknownImportsByServices","WeakMap","emitWarning","services","message","warn","getWarnedUnknownImports","cached","get","created","Set","set","getUncached","test","cachedSet","split","has","filter","t","resolve","id","resolved","resolveDependency","defaultImportLoaders","raw","Module","callstack","isEvaluated","require","Object","assign","dependencies","push","debug","startsWith","dependency","isAbsolute","Error","source","loaded","loadByImportLoaders","handled","value","entrypoint","getEntrypoint","only","evaluated","evaluatedOnly","exports","m","createChild","evaluate","ensure","bind","entrypointRef","constructor","parentModule","moduleImpl","cache","options","pluginOptions","features","name","WeakRef","idx","filename","log","extend","parentIsIgnored","ignored","extensions","deref","assertTransformed","evaluatedCreated","supersededWith","add","createEvaluated","transformedCode","JSON","parse","context","teardown","__wyw_dynamic_import","String","__dirname","dirname","overrideContext","script","Script","runInContext","e","EvalError","join","strippedFilename","extension","extname","includes","newEntrypoint","readFileSync","stack","uncachedExports","reprocessOnly","evaluatedExports","length","code","createRoot","getDependency","Promise","_extensions","added","forEach","ext","strippedId","_resolveFilename","paths","_nodeModulePaths","isFileSpecifier","endsWith","existsSync","slice","root","keyInfo","override","importOverrides","key","policy","unknown","mock","shouldWarn","finalResolved","importer","errorMessage","map","item","Boolean","warnedUnknownImports","stringify","request","importLoaders","undefined","query","hash","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 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 throw new EvalError(\n `${(e as Error).message} in${this.callstack.join('\\n| ')}\\n`\n );\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":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,EAAE,MAAM,IAAI;AACnB,OAAOC,YAAY,MAAM,QAAQ;AACjC,OAAOC,IAAI,MAAM,MAAM;AACvB,OAAOC,EAAE,MAAM,IAAI;AAEnB,SAASC,SAAS,QAAQ,cAAc;AAExC,SACEC,gBAAgB,QAIX,mBAAmB;AAE1B,OAAO,0BAA0B;AAEjC,SAASC,UAAU,QAAQ,wBAAwB;AACnD,SACEC,QAAQ,EACRC,UAAU,EACVC,SAAS,QACJ,gCAAgC;AAGvC,SAASC,4BAA4B,QAAQ,gDAAgD;AAE7F,SACEC,yBAAyB,EACzBC,oBAAoB,EACpBC,WAAW,QACN,yBAAyB;AAChC,SAASC,YAAY,EAAEC,iBAAiB,QAAQ,sBAAsB;AACtE,SAASC,eAAe,QAAQ,sBAAsB;AAWtD,OAAO,MAAMC,2BAA2B,GAAGhB,YACtB;;AAErB;AACA;AACA,MAAMiB,QAAQ,GAAG;EACfC,MAAM,EAAE,IAAI;EACZC,MAAM,EAAE,IAAI;EACZC,aAAa,EAAE,KAAK;EACpBC,OAAO,EAAE,KAAK;EACdC,OAAO,EAAE,IAAI;EACbC,SAAS,EAAE,IAAI;EACfC,MAAM,EAAE,IAAI;EACZC,KAAK,EAAE,KAAK;EACZC,GAAG,EAAE,KAAK;EACVC,MAAM,EAAE,IAAI;EACZC,MAAM,EAAE,IAAI;EACZ7B,EAAE,EAAE,KAAK;EACT8B,IAAI,EAAE,IAAI;EACVC,KAAK,EAAE,IAAI;EACXC,MAAM,EAAE,KAAK;EACbC,GAAG,EAAE,KAAK;EACVC,EAAE,EAAE,IAAI;EACRhC,IAAI,EAAE,IAAI;EACViC,QAAQ,EAAE,IAAI;EACdC,OAAO,EAAE,IAAI;EACbC,WAAW,EAAE,IAAI;EACjBC,QAAQ,EAAE,KAAK;EACfC,IAAI,EAAE,KAAK;EACXC,MAAM,EAAE,IAAI;EACZC,cAAc,EAAE,IAAI;EACpBC,GAAG,EAAE,IAAI;EACTC,MAAM,EAAE,IAAI;EACZC,GAAG,EAAE,KAAK;EACVC,GAAG,EAAE,IAAI;EACTC,GAAG,EAAE,IAAI;EACTC,IAAI,EAAE,IAAI;EACV5C,EAAE,EAAE,IAAI;EACR6C,IAAI,EAAE;AACR,CAAC;AAED,MAAMC,mBAAmB,GAAG,IAAI;AAChC,MAAMC,wBAAwB,GAAG,iBAAiB;AAClD,MAAMC,mBAAmB,GAAG;EAC1BC,mCAAmC,EAAEA,CAAA,KAAM,MAAM,CAAC;AACpD,CAAC;AAED,MAAMC,IAAI,GAAGA,CAAA,KAAM,CAAC,CAAC;AAErB,MAAMC,8BAA8B,GAAG,IAAIC,OAAO,CAAwB,CAAC;AAE3E,SAASC,WAAWA,CAACC,QAAkB,EAAEC,OAAe,EAAE;EACxD,IAAID,QAAQ,CAACD,WAAW,EAAE;IACxBC,QAAQ,CAACD,WAAW,CAACE,OAAO,CAAC;IAC7B;EACF;;EAEA;EACAnC,OAAO,CAACoC,IAAI,CAACD,OAAO,CAAC;AACvB;AAEA,SAASE,uBAAuBA,CAACH,QAAkB,EAAe;EAChE,MAAMI,MAAM,GAAGP,8BAA8B,CAACQ,GAAG,CAACL,QAAQ,CAAC;EAC3D,IAAII,MAAM,EAAE;IACV,OAAOA,MAAM;EACf;EAEA,MAAME,OAAO,GAAG,IAAIC,GAAG,CAAS,CAAC;EACjCV,8BAA8B,CAACW,GAAG,CAACR,QAAQ,EAAEM,OAAO,CAAC;EACrD,OAAOA,OAAO;AAChB;AAEA,SAASG,WAAWA,CAACL,MAAyB,EAAEM,IAAc,EAAY;EACxE,MAAMC,SAAS,GAAG,IAAIJ,GAAG,CACvB,OAAOH,MAAM,KAAK,QAAQ,GAAGA,MAAM,CAACQ,KAAK,CAAC,GAAG,CAAC,GAAGR,MACnD,CAAC;EAED,IAAIO,SAAS,CAACE,GAAG,CAAC,GAAG,CAAC,EAAE;IACtB,OAAO,EAAE;EACX;EAEA,OAAOH,IAAI,CAACI,MAAM,CAAEC,CAAC,IAAK,CAACJ,SAAS,CAACE,GAAG,CAACE,CAAC,CAAC,CAAC;AAC9C;AAEA,SAASC,OAAOA,CAEdC,EAAU,EACF;EACR,MAAM;IAAEC;EAAS,CAAC,GAAG,IAAI,CAACC,iBAAiB,CAACF,EAAE,CAAC;EAC/CtE,SAAS,CAACuE,QAAQ,EAAE,sBAAsBD,EAAE,GAAG,CAAC;EAChD,OAAOC,QAAQ;AACjB;AAEA,MAAME,oBAAmC,GAAG;EAC1CC,GAAG,EAAE,KAAK;EACVhC,GAAG,EAAE;AACP,CAAC;AAED,OAAO,MAAMiC,MAAM,CAAC;EACFC,SAAS,GAAa,EAAE;EAgBjCC,WAAW,GAAY,KAAK;EAI5BC,OAAO,GAIVC,MAAM,CAACC,MAAM,CACdV,EAAU,IAAK;IACd,IAAIA,EAAE,KAAKxB,wBAAwB,EAAE;MACnC,IAAI,CAACmC,YAAY,CAACC,IAAI,CAACZ,EAAE,CAAC;MAC1B,IAAI,CAACa,KAAK,CAAC,SAAS,EAAE,iBAAiBb,EAAE,GAAG,CAAC;MAC7C,OAAOvB,mBAAmB;IAC5B;IAEA,IAAIuB,EAAE,CAACc,UAAU,CAACvC,mBAAmB,CAAC,EAAE;MACtC,IAAI,CAACoC,YAAY,CAACC,IAAI,CAACZ,EAAE,CAAC;MAC1B,IAAI,CAACa,KAAK,CAAC,SAAS,EAAE,iBAAiBb,EAAE,GAAG,CAAC;MAC7C,OAAO,CAAC,CAAC;IACX;IAEA,IAAIA,EAAE,IAAIxD,QAAQ,EAAE;MAClB;MACA;MACA;MACA,IAAIA,QAAQ,CAACwD,EAAE,CAA0B,EAAE;QACzC,IAAI,CAACa,KAAK,CAAC,SAAS,EAAE,YAAYb,EAAE,GAAG,CAAC;QACxC,OAAOQ,OAAO,CAACR,EAAE,CAAC;MACpB;MAEA,OAAO,IAAI;IACb;;IAEA;IACA,MAAMe,UAAU,GAAG,IAAI,CAACb,iBAAiB,CAACF,EAAE,CAAC;IAC7C,IAAIe,UAAU,CAACd,QAAQ,KAAKD,EAAE,IAAI,CAACxE,IAAI,CAACwF,UAAU,CAAChB,EAAE,CAAC,EAAE;MACtD;MACA,MAAM,IAAIiB,KAAK,CACb,qBAAqBjB,EAAE,6DACzB,CAAC;IACH;IAEAtE,SAAS,CACPqF,UAAU,CAACd,QAAQ,EACnB,cAAcc,UAAU,CAACG,MAAM,qBACjC,CAAC;IAED,MAAMC,MAAM,GAAG,IAAI,CAACC,mBAAmB,CAACpB,EAAE,EAAEe,UAAU,CAACd,QAAQ,CAAC;IAChE,IAAIkB,MAAM,CAACE,OAAO,EAAE;MAClB,IAAI,CAACV,YAAY,CAACC,IAAI,CAACZ,EAAE,CAAC;MAC1B,IAAI,CAACa,KAAK,CAAC,SAAS,EAAE,GAAGb,EAAE,OAAOe,UAAU,CAACd,QAAQ,WAAW,CAAC;MACjE,OAAOkB,MAAM,CAACG,KAAK;IACrB;IAEA,IAAI,CAACX,YAAY,CAACC,IAAI,CAACZ,EAAE,CAAC;IAE1B,IAAI,CAACa,KAAK,CAAC,SAAS,EAAE,GAAGb,EAAE,OAAOe,UAAU,CAACd,QAAQ,EAAE,CAAC;IAExD,MAAMsB,UAAU,GAAG,IAAI,CAACC,aAAa,CACnCT,UAAU,CAACd,QAAQ,EACnBc,UAAU,CAACU,IAAI,EACf,IAAI,CAACZ,KACP,CAAC;IAED,IAAIU,UAAU,KAAK,IAAI,EAAE;MACvB,OAAOR,UAAU,CAACd,QAAQ;IAC5B;IAEA,IACEsB,UAAU,CAACG,SAAS,IACpB5F,UAAU,CAACyF,UAAU,CAACI,aAAa,EAAEZ,UAAU,CAACU,IAAI,CAAC,EACrD;MACA,OAAOF,UAAU,CAACK,OAAO;IAC3B;IAEA,MAAMC,CAAC,GAAG,IAAI,CAACC,WAAW,CAACP,UAAU,CAAC;IACtCM,CAAC,CAACE,QAAQ,CAAC,CAAC;IAEZ,OAAOR,UAAU,CAACK,OAAO;EAC3B,CAAC,EACD;IACEI,MAAM,EAAErD,IAAI;IACZoB,OAAO,EAAEA,OAAO,CAACkC,IAAI,CAAC,IAAI;EAC5B,CACF,CAAC;EAEMlC,OAAO,GAAGA,OAAO,CAACkC,IAAI,CAAC,IAAI,CAAC;EAInC,CAACC,aAAa;EAEdC,WAAWA,CACDpD,QAAkB,EAC1BwC,UAAsB,EACtBa,YAAqB,EACbC,UAA+B,GAAG9F,2BAA2B,EACrE;IAAA,KAJQwC,QAAkB,GAAlBA,QAAkB;IAAA,KAGlBsD,UAA+B,GAA/BA,UAA+B;IAEvC,IAAI,CAACC,KAAK,GAAGvD,QAAQ,CAACuD,KAAK;IAC3B,IAAI,CAAC,CAACJ,aAAa,GAAGvG,gBAAgB,CACpCoD,QAAQ,CAACwD,OAAO,CAACC,aAAa,CAACC,QAAQ,EACvC,kBAAkB,EAClBlB,UAAU,CAACmB,IACb,CAAC,GACG,IAAIC,OAAO,CAACpB,UAAU,CAAC,GACvBA,UAAU;IACd,IAAI,CAACqB,GAAG,GAAGrB,UAAU,CAACqB,GAAG;IACzB,IAAI,CAAC5C,EAAE,GAAGuB,UAAU,CAACmB,IAAI;IACzB,IAAI,CAACG,QAAQ,GAAGtB,UAAU,CAACmB,IAAI;IAC/B,IAAI,CAAC/B,YAAY,GAAG,EAAE;IACtB,IAAI,CAACE,KAAK,GAAGU,UAAU,CAACuB,GAAG,CAACC,MAAM,CAAC,QAAQ,CAAC;IAC5C,IAAI,CAACC,eAAe,GAAGZ,YAAY,EAAEa,OAAO,IAAI,KAAK;IACrD,IAAI,CAACA,OAAO,GAAG1B,UAAU,CAAC0B,OAAO,IAAI,IAAI,CAACD,eAAe;IAEzD,IAAIZ,YAAY,EAAE;MAChB,IAAI,CAAC9B,SAAS,GAAG,CAACiB,UAAU,CAACmB,IAAI,EAAE,GAAGN,YAAY,CAAC9B,SAAS,CAAC;IAC/D,CAAC,MAAM;MACL,IAAI,CAACA,SAAS,GAAG,CAACiB,UAAU,CAACmB,IAAI,CAAC;IACpC;IAEA,IAAI,CAACQ,UAAU,GAAGnE,QAAQ,CAACwD,OAAO,CAACC,aAAa,CAACU,UAAU;IAE3D,IAAI,CAACrC,KAAK,CAAC,MAAM,EAAEU,UAAU,CAACmB,IAAI,CAAC;EACrC;EAEA,IAAWd,OAAOA,CAAA,EAAG;IACnB,OAAO,IAAI,CAACL,UAAU,CAACK,OAAO;EAChC;EAEA,IAAWA,OAAOA,CAACN,KAAK,EAAE;IACxB,IAAI,CAACC,UAAU,CAACK,OAAO,GAAGN,KAAK;IAE/B,IAAI,CAACT,KAAK,CAAC,0CAA0C,EAAES,KAAK,CAAC;EAC/D;EAEA,IAAcC,UAAUA,CAAA,EAAe;IACrC,MAAMA,UAAU,GACd,IAAI,CAAC,CAACW,aAAa,YAAYS,OAAO,GAClC,IAAI,CAAC,CAACT,aAAa,CAACiB,KAAK,CAAC,CAAC,GAC3B,IAAI,CAAC,CAACjB,aAAa;IACzBxG,SAAS,CAAC6F,UAAU,EAAE,UAAU,IAAI,CAACqB,GAAG,cAAc,CAAC;IACvD,OAAOrB,UAAU;EACnB;EAEAQ,QAAQA,CAAA,EAAS;IACf,MAAM;MAAER;IAAW,CAAC,GAAG,IAAI;IAC3BA,UAAU,CAAC6B,iBAAiB,CAAC,CAAC;IAE9B,MAAMjE,MAAM,GAAG,IAAI,CAACmD,KAAK,CAAClD,GAAG,CAAC,aAAa,EAAEmC,UAAU,CAACmB,IAAI,CAAE;IAC9D,IAAIW,gBAAgB,GAAG,KAAK;IAC5B,IAAI,CAAC9B,UAAU,CAAC+B,cAAc,EAAE;MAC9B,IAAI,CAAChB,KAAK,CAACiB,GAAG,CACZ,aAAa,EACbhC,UAAU,CAACmB,IAAI,EACfnB,UAAU,CAACiC,eAAe,CAAC,CAC7B,CAAC;MACDH,gBAAgB,GAAG,IAAI;IACzB;IAEA,MAAM;MAAEI,eAAe,EAAEvC;IAAO,CAAC,GAAGK,UAAU;IAC9C,MAAM;MAAEiB;IAAc,CAAC,GAAG,IAAI,CAACzD,QAAQ,CAACwD,OAAO;IAE/C,IAAI,CAACrB,MAAM,EAAE;MACX,IAAI,CAACL,KAAK,CAAC,UAAU,EAAE,8BAA8B,CAAC;MACtD;IACF;IAEA,IAAI,IAAI,CAACN,WAAW,EAAE;MACpB,IAAI,CAACM,KAAK,CAAC,UAAU,EAAE,sBAAsB,CAAC;MAC9C;IACF;IAEA,IAAI,CAACA,KAAK,CAAC,UAAU,CAAC;IACtB,IAAI,CAACA,KAAK,CAACkC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE7B,MAAM,CAAC;IAEzC,IAAI,CAACX,WAAW,GAAG,IAAI;IAEvB,MAAMsC,QAAQ,GAAGxG,iBAAiB,CAAC,IAAI,CAACwG,QAAQ,CAAC;IAEjD,IAAI,SAAS,CAACpD,IAAI,CAACoD,QAAQ,CAAC,EAAE;MAC5B;MACA,IAAI,CAACjB,OAAO,GAAG8B,IAAI,CAACC,KAAK,CAACzC,MAAM,CAAC;MACjC;IACF;IAEA,MAAM;MAAE0C,OAAO;MAAEC;IAAS,CAAC,GAAGvH,eAAe,CAC3CuG,QAAQ,EACRL,aAAa,CAACC,QAAQ,EACtB;MACEnF,MAAM,EAAE,IAAI;MACZsE,OAAO,EAAEL,UAAU,CAACK,OAAO;MAC3BpB,OAAO,EAAE,IAAI,CAACA,OAAO;MACrBsD,oBAAoB,EAAE,MAAO9D,EAAW,IAAK,IAAI,CAACQ,OAAO,CAACuD,MAAM,CAAC/D,EAAE,CAAC,CAAC;MACrEgE,SAAS,EAAExI,IAAI,CAACyI,OAAO,CAACpB,QAAQ;IAClC,CAAC,EACDL,aAAa,CAAC0B,eAChB,CAAC;IAED,IAAI;MACF,MAAMC,MAAM,GAAG,IAAI1I,EAAE,CAAC2I,MAAM,CAC1B,yBAAyBlD,MAAM,gBAAgB,EAC/C;QACE2B;MACF,CACF,CAAC;MAEDsB,MAAM,CAACE,YAAY,CAACT,OAAO,CAAC;IAC9B,CAAC,CAAC,OAAOU,CAAC,EAAE;MACV,IAAI,CAAC/D,WAAW,GAAG,KAAK;MACxB,IAAI8C,gBAAgB,EAAE;QACpB,IAAI,CAACf,KAAK,CAACiB,GAAG,CAAC,aAAa,EAAEhC,UAAU,CAACmB,IAAI,EAAEvD,MAAM,CAAC;MACxD;MAEA,IAAInD,4BAA4B,CAACsI,CAAC,CAAC,EAAE;QACnC;QACA,MAAMA,CAAC;MACT;MAEA,IAAIA,CAAC,YAAYC,SAAS,EAAE;QAC1B,IAAI,CAAC1D,KAAK,CAAC,IAAI,EAAEyD,CAAC,CAAC;QAEnB,MAAMA,CAAC;MACT;MAEA,IAAI,CAACzD,KAAK,CAAC,QAAQ,EAAEyD,CAAC,EAAE,IAAI,CAAChE,SAAS,CAAC;MACvC,MAAM,IAAIiE,SAAS,CACjB,GAAID,CAAC,CAAWtF,OAAO,MAAM,IAAI,CAACsB,SAAS,CAACkE,IAAI,CAAC,MAAM,CAAC,IAC1D,CAAC;IACH,CAAC,SAAS;MACRX,QAAQ,CAAC,CAAC;IACZ;EACF;EAEArC,aAAaA,CACXqB,QAAgB,EAChBpB,IAAc,EACdqB,GAAa,EAC6B;IAC1C,MAAM2B,gBAAgB,GAAGpI,iBAAiB,CAACwG,QAAQ,CAAC;IACpD,MAAM6B,SAAS,GAAGlJ,IAAI,CAACmJ,OAAO,CAACF,gBAAgB,CAAC;IAChD,IAAIC,SAAS,KAAK,OAAO,IAAI,CAAC,IAAI,CAACxB,UAAU,CAAC0B,QAAQ,CAACF,SAAS,CAAC,EAAE;MACjE,OAAO,IAAI;IACb;IAEA,MAAMnD,UAAU,GAAG,IAAI,CAACe,KAAK,CAAClD,GAAG,CAAC,aAAa,EAAEyD,QAAQ,CAAC;IAC1D,IAAItB,UAAU,IAAIzF,UAAU,CAACyF,UAAU,CAACI,aAAa,IAAI,EAAE,EAAEF,IAAI,CAAC,EAAE;MAClEqB,GAAG,CAAC,mCAAmC,CAAC;MACxC,OAAOvB,UAAU;IACnB;IAEA,IAAIA,UAAU,EAAE0B,OAAO,EAAE;MACvBH,GAAG,CACD,0EACF,CAAC;MACD,OAAOvB,UAAU;IACnB;IAEA,IAAI,IAAI,CAAC0B,OAAO,EAAE;MAChBH,GAAG,CACD,6FACF,CAAC;MAED,MAAM+B,aAAa,GAAG,IAAI,CAACtD,UAAU,CAACO,WAAW,CAC/Ce,QAAQ,EACR,CAAC,GAAG,CAAC,EACLvH,EAAE,CAACwJ,YAAY,CAACL,gBAAgB,EAAE,OAAO,CAC3C,CAAC;MAED,IAAII,aAAa,KAAK,MAAM,EAAE;QAC5B,MAAME,KAAK,GAAGlJ,QAAQ,CAAC,IAAI,CAAC0F,UAAU,CAAC;QACvC,MAAM,IAAIN,KAAK,CACb,iCAAiC8D,KAAK,CAACP,IAAI,CAAC,MAAM,CAAC,OAAO3B,QAAQ,EACpE,CAAC;MACH;MAEA,OAAOgC,aAAa;IACtB;IAEA,IAAIG,eAAgC,GAAG,IAAI;IAC3C,IAAIC,aAAuB,GAAGxD,IAAI;IAClC;IACA,IAAIA,IAAI,IAAIF,UAAU,EAAE;MACtB,MAAM2D,gBAAgB,GACpB3D,UAAU,CAACI,aAAa,EAAEwD,MAAM,KAAK,CAAC,GAClC5D,UAAU,CAACI,aAAa,GACxBJ,UAAU,CAACE,IAAI,IAAI,EAAE;MAC3BuD,eAAe,GAAGxF,WAAW,CAAC0F,gBAAgB,EAAEzD,IAAI,CAAC;MACrD,IAAIuD,eAAe,CAACG,MAAM,KAAK,CAAC,EAAE;QAChCrC,GAAG,CAAC,wBAAwB,CAAC;QAC7B,OAAOvB,UAAU;MACnB;MAEA,IAAIA,UAAU,CAACI,aAAa,EAAEwD,MAAM,EAAE;QACpCF,aAAa,GAAGlJ,SAAS,CAACmJ,gBAAgB,EAAEzD,IAAI,CAAC;MACnD;MAEAqB,GAAG,CACD,4FAA4F,EAC5FkC,eAAe,EACfE,gBACF,CAAC;IACH,CAAC,MAAM;MACLpC,GAAG,CAAC,oDAAoD,CAAC;IAC3D;;IAEA;IACA;IACA,MAAMsC,IAAI,GAAG9J,EAAE,CAACwJ,YAAY,CAACL,gBAAgB,EAAE,OAAO,CAAC;IACvD,MAAMI,aAAa,GAAGjJ,UAAU,CAACyJ,UAAU,CACzC,IAAI,CAACtG,QAAQ,EACb8D,QAAQ,EACRoC,aAAa,EACbG,IACF,CAAC;IAED,IAAIP,aAAa,CAACnD,SAAS,EAAE;MAC3BoB,GAAG,CAAC,mCAAmC,CAAC;MACxC,OAAO+B,aAAa;IACtB;IAEA,IAAIA,aAAa,CAAC5B,OAAO,EAAE;MACzBH,GAAG,CACD,0EACF,CAAC;MACD,OAAO+B,aAAa;IACtB;IAEA,OAAOA,aAAa;EACtB;EAEA3E,iBAAiB,GAAIF,EAAU,IAA4B;IACzD,MAAMb,MAAM,GAAG,IAAI,CAACoC,UAAU,CAAC+D,aAAa,CAACtF,EAAE,CAAC;IAChDtE,SAAS,CAAC,EAAEyD,MAAM,YAAYoG,OAAO,CAAC,EAAE,gCAAgC,CAAC;IAEzE,IAAIpG,MAAM,EAAE;MACV,OAAOA,MAAM;IACf;IAEA,IAAI,CAAC,IAAI,CAAC8D,OAAO,EAAE;MACjB,IAAI,CAACpC,KAAK,CACR,mFACF,CAAC;IACH;IAEA,MAAMqC,UAAU,GAAG,IAAI,CAACb,UAAU,CAACmD,WAAW;IAC9C,MAAMC,KAAe,GAAG,EAAE;IAE1B,IAAI;MACF;MACA,IAAI,CAACvC,UAAU,CAACwC,OAAO,CAAEC,GAAG,IAAK;QAC/B,IAAIA,GAAG,IAAIzC,UAAU,EAAE;UACrB;QACF;;QAEA;QACA;QACA;QACAA,UAAU,CAACyC,GAAG,CAAC,GAAGhH,IAAI;QACtB8G,KAAK,CAAC7E,IAAI,CAAC+E,GAAG,CAAC;MACjB,CAAC,CAAC;MAEF,MAAM;QAAE9C;MAAS,CAAC,GAAG,IAAI;MACzB,MAAM+C,UAAU,GAAGvJ,iBAAiB,CAAC2D,EAAE,CAAC;MAExC,IAAIC,QAAQ,GAAG,IAAI,CAACoC,UAAU,CAACwD,gBAAgB,CAACD,UAAU,EAAE;QAC1D5F,EAAE,EAAE6C,QAAQ;QACZA,QAAQ;QACRiD,KAAK,EAAE,IAAI,CAACzD,UAAU,CAAC0D,gBAAgB,CAACvK,IAAI,CAACyI,OAAO,CAACpB,QAAQ,CAAC;MAChE,CAAC,CAAC;MAEF,MAAMmD,eAAe,GACnBJ,UAAU,CAAC9E,UAAU,CAAC,GAAG,CAAC,IAAItF,IAAI,CAACwF,UAAU,CAAC4E,UAAU,CAAC;MAE3D,IACEI,eAAe,IACfxK,IAAI,CAACmJ,OAAO,CAACiB,UAAU,CAAC,KAAK,EAAE,IAC/B3F,QAAQ,CAACgG,QAAQ,CAAC,MAAM,CAAC,IACzB3K,EAAE,CAAC4K,UAAU,CAAC,GAAGjG,QAAQ,CAACkG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAC5C;QACA;QACA;QACA;QACAlG,QAAQ,GAAG,GAAGA,QAAQ,CAACkG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK;MAC1C;MAEA,MAAM;QAAEC;MAAK,CAAC,GAAG,IAAI,CAACrH,QAAQ,CAACwD,OAAO;MACtC,MAAM8D,OAAO,GAAGlK,WAAW,CAAC;QAC1B+E,MAAM,EAAElB,EAAE;QACVC,QAAQ;QACRmG;MACF,CAAC,CAAC;MAEF,MAAME,QAAQ,GACZ,IAAI,CAACvH,QAAQ,CAACwD,OAAO,CAACC,aAAa,CAAC+D,eAAe,GAAGF,OAAO,CAACG,GAAG,CAAC;MAEpE,MAAMC,MAAM,GAAGH,QAAQ,EAAEI,OAAO,KAAKJ,QAAQ,EAAEK,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC;MACvE,MAAMC,UAAU,GAAG,CAAC,IAAI,CAAC3D,OAAO,IAAIwD,MAAM,KAAK,MAAM;MAErD,IAAII,aAAa,GAAG5G,QAAQ;MAC5B,IAAIqG,QAAQ,EAAEK,IAAI,EAAE;QAClB,IAAI;UACFE,aAAa,GAAG3K,oBAAoB,CAAC;YACnCyK,IAAI,EAAEL,QAAQ,CAACK,IAAI;YACnBG,QAAQ,EAAEjE,QAAQ;YAClBuD,IAAI;YACJrB,KAAK,EAAE,IAAI,CAACzE;UACd,CAAC,CAAC;QACJ,CAAC,CAAC,OAAOgE,CAAC,EAAE;UACV,MAAMyC,YAAY,GAAGhD,MAAM,CAAEO,CAAC,EAAYtF,OAAO,IAAIsF,CAAC,CAAC;UACvD,MAAM,IAAIrD,KAAK,CACb,kDAAkDoF,OAAO,CAACG,GAAG,MAAMxG,EAAE,SAAS6C,QAAQ,MAAMkE,YAAY,EAC1G,CAAC;QACH;MACF;MAEA,IAAIN,MAAM,KAAK,OAAO,EAAE;QACtB,MAAM,IAAIxF,KAAK,CACb,CACE,yEAAyE,EACzE,EAAE,EACF,aAAa4B,QAAQ,EAAE,EACvB,aAAa7C,EAAE,EAAE,EACjB,aAAaC,QAAQ,EAAE,EACvBqG,QAAQ,EAAEK,IAAI,GACV,aAAaL,QAAQ,CAACK,IAAI,OAAOE,aAAa,EAAE,GAChD,EAAE,EACN,EAAE,EACF,YAAY,EACZ,GAAG,IAAI,CAACvG,SAAS,CAAC0G,GAAG,CAAEC,IAAI,IAAK,KAAKA,IAAI,EAAE,CAAC,EAC5C,EAAE,EACF,eAAeZ,OAAO,CAACG,GAAG,EAAE,CAC7B,CACE3G,MAAM,CAACqH,OAAO,CAAC,CACf1C,IAAI,CAAC,IAAI,CACd,CAAC;MACH;MAEA,MAAM2C,oBAAoB,GAAGjI,uBAAuB,CAAC,IAAI,CAACH,QAAQ,CAAC;MAEnE,IAAI6H,UAAU,IAAI,CAACO,oBAAoB,CAACvH,GAAG,CAACyG,OAAO,CAACG,GAAG,CAAC,EAAE;QACxDW,oBAAoB,CAAC5D,GAAG,CAAC8C,OAAO,CAACG,GAAG,CAAC;QACrC1H,WAAW,CACT,IAAI,CAACC,QAAQ,EACb,CACE,yEAAyE,EACzE,EAAE,EACF,aAAa8D,QAAQ,EAAE,EACvB,aAAa7C,EAAE,EAAE,EACjB,aAAaC,QAAQ,EAAE,EACvBqG,QAAQ,EAAEK,IAAI,GACV,aAAaL,QAAQ,CAACK,IAAI,OAAOE,aAAa,EAAE,GAChD,EAAE,EACN,EAAE,EACF,YAAY,EACZ,GAAG,IAAI,CAACvG,SAAS,CAAC0G,GAAG,CAAEC,IAAI,IAAK,KAAKA,IAAI,EAAE,CAAC,EAC5C,EAAE,EACF,eAAeZ,OAAO,CAACG,GAAG,EAAE,EAC5B,kCAAkC9C,IAAI,CAAC0D,SAAS,CAC9Cf,OAAO,CAACG,GACV,CAAC,gGAAgG,CAClG,CACE3G,MAAM,CAACqH,OAAO,CAAC,CACf1C,IAAI,CAAC,IAAI,CACd,CAAC;MACH;MAEA,OAAO;QACLtD,MAAM,EAAElB,EAAE;QACVyB,IAAI,EAAExF,yBAAyB,CAAC,CAAC,GAAG,CAAC,EAAEqK,QAAQ,CAAC;QAChDrG,QAAQ,EAAE4G;MACZ,CAAC;IACH,CAAC,SAAS;MACR;MACApB,KAAK,CAACC,OAAO,CAAEC,GAAG,IAAK,OAAOzC,UAAU,CAACyC,GAAG,CAAC,CAAC;IAChD;EACF,CAAC;EAES7D,WAAWA,CAACP,UAAsB,EAAU;IACpD,OAAO,IAAIlB,MAAM,CAAC,IAAI,CAACtB,QAAQ,EAAEwC,UAAU,EAAE,IAAI,EAAE,IAAI,CAACc,UAAU,CAAC;EACrE;EAEQjB,mBAAmBA,CACzBiG,OAAe,EACfpH,QAAgB,EACsB;IACtC,MAAM;MAAEuC;IAAc,CAAC,GAAG,IAAI,CAACzD,QAAQ,CAACwD,OAAO;IAC/C,MAAM+E,aAAa,GACjB9E,aAAa,CAAC8E,aAAa,KAAKC,SAAS,GACrCpH,oBAAoB,GACpB;MAAE,GAAGA,oBAAoB;MAAE,GAAGqC,aAAa,CAAC8E;IAAc,CAAC;IAEjE,MAAM;MAAEE,KAAK;MAAEC;IAAK,CAAC,GAAGrL,YAAY,CAACiL,OAAO,CAAC;IAC7C,IAAI,CAACG,KAAK,EAAE,OAAO;MAAEnG,OAAO,EAAE,KAAK;MAAEC,KAAK,EAAEiG;IAAU,CAAC;IAEvD,MAAMG,MAAM,GAAG,IAAIC,eAAe,CAACH,KAAK,CAAC;IACzC,MAAMI,UAAU,GAAGC,KAAK,CAACC,IAAI,CAACJ,MAAM,CAACK,IAAI,CAAC,CAAC,CAAC,CAACC,IAAI,CAC9CxB,GAAG,IAAKc,aAAa,CAACd,GAAG,CAAC,KAAKe,SAAS,IAAID,aAAa,CAACd,GAAG,CAAC,KAAK,KACtE,CAAC;IAED,IAAI,CAACoB,UAAU,EAAE,OAAO;MAAEvG,OAAO,EAAE,KAAK;MAAEC,KAAK,EAAEiG;IAAU,CAAC;IAE5D,MAAMU,MAAM,GAAGX,aAAa,CAACM,UAAU,CAAC;IAExC,MAAM/E,QAAQ,GAAGxG,iBAAiB,CAAC4D,QAAQ,CAAC;IAC5C,MAAM6G,QAAQ,GAAGzK,iBAAiB,CAAC,IAAI,CAACwG,QAAQ,CAAC;IACjD,MAAMqF,WAAW,GAAG1M,IAAI,CAACyI,OAAO,CAAC6C,QAAQ,CAAC;IAE1C,MAAMqB,KAAK,GAAGA,CAAA,KAAM;MAClB,MAAMC,QAAQ,GAAG5M,IAAI,CAClB4M,QAAQ,CAACF,WAAW,EAAErF,QAAQ,CAAC,CAC/BwF,OAAO,CAAC,KAAK,EAAE7M,IAAI,CAAC8M,KAAK,CAACC,GAAG,CAAC;MAEjC,IAAIH,QAAQ,CAACtH,UAAU,CAAC,GAAG,CAAC,IAAItF,IAAI,CAACwF,UAAU,CAACoH,QAAQ,CAAC,EAAE;QACzD,OAAOA,QAAQ;MACjB;MAEA,OAAO,KAAKA,QAAQ,EAAE;IACxB,CAAC;IAED,MAAMI,QAAQ,GAAGA,CAAA,KAAMlN,EAAE,CAACwJ,YAAY,CAACjC,QAAQ,EAAE,OAAO,CAAC;IAEzD,MAAMe,OAA4B,GAAG;MACnCkD,QAAQ;MACRO,OAAO;MACPpH,QAAQ;MACR4C,QAAQ;MACR2E,KAAK;MACLC,IAAI;MACJ3I,WAAW,EAAGE,OAAO,IAAKF,WAAW,CAAC,IAAI,CAACC,QAAQ,EAAEC,OAAO,CAAC;MAC7DwJ,QAAQ;MACRL;IACF,CAAC;IAED,IAAIF,MAAM,KAAK,KAAK,EAAE;MACpB,OAAO;QAAE5G,OAAO,EAAE,IAAI;QAAEC,KAAK,EAAEsC,OAAO,CAAC4E,QAAQ,CAAC;MAAE,CAAC;IACrD;IAEA,IAAIP,MAAM,KAAK,KAAK,EAAE;MACpB,OAAO;QAAE5G,OAAO,EAAE,IAAI;QAAEC,KAAK,EAAEsC,OAAO,CAACuE,KAAK,CAAC;MAAE,CAAC;IAClD;IAEA,IAAI,OAAOF,MAAM,KAAK,UAAU,EAAE;MAChC,OAAO;QAAE5G,OAAO,EAAE,IAAI;QAAEC,KAAK,EAAE2G,MAAM,CAACrE,OAAO;MAAE,CAAC;IAClD;IAEA,OAAO;MAAEvC,OAAO,EAAE,KAAK;MAAEC,KAAK,EAAEiG;IAAU,CAAC;EAC7C;AACF","ignoreList":[]}
1
+ {"version":3,"file":"module.js","names":["fs","NativeModule","path","vm","invariant","isFeatureEnabled","Entrypoint","getStack","isSuperSet","mergeOnly","isUnprocessedEntrypointError","applyImportOverrideToOnly","resolveMockSpecifier","toImportKey","parseRequest","stripQueryAndHash","createVmContext","DefaultModuleImplementation","builtins","assert","buffer","child_process","cluster","console","constants","crypto","dgram","dns","domain","events","http","https","module","net","os","punycode","process","querystring","readline","repl","stream","string_decoder","sys","timers","tls","tty","url","util","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","defaultImportLoaders","raw","Module","callstack","isEvaluated","require","Object","assign","dependencies","push","debug","startsWith","dependency","isAbsolute","source","loaded","loadByImportLoaders","handled","value","entrypoint","getEntrypoint","only","evaluated","evaluatedOnly","exports","m","createChild","evaluate","ensure","bind","entrypointRef","constructor","parentModule","moduleImpl","cache","options","pluginOptions","features","name","WeakRef","idx","filename","log","extend","parentIsIgnored","ignored","extensions","deref","assertTransformed","evaluatedCreated","supersededWith","add","createEvaluated","transformedCode","JSON","parse","context","teardown","__wyw_dynamic_import","__dirname","dirname","overrideContext","script","Script","runInContext","e","EvalError","baseMessage","hint","strippedFilename","extension","extname","newEntrypoint","readFileSync","stack","uncachedExports","reprocessOnly","evaluatedExports","length","code","createRoot","getDependency","Promise","_extensions","added","forEach","ext","strippedId","_resolveFilename","paths","_nodeModulePaths","isFileSpecifier","endsWith","existsSync","slice","root","keyInfo","override","importOverrides","key","policy","unknown","mock","shouldWarn","finalResolved","importer","errorMessage","map","item","Boolean","warnedUnknownImports","stringify","request","importLoaders","undefined","query","hash","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":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,EAAE,MAAM,IAAI;AACnB,OAAOC,YAAY,MAAM,QAAQ;AACjC,OAAOC,IAAI,MAAM,MAAM;AACvB,OAAOC,EAAE,MAAM,IAAI;AAEnB,SAASC,SAAS,QAAQ,cAAc;AAExC,SACEC,gBAAgB,QAIX,mBAAmB;AAE1B,OAAO,0BAA0B;AAEjC,SAASC,UAAU,QAAQ,wBAAwB;AACnD,SACEC,QAAQ,EACRC,UAAU,EACVC,SAAS,QACJ,gCAAgC;AAGvC,SAASC,4BAA4B,QAAQ,gDAAgD;AAE7F,SACEC,yBAAyB,EACzBC,oBAAoB,EACpBC,WAAW,QACN,yBAAyB;AAChC,SAASC,YAAY,EAAEC,iBAAiB,QAAQ,sBAAsB;AACtE,SAASC,eAAe,QAAQ,sBAAsB;AAWtD,OAAO,MAAMC,2BAA2B,GAAGhB,YACtB;;AAErB;AACA;AACA,MAAMiB,QAAQ,GAAG;EACfC,MAAM,EAAE,IAAI;EACZC,MAAM,EAAE,IAAI;EACZC,aAAa,EAAE,KAAK;EACpBC,OAAO,EAAE,KAAK;EACdC,OAAO,EAAE,IAAI;EACbC,SAAS,EAAE,IAAI;EACfC,MAAM,EAAE,IAAI;EACZC,KAAK,EAAE,KAAK;EACZC,GAAG,EAAE,KAAK;EACVC,MAAM,EAAE,IAAI;EACZC,MAAM,EAAE,IAAI;EACZ7B,EAAE,EAAE,KAAK;EACT8B,IAAI,EAAE,IAAI;EACVC,KAAK,EAAE,IAAI;EACXC,MAAM,EAAE,KAAK;EACbC,GAAG,EAAE,KAAK;EACVC,EAAE,EAAE,IAAI;EACRhC,IAAI,EAAE,IAAI;EACViC,QAAQ,EAAE,IAAI;EACdC,OAAO,EAAE,IAAI;EACbC,WAAW,EAAE,IAAI;EACjBC,QAAQ,EAAE,KAAK;EACfC,IAAI,EAAE,KAAK;EACXC,MAAM,EAAE,IAAI;EACZC,cAAc,EAAE,IAAI;EACpBC,GAAG,EAAE,IAAI;EACTC,MAAM,EAAE,IAAI;EACZC,GAAG,EAAE,KAAK;EACVC,GAAG,EAAE,IAAI;EACTC,GAAG,EAAE,IAAI;EACTC,IAAI,EAAE,IAAI;EACV5C,EAAE,EAAE,IAAI;EACR6C,IAAI,EAAE;AACR,CAAC;AAED,MAAMC,mBAAmB,GAAG,IAAI;AAChC,MAAMC,wBAAwB,GAAG,iBAAiB;AAClD,MAAMC,mBAAmB,GAAG;EAC1BC,mCAAmC,EAAEA,CAAA,KAAM,MAAM,CAAC;AACpD,CAAC;AAED,MAAMC,IAAI,GAAGA,CAAA,KAAM,CAAC,CAAC;AAErB,MAAMC,2BAA2B,GAAG,CAClC,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,CACnB;AAED,MAAMC,sBAAsB,GAAIC,KAAc,IAAoB;EAChE,MAAMC,OAAO,GAAGD,KAAK,YAAYE,KAAK,GAAGF,KAAK,CAACC,OAAO,GAAGE,MAAM,CAACH,KAAK,CAAC;EACtE,MAAMI,oBAAoB,GAAGN,2BAA2B,CAACO,IAAI,CAAEC,OAAO,IACpEL,OAAO,CAACM,QAAQ,CAACD,OAAO,CAC1B,CAAC;EACD,IAAI,CAACF,oBAAoB,EAAE,OAAO,IAAI;EAEtC,OAAO,CACL,EAAE,EACF,8BAA8B,EAC9B,wEAAwE,EACxE,sGAAsG,EACtG,yFAAyF,CAC1F,CAACI,IAAI,CAAC,IAAI,CAAC;AACd,CAAC;AAED,MAAMC,8BAA8B,GAAG,IAAIC,OAAO,CAAwB,CAAC;AAE3E,SAASC,WAAWA,CAACC,QAAkB,EAAEX,OAAe,EAAE;EACxD,IAAIW,QAAQ,CAACD,WAAW,EAAE;IACxBC,QAAQ,CAACD,WAAW,CAACV,OAAO,CAAC;IAC7B;EACF;;EAEA;EACAlC,OAAO,CAAC8C,IAAI,CAACZ,OAAO,CAAC;AACvB;AAEA,SAASa,uBAAuBA,CAACF,QAAkB,EAAe;EAChE,MAAMG,MAAM,GAAGN,8BAA8B,CAACO,GAAG,CAACJ,QAAQ,CAAC;EAC3D,IAAIG,MAAM,EAAE;IACV,OAAOA,MAAM;EACf;EAEA,MAAME,OAAO,GAAG,IAAIC,GAAG,CAAS,CAAC;EACjCT,8BAA8B,CAACU,GAAG,CAACP,QAAQ,EAAEK,OAAO,CAAC;EACrD,OAAOA,OAAO;AAChB;AAEA,SAASG,WAAWA,CAACL,MAAyB,EAAEM,IAAc,EAAY;EACxE,MAAMC,SAAS,GAAG,IAAIJ,GAAG,CACvB,OAAOH,MAAM,KAAK,QAAQ,GAAGA,MAAM,CAACQ,KAAK,CAAC,GAAG,CAAC,GAAGR,MACnD,CAAC;EAED,IAAIO,SAAS,CAACE,GAAG,CAAC,GAAG,CAAC,EAAE;IACtB,OAAO,EAAE;EACX;EAEA,OAAOH,IAAI,CAACI,MAAM,CAAEC,CAAC,IAAK,CAACJ,SAAS,CAACE,GAAG,CAACE,CAAC,CAAC,CAAC;AAC9C;AAEA,SAASC,OAAOA,CAEdC,EAAU,EACF;EACR,MAAM;IAAEC;EAAS,CAAC,GAAG,IAAI,CAACC,iBAAiB,CAACF,EAAE,CAAC;EAC/ChF,SAAS,CAACiF,QAAQ,EAAE,sBAAsBD,EAAE,GAAG,CAAC;EAChD,OAAOC,QAAQ;AACjB;AAEA,MAAME,oBAAmC,GAAG;EAC1CC,GAAG,EAAE,KAAK;EACV1C,GAAG,EAAE;AACP,CAAC;AAED,OAAO,MAAM2C,MAAM,CAAC;EACFC,SAAS,GAAa,EAAE;EAgBjCC,WAAW,GAAY,KAAK;EAI5BC,OAAO,GAIVC,MAAM,CAACC,MAAM,CACdV,EAAU,IAAK;IACd,IAAIA,EAAE,KAAKlC,wBAAwB,EAAE;MACnC,IAAI,CAAC6C,YAAY,CAACC,IAAI,CAACZ,EAAE,CAAC;MAC1B,IAAI,CAACa,KAAK,CAAC,SAAS,EAAE,iBAAiBb,EAAE,GAAG,CAAC;MAC7C,OAAOjC,mBAAmB;IAC5B;IAEA,IAAIiC,EAAE,CAACc,UAAU,CAACjD,mBAAmB,CAAC,EAAE;MACtC,IAAI,CAAC8C,YAAY,CAACC,IAAI,CAACZ,EAAE,CAAC;MAC1B,IAAI,CAACa,KAAK,CAAC,SAAS,EAAE,iBAAiBb,EAAE,GAAG,CAAC;MAC7C,OAAO,CAAC,CAAC;IACX;IAEA,IAAIA,EAAE,IAAIlE,QAAQ,EAAE;MAClB;MACA;MACA;MACA,IAAIA,QAAQ,CAACkE,EAAE,CAA0B,EAAE;QACzC,IAAI,CAACa,KAAK,CAAC,SAAS,EAAE,YAAYb,EAAE,GAAG,CAAC;QACxC,OAAOQ,OAAO,CAACR,EAAE,CAAC;MACpB;MAEA,OAAO,IAAI;IACb;;IAEA;IACA,MAAMe,UAAU,GAAG,IAAI,CAACb,iBAAiB,CAACF,EAAE,CAAC;IAC7C,IAAIe,UAAU,CAACd,QAAQ,KAAKD,EAAE,IAAI,CAAClF,IAAI,CAACkG,UAAU,CAAChB,EAAE,CAAC,EAAE;MACtD;MACA,MAAM,IAAI1B,KAAK,CACb,qBAAqB0B,EAAE,6DACzB,CAAC;IACH;IAEAhF,SAAS,CACP+F,UAAU,CAACd,QAAQ,EACnB,cAAcc,UAAU,CAACE,MAAM,qBACjC,CAAC;IAED,MAAMC,MAAM,GAAG,IAAI,CAACC,mBAAmB,CAACnB,EAAE,EAAEe,UAAU,CAACd,QAAQ,CAAC;IAChE,IAAIiB,MAAM,CAACE,OAAO,EAAE;MAClB,IAAI,CAACT,YAAY,CAACC,IAAI,CAACZ,EAAE,CAAC;MAC1B,IAAI,CAACa,KAAK,CAAC,SAAS,EAAE,GAAGb,EAAE,OAAOe,UAAU,CAACd,QAAQ,WAAW,CAAC;MACjE,OAAOiB,MAAM,CAACG,KAAK;IACrB;IAEA,IAAI,CAACV,YAAY,CAACC,IAAI,CAACZ,EAAE,CAAC;IAE1B,IAAI,CAACa,KAAK,CAAC,SAAS,EAAE,GAAGb,EAAE,OAAOe,UAAU,CAACd,QAAQ,EAAE,CAAC;IAExD,MAAMqB,UAAU,GAAG,IAAI,CAACC,aAAa,CACnCR,UAAU,CAACd,QAAQ,EACnBc,UAAU,CAACS,IAAI,EACf,IAAI,CAACX,KACP,CAAC;IAED,IAAIS,UAAU,KAAK,IAAI,EAAE;MACvB,OAAOP,UAAU,CAACd,QAAQ;IAC5B;IAEA,IACEqB,UAAU,CAACG,SAAS,IACpBrG,UAAU,CAACkG,UAAU,CAACI,aAAa,EAAEX,UAAU,CAACS,IAAI,CAAC,EACrD;MACA,OAAOF,UAAU,CAACK,OAAO;IAC3B;IAEA,MAAMC,CAAC,GAAG,IAAI,CAACC,WAAW,CAACP,UAAU,CAAC;IACtCM,CAAC,CAACE,QAAQ,CAAC,CAAC;IAEZ,OAAOR,UAAU,CAACK,OAAO;EAC3B,CAAC,EACD;IACEI,MAAM,EAAE9D,IAAI;IACZ8B,OAAO,EAAEA,OAAO,CAACiC,IAAI,CAAC,IAAI;EAC5B,CACF,CAAC;EAEMjC,OAAO,GAAGA,OAAO,CAACiC,IAAI,CAAC,IAAI,CAAC;EAInC,CAACC,aAAa;EAEdC,WAAWA,CACDlD,QAAkB,EAC1BsC,UAAsB,EACtBa,YAAqB,EACbC,UAA+B,GAAGvG,2BAA2B,EACrE;IAAA,KAJQmD,QAAkB,GAAlBA,QAAkB;IAAA,KAGlBoD,UAA+B,GAA/BA,UAA+B;IAEvC,IAAI,CAACC,KAAK,GAAGrD,QAAQ,CAACqD,KAAK;IAC3B,IAAI,CAAC,CAACJ,aAAa,GAAGhH,gBAAgB,CACpC+D,QAAQ,CAACsD,OAAO,CAACC,aAAa,CAACC,QAAQ,EACvC,kBAAkB,EAClBlB,UAAU,CAACmB,IACb,CAAC,GACG,IAAIC,OAAO,CAACpB,UAAU,CAAC,GACvBA,UAAU;IACd,IAAI,CAACqB,GAAG,GAAGrB,UAAU,CAACqB,GAAG;IACzB,IAAI,CAAC3C,EAAE,GAAGsB,UAAU,CAACmB,IAAI;IACzB,IAAI,CAACG,QAAQ,GAAGtB,UAAU,CAACmB,IAAI;IAC/B,IAAI,CAAC9B,YAAY,GAAG,EAAE;IACtB,IAAI,CAACE,KAAK,GAAGS,UAAU,CAACuB,GAAG,CAACC,MAAM,CAAC,QAAQ,CAAC;IAC5C,IAAI,CAACC,eAAe,GAAGZ,YAAY,EAAEa,OAAO,IAAI,KAAK;IACrD,IAAI,CAACA,OAAO,GAAG1B,UAAU,CAAC0B,OAAO,IAAI,IAAI,CAACD,eAAe;IAEzD,IAAIZ,YAAY,EAAE;MAChB,IAAI,CAAC7B,SAAS,GAAG,CAACgB,UAAU,CAACmB,IAAI,EAAE,GAAGN,YAAY,CAAC7B,SAAS,CAAC;IAC/D,CAAC,MAAM;MACL,IAAI,CAACA,SAAS,GAAG,CAACgB,UAAU,CAACmB,IAAI,CAAC;IACpC;IAEA,IAAI,CAACQ,UAAU,GAAGjE,QAAQ,CAACsD,OAAO,CAACC,aAAa,CAACU,UAAU;IAE3D,IAAI,CAACpC,KAAK,CAAC,MAAM,EAAES,UAAU,CAACmB,IAAI,CAAC;EACrC;EAEA,IAAWd,OAAOA,CAAA,EAAG;IACnB,OAAO,IAAI,CAACL,UAAU,CAACK,OAAO;EAChC;EAEA,IAAWA,OAAOA,CAACN,KAAK,EAAE;IACxB,IAAI,CAACC,UAAU,CAACK,OAAO,GAAGN,KAAK;IAE/B,IAAI,CAACR,KAAK,CAAC,0CAA0C,EAAEQ,KAAK,CAAC;EAC/D;EAEA,IAAcC,UAAUA,CAAA,EAAe;IACrC,MAAMA,UAAU,GACd,IAAI,CAAC,CAACW,aAAa,YAAYS,OAAO,GAClC,IAAI,CAAC,CAACT,aAAa,CAACiB,KAAK,CAAC,CAAC,GAC3B,IAAI,CAAC,CAACjB,aAAa;IACzBjH,SAAS,CAACsG,UAAU,EAAE,UAAU,IAAI,CAACqB,GAAG,cAAc,CAAC;IACvD,OAAOrB,UAAU;EACnB;EAEAQ,QAAQA,CAAA,EAAS;IACf,MAAM;MAAER;IAAW,CAAC,GAAG,IAAI;IAC3BA,UAAU,CAAC6B,iBAAiB,CAAC,CAAC;IAE9B,MAAMhE,MAAM,GAAG,IAAI,CAACkD,KAAK,CAACjD,GAAG,CAAC,aAAa,EAAEkC,UAAU,CAACmB,IAAI,CAAE;IAC9D,IAAIW,gBAAgB,GAAG,KAAK;IAC5B,IAAI,CAAC9B,UAAU,CAAC+B,cAAc,EAAE;MAC9B,IAAI,CAAChB,KAAK,CAACiB,GAAG,CACZ,aAAa,EACbhC,UAAU,CAACmB,IAAI,EACfnB,UAAU,CAACiC,eAAe,CAAC,CAC7B,CAAC;MACDH,gBAAgB,GAAG,IAAI;IACzB;IAEA,MAAM;MAAEI,eAAe,EAAEvC;IAAO,CAAC,GAAGK,UAAU;IAC9C,MAAM;MAAEiB;IAAc,CAAC,GAAG,IAAI,CAACvD,QAAQ,CAACsD,OAAO;IAE/C,IAAI,CAACrB,MAAM,EAAE;MACX,IAAI,CAACJ,KAAK,CAAC,UAAU,EAAE,8BAA8B,CAAC;MACtD;IACF;IAEA,IAAI,IAAI,CAACN,WAAW,EAAE;MACpB,IAAI,CAACM,KAAK,CAAC,UAAU,EAAE,sBAAsB,CAAC;MAC9C;IACF;IAEA,IAAI,CAACA,KAAK,CAAC,UAAU,CAAC;IACtB,IAAI,CAACA,KAAK,CAACiC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE7B,MAAM,CAAC;IAEzC,IAAI,CAACV,WAAW,GAAG,IAAI;IAEvB,MAAMqC,QAAQ,GAAGjH,iBAAiB,CAAC,IAAI,CAACiH,QAAQ,CAAC;IAEjD,IAAI,SAAS,CAACnD,IAAI,CAACmD,QAAQ,CAAC,EAAE;MAC5B;MACA,IAAI,CAACjB,OAAO,GAAG8B,IAAI,CAACC,KAAK,CAACzC,MAAM,CAAC;MACjC;IACF;IAEA,MAAM;MAAE0C,OAAO;MAAEC;IAAS,CAAC,GAAGhI,eAAe,CAC3CgH,QAAQ,EACRL,aAAa,CAACC,QAAQ,EACtB;MACE5F,MAAM,EAAE,IAAI;MACZ+E,OAAO,EAAEL,UAAU,CAACK,OAAO;MAC3BnB,OAAO,EAAE,IAAI,CAACA,OAAO;MACrBqD,oBAAoB,EAAE,MAAO7D,EAAW,IAAK,IAAI,CAACQ,OAAO,CAACjC,MAAM,CAACyB,EAAE,CAAC,CAAC;MACrE8D,SAAS,EAAEhJ,IAAI,CAACiJ,OAAO,CAACnB,QAAQ;IAClC,CAAC,EACDL,aAAa,CAACyB,eAChB,CAAC;IAED,IAAI;MACF,MAAMC,MAAM,GAAG,IAAIlJ,EAAE,CAACmJ,MAAM,CAC1B,yBAAyBjD,MAAM,gBAAgB,EAC/C;QACE2B;MACF,CACF,CAAC;MAEDqB,MAAM,CAACE,YAAY,CAACR,OAAO,CAAC;IAC9B,CAAC,CAAC,OAAOS,CAAC,EAAE;MACV,IAAI,CAAC7D,WAAW,GAAG,KAAK;MACxB,IAAI6C,gBAAgB,EAAE;QACpB,IAAI,CAACf,KAAK,CAACiB,GAAG,CAAC,aAAa,EAAEhC,UAAU,CAACmB,IAAI,EAAEtD,MAAM,CAAC;MACxD;MAEA,IAAI7D,4BAA4B,CAAC8I,CAAC,CAAC,EAAE;QACnC;QACA,MAAMA,CAAC;MACT;MAEA,IAAIA,CAAC,YAAYC,SAAS,EAAE;QAC1B,IAAI,CAACxD,KAAK,CAAC,IAAI,EAAEuD,CAAC,CAAC;QAEnB,MAAMA,CAAC;MACT;MAEA,IAAI,CAACvD,KAAK,CAAC,QAAQ,EAAEuD,CAAC,EAAE,IAAI,CAAC9D,SAAS,CAAC;MACvC,MAAMgE,WAAW,GAAG,GAAIF,CAAC,CAAW/F,OAAO,MAAM,IAAI,CAACiC,SAAS,CAAC1B,IAAI,CAClE,MACF,CAAC,IAAI;MACL,MAAM2F,IAAI,GAAGpG,sBAAsB,CAACiG,CAAC,CAAC;MAEtC,MAAM,IAAIC,SAAS,CAACE,IAAI,GAAG,GAAGD,WAAW,GAAGC,IAAI,IAAI,GAAGD,WAAW,CAAC;IACrE,CAAC,SAAS;MACRV,QAAQ,CAAC,CAAC;IACZ;EACF;EAEArC,aAAaA,CACXqB,QAAgB,EAChBpB,IAAc,EACdqB,GAAa,EAC6B;IAC1C,MAAM2B,gBAAgB,GAAG7I,iBAAiB,CAACiH,QAAQ,CAAC;IACpD,MAAM6B,SAAS,GAAG3J,IAAI,CAAC4J,OAAO,CAACF,gBAAgB,CAAC;IAChD,IAAIC,SAAS,KAAK,OAAO,IAAI,CAAC,IAAI,CAACxB,UAAU,CAACtE,QAAQ,CAAC8F,SAAS,CAAC,EAAE;MACjE,OAAO,IAAI;IACb;IAEA,MAAMnD,UAAU,GAAG,IAAI,CAACe,KAAK,CAACjD,GAAG,CAAC,aAAa,EAAEwD,QAAQ,CAAC;IAC1D,IAAItB,UAAU,IAAIlG,UAAU,CAACkG,UAAU,CAACI,aAAa,IAAI,EAAE,EAAEF,IAAI,CAAC,EAAE;MAClEqB,GAAG,CAAC,mCAAmC,CAAC;MACxC,OAAOvB,UAAU;IACnB;IAEA,IAAIA,UAAU,EAAE0B,OAAO,EAAE;MACvBH,GAAG,CACD,0EACF,CAAC;MACD,OAAOvB,UAAU;IACnB;IAEA,IAAI,IAAI,CAAC0B,OAAO,EAAE;MAChBH,GAAG,CACD,6FACF,CAAC;MAED,MAAM8B,aAAa,GAAG,IAAI,CAACrD,UAAU,CAACO,WAAW,CAC/Ce,QAAQ,EACR,CAAC,GAAG,CAAC,EACLhI,EAAE,CAACgK,YAAY,CAACJ,gBAAgB,EAAE,OAAO,CAC3C,CAAC;MAED,IAAIG,aAAa,KAAK,MAAM,EAAE;QAC5B,MAAME,KAAK,GAAG1J,QAAQ,CAAC,IAAI,CAACmG,UAAU,CAAC;QACvC,MAAM,IAAIhD,KAAK,CACb,iCAAiCuG,KAAK,CAACjG,IAAI,CAAC,MAAM,CAAC,OAAOgE,QAAQ,EACpE,CAAC;MACH;MAEA,OAAO+B,aAAa;IACtB;IAEA,IAAIG,eAAgC,GAAG,IAAI;IAC3C,IAAIC,aAAuB,GAAGvD,IAAI;IAClC;IACA,IAAIA,IAAI,IAAIF,UAAU,EAAE;MACtB,MAAM0D,gBAAgB,GACpB1D,UAAU,CAACI,aAAa,EAAEuD,MAAM,KAAK,CAAC,GAClC3D,UAAU,CAACI,aAAa,GACxBJ,UAAU,CAACE,IAAI,IAAI,EAAE;MAC3BsD,eAAe,GAAGtF,WAAW,CAACwF,gBAAgB,EAAExD,IAAI,CAAC;MACrD,IAAIsD,eAAe,CAACG,MAAM,KAAK,CAAC,EAAE;QAChCpC,GAAG,CAAC,wBAAwB,CAAC;QAC7B,OAAOvB,UAAU;MACnB;MAEA,IAAIA,UAAU,CAACI,aAAa,EAAEuD,MAAM,EAAE;QACpCF,aAAa,GAAG1J,SAAS,CAAC2J,gBAAgB,EAAExD,IAAI,CAAC;MACnD;MAEAqB,GAAG,CACD,4FAA4F,EAC5FiC,eAAe,EACfE,gBACF,CAAC;IACH,CAAC,MAAM;MACLnC,GAAG,CAAC,oDAAoD,CAAC;IAC3D;;IAEA;IACA;IACA,MAAMqC,IAAI,GAAGtK,EAAE,CAACgK,YAAY,CAACJ,gBAAgB,EAAE,OAAO,CAAC;IACvD,MAAMG,aAAa,GAAGzJ,UAAU,CAACiK,UAAU,CACzC,IAAI,CAACnG,QAAQ,EACb4D,QAAQ,EACRmC,aAAa,EACbG,IACF,CAAC;IAED,IAAIP,aAAa,CAAClD,SAAS,EAAE;MAC3BoB,GAAG,CAAC,mCAAmC,CAAC;MACxC,OAAO8B,aAAa;IACtB;IAEA,IAAIA,aAAa,CAAC3B,OAAO,EAAE;MACzBH,GAAG,CACD,0EACF,CAAC;MACD,OAAO8B,aAAa;IACtB;IAEA,OAAOA,aAAa;EACtB;EAEAzE,iBAAiB,GAAIF,EAAU,IAA4B;IACzD,MAAMb,MAAM,GAAG,IAAI,CAACmC,UAAU,CAAC8D,aAAa,CAACpF,EAAE,CAAC;IAChDhF,SAAS,CAAC,EAAEmE,MAAM,YAAYkG,OAAO,CAAC,EAAE,gCAAgC,CAAC;IAEzE,IAAIlG,MAAM,EAAE;MACV,OAAOA,MAAM;IACf;IAEA,IAAI,CAAC,IAAI,CAAC6D,OAAO,EAAE;MACjB,IAAI,CAACnC,KAAK,CACR,mFACF,CAAC;IACH;IAEA,MAAMoC,UAAU,GAAG,IAAI,CAACb,UAAU,CAACkD,WAAW;IAC9C,MAAMC,KAAe,GAAG,EAAE;IAE1B,IAAI;MACF;MACA,IAAI,CAACtC,UAAU,CAACuC,OAAO,CAAEC,GAAG,IAAK;QAC/B,IAAIA,GAAG,IAAIxC,UAAU,EAAE;UACrB;QACF;;QAEA;QACA;QACA;QACAA,UAAU,CAACwC,GAAG,CAAC,GAAGxH,IAAI;QACtBsH,KAAK,CAAC3E,IAAI,CAAC6E,GAAG,CAAC;MACjB,CAAC,CAAC;MAEF,MAAM;QAAE7C;MAAS,CAAC,GAAG,IAAI;MACzB,MAAM8C,UAAU,GAAG/J,iBAAiB,CAACqE,EAAE,CAAC;MAExC,IAAIC,QAAQ,GAAG,IAAI,CAACmC,UAAU,CAACuD,gBAAgB,CAACD,UAAU,EAAE;QAC1D1F,EAAE,EAAE4C,QAAQ;QACZA,QAAQ;QACRgD,KAAK,EAAE,IAAI,CAACxD,UAAU,CAACyD,gBAAgB,CAAC/K,IAAI,CAACiJ,OAAO,CAACnB,QAAQ,CAAC;MAChE,CAAC,CAAC;MAEF,MAAMkD,eAAe,GACnBJ,UAAU,CAAC5E,UAAU,CAAC,GAAG,CAAC,IAAIhG,IAAI,CAACkG,UAAU,CAAC0E,UAAU,CAAC;MAE3D,IACEI,eAAe,IACfhL,IAAI,CAAC4J,OAAO,CAACgB,UAAU,CAAC,KAAK,EAAE,IAC/BzF,QAAQ,CAAC8F,QAAQ,CAAC,MAAM,CAAC,IACzBnL,EAAE,CAACoL,UAAU,CAAC,GAAG/F,QAAQ,CAACgG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAC5C;QACA;QACA;QACA;QACAhG,QAAQ,GAAG,GAAGA,QAAQ,CAACgG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK;MAC1C;MAEA,MAAM;QAAEC;MAAK,CAAC,GAAG,IAAI,CAAClH,QAAQ,CAACsD,OAAO;MACtC,MAAM6D,OAAO,GAAG1K,WAAW,CAAC;QAC1BwF,MAAM,EAAEjB,EAAE;QACVC,QAAQ;QACRiG;MACF,CAAC,CAAC;MAEF,MAAME,QAAQ,GACZ,IAAI,CAACpH,QAAQ,CAACsD,OAAO,CAACC,aAAa,CAAC8D,eAAe,GAAGF,OAAO,CAACG,GAAG,CAAC;MAEpE,MAAMC,MAAM,GAAGH,QAAQ,EAAEI,OAAO,KAAKJ,QAAQ,EAAEK,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC;MACvE,MAAMC,UAAU,GAAG,CAAC,IAAI,CAAC1D,OAAO,IAAIuD,MAAM,KAAK,MAAM;MAErD,IAAII,aAAa,GAAG1G,QAAQ;MAC5B,IAAImG,QAAQ,EAAEK,IAAI,EAAE;QAClB,IAAI;UACFE,aAAa,GAAGnL,oBAAoB,CAAC;YACnCiL,IAAI,EAAEL,QAAQ,CAACK,IAAI;YACnBG,QAAQ,EAAEhE,QAAQ;YAClBsD,IAAI;YACJrB,KAAK,EAAE,IAAI,CAACvE;UACd,CAAC,CAAC;QACJ,CAAC,CAAC,OAAO8D,CAAC,EAAE;UACV,MAAMyC,YAAY,GAAGtI,MAAM,CAAE6F,CAAC,EAAY/F,OAAO,IAAI+F,CAAC,CAAC;UACvD,MAAM,IAAI9F,KAAK,CACb,kDAAkD6H,OAAO,CAACG,GAAG,MAAMtG,EAAE,SAAS4C,QAAQ,MAAMiE,YAAY,EAC1G,CAAC;QACH;MACF;MAEA,IAAIN,MAAM,KAAK,OAAO,EAAE;QACtB,MAAM,IAAIjI,KAAK,CACb,CACE,yEAAyE,EACzE,EAAE,EACF,aAAasE,QAAQ,EAAE,EACvB,aAAa5C,EAAE,EAAE,EACjB,aAAaC,QAAQ,EAAE,EACvBmG,QAAQ,EAAEK,IAAI,GACV,aAAaL,QAAQ,CAACK,IAAI,OAAOE,aAAa,EAAE,GAChD,EAAE,EACN,EAAE,EACF,YAAY,EACZ,GAAG,IAAI,CAACrG,SAAS,CAACwG,GAAG,CAAEC,IAAI,IAAK,KAAKA,IAAI,EAAE,CAAC,EAC5C,EAAE,EACF,eAAeZ,OAAO,CAACG,GAAG,EAAE,CAC7B,CACEzG,MAAM,CAACmH,OAAO,CAAC,CACfpI,IAAI,CAAC,IAAI,CACd,CAAC;MACH;MAEA,MAAMqI,oBAAoB,GAAG/H,uBAAuB,CAAC,IAAI,CAACF,QAAQ,CAAC;MAEnE,IAAI0H,UAAU,IAAI,CAACO,oBAAoB,CAACrH,GAAG,CAACuG,OAAO,CAACG,GAAG,CAAC,EAAE;QACxDW,oBAAoB,CAAC3D,GAAG,CAAC6C,OAAO,CAACG,GAAG,CAAC;QACrCvH,WAAW,CACT,IAAI,CAACC,QAAQ,EACb,CACE,yEAAyE,EACzE,EAAE,EACF,aAAa4D,QAAQ,EAAE,EACvB,aAAa5C,EAAE,EAAE,EACjB,aAAaC,QAAQ,EAAE,EACvBmG,QAAQ,EAAEK,IAAI,GACV,aAAaL,QAAQ,CAACK,IAAI,OAAOE,aAAa,EAAE,GAChD,EAAE,EACN,EAAE,EACF,YAAY,EACZ,GAAG,IAAI,CAACrG,SAAS,CAACwG,GAAG,CAAEC,IAAI,IAAK,KAAKA,IAAI,EAAE,CAAC,EAC5C,EAAE,EACF,eAAeZ,OAAO,CAACG,GAAG,EAAE,EAC5B,kCAAkC7C,IAAI,CAACyD,SAAS,CAC9Cf,OAAO,CAACG,GACV,CAAC,gGAAgG,CAClG,CACEzG,MAAM,CAACmH,OAAO,CAAC,CACfpI,IAAI,CAAC,IAAI,CACd,CAAC;MACH;MAEA,OAAO;QACLqC,MAAM,EAAEjB,EAAE;QACVwB,IAAI,EAAEjG,yBAAyB,CAAC,CAAC,GAAG,CAAC,EAAE6K,QAAQ,CAAC;QAChDnG,QAAQ,EAAE0G;MACZ,CAAC;IACH,CAAC,SAAS;MACR;MACApB,KAAK,CAACC,OAAO,CAAEC,GAAG,IAAK,OAAOxC,UAAU,CAACwC,GAAG,CAAC,CAAC;IAChD;EACF,CAAC;EAES5D,WAAWA,CAACP,UAAsB,EAAU;IACpD,OAAO,IAAIjB,MAAM,CAAC,IAAI,CAACrB,QAAQ,EAAEsC,UAAU,EAAE,IAAI,EAAE,IAAI,CAACc,UAAU,CAAC;EACrE;EAEQjB,mBAAmBA,CACzBgG,OAAe,EACflH,QAAgB,EACsB;IACtC,MAAM;MAAEsC;IAAc,CAAC,GAAG,IAAI,CAACvD,QAAQ,CAACsD,OAAO;IAC/C,MAAM8E,aAAa,GACjB7E,aAAa,CAAC6E,aAAa,KAAKC,SAAS,GACrClH,oBAAoB,GACpB;MAAE,GAAGA,oBAAoB;MAAE,GAAGoC,aAAa,CAAC6E;IAAc,CAAC;IAEjE,MAAM;MAAEE,KAAK;MAAEC;IAAK,CAAC,GAAG7L,YAAY,CAACyL,OAAO,CAAC;IAC7C,IAAI,CAACG,KAAK,EAAE,OAAO;MAAElG,OAAO,EAAE,KAAK;MAAEC,KAAK,EAAEgG;IAAU,CAAC;IAEvD,MAAMG,MAAM,GAAG,IAAIC,eAAe,CAACH,KAAK,CAAC;IACzC,MAAMI,UAAU,GAAGC,KAAK,CAACC,IAAI,CAACJ,MAAM,CAACK,IAAI,CAAC,CAAC,CAAC,CAACC,IAAI,CAC9CxB,GAAG,IAAKc,aAAa,CAACd,GAAG,CAAC,KAAKe,SAAS,IAAID,aAAa,CAACd,GAAG,CAAC,KAAK,KACtE,CAAC;IAED,IAAI,CAACoB,UAAU,EAAE,OAAO;MAAEtG,OAAO,EAAE,KAAK;MAAEC,KAAK,EAAEgG;IAAU,CAAC;IAE5D,MAAMU,MAAM,GAAGX,aAAa,CAACM,UAAU,CAAC;IAExC,MAAM9E,QAAQ,GAAGjH,iBAAiB,CAACsE,QAAQ,CAAC;IAC5C,MAAM2G,QAAQ,GAAGjL,iBAAiB,CAAC,IAAI,CAACiH,QAAQ,CAAC;IACjD,MAAMoF,WAAW,GAAGlN,IAAI,CAACiJ,OAAO,CAAC6C,QAAQ,CAAC;IAE1C,MAAMqB,KAAK,GAAGA,CAAA,KAAM;MAClB,MAAMC,QAAQ,GAAGpN,IAAI,CAClBoN,QAAQ,CAACF,WAAW,EAAEpF,QAAQ,CAAC,CAC/BuF,OAAO,CAAC,KAAK,EAAErN,IAAI,CAACsN,KAAK,CAACC,GAAG,CAAC;MAEjC,IAAIH,QAAQ,CAACpH,UAAU,CAAC,GAAG,CAAC,IAAIhG,IAAI,CAACkG,UAAU,CAACkH,QAAQ,CAAC,EAAE;QACzD,OAAOA,QAAQ;MACjB;MAEA,OAAO,KAAKA,QAAQ,EAAE;IACxB,CAAC;IAED,MAAMI,QAAQ,GAAGA,CAAA,KAAM1N,EAAE,CAACgK,YAAY,CAAChC,QAAQ,EAAE,OAAO,CAAC;IAEzD,MAAMe,OAA4B,GAAG;MACnCiD,QAAQ;MACRO,OAAO;MACPlH,QAAQ;MACR2C,QAAQ;MACR0E,KAAK;MACLC,IAAI;MACJxI,WAAW,EAAGV,OAAO,IAAKU,WAAW,CAAC,IAAI,CAACC,QAAQ,EAAEX,OAAO,CAAC;MAC7DiK,QAAQ;MACRL;IACF,CAAC;IAED,IAAIF,MAAM,KAAK,KAAK,EAAE;MACpB,OAAO;QAAE3G,OAAO,EAAE,IAAI;QAAEC,KAAK,EAAEsC,OAAO,CAAC2E,QAAQ,CAAC;MAAE,CAAC;IACrD;IAEA,IAAIP,MAAM,KAAK,KAAK,EAAE;MACpB,OAAO;QAAE3G,OAAO,EAAE,IAAI;QAAEC,KAAK,EAAEsC,OAAO,CAACsE,KAAK,CAAC;MAAE,CAAC;IAClD;IAEA,IAAI,OAAOF,MAAM,KAAK,UAAU,EAAE;MAChC,OAAO;QAAE3G,OAAO,EAAE,IAAI;QAAEC,KAAK,EAAE0G,MAAM,CAACpE,OAAO;MAAE,CAAC;IAClD;IAEA,OAAO;MAAEvC,OAAO,EAAE,KAAK;MAAEC,KAAK,EAAEgG;IAAU,CAAC;EAC7C;AACF","ignoreList":[]}
@@ -36,7 +36,14 @@ function getBindingForExport(exportPath) {
36
36
  }
37
37
  }
38
38
  if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {
39
- return getNonParamBinding(exportPath, exportPath.node.id.name);
39
+ const {
40
+ id
41
+ } = exportPath.node;
42
+ if (!id) {
43
+ // `export default function() {}` / `export default class {}` (anonymous)
44
+ return undefined;
45
+ }
46
+ return getNonParamBinding(exportPath, id.name);
40
47
  }
41
48
  return undefined;
42
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shaker.js","names":["pathLib","logger","syncResolve","collectExportsAndImports","sideEffectImport","getFileIdx","isRemoved","applyAction","dereference","findActionForNode","reference","removeWithRelated","invalidateTraversalCache","stripQueryAndHash","toImportKey","getNonParamBinding","exportPath","name","binding","scope","getBinding","kind","parent","getBindingForExport","isIdentifier","node","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","withoutRemoved","items","filter","local","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","constantViolations","ref","replaced","replaceWith","isBindingIdentifier","push","registerConstantViolation","assigmentToExport","expressionStatement","assignmentExpression","memberExpression","body","lastViolation","pathInRoot","find","n","isDescendant","pushed","insertAfter","getPropertyAssignmentStatement","bindingName","assignment","isMemberExpression","object","statement","parentPath","isExpressionStatement","isWithinAliveExport","aliveExports","some","alive","isAncestor","stripExportKeepDeclaration","path","exportDeclaration","isExportNamedDeclaration","isTSEnumDeclaration","isVariableDeclaration","declarators","shakerPlugin","babel","keepSideEffects","ifUnknownExport","importOverrides","onlyExports","shakerLogger","extend","pre","file","filename","opts","log","join","onlyExportsSet","Set","shouldKeepOverride","override","hasImportOverride","Object","keys","cache","Map","source","cached","strippedSource","direct","result","set","isFileImport","startsWith","isAbsolute","resolved","key","collected","sideEffectImports","imports","values","reexports","hasWywPreval","__wywPreval","hasDefault","default","has","delete","size","deadExports","remove","importedAsSideEffect","isEsModule","add","importNames","map","imported","entries","exported","isImportSpecifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","includes","exp","exportToPath","notFoundExports","clear","isAllExportsFound","Error","forDeleting","i","forDeletingSet","queueForDeleting","deleted","dereferenced","changed","action","outerReferences","referencePaths","candidate","removableAssignmentStatements","removableOuterReferences","blockingReferences","unreferenced","getAllBindings","referenced","violation","visitor","post","processedImports","addImport","metadata","wywEvaluator"],"sources":["../../src/plugins/shaker.ts"],"sourcesContent":["import pathLib from 'path';\n\nimport type { BabelFile, PluginObj, NodePath } from '@babel/core';\nimport type { Binding } from '@babel/traverse';\nimport type {\n ExportNamedDeclaration,\n Identifier,\n MemberExpression,\n Program,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger, syncResolve } from '@wyw-in-js/shared';\nimport type { ImportOverride, ImportOverrides } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IMetadata } from '../utils/ShakerMetadata';\nimport type { Exports, IState } from '../utils/collectExportsAndImports';\nimport {\n collectExportsAndImports,\n sideEffectImport,\n} from '../utils/collectExportsAndImports';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { isRemoved } from '../utils/isRemoved';\nimport {\n applyAction,\n dereference,\n findActionForNode,\n reference,\n removeWithRelated,\n} from '../utils/scopeHelpers';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\nimport { stripQueryAndHash } from '../utils/parseRequest';\nimport { toImportKey } from '../utils/importOverrides';\n\nexport interface IShakerOptions {\n ifUnknownExport?: 'error' | 'ignore' | 'reexport-all' | 'skip-shaking';\n importOverrides?: ImportOverrides;\n keepSideEffects?: boolean;\n onlyExports: string[];\n root?: string;\n}\n\ninterface NodeWithName {\n name: string;\n}\n\nfunction getNonParamBinding(\n exportPath: NodePath,\n name: string\n): Binding | undefined {\n const binding = exportPath.scope.getBinding(name);\n if (binding && (binding.kind as string) !== 'param') {\n return binding;\n }\n\n // When `exportPath` is inside a function scope, a parameter can shadow\n // the actual export binding (e.g. `export function fallback(fallback) {}`).\n // In such cases we need the binding from the declaration scope.\n return exportPath.scope.parent?.getBinding(name) ?? binding;\n}\n\nfunction getBindingForExport(exportPath: NodePath): Binding | undefined {\n if (exportPath.isIdentifier()) {\n return getNonParamBinding(exportPath, exportPath.node.name);\n }\n\n const variableDeclarator = exportPath.findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n if (variableDeclarator) {\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n return variableDeclarator.scope.getBinding(id.node.name);\n }\n }\n\n if (exportPath.isAssignmentExpression()) {\n const left = exportPath.get('left');\n if (left.isIdentifier()) {\n return getNonParamBinding(exportPath, left.node.name);\n }\n }\n\n if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {\n return getNonParamBinding(exportPath, exportPath.node.id!.name);\n }\n\n return undefined;\n}\n\nconst withoutRemoved = <T extends { local: NodePath }>(items: T[]): T[] =>\n items.filter(({ local }) => !isRemoved(local));\n\nfunction rearrangeExports(\n { types: t }: Core,\n root: NodePath<Program>,\n exportRefs: Map<string, NodePath<MemberExpression>[]>,\n exports: Exports\n): Exports {\n const rearranged = {\n ...exports,\n };\n\n const rootScope = root.scope;\n exportRefs.forEach((refs, name) => {\n if (refs.length <= 1) {\n if (refs.length === 1) {\n // Maybe exports is assigned to another variable?\n const declarator = refs[0].findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n\n if (!declarator) {\n return;\n }\n } else {\n return;\n }\n }\n\n const uid = rootScope.generateUid(name);\n // Define variable in the beginning\n const [declaration] = root.unshiftContainer('body', [\n t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),\n ]);\n\n rootScope.registerDeclaration(declaration);\n\n const constantViolations: NodePath<Identifier>[] = [];\n // Replace every reference with defined variable\n refs.forEach((ref) => {\n const [replaced] = ref.replaceWith(t.identifier(uid));\n if (replaced.isBindingIdentifier()) {\n constantViolations.push(replaced);\n } else {\n reference(replaced);\n }\n });\n\n constantViolations.forEach((id) => {\n rootScope.registerConstantViolation(id);\n });\n\n const assigmentToExport = t.expressionStatement(\n t.assignmentExpression(\n '=',\n t.memberExpression(t.identifier('exports'), t.identifier(name)),\n t.identifier(uid)\n )\n );\n\n // export.foo = _foo will be inserted either after the last _foo assigment or in the end of the file\n const body = root.get('body');\n const lastViolation =\n constantViolations[constantViolations.length - 1] ??\n body[body.length - 1];\n const pathInRoot = root\n .get('body')\n .find((n) => lastViolation.isDescendant(n))!;\n\n const [pushed] = pathInRoot.insertAfter(assigmentToExport);\n\n const local = pushed.get('expression.right') as NodePath<Identifier>;\n reference(local);\n\n rearranged[name] = local;\n });\n\n return rearranged;\n}\n\nconst getPropertyAssignmentStatement = (\n ref: NodePath,\n bindingName: string\n): NodePath | null => {\n const assignment = ref.findParent((parent) =>\n parent.isAssignmentExpression()\n );\n if (!assignment?.isAssignmentExpression()) return null;\n\n const left = assignment.get('left');\n if (!left.isMemberExpression()) return null;\n\n const object = left.get('object');\n if (!object.isIdentifier({ name: bindingName })) return null;\n\n const statement = assignment.parentPath;\n return statement?.isExpressionStatement() ? statement : null;\n};\n\nconst isWithinAliveExport = (\n ref: NodePath,\n aliveExports: Set<NodePath>\n): boolean =>\n [...aliveExports].some((alive) => alive === ref || alive.isAncestor(ref));\n\nfunction stripExportKeepDeclaration(path: NodePath): boolean {\n const exportDeclaration = path.findParent((p) =>\n p.isExportNamedDeclaration()\n ) as NodePath<ExportNamedDeclaration> | null;\n if (!exportDeclaration) return false;\n\n const declaration = exportDeclaration.get('declaration');\n if (!declaration.node) return false;\n\n if (\n declaration.isFunctionDeclaration() ||\n declaration.isClassDeclaration() ||\n declaration.isTSEnumDeclaration()\n ) {\n exportDeclaration.replaceWith(declaration.node);\n return true;\n }\n\n if (declaration.isVariableDeclaration()) {\n const declarators = declaration.get('declarations');\n if (declarators.length !== 1) {\n return false;\n }\n\n exportDeclaration.replaceWith(declaration.node);\n return true;\n }\n\n return false;\n}\n\nexport default function shakerPlugin(\n babel: Core,\n {\n keepSideEffects = false,\n ifUnknownExport = 'skip-shaking',\n importOverrides,\n onlyExports,\n root,\n }: IShakerOptions\n): PluginObj<IState & { filename: string }> {\n const shakerLogger = logger.extend('shaker');\n\n return {\n name: '@wyw-in-js/transform/shaker',\n pre(file: BabelFile) {\n this.filename = file.opts.filename!;\n const log = shakerLogger.extend(getFileIdx(this.filename));\n\n log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);\n const onlyExportsSet = new Set(onlyExports);\n\n const shouldKeepOverride = (\n override: ImportOverride | undefined\n ): boolean => !!override && ('mock' in override || 'noShake' in override);\n\n const hasImportOverride = (() => {\n if (!importOverrides || Object.keys(importOverrides).length === 0) {\n return () => false;\n }\n\n const cache = new Map<string, boolean>();\n\n return (source: string): boolean => {\n const cached = cache.get(source);\n if (cached !== undefined) {\n return cached;\n }\n\n const strippedSource = stripQueryAndHash(source);\n\n const direct =\n importOverrides[source] ??\n (strippedSource !== source\n ? importOverrides[strippedSource]\n : null);\n if (direct) {\n const result = shouldKeepOverride(direct);\n cache.set(source, result);\n return result;\n }\n\n const isFileImport =\n strippedSource.startsWith('.') ||\n pathLib.isAbsolute(strippedSource);\n if (!isFileImport) {\n cache.set(source, false);\n return false;\n }\n\n try {\n const resolved = syncResolve(strippedSource, this.filename, []);\n const { key } = toImportKey({\n source: strippedSource,\n resolved,\n root,\n });\n const override = importOverrides[key];\n const result = shouldKeepOverride(override);\n cache.set(source, result);\n return result;\n } catch {\n cache.set(source, false);\n return false;\n }\n };\n })();\n\n const collected = collectExportsAndImports(file.path);\n const sideEffectImports = collected.imports.filter(sideEffectImport);\n log(\n 'import-and-exports',\n [\n `imports: ${collected.imports.length} (side-effects: ${sideEffectImports.length})`,\n `exports: ${Object.values(collected.exports).length}`,\n `reexports: ${collected.reexports.length}`,\n ].join(', ')\n );\n\n // We cannot just throw out exports if they are referred in the code\n // Let's dome some replacements\n const exports = rearrangeExports(\n babel,\n file.path,\n collected.exportRefs,\n collected.exports\n );\n\n Object.values(exports).forEach((local) => {\n if (local.isAssignmentExpression()) {\n const left = local.get('left');\n if (left.isIdentifier()) {\n // For some reason babel does not mark id in AssignmentExpression as a reference\n // So we need to do it manually\n reference(left, left, true);\n }\n }\n });\n\n const hasWywPreval = exports.__wywPreval !== undefined;\n const hasDefault = exports.default !== undefined;\n\n // If __wywPreval is not exported, we can remove it from onlyExports\n if (onlyExportsSet.has('__wywPreval') && !hasWywPreval) {\n onlyExportsSet.delete('__wywPreval');\n }\n\n if (onlyExportsSet.size === 0) {\n // Fast-lane: if there are no exports to keep, we can just shake out the whole file\n this.imports = [];\n this.exports = {};\n this.reexports = [];\n this.deadExports = Object.keys(exports);\n\n file.path.get('body').forEach((p) => {\n p.remove();\n });\n\n return;\n }\n\n const importedAsSideEffect = onlyExportsSet.has('side-effect');\n onlyExportsSet.delete('side-effect');\n\n // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be\n // shaken as they will break interopRequireDefault babel helper\n // See example in shaker-plugin.test.ts\n // Real-world example was found in preact/compat npm package\n if (\n onlyExportsSet.has('default') &&\n hasDefault &&\n !collected.isEsModule\n ) {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n return;\n }\n\n if (!onlyExportsSet.has('*')) {\n // __esModule should be kept alive\n onlyExportsSet.add('__esModule');\n\n const aliveExports = new Set<NodePath>();\n const importNames = collected.imports.map(({ imported }) => imported);\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (onlyExportsSet.has(exported)) {\n aliveExports.add(local);\n return;\n }\n\n const binding =\n local.isIdentifier() && local.scope.getBinding(local.node.name);\n\n if (\n binding &&\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n importNames.includes((local.node as NodeWithName).name || '')\n ) {\n aliveExports.add(local);\n return;\n }\n\n if ([...aliveExports].some((alive) => alive === local)) {\n // It's possible to export multiple values from a single variable initializer, e.g\n // export const { foo, bar } = baz();\n // We need to treat all of them as used if any of them are used, since otherwise\n // we'll attempt to delete the baz() call\n aliveExports.add(local);\n }\n });\n\n collected.reexports.forEach((exp) => {\n if (onlyExportsSet.has(exp.exported)) {\n aliveExports.add(exp.local);\n }\n });\n\n const exportToPath = new Map<string, NodePath>();\n Object.entries(exports).forEach(([exported, local]) => {\n exportToPath.set(exported, local);\n });\n\n collected.reexports.forEach((exp) => {\n exportToPath.set(exp.exported, exp.local);\n });\n\n const notFoundExports = [...onlyExportsSet].filter(\n (exp) =>\n exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)!)\n );\n exportToPath.clear();\n\n const isAllExportsFound = notFoundExports.length === 0;\n if (!isAllExportsFound && ifUnknownExport !== 'ignore') {\n if (ifUnknownExport === 'error') {\n throw new Error(\n `Unknown export(s) requested: ${onlyExports.join(',')}`\n );\n }\n\n if (ifUnknownExport === 'reexport-all') {\n // If there are unknown exports, we have keep alive all re-exports.\n if (exports['*'] !== undefined) {\n aliveExports.add(exports['*']);\n }\n\n collected.reexports.forEach((exp) => {\n if (exp.exported === '*') {\n aliveExports.add(exp.local);\n }\n });\n }\n\n if (ifUnknownExport === 'skip-shaking') {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n\n return;\n }\n }\n\n const forDeleting = [\n ...Object.values(exports),\n ...collected.reexports.map((i) => i.local),\n ].filter((exp) => !aliveExports.has(exp));\n\n const forDeletingSet = new Set<NodePath>(forDeleting);\n const queueForDeleting = (path: NodePath): boolean => {\n if (isRemoved(path) || forDeletingSet.has(path)) {\n return false;\n }\n\n forDeletingSet.add(path);\n forDeleting.push(path);\n return true;\n };\n\n if (!keepSideEffects && !importedAsSideEffect) {\n // Drop side-effect imports for eval-only builds unless they were explicitly requested.\n // This prevents evaluating unrelated runtime code (e.g. Radix) during __wywPreval eval.\n sideEffectImports.forEach((i) => {\n if (hasImportOverride(i.source)) {\n return;\n }\n\n queueForDeleting(i.local);\n });\n }\n\n const deleted = new Set<NodePath>();\n\n let dereferenced: NodePath<Identifier>[] = [];\n let changed = true;\n while (changed) {\n changed = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const path of forDeleting) {\n if (deleted.has(path)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const binding = getBindingForExport(path);\n const action = findActionForNode(path);\n const parent = action?.[1];\n const outerReferences = (binding?.referencePaths || []).filter(\n (ref) => {\n if (ref === parent || parent?.isAncestor(ref)) {\n return false;\n }\n\n return !forDeleting.some(\n (candidate) =>\n candidate !== path &&\n !isRemoved(candidate) &&\n (candidate === ref || candidate.isAncestor(ref))\n );\n }\n );\n const bindingName = binding?.identifier.name;\n const removableAssignmentStatements = new Set<NodePath>();\n const removableOuterReferences = outerReferences.filter((ref) => {\n if (!bindingName) return false;\n const statement = getPropertyAssignmentStatement(\n ref,\n bindingName\n );\n if (!statement || isWithinAliveExport(statement, aliveExports)) {\n return false;\n }\n\n removableAssignmentStatements.add(statement);\n return true;\n });\n\n const blockingReferences = outerReferences.filter(\n (ref) => !removableOuterReferences.includes(ref)\n );\n\n if (blockingReferences.length > 0 && path.isIdentifier()) {\n // Temporary deref it in order to simplify further checks.\n dereference(path);\n dereferenced.push(path);\n }\n\n if (\n !deleted.has(path) &&\n binding &&\n blockingReferences.length > 0 &&\n stripExportKeepDeclaration(path)\n ) {\n deleted.add(path);\n changed = true;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (\n !deleted.has(path) &&\n (!binding || blockingReferences.length === 0)\n ) {\n if (removableAssignmentStatements.size > 0) {\n for (const statement of removableAssignmentStatements) {\n if (queueForDeleting(statement)) {\n changed = true;\n }\n }\n }\n\n if (action) {\n applyAction(action);\n } else {\n removeWithRelated([path]);\n }\n\n deleted.add(path);\n changed = true;\n }\n }\n\n dereferenced.forEach((path) => {\n // If path is still alive, we need to reference it back\n if (!isRemoved(path)) {\n reference(path);\n }\n });\n\n dereferenced = [];\n\n // Find and mark for deleting all unreferenced variables\n const unreferenced = Object.values(\n file.scope.getAllBindings()\n ).filter((i) => !i.referenced);\n\n for (const binding of unreferenced) {\n if (binding.path.isVariableDeclarator()) {\n const id = binding.path.get('id');\n if (!isRemoved(id) && !forDeletingSet.has(id)) {\n // Drop dead variable declarations, e.g. `const foo = make();` when `foo` is no longer referenced.\n for (const violation of binding.constantViolations) {\n if (queueForDeleting(violation)) {\n changed = true;\n }\n }\n\n if (queueForDeleting(id)) {\n changed = true;\n }\n }\n }\n\n // Drop import specifiers whose bindings lost all references during shaking\n // (e.g. when we keep only __wywPreval and the rest of the module is removed).\n if (\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n !isRemoved(binding.path) &&\n !forDeletingSet.has(binding.path)\n ) {\n if (queueForDeleting(binding.path)) {\n changed = true;\n }\n }\n }\n }\n }\n\n this.imports = withoutRemoved(collected.imports);\n this.exports = {};\n this.deadExports = [];\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (isRemoved(local)) {\n this.deadExports.push(exported);\n } else {\n this.exports[exported] = local;\n }\n });\n\n this.reexports = withoutRemoved(collected.reexports);\n },\n visitor: {},\n post(file: BabelFile) {\n const log = shakerLogger.extend(getFileIdx(file.opts.filename!));\n\n const processedImports = new Set<string>();\n const imports = new Map<string, string[]>();\n const addImport = ({\n imported,\n source,\n }: {\n imported: string;\n source: string;\n }) => {\n if (processedImports.has(`${source}:${imported}`)) {\n return;\n }\n\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n if (imported) {\n imports.get(source)!.push(imported);\n }\n\n processedImports.add(`${source}:${imported}`);\n };\n\n this.imports.forEach(addImport);\n this.reexports.forEach(addImport);\n\n log('end', `remaining imports: %O`, imports);\n\n // eslint-disable-next-line no-param-reassign\n (file.metadata as IMetadata).wywEvaluator = {\n imports,\n };\n\n invalidateTraversalCache(file.path);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"shaker.js","names":["pathLib","logger","syncResolve","collectExportsAndImports","sideEffectImport","getFileIdx","isRemoved","applyAction","dereference","findActionForNode","reference","removeWithRelated","invalidateTraversalCache","stripQueryAndHash","toImportKey","getNonParamBinding","exportPath","name","binding","scope","getBinding","kind","parent","getBindingForExport","isIdentifier","node","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","withoutRemoved","items","filter","local","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","constantViolations","ref","replaced","replaceWith","isBindingIdentifier","push","registerConstantViolation","assigmentToExport","expressionStatement","assignmentExpression","memberExpression","body","lastViolation","pathInRoot","find","n","isDescendant","pushed","insertAfter","getPropertyAssignmentStatement","bindingName","assignment","isMemberExpression","object","statement","parentPath","isExpressionStatement","isWithinAliveExport","aliveExports","some","alive","isAncestor","stripExportKeepDeclaration","path","exportDeclaration","isExportNamedDeclaration","isTSEnumDeclaration","isVariableDeclaration","declarators","shakerPlugin","babel","keepSideEffects","ifUnknownExport","importOverrides","onlyExports","shakerLogger","extend","pre","file","filename","opts","log","join","onlyExportsSet","Set","shouldKeepOverride","override","hasImportOverride","Object","keys","cache","Map","source","cached","strippedSource","direct","result","set","isFileImport","startsWith","isAbsolute","resolved","key","collected","sideEffectImports","imports","values","reexports","hasWywPreval","__wywPreval","hasDefault","default","has","delete","size","deadExports","remove","importedAsSideEffect","isEsModule","add","importNames","map","imported","entries","exported","isImportSpecifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","includes","exp","exportToPath","notFoundExports","clear","isAllExportsFound","Error","forDeleting","i","forDeletingSet","queueForDeleting","deleted","dereferenced","changed","action","outerReferences","referencePaths","candidate","removableAssignmentStatements","removableOuterReferences","blockingReferences","unreferenced","getAllBindings","referenced","violation","visitor","post","processedImports","addImport","metadata","wywEvaluator"],"sources":["../../src/plugins/shaker.ts"],"sourcesContent":["import pathLib from 'path';\n\nimport type { BabelFile, PluginObj, NodePath } from '@babel/core';\nimport type { Binding } from '@babel/traverse';\nimport type {\n ExportNamedDeclaration,\n Identifier,\n MemberExpression,\n Program,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger, syncResolve } from '@wyw-in-js/shared';\nimport type { ImportOverride, ImportOverrides } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IMetadata } from '../utils/ShakerMetadata';\nimport type { Exports, IState } from '../utils/collectExportsAndImports';\nimport {\n collectExportsAndImports,\n sideEffectImport,\n} from '../utils/collectExportsAndImports';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { isRemoved } from '../utils/isRemoved';\nimport {\n applyAction,\n dereference,\n findActionForNode,\n reference,\n removeWithRelated,\n} from '../utils/scopeHelpers';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\nimport { stripQueryAndHash } from '../utils/parseRequest';\nimport { toImportKey } from '../utils/importOverrides';\n\nexport interface IShakerOptions {\n ifUnknownExport?: 'error' | 'ignore' | 'reexport-all' | 'skip-shaking';\n importOverrides?: ImportOverrides;\n keepSideEffects?: boolean;\n onlyExports: string[];\n root?: string;\n}\n\ninterface NodeWithName {\n name: string;\n}\n\nfunction getNonParamBinding(\n exportPath: NodePath,\n name: string\n): Binding | undefined {\n const binding = exportPath.scope.getBinding(name);\n if (binding && (binding.kind as string) !== 'param') {\n return binding;\n }\n\n // When `exportPath` is inside a function scope, a parameter can shadow\n // the actual export binding (e.g. `export function fallback(fallback) {}`).\n // In such cases we need the binding from the declaration scope.\n return exportPath.scope.parent?.getBinding(name) ?? binding;\n}\n\nfunction getBindingForExport(exportPath: NodePath): Binding | undefined {\n if (exportPath.isIdentifier()) {\n return getNonParamBinding(exportPath, exportPath.node.name);\n }\n\n const variableDeclarator = exportPath.findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n if (variableDeclarator) {\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n return variableDeclarator.scope.getBinding(id.node.name);\n }\n }\n\n if (exportPath.isAssignmentExpression()) {\n const left = exportPath.get('left');\n if (left.isIdentifier()) {\n return getNonParamBinding(exportPath, left.node.name);\n }\n }\n\n if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {\n const { id } = exportPath.node;\n if (!id) {\n // `export default function() {}` / `export default class {}` (anonymous)\n return undefined;\n }\n return getNonParamBinding(exportPath, id.name);\n }\n\n return undefined;\n}\n\nconst withoutRemoved = <T extends { local: NodePath }>(items: T[]): T[] =>\n items.filter(({ local }) => !isRemoved(local));\n\nfunction rearrangeExports(\n { types: t }: Core,\n root: NodePath<Program>,\n exportRefs: Map<string, NodePath<MemberExpression>[]>,\n exports: Exports\n): Exports {\n const rearranged = {\n ...exports,\n };\n\n const rootScope = root.scope;\n exportRefs.forEach((refs, name) => {\n if (refs.length <= 1) {\n if (refs.length === 1) {\n // Maybe exports is assigned to another variable?\n const declarator = refs[0].findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n\n if (!declarator) {\n return;\n }\n } else {\n return;\n }\n }\n\n const uid = rootScope.generateUid(name);\n // Define variable in the beginning\n const [declaration] = root.unshiftContainer('body', [\n t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),\n ]);\n\n rootScope.registerDeclaration(declaration);\n\n const constantViolations: NodePath<Identifier>[] = [];\n // Replace every reference with defined variable\n refs.forEach((ref) => {\n const [replaced] = ref.replaceWith(t.identifier(uid));\n if (replaced.isBindingIdentifier()) {\n constantViolations.push(replaced);\n } else {\n reference(replaced);\n }\n });\n\n constantViolations.forEach((id) => {\n rootScope.registerConstantViolation(id);\n });\n\n const assigmentToExport = t.expressionStatement(\n t.assignmentExpression(\n '=',\n t.memberExpression(t.identifier('exports'), t.identifier(name)),\n t.identifier(uid)\n )\n );\n\n // export.foo = _foo will be inserted either after the last _foo assigment or in the end of the file\n const body = root.get('body');\n const lastViolation =\n constantViolations[constantViolations.length - 1] ??\n body[body.length - 1];\n const pathInRoot = root\n .get('body')\n .find((n) => lastViolation.isDescendant(n))!;\n\n const [pushed] = pathInRoot.insertAfter(assigmentToExport);\n\n const local = pushed.get('expression.right') as NodePath<Identifier>;\n reference(local);\n\n rearranged[name] = local;\n });\n\n return rearranged;\n}\n\nconst getPropertyAssignmentStatement = (\n ref: NodePath,\n bindingName: string\n): NodePath | null => {\n const assignment = ref.findParent((parent) =>\n parent.isAssignmentExpression()\n );\n if (!assignment?.isAssignmentExpression()) return null;\n\n const left = assignment.get('left');\n if (!left.isMemberExpression()) return null;\n\n const object = left.get('object');\n if (!object.isIdentifier({ name: bindingName })) return null;\n\n const statement = assignment.parentPath;\n return statement?.isExpressionStatement() ? statement : null;\n};\n\nconst isWithinAliveExport = (\n ref: NodePath,\n aliveExports: Set<NodePath>\n): boolean =>\n [...aliveExports].some((alive) => alive === ref || alive.isAncestor(ref));\n\nfunction stripExportKeepDeclaration(path: NodePath): boolean {\n const exportDeclaration = path.findParent((p) =>\n p.isExportNamedDeclaration()\n ) as NodePath<ExportNamedDeclaration> | null;\n if (!exportDeclaration) return false;\n\n const declaration = exportDeclaration.get('declaration');\n if (!declaration.node) return false;\n\n if (\n declaration.isFunctionDeclaration() ||\n declaration.isClassDeclaration() ||\n declaration.isTSEnumDeclaration()\n ) {\n exportDeclaration.replaceWith(declaration.node);\n return true;\n }\n\n if (declaration.isVariableDeclaration()) {\n const declarators = declaration.get('declarations');\n if (declarators.length !== 1) {\n return false;\n }\n\n exportDeclaration.replaceWith(declaration.node);\n return true;\n }\n\n return false;\n}\n\nexport default function shakerPlugin(\n babel: Core,\n {\n keepSideEffects = false,\n ifUnknownExport = 'skip-shaking',\n importOverrides,\n onlyExports,\n root,\n }: IShakerOptions\n): PluginObj<IState & { filename: string }> {\n const shakerLogger = logger.extend('shaker');\n\n return {\n name: '@wyw-in-js/transform/shaker',\n pre(file: BabelFile) {\n this.filename = file.opts.filename!;\n const log = shakerLogger.extend(getFileIdx(this.filename));\n\n log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);\n const onlyExportsSet = new Set(onlyExports);\n\n const shouldKeepOverride = (\n override: ImportOverride | undefined\n ): boolean => !!override && ('mock' in override || 'noShake' in override);\n\n const hasImportOverride = (() => {\n if (!importOverrides || Object.keys(importOverrides).length === 0) {\n return () => false;\n }\n\n const cache = new Map<string, boolean>();\n\n return (source: string): boolean => {\n const cached = cache.get(source);\n if (cached !== undefined) {\n return cached;\n }\n\n const strippedSource = stripQueryAndHash(source);\n\n const direct =\n importOverrides[source] ??\n (strippedSource !== source\n ? importOverrides[strippedSource]\n : null);\n if (direct) {\n const result = shouldKeepOverride(direct);\n cache.set(source, result);\n return result;\n }\n\n const isFileImport =\n strippedSource.startsWith('.') ||\n pathLib.isAbsolute(strippedSource);\n if (!isFileImport) {\n cache.set(source, false);\n return false;\n }\n\n try {\n const resolved = syncResolve(strippedSource, this.filename, []);\n const { key } = toImportKey({\n source: strippedSource,\n resolved,\n root,\n });\n const override = importOverrides[key];\n const result = shouldKeepOverride(override);\n cache.set(source, result);\n return result;\n } catch {\n cache.set(source, false);\n return false;\n }\n };\n })();\n\n const collected = collectExportsAndImports(file.path);\n const sideEffectImports = collected.imports.filter(sideEffectImport);\n log(\n 'import-and-exports',\n [\n `imports: ${collected.imports.length} (side-effects: ${sideEffectImports.length})`,\n `exports: ${Object.values(collected.exports).length}`,\n `reexports: ${collected.reexports.length}`,\n ].join(', ')\n );\n\n // We cannot just throw out exports if they are referred in the code\n // Let's dome some replacements\n const exports = rearrangeExports(\n babel,\n file.path,\n collected.exportRefs,\n collected.exports\n );\n\n Object.values(exports).forEach((local) => {\n if (local.isAssignmentExpression()) {\n const left = local.get('left');\n if (left.isIdentifier()) {\n // For some reason babel does not mark id in AssignmentExpression as a reference\n // So we need to do it manually\n reference(left, left, true);\n }\n }\n });\n\n const hasWywPreval = exports.__wywPreval !== undefined;\n const hasDefault = exports.default !== undefined;\n\n // If __wywPreval is not exported, we can remove it from onlyExports\n if (onlyExportsSet.has('__wywPreval') && !hasWywPreval) {\n onlyExportsSet.delete('__wywPreval');\n }\n\n if (onlyExportsSet.size === 0) {\n // Fast-lane: if there are no exports to keep, we can just shake out the whole file\n this.imports = [];\n this.exports = {};\n this.reexports = [];\n this.deadExports = Object.keys(exports);\n\n file.path.get('body').forEach((p) => {\n p.remove();\n });\n\n return;\n }\n\n const importedAsSideEffect = onlyExportsSet.has('side-effect');\n onlyExportsSet.delete('side-effect');\n\n // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be\n // shaken as they will break interopRequireDefault babel helper\n // See example in shaker-plugin.test.ts\n // Real-world example was found in preact/compat npm package\n if (\n onlyExportsSet.has('default') &&\n hasDefault &&\n !collected.isEsModule\n ) {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n return;\n }\n\n if (!onlyExportsSet.has('*')) {\n // __esModule should be kept alive\n onlyExportsSet.add('__esModule');\n\n const aliveExports = new Set<NodePath>();\n const importNames = collected.imports.map(({ imported }) => imported);\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (onlyExportsSet.has(exported)) {\n aliveExports.add(local);\n return;\n }\n\n const binding =\n local.isIdentifier() && local.scope.getBinding(local.node.name);\n\n if (\n binding &&\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n importNames.includes((local.node as NodeWithName).name || '')\n ) {\n aliveExports.add(local);\n return;\n }\n\n if ([...aliveExports].some((alive) => alive === local)) {\n // It's possible to export multiple values from a single variable initializer, e.g\n // export const { foo, bar } = baz();\n // We need to treat all of them as used if any of them are used, since otherwise\n // we'll attempt to delete the baz() call\n aliveExports.add(local);\n }\n });\n\n collected.reexports.forEach((exp) => {\n if (onlyExportsSet.has(exp.exported)) {\n aliveExports.add(exp.local);\n }\n });\n\n const exportToPath = new Map<string, NodePath>();\n Object.entries(exports).forEach(([exported, local]) => {\n exportToPath.set(exported, local);\n });\n\n collected.reexports.forEach((exp) => {\n exportToPath.set(exp.exported, exp.local);\n });\n\n const notFoundExports = [...onlyExportsSet].filter(\n (exp) =>\n exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)!)\n );\n exportToPath.clear();\n\n const isAllExportsFound = notFoundExports.length === 0;\n if (!isAllExportsFound && ifUnknownExport !== 'ignore') {\n if (ifUnknownExport === 'error') {\n throw new Error(\n `Unknown export(s) requested: ${onlyExports.join(',')}`\n );\n }\n\n if (ifUnknownExport === 'reexport-all') {\n // If there are unknown exports, we have keep alive all re-exports.\n if (exports['*'] !== undefined) {\n aliveExports.add(exports['*']);\n }\n\n collected.reexports.forEach((exp) => {\n if (exp.exported === '*') {\n aliveExports.add(exp.local);\n }\n });\n }\n\n if (ifUnknownExport === 'skip-shaking') {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n\n return;\n }\n }\n\n const forDeleting = [\n ...Object.values(exports),\n ...collected.reexports.map((i) => i.local),\n ].filter((exp) => !aliveExports.has(exp));\n\n const forDeletingSet = new Set<NodePath>(forDeleting);\n const queueForDeleting = (path: NodePath): boolean => {\n if (isRemoved(path) || forDeletingSet.has(path)) {\n return false;\n }\n\n forDeletingSet.add(path);\n forDeleting.push(path);\n return true;\n };\n\n if (!keepSideEffects && !importedAsSideEffect) {\n // Drop side-effect imports for eval-only builds unless they were explicitly requested.\n // This prevents evaluating unrelated runtime code (e.g. Radix) during __wywPreval eval.\n sideEffectImports.forEach((i) => {\n if (hasImportOverride(i.source)) {\n return;\n }\n\n queueForDeleting(i.local);\n });\n }\n\n const deleted = new Set<NodePath>();\n\n let dereferenced: NodePath<Identifier>[] = [];\n let changed = true;\n while (changed) {\n changed = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const path of forDeleting) {\n if (deleted.has(path)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const binding = getBindingForExport(path);\n const action = findActionForNode(path);\n const parent = action?.[1];\n const outerReferences = (binding?.referencePaths || []).filter(\n (ref) => {\n if (ref === parent || parent?.isAncestor(ref)) {\n return false;\n }\n\n return !forDeleting.some(\n (candidate) =>\n candidate !== path &&\n !isRemoved(candidate) &&\n (candidate === ref || candidate.isAncestor(ref))\n );\n }\n );\n const bindingName = binding?.identifier.name;\n const removableAssignmentStatements = new Set<NodePath>();\n const removableOuterReferences = outerReferences.filter((ref) => {\n if (!bindingName) return false;\n const statement = getPropertyAssignmentStatement(\n ref,\n bindingName\n );\n if (!statement || isWithinAliveExport(statement, aliveExports)) {\n return false;\n }\n\n removableAssignmentStatements.add(statement);\n return true;\n });\n\n const blockingReferences = outerReferences.filter(\n (ref) => !removableOuterReferences.includes(ref)\n );\n\n if (blockingReferences.length > 0 && path.isIdentifier()) {\n // Temporary deref it in order to simplify further checks.\n dereference(path);\n dereferenced.push(path);\n }\n\n if (\n !deleted.has(path) &&\n binding &&\n blockingReferences.length > 0 &&\n stripExportKeepDeclaration(path)\n ) {\n deleted.add(path);\n changed = true;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (\n !deleted.has(path) &&\n (!binding || blockingReferences.length === 0)\n ) {\n if (removableAssignmentStatements.size > 0) {\n for (const statement of removableAssignmentStatements) {\n if (queueForDeleting(statement)) {\n changed = true;\n }\n }\n }\n\n if (action) {\n applyAction(action);\n } else {\n removeWithRelated([path]);\n }\n\n deleted.add(path);\n changed = true;\n }\n }\n\n dereferenced.forEach((path) => {\n // If path is still alive, we need to reference it back\n if (!isRemoved(path)) {\n reference(path);\n }\n });\n\n dereferenced = [];\n\n // Find and mark for deleting all unreferenced variables\n const unreferenced = Object.values(\n file.scope.getAllBindings()\n ).filter((i) => !i.referenced);\n\n for (const binding of unreferenced) {\n if (binding.path.isVariableDeclarator()) {\n const id = binding.path.get('id');\n if (!isRemoved(id) && !forDeletingSet.has(id)) {\n // Drop dead variable declarations, e.g. `const foo = make();` when `foo` is no longer referenced.\n for (const violation of binding.constantViolations) {\n if (queueForDeleting(violation)) {\n changed = true;\n }\n }\n\n if (queueForDeleting(id)) {\n changed = true;\n }\n }\n }\n\n // Drop import specifiers whose bindings lost all references during shaking\n // (e.g. when we keep only __wywPreval and the rest of the module is removed).\n if (\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n !isRemoved(binding.path) &&\n !forDeletingSet.has(binding.path)\n ) {\n if (queueForDeleting(binding.path)) {\n changed = true;\n }\n }\n }\n }\n }\n\n this.imports = withoutRemoved(collected.imports);\n this.exports = {};\n this.deadExports = [];\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (isRemoved(local)) {\n this.deadExports.push(exported);\n } else {\n this.exports[exported] = local;\n }\n });\n\n this.reexports = withoutRemoved(collected.reexports);\n },\n visitor: {},\n post(file: BabelFile) {\n const log = shakerLogger.extend(getFileIdx(file.opts.filename!));\n\n const processedImports = new Set<string>();\n const imports = new Map<string, string[]>();\n const addImport = ({\n imported,\n source,\n }: {\n imported: string;\n source: string;\n }) => {\n if (processedImports.has(`${source}:${imported}`)) {\n return;\n }\n\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n if (imported) {\n imports.get(source)!.push(imported);\n }\n\n processedImports.add(`${source}:${imported}`);\n };\n\n this.imports.forEach(addImport);\n this.reexports.forEach(addImport);\n\n log('end', `remaining imports: %O`, imports);\n\n // eslint-disable-next-line no-param-reassign\n (file.metadata as IMetadata).wywEvaluator = {\n imports,\n };\n\n invalidateTraversalCache(file.path);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -44,8 +44,9 @@ export function* explodeReexports() {
44
44
  const reexport = reexportsFrom.find(i => i.source === importedEntrypoint.import);
45
45
  if (reexport) {
46
46
  const exports = yield* this.getNext('getExports', importedEntrypoint.entrypoint, undefined);
47
- if (exports.length !== 0) {
48
- replacements.set(reexport.node, babel.types.exportNamedDeclaration(null, exports.map(i => babel.types.exportSpecifier(babel.types.identifier(i), babel.types.identifier(i))), babel.types.stringLiteral(importedEntrypoint.import)));
47
+ const namedExports = exports.filter(name => name !== 'default');
48
+ if (namedExports.length !== 0) {
49
+ replacements.set(reexport.node, babel.types.exportNamedDeclaration(null, namedExports.map(i => babel.types.exportSpecifier(babel.types.identifier(i), babel.types.identifier(i))), babel.types.stringLiteral(importedEntrypoint.import)));
49
50
  }
50
51
  }
51
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"explodeReexports.js","names":["generate","findExportsInImports","getWildcardReexport","babel","ast","reexportsFrom","program","body","forEach","node","types","isExportAllDeclaration","source","isStringLiteral","push","value","explodeReexports","services","log","loadedAndParsed","entrypoint","evaluator","length","resolvedImports","getNext","imports","Map","map","i","importedEntrypoints","replacements","importedEntrypoint","reexport","find","import","exports","undefined","set","exportNamedDeclaration","exportSpecifier","identifier","stringLiteral","traverse","ExportAllDeclaration","path","has","replaceWith","get","code"],"sources":["../../../src/transform/generators/explodeReexports.ts"],"sourcesContent":["import generate from '@babel/generator';\nimport type { ExportAllDeclaration, File, Node } from '@babel/types';\n\nimport type { Core } from '../../babel';\nimport type { IExplodeReexportsAction, SyncScenarioForAction } from '../types';\n\nimport { findExportsInImports } from './getExports';\n\nconst getWildcardReexport = (babel: Core, ast: File) => {\n const reexportsFrom: { node: ExportAllDeclaration; source: string }[] = [];\n ast.program.body.forEach((node) => {\n if (\n babel.types.isExportAllDeclaration(node) &&\n node.source &&\n babel.types.isStringLiteral(node.source)\n ) {\n reexportsFrom.push({\n source: node.source.value,\n node,\n });\n }\n });\n\n return reexportsFrom;\n};\n\n/**\n * Replaces wildcard reexports with named reexports.\n * Recursively emits getExports for each reexported module,\n * and replaces wildcard with resolved named.\n */\nexport function* explodeReexports(\n this: IExplodeReexportsAction\n): SyncScenarioForAction<IExplodeReexportsAction> {\n const { babel } = this.services;\n const { log, loadedAndParsed } = this.entrypoint;\n if (loadedAndParsed.evaluator === 'ignored') {\n return;\n }\n\n const reexportsFrom = getWildcardReexport(babel, loadedAndParsed.ast);\n if (!reexportsFrom.length) {\n return;\n }\n\n log('has wildcard reexport from %o', reexportsFrom);\n\n const resolvedImports = yield* this.getNext(\n 'resolveImports',\n this.entrypoint,\n {\n imports: new Map(reexportsFrom.map((i) => [i.source, []])),\n }\n );\n\n const importedEntrypoints = findExportsInImports(\n this.entrypoint,\n resolvedImports\n );\n\n const replacements = new Map<ExportAllDeclaration, Node>();\n for (const importedEntrypoint of importedEntrypoints) {\n if (importedEntrypoint.entrypoint.loadedAndParsed.evaluator !== 'ignored') {\n const reexport = reexportsFrom.find(\n (i) => i.source === importedEntrypoint.import\n );\n if (reexport) {\n const exports = yield* this.getNext(\n 'getExports',\n importedEntrypoint.entrypoint,\n undefined\n );\n\n if (exports.length !== 0) {\n replacements.set(\n reexport.node,\n babel.types.exportNamedDeclaration(\n null,\n exports.map((i) =>\n babel.types.exportSpecifier(\n babel.types.identifier(i),\n babel.types.identifier(i)\n )\n ),\n babel.types.stringLiteral(importedEntrypoint.import)\n )\n );\n }\n }\n }\n }\n\n // Replace wildcard reexport with named reexports\n babel.traverse(loadedAndParsed.ast, {\n ExportAllDeclaration(path) {\n if (!replacements.has(path.node)) return;\n path.replaceWith(replacements.get(path.node)!);\n },\n });\n\n loadedAndParsed.code = generate(loadedAndParsed.ast).code;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"explodeReexports.js","names":["generate","findExportsInImports","getWildcardReexport","babel","ast","reexportsFrom","program","body","forEach","node","types","isExportAllDeclaration","source","isStringLiteral","push","value","explodeReexports","services","log","loadedAndParsed","entrypoint","evaluator","length","resolvedImports","getNext","imports","Map","map","i","importedEntrypoints","replacements","importedEntrypoint","reexport","find","import","exports","undefined","namedExports","filter","name","set","exportNamedDeclaration","exportSpecifier","identifier","stringLiteral","traverse","ExportAllDeclaration","path","has","replaceWith","get","code"],"sources":["../../../src/transform/generators/explodeReexports.ts"],"sourcesContent":["import generate from '@babel/generator';\nimport type { ExportAllDeclaration, File, Node } from '@babel/types';\n\nimport type { Core } from '../../babel';\nimport type { IExplodeReexportsAction, SyncScenarioForAction } from '../types';\n\nimport { findExportsInImports } from './getExports';\n\nconst getWildcardReexport = (babel: Core, ast: File) => {\n const reexportsFrom: { node: ExportAllDeclaration; source: string }[] = [];\n ast.program.body.forEach((node) => {\n if (\n babel.types.isExportAllDeclaration(node) &&\n node.source &&\n babel.types.isStringLiteral(node.source)\n ) {\n reexportsFrom.push({\n source: node.source.value,\n node,\n });\n }\n });\n\n return reexportsFrom;\n};\n\n/**\n * Replaces wildcard reexports with named reexports.\n * Recursively emits getExports for each reexported module,\n * and replaces wildcard with resolved named.\n */\nexport function* explodeReexports(\n this: IExplodeReexportsAction\n): SyncScenarioForAction<IExplodeReexportsAction> {\n const { babel } = this.services;\n const { log, loadedAndParsed } = this.entrypoint;\n if (loadedAndParsed.evaluator === 'ignored') {\n return;\n }\n\n const reexportsFrom = getWildcardReexport(babel, loadedAndParsed.ast);\n if (!reexportsFrom.length) {\n return;\n }\n\n log('has wildcard reexport from %o', reexportsFrom);\n\n const resolvedImports = yield* this.getNext(\n 'resolveImports',\n this.entrypoint,\n {\n imports: new Map(reexportsFrom.map((i) => [i.source, []])),\n }\n );\n\n const importedEntrypoints = findExportsInImports(\n this.entrypoint,\n resolvedImports\n );\n\n const replacements = new Map<ExportAllDeclaration, Node>();\n for (const importedEntrypoint of importedEntrypoints) {\n if (importedEntrypoint.entrypoint.loadedAndParsed.evaluator !== 'ignored') {\n const reexport = reexportsFrom.find(\n (i) => i.source === importedEntrypoint.import\n );\n if (reexport) {\n const exports = yield* this.getNext(\n 'getExports',\n importedEntrypoint.entrypoint,\n undefined\n );\n\n const namedExports = exports.filter((name) => name !== 'default');\n if (namedExports.length !== 0) {\n replacements.set(\n reexport.node,\n babel.types.exportNamedDeclaration(\n null,\n namedExports.map((i) =>\n babel.types.exportSpecifier(\n babel.types.identifier(i),\n babel.types.identifier(i)\n )\n ),\n babel.types.stringLiteral(importedEntrypoint.import)\n )\n );\n }\n }\n }\n }\n\n // Replace wildcard reexport with named reexports\n babel.traverse(loadedAndParsed.ast, {\n ExportAllDeclaration(path) {\n if (!replacements.has(path.node)) return;\n path.replaceWith(replacements.get(path.node)!);\n },\n });\n\n loadedAndParsed.code = generate(loadedAndParsed.ast).code;\n}\n"],"mappings":"AAAA,OAAOA,QAAQ,MAAM,kBAAkB;AAMvC,SAASC,oBAAoB,QAAQ,cAAc;AAEnD,MAAMC,mBAAmB,GAAGA,CAACC,KAAW,EAAEC,GAAS,KAAK;EACtD,MAAMC,aAA+D,GAAG,EAAE;EAC1ED,GAAG,CAACE,OAAO,CAACC,IAAI,CAACC,OAAO,CAAEC,IAAI,IAAK;IACjC,IACEN,KAAK,CAACO,KAAK,CAACC,sBAAsB,CAACF,IAAI,CAAC,IACxCA,IAAI,CAACG,MAAM,IACXT,KAAK,CAACO,KAAK,CAACG,eAAe,CAACJ,IAAI,CAACG,MAAM,CAAC,EACxC;MACAP,aAAa,CAACS,IAAI,CAAC;QACjBF,MAAM,EAAEH,IAAI,CAACG,MAAM,CAACG,KAAK;QACzBN;MACF,CAAC,CAAC;IACJ;EACF,CAAC,CAAC;EAEF,OAAOJ,aAAa;AACtB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,UAAUW,gBAAgBA,CAAA,EAEiB;EAChD,MAAM;IAAEb;EAAM,CAAC,GAAG,IAAI,CAACc,QAAQ;EAC/B,MAAM;IAAEC,GAAG;IAAEC;EAAgB,CAAC,GAAG,IAAI,CAACC,UAAU;EAChD,IAAID,eAAe,CAACE,SAAS,KAAK,SAAS,EAAE;IAC3C;EACF;EAEA,MAAMhB,aAAa,GAAGH,mBAAmB,CAACC,KAAK,EAAEgB,eAAe,CAACf,GAAG,CAAC;EACrE,IAAI,CAACC,aAAa,CAACiB,MAAM,EAAE;IACzB;EACF;EAEAJ,GAAG,CAAC,+BAA+B,EAAEb,aAAa,CAAC;EAEnD,MAAMkB,eAAe,GAAG,OAAO,IAAI,CAACC,OAAO,CACzC,gBAAgB,EAChB,IAAI,CAACJ,UAAU,EACf;IACEK,OAAO,EAAE,IAAIC,GAAG,CAACrB,aAAa,CAACsB,GAAG,CAAEC,CAAC,IAAK,CAACA,CAAC,CAAChB,MAAM,EAAE,EAAE,CAAC,CAAC;EAC3D,CACF,CAAC;EAED,MAAMiB,mBAAmB,GAAG5B,oBAAoB,CAC9C,IAAI,CAACmB,UAAU,EACfG,eACF,CAAC;EAED,MAAMO,YAAY,GAAG,IAAIJ,GAAG,CAA6B,CAAC;EAC1D,KAAK,MAAMK,kBAAkB,IAAIF,mBAAmB,EAAE;IACpD,IAAIE,kBAAkB,CAACX,UAAU,CAACD,eAAe,CAACE,SAAS,KAAK,SAAS,EAAE;MACzE,MAAMW,QAAQ,GAAG3B,aAAa,CAAC4B,IAAI,CAChCL,CAAC,IAAKA,CAAC,CAAChB,MAAM,KAAKmB,kBAAkB,CAACG,MACzC,CAAC;MACD,IAAIF,QAAQ,EAAE;QACZ,MAAMG,OAAO,GAAG,OAAO,IAAI,CAACX,OAAO,CACjC,YAAY,EACZO,kBAAkB,CAACX,UAAU,EAC7BgB,SACF,CAAC;QAED,MAAMC,YAAY,GAAGF,OAAO,CAACG,MAAM,CAAEC,IAAI,IAAKA,IAAI,KAAK,SAAS,CAAC;QACjE,IAAIF,YAAY,CAACf,MAAM,KAAK,CAAC,EAAE;UAC7BQ,YAAY,CAACU,GAAG,CACdR,QAAQ,CAACvB,IAAI,EACbN,KAAK,CAACO,KAAK,CAAC+B,sBAAsB,CAChC,IAAI,EACJJ,YAAY,CAACV,GAAG,CAAEC,CAAC,IACjBzB,KAAK,CAACO,KAAK,CAACgC,eAAe,CACzBvC,KAAK,CAACO,KAAK,CAACiC,UAAU,CAACf,CAAC,CAAC,EACzBzB,KAAK,CAACO,KAAK,CAACiC,UAAU,CAACf,CAAC,CAC1B,CACF,CAAC,EACDzB,KAAK,CAACO,KAAK,CAACkC,aAAa,CAACb,kBAAkB,CAACG,MAAM,CACrD,CACF,CAAC;QACH;MACF;IACF;EACF;;EAEA;EACA/B,KAAK,CAAC0C,QAAQ,CAAC1B,eAAe,CAACf,GAAG,EAAE;IAClC0C,oBAAoBA,CAACC,IAAI,EAAE;MACzB,IAAI,CAACjB,YAAY,CAACkB,GAAG,CAACD,IAAI,CAACtC,IAAI,CAAC,EAAE;MAClCsC,IAAI,CAACE,WAAW,CAACnB,YAAY,CAACoB,GAAG,CAACH,IAAI,CAACtC,IAAI,CAAE,CAAC;IAChD;EACF,CAAC,CAAC;EAEFU,eAAe,CAACgC,IAAI,GAAGnD,QAAQ,CAACmB,eAAe,CAACf,GAAG,CAAC,CAAC+C,IAAI;AAC3D","ignoreList":[]}
package/lib/module.js CHANGED
@@ -76,6 +76,13 @@ const reactRefreshRuntime = {
76
76
  createSignatureFunctionForTransform: () => () => {}
77
77
  };
78
78
  const NOOP = () => {};
79
+ const browserOnlyEvalHintTriggers = ['window is not defined', "evaluating 'window", 'document is not defined', "evaluating 'document", 'navigator is not defined', "evaluating 'navigator", 'self is not defined', "evaluating 'self"];
80
+ const getBrowserOnlyEvalHint = error => {
81
+ const message = error instanceof Error ? error.message : String(error);
82
+ const looksLikeBrowserOnly = browserOnlyEvalHintTriggers.some(trigger => message.includes(trigger));
83
+ if (!looksLikeBrowserOnly) return null;
84
+ return ['', '[wyw-in-js] Evaluation hint:', 'This usually means browser-only code ran during build-time evaluation.', 'Move browser-only initialization out of evaluated modules, or mock the import via `importOverrides`.', "Example: importOverrides: { 'msw/browser': { mock: './src/__mocks__/msw-browser.js' } }"].join('\n');
85
+ };
79
86
  const warnedUnknownImportsByServices = new WeakMap();
80
87
  function emitWarning(services, message) {
81
88
  if (services.emitWarning) {
@@ -265,7 +272,9 @@ class Module {
265
272
  throw e;
266
273
  }
267
274
  this.debug('%O\n%O', e, this.callstack);
268
- throw new EvalError(`${e.message} in${this.callstack.join('\n| ')}\n`);
275
+ const baseMessage = `${e.message} in${this.callstack.join('\n| ')}\n`;
276
+ const hint = getBrowserOnlyEvalHint(e);
277
+ throw new EvalError(hint ? `${baseMessage}${hint}\n` : baseMessage);
269
278
  } finally {
270
279
  teardown();
271
280
  }
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","warnedUnknownImportsByServices","WeakMap","emitWarning","services","message","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","Error","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","String","__dirname","dirname","overrideContext","script","Script","runInContext","isUnprocessedEntrypointError","EvalError","join","_entrypoint$evaluated","strippedFilename","extension","extname","includes","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 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 throw new EvalError(\n `${(e as Error).message} in${this.callstack.join('\\n| ')}\\n`\n );\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","_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":[]}
@@ -44,7 +44,14 @@ function getBindingForExport(exportPath) {
44
44
  }
45
45
  }
46
46
  if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {
47
- return getNonParamBinding(exportPath, exportPath.node.id.name);
47
+ const {
48
+ id
49
+ } = exportPath.node;
50
+ if (!id) {
51
+ // `export default function() {}` / `export default class {}` (anonymous)
52
+ return undefined;
53
+ }
54
+ return getNonParamBinding(exportPath, id.name);
48
55
  }
49
56
  return undefined;
50
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shaker.js","names":["_path","_interopRequireDefault","require","_shared","_collectExportsAndImports","_getFileIdx","_isRemoved","_scopeHelpers","_traversalCache","_parseRequest","_importOverrides","e","__esModule","default","getNonParamBinding","exportPath","name","_exportPath$scope$par","_exportPath$scope$par2","binding","scope","getBinding","kind","parent","getBindingForExport","isIdentifier","node","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","withoutRemoved","items","filter","local","isRemoved","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","_constantViolations","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","constantViolations","ref","replaced","replaceWith","isBindingIdentifier","push","reference","registerConstantViolation","assigmentToExport","expressionStatement","assignmentExpression","memberExpression","body","lastViolation","pathInRoot","find","n","isDescendant","pushed","insertAfter","getPropertyAssignmentStatement","bindingName","assignment","isMemberExpression","object","statement","parentPath","isExpressionStatement","isWithinAliveExport","aliveExports","some","alive","isAncestor","stripExportKeepDeclaration","path","exportDeclaration","isExportNamedDeclaration","isTSEnumDeclaration","isVariableDeclaration","declarators","shakerPlugin","babel","keepSideEffects","ifUnknownExport","importOverrides","onlyExports","shakerLogger","logger","extend","pre","file","filename","opts","log","getFileIdx","join","onlyExportsSet","Set","shouldKeepOverride","override","hasImportOverride","Object","keys","cache","Map","source","_importOverrides$sour","cached","strippedSource","stripQueryAndHash","direct","result","set","isFileImport","startsWith","pathLib","isAbsolute","resolved","syncResolve","key","toImportKey","collected","collectExportsAndImports","sideEffectImports","imports","sideEffectImport","values","reexports","hasWywPreval","__wywPreval","hasDefault","has","delete","size","deadExports","remove","importedAsSideEffect","isEsModule","add","importNames","map","imported","entries","exported","isImportSpecifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","includes","exp","exportToPath","notFoundExports","clear","isAllExportsFound","Error","forDeleting","i","forDeletingSet","queueForDeleting","deleted","dereferenced","changed","action","findActionForNode","outerReferences","referencePaths","candidate","removableAssignmentStatements","removableOuterReferences","blockingReferences","dereference","applyAction","removeWithRelated","unreferenced","getAllBindings","referenced","violation","visitor","post","processedImports","addImport","metadata","wywEvaluator","invalidateTraversalCache"],"sources":["../../src/plugins/shaker.ts"],"sourcesContent":["import pathLib from 'path';\n\nimport type { BabelFile, PluginObj, NodePath } from '@babel/core';\nimport type { Binding } from '@babel/traverse';\nimport type {\n ExportNamedDeclaration,\n Identifier,\n MemberExpression,\n Program,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger, syncResolve } from '@wyw-in-js/shared';\nimport type { ImportOverride, ImportOverrides } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IMetadata } from '../utils/ShakerMetadata';\nimport type { Exports, IState } from '../utils/collectExportsAndImports';\nimport {\n collectExportsAndImports,\n sideEffectImport,\n} from '../utils/collectExportsAndImports';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { isRemoved } from '../utils/isRemoved';\nimport {\n applyAction,\n dereference,\n findActionForNode,\n reference,\n removeWithRelated,\n} from '../utils/scopeHelpers';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\nimport { stripQueryAndHash } from '../utils/parseRequest';\nimport { toImportKey } from '../utils/importOverrides';\n\nexport interface IShakerOptions {\n ifUnknownExport?: 'error' | 'ignore' | 'reexport-all' | 'skip-shaking';\n importOverrides?: ImportOverrides;\n keepSideEffects?: boolean;\n onlyExports: string[];\n root?: string;\n}\n\ninterface NodeWithName {\n name: string;\n}\n\nfunction getNonParamBinding(\n exportPath: NodePath,\n name: string\n): Binding | undefined {\n const binding = exportPath.scope.getBinding(name);\n if (binding && (binding.kind as string) !== 'param') {\n return binding;\n }\n\n // When `exportPath` is inside a function scope, a parameter can shadow\n // the actual export binding (e.g. `export function fallback(fallback) {}`).\n // In such cases we need the binding from the declaration scope.\n return exportPath.scope.parent?.getBinding(name) ?? binding;\n}\n\nfunction getBindingForExport(exportPath: NodePath): Binding | undefined {\n if (exportPath.isIdentifier()) {\n return getNonParamBinding(exportPath, exportPath.node.name);\n }\n\n const variableDeclarator = exportPath.findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n if (variableDeclarator) {\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n return variableDeclarator.scope.getBinding(id.node.name);\n }\n }\n\n if (exportPath.isAssignmentExpression()) {\n const left = exportPath.get('left');\n if (left.isIdentifier()) {\n return getNonParamBinding(exportPath, left.node.name);\n }\n }\n\n if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {\n return getNonParamBinding(exportPath, exportPath.node.id!.name);\n }\n\n return undefined;\n}\n\nconst withoutRemoved = <T extends { local: NodePath }>(items: T[]): T[] =>\n items.filter(({ local }) => !isRemoved(local));\n\nfunction rearrangeExports(\n { types: t }: Core,\n root: NodePath<Program>,\n exportRefs: Map<string, NodePath<MemberExpression>[]>,\n exports: Exports\n): Exports {\n const rearranged = {\n ...exports,\n };\n\n const rootScope = root.scope;\n exportRefs.forEach((refs, name) => {\n if (refs.length <= 1) {\n if (refs.length === 1) {\n // Maybe exports is assigned to another variable?\n const declarator = refs[0].findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n\n if (!declarator) {\n return;\n }\n } else {\n return;\n }\n }\n\n const uid = rootScope.generateUid(name);\n // Define variable in the beginning\n const [declaration] = root.unshiftContainer('body', [\n t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),\n ]);\n\n rootScope.registerDeclaration(declaration);\n\n const constantViolations: NodePath<Identifier>[] = [];\n // Replace every reference with defined variable\n refs.forEach((ref) => {\n const [replaced] = ref.replaceWith(t.identifier(uid));\n if (replaced.isBindingIdentifier()) {\n constantViolations.push(replaced);\n } else {\n reference(replaced);\n }\n });\n\n constantViolations.forEach((id) => {\n rootScope.registerConstantViolation(id);\n });\n\n const assigmentToExport = t.expressionStatement(\n t.assignmentExpression(\n '=',\n t.memberExpression(t.identifier('exports'), t.identifier(name)),\n t.identifier(uid)\n )\n );\n\n // export.foo = _foo will be inserted either after the last _foo assigment or in the end of the file\n const body = root.get('body');\n const lastViolation =\n constantViolations[constantViolations.length - 1] ??\n body[body.length - 1];\n const pathInRoot = root\n .get('body')\n .find((n) => lastViolation.isDescendant(n))!;\n\n const [pushed] = pathInRoot.insertAfter(assigmentToExport);\n\n const local = pushed.get('expression.right') as NodePath<Identifier>;\n reference(local);\n\n rearranged[name] = local;\n });\n\n return rearranged;\n}\n\nconst getPropertyAssignmentStatement = (\n ref: NodePath,\n bindingName: string\n): NodePath | null => {\n const assignment = ref.findParent((parent) =>\n parent.isAssignmentExpression()\n );\n if (!assignment?.isAssignmentExpression()) return null;\n\n const left = assignment.get('left');\n if (!left.isMemberExpression()) return null;\n\n const object = left.get('object');\n if (!object.isIdentifier({ name: bindingName })) return null;\n\n const statement = assignment.parentPath;\n return statement?.isExpressionStatement() ? statement : null;\n};\n\nconst isWithinAliveExport = (\n ref: NodePath,\n aliveExports: Set<NodePath>\n): boolean =>\n [...aliveExports].some((alive) => alive === ref || alive.isAncestor(ref));\n\nfunction stripExportKeepDeclaration(path: NodePath): boolean {\n const exportDeclaration = path.findParent((p) =>\n p.isExportNamedDeclaration()\n ) as NodePath<ExportNamedDeclaration> | null;\n if (!exportDeclaration) return false;\n\n const declaration = exportDeclaration.get('declaration');\n if (!declaration.node) return false;\n\n if (\n declaration.isFunctionDeclaration() ||\n declaration.isClassDeclaration() ||\n declaration.isTSEnumDeclaration()\n ) {\n exportDeclaration.replaceWith(declaration.node);\n return true;\n }\n\n if (declaration.isVariableDeclaration()) {\n const declarators = declaration.get('declarations');\n if (declarators.length !== 1) {\n return false;\n }\n\n exportDeclaration.replaceWith(declaration.node);\n return true;\n }\n\n return false;\n}\n\nexport default function shakerPlugin(\n babel: Core,\n {\n keepSideEffects = false,\n ifUnknownExport = 'skip-shaking',\n importOverrides,\n onlyExports,\n root,\n }: IShakerOptions\n): PluginObj<IState & { filename: string }> {\n const shakerLogger = logger.extend('shaker');\n\n return {\n name: '@wyw-in-js/transform/shaker',\n pre(file: BabelFile) {\n this.filename = file.opts.filename!;\n const log = shakerLogger.extend(getFileIdx(this.filename));\n\n log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);\n const onlyExportsSet = new Set(onlyExports);\n\n const shouldKeepOverride = (\n override: ImportOverride | undefined\n ): boolean => !!override && ('mock' in override || 'noShake' in override);\n\n const hasImportOverride = (() => {\n if (!importOverrides || Object.keys(importOverrides).length === 0) {\n return () => false;\n }\n\n const cache = new Map<string, boolean>();\n\n return (source: string): boolean => {\n const cached = cache.get(source);\n if (cached !== undefined) {\n return cached;\n }\n\n const strippedSource = stripQueryAndHash(source);\n\n const direct =\n importOverrides[source] ??\n (strippedSource !== source\n ? importOverrides[strippedSource]\n : null);\n if (direct) {\n const result = shouldKeepOverride(direct);\n cache.set(source, result);\n return result;\n }\n\n const isFileImport =\n strippedSource.startsWith('.') ||\n pathLib.isAbsolute(strippedSource);\n if (!isFileImport) {\n cache.set(source, false);\n return false;\n }\n\n try {\n const resolved = syncResolve(strippedSource, this.filename, []);\n const { key } = toImportKey({\n source: strippedSource,\n resolved,\n root,\n });\n const override = importOverrides[key];\n const result = shouldKeepOverride(override);\n cache.set(source, result);\n return result;\n } catch {\n cache.set(source, false);\n return false;\n }\n };\n })();\n\n const collected = collectExportsAndImports(file.path);\n const sideEffectImports = collected.imports.filter(sideEffectImport);\n log(\n 'import-and-exports',\n [\n `imports: ${collected.imports.length} (side-effects: ${sideEffectImports.length})`,\n `exports: ${Object.values(collected.exports).length}`,\n `reexports: ${collected.reexports.length}`,\n ].join(', ')\n );\n\n // We cannot just throw out exports if they are referred in the code\n // Let's dome some replacements\n const exports = rearrangeExports(\n babel,\n file.path,\n collected.exportRefs,\n collected.exports\n );\n\n Object.values(exports).forEach((local) => {\n if (local.isAssignmentExpression()) {\n const left = local.get('left');\n if (left.isIdentifier()) {\n // For some reason babel does not mark id in AssignmentExpression as a reference\n // So we need to do it manually\n reference(left, left, true);\n }\n }\n });\n\n const hasWywPreval = exports.__wywPreval !== undefined;\n const hasDefault = exports.default !== undefined;\n\n // If __wywPreval is not exported, we can remove it from onlyExports\n if (onlyExportsSet.has('__wywPreval') && !hasWywPreval) {\n onlyExportsSet.delete('__wywPreval');\n }\n\n if (onlyExportsSet.size === 0) {\n // Fast-lane: if there are no exports to keep, we can just shake out the whole file\n this.imports = [];\n this.exports = {};\n this.reexports = [];\n this.deadExports = Object.keys(exports);\n\n file.path.get('body').forEach((p) => {\n p.remove();\n });\n\n return;\n }\n\n const importedAsSideEffect = onlyExportsSet.has('side-effect');\n onlyExportsSet.delete('side-effect');\n\n // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be\n // shaken as they will break interopRequireDefault babel helper\n // See example in shaker-plugin.test.ts\n // Real-world example was found in preact/compat npm package\n if (\n onlyExportsSet.has('default') &&\n hasDefault &&\n !collected.isEsModule\n ) {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n return;\n }\n\n if (!onlyExportsSet.has('*')) {\n // __esModule should be kept alive\n onlyExportsSet.add('__esModule');\n\n const aliveExports = new Set<NodePath>();\n const importNames = collected.imports.map(({ imported }) => imported);\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (onlyExportsSet.has(exported)) {\n aliveExports.add(local);\n return;\n }\n\n const binding =\n local.isIdentifier() && local.scope.getBinding(local.node.name);\n\n if (\n binding &&\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n importNames.includes((local.node as NodeWithName).name || '')\n ) {\n aliveExports.add(local);\n return;\n }\n\n if ([...aliveExports].some((alive) => alive === local)) {\n // It's possible to export multiple values from a single variable initializer, e.g\n // export const { foo, bar } = baz();\n // We need to treat all of them as used if any of them are used, since otherwise\n // we'll attempt to delete the baz() call\n aliveExports.add(local);\n }\n });\n\n collected.reexports.forEach((exp) => {\n if (onlyExportsSet.has(exp.exported)) {\n aliveExports.add(exp.local);\n }\n });\n\n const exportToPath = new Map<string, NodePath>();\n Object.entries(exports).forEach(([exported, local]) => {\n exportToPath.set(exported, local);\n });\n\n collected.reexports.forEach((exp) => {\n exportToPath.set(exp.exported, exp.local);\n });\n\n const notFoundExports = [...onlyExportsSet].filter(\n (exp) =>\n exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)!)\n );\n exportToPath.clear();\n\n const isAllExportsFound = notFoundExports.length === 0;\n if (!isAllExportsFound && ifUnknownExport !== 'ignore') {\n if (ifUnknownExport === 'error') {\n throw new Error(\n `Unknown export(s) requested: ${onlyExports.join(',')}`\n );\n }\n\n if (ifUnknownExport === 'reexport-all') {\n // If there are unknown exports, we have keep alive all re-exports.\n if (exports['*'] !== undefined) {\n aliveExports.add(exports['*']);\n }\n\n collected.reexports.forEach((exp) => {\n if (exp.exported === '*') {\n aliveExports.add(exp.local);\n }\n });\n }\n\n if (ifUnknownExport === 'skip-shaking') {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n\n return;\n }\n }\n\n const forDeleting = [\n ...Object.values(exports),\n ...collected.reexports.map((i) => i.local),\n ].filter((exp) => !aliveExports.has(exp));\n\n const forDeletingSet = new Set<NodePath>(forDeleting);\n const queueForDeleting = (path: NodePath): boolean => {\n if (isRemoved(path) || forDeletingSet.has(path)) {\n return false;\n }\n\n forDeletingSet.add(path);\n forDeleting.push(path);\n return true;\n };\n\n if (!keepSideEffects && !importedAsSideEffect) {\n // Drop side-effect imports for eval-only builds unless they were explicitly requested.\n // This prevents evaluating unrelated runtime code (e.g. Radix) during __wywPreval eval.\n sideEffectImports.forEach((i) => {\n if (hasImportOverride(i.source)) {\n return;\n }\n\n queueForDeleting(i.local);\n });\n }\n\n const deleted = new Set<NodePath>();\n\n let dereferenced: NodePath<Identifier>[] = [];\n let changed = true;\n while (changed) {\n changed = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const path of forDeleting) {\n if (deleted.has(path)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const binding = getBindingForExport(path);\n const action = findActionForNode(path);\n const parent = action?.[1];\n const outerReferences = (binding?.referencePaths || []).filter(\n (ref) => {\n if (ref === parent || parent?.isAncestor(ref)) {\n return false;\n }\n\n return !forDeleting.some(\n (candidate) =>\n candidate !== path &&\n !isRemoved(candidate) &&\n (candidate === ref || candidate.isAncestor(ref))\n );\n }\n );\n const bindingName = binding?.identifier.name;\n const removableAssignmentStatements = new Set<NodePath>();\n const removableOuterReferences = outerReferences.filter((ref) => {\n if (!bindingName) return false;\n const statement = getPropertyAssignmentStatement(\n ref,\n bindingName\n );\n if (!statement || isWithinAliveExport(statement, aliveExports)) {\n return false;\n }\n\n removableAssignmentStatements.add(statement);\n return true;\n });\n\n const blockingReferences = outerReferences.filter(\n (ref) => !removableOuterReferences.includes(ref)\n );\n\n if (blockingReferences.length > 0 && path.isIdentifier()) {\n // Temporary deref it in order to simplify further checks.\n dereference(path);\n dereferenced.push(path);\n }\n\n if (\n !deleted.has(path) &&\n binding &&\n blockingReferences.length > 0 &&\n stripExportKeepDeclaration(path)\n ) {\n deleted.add(path);\n changed = true;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (\n !deleted.has(path) &&\n (!binding || blockingReferences.length === 0)\n ) {\n if (removableAssignmentStatements.size > 0) {\n for (const statement of removableAssignmentStatements) {\n if (queueForDeleting(statement)) {\n changed = true;\n }\n }\n }\n\n if (action) {\n applyAction(action);\n } else {\n removeWithRelated([path]);\n }\n\n deleted.add(path);\n changed = true;\n }\n }\n\n dereferenced.forEach((path) => {\n // If path is still alive, we need to reference it back\n if (!isRemoved(path)) {\n reference(path);\n }\n });\n\n dereferenced = [];\n\n // Find and mark for deleting all unreferenced variables\n const unreferenced = Object.values(\n file.scope.getAllBindings()\n ).filter((i) => !i.referenced);\n\n for (const binding of unreferenced) {\n if (binding.path.isVariableDeclarator()) {\n const id = binding.path.get('id');\n if (!isRemoved(id) && !forDeletingSet.has(id)) {\n // Drop dead variable declarations, e.g. `const foo = make();` when `foo` is no longer referenced.\n for (const violation of binding.constantViolations) {\n if (queueForDeleting(violation)) {\n changed = true;\n }\n }\n\n if (queueForDeleting(id)) {\n changed = true;\n }\n }\n }\n\n // Drop import specifiers whose bindings lost all references during shaking\n // (e.g. when we keep only __wywPreval and the rest of the module is removed).\n if (\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n !isRemoved(binding.path) &&\n !forDeletingSet.has(binding.path)\n ) {\n if (queueForDeleting(binding.path)) {\n changed = true;\n }\n }\n }\n }\n }\n\n this.imports = withoutRemoved(collected.imports);\n this.exports = {};\n this.deadExports = [];\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (isRemoved(local)) {\n this.deadExports.push(exported);\n } else {\n this.exports[exported] = local;\n }\n });\n\n this.reexports = withoutRemoved(collected.reexports);\n },\n visitor: {},\n post(file: BabelFile) {\n const log = shakerLogger.extend(getFileIdx(file.opts.filename!));\n\n const processedImports = new Set<string>();\n const imports = new Map<string, string[]>();\n const addImport = ({\n imported,\n source,\n }: {\n imported: string;\n source: string;\n }) => {\n if (processedImports.has(`${source}:${imported}`)) {\n return;\n }\n\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n if (imported) {\n imports.get(source)!.push(imported);\n }\n\n processedImports.add(`${source}:${imported}`);\n };\n\n this.imports.forEach(addImport);\n this.reexports.forEach(addImport);\n\n log('end', `remaining imports: %O`, imports);\n\n // eslint-disable-next-line no-param-reassign\n (file.metadata as IMetadata).wywEvaluator = {\n imports,\n };\n\n invalidateTraversalCache(file.path);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"shaker.js","names":["_path","_interopRequireDefault","require","_shared","_collectExportsAndImports","_getFileIdx","_isRemoved","_scopeHelpers","_traversalCache","_parseRequest","_importOverrides","e","__esModule","default","getNonParamBinding","exportPath","name","_exportPath$scope$par","_exportPath$scope$par2","binding","scope","getBinding","kind","parent","getBindingForExport","isIdentifier","node","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","withoutRemoved","items","filter","local","isRemoved","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","_constantViolations","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","constantViolations","ref","replaced","replaceWith","isBindingIdentifier","push","reference","registerConstantViolation","assigmentToExport","expressionStatement","assignmentExpression","memberExpression","body","lastViolation","pathInRoot","find","n","isDescendant","pushed","insertAfter","getPropertyAssignmentStatement","bindingName","assignment","isMemberExpression","object","statement","parentPath","isExpressionStatement","isWithinAliveExport","aliveExports","some","alive","isAncestor","stripExportKeepDeclaration","path","exportDeclaration","isExportNamedDeclaration","isTSEnumDeclaration","isVariableDeclaration","declarators","shakerPlugin","babel","keepSideEffects","ifUnknownExport","importOverrides","onlyExports","shakerLogger","logger","extend","pre","file","filename","opts","log","getFileIdx","join","onlyExportsSet","Set","shouldKeepOverride","override","hasImportOverride","Object","keys","cache","Map","source","_importOverrides$sour","cached","strippedSource","stripQueryAndHash","direct","result","set","isFileImport","startsWith","pathLib","isAbsolute","resolved","syncResolve","key","toImportKey","collected","collectExportsAndImports","sideEffectImports","imports","sideEffectImport","values","reexports","hasWywPreval","__wywPreval","hasDefault","has","delete","size","deadExports","remove","importedAsSideEffect","isEsModule","add","importNames","map","imported","entries","exported","isImportSpecifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","includes","exp","exportToPath","notFoundExports","clear","isAllExportsFound","Error","forDeleting","i","forDeletingSet","queueForDeleting","deleted","dereferenced","changed","action","findActionForNode","outerReferences","referencePaths","candidate","removableAssignmentStatements","removableOuterReferences","blockingReferences","dereference","applyAction","removeWithRelated","unreferenced","getAllBindings","referenced","violation","visitor","post","processedImports","addImport","metadata","wywEvaluator","invalidateTraversalCache"],"sources":["../../src/plugins/shaker.ts"],"sourcesContent":["import pathLib from 'path';\n\nimport type { BabelFile, PluginObj, NodePath } from '@babel/core';\nimport type { Binding } from '@babel/traverse';\nimport type {\n ExportNamedDeclaration,\n Identifier,\n MemberExpression,\n Program,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger, syncResolve } from '@wyw-in-js/shared';\nimport type { ImportOverride, ImportOverrides } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IMetadata } from '../utils/ShakerMetadata';\nimport type { Exports, IState } from '../utils/collectExportsAndImports';\nimport {\n collectExportsAndImports,\n sideEffectImport,\n} from '../utils/collectExportsAndImports';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { isRemoved } from '../utils/isRemoved';\nimport {\n applyAction,\n dereference,\n findActionForNode,\n reference,\n removeWithRelated,\n} from '../utils/scopeHelpers';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\nimport { stripQueryAndHash } from '../utils/parseRequest';\nimport { toImportKey } from '../utils/importOverrides';\n\nexport interface IShakerOptions {\n ifUnknownExport?: 'error' | 'ignore' | 'reexport-all' | 'skip-shaking';\n importOverrides?: ImportOverrides;\n keepSideEffects?: boolean;\n onlyExports: string[];\n root?: string;\n}\n\ninterface NodeWithName {\n name: string;\n}\n\nfunction getNonParamBinding(\n exportPath: NodePath,\n name: string\n): Binding | undefined {\n const binding = exportPath.scope.getBinding(name);\n if (binding && (binding.kind as string) !== 'param') {\n return binding;\n }\n\n // When `exportPath` is inside a function scope, a parameter can shadow\n // the actual export binding (e.g. `export function fallback(fallback) {}`).\n // In such cases we need the binding from the declaration scope.\n return exportPath.scope.parent?.getBinding(name) ?? binding;\n}\n\nfunction getBindingForExport(exportPath: NodePath): Binding | undefined {\n if (exportPath.isIdentifier()) {\n return getNonParamBinding(exportPath, exportPath.node.name);\n }\n\n const variableDeclarator = exportPath.findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n if (variableDeclarator) {\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n return variableDeclarator.scope.getBinding(id.node.name);\n }\n }\n\n if (exportPath.isAssignmentExpression()) {\n const left = exportPath.get('left');\n if (left.isIdentifier()) {\n return getNonParamBinding(exportPath, left.node.name);\n }\n }\n\n if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {\n const { id } = exportPath.node;\n if (!id) {\n // `export default function() {}` / `export default class {}` (anonymous)\n return undefined;\n }\n return getNonParamBinding(exportPath, id.name);\n }\n\n return undefined;\n}\n\nconst withoutRemoved = <T extends { local: NodePath }>(items: T[]): T[] =>\n items.filter(({ local }) => !isRemoved(local));\n\nfunction rearrangeExports(\n { types: t }: Core,\n root: NodePath<Program>,\n exportRefs: Map<string, NodePath<MemberExpression>[]>,\n exports: Exports\n): Exports {\n const rearranged = {\n ...exports,\n };\n\n const rootScope = root.scope;\n exportRefs.forEach((refs, name) => {\n if (refs.length <= 1) {\n if (refs.length === 1) {\n // Maybe exports is assigned to another variable?\n const declarator = refs[0].findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n\n if (!declarator) {\n return;\n }\n } else {\n return;\n }\n }\n\n const uid = rootScope.generateUid(name);\n // Define variable in the beginning\n const [declaration] = root.unshiftContainer('body', [\n t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),\n ]);\n\n rootScope.registerDeclaration(declaration);\n\n const constantViolations: NodePath<Identifier>[] = [];\n // Replace every reference with defined variable\n refs.forEach((ref) => {\n const [replaced] = ref.replaceWith(t.identifier(uid));\n if (replaced.isBindingIdentifier()) {\n constantViolations.push(replaced);\n } else {\n reference(replaced);\n }\n });\n\n constantViolations.forEach((id) => {\n rootScope.registerConstantViolation(id);\n });\n\n const assigmentToExport = t.expressionStatement(\n t.assignmentExpression(\n '=',\n t.memberExpression(t.identifier('exports'), t.identifier(name)),\n t.identifier(uid)\n )\n );\n\n // export.foo = _foo will be inserted either after the last _foo assigment or in the end of the file\n const body = root.get('body');\n const lastViolation =\n constantViolations[constantViolations.length - 1] ??\n body[body.length - 1];\n const pathInRoot = root\n .get('body')\n .find((n) => lastViolation.isDescendant(n))!;\n\n const [pushed] = pathInRoot.insertAfter(assigmentToExport);\n\n const local = pushed.get('expression.right') as NodePath<Identifier>;\n reference(local);\n\n rearranged[name] = local;\n });\n\n return rearranged;\n}\n\nconst getPropertyAssignmentStatement = (\n ref: NodePath,\n bindingName: string\n): NodePath | null => {\n const assignment = ref.findParent((parent) =>\n parent.isAssignmentExpression()\n );\n if (!assignment?.isAssignmentExpression()) return null;\n\n const left = assignment.get('left');\n if (!left.isMemberExpression()) return null;\n\n const object = left.get('object');\n if (!object.isIdentifier({ name: bindingName })) return null;\n\n const statement = assignment.parentPath;\n return statement?.isExpressionStatement() ? statement : null;\n};\n\nconst isWithinAliveExport = (\n ref: NodePath,\n aliveExports: Set<NodePath>\n): boolean =>\n [...aliveExports].some((alive) => alive === ref || alive.isAncestor(ref));\n\nfunction stripExportKeepDeclaration(path: NodePath): boolean {\n const exportDeclaration = path.findParent((p) =>\n p.isExportNamedDeclaration()\n ) as NodePath<ExportNamedDeclaration> | null;\n if (!exportDeclaration) return false;\n\n const declaration = exportDeclaration.get('declaration');\n if (!declaration.node) return false;\n\n if (\n declaration.isFunctionDeclaration() ||\n declaration.isClassDeclaration() ||\n declaration.isTSEnumDeclaration()\n ) {\n exportDeclaration.replaceWith(declaration.node);\n return true;\n }\n\n if (declaration.isVariableDeclaration()) {\n const declarators = declaration.get('declarations');\n if (declarators.length !== 1) {\n return false;\n }\n\n exportDeclaration.replaceWith(declaration.node);\n return true;\n }\n\n return false;\n}\n\nexport default function shakerPlugin(\n babel: Core,\n {\n keepSideEffects = false,\n ifUnknownExport = 'skip-shaking',\n importOverrides,\n onlyExports,\n root,\n }: IShakerOptions\n): PluginObj<IState & { filename: string }> {\n const shakerLogger = logger.extend('shaker');\n\n return {\n name: '@wyw-in-js/transform/shaker',\n pre(file: BabelFile) {\n this.filename = file.opts.filename!;\n const log = shakerLogger.extend(getFileIdx(this.filename));\n\n log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);\n const onlyExportsSet = new Set(onlyExports);\n\n const shouldKeepOverride = (\n override: ImportOverride | undefined\n ): boolean => !!override && ('mock' in override || 'noShake' in override);\n\n const hasImportOverride = (() => {\n if (!importOverrides || Object.keys(importOverrides).length === 0) {\n return () => false;\n }\n\n const cache = new Map<string, boolean>();\n\n return (source: string): boolean => {\n const cached = cache.get(source);\n if (cached !== undefined) {\n return cached;\n }\n\n const strippedSource = stripQueryAndHash(source);\n\n const direct =\n importOverrides[source] ??\n (strippedSource !== source\n ? importOverrides[strippedSource]\n : null);\n if (direct) {\n const result = shouldKeepOverride(direct);\n cache.set(source, result);\n return result;\n }\n\n const isFileImport =\n strippedSource.startsWith('.') ||\n pathLib.isAbsolute(strippedSource);\n if (!isFileImport) {\n cache.set(source, false);\n return false;\n }\n\n try {\n const resolved = syncResolve(strippedSource, this.filename, []);\n const { key } = toImportKey({\n source: strippedSource,\n resolved,\n root,\n });\n const override = importOverrides[key];\n const result = shouldKeepOverride(override);\n cache.set(source, result);\n return result;\n } catch {\n cache.set(source, false);\n return false;\n }\n };\n })();\n\n const collected = collectExportsAndImports(file.path);\n const sideEffectImports = collected.imports.filter(sideEffectImport);\n log(\n 'import-and-exports',\n [\n `imports: ${collected.imports.length} (side-effects: ${sideEffectImports.length})`,\n `exports: ${Object.values(collected.exports).length}`,\n `reexports: ${collected.reexports.length}`,\n ].join(', ')\n );\n\n // We cannot just throw out exports if they are referred in the code\n // Let's dome some replacements\n const exports = rearrangeExports(\n babel,\n file.path,\n collected.exportRefs,\n collected.exports\n );\n\n Object.values(exports).forEach((local) => {\n if (local.isAssignmentExpression()) {\n const left = local.get('left');\n if (left.isIdentifier()) {\n // For some reason babel does not mark id in AssignmentExpression as a reference\n // So we need to do it manually\n reference(left, left, true);\n }\n }\n });\n\n const hasWywPreval = exports.__wywPreval !== undefined;\n const hasDefault = exports.default !== undefined;\n\n // If __wywPreval is not exported, we can remove it from onlyExports\n if (onlyExportsSet.has('__wywPreval') && !hasWywPreval) {\n onlyExportsSet.delete('__wywPreval');\n }\n\n if (onlyExportsSet.size === 0) {\n // Fast-lane: if there are no exports to keep, we can just shake out the whole file\n this.imports = [];\n this.exports = {};\n this.reexports = [];\n this.deadExports = Object.keys(exports);\n\n file.path.get('body').forEach((p) => {\n p.remove();\n });\n\n return;\n }\n\n const importedAsSideEffect = onlyExportsSet.has('side-effect');\n onlyExportsSet.delete('side-effect');\n\n // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be\n // shaken as they will break interopRequireDefault babel helper\n // See example in shaker-plugin.test.ts\n // Real-world example was found in preact/compat npm package\n if (\n onlyExportsSet.has('default') &&\n hasDefault &&\n !collected.isEsModule\n ) {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n return;\n }\n\n if (!onlyExportsSet.has('*')) {\n // __esModule should be kept alive\n onlyExportsSet.add('__esModule');\n\n const aliveExports = new Set<NodePath>();\n const importNames = collected.imports.map(({ imported }) => imported);\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (onlyExportsSet.has(exported)) {\n aliveExports.add(local);\n return;\n }\n\n const binding =\n local.isIdentifier() && local.scope.getBinding(local.node.name);\n\n if (\n binding &&\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n importNames.includes((local.node as NodeWithName).name || '')\n ) {\n aliveExports.add(local);\n return;\n }\n\n if ([...aliveExports].some((alive) => alive === local)) {\n // It's possible to export multiple values from a single variable initializer, e.g\n // export const { foo, bar } = baz();\n // We need to treat all of them as used if any of them are used, since otherwise\n // we'll attempt to delete the baz() call\n aliveExports.add(local);\n }\n });\n\n collected.reexports.forEach((exp) => {\n if (onlyExportsSet.has(exp.exported)) {\n aliveExports.add(exp.local);\n }\n });\n\n const exportToPath = new Map<string, NodePath>();\n Object.entries(exports).forEach(([exported, local]) => {\n exportToPath.set(exported, local);\n });\n\n collected.reexports.forEach((exp) => {\n exportToPath.set(exp.exported, exp.local);\n });\n\n const notFoundExports = [...onlyExportsSet].filter(\n (exp) =>\n exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)!)\n );\n exportToPath.clear();\n\n const isAllExportsFound = notFoundExports.length === 0;\n if (!isAllExportsFound && ifUnknownExport !== 'ignore') {\n if (ifUnknownExport === 'error') {\n throw new Error(\n `Unknown export(s) requested: ${onlyExports.join(',')}`\n );\n }\n\n if (ifUnknownExport === 'reexport-all') {\n // If there are unknown exports, we have keep alive all re-exports.\n if (exports['*'] !== undefined) {\n aliveExports.add(exports['*']);\n }\n\n collected.reexports.forEach((exp) => {\n if (exp.exported === '*') {\n aliveExports.add(exp.local);\n }\n });\n }\n\n if (ifUnknownExport === 'skip-shaking') {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n\n return;\n }\n }\n\n const forDeleting = [\n ...Object.values(exports),\n ...collected.reexports.map((i) => i.local),\n ].filter((exp) => !aliveExports.has(exp));\n\n const forDeletingSet = new Set<NodePath>(forDeleting);\n const queueForDeleting = (path: NodePath): boolean => {\n if (isRemoved(path) || forDeletingSet.has(path)) {\n return false;\n }\n\n forDeletingSet.add(path);\n forDeleting.push(path);\n return true;\n };\n\n if (!keepSideEffects && !importedAsSideEffect) {\n // Drop side-effect imports for eval-only builds unless they were explicitly requested.\n // This prevents evaluating unrelated runtime code (e.g. Radix) during __wywPreval eval.\n sideEffectImports.forEach((i) => {\n if (hasImportOverride(i.source)) {\n return;\n }\n\n queueForDeleting(i.local);\n });\n }\n\n const deleted = new Set<NodePath>();\n\n let dereferenced: NodePath<Identifier>[] = [];\n let changed = true;\n while (changed) {\n changed = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const path of forDeleting) {\n if (deleted.has(path)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const binding = getBindingForExport(path);\n const action = findActionForNode(path);\n const parent = action?.[1];\n const outerReferences = (binding?.referencePaths || []).filter(\n (ref) => {\n if (ref === parent || parent?.isAncestor(ref)) {\n return false;\n }\n\n return !forDeleting.some(\n (candidate) =>\n candidate !== path &&\n !isRemoved(candidate) &&\n (candidate === ref || candidate.isAncestor(ref))\n );\n }\n );\n const bindingName = binding?.identifier.name;\n const removableAssignmentStatements = new Set<NodePath>();\n const removableOuterReferences = outerReferences.filter((ref) => {\n if (!bindingName) return false;\n const statement = getPropertyAssignmentStatement(\n ref,\n bindingName\n );\n if (!statement || isWithinAliveExport(statement, aliveExports)) {\n return false;\n }\n\n removableAssignmentStatements.add(statement);\n return true;\n });\n\n const blockingReferences = outerReferences.filter(\n (ref) => !removableOuterReferences.includes(ref)\n );\n\n if (blockingReferences.length > 0 && path.isIdentifier()) {\n // Temporary deref it in order to simplify further checks.\n dereference(path);\n dereferenced.push(path);\n }\n\n if (\n !deleted.has(path) &&\n binding &&\n blockingReferences.length > 0 &&\n stripExportKeepDeclaration(path)\n ) {\n deleted.add(path);\n changed = true;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (\n !deleted.has(path) &&\n (!binding || blockingReferences.length === 0)\n ) {\n if (removableAssignmentStatements.size > 0) {\n for (const statement of removableAssignmentStatements) {\n if (queueForDeleting(statement)) {\n changed = true;\n }\n }\n }\n\n if (action) {\n applyAction(action);\n } else {\n removeWithRelated([path]);\n }\n\n deleted.add(path);\n changed = true;\n }\n }\n\n dereferenced.forEach((path) => {\n // If path is still alive, we need to reference it back\n if (!isRemoved(path)) {\n reference(path);\n }\n });\n\n dereferenced = [];\n\n // Find and mark for deleting all unreferenced variables\n const unreferenced = Object.values(\n file.scope.getAllBindings()\n ).filter((i) => !i.referenced);\n\n for (const binding of unreferenced) {\n if (binding.path.isVariableDeclarator()) {\n const id = binding.path.get('id');\n if (!isRemoved(id) && !forDeletingSet.has(id)) {\n // Drop dead variable declarations, e.g. `const foo = make();` when `foo` is no longer referenced.\n for (const violation of binding.constantViolations) {\n if (queueForDeleting(violation)) {\n changed = true;\n }\n }\n\n if (queueForDeleting(id)) {\n changed = true;\n }\n }\n }\n\n // Drop import specifiers whose bindings lost all references during shaking\n // (e.g. when we keep only __wywPreval and the rest of the module is removed).\n if (\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n !isRemoved(binding.path) &&\n !forDeletingSet.has(binding.path)\n ) {\n if (queueForDeleting(binding.path)) {\n changed = true;\n }\n }\n }\n }\n }\n\n this.imports = withoutRemoved(collected.imports);\n this.exports = {};\n this.deadExports = [];\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (isRemoved(local)) {\n this.deadExports.push(exported);\n } else {\n this.exports[exported] = local;\n }\n });\n\n this.reexports = withoutRemoved(collected.reexports);\n },\n visitor: {},\n post(file: BabelFile) {\n const log = shakerLogger.extend(getFileIdx(file.opts.filename!));\n\n const processedImports = new Set<string>();\n const imports = new Map<string, string[]>();\n const addImport = ({\n imported,\n source,\n }: {\n imported: string;\n source: string;\n }) => {\n if (processedImports.has(`${source}:${imported}`)) {\n return;\n }\n\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n if (imported) {\n imports.get(source)!.push(imported);\n }\n\n processedImports.add(`${source}:${imported}`);\n };\n\n this.imports.forEach(addImport);\n this.reexports.forEach(addImport);\n\n log('end', `remaining imports: %O`, imports);\n\n // eslint-disable-next-line no-param-reassign\n (file.metadata as IMetadata).wywEvaluator = {\n imports,\n };\n\n invalidateTraversalCache(file.path);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -51,8 +51,9 @@ function* explodeReexports() {
51
51
  const reexport = reexportsFrom.find(i => i.source === importedEntrypoint.import);
52
52
  if (reexport) {
53
53
  const exports = yield* this.getNext('getExports', importedEntrypoint.entrypoint, undefined);
54
- if (exports.length !== 0) {
55
- replacements.set(reexport.node, babel.types.exportNamedDeclaration(null, exports.map(i => babel.types.exportSpecifier(babel.types.identifier(i), babel.types.identifier(i))), babel.types.stringLiteral(importedEntrypoint.import)));
54
+ const namedExports = exports.filter(name => name !== 'default');
55
+ if (namedExports.length !== 0) {
56
+ replacements.set(reexport.node, babel.types.exportNamedDeclaration(null, namedExports.map(i => babel.types.exportSpecifier(babel.types.identifier(i), babel.types.identifier(i))), babel.types.stringLiteral(importedEntrypoint.import)));
56
57
  }
57
58
  }
58
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"explodeReexports.js","names":["_generator","_interopRequireDefault","require","_getExports","e","__esModule","default","getWildcardReexport","babel","ast","reexportsFrom","program","body","forEach","node","types","isExportAllDeclaration","source","isStringLiteral","push","value","explodeReexports","services","log","loadedAndParsed","entrypoint","evaluator","length","resolvedImports","getNext","imports","Map","map","i","importedEntrypoints","findExportsInImports","replacements","importedEntrypoint","reexport","find","import","exports","undefined","set","exportNamedDeclaration","exportSpecifier","identifier","stringLiteral","traverse","ExportAllDeclaration","path","has","replaceWith","get","code","generate"],"sources":["../../../src/transform/generators/explodeReexports.ts"],"sourcesContent":["import generate from '@babel/generator';\nimport type { ExportAllDeclaration, File, Node } from '@babel/types';\n\nimport type { Core } from '../../babel';\nimport type { IExplodeReexportsAction, SyncScenarioForAction } from '../types';\n\nimport { findExportsInImports } from './getExports';\n\nconst getWildcardReexport = (babel: Core, ast: File) => {\n const reexportsFrom: { node: ExportAllDeclaration; source: string }[] = [];\n ast.program.body.forEach((node) => {\n if (\n babel.types.isExportAllDeclaration(node) &&\n node.source &&\n babel.types.isStringLiteral(node.source)\n ) {\n reexportsFrom.push({\n source: node.source.value,\n node,\n });\n }\n });\n\n return reexportsFrom;\n};\n\n/**\n * Replaces wildcard reexports with named reexports.\n * Recursively emits getExports for each reexported module,\n * and replaces wildcard with resolved named.\n */\nexport function* explodeReexports(\n this: IExplodeReexportsAction\n): SyncScenarioForAction<IExplodeReexportsAction> {\n const { babel } = this.services;\n const { log, loadedAndParsed } = this.entrypoint;\n if (loadedAndParsed.evaluator === 'ignored') {\n return;\n }\n\n const reexportsFrom = getWildcardReexport(babel, loadedAndParsed.ast);\n if (!reexportsFrom.length) {\n return;\n }\n\n log('has wildcard reexport from %o', reexportsFrom);\n\n const resolvedImports = yield* this.getNext(\n 'resolveImports',\n this.entrypoint,\n {\n imports: new Map(reexportsFrom.map((i) => [i.source, []])),\n }\n );\n\n const importedEntrypoints = findExportsInImports(\n this.entrypoint,\n resolvedImports\n );\n\n const replacements = new Map<ExportAllDeclaration, Node>();\n for (const importedEntrypoint of importedEntrypoints) {\n if (importedEntrypoint.entrypoint.loadedAndParsed.evaluator !== 'ignored') {\n const reexport = reexportsFrom.find(\n (i) => i.source === importedEntrypoint.import\n );\n if (reexport) {\n const exports = yield* this.getNext(\n 'getExports',\n importedEntrypoint.entrypoint,\n undefined\n );\n\n if (exports.length !== 0) {\n replacements.set(\n reexport.node,\n babel.types.exportNamedDeclaration(\n null,\n exports.map((i) =>\n babel.types.exportSpecifier(\n babel.types.identifier(i),\n babel.types.identifier(i)\n )\n ),\n babel.types.stringLiteral(importedEntrypoint.import)\n )\n );\n }\n }\n }\n }\n\n // Replace wildcard reexport with named reexports\n babel.traverse(loadedAndParsed.ast, {\n ExportAllDeclaration(path) {\n if (!replacements.has(path.node)) return;\n path.replaceWith(replacements.get(path.node)!);\n },\n });\n\n loadedAndParsed.code = generate(loadedAndParsed.ast).code;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"explodeReexports.js","names":["_generator","_interopRequireDefault","require","_getExports","e","__esModule","default","getWildcardReexport","babel","ast","reexportsFrom","program","body","forEach","node","types","isExportAllDeclaration","source","isStringLiteral","push","value","explodeReexports","services","log","loadedAndParsed","entrypoint","evaluator","length","resolvedImports","getNext","imports","Map","map","i","importedEntrypoints","findExportsInImports","replacements","importedEntrypoint","reexport","find","import","exports","undefined","namedExports","filter","name","set","exportNamedDeclaration","exportSpecifier","identifier","stringLiteral","traverse","ExportAllDeclaration","path","has","replaceWith","get","code","generate"],"sources":["../../../src/transform/generators/explodeReexports.ts"],"sourcesContent":["import generate from '@babel/generator';\nimport type { ExportAllDeclaration, File, Node } from '@babel/types';\n\nimport type { Core } from '../../babel';\nimport type { IExplodeReexportsAction, SyncScenarioForAction } from '../types';\n\nimport { findExportsInImports } from './getExports';\n\nconst getWildcardReexport = (babel: Core, ast: File) => {\n const reexportsFrom: { node: ExportAllDeclaration; source: string }[] = [];\n ast.program.body.forEach((node) => {\n if (\n babel.types.isExportAllDeclaration(node) &&\n node.source &&\n babel.types.isStringLiteral(node.source)\n ) {\n reexportsFrom.push({\n source: node.source.value,\n node,\n });\n }\n });\n\n return reexportsFrom;\n};\n\n/**\n * Replaces wildcard reexports with named reexports.\n * Recursively emits getExports for each reexported module,\n * and replaces wildcard with resolved named.\n */\nexport function* explodeReexports(\n this: IExplodeReexportsAction\n): SyncScenarioForAction<IExplodeReexportsAction> {\n const { babel } = this.services;\n const { log, loadedAndParsed } = this.entrypoint;\n if (loadedAndParsed.evaluator === 'ignored') {\n return;\n }\n\n const reexportsFrom = getWildcardReexport(babel, loadedAndParsed.ast);\n if (!reexportsFrom.length) {\n return;\n }\n\n log('has wildcard reexport from %o', reexportsFrom);\n\n const resolvedImports = yield* this.getNext(\n 'resolveImports',\n this.entrypoint,\n {\n imports: new Map(reexportsFrom.map((i) => [i.source, []])),\n }\n );\n\n const importedEntrypoints = findExportsInImports(\n this.entrypoint,\n resolvedImports\n );\n\n const replacements = new Map<ExportAllDeclaration, Node>();\n for (const importedEntrypoint of importedEntrypoints) {\n if (importedEntrypoint.entrypoint.loadedAndParsed.evaluator !== 'ignored') {\n const reexport = reexportsFrom.find(\n (i) => i.source === importedEntrypoint.import\n );\n if (reexport) {\n const exports = yield* this.getNext(\n 'getExports',\n importedEntrypoint.entrypoint,\n undefined\n );\n\n const namedExports = exports.filter((name) => name !== 'default');\n if (namedExports.length !== 0) {\n replacements.set(\n reexport.node,\n babel.types.exportNamedDeclaration(\n null,\n namedExports.map((i) =>\n babel.types.exportSpecifier(\n babel.types.identifier(i),\n babel.types.identifier(i)\n )\n ),\n babel.types.stringLiteral(importedEntrypoint.import)\n )\n );\n }\n }\n }\n }\n\n // Replace wildcard reexport with named reexports\n babel.traverse(loadedAndParsed.ast, {\n ExportAllDeclaration(path) {\n if (!replacements.has(path.node)) return;\n path.replaceWith(replacements.get(path.node)!);\n },\n });\n\n loadedAndParsed.code = generate(loadedAndParsed.ast).code;\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wyw-in-js/transform",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "dependencies": {
5
5
  "@babel/core": "^7.23.5",
6
6
  "@babel/generator": "^7.23.5",
package/types/module.js CHANGED
@@ -73,6 +73,29 @@ const reactRefreshRuntime = {
73
73
  createSignatureFunctionForTransform: () => () => { },
74
74
  };
75
75
  const NOOP = () => { };
76
+ const browserOnlyEvalHintTriggers = [
77
+ 'window is not defined',
78
+ "evaluating 'window",
79
+ 'document is not defined',
80
+ "evaluating 'document",
81
+ 'navigator is not defined',
82
+ "evaluating 'navigator",
83
+ 'self is not defined',
84
+ "evaluating 'self",
85
+ ];
86
+ const getBrowserOnlyEvalHint = (error) => {
87
+ const message = error instanceof Error ? error.message : String(error);
88
+ const looksLikeBrowserOnly = browserOnlyEvalHintTriggers.some((trigger) => message.includes(trigger));
89
+ if (!looksLikeBrowserOnly)
90
+ return null;
91
+ return [
92
+ '',
93
+ '[wyw-in-js] Evaluation hint:',
94
+ 'This usually means browser-only code ran during build-time evaluation.',
95
+ 'Move browser-only initialization out of evaluated modules, or mock the import via `importOverrides`.',
96
+ "Example: importOverrides: { 'msw/browser': { mock: './src/__mocks__/msw-browser.js' } }",
97
+ ].join('\n');
98
+ };
76
99
  const warnedUnknownImportsByServices = new WeakMap();
77
100
  function emitWarning(services, message) {
78
101
  if (services.emitWarning) {
@@ -266,7 +289,9 @@ class Module {
266
289
  throw e;
267
290
  }
268
291
  this.debug('%O\n%O', e, this.callstack);
269
- throw new EvalError(`${e.message} in${this.callstack.join('\n| ')}\n`);
292
+ const baseMessage = `${e.message} in${this.callstack.join('\n| ')}\n`;
293
+ const hint = getBrowserOnlyEvalHint(e);
294
+ throw new EvalError(hint ? `${baseMessage}${hint}\n` : baseMessage);
270
295
  }
271
296
  finally {
272
297
  teardown();
@@ -41,7 +41,12 @@ function getBindingForExport(exportPath) {
41
41
  }
42
42
  }
43
43
  if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {
44
- return getNonParamBinding(exportPath, exportPath.node.id.name);
44
+ const { id } = exportPath.node;
45
+ if (!id) {
46
+ // `export default function() {}` / `export default class {}` (anonymous)
47
+ return undefined;
48
+ }
49
+ return getNonParamBinding(exportPath, id.name);
45
50
  }
46
51
  return undefined;
47
52
  }
@@ -46,8 +46,9 @@ function* explodeReexports() {
46
46
  const reexport = reexportsFrom.find((i) => i.source === importedEntrypoint.import);
47
47
  if (reexport) {
48
48
  const exports = yield* this.getNext('getExports', importedEntrypoint.entrypoint, undefined);
49
- if (exports.length !== 0) {
50
- replacements.set(reexport.node, babel.types.exportNamedDeclaration(null, exports.map((i) => babel.types.exportSpecifier(babel.types.identifier(i), babel.types.identifier(i))), babel.types.stringLiteral(importedEntrypoint.import)));
49
+ const namedExports = exports.filter((name) => name !== 'default');
50
+ if (namedExports.length !== 0) {
51
+ replacements.set(reexport.node, babel.types.exportNamedDeclaration(null, namedExports.map((i) => babel.types.exportSpecifier(babel.types.identifier(i), babel.types.identifier(i))), babel.types.stringLiteral(importedEntrypoint.import)));
51
52
  }
52
53
  }
53
54
  }