@embroider/core 3.4.6-unstable.11f2c70 → 3.4.6-unstable.35f9ecd

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embroider/core",
3
- "version": "3.4.6-unstable.11f2c70",
3
+ "version": "3.4.6-unstable.35f9ecd",
4
4
  "private": false,
5
5
  "description": "A build system for EmberJS applications.",
6
6
  "repository": {
@@ -23,8 +23,8 @@
23
23
  "@babel/core": "^7.14.5",
24
24
  "@babel/parser": "^7.14.5",
25
25
  "@babel/traverse": "^7.14.5",
26
- "@embroider/macros": "1.14.1-unstable.11f2c70",
27
- "@embroider/shared-internals": "2.5.3-unstable.11f2c70",
26
+ "@embroider/macros": "1.14.1-unstable.35f9ecd",
27
+ "@embroider/shared-internals": "2.5.3-unstable.35f9ecd",
28
28
  "assert-never": "^1.2.1",
29
29
  "babel-plugin-ember-template-compilation": "^2.1.1",
30
30
  "broccoli-node-api": "^1.7.0",
@@ -43,7 +43,7 @@
43
43
  "resolve": "^1.20.0",
44
44
  "resolve-package-path": "^4.0.1",
45
45
  "resolve.exports": "^2.0.2",
46
- "@embroider/reverse-exports": "0.1.1-unstable.11f2c70",
46
+ "@embroider/reverse-exports": "0.1.1-unstable.35f9ecd",
47
47
  "typescript-memoize": "^1.0.1",
48
48
  "walk-sync": "^3.0.0"
49
49
  },
@@ -28,8 +28,7 @@ export declare class AppFiles {
28
28
  export interface Engine {
29
29
  package: Package;
30
30
  addons: Map<AddonPackage, string>;
31
- parent: Engine | undefined;
32
- sourcePath: string;
31
+ isApp: boolean;
33
32
  modulePrefix: string;
34
33
  appRelativePath: string;
35
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-files.js","sourceRoot":"","sources":["app-files.ts"],"names":[],"mappings":"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","sourcesContent":["import { sep } from 'path';\nimport type { Package, AddonPackage } from '@embroider/shared-internals';\n\nexport interface RouteFiles {\n route?: string;\n template?: string;\n controller?: string;\n children: Map<string, RouteFiles>;\n}\n\nexport class AppFiles {\n readonly tests: ReadonlyArray<string>;\n readonly components: ReadonlyArray<string>;\n readonly helpers: ReadonlyArray<string>;\n readonly modifiers: ReadonlyArray<string>;\n private perRoute: RouteFiles;\n readonly otherAppFiles: ReadonlyArray<string>;\n readonly isFastbootOnly: Map<string, boolean>;\n readonly fastbootFiles: { [appName: string]: { localFilename: string; shadowedFilename: string | undefined } };\n\n constructor(\n readonly engine: Engine,\n appFiles: Set<string>,\n fastbootFiles: Set<string>,\n resolvableExtensions: RegExp,\n podModulePrefix?: string\n ) {\n let tests: string[] = [];\n let components: string[] = [];\n let helpers: string[] = [];\n let modifiers: string[] = [];\n let otherAppFiles: string[] = [];\n this.perRoute = { children: new Map() };\n\n let combinedFiles = new Set<string>();\n let combinedNonFastbootFiles = new Set<string>();\n let isFastbootOnly = new Map<string, boolean>();\n\n for (let f of appFiles) {\n combinedFiles.add(f);\n combinedNonFastbootFiles.add(f);\n }\n for (let f of fastbootFiles) {\n combinedFiles.add(f);\n }\n\n for (let addon of engine.addons.keys()) {\n let appJS = addon.meta['app-js'];\n if (appJS) {\n for (let filename of Object.keys(appJS)) {\n filename = filename.replace(/^\\.\\//, '');\n combinedFiles.add(filename);\n combinedNonFastbootFiles.add(filename);\n }\n }\n\n let fastbootJS = addon.meta['fastboot-js'];\n if (fastbootJS) {\n for (let filename of Object.keys(fastbootJS)) {\n filename = filename.replace(/^\\.\\//, '');\n combinedFiles.add(filename);\n }\n }\n }\n\n for (let relativePath of combinedFiles) {\n isFastbootOnly.set(relativePath, !combinedNonFastbootFiles.has(relativePath));\n relativePath = relativePath.split(sep).join('/');\n if (!resolvableExtensions.test(relativePath)) {\n continue;\n }\n\n if (/\\.d\\.ts$/.test(relativePath)) {\n // .d.ts files are technically \"*.ts\" files but aren't really and we\n // don't want to include them when we crawl through the app.\n continue;\n }\n\n if (relativePath.startsWith('tests/')) {\n tests.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('components/')) {\n // hbs files are resolvable, but not when they're used via co-location.\n // An hbs file is used via colocation when it's inside the components\n // directory, and also not named \"template.hbs\" (because that is an\n // older pattern used with pods-like layouts).\n if (!relativePath.endsWith('.hbs') || relativePath.endsWith('/template.hbs')) {\n components.push(relativePath);\n }\n continue;\n }\n\n if (relativePath.startsWith('templates/components/')) {\n components.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('helpers/')) {\n helpers.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('modifiers/')) {\n modifiers.push(relativePath);\n continue;\n }\n\n if (\n (podModulePrefix !== undefined && this.handlePodsRouteFile(relativePath, podModulePrefix)) ||\n this.handleClassicRouteFile(relativePath)\n ) {\n continue;\n }\n\n otherAppFiles.push(relativePath);\n }\n this.tests = tests;\n this.components = components;\n this.helpers = helpers;\n this.modifiers = modifiers;\n this.otherAppFiles = otherAppFiles;\n this.isFastbootOnly = isFastbootOnly;\n\n // this deliberately only describes the app's fastboot files. Not the full\n // merge from all the addons. This is because they need different handling\n // in the module resolver -- addon fastboot files can always be a\n // fallbackResolve, because if the app happens to define the same name\n // (whether fastboot-specific or just browser) that wins over the addon.\n // Whereas if the app itself defines a fastbot-specific version of a file,\n // that must take precedence over the *normal* resolution, and must be\n // implemented in beforeResolve.\n this.fastbootFiles = Object.fromEntries(\n [...fastbootFiles].map(name => [\n `./${name}`,\n {\n localFilename: `./_fastboot_/${name}`,\n shadowedFilename: appFiles.has(name) ? `./${name}` : undefined,\n },\n ])\n );\n }\n\n private handleClassicRouteFile(relativePath: string): boolean {\n let [prefix, ...rest] = relativePath.replace(/\\.\\w{1,3}$/, '').split('/');\n if (!['controllers', 'templates', 'routes'].includes(prefix)) {\n return false;\n }\n let type = prefix.slice(0, -1) as 'controller' | 'template' | 'route';\n let cursor = this.perRoute;\n for (let part of rest) {\n let child = cursor.children.get(part);\n if (child) {\n cursor = child;\n } else {\n let newEntry = { children: new Map() };\n cursor.children.set(part, newEntry);\n cursor = newEntry;\n }\n }\n cursor[type] = relativePath;\n return true;\n }\n\n private handlePodsRouteFile(relativePath: string, podModulePrefix: string): boolean {\n let parts = relativePath.replace(/\\.\\w{1,3}$/, '').split('/');\n let type = parts.pop();\n if (!type || !['controller', 'template', 'route'].includes(type)) {\n return false;\n }\n let podParts = podModulePrefix.split('/');\n // The first part of podModulePrefix is the app's package name\n podParts.shift();\n\n for (let podPart of podParts) {\n if (parts.shift() !== podPart) {\n return false;\n }\n }\n\n let cursor = this.perRoute;\n for (let part of parts) {\n let child = cursor.children.get(part);\n if (child) {\n cursor = child;\n } else {\n let newEntry = { children: new Map() };\n cursor.children.set(part, newEntry);\n cursor = newEntry;\n }\n }\n cursor[type as 'controller' | 'template' | 'route'] = relativePath;\n return true;\n }\n\n get routeFiles(): Readonly<RouteFiles> {\n return this.perRoute;\n }\n}\n\nexport interface Engine {\n // the engine's own package\n package: Package;\n // the set of active addons in the engine. For each one we keep track of a file that can resolve the addon, because we'll need that later.\n addons: Map<AddonPackage, string>;\n // the parent engine, if any\n parent: Engine | undefined;\n // where the engine's own V2 code comes from\n sourcePath: string;\n // runtime name for the engine's own module namespace\n modulePrefix: string;\n // this is destPath but relative to the app itself\n appRelativePath: string;\n}\n"]}
1
+ {"version":3,"file":"app-files.js","sourceRoot":"","sources":["app-files.ts"],"names":[],"mappings":"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","sourcesContent":["import { sep } from 'path';\nimport type { Package, AddonPackage } from '@embroider/shared-internals';\n\nexport interface RouteFiles {\n route?: string;\n template?: string;\n controller?: string;\n children: Map<string, RouteFiles>;\n}\n\nexport class AppFiles {\n readonly tests: ReadonlyArray<string>;\n readonly components: ReadonlyArray<string>;\n readonly helpers: ReadonlyArray<string>;\n readonly modifiers: ReadonlyArray<string>;\n private perRoute: RouteFiles;\n readonly otherAppFiles: ReadonlyArray<string>;\n readonly isFastbootOnly: Map<string, boolean>;\n readonly fastbootFiles: { [appName: string]: { localFilename: string; shadowedFilename: string | undefined } };\n\n constructor(\n readonly engine: Engine,\n appFiles: Set<string>,\n fastbootFiles: Set<string>,\n resolvableExtensions: RegExp,\n podModulePrefix?: string\n ) {\n let tests: string[] = [];\n let components: string[] = [];\n let helpers: string[] = [];\n let modifiers: string[] = [];\n let otherAppFiles: string[] = [];\n this.perRoute = { children: new Map() };\n\n let combinedFiles = new Set<string>();\n let combinedNonFastbootFiles = new Set<string>();\n let isFastbootOnly = new Map<string, boolean>();\n\n for (let f of appFiles) {\n combinedFiles.add(f);\n combinedNonFastbootFiles.add(f);\n }\n for (let f of fastbootFiles) {\n combinedFiles.add(f);\n }\n\n for (let addon of engine.addons.keys()) {\n let appJS = addon.meta['app-js'];\n if (appJS) {\n for (let filename of Object.keys(appJS)) {\n filename = filename.replace(/^\\.\\//, '');\n combinedFiles.add(filename);\n combinedNonFastbootFiles.add(filename);\n }\n }\n\n let fastbootJS = addon.meta['fastboot-js'];\n if (fastbootJS) {\n for (let filename of Object.keys(fastbootJS)) {\n filename = filename.replace(/^\\.\\//, '');\n combinedFiles.add(filename);\n }\n }\n }\n\n for (let relativePath of combinedFiles) {\n isFastbootOnly.set(relativePath, !combinedNonFastbootFiles.has(relativePath));\n relativePath = relativePath.split(sep).join('/');\n if (!resolvableExtensions.test(relativePath)) {\n continue;\n }\n\n if (/\\.d\\.ts$/.test(relativePath)) {\n // .d.ts files are technically \"*.ts\" files but aren't really and we\n // don't want to include them when we crawl through the app.\n continue;\n }\n\n if (relativePath.startsWith('tests/')) {\n tests.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('components/')) {\n // hbs files are resolvable, but not when they're used via co-location.\n // An hbs file is used via colocation when it's inside the components\n // directory, and also not named \"template.hbs\" (because that is an\n // older pattern used with pods-like layouts).\n if (!relativePath.endsWith('.hbs') || relativePath.endsWith('/template.hbs')) {\n components.push(relativePath);\n }\n continue;\n }\n\n if (relativePath.startsWith('templates/components/')) {\n components.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('helpers/')) {\n helpers.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('modifiers/')) {\n modifiers.push(relativePath);\n continue;\n }\n\n if (\n (podModulePrefix !== undefined && this.handlePodsRouteFile(relativePath, podModulePrefix)) ||\n this.handleClassicRouteFile(relativePath)\n ) {\n continue;\n }\n\n otherAppFiles.push(relativePath);\n }\n this.tests = tests;\n this.components = components;\n this.helpers = helpers;\n this.modifiers = modifiers;\n this.otherAppFiles = otherAppFiles;\n this.isFastbootOnly = isFastbootOnly;\n\n // this deliberately only describes the app's fastboot files. Not the full\n // merge from all the addons. This is because they need different handling\n // in the module resolver -- addon fastboot files can always be a\n // fallbackResolve, because if the app happens to define the same name\n // (whether fastboot-specific or just browser) that wins over the addon.\n // Whereas if the app itself defines a fastbot-specific version of a file,\n // that must take precedence over the *normal* resolution, and must be\n // implemented in beforeResolve.\n this.fastbootFiles = Object.fromEntries(\n [...fastbootFiles].map(name => [\n `./${name}`,\n {\n localFilename: `./_fastboot_/${name}`,\n shadowedFilename: appFiles.has(name) ? `./${name}` : undefined,\n },\n ])\n );\n }\n\n private handleClassicRouteFile(relativePath: string): boolean {\n let [prefix, ...rest] = relativePath.replace(/\\.\\w{1,3}$/, '').split('/');\n if (!['controllers', 'templates', 'routes'].includes(prefix)) {\n return false;\n }\n let type = prefix.slice(0, -1) as 'controller' | 'template' | 'route';\n let cursor = this.perRoute;\n for (let part of rest) {\n let child = cursor.children.get(part);\n if (child) {\n cursor = child;\n } else {\n let newEntry = { children: new Map() };\n cursor.children.set(part, newEntry);\n cursor = newEntry;\n }\n }\n cursor[type] = relativePath;\n return true;\n }\n\n private handlePodsRouteFile(relativePath: string, podModulePrefix: string): boolean {\n let parts = relativePath.replace(/\\.\\w{1,3}$/, '').split('/');\n let type = parts.pop();\n if (!type || !['controller', 'template', 'route'].includes(type)) {\n return false;\n }\n let podParts = podModulePrefix.split('/');\n // The first part of podModulePrefix is the app's package name\n podParts.shift();\n\n for (let podPart of podParts) {\n if (parts.shift() !== podPart) {\n return false;\n }\n }\n\n let cursor = this.perRoute;\n for (let part of parts) {\n let child = cursor.children.get(part);\n if (child) {\n cursor = child;\n } else {\n let newEntry = { children: new Map() };\n cursor.children.set(part, newEntry);\n cursor = newEntry;\n }\n }\n cursor[type as 'controller' | 'template' | 'route'] = relativePath;\n return true;\n }\n\n get routeFiles(): Readonly<RouteFiles> {\n return this.perRoute;\n }\n}\n\nexport interface Engine {\n // the engine's own package\n package: Package;\n // the set of active addons in the engine. For each one we keep track of a file that can resolve the addon, because we'll need that later.\n addons: Map<AddonPackage, string>;\n // is this the top-level engine?\n isApp: boolean;\n // runtime name for the engine's own module namespace\n modulePrefix: string;\n // TODO: remove this after we remove the stage2 entrypoint\n appRelativePath: string;\n}\n"]}
@@ -15,7 +15,7 @@ export interface Options {
15
15
  podModulePrefix?: string;
16
16
  amdCompatibility: Required<UserOptions['amdCompatibility']>;
17
17
  }
18
- interface EngineConfig {
18
+ export interface EngineConfig {
19
19
  packageName: string;
20
20
  activeAddons: {
21
21
  name: string;
@@ -29,6 +29,7 @@ interface EngineConfig {
29
29
  };
30
30
  };
31
31
  root: string;
32
+ isLazy: boolean;
32
33
  }
33
34
  export interface ModuleRequest<Res extends Resolution = Resolution> {
34
35
  readonly specifier: string;
@@ -105,4 +106,3 @@ export declare class Resolver {
105
106
  reverseComponentLookup(filename: string): string | undefined;
106
107
  private tryReverseComponent;
107
108
  }
108
- export {};
@@ -170,7 +170,9 @@ class Resolver {
170
170
  let fastbootFile = engineConfig.fastbootFiles[candidate];
171
171
  if (fastbootFile) {
172
172
  if (fastbootFile.shadowedFilename) {
173
- let { names } = (0, describe_exports_1.describeExports)((0, fs_1.readFileSync)((0, path_1.resolve)(pkg.root, fastbootFile.shadowedFilename), 'utf8'), {});
173
+ let { names } = (0, describe_exports_1.describeExports)((0, fs_1.readFileSync)((0, path_1.resolve)(pkg.root, fastbootFile.shadowedFilename), 'utf8'), {
174
+ configFile: false,
175
+ });
174
176
  let switchFile = (0, virtual_content_1.fastbootSwitch)(candidate, (0, path_1.resolve)(pkg.root, 'package.json'), names);
175
177
  if (switchFile === request.fromFile) {
176
178
  return logTransition('internal lookup from fastbootSwitch', request);
@@ -919,7 +921,7 @@ class Resolver {
919
921
  if (foundAppJS.type !== 'found') {
920
922
  throw new Error(`${matched.entry['app-js'].fromPackageName} declared ${inEngineSpecifier} in packageJSON.ember-addon.app-js, but that module does not exist`);
921
923
  }
922
- let { names } = (0, describe_exports_1.describeExports)((0, fs_1.readFileSync)(foundAppJS.filename, 'utf8'), {});
924
+ let { names } = (0, describe_exports_1.describeExports)((0, fs_1.readFileSync)(foundAppJS.filename, 'utf8'), { configFile: false });
923
925
  return request.virtualize((0, virtual_content_1.fastbootSwitch)(matched.matched, (0, path_1.resolve)(engine.root, 'package.json'), names));
924
926
  }
925
927
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module-resolver.js","sourceRoot":"","sources":["module-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n emberVirtualPackages,\n emberVirtualPeerDeps,\n extensionsPattern,\n packageName as getPackageName,\n packageName,\n} from '@embroider/shared-internals';\nimport { dirname, resolve, posix } from 'path';\nimport type { Package, V2Package } from '@embroider/shared-internals';\nimport { explicitRelative, RewrittenPackageCache } from '@embroider/shared-internals';\nimport makeDebug from 'debug';\nimport assertNever from 'assert-never';\nimport reversePackageExports from '@embroider/reverse-exports';\nimport { exports as resolveExports } from 'resolve.exports';\n\nimport {\n virtualExternalESModule,\n virtualExternalCJSModule,\n virtualPairComponent,\n fastbootSwitch,\n decodeFastbootSwitch,\n decodeImplicitModules,\n} from './virtual-content';\nimport { Memoize } from 'typescript-memoize';\nimport { describeExports } from './describe-exports';\nimport { readFileSync } from 'fs';\nimport type UserOptions from './options';\nimport { nodeResolve } from './node-resolve';\n\nconst debug = makeDebug('embroider:resolver');\n\n// Using a formatter makes this work lazy so nothing happens when we aren't\n// logging. It is unfortunate that formatters are a globally mutable config and\n// you can only use single character names, but oh well.\nmakeDebug.formatters.p = (s: string) => {\n let cwd = process.cwd();\n if (s.startsWith(cwd)) {\n return s.slice(cwd.length + 1);\n }\n return s;\n};\n\nfunction logTransition<R extends ModuleRequest>(reason: string, before: R, after: R = before): R {\n if (after.isVirtual) {\n debug(`[%s:virtualized] %s because %s\\n in %p`, before.debugType, before.specifier, reason, before.fromFile);\n } else if (after.resolvedTo) {\n debug(`[%s:resolvedTo] %s because %s\\n in %p`, before.debugType, before.specifier, reason, before.fromFile);\n } else if (before.specifier !== after.specifier) {\n if (before.fromFile !== after.fromFile) {\n debug(\n `[%s:aliased and rehomed] %s to %s\\n because %s\\n from %p\\n to %p`,\n before.debugType,\n before.specifier,\n after.specifier,\n reason,\n before.fromFile,\n after.fromFile\n );\n } else {\n debug(`[%s:aliased] %s to %s\\n because %s`, before.debugType, before.specifier, after.specifier, reason);\n }\n } else if (before.fromFile !== after.fromFile) {\n debug(\n `[%s:rehomed] %s, because %s\\n from %p\\n to %p`,\n before.debugType,\n before.specifier,\n reason,\n before.fromFile,\n after.fromFile\n );\n } else if (after.isNotFound) {\n debug(`[%s:not-found] %s because %s\\n in %p`, before.debugType, before.specifier, reason, before.fromFile);\n } else {\n debug(`[%s:unchanged] %s because %s\\n in %p`, before.debugType, before.specifier, reason, before.fromFile);\n }\n return after;\n}\n\nfunction isTerminal(request: ModuleRequest): boolean {\n return request.isVirtual || request.isNotFound || Boolean(request.resolvedTo);\n}\n\nexport interface Options {\n renamePackages: {\n [fromName: string]: string;\n };\n renameModules: {\n [fromName: string]: string;\n };\n resolvableExtensions: string[];\n appRoot: string;\n engines: EngineConfig[];\n modulePrefix: string;\n podModulePrefix?: string;\n amdCompatibility: Required<UserOptions['amdCompatibility']>;\n}\n\ninterface EngineConfig {\n packageName: string;\n activeAddons: { name: string; root: string; canResolveFromFile: string }[];\n fastbootFiles: { [appName: string]: { localFilename: string; shadowedFilename: string | undefined } };\n root: string;\n}\n\ntype MergeEntry =\n | {\n type: 'app-only';\n 'app-js': {\n specifier: string;\n fromFile: string;\n fromPackageName: string;\n };\n }\n | {\n type: 'fastboot-only';\n 'fastboot-js': {\n specifier: string;\n fromFile: string;\n fromPackageName: string;\n };\n }\n | {\n type: 'both';\n 'app-js': {\n specifier: string;\n fromFile: string;\n fromPackageName: string;\n };\n 'fastboot-js': {\n specifier: string;\n fromFile: string;\n fromPackageName: string;\n };\n };\n\ntype MergeMap = Map</* engine root dir */ string, Map</* withinEngineModuleName */ string, MergeEntry>>;\n\nconst compatPattern = /#embroider_compat\\/(?<type>[^\\/]+)\\/(?<rest>.*)/;\n\nexport interface ModuleRequest<Res extends Resolution = Resolution> {\n readonly specifier: string;\n readonly fromFile: string;\n readonly isVirtual: boolean;\n readonly meta: Record<string, unknown> | undefined;\n readonly debugType: string;\n readonly isNotFound: boolean;\n readonly resolvedTo: Res | undefined;\n alias(newSpecifier: string): this;\n rehome(newFromFile: string): this;\n virtualize(virtualFilename: string): this;\n withMeta(meta: Record<string, any> | undefined): this;\n notFound(): this;\n defaultResolve(): Promise<Res>;\n resolveTo(resolution: Res): this;\n}\n\n// This is generic because different build systems have different ways of\n// representing a found module, and we just pass those values through.\nexport type Resolution<T = unknown, E = unknown> =\n | { type: 'found'; filename: string; isVirtual: boolean; result: T }\n\n // used for requests that are special and don't represent real files that\n // embroider can possibly do anything custom with.\n //\n // the motivating use case for introducing this is Vite's depscan which marks\n // almost everything as \"external\" as a way to tell esbuild to stop traversing\n // once it has been seen the first time.\n | { type: 'ignored'; result: T }\n\n // the important thing about this Resolution is that embroider should do its\n // fallback behaviors here.\n | { type: 'not_found'; err: E };\n\nexport class Resolver {\n constructor(readonly options: Options) {}\n\n private async beforeResolve<R extends ModuleRequest>(request: R): Promise<R> {\n if (request.specifier === '@embroider/macros') {\n // the macros package is always handled directly within babel (not\n // necessarily as a real resolvable package), so we should not mess with it.\n // It might not get compiled away until *after* our plugin has run, which is\n // why we need to know about it.\n return logTransition('early exit', request);\n }\n\n if (request.specifier === 'require') {\n return this.external('early require', request, request.specifier);\n }\n\n request = this.handleFastbootSwitch(request);\n request = await this.handleGlobalsCompat(request);\n request = this.handleImplicitModules(request);\n request = this.handleRenaming(request);\n // we expect the specifier to be app relative at this point - must be after handleRenaming\n request = this.generateFastbootSwitch(request);\n request = this.preHandleExternal(request);\n\n // this should probably stay the last step in beforeResolve, because it can\n // rehome requests to their un-rewritten locations, and for the most part we\n // want to be dealing with the rewritten packages.\n request = this.handleRewrittenPackages(request);\n return request;\n }\n\n // This encapsulates the whole resolving process. Given a `defaultResolve`\n // that calls your build system's normal module resolver, this does both pre-\n // and post-resolution adjustments as needed to implement our compatibility\n // rules.\n async resolve<ResolveResolution extends Resolution>(\n request: ModuleRequest<ResolveResolution>\n ): Promise<ResolveResolution> {\n request = await this.beforeResolve(request);\n if (request.resolvedTo) {\n return request.resolvedTo;\n }\n\n let resolution = await request.defaultResolve();\n\n switch (resolution.type) {\n case 'found':\n case 'ignored':\n return resolution;\n case 'not_found':\n break;\n default:\n throw assertNever(resolution);\n }\n let nextRequest = await this.fallbackResolve(request);\n if (nextRequest === request) {\n // no additional fallback is available.\n return resolution;\n }\n\n if (nextRequest.resolvedTo) {\n return nextRequest.resolvedTo;\n }\n\n if (nextRequest.fromFile === request.fromFile && nextRequest.specifier === request.specifier) {\n throw new Error(\n 'Bug Discovered! New request is not === original request but has the same fromFile and specifier. This will likely create a loop.'\n );\n }\n\n if (nextRequest.isVirtual || nextRequest.isNotFound) {\n // virtual and NotFound requests are terminal, there is no more\n // beforeResolve or fallbackResolve around them. The defaultResolve is\n // expected to know how to implement them.\n return nextRequest.defaultResolve();\n }\n\n return this.resolve(nextRequest);\n }\n\n // Use standard NodeJS resolving, with our required compatibility rules on\n // top. This is a convenience method for calling resolveSync with the\n // defaultResolve already configured to be \"do the normal node thing\".\n async nodeResolve(\n specifier: string,\n fromFile: string\n ): Promise<\n | { type: 'virtual'; filename: string; content: string }\n | { type: 'real'; filename: string }\n | { type: 'not_found'; err: Error }\n > {\n return nodeResolve(this, specifier, fromFile);\n }\n\n get packageCache() {\n return RewrittenPackageCache.shared('embroider', this.options.appRoot);\n }\n\n private logicalPackage(owningPackage: V2Package, file: string): V2Package {\n let logicalLocation = this.reverseSearchAppTree(owningPackage, file);\n if (logicalLocation) {\n let pkg = this.packageCache.get(logicalLocation.owningEngine.root);\n if (!pkg.isV2Ember()) {\n throw new Error(`bug: all engines should be v2 addons by the time we see them here`);\n }\n return pkg;\n }\n return owningPackage;\n }\n\n private generateFastbootSwitch<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let pkg = this.packageCache.ownerOfFile(request.fromFile);\n\n if (!pkg) {\n return request;\n }\n\n if (packageName(request.specifier)) {\n // not a relative request, and we're assuming all within-engine requests\n // are relative by this point due to `v1 self-import` which happens\n // earlier\n return request;\n }\n\n let engineConfig = this.engineConfig(pkg.name);\n let appRelativePath = explicitRelative(pkg.root, resolve(dirname(request.fromFile), request.specifier));\n if (engineConfig) {\n for (let candidate of this.withResolvableExtensions(appRelativePath)) {\n let fastbootFile = engineConfig.fastbootFiles[candidate];\n if (fastbootFile) {\n if (fastbootFile.shadowedFilename) {\n let { names } = describeExports(readFileSync(resolve(pkg.root, fastbootFile.shadowedFilename), 'utf8'), {});\n let switchFile = fastbootSwitch(candidate, resolve(pkg.root, 'package.json'), names);\n if (switchFile === request.fromFile) {\n return logTransition('internal lookup from fastbootSwitch', request);\n } else {\n return logTransition('shadowed app fastboot', request, request.virtualize(switchFile));\n }\n } else {\n return logTransition(\n 'unshadowed app fastboot',\n request,\n request.alias(fastbootFile.localFilename).rehome(resolve(pkg.root, 'package.json'))\n );\n }\n }\n }\n }\n\n return request;\n }\n\n private handleFastbootSwitch<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let match = decodeFastbootSwitch(request.fromFile);\n if (!match) {\n return request;\n }\n\n let section: 'app-js' | 'fastboot-js' | undefined;\n if (request.specifier === './browser') {\n section = 'app-js';\n } else if (request.specifier === './fastboot') {\n section = 'fastboot-js';\n }\n\n if (!section) {\n return logTransition('non-special import in fastboot switch', request);\n }\n\n let pkg = this.packageCache.ownerOfFile(match.filename);\n if (pkg) {\n let rel = explicitRelative(pkg.root, match.filename);\n\n let engineConfig = this.engineConfig(pkg.name);\n if (engineConfig) {\n let fastbootFile = engineConfig.fastbootFiles[rel];\n if (fastbootFile && fastbootFile.shadowedFilename) {\n let targetFile: string;\n if (section === 'app-js') {\n targetFile = fastbootFile.shadowedFilename;\n } else {\n targetFile = fastbootFile.localFilename;\n }\n return logTransition(\n 'matched app entry',\n request,\n // deliberately not using rehome because we want\n // generateFastbootSwitch to see that this request is coming *from*\n // a fastboot switch so it won't cycle back around. Instead we make\n // the targetFile relative to the fromFile that we already have.\n request.alias(explicitRelative(dirname(request.fromFile), resolve(pkg.root, targetFile)))\n );\n }\n }\n\n let entry = this.getEntryFromMergeMap(rel, pkg.root)?.entry;\n if (entry?.type === 'both') {\n return logTransition(\n 'matched addon entry',\n request,\n request.alias(entry[section].specifier).rehome(entry[section].fromFile)\n );\n }\n }\n\n return logTransition('failed to match in fastboot switch', request);\n }\n\n private handleImplicitModules<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let im = decodeImplicitModules(request.specifier);\n if (!im) {\n return request;\n }\n\n let pkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!pkg?.isV2Ember()) {\n throw new Error(`bug: found implicit modules import in non-ember package at ${request.fromFile}`);\n }\n\n let packageName = getPackageName(im.fromFile);\n if (packageName) {\n let dep = this.packageCache.resolve(packageName, pkg);\n return logTransition(\n `dep's implicit modules`,\n request,\n request.virtualize(resolve(dep.root, `-embroider-${im.type}.js`))\n );\n } else {\n return logTransition(\n `own implicit modules`,\n request,\n request.virtualize(resolve(pkg.root, `-embroider-${im.type}.js`))\n );\n }\n }\n\n private async handleGlobalsCompat<R extends ModuleRequest>(request: R): Promise<R> {\n if (isTerminal(request)) {\n return request;\n }\n let match = compatPattern.exec(request.specifier);\n if (!match) {\n return request;\n }\n let { type, rest } = match.groups!;\n let fromPkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!fromPkg?.isV2Ember()) {\n return request;\n }\n let engine = this.owningEngine(fromPkg);\n\n switch (type) {\n case 'helpers':\n return this.resolveHelper(rest, engine, request);\n case 'components':\n return this.resolveComponent(rest, engine, request);\n case 'modifiers':\n return this.resolveModifier(rest, engine, request);\n case 'ambiguous':\n return this.resolveHelperOrComponent(rest, engine, request);\n default:\n throw new Error(`bug: unexepected #embroider_compat specifier: ${request.specifier}`);\n }\n }\n\n private resolveHelper<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): R {\n let target = this.parseGlobalPath(path, inEngine);\n return logTransition(\n 'resolveHelper',\n request,\n request.alias(`${target.packageName}/helpers/${target.memberName}`).rehome(resolve(inEngine.root, 'package.json'))\n );\n }\n\n private async resolveComponent<R extends ModuleRequest>(\n path: string,\n inEngine: EngineConfig,\n request: R\n ): Promise<R> {\n let target = this.parseGlobalPath(path, inEngine);\n\n let hbsModule: Resolution | null = null;\n let jsModule: Resolution | null = null;\n\n // first, the various places our template might be.\n for (let candidate of this.componentTemplateCandidates(target.packageName)) {\n let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;\n\n let resolution = await this.resolve(\n request.alias(candidateSpecifier).rehome(target.from).withMeta({\n runtimeFallback: false,\n })\n );\n\n if (resolution.type === 'found') {\n hbsModule = resolution;\n break;\n }\n }\n\n // then the various places our javascript might be.\n for (let candidate of this.componentJSCandidates(target.packageName)) {\n let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;\n\n let resolution = await this.resolve(\n request.alias(candidateSpecifier).rehome(target.from).withMeta({\n runtimeFallback: false,\n })\n );\n\n // .hbs is a resolvable extension for us, so we need to exclude it here.\n // It matches as a priority lower than .js, so finding an .hbs means\n // there's definitely not a .js.\n if (resolution.type === 'found' && !resolution.filename.endsWith('.hbs')) {\n jsModule = resolution;\n break;\n }\n }\n\n if (hbsModule) {\n return logTransition(\n `resolveComponent found legacy HBS`,\n request,\n request.virtualize(virtualPairComponent(hbsModule.filename, jsModule?.filename))\n );\n } else if (jsModule) {\n return logTransition(`resolving to resolveComponent found only JS`, request, request.resolveTo(jsModule));\n } else {\n return logTransition(`resolveComponent failed`, request);\n }\n }\n\n private async resolveHelperOrComponent<R extends ModuleRequest>(\n path: string,\n inEngine: EngineConfig,\n request: R\n ): Promise<R> {\n // resolveHelper just rewrites our request to one that should target the\n // component, so here to resolve the ambiguity we need to actually resolve\n // that candidate to see if it works.\n let helperCandidate = this.resolveHelper(path, inEngine, request);\n let helperMatch = await this.resolve(\n request.alias(helperCandidate.specifier).rehome(helperCandidate.fromFile).withMeta({\n runtimeFallback: false,\n })\n );\n\n if (helperMatch.type === 'found') {\n return logTransition('resolve to ambiguous case matched a helper', request, request.resolveTo(helperMatch));\n }\n\n // unlike resolveHelper, resolveComponent already does pre-resolution in\n // order to deal with its own internal ambiguity around JS vs HBS vs\n // colocation.≥\n let componentMatch = await this.resolveComponent(path, inEngine, request);\n if (componentMatch !== request) {\n return logTransition('ambiguous case matched a cmoponent', request, componentMatch);\n }\n\n // this is the hard failure case -- we were supposed to find something and\n // didn't. Let the normal resolution process progress so the user gets a\n // normal build error.\n return logTransition('ambiguous case failing', request);\n }\n\n private resolveModifier<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): R {\n let target = this.parseGlobalPath(path, inEngine);\n return logTransition(\n 'resolveModifier',\n request,\n request\n .alias(`${target.packageName}/modifiers/${target.memberName}`)\n .rehome(resolve(inEngine.root, 'package.json'))\n );\n }\n\n private *componentTemplateCandidates(inPackageName: string) {\n yield { prefix: '/templates/components/', suffix: '' };\n yield { prefix: '/components/', suffix: '/template' };\n\n let pods = this.podPrefix(inPackageName);\n if (pods) {\n yield { prefix: `${pods}/components/`, suffix: '/template' };\n }\n }\n\n private *componentJSCandidates(inPackageName: string) {\n yield { prefix: '/components/', suffix: '' };\n yield { prefix: '/components/', suffix: '/index' };\n yield { prefix: '/components/', suffix: '/component' };\n\n let pods = this.podPrefix(inPackageName);\n if (pods) {\n yield { prefix: `${pods}/components/`, suffix: '/component' };\n }\n }\n\n private podPrefix(targetPackageName: string) {\n if (targetPackageName === this.options.modulePrefix && this.options.podModulePrefix) {\n if (!this.options.podModulePrefix.startsWith(this.options.modulePrefix)) {\n throw new Error(\n `Your podModulePrefix (${this.options.podModulePrefix}) does not start with your app module prefix (${this.options.modulePrefix}). Not gonna support that silliness.`\n );\n }\n return this.options.podModulePrefix.slice(this.options.modulePrefix.length);\n }\n }\n\n // for paths that come from non-strict templates\n private parseGlobalPath(path: string, inEngine: EngineConfig) {\n let parts = path.split('@');\n if (parts.length > 1 && parts[0].length > 0) {\n return { packageName: parts[0], memberName: parts[1], from: resolve(inEngine.root, 'package.json') };\n } else {\n return { packageName: inEngine.packageName, memberName: path, from: resolve(inEngine.root, 'package.json') };\n }\n }\n\n private engineConfig(packageName: string): EngineConfig | undefined {\n return this.options.engines.find(e => e.packageName === packageName);\n }\n\n // This is where we figure out how all the classic treeForApp merging bottoms\n // out.\n @Memoize()\n private get mergeMap(): MergeMap {\n let result: MergeMap = new Map();\n for (let engine of this.options.engines) {\n let engineModules: Map<string, MergeEntry> = new Map();\n for (let addonConfig of engine.activeAddons) {\n let addon = this.packageCache.get(addonConfig.root);\n if (!addon.isV2Addon()) {\n continue;\n }\n\n let appJS = addon.meta['app-js'];\n if (appJS) {\n for (let [inEngineName, inAddonName] of Object.entries(appJS)) {\n if (!inEngineName.startsWith('./')) {\n throw new Error(\n `addon ${addon.name} declares app-js in its package.json with the illegal name \"${inEngineName}\". It must start with \"./\" to make it clear that it's relative to the app`\n );\n }\n if (!inAddonName.startsWith('./')) {\n throw new Error(\n `addon ${addon.name} declares app-js in its package.json with the illegal name \"${inAddonName}\". It must start with \"./\" to make it clear that it's relative to the addon`\n );\n }\n let prevEntry = engineModules.get(inEngineName);\n switch (prevEntry?.type) {\n case undefined:\n engineModules.set(inEngineName, {\n type: 'app-only',\n 'app-js': {\n specifier: reversePackageExports(addon.packageJSON, inAddonName),\n fromFile: addonConfig.canResolveFromFile,\n fromPackageName: addon.name,\n },\n });\n break;\n case 'app-only':\n case 'both':\n // first match wins, so this one is shadowed\n break;\n case 'fastboot-only':\n engineModules.set(inEngineName, {\n type: 'both',\n 'app-js': {\n specifier: reversePackageExports(addon.packageJSON, inAddonName),\n fromFile: addonConfig.canResolveFromFile,\n fromPackageName: addon.name,\n },\n 'fastboot-js': prevEntry['fastboot-js'],\n });\n break;\n }\n }\n }\n\n let fastbootJS = addon.meta['fastboot-js'];\n if (fastbootJS) {\n for (let [inEngineName, inAddonName] of Object.entries(fastbootJS)) {\n if (!inEngineName.startsWith('./')) {\n throw new Error(\n `addon ${addon.name} declares fastboot-js in its package.json with the illegal name \"${inEngineName}\". It must start with \"./\" to make it clear that it's relative to the app`\n );\n }\n if (!inAddonName.startsWith('./')) {\n throw new Error(\n `addon ${addon.name} declares fastboot-js in its package.json with the illegal name \"${inAddonName}\". It must start with \"./\" to make it clear that it's relative to the addon`\n );\n }\n let prevEntry = engineModules.get(inEngineName);\n switch (prevEntry?.type) {\n case undefined:\n engineModules.set(inEngineName, {\n type: 'fastboot-only',\n 'fastboot-js': {\n specifier: reversePackageExports(addon.packageJSON, inAddonName),\n fromFile: addonConfig.canResolveFromFile,\n fromPackageName: addon.name,\n },\n });\n break;\n case 'fastboot-only':\n case 'both':\n // first match wins, so this one is shadowed\n break;\n case 'app-only':\n engineModules.set(inEngineName, {\n type: 'both',\n 'fastboot-js': {\n specifier: reversePackageExports(addon.packageJSON, inAddonName),\n fromFile: addonConfig.canResolveFromFile,\n fromPackageName: addon.name,\n },\n 'app-js': prevEntry['app-js'],\n });\n break;\n }\n }\n }\n }\n result.set(engine.root, engineModules);\n }\n return result;\n }\n\n owningEngine(pkg: Package) {\n let owningEngine = this.options.engines.find(e =>\n pkg.isEngine() ? e.root === pkg.root : e.activeAddons.find(a => a.root === pkg.root)\n );\n if (!owningEngine) {\n throw new Error(\n `bug in @embroider/core/src/module-resolver: cannot figure out the owning engine for ${pkg.root}`\n );\n }\n return owningEngine;\n }\n\n private handleRewrittenPackages<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let requestingPkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!requestingPkg) {\n return request;\n }\n let packageName = getPackageName(request.specifier);\n if (!packageName) {\n // relative request\n return request;\n }\n\n let targetPkg: Package | undefined;\n if (packageName !== requestingPkg.name) {\n // non-relative, non-self request, so check if it aims at a rewritten addon\n try {\n targetPkg = this.packageCache.resolve(packageName, requestingPkg);\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n }\n }\n\n let originalRequestingPkg = this.packageCache.original(requestingPkg);\n let originalTargetPkg = targetPkg ? this.packageCache.original(targetPkg) : undefined;\n\n if (targetPkg && originalTargetPkg !== targetPkg) {\n // in this case it doesn't matter whether or not the requesting package\n // was moved. RewrittenPackageCache.resolve already took care of finding\n // the right target, and we redirect the request so it will look inside\n // that target.\n return logTransition(\n 'request targets a moved package',\n request,\n this.resolveWithinMovedPackage(request, targetPkg)\n );\n } else if (originalRequestingPkg !== requestingPkg) {\n if (targetPkg) {\n // in this case, the requesting package is moved but its destination is\n // not, so we need to rehome the request back to the original location.\n return logTransition(\n 'outbound request from moved package',\n request,\n request\n // setting meta here because if this fails, we want the fallback\n // logic to revert our rehome and continue from the *moved* package.\n .withMeta({ originalFromFile: request.fromFile })\n .rehome(resolve(originalRequestingPkg.root, 'package.json'))\n );\n } else {\n // requesting package was moved and we failed to find its target. We\n // can't let that accidentally succeed in the defaultResolve because we\n // could escape the moved package system.\n return logTransition('missing outbound request from moved package', request, request.notFound());\n }\n }\n\n return request;\n }\n\n private handleRenaming<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let packageName = getPackageName(request.specifier);\n if (!packageName) {\n return request;\n }\n\n let pkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!pkg || !pkg.isV2Ember()) {\n return request;\n }\n\n // real deps take precedence over renaming rules. That is, a package like\n // ember-source might provide backburner via module renaming, but if you\n // have an explicit dependency on backburner you should still get that real\n // copy.\n if (!pkg.hasDependency(packageName)) {\n for (let [candidate, replacement] of Object.entries(this.options.renameModules)) {\n if (candidate === request.specifier) {\n return logTransition(`renameModules`, request, request.alias(replacement));\n }\n for (let extension of this.options.resolvableExtensions) {\n if (candidate === request.specifier + '/index' + extension) {\n return logTransition(`renameModules`, request, request.alias(replacement));\n }\n if (candidate === request.specifier + extension) {\n return logTransition(`renameModules`, request, request.alias(replacement));\n }\n }\n }\n\n if (this.options.renamePackages[packageName]) {\n return logTransition(\n `renamePackages`,\n request,\n request.alias(request.specifier.replace(packageName, this.options.renamePackages[packageName]))\n );\n }\n }\n\n if (pkg.name === packageName) {\n // we found a self-import\n if (pkg.meta['auto-upgraded']) {\n // auto-upgraded packages always get automatically adjusted. They never\n // supported fancy package.json exports features so this direct mapping\n // to the root is always right.\n\n // \"my-package/foo\" -> \"./foo\"\n // \"my-package\" -> \"./\" (this can't be just \".\" because node's require.resolve doesn't reliable support that)\n let selfImportPath = request.specifier === pkg.name ? './' : request.specifier.replace(pkg.name, '.');\n\n return logTransition(\n `v1 self-import`,\n request,\n request.alias(selfImportPath).rehome(resolve(pkg.root, 'package.json'))\n );\n } else {\n // v2 packages are supposed to use package.json `exports` to enable\n // self-imports, but not all build tools actually follow the spec. This\n // is a workaround for badly behaved packagers.\n //\n // Known upstream bugs this works around:\n // - https://github.com/vitejs/vite/issues/9731\n if (pkg.packageJSON.exports) {\n let found = resolveExports(pkg.packageJSON, request.specifier, {\n browser: true,\n conditions: ['default', 'imports'],\n });\n if (found?.[0]) {\n return logTransition(\n `v2 self-import with package.json exports`,\n request,\n request.alias(found?.[0]).rehome(resolve(pkg.root, 'package.json'))\n );\n }\n }\n }\n }\n\n return request;\n }\n\n private resolveWithinMovedPackage<R extends ModuleRequest>(request: R, pkg: Package): R {\n let levels = ['..'];\n if (pkg.name.startsWith('@')) {\n levels.push('..');\n }\n let originalFromFile = request.fromFile;\n let newRequest = request.rehome(resolve(pkg.root, ...levels, 'moved-package-target.js'));\n\n if (newRequest === request) {\n return request;\n }\n\n // setting meta because if this fails, we want the fallback to pick up back\n // in the original requesting package.\n return newRequest.withMeta({ originalFromFile });\n }\n\n private preHandleExternal<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let { specifier, fromFile } = request;\n let pkg = this.packageCache.ownerOfFile(fromFile);\n if (!pkg || !pkg.isV2Ember()) {\n return request;\n }\n\n let packageName = getPackageName(specifier);\n if (!packageName) {\n // This is a relative import. We don't automatically externalize those\n // because it's rare, and by keeping them static we give better errors. But\n // we do allow them to be explicitly externalized by the package author (or\n // a compat adapter). In the metadata, they would be listed in\n // package-relative form, so we need to convert this specifier to that.\n let absoluteSpecifier = resolve(dirname(fromFile), specifier);\n\n if (!absoluteSpecifier.startsWith(pkg.root)) {\n // this relative path escape its package. So it's not really using\n // normal inter-package resolving and we should leave it alone. This\n // case comes up especially when babel transforms are trying to insert\n // references to runtime utilities, like we do in @embroider/macros.\n return logTransition('beforeResolve: relative path escapes its package', request);\n }\n\n let packageRelativeSpecifier = explicitRelative(pkg.root, absoluteSpecifier);\n if (isExplicitlyExternal(packageRelativeSpecifier, pkg)) {\n let publicSpecifier = absoluteSpecifier.replace(pkg.root, pkg.name);\n return this.external('beforeResolve', request, publicSpecifier);\n }\n\n // if the requesting file is in an addon's app-js, the relative request\n // should really be understood as a request for a module in the containing\n // engine\n let logicalLocation = this.reverseSearchAppTree(pkg, request.fromFile);\n if (logicalLocation) {\n return logTransition(\n 'beforeResolve: relative import in app-js',\n request,\n request\n .alias('./' + posix.join(dirname(logicalLocation.inAppName), request.specifier))\n // it's important that we're rehoming this to the root of the engine\n // (which we know really exists), and not to a subdir like\n // logicalLocation.inAppName (which might not physically exist),\n // because some environments (including node's require.resolve) will\n // refuse to do resolution from a notional path that doesn't\n // physically exist.\n .rehome(resolve(logicalLocation.owningEngine.root, 'package.json'))\n );\n }\n\n return request;\n }\n\n // absolute package imports can also be explicitly external based on their\n // full specifier name\n if (isExplicitlyExternal(specifier, pkg)) {\n return this.external('beforeResolve', request, specifier);\n }\n\n if (emberVirtualPackages.has(packageName) && !pkg.hasDependency(packageName)) {\n return this.external('beforeResolve emberVirtualPackages', request, specifier);\n }\n\n if (emberVirtualPeerDeps.has(packageName) && !pkg.hasDependency(packageName)) {\n // addons (whether auto-upgraded or not) may use the app's\n // emberVirtualPeerDeps, like \"@glimmer/component\" etc.\n let addon = this.locateActiveAddon(packageName);\n if (!addon) {\n throw new Error(\n `${pkg.name} is trying to import the emberVirtualPeerDep \"${packageName}\", but it seems to be missing`\n );\n }\n return logTransition(`emberVirtualPeerDeps`, request, request.rehome(addon.canResolveFromFile));\n }\n\n // if this file is part of an addon's app-js, it's really the logical\n // package to which it belongs (normally the app) that affects some policy\n // choices about what it can import\n let logicalPackage = this.logicalPackage(pkg, fromFile);\n\n if (logicalPackage.meta['auto-upgraded'] && !logicalPackage.hasDependency('ember-auto-import')) {\n try {\n let dep = this.packageCache.resolve(packageName, logicalPackage);\n if (!dep.isEmberPackage()) {\n // classic ember addons can only import non-ember dependencies if they\n // have ember-auto-import.\n return this.external('v1 package without auto-import', request, specifier);\n }\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n }\n }\n\n // assertions on what native v2 addons can import\n if (!pkg.meta['auto-upgraded']) {\n if (\n !pkg.meta['auto-upgraded'] &&\n !appImportInAppTree(pkg, logicalPackage, packageName) &&\n !reliablyResolvable(pkg, packageName)\n ) {\n throw new Error(\n `${pkg.name} is trying to import from ${packageName} but that is not one of its explicit dependencies`\n );\n }\n }\n return request;\n }\n\n private locateActiveAddon(packageName: string): { root: string; canResolveFromFile: string } | undefined {\n if (packageName === this.options.modulePrefix) {\n // the app itself is something that addon's can classically resolve if they know it's name.\n return {\n root: this.options.appRoot,\n canResolveFromFile: resolve(\n this.packageCache.maybeMoved(this.packageCache.get(this.options.appRoot)).root,\n 'package.json'\n ),\n };\n }\n for (let engine of this.options.engines) {\n for (let addon of engine.activeAddons) {\n if (addon.name === packageName) {\n return addon;\n }\n }\n }\n }\n\n private external<R extends ModuleRequest>(label: string, request: R, specifier: string): R {\n if (this.options.amdCompatibility === 'cjs') {\n let filename = virtualExternalCJSModule(specifier);\n return logTransition(label, request, request.virtualize(filename));\n } else if (this.options.amdCompatibility) {\n let entry = this.options.amdCompatibility.es.find(\n entry => entry[0] === specifier || entry[0] + '/index' === specifier\n );\n if (!entry && request.specifier === 'require') {\n entry = ['require', ['default', 'has']];\n }\n if (!entry) {\n throw new Error(\n `A module tried to resolve \"${request.specifier}\" and didn't find it (${label}).\n\n - Maybe a dependency declaration is missing?\n - Remember that v1 addons can only import non-Ember-addon NPM dependencies if they include ember-auto-import in their dependencies.\n - If this dependency is available in the AMD loader (because someone manually called \"define()\" for it), you can configure a shim like:\n\n amdCompatibility: {\n es: [\n [\"${request.specifier}\", [\"default\", \"yourNamedExportsGoHere\"]],\n ]\n }\n\n`\n );\n }\n let filename = virtualExternalESModule(specifier, entry[1]);\n return logTransition(label, request, request.virtualize(filename));\n } else {\n throw new Error(\n `Embroider's amdCompatibility option is disabled, but something tried to use it to access \"${request.specifier}\"`\n );\n }\n }\n\n private async fallbackResolve<R extends ModuleRequest>(request: R): Promise<R> {\n if (request.isVirtual) {\n throw new Error(\n 'Build tool bug detected! Fallback resolve should never see a virtual request. It is expected that the defaultResolve for your bundler has already resolved this request'\n );\n }\n\n if (request.specifier === '@embroider/macros') {\n // the macros package is always handled directly within babel (not\n // necessarily as a real resolvable package), so we should not mess with it.\n // It might not get compiled away until *after* our plugin has run, which is\n // why we need to know about it.\n return logTransition('fallback early exit', request);\n }\n\n if (compatPattern.test(request.specifier)) {\n // Some kinds of compat requests get rewritten into other things\n // deterministically. For example, \"#embroider_compat/helpers/whatever\"\n // means only \"the-current-engine/helpers/whatever\", and if that doesn't\n // actually exist it's that path that will show up as a missing import.\n //\n // But others have an ambiguous meaning. For example,\n // #embroider_compat/components/whatever can mean several different\n // things. If we're unable to find any of them, the actual\n // \"#embroider_compat\" request will fall through all the way to here.\n //\n // In that case, we don't want to externalize that failure. We know it's\n // not a classic runtime thing. It's better to let it be a build error\n // here.\n return request;\n }\n\n let pkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!pkg) {\n return logTransition('no identifiable owningPackage', request);\n }\n\n // meta.originalFromFile gets set when we want to try to rehome a request\n // but then come back to the original location here in the fallback when the\n // rehomed request fails\n let movedPkg = this.packageCache.maybeMoved(pkg);\n if (movedPkg !== pkg) {\n let originalFromFile = request.meta?.originalFromFile;\n if (typeof originalFromFile !== 'string') {\n throw new Error(`bug: embroider resolver's meta is not propagating`);\n }\n request = request.rehome(originalFromFile);\n pkg = movedPkg;\n }\n\n if (!pkg.isV2Ember()) {\n return logTransition('fallbackResolve: not in an ember package', request);\n }\n\n let packageName = getPackageName(request.specifier);\n if (!packageName) {\n // this is a relative import\n\n let withinEngine = this.engineConfig(pkg.name);\n if (withinEngine) {\n // it's a relative import inside an engine (which also means app), which\n // means we may need to satisfy the request via app tree merging.\n let appJSMatch = await this.searchAppTree(\n request,\n withinEngine,\n explicitRelative(pkg.root, resolve(dirname(request.fromFile), request.specifier))\n );\n if (appJSMatch) {\n return logTransition('fallbackResolve: relative appJsMatch', request, appJSMatch);\n } else {\n return logTransition('fallbackResolve: relative appJs search failure', request);\n }\n } else {\n // nothing else to do for relative imports\n return logTransition('fallbackResolve: relative failure', request);\n }\n }\n\n // auto-upgraded packages can fall back to the set of known active addons\n if (pkg.meta['auto-upgraded']) {\n let addon = this.locateActiveAddon(packageName);\n if (addon) {\n const rehomed = request.rehome(addon.canResolveFromFile);\n if (rehomed !== request) {\n return logTransition(`activeAddons`, request, rehomed);\n }\n }\n }\n\n let logicalLocation = this.reverseSearchAppTree(pkg, request.fromFile);\n if (logicalLocation) {\n // the requesting file is in an addon's appTree. We didn't succeed in\n // resolving this (non-relative) request from inside the actual addon, so\n // next try to resolve it from the corresponding logical location in the\n // app.\n return logTransition(\n 'fallbackResolve: retry from logical home of app-js file',\n request,\n // it might look more precise to rehome into logicalLocation.inAppName\n // rather than package.json. But that logical location may not actually\n // exist, and some systems (including node's require.resolve) will be\n // mad about trying to resolve from notional paths that don't really\n // exist.\n request.rehome(resolve(logicalLocation.owningEngine.root, 'package.json'))\n );\n }\n\n let targetingEngine = this.engineConfig(packageName);\n if (targetingEngine) {\n let appJSMatch = await this.searchAppTree(request, targetingEngine, request.specifier.replace(packageName, '.'));\n if (appJSMatch) {\n return logTransition('fallbackResolve: non-relative appJsMatch', request, appJSMatch);\n }\n }\n\n if (pkg.meta['auto-upgraded'] && (request.meta?.runtimeFallback ?? true)) {\n // auto-upgraded packages can fall back to attempting to find dependencies at\n // runtime. Native v2 packages can only get this behavior in the\n // isExplicitlyExternal case above because they need to explicitly ask for\n // externals.\n return this.external('v1 catch-all fallback', request, request.specifier);\n } else {\n // native v2 packages don't automatically externalize *everything* the way\n // auto-upgraded packages do, but they still externalize known and approved\n // ember virtual packages (like @ember/component)\n if (emberVirtualPackages.has(packageName)) {\n return this.external('emberVirtualPackages', request, request.specifier);\n }\n }\n\n // this is falling through with the original specifier which was\n // non-resolvable, which will presumably cause a static build error in stage3.\n return logTransition('fallbackResolve final exit', request);\n }\n\n private getEntryFromMergeMap(\n inEngineSpecifier: string,\n root: string\n ): { entry: MergeEntry; matched: string } | undefined {\n let entry: MergeEntry | undefined;\n for (let candidate of this.withResolvableExtensions(inEngineSpecifier)) {\n entry = this.mergeMap.get(root)?.get(candidate);\n if (entry) {\n return { entry, matched: candidate };\n }\n }\n }\n\n private *withResolvableExtensions(filename: string): Generator<string, void, void> {\n if (filename.match(/\\.(hbs|js|hbs\\.js)$/)) {\n yield filename;\n } else {\n for (let ext of ['.js', '.hbs.js', '.hbs']) {\n yield `${filename}${ext}`;\n }\n }\n }\n\n private async searchAppTree<R extends ModuleRequest>(\n request: R,\n engine: EngineConfig,\n inEngineSpecifier: string\n ): Promise<R | undefined> {\n let matched = this.getEntryFromMergeMap(inEngineSpecifier, engine.root);\n\n switch (matched?.entry.type) {\n case undefined:\n return undefined;\n case 'app-only':\n return request.alias(matched.entry['app-js'].specifier).rehome(matched.entry['app-js'].fromFile);\n case 'fastboot-only':\n return request.alias(matched.entry['fastboot-js'].specifier).rehome(matched.entry['fastboot-js'].fromFile);\n case 'both':\n let foundAppJS = await this.resolve(\n request.alias(matched.entry['app-js'].specifier).rehome(matched.entry['app-js'].fromFile).withMeta({\n runtimeFallback: false,\n })\n );\n if (foundAppJS.type !== 'found') {\n throw new Error(\n `${matched.entry['app-js'].fromPackageName} declared ${inEngineSpecifier} in packageJSON.ember-addon.app-js, but that module does not exist`\n );\n }\n let { names } = describeExports(readFileSync(foundAppJS.filename, 'utf8'), {});\n return request.virtualize(fastbootSwitch(matched.matched, resolve(engine.root, 'package.json'), names));\n }\n }\n\n // check whether the given file with the given owningPackage is an addon's\n // appTree, and if so return the notional location within the app (or owning\n // engine) that it \"logically\" lives at.\n private reverseSearchAppTree(\n owningPackage: Package,\n fromFile: string\n ): { owningEngine: EngineConfig; inAppName: string } | undefined {\n // if the requesting file is in an addon's app-js, the request should\n // really be understood as a request for a module in the containing engine\n if (owningPackage.isV2Addon()) {\n let sections = [owningPackage.meta['app-js'], owningPackage.meta['fastboot-js']];\n for (let section of sections) {\n if (section) {\n let fromPackageRelativePath = explicitRelative(owningPackage.root, fromFile);\n for (let [inAppName, inAddonName] of Object.entries(section)) {\n if (inAddonName === fromPackageRelativePath) {\n return { owningEngine: this.owningEngine(owningPackage), inAppName };\n }\n }\n }\n }\n }\n }\n\n // check if this file is resolvable as a global component, and if so return\n // its dasherized name\n reverseComponentLookup(filename: string): string | undefined {\n const owningPackage = this.packageCache.ownerOfFile(filename);\n if (!owningPackage?.isV2Ember()) {\n return;\n }\n let engineConfig = this.options.engines.find(e => e.root === owningPackage.root);\n if (engineConfig) {\n // we're directly inside an engine, so we're potentially resolvable as a\n // global component\n\n // this kind of mapping is not true in general for all packages, but it\n // *is* true for all classical engines (which includes apps) since they\n // don't support package.json `exports`. As for a future v2 engine or app:\n // this whole method is only relevant for implementing packageRules, which\n // should only be for classic stuff. v2 packages should do the right\n // things from the beginning and not need packageRules about themselves.\n let inAppName = explicitRelative(engineConfig.root, filename);\n\n return this.tryReverseComponent(engineConfig.packageName, inAppName);\n }\n\n let engineInfo = this.reverseSearchAppTree(owningPackage, filename);\n if (engineInfo) {\n // we're in some addon's app tree, so we're potentially resolvable as a\n // global component\n return this.tryReverseComponent(engineInfo.owningEngine.packageName, engineInfo.inAppName);\n }\n }\n\n private tryReverseComponent(inEngineName: string, relativePath: string): string | undefined {\n let extensionless = relativePath.replace(extensionsPattern(this.options.resolvableExtensions), '');\n let candidates = [...this.componentJSCandidates(inEngineName), ...this.componentTemplateCandidates(inEngineName)];\n for (let candidate of candidates) {\n if (extensionless.startsWith(`.${candidate.prefix}`) && extensionless.endsWith(candidate.suffix)) {\n return extensionless.slice(candidate.prefix.length + 1, extensionless.length - candidate.suffix.length);\n }\n }\n return undefined;\n }\n}\n\nfunction isExplicitlyExternal(specifier: string, fromPkg: V2Package): boolean {\n return Boolean(fromPkg.isV2Addon() && fromPkg.meta['externals'] && fromPkg.meta['externals'].includes(specifier));\n}\n\n// we don't want to allow things that resolve only by accident that are likely\n// to break in other setups. For example: import your dependencies'\n// dependencies, or importing your own name from within a monorepo (which will\n// work because of the symlinking) without setting up \"exports\" (which makes\n// your own name reliably resolvable)\nfunction reliablyResolvable(pkg: V2Package, packageName: string) {\n if (pkg.hasDependency(packageName)) {\n return true;\n }\n\n if (pkg.name === packageName && pkg.packageJSON.exports) {\n return true;\n }\n\n if (emberVirtualPeerDeps.has(packageName) || emberVirtualPackages.has(packageName)) {\n return true;\n }\n\n return false;\n}\n\n//\nfunction appImportInAppTree(inPackage: Package, inLogicalPackage: Package, importedPackageName: string): boolean {\n return inPackage !== inLogicalPackage && importedPackageName === inLogicalPackage.name;\n}\n"]}
1
+ {"version":3,"file":"module-resolver.js","sourceRoot":"","sources":["module-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n emberVirtualPackages,\n emberVirtualPeerDeps,\n extensionsPattern,\n packageName as getPackageName,\n packageName,\n} from '@embroider/shared-internals';\nimport { dirname, resolve, posix } from 'path';\nimport type { Package, V2Package } from '@embroider/shared-internals';\nimport { explicitRelative, RewrittenPackageCache } from '@embroider/shared-internals';\nimport makeDebug from 'debug';\nimport assertNever from 'assert-never';\nimport reversePackageExports from '@embroider/reverse-exports';\nimport { exports as resolveExports } from 'resolve.exports';\n\nimport {\n virtualExternalESModule,\n virtualExternalCJSModule,\n virtualPairComponent,\n fastbootSwitch,\n decodeFastbootSwitch,\n decodeImplicitModules,\n} from './virtual-content';\nimport { Memoize } from 'typescript-memoize';\nimport { describeExports } from './describe-exports';\nimport { readFileSync } from 'fs';\nimport type UserOptions from './options';\nimport { nodeResolve } from './node-resolve';\n\nconst debug = makeDebug('embroider:resolver');\n\n// Using a formatter makes this work lazy so nothing happens when we aren't\n// logging. It is unfortunate that formatters are a globally mutable config and\n// you can only use single character names, but oh well.\nmakeDebug.formatters.p = (s: string) => {\n let cwd = process.cwd();\n if (s.startsWith(cwd)) {\n return s.slice(cwd.length + 1);\n }\n return s;\n};\n\nfunction logTransition<R extends ModuleRequest>(reason: string, before: R, after: R = before): R {\n if (after.isVirtual) {\n debug(`[%s:virtualized] %s because %s\\n in %p`, before.debugType, before.specifier, reason, before.fromFile);\n } else if (after.resolvedTo) {\n debug(`[%s:resolvedTo] %s because %s\\n in %p`, before.debugType, before.specifier, reason, before.fromFile);\n } else if (before.specifier !== after.specifier) {\n if (before.fromFile !== after.fromFile) {\n debug(\n `[%s:aliased and rehomed] %s to %s\\n because %s\\n from %p\\n to %p`,\n before.debugType,\n before.specifier,\n after.specifier,\n reason,\n before.fromFile,\n after.fromFile\n );\n } else {\n debug(`[%s:aliased] %s to %s\\n because %s`, before.debugType, before.specifier, after.specifier, reason);\n }\n } else if (before.fromFile !== after.fromFile) {\n debug(\n `[%s:rehomed] %s, because %s\\n from %p\\n to %p`,\n before.debugType,\n before.specifier,\n reason,\n before.fromFile,\n after.fromFile\n );\n } else if (after.isNotFound) {\n debug(`[%s:not-found] %s because %s\\n in %p`, before.debugType, before.specifier, reason, before.fromFile);\n } else {\n debug(`[%s:unchanged] %s because %s\\n in %p`, before.debugType, before.specifier, reason, before.fromFile);\n }\n return after;\n}\n\nfunction isTerminal(request: ModuleRequest): boolean {\n return request.isVirtual || request.isNotFound || Boolean(request.resolvedTo);\n}\n\nexport interface Options {\n renamePackages: {\n [fromName: string]: string;\n };\n renameModules: {\n [fromName: string]: string;\n };\n resolvableExtensions: string[];\n appRoot: string;\n engines: EngineConfig[];\n modulePrefix: string;\n podModulePrefix?: string;\n amdCompatibility: Required<UserOptions['amdCompatibility']>;\n}\n\n// TODO: once we can remove the stage2 entrypoint this type can get streamlined\n// to the parts we actually need\nexport interface EngineConfig {\n packageName: string;\n activeAddons: { name: string; root: string; canResolveFromFile: string }[];\n fastbootFiles: { [appName: string]: { localFilename: string; shadowedFilename: string | undefined } };\n root: string;\n isLazy: boolean;\n}\n\ntype MergeEntry =\n | {\n type: 'app-only';\n 'app-js': {\n specifier: string;\n fromFile: string;\n fromPackageName: string;\n };\n }\n | {\n type: 'fastboot-only';\n 'fastboot-js': {\n specifier: string;\n fromFile: string;\n fromPackageName: string;\n };\n }\n | {\n type: 'both';\n 'app-js': {\n specifier: string;\n fromFile: string;\n fromPackageName: string;\n };\n 'fastboot-js': {\n specifier: string;\n fromFile: string;\n fromPackageName: string;\n };\n };\n\ntype MergeMap = Map</* engine root dir */ string, Map</* withinEngineModuleName */ string, MergeEntry>>;\n\nconst compatPattern = /#embroider_compat\\/(?<type>[^\\/]+)\\/(?<rest>.*)/;\n\nexport interface ModuleRequest<Res extends Resolution = Resolution> {\n readonly specifier: string;\n readonly fromFile: string;\n readonly isVirtual: boolean;\n readonly meta: Record<string, unknown> | undefined;\n readonly debugType: string;\n readonly isNotFound: boolean;\n readonly resolvedTo: Res | undefined;\n alias(newSpecifier: string): this;\n rehome(newFromFile: string): this;\n virtualize(virtualFilename: string): this;\n withMeta(meta: Record<string, any> | undefined): this;\n notFound(): this;\n defaultResolve(): Promise<Res>;\n resolveTo(resolution: Res): this;\n}\n\n// This is generic because different build systems have different ways of\n// representing a found module, and we just pass those values through.\nexport type Resolution<T = unknown, E = unknown> =\n | { type: 'found'; filename: string; isVirtual: boolean; result: T }\n\n // used for requests that are special and don't represent real files that\n // embroider can possibly do anything custom with.\n //\n // the motivating use case for introducing this is Vite's depscan which marks\n // almost everything as \"external\" as a way to tell esbuild to stop traversing\n // once it has been seen the first time.\n | { type: 'ignored'; result: T }\n\n // the important thing about this Resolution is that embroider should do its\n // fallback behaviors here.\n | { type: 'not_found'; err: E };\n\nexport class Resolver {\n constructor(readonly options: Options) {}\n\n private async beforeResolve<R extends ModuleRequest>(request: R): Promise<R> {\n if (request.specifier === '@embroider/macros') {\n // the macros package is always handled directly within babel (not\n // necessarily as a real resolvable package), so we should not mess with it.\n // It might not get compiled away until *after* our plugin has run, which is\n // why we need to know about it.\n return logTransition('early exit', request);\n }\n\n if (request.specifier === 'require') {\n return this.external('early require', request, request.specifier);\n }\n\n request = this.handleFastbootSwitch(request);\n request = await this.handleGlobalsCompat(request);\n request = this.handleImplicitModules(request);\n request = this.handleRenaming(request);\n // we expect the specifier to be app relative at this point - must be after handleRenaming\n request = this.generateFastbootSwitch(request);\n request = this.preHandleExternal(request);\n\n // this should probably stay the last step in beforeResolve, because it can\n // rehome requests to their un-rewritten locations, and for the most part we\n // want to be dealing with the rewritten packages.\n request = this.handleRewrittenPackages(request);\n return request;\n }\n\n // This encapsulates the whole resolving process. Given a `defaultResolve`\n // that calls your build system's normal module resolver, this does both pre-\n // and post-resolution adjustments as needed to implement our compatibility\n // rules.\n async resolve<ResolveResolution extends Resolution>(\n request: ModuleRequest<ResolveResolution>\n ): Promise<ResolveResolution> {\n request = await this.beforeResolve(request);\n if (request.resolvedTo) {\n return request.resolvedTo;\n }\n\n let resolution = await request.defaultResolve();\n\n switch (resolution.type) {\n case 'found':\n case 'ignored':\n return resolution;\n case 'not_found':\n break;\n default:\n throw assertNever(resolution);\n }\n let nextRequest = await this.fallbackResolve(request);\n if (nextRequest === request) {\n // no additional fallback is available.\n return resolution;\n }\n\n if (nextRequest.resolvedTo) {\n return nextRequest.resolvedTo;\n }\n\n if (nextRequest.fromFile === request.fromFile && nextRequest.specifier === request.specifier) {\n throw new Error(\n 'Bug Discovered! New request is not === original request but has the same fromFile and specifier. This will likely create a loop.'\n );\n }\n\n if (nextRequest.isVirtual || nextRequest.isNotFound) {\n // virtual and NotFound requests are terminal, there is no more\n // beforeResolve or fallbackResolve around them. The defaultResolve is\n // expected to know how to implement them.\n return nextRequest.defaultResolve();\n }\n\n return this.resolve(nextRequest);\n }\n\n // Use standard NodeJS resolving, with our required compatibility rules on\n // top. This is a convenience method for calling resolveSync with the\n // defaultResolve already configured to be \"do the normal node thing\".\n async nodeResolve(\n specifier: string,\n fromFile: string\n ): Promise<\n | { type: 'virtual'; filename: string; content: string }\n | { type: 'real'; filename: string }\n | { type: 'not_found'; err: Error }\n > {\n return nodeResolve(this, specifier, fromFile);\n }\n\n get packageCache() {\n return RewrittenPackageCache.shared('embroider', this.options.appRoot);\n }\n\n private logicalPackage(owningPackage: V2Package, file: string): V2Package {\n let logicalLocation = this.reverseSearchAppTree(owningPackage, file);\n if (logicalLocation) {\n let pkg = this.packageCache.get(logicalLocation.owningEngine.root);\n if (!pkg.isV2Ember()) {\n throw new Error(`bug: all engines should be v2 addons by the time we see them here`);\n }\n return pkg;\n }\n return owningPackage;\n }\n\n private generateFastbootSwitch<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let pkg = this.packageCache.ownerOfFile(request.fromFile);\n\n if (!pkg) {\n return request;\n }\n\n if (packageName(request.specifier)) {\n // not a relative request, and we're assuming all within-engine requests\n // are relative by this point due to `v1 self-import` which happens\n // earlier\n return request;\n }\n\n let engineConfig = this.engineConfig(pkg.name);\n let appRelativePath = explicitRelative(pkg.root, resolve(dirname(request.fromFile), request.specifier));\n if (engineConfig) {\n for (let candidate of this.withResolvableExtensions(appRelativePath)) {\n let fastbootFile = engineConfig.fastbootFiles[candidate];\n if (fastbootFile) {\n if (fastbootFile.shadowedFilename) {\n let { names } = describeExports(readFileSync(resolve(pkg.root, fastbootFile.shadowedFilename), 'utf8'), {\n configFile: false,\n });\n let switchFile = fastbootSwitch(candidate, resolve(pkg.root, 'package.json'), names);\n if (switchFile === request.fromFile) {\n return logTransition('internal lookup from fastbootSwitch', request);\n } else {\n return logTransition('shadowed app fastboot', request, request.virtualize(switchFile));\n }\n } else {\n return logTransition(\n 'unshadowed app fastboot',\n request,\n request.alias(fastbootFile.localFilename).rehome(resolve(pkg.root, 'package.json'))\n );\n }\n }\n }\n }\n\n return request;\n }\n\n private handleFastbootSwitch<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let match = decodeFastbootSwitch(request.fromFile);\n if (!match) {\n return request;\n }\n\n let section: 'app-js' | 'fastboot-js' | undefined;\n if (request.specifier === './browser') {\n section = 'app-js';\n } else if (request.specifier === './fastboot') {\n section = 'fastboot-js';\n }\n\n if (!section) {\n return logTransition('non-special import in fastboot switch', request);\n }\n\n let pkg = this.packageCache.ownerOfFile(match.filename);\n if (pkg) {\n let rel = explicitRelative(pkg.root, match.filename);\n\n let engineConfig = this.engineConfig(pkg.name);\n if (engineConfig) {\n let fastbootFile = engineConfig.fastbootFiles[rel];\n if (fastbootFile && fastbootFile.shadowedFilename) {\n let targetFile: string;\n if (section === 'app-js') {\n targetFile = fastbootFile.shadowedFilename;\n } else {\n targetFile = fastbootFile.localFilename;\n }\n return logTransition(\n 'matched app entry',\n request,\n // deliberately not using rehome because we want\n // generateFastbootSwitch to see that this request is coming *from*\n // a fastboot switch so it won't cycle back around. Instead we make\n // the targetFile relative to the fromFile that we already have.\n request.alias(explicitRelative(dirname(request.fromFile), resolve(pkg.root, targetFile)))\n );\n }\n }\n\n let entry = this.getEntryFromMergeMap(rel, pkg.root)?.entry;\n if (entry?.type === 'both') {\n return logTransition(\n 'matched addon entry',\n request,\n request.alias(entry[section].specifier).rehome(entry[section].fromFile)\n );\n }\n }\n\n return logTransition('failed to match in fastboot switch', request);\n }\n\n private handleImplicitModules<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let im = decodeImplicitModules(request.specifier);\n if (!im) {\n return request;\n }\n\n let pkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!pkg?.isV2Ember()) {\n throw new Error(`bug: found implicit modules import in non-ember package at ${request.fromFile}`);\n }\n\n let packageName = getPackageName(im.fromFile);\n if (packageName) {\n let dep = this.packageCache.resolve(packageName, pkg);\n return logTransition(\n `dep's implicit modules`,\n request,\n request.virtualize(resolve(dep.root, `-embroider-${im.type}.js`))\n );\n } else {\n return logTransition(\n `own implicit modules`,\n request,\n request.virtualize(resolve(pkg.root, `-embroider-${im.type}.js`))\n );\n }\n }\n\n private async handleGlobalsCompat<R extends ModuleRequest>(request: R): Promise<R> {\n if (isTerminal(request)) {\n return request;\n }\n let match = compatPattern.exec(request.specifier);\n if (!match) {\n return request;\n }\n let { type, rest } = match.groups!;\n let fromPkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!fromPkg?.isV2Ember()) {\n return request;\n }\n let engine = this.owningEngine(fromPkg);\n\n switch (type) {\n case 'helpers':\n return this.resolveHelper(rest, engine, request);\n case 'components':\n return this.resolveComponent(rest, engine, request);\n case 'modifiers':\n return this.resolveModifier(rest, engine, request);\n case 'ambiguous':\n return this.resolveHelperOrComponent(rest, engine, request);\n default:\n throw new Error(`bug: unexepected #embroider_compat specifier: ${request.specifier}`);\n }\n }\n\n private resolveHelper<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): R {\n let target = this.parseGlobalPath(path, inEngine);\n return logTransition(\n 'resolveHelper',\n request,\n request.alias(`${target.packageName}/helpers/${target.memberName}`).rehome(resolve(inEngine.root, 'package.json'))\n );\n }\n\n private async resolveComponent<R extends ModuleRequest>(\n path: string,\n inEngine: EngineConfig,\n request: R\n ): Promise<R> {\n let target = this.parseGlobalPath(path, inEngine);\n\n let hbsModule: Resolution | null = null;\n let jsModule: Resolution | null = null;\n\n // first, the various places our template might be.\n for (let candidate of this.componentTemplateCandidates(target.packageName)) {\n let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;\n\n let resolution = await this.resolve(\n request.alias(candidateSpecifier).rehome(target.from).withMeta({\n runtimeFallback: false,\n })\n );\n\n if (resolution.type === 'found') {\n hbsModule = resolution;\n break;\n }\n }\n\n // then the various places our javascript might be.\n for (let candidate of this.componentJSCandidates(target.packageName)) {\n let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;\n\n let resolution = await this.resolve(\n request.alias(candidateSpecifier).rehome(target.from).withMeta({\n runtimeFallback: false,\n })\n );\n\n // .hbs is a resolvable extension for us, so we need to exclude it here.\n // It matches as a priority lower than .js, so finding an .hbs means\n // there's definitely not a .js.\n if (resolution.type === 'found' && !resolution.filename.endsWith('.hbs')) {\n jsModule = resolution;\n break;\n }\n }\n\n if (hbsModule) {\n return logTransition(\n `resolveComponent found legacy HBS`,\n request,\n request.virtualize(virtualPairComponent(hbsModule.filename, jsModule?.filename))\n );\n } else if (jsModule) {\n return logTransition(`resolving to resolveComponent found only JS`, request, request.resolveTo(jsModule));\n } else {\n return logTransition(`resolveComponent failed`, request);\n }\n }\n\n private async resolveHelperOrComponent<R extends ModuleRequest>(\n path: string,\n inEngine: EngineConfig,\n request: R\n ): Promise<R> {\n // resolveHelper just rewrites our request to one that should target the\n // component, so here to resolve the ambiguity we need to actually resolve\n // that candidate to see if it works.\n let helperCandidate = this.resolveHelper(path, inEngine, request);\n let helperMatch = await this.resolve(\n request.alias(helperCandidate.specifier).rehome(helperCandidate.fromFile).withMeta({\n runtimeFallback: false,\n })\n );\n\n if (helperMatch.type === 'found') {\n return logTransition('resolve to ambiguous case matched a helper', request, request.resolveTo(helperMatch));\n }\n\n // unlike resolveHelper, resolveComponent already does pre-resolution in\n // order to deal with its own internal ambiguity around JS vs HBS vs\n // colocation.≥\n let componentMatch = await this.resolveComponent(path, inEngine, request);\n if (componentMatch !== request) {\n return logTransition('ambiguous case matched a cmoponent', request, componentMatch);\n }\n\n // this is the hard failure case -- we were supposed to find something and\n // didn't. Let the normal resolution process progress so the user gets a\n // normal build error.\n return logTransition('ambiguous case failing', request);\n }\n\n private resolveModifier<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): R {\n let target = this.parseGlobalPath(path, inEngine);\n return logTransition(\n 'resolveModifier',\n request,\n request\n .alias(`${target.packageName}/modifiers/${target.memberName}`)\n .rehome(resolve(inEngine.root, 'package.json'))\n );\n }\n\n private *componentTemplateCandidates(inPackageName: string) {\n yield { prefix: '/templates/components/', suffix: '' };\n yield { prefix: '/components/', suffix: '/template' };\n\n let pods = this.podPrefix(inPackageName);\n if (pods) {\n yield { prefix: `${pods}/components/`, suffix: '/template' };\n }\n }\n\n private *componentJSCandidates(inPackageName: string) {\n yield { prefix: '/components/', suffix: '' };\n yield { prefix: '/components/', suffix: '/index' };\n yield { prefix: '/components/', suffix: '/component' };\n\n let pods = this.podPrefix(inPackageName);\n if (pods) {\n yield { prefix: `${pods}/components/`, suffix: '/component' };\n }\n }\n\n private podPrefix(targetPackageName: string) {\n if (targetPackageName === this.options.modulePrefix && this.options.podModulePrefix) {\n if (!this.options.podModulePrefix.startsWith(this.options.modulePrefix)) {\n throw new Error(\n `Your podModulePrefix (${this.options.podModulePrefix}) does not start with your app module prefix (${this.options.modulePrefix}). Not gonna support that silliness.`\n );\n }\n return this.options.podModulePrefix.slice(this.options.modulePrefix.length);\n }\n }\n\n // for paths that come from non-strict templates\n private parseGlobalPath(path: string, inEngine: EngineConfig) {\n let parts = path.split('@');\n if (parts.length > 1 && parts[0].length > 0) {\n return { packageName: parts[0], memberName: parts[1], from: resolve(inEngine.root, 'package.json') };\n } else {\n return { packageName: inEngine.packageName, memberName: path, from: resolve(inEngine.root, 'package.json') };\n }\n }\n\n private engineConfig(packageName: string): EngineConfig | undefined {\n return this.options.engines.find(e => e.packageName === packageName);\n }\n\n // This is where we figure out how all the classic treeForApp merging bottoms\n // out.\n @Memoize()\n private get mergeMap(): MergeMap {\n let result: MergeMap = new Map();\n for (let engine of this.options.engines) {\n let engineModules: Map<string, MergeEntry> = new Map();\n for (let addonConfig of engine.activeAddons) {\n let addon = this.packageCache.get(addonConfig.root);\n if (!addon.isV2Addon()) {\n continue;\n }\n\n let appJS = addon.meta['app-js'];\n if (appJS) {\n for (let [inEngineName, inAddonName] of Object.entries(appJS)) {\n if (!inEngineName.startsWith('./')) {\n throw new Error(\n `addon ${addon.name} declares app-js in its package.json with the illegal name \"${inEngineName}\". It must start with \"./\" to make it clear that it's relative to the app`\n );\n }\n if (!inAddonName.startsWith('./')) {\n throw new Error(\n `addon ${addon.name} declares app-js in its package.json with the illegal name \"${inAddonName}\". It must start with \"./\" to make it clear that it's relative to the addon`\n );\n }\n let prevEntry = engineModules.get(inEngineName);\n switch (prevEntry?.type) {\n case undefined:\n engineModules.set(inEngineName, {\n type: 'app-only',\n 'app-js': {\n specifier: reversePackageExports(addon.packageJSON, inAddonName),\n fromFile: addonConfig.canResolveFromFile,\n fromPackageName: addon.name,\n },\n });\n break;\n case 'app-only':\n case 'both':\n // first match wins, so this one is shadowed\n break;\n case 'fastboot-only':\n engineModules.set(inEngineName, {\n type: 'both',\n 'app-js': {\n specifier: reversePackageExports(addon.packageJSON, inAddonName),\n fromFile: addonConfig.canResolveFromFile,\n fromPackageName: addon.name,\n },\n 'fastboot-js': prevEntry['fastboot-js'],\n });\n break;\n }\n }\n }\n\n let fastbootJS = addon.meta['fastboot-js'];\n if (fastbootJS) {\n for (let [inEngineName, inAddonName] of Object.entries(fastbootJS)) {\n if (!inEngineName.startsWith('./')) {\n throw new Error(\n `addon ${addon.name} declares fastboot-js in its package.json with the illegal name \"${inEngineName}\". It must start with \"./\" to make it clear that it's relative to the app`\n );\n }\n if (!inAddonName.startsWith('./')) {\n throw new Error(\n `addon ${addon.name} declares fastboot-js in its package.json with the illegal name \"${inAddonName}\". It must start with \"./\" to make it clear that it's relative to the addon`\n );\n }\n let prevEntry = engineModules.get(inEngineName);\n switch (prevEntry?.type) {\n case undefined:\n engineModules.set(inEngineName, {\n type: 'fastboot-only',\n 'fastboot-js': {\n specifier: reversePackageExports(addon.packageJSON, inAddonName),\n fromFile: addonConfig.canResolveFromFile,\n fromPackageName: addon.name,\n },\n });\n break;\n case 'fastboot-only':\n case 'both':\n // first match wins, so this one is shadowed\n break;\n case 'app-only':\n engineModules.set(inEngineName, {\n type: 'both',\n 'fastboot-js': {\n specifier: reversePackageExports(addon.packageJSON, inAddonName),\n fromFile: addonConfig.canResolveFromFile,\n fromPackageName: addon.name,\n },\n 'app-js': prevEntry['app-js'],\n });\n break;\n }\n }\n }\n }\n result.set(engine.root, engineModules);\n }\n return result;\n }\n\n owningEngine(pkg: Package) {\n let owningEngine = this.options.engines.find(e =>\n pkg.isEngine() ? e.root === pkg.root : e.activeAddons.find(a => a.root === pkg.root)\n );\n if (!owningEngine) {\n throw new Error(\n `bug in @embroider/core/src/module-resolver: cannot figure out the owning engine for ${pkg.root}`\n );\n }\n return owningEngine;\n }\n\n private handleRewrittenPackages<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let requestingPkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!requestingPkg) {\n return request;\n }\n let packageName = getPackageName(request.specifier);\n if (!packageName) {\n // relative request\n return request;\n }\n\n let targetPkg: Package | undefined;\n if (packageName !== requestingPkg.name) {\n // non-relative, non-self request, so check if it aims at a rewritten addon\n try {\n targetPkg = this.packageCache.resolve(packageName, requestingPkg);\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n }\n }\n\n let originalRequestingPkg = this.packageCache.original(requestingPkg);\n let originalTargetPkg = targetPkg ? this.packageCache.original(targetPkg) : undefined;\n\n if (targetPkg && originalTargetPkg !== targetPkg) {\n // in this case it doesn't matter whether or not the requesting package\n // was moved. RewrittenPackageCache.resolve already took care of finding\n // the right target, and we redirect the request so it will look inside\n // that target.\n return logTransition(\n 'request targets a moved package',\n request,\n this.resolveWithinMovedPackage(request, targetPkg)\n );\n } else if (originalRequestingPkg !== requestingPkg) {\n if (targetPkg) {\n // in this case, the requesting package is moved but its destination is\n // not, so we need to rehome the request back to the original location.\n return logTransition(\n 'outbound request from moved package',\n request,\n request\n // setting meta here because if this fails, we want the fallback\n // logic to revert our rehome and continue from the *moved* package.\n .withMeta({ originalFromFile: request.fromFile })\n .rehome(resolve(originalRequestingPkg.root, 'package.json'))\n );\n } else {\n // requesting package was moved and we failed to find its target. We\n // can't let that accidentally succeed in the defaultResolve because we\n // could escape the moved package system.\n return logTransition('missing outbound request from moved package', request, request.notFound());\n }\n }\n\n return request;\n }\n\n private handleRenaming<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let packageName = getPackageName(request.specifier);\n if (!packageName) {\n return request;\n }\n\n let pkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!pkg || !pkg.isV2Ember()) {\n return request;\n }\n\n // real deps take precedence over renaming rules. That is, a package like\n // ember-source might provide backburner via module renaming, but if you\n // have an explicit dependency on backburner you should still get that real\n // copy.\n if (!pkg.hasDependency(packageName)) {\n for (let [candidate, replacement] of Object.entries(this.options.renameModules)) {\n if (candidate === request.specifier) {\n return logTransition(`renameModules`, request, request.alias(replacement));\n }\n for (let extension of this.options.resolvableExtensions) {\n if (candidate === request.specifier + '/index' + extension) {\n return logTransition(`renameModules`, request, request.alias(replacement));\n }\n if (candidate === request.specifier + extension) {\n return logTransition(`renameModules`, request, request.alias(replacement));\n }\n }\n }\n\n if (this.options.renamePackages[packageName]) {\n return logTransition(\n `renamePackages`,\n request,\n request.alias(request.specifier.replace(packageName, this.options.renamePackages[packageName]))\n );\n }\n }\n\n if (pkg.name === packageName) {\n // we found a self-import\n if (pkg.meta['auto-upgraded']) {\n // auto-upgraded packages always get automatically adjusted. They never\n // supported fancy package.json exports features so this direct mapping\n // to the root is always right.\n\n // \"my-package/foo\" -> \"./foo\"\n // \"my-package\" -> \"./\" (this can't be just \".\" because node's require.resolve doesn't reliable support that)\n let selfImportPath = request.specifier === pkg.name ? './' : request.specifier.replace(pkg.name, '.');\n\n return logTransition(\n `v1 self-import`,\n request,\n request.alias(selfImportPath).rehome(resolve(pkg.root, 'package.json'))\n );\n } else {\n // v2 packages are supposed to use package.json `exports` to enable\n // self-imports, but not all build tools actually follow the spec. This\n // is a workaround for badly behaved packagers.\n //\n // Known upstream bugs this works around:\n // - https://github.com/vitejs/vite/issues/9731\n if (pkg.packageJSON.exports) {\n let found = resolveExports(pkg.packageJSON, request.specifier, {\n browser: true,\n conditions: ['default', 'imports'],\n });\n if (found?.[0]) {\n return logTransition(\n `v2 self-import with package.json exports`,\n request,\n request.alias(found?.[0]).rehome(resolve(pkg.root, 'package.json'))\n );\n }\n }\n }\n }\n\n return request;\n }\n\n private resolveWithinMovedPackage<R extends ModuleRequest>(request: R, pkg: Package): R {\n let levels = ['..'];\n if (pkg.name.startsWith('@')) {\n levels.push('..');\n }\n let originalFromFile = request.fromFile;\n let newRequest = request.rehome(resolve(pkg.root, ...levels, 'moved-package-target.js'));\n\n if (newRequest === request) {\n return request;\n }\n\n // setting meta because if this fails, we want the fallback to pick up back\n // in the original requesting package.\n return newRequest.withMeta({ originalFromFile });\n }\n\n private preHandleExternal<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let { specifier, fromFile } = request;\n let pkg = this.packageCache.ownerOfFile(fromFile);\n if (!pkg || !pkg.isV2Ember()) {\n return request;\n }\n\n let packageName = getPackageName(specifier);\n if (!packageName) {\n // This is a relative import. We don't automatically externalize those\n // because it's rare, and by keeping them static we give better errors. But\n // we do allow them to be explicitly externalized by the package author (or\n // a compat adapter). In the metadata, they would be listed in\n // package-relative form, so we need to convert this specifier to that.\n let absoluteSpecifier = resolve(dirname(fromFile), specifier);\n\n if (!absoluteSpecifier.startsWith(pkg.root)) {\n // this relative path escape its package. So it's not really using\n // normal inter-package resolving and we should leave it alone. This\n // case comes up especially when babel transforms are trying to insert\n // references to runtime utilities, like we do in @embroider/macros.\n return logTransition('beforeResolve: relative path escapes its package', request);\n }\n\n let packageRelativeSpecifier = explicitRelative(pkg.root, absoluteSpecifier);\n if (isExplicitlyExternal(packageRelativeSpecifier, pkg)) {\n let publicSpecifier = absoluteSpecifier.replace(pkg.root, pkg.name);\n return this.external('beforeResolve', request, publicSpecifier);\n }\n\n // if the requesting file is in an addon's app-js, the relative request\n // should really be understood as a request for a module in the containing\n // engine\n let logicalLocation = this.reverseSearchAppTree(pkg, request.fromFile);\n if (logicalLocation) {\n return logTransition(\n 'beforeResolve: relative import in app-js',\n request,\n request\n .alias('./' + posix.join(dirname(logicalLocation.inAppName), request.specifier))\n // it's important that we're rehoming this to the root of the engine\n // (which we know really exists), and not to a subdir like\n // logicalLocation.inAppName (which might not physically exist),\n // because some environments (including node's require.resolve) will\n // refuse to do resolution from a notional path that doesn't\n // physically exist.\n .rehome(resolve(logicalLocation.owningEngine.root, 'package.json'))\n );\n }\n\n return request;\n }\n\n // absolute package imports can also be explicitly external based on their\n // full specifier name\n if (isExplicitlyExternal(specifier, pkg)) {\n return this.external('beforeResolve', request, specifier);\n }\n\n if (emberVirtualPackages.has(packageName) && !pkg.hasDependency(packageName)) {\n return this.external('beforeResolve emberVirtualPackages', request, specifier);\n }\n\n if (emberVirtualPeerDeps.has(packageName) && !pkg.hasDependency(packageName)) {\n // addons (whether auto-upgraded or not) may use the app's\n // emberVirtualPeerDeps, like \"@glimmer/component\" etc.\n let addon = this.locateActiveAddon(packageName);\n if (!addon) {\n throw new Error(\n `${pkg.name} is trying to import the emberVirtualPeerDep \"${packageName}\", but it seems to be missing`\n );\n }\n return logTransition(`emberVirtualPeerDeps`, request, request.rehome(addon.canResolveFromFile));\n }\n\n // if this file is part of an addon's app-js, it's really the logical\n // package to which it belongs (normally the app) that affects some policy\n // choices about what it can import\n let logicalPackage = this.logicalPackage(pkg, fromFile);\n\n if (logicalPackage.meta['auto-upgraded'] && !logicalPackage.hasDependency('ember-auto-import')) {\n try {\n let dep = this.packageCache.resolve(packageName, logicalPackage);\n if (!dep.isEmberPackage()) {\n // classic ember addons can only import non-ember dependencies if they\n // have ember-auto-import.\n return this.external('v1 package without auto-import', request, specifier);\n }\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n }\n }\n\n // assertions on what native v2 addons can import\n if (!pkg.meta['auto-upgraded']) {\n if (\n !pkg.meta['auto-upgraded'] &&\n !appImportInAppTree(pkg, logicalPackage, packageName) &&\n !reliablyResolvable(pkg, packageName)\n ) {\n throw new Error(\n `${pkg.name} is trying to import from ${packageName} but that is not one of its explicit dependencies`\n );\n }\n }\n return request;\n }\n\n private locateActiveAddon(packageName: string): { root: string; canResolveFromFile: string } | undefined {\n if (packageName === this.options.modulePrefix) {\n // the app itself is something that addon's can classically resolve if they know it's name.\n return {\n root: this.options.appRoot,\n canResolveFromFile: resolve(\n this.packageCache.maybeMoved(this.packageCache.get(this.options.appRoot)).root,\n 'package.json'\n ),\n };\n }\n for (let engine of this.options.engines) {\n for (let addon of engine.activeAddons) {\n if (addon.name === packageName) {\n return addon;\n }\n }\n }\n }\n\n private external<R extends ModuleRequest>(label: string, request: R, specifier: string): R {\n if (this.options.amdCompatibility === 'cjs') {\n let filename = virtualExternalCJSModule(specifier);\n return logTransition(label, request, request.virtualize(filename));\n } else if (this.options.amdCompatibility) {\n let entry = this.options.amdCompatibility.es.find(\n entry => entry[0] === specifier || entry[0] + '/index' === specifier\n );\n if (!entry && request.specifier === 'require') {\n entry = ['require', ['default', 'has']];\n }\n if (!entry) {\n throw new Error(\n `A module tried to resolve \"${request.specifier}\" and didn't find it (${label}).\n\n - Maybe a dependency declaration is missing?\n - Remember that v1 addons can only import non-Ember-addon NPM dependencies if they include ember-auto-import in their dependencies.\n - If this dependency is available in the AMD loader (because someone manually called \"define()\" for it), you can configure a shim like:\n\n amdCompatibility: {\n es: [\n [\"${request.specifier}\", [\"default\", \"yourNamedExportsGoHere\"]],\n ]\n }\n\n`\n );\n }\n let filename = virtualExternalESModule(specifier, entry[1]);\n return logTransition(label, request, request.virtualize(filename));\n } else {\n throw new Error(\n `Embroider's amdCompatibility option is disabled, but something tried to use it to access \"${request.specifier}\"`\n );\n }\n }\n\n private async fallbackResolve<R extends ModuleRequest>(request: R): Promise<R> {\n if (request.isVirtual) {\n throw new Error(\n 'Build tool bug detected! Fallback resolve should never see a virtual request. It is expected that the defaultResolve for your bundler has already resolved this request'\n );\n }\n\n if (request.specifier === '@embroider/macros') {\n // the macros package is always handled directly within babel (not\n // necessarily as a real resolvable package), so we should not mess with it.\n // It might not get compiled away until *after* our plugin has run, which is\n // why we need to know about it.\n return logTransition('fallback early exit', request);\n }\n\n if (compatPattern.test(request.specifier)) {\n // Some kinds of compat requests get rewritten into other things\n // deterministically. For example, \"#embroider_compat/helpers/whatever\"\n // means only \"the-current-engine/helpers/whatever\", and if that doesn't\n // actually exist it's that path that will show up as a missing import.\n //\n // But others have an ambiguous meaning. For example,\n // #embroider_compat/components/whatever can mean several different\n // things. If we're unable to find any of them, the actual\n // \"#embroider_compat\" request will fall through all the way to here.\n //\n // In that case, we don't want to externalize that failure. We know it's\n // not a classic runtime thing. It's better to let it be a build error\n // here.\n return request;\n }\n\n let pkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!pkg) {\n return logTransition('no identifiable owningPackage', request);\n }\n\n // meta.originalFromFile gets set when we want to try to rehome a request\n // but then come back to the original location here in the fallback when the\n // rehomed request fails\n let movedPkg = this.packageCache.maybeMoved(pkg);\n if (movedPkg !== pkg) {\n let originalFromFile = request.meta?.originalFromFile;\n if (typeof originalFromFile !== 'string') {\n throw new Error(`bug: embroider resolver's meta is not propagating`);\n }\n request = request.rehome(originalFromFile);\n pkg = movedPkg;\n }\n\n if (!pkg.isV2Ember()) {\n return logTransition('fallbackResolve: not in an ember package', request);\n }\n\n let packageName = getPackageName(request.specifier);\n if (!packageName) {\n // this is a relative import\n\n let withinEngine = this.engineConfig(pkg.name);\n if (withinEngine) {\n // it's a relative import inside an engine (which also means app), which\n // means we may need to satisfy the request via app tree merging.\n let appJSMatch = await this.searchAppTree(\n request,\n withinEngine,\n explicitRelative(pkg.root, resolve(dirname(request.fromFile), request.specifier))\n );\n if (appJSMatch) {\n return logTransition('fallbackResolve: relative appJsMatch', request, appJSMatch);\n } else {\n return logTransition('fallbackResolve: relative appJs search failure', request);\n }\n } else {\n // nothing else to do for relative imports\n return logTransition('fallbackResolve: relative failure', request);\n }\n }\n\n // auto-upgraded packages can fall back to the set of known active addons\n if (pkg.meta['auto-upgraded']) {\n let addon = this.locateActiveAddon(packageName);\n if (addon) {\n const rehomed = request.rehome(addon.canResolveFromFile);\n if (rehomed !== request) {\n return logTransition(`activeAddons`, request, rehomed);\n }\n }\n }\n\n let logicalLocation = this.reverseSearchAppTree(pkg, request.fromFile);\n if (logicalLocation) {\n // the requesting file is in an addon's appTree. We didn't succeed in\n // resolving this (non-relative) request from inside the actual addon, so\n // next try to resolve it from the corresponding logical location in the\n // app.\n return logTransition(\n 'fallbackResolve: retry from logical home of app-js file',\n request,\n // it might look more precise to rehome into logicalLocation.inAppName\n // rather than package.json. But that logical location may not actually\n // exist, and some systems (including node's require.resolve) will be\n // mad about trying to resolve from notional paths that don't really\n // exist.\n request.rehome(resolve(logicalLocation.owningEngine.root, 'package.json'))\n );\n }\n\n let targetingEngine = this.engineConfig(packageName);\n if (targetingEngine) {\n let appJSMatch = await this.searchAppTree(request, targetingEngine, request.specifier.replace(packageName, '.'));\n if (appJSMatch) {\n return logTransition('fallbackResolve: non-relative appJsMatch', request, appJSMatch);\n }\n }\n\n if (pkg.meta['auto-upgraded'] && (request.meta?.runtimeFallback ?? true)) {\n // auto-upgraded packages can fall back to attempting to find dependencies at\n // runtime. Native v2 packages can only get this behavior in the\n // isExplicitlyExternal case above because they need to explicitly ask for\n // externals.\n return this.external('v1 catch-all fallback', request, request.specifier);\n } else {\n // native v2 packages don't automatically externalize *everything* the way\n // auto-upgraded packages do, but they still externalize known and approved\n // ember virtual packages (like @ember/component)\n if (emberVirtualPackages.has(packageName)) {\n return this.external('emberVirtualPackages', request, request.specifier);\n }\n }\n\n // this is falling through with the original specifier which was\n // non-resolvable, which will presumably cause a static build error in stage3.\n return logTransition('fallbackResolve final exit', request);\n }\n\n private getEntryFromMergeMap(\n inEngineSpecifier: string,\n root: string\n ): { entry: MergeEntry; matched: string } | undefined {\n let entry: MergeEntry | undefined;\n for (let candidate of this.withResolvableExtensions(inEngineSpecifier)) {\n entry = this.mergeMap.get(root)?.get(candidate);\n if (entry) {\n return { entry, matched: candidate };\n }\n }\n }\n\n private *withResolvableExtensions(filename: string): Generator<string, void, void> {\n if (filename.match(/\\.(hbs|js|hbs\\.js)$/)) {\n yield filename;\n } else {\n for (let ext of ['.js', '.hbs.js', '.hbs']) {\n yield `${filename}${ext}`;\n }\n }\n }\n\n private async searchAppTree<R extends ModuleRequest>(\n request: R,\n engine: EngineConfig,\n inEngineSpecifier: string\n ): Promise<R | undefined> {\n let matched = this.getEntryFromMergeMap(inEngineSpecifier, engine.root);\n\n switch (matched?.entry.type) {\n case undefined:\n return undefined;\n case 'app-only':\n return request.alias(matched.entry['app-js'].specifier).rehome(matched.entry['app-js'].fromFile);\n case 'fastboot-only':\n return request.alias(matched.entry['fastboot-js'].specifier).rehome(matched.entry['fastboot-js'].fromFile);\n case 'both':\n let foundAppJS = await this.resolve(\n request.alias(matched.entry['app-js'].specifier).rehome(matched.entry['app-js'].fromFile).withMeta({\n runtimeFallback: false,\n })\n );\n if (foundAppJS.type !== 'found') {\n throw new Error(\n `${matched.entry['app-js'].fromPackageName} declared ${inEngineSpecifier} in packageJSON.ember-addon.app-js, but that module does not exist`\n );\n }\n let { names } = describeExports(readFileSync(foundAppJS.filename, 'utf8'), { configFile: false });\n return request.virtualize(fastbootSwitch(matched.matched, resolve(engine.root, 'package.json'), names));\n }\n }\n\n // check whether the given file with the given owningPackage is an addon's\n // appTree, and if so return the notional location within the app (or owning\n // engine) that it \"logically\" lives at.\n private reverseSearchAppTree(\n owningPackage: Package,\n fromFile: string\n ): { owningEngine: EngineConfig; inAppName: string } | undefined {\n // if the requesting file is in an addon's app-js, the request should\n // really be understood as a request for a module in the containing engine\n if (owningPackage.isV2Addon()) {\n let sections = [owningPackage.meta['app-js'], owningPackage.meta['fastboot-js']];\n for (let section of sections) {\n if (section) {\n let fromPackageRelativePath = explicitRelative(owningPackage.root, fromFile);\n for (let [inAppName, inAddonName] of Object.entries(section)) {\n if (inAddonName === fromPackageRelativePath) {\n return { owningEngine: this.owningEngine(owningPackage), inAppName };\n }\n }\n }\n }\n }\n }\n\n // check if this file is resolvable as a global component, and if so return\n // its dasherized name\n reverseComponentLookup(filename: string): string | undefined {\n const owningPackage = this.packageCache.ownerOfFile(filename);\n if (!owningPackage?.isV2Ember()) {\n return;\n }\n let engineConfig = this.options.engines.find(e => e.root === owningPackage.root);\n if (engineConfig) {\n // we're directly inside an engine, so we're potentially resolvable as a\n // global component\n\n // this kind of mapping is not true in general for all packages, but it\n // *is* true for all classical engines (which includes apps) since they\n // don't support package.json `exports`. As for a future v2 engine or app:\n // this whole method is only relevant for implementing packageRules, which\n // should only be for classic stuff. v2 packages should do the right\n // things from the beginning and not need packageRules about themselves.\n let inAppName = explicitRelative(engineConfig.root, filename);\n\n return this.tryReverseComponent(engineConfig.packageName, inAppName);\n }\n\n let engineInfo = this.reverseSearchAppTree(owningPackage, filename);\n if (engineInfo) {\n // we're in some addon's app tree, so we're potentially resolvable as a\n // global component\n return this.tryReverseComponent(engineInfo.owningEngine.packageName, engineInfo.inAppName);\n }\n }\n\n private tryReverseComponent(inEngineName: string, relativePath: string): string | undefined {\n let extensionless = relativePath.replace(extensionsPattern(this.options.resolvableExtensions), '');\n let candidates = [...this.componentJSCandidates(inEngineName), ...this.componentTemplateCandidates(inEngineName)];\n for (let candidate of candidates) {\n if (extensionless.startsWith(`.${candidate.prefix}`) && extensionless.endsWith(candidate.suffix)) {\n return extensionless.slice(candidate.prefix.length + 1, extensionless.length - candidate.suffix.length);\n }\n }\n return undefined;\n }\n}\n\nfunction isExplicitlyExternal(specifier: string, fromPkg: V2Package): boolean {\n return Boolean(fromPkg.isV2Addon() && fromPkg.meta['externals'] && fromPkg.meta['externals'].includes(specifier));\n}\n\n// we don't want to allow things that resolve only by accident that are likely\n// to break in other setups. For example: import your dependencies'\n// dependencies, or importing your own name from within a monorepo (which will\n// work because of the symlinking) without setting up \"exports\" (which makes\n// your own name reliably resolvable)\nfunction reliablyResolvable(pkg: V2Package, packageName: string) {\n if (pkg.hasDependency(packageName)) {\n return true;\n }\n\n if (pkg.name === packageName && pkg.packageJSON.exports) {\n return true;\n }\n\n if (emberVirtualPeerDeps.has(packageName) || emberVirtualPackages.has(packageName)) {\n return true;\n }\n\n return false;\n}\n\n//\nfunction appImportInAppTree(inPackage: Package, inLogicalPackage: Package, importedPackageName: string): boolean {\n return inPackage !== inLogicalPackage && importedPackageName === inLogicalPackage.name;\n}\n"]}