@embroider/core 3.4.4-unstable.ecb0185 → 3.4.4-unstable.f56eaf1

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.4-unstable.ecb0185",
3
+ "version": "3.4.4-unstable.f56eaf1",
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.13.5-unstable.ecb0185",
27
- "@embroider/shared-internals": "2.5.2-unstable.ecb0185",
26
+ "@embroider/macros": "1.13.5-unstable.f56eaf1",
27
+ "@embroider/shared-internals": "2.5.2-unstable.f56eaf1",
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",
@@ -42,7 +42,7 @@
42
42
  "lodash": "^4.17.21",
43
43
  "resolve": "^1.20.0",
44
44
  "resolve-package-path": "^4.0.1",
45
- "@embroider/reverse-exports": "0.1.1-unstable.ecb0185",
45
+ "@embroider/reverse-exports": "0.1.1-unstable.f56eaf1",
46
46
  "typescript-memoize": "^1.0.1",
47
47
  "walk-sync": "^3.0.0"
48
48
  },
@@ -292,28 +292,30 @@ class Resolver {
292
292
  let jsModule = null;
293
293
  // first, the various places our template might be.
294
294
  for (let candidate of this.componentTemplateCandidates(target.packageName)) {
295
+ let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}.hbs`;
295
296
  let resolution = this.nodeResolve(`${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`, target.from);
296
297
  if (resolution.type === 'real') {
297
- hbsModule = resolution.filename;
298
+ hbsModule = { requested: candidateSpecifier, found: resolution.filename };
298
299
  break;
299
300
  }
300
301
  }
301
302
  // then the various places our javascript might be.
302
303
  for (let candidate of this.componentJSCandidates(target.packageName)) {
303
- let resolution = this.nodeResolve(`${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`, target.from);
304
+ let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;
305
+ let resolution = this.nodeResolve(candidateSpecifier, target.from);
304
306
  // .hbs is a resolvable extension for us, so we need to exclude it here.
305
307
  // It matches as a priority lower than .js, so finding an .hbs means
306
308
  // there's definitely not a .js.
307
309
  if (resolution.type === 'real' && !resolution.filename.endsWith('.hbs')) {
308
- jsModule = resolution.filename;
310
+ jsModule = { requested: candidateSpecifier, found: resolution.filename };
309
311
  break;
310
312
  }
311
313
  }
312
314
  if (hbsModule) {
313
- return logTransition(`resolveComponent found legacy HBS`, request, request.virtualize((0, virtual_content_1.virtualPairComponent)(hbsModule, jsModule)));
315
+ return logTransition(`resolveComponent found legacy HBS`, request, request.virtualize((0, virtual_content_1.virtualPairComponent)(hbsModule.found, jsModule === null || jsModule === void 0 ? void 0 : jsModule.found)));
314
316
  }
315
317
  else if (jsModule) {
316
- return logTransition(`resolveComponent found only JS`, request, request.alias(jsModule).rehome(target.from));
318
+ return logTransition(`resolveComponent found only JS`, request, request.alias(jsModule.requested).rehome(target.from));
317
319
  }
318
320
  else {
319
321
  return logTransition(`resolveComponent failed`, request);
@@ -355,11 +357,20 @@ class Resolver {
355
357
  }
356
358
  }
357
359
  *componentJSCandidates(inPackageName) {
360
+ const extensions = ['.ts', '.gjs', '.gts'];
358
361
  yield { prefix: '/components/', suffix: '' };
359
362
  yield { prefix: '/components/', suffix: '/component' };
363
+ for (const ext of extensions) {
364
+ yield { prefix: '/components/', suffix: ext };
365
+ yield { prefix: '/components/', suffix: `/index${ext}` };
366
+ yield { prefix: '/components/', suffix: `/component${ext}` };
367
+ }
360
368
  let pods = this.podPrefix(inPackageName);
361
369
  if (pods) {
362
370
  yield { prefix: `${pods}/components/`, suffix: '/component' };
371
+ for (const ext of extensions) {
372
+ yield { prefix: `${pods}/components/`, suffix: `/component${ext}` };
373
+ }
363
374
  }
364
375
  }
365
376
  podPrefix(targetPackageName) {
@@ -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';\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 (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\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 {\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 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}\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> = { type: 'found'; result: T } | { type: 'not_found'; err: E };\n\nexport type ResolverFunction<R extends ModuleRequest = ModuleRequest, Res extends Resolution = Resolution> = (\n request: R\n) => Promise<Res>;\n\nexport type SyncResolverFunction<R extends ModuleRequest = ModuleRequest, Res extends Resolution = Resolution> = (\n request: R\n) => Res;\n\nexport class Resolver {\n constructor(readonly options: Options) {}\n\n beforeResolve<R extends ModuleRequest>(request: R): 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 = 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 //\n // Depending on the plugin architecture you're working in, it may be easier to\n // call beforeResolve and fallbackResolve directly, in which case matching the\n // details of the recursion to what this method does are your responsibility.\n async resolve<Req extends ModuleRequest, Res extends Resolution>(\n request: Req,\n defaultResolve: ResolverFunction<Req, Res>\n ): Promise<Res> {\n let gen = this.internalResolve<Req, Res, Promise<Res>>(request, defaultResolve);\n let out = gen.next();\n while (!out.done) {\n out = gen.next(await out.value);\n }\n return out.value;\n }\n\n // synchronous alternative to resolve() above. Because our own internals are\n // all synchronous, you can use this if your defaultResolve function is\n // synchronous.\n resolveSync<Req extends ModuleRequest, Res extends Resolution>(\n request: Req,\n defaultResolve: SyncResolverFunction<Req, Res>\n ): Res {\n let gen = this.internalResolve<Req, Res, Res>(request, defaultResolve);\n let out = gen.next();\n while (!out.done) {\n out = gen.next(out.value);\n }\n return out.value;\n }\n\n // Our core implementation is a generator so it can power both resolve() and\n // resolveSync()\n private *internalResolve<Req extends ModuleRequest, Res extends Resolution, Yielded>(\n request: Req,\n defaultResolve: (req: Req) => Yielded\n ): Generator<Yielded, Res, Res> {\n request = this.beforeResolve(request);\n let resolution = yield defaultResolve(request);\n\n switch (resolution.type) {\n case 'found':\n return resolution;\n case 'not_found':\n break;\n default:\n throw assertNever(resolution);\n }\n let nextRequest = this.fallbackResolve(request);\n if (nextRequest === request) {\n // no additional fallback is available.\n return resolution;\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 yield defaultResolve(nextRequest);\n }\n return yield* this.internalResolve(nextRequest, defaultResolve);\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 nodeResolve(\n specifier: string,\n fromFile: string\n ):\n | { type: 'virtual'; filename: string; content: string }\n | { type: 'real'; filename: string }\n | { type: 'not_found'; err: Error } {\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 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 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 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 handleGlobalsCompat<R extends ModuleRequest>(request: R): R {\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 resolveComponent<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): R {\n let target = this.parseGlobalPath(path, inEngine);\n\n let hbsModule: string | null = null;\n let jsModule: string | null = null;\n\n // first, the various places our template might be.\n for (let candidate of this.componentTemplateCandidates(target.packageName)) {\n let resolution = this.nodeResolve(\n `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`,\n target.from\n );\n if (resolution.type === 'real') {\n hbsModule = resolution.filename;\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 resolution = this.nodeResolve(\n `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`,\n target.from\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 === 'real' && !resolution.filename.endsWith('.hbs')) {\n jsModule = resolution.filename;\n break;\n }\n }\n\n if (hbsModule) {\n return logTransition(\n `resolveComponent found legacy HBS`,\n request,\n request.virtualize(virtualPairComponent(hbsModule, jsModule))\n );\n } else if (jsModule) {\n return logTransition(`resolveComponent found only JS`, request, request.alias(jsModule).rehome(target.from));\n } else {\n return logTransition(`resolveComponent failed`, request);\n }\n }\n\n private resolveHelperOrComponent<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): 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 = this.nodeResolve(helperCandidate.specifier, helperCandidate.fromFile);\n if (helperMatch.type === 'real') {\n return logTransition('ambiguous case matched a helper', request, helperCandidate);\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 = 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: '/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 (request.isVirtual || request.isNotFound) {\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 (request.isVirtual || request.isNotFound) {\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.meta['auto-upgraded'] && pkg.name === packageName) {\n // we found a self-import, resolve it for them. Only auto-upgraded\n // packages get this help, v2 packages are natively supposed to make their\n // own modules resolvable, and we want to push them all to do that\n // correctly.\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 }\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 (request.isVirtual || request.isNotFound) {\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 fallbackResolve<R extends ModuleRequest>(request: R): 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('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 = 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 = 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']) {\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 searchAppTree<R extends ModuleRequest>(\n request: R,\n engine: EngineConfig,\n inEngineSpecifier: string\n ): 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 = this.nodeResolve(matched.entry['app-js'].specifier, matched.entry['app-js'].fromFile);\n if (foundAppJS.type !== 'real') {\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';\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 (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\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 {\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 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}\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> = { type: 'found'; result: T } | { type: 'not_found'; err: E };\n\nexport type ResolverFunction<R extends ModuleRequest = ModuleRequest, Res extends Resolution = Resolution> = (\n request: R\n) => Promise<Res>;\n\nexport type SyncResolverFunction<R extends ModuleRequest = ModuleRequest, Res extends Resolution = Resolution> = (\n request: R\n) => Res;\n\nexport class Resolver {\n constructor(readonly options: Options) {}\n\n beforeResolve<R extends ModuleRequest>(request: R): 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 = 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 //\n // Depending on the plugin architecture you're working in, it may be easier to\n // call beforeResolve and fallbackResolve directly, in which case matching the\n // details of the recursion to what this method does are your responsibility.\n async resolve<Req extends ModuleRequest, Res extends Resolution>(\n request: Req,\n defaultResolve: ResolverFunction<Req, Res>\n ): Promise<Res> {\n let gen = this.internalResolve<Req, Res, Promise<Res>>(request, defaultResolve);\n let out = gen.next();\n while (!out.done) {\n out = gen.next(await out.value);\n }\n return out.value;\n }\n\n // synchronous alternative to resolve() above. Because our own internals are\n // all synchronous, you can use this if your defaultResolve function is\n // synchronous.\n resolveSync<Req extends ModuleRequest, Res extends Resolution>(\n request: Req,\n defaultResolve: SyncResolverFunction<Req, Res>\n ): Res {\n let gen = this.internalResolve<Req, Res, Res>(request, defaultResolve);\n let out = gen.next();\n while (!out.done) {\n out = gen.next(out.value);\n }\n return out.value;\n }\n\n // Our core implementation is a generator so it can power both resolve() and\n // resolveSync()\n private *internalResolve<Req extends ModuleRequest, Res extends Resolution, Yielded>(\n request: Req,\n defaultResolve: (req: Req) => Yielded\n ): Generator<Yielded, Res, Res> {\n request = this.beforeResolve(request);\n let resolution = yield defaultResolve(request);\n\n switch (resolution.type) {\n case 'found':\n return resolution;\n case 'not_found':\n break;\n default:\n throw assertNever(resolution);\n }\n let nextRequest = this.fallbackResolve(request);\n if (nextRequest === request) {\n // no additional fallback is available.\n return resolution;\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 yield defaultResolve(nextRequest);\n }\n return yield* this.internalResolve(nextRequest, defaultResolve);\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 nodeResolve(\n specifier: string,\n fromFile: string\n ):\n | { type: 'virtual'; filename: string; content: string }\n | { type: 'real'; filename: string }\n | { type: 'not_found'; err: Error } {\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 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 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 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 handleGlobalsCompat<R extends ModuleRequest>(request: R): R {\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 resolveComponent<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): R {\n let target = this.parseGlobalPath(path, inEngine);\n\n let hbsModule: { requested: string; found: string } | null = null;\n let jsModule: { requested: string; found: string } | 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}.hbs`;\n let resolution = this.nodeResolve(\n `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`,\n target.from\n );\n if (resolution.type === 'real') {\n hbsModule = { requested: candidateSpecifier, found: resolution.filename };\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 = this.nodeResolve(candidateSpecifier, target.from);\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 === 'real' && !resolution.filename.endsWith('.hbs')) {\n jsModule = { requested: candidateSpecifier, found: resolution.filename };\n break;\n }\n }\n\n if (hbsModule) {\n return logTransition(\n `resolveComponent found legacy HBS`,\n request,\n request.virtualize(virtualPairComponent(hbsModule.found, jsModule?.found))\n );\n } else if (jsModule) {\n return logTransition(\n `resolveComponent found only JS`,\n request,\n request.alias(jsModule.requested).rehome(target.from)\n );\n } else {\n return logTransition(`resolveComponent failed`, request);\n }\n }\n\n private resolveHelperOrComponent<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): 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 = this.nodeResolve(helperCandidate.specifier, helperCandidate.fromFile);\n if (helperMatch.type === 'real') {\n return logTransition('ambiguous case matched a helper', request, helperCandidate);\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 = 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 const extensions = ['.ts', '.gjs', '.gts'];\n yield { prefix: '/components/', suffix: '' };\n yield { prefix: '/components/', suffix: '/component' };\n\n for (const ext of extensions) {\n yield { prefix: '/components/', suffix: ext };\n yield { prefix: '/components/', suffix: `/index${ext}` };\n yield { prefix: '/components/', suffix: `/component${ext}` };\n }\n\n let pods = this.podPrefix(inPackageName);\n if (pods) {\n yield { prefix: `${pods}/components/`, suffix: '/component' };\n for (const ext of extensions) {\n yield { prefix: `${pods}/components/`, suffix: `/component${ext}` };\n }\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 (request.isVirtual || request.isNotFound) {\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 (request.isVirtual || request.isNotFound) {\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.meta['auto-upgraded'] && pkg.name === packageName) {\n // we found a self-import, resolve it for them. Only auto-upgraded\n // packages get this help, v2 packages are natively supposed to make their\n // own modules resolvable, and we want to push them all to do that\n // correctly.\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 }\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 (request.isVirtual || request.isNotFound) {\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 fallbackResolve<R extends ModuleRequest>(request: R): 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('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 = 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 = 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']) {\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 searchAppTree<R extends ModuleRequest>(\n request: R,\n engine: EngineConfig,\n inEngineSpecifier: string\n ): 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 = this.nodeResolve(matched.entry['app-js'].specifier, matched.entry['app-js'].fromFile);\n if (foundAppJS.type !== 'real') {\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"]}
@@ -48,7 +48,7 @@ function nodeResolve(resolver, specifier, fromFile) {
48
48
  type: 'found',
49
49
  result: {
50
50
  type: 'virtual',
51
- content: (0, virtual_content_1.virtualContent)(request.specifier, resolver),
51
+ content: (0, virtual_content_1.virtualContent)(request.specifier, resolver).src,
52
52
  filename: request.specifier,
53
53
  },
54
54
  };
@@ -1 +1 @@
1
- {"version":3,"file":"node-resolve.js","sourceRoot":"","sources":["node-resolve.ts"],"names":[],"mappings":"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","sourcesContent":["import { virtualContent } from './virtual-content';\nimport { dirname, resolve, isAbsolute } from 'path';\nimport { explicitRelative } from '@embroider/shared-internals';\nimport assertNever from 'assert-never';\n\n// these would be circular, but they're type-only so it's fine\nimport type { ModuleRequest, Resolver } from './module-resolver';\n\nexport class NodeModuleRequest implements ModuleRequest {\n constructor(\n readonly specifier: string,\n readonly fromFile: string,\n readonly isVirtual: boolean,\n readonly meta: Record<string, any> | undefined,\n readonly isNotFound: boolean\n ) {}\n\n get debugType() {\n return 'node';\n }\n\n alias(specifier: string): this {\n return new NodeModuleRequest(specifier, this.fromFile, false, this.meta, false) as this;\n }\n rehome(fromFile: string): this {\n if (this.fromFile === fromFile) {\n return this;\n } else {\n return new NodeModuleRequest(this.specifier, fromFile, false, this.meta, false) as this;\n }\n }\n virtualize(filename: string): this {\n return new NodeModuleRequest(filename, this.fromFile, true, this.meta, false) as this;\n }\n withMeta(meta: Record<string, any> | undefined): this {\n return new NodeModuleRequest(this.specifier, this.fromFile, this.isVirtual, meta, this.isNotFound) as this;\n }\n notFound(): this {\n return new NodeModuleRequest(this.specifier, this.fromFile, this.isVirtual, this.meta, true) as this;\n }\n}\n\nexport function nodeResolve(\n resolver: Resolver,\n specifier: string,\n fromFile: string\n):\n | { type: 'virtual'; filename: string; content: string }\n | { type: 'real'; filename: string }\n | { type: 'not_found'; err: Error } {\n let resolution = resolver.resolveSync(\n new NodeModuleRequest(specifier, fromFile, false, undefined, false),\n request => {\n if (request.isVirtual) {\n return {\n type: 'found',\n result: {\n type: 'virtual' as 'virtual',\n content: virtualContent(request.specifier, resolver),\n filename: request.specifier,\n },\n };\n }\n if (request.isNotFound) {\n let err = new Error(`module not found ${request.specifier}`);\n (err as any).code = 'MODULE_NOT_FOUND';\n return {\n type: 'not_found',\n err,\n };\n }\n try {\n // require.resolve does not like when we resolve from virtual paths.\n // That is, a request like \"../thing.js\" from\n // \"/a/real/path/VIRTUAL_SUBDIR/virtual.js\" has an unambiguous target of\n // \"/a/real/path/thing.js\", but require.resolve won't do that path\n // adjustment until after checking whether VIRTUAL_SUBDIR actually\n // exists.\n //\n // We can do the path adjustments before doing require.resolve.\n let { specifier } = request;\n let fromDir = dirname(request.fromFile);\n if (!isAbsolute(specifier) && specifier.startsWith('.')) {\n let targetPath = resolve(fromDir, specifier);\n let newFromDir = dirname(targetPath);\n if (fromDir !== newFromDir) {\n specifier = explicitRelative(newFromDir, targetPath);\n fromDir = newFromDir;\n }\n }\n\n let filename = require.resolve(specifier, {\n paths: [fromDir],\n });\n return { type: 'found', result: { type: 'real' as 'real', filename } };\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n return { type: 'not_found', err };\n }\n }\n );\n switch (resolution.type) {\n case 'not_found':\n return resolution;\n case 'found':\n return resolution.result;\n default:\n throw assertNever(resolution);\n }\n}\n"]}
1
+ {"version":3,"file":"node-resolve.js","sourceRoot":"","sources":["node-resolve.ts"],"names":[],"mappings":"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","sourcesContent":["import { virtualContent } from './virtual-content';\nimport { dirname, resolve, isAbsolute } from 'path';\nimport { explicitRelative } from '@embroider/shared-internals';\nimport assertNever from 'assert-never';\n\n// these would be circular, but they're type-only so it's fine\nimport type { ModuleRequest, Resolver } from './module-resolver';\n\nexport class NodeModuleRequest implements ModuleRequest {\n constructor(\n readonly specifier: string,\n readonly fromFile: string,\n readonly isVirtual: boolean,\n readonly meta: Record<string, any> | undefined,\n readonly isNotFound: boolean\n ) {}\n\n get debugType() {\n return 'node';\n }\n\n alias(specifier: string): this {\n return new NodeModuleRequest(specifier, this.fromFile, false, this.meta, false) as this;\n }\n rehome(fromFile: string): this {\n if (this.fromFile === fromFile) {\n return this;\n } else {\n return new NodeModuleRequest(this.specifier, fromFile, false, this.meta, false) as this;\n }\n }\n virtualize(filename: string): this {\n return new NodeModuleRequest(filename, this.fromFile, true, this.meta, false) as this;\n }\n withMeta(meta: Record<string, any> | undefined): this {\n return new NodeModuleRequest(this.specifier, this.fromFile, this.isVirtual, meta, this.isNotFound) as this;\n }\n notFound(): this {\n return new NodeModuleRequest(this.specifier, this.fromFile, this.isVirtual, this.meta, true) as this;\n }\n}\n\nexport function nodeResolve(\n resolver: Resolver,\n specifier: string,\n fromFile: string\n):\n | { type: 'virtual'; filename: string; content: string }\n | { type: 'real'; filename: string }\n | { type: 'not_found'; err: Error } {\n let resolution = resolver.resolveSync(\n new NodeModuleRequest(specifier, fromFile, false, undefined, false),\n request => {\n if (request.isVirtual) {\n return {\n type: 'found',\n result: {\n type: 'virtual' as 'virtual',\n content: virtualContent(request.specifier, resolver).src,\n filename: request.specifier,\n },\n };\n }\n if (request.isNotFound) {\n let err = new Error(`module not found ${request.specifier}`);\n (err as any).code = 'MODULE_NOT_FOUND';\n return {\n type: 'not_found',\n err,\n };\n }\n try {\n // require.resolve does not like when we resolve from virtual paths.\n // That is, a request like \"../thing.js\" from\n // \"/a/real/path/VIRTUAL_SUBDIR/virtual.js\" has an unambiguous target of\n // \"/a/real/path/thing.js\", but require.resolve won't do that path\n // adjustment until after checking whether VIRTUAL_SUBDIR actually\n // exists.\n //\n // We can do the path adjustments before doing require.resolve.\n let { specifier } = request;\n let fromDir = dirname(request.fromFile);\n if (!isAbsolute(specifier) && specifier.startsWith('.')) {\n let targetPath = resolve(fromDir, specifier);\n let newFromDir = dirname(targetPath);\n if (fromDir !== newFromDir) {\n specifier = explicitRelative(newFromDir, targetPath);\n fromDir = newFromDir;\n }\n }\n\n let filename = require.resolve(specifier, {\n paths: [fromDir],\n });\n return { type: 'found', result: { type: 'real' as 'real', filename } };\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n return { type: 'not_found', err };\n }\n }\n );\n switch (resolution.type) {\n case 'not_found':\n return resolution;\n case 'found':\n return resolution.result;\n default:\n throw assertNever(resolution);\n }\n}\n"]}
@@ -1,8 +1,12 @@
1
1
  import type { Resolver } from '.';
2
- export declare function virtualContent(filename: string, resolver: Resolver): string;
2
+ export interface VirtualContentResult {
3
+ src: string;
4
+ watches: string[];
5
+ }
6
+ export declare function virtualContent(filename: string, resolver: Resolver): VirtualContentResult;
3
7
  export declare function virtualExternalESModule(specifier: string, exports: string[] | undefined): string;
4
8
  export declare function virtualExternalCJSModule(specifier: string): string;
5
- export declare function virtualPairComponent(hbsModule: string, jsModule: string | null): string;
9
+ export declare function virtualPairComponent(hbsModule: string, jsModule: string | undefined): string;
6
10
  export declare function fastbootSwitch(specifier: string, fromFile: string, names: Set<string>): string;
7
11
  export declare function decodeFastbootSwitch(filename: string): {
8
12
  names: string[];
@@ -25,7 +25,7 @@ function virtualContent(filename, resolver) {
25
25
  }
26
26
  let fb = decodeFastbootSwitch(filename);
27
27
  if (fb) {
28
- return fastbootSwitchTemplate(fb);
28
+ return renderFastbootSwitchTemplate(fb);
29
29
  }
30
30
  let im = decodeImplicitModules(filename);
31
31
  if (im) {
@@ -51,14 +51,23 @@ export { {{#each names as |name|}}{{name}}, {{/each}} }
51
51
  {{/if}}
52
52
  {{/if}}
53
53
  `);
54
- function renderESExternalShim({ moduleName, exports }) {
55
- return externalESShim({
56
- moduleName,
57
- default: exports.includes('default'),
58
- names: exports.filter(n => n !== 'default'),
59
- });
54
+ function renderESExternalShim({ moduleName, exports, }) {
55
+ return {
56
+ src: externalESShim({
57
+ moduleName,
58
+ default: exports.includes('default'),
59
+ names: exports.filter(n => n !== 'default'),
60
+ }),
61
+ watches: [],
62
+ };
60
63
  }
61
- const pairedComponentShim = (0, js_handlebars_1.compile)(`
64
+ function pairedComponentShim(params) {
65
+ return {
66
+ src: pairedComponentShimTemplate(params),
67
+ watches: [],
68
+ };
69
+ }
70
+ const pairedComponentShimTemplate = (0, js_handlebars_1.compile)(`
62
71
  import { setComponentTemplate } from "@ember/component";
63
72
  import template from "{{{js-string-escape relativeHBSModule}}}";
64
73
  {{#if relativeJSModule}}
@@ -99,15 +108,12 @@ function decodeVirtualExternalCJSModule(filename) {
99
108
  return { moduleName: filename.slice(externalCJSPrefix.length) };
100
109
  }
101
110
  }
102
- const pairComponentMarker = '/embroider-pair-component';
103
- const pairComponentPattern = /^(?<hbsModule>.*)\/(?<jsModule>[^\/]*)\/embroider-pair-component$/;
111
+ const pairComponentMarker = '-embroider-pair-component';
112
+ const pairComponentPattern = /^(?<hbsModule>.*)\/(?<jsModule>[^\/]*)-embroider-pair-component$/;
104
113
  function virtualPairComponent(hbsModule, jsModule) {
105
114
  let relativeJSModule = '';
106
115
  if (jsModule) {
107
- // The '/j/' here represents the relativeJSModule itself that we're about to
108
- // use to create the complete filename. It's there to get the right number
109
- // of `..` in our relative path.
110
- relativeJSModule = (0, _1.explicitRelative)(hbsModule + '/j/', jsModule);
116
+ relativeJSModule = (0, _1.explicitRelative)(hbsModule, jsModule);
111
117
  }
112
118
  return `${hbsModule}/${encodeURIComponent(relativeJSModule)}${pairComponentMarker}`;
113
119
  }
@@ -159,6 +165,12 @@ function decodeFastbootSwitch(filename) {
159
165
  }
160
166
  }
161
167
  exports.decodeFastbootSwitch = decodeFastbootSwitch;
168
+ function renderFastbootSwitchTemplate(params) {
169
+ return {
170
+ src: fastbootSwitchTemplate(params),
171
+ watches: [],
172
+ };
173
+ }
162
174
  const fastbootSwitchTemplate = (0, js_handlebars_1.compile)(`
163
175
  import { macroCondition, getGlobalConfig, importSync } from '@embroider/macros';
164
176
  let mod;
@@ -195,8 +207,8 @@ function renderImplicitModules({ type, fromFile, }, resolver) {
195
207
  if (!(pkg === null || pkg === void 0 ? void 0 : pkg.isV2Ember())) {
196
208
  throw new Error(`bug: saw special implicit modules import in non-ember package at ${fromFile}`);
197
209
  }
198
- let lazyModules = [];
199
- let eagerModules = [];
210
+ let ownModules = [];
211
+ let dependencyModules = [];
200
212
  let deps = pkg.dependencies.sort(orderAddons);
201
213
  for (let dep of deps) {
202
214
  // anything that isn't a v2 ember package by this point is not an active
@@ -229,7 +241,7 @@ function renderImplicitModules({ type, fromFile, }, resolver) {
229
241
  runtime = renamedModules[runtimeRenameLookup];
230
242
  }
231
243
  runtime = runtime.split(path_1.sep).join('/');
232
- lazyModules.push({
244
+ ownModules.push({
233
245
  runtime,
234
246
  buildtime: path_1.posix.join(packageName, name),
235
247
  });
@@ -238,20 +250,32 @@ function renderImplicitModules({ type, fromFile, }, resolver) {
238
250
  // we don't recurse across an engine boundary. Engines import their own
239
251
  // implicit-modules.
240
252
  if (!dep.isEngine()) {
241
- eagerModules.push(path_1.posix.join(dep.name, `-embroider-${type}.js`));
253
+ dependencyModules.push(path_1.posix.join(dep.name, `-embroider-${type}.js`));
242
254
  }
243
255
  }
244
- return implicitModulesTemplate({ lazyModules, eagerModules });
256
+ return { src: implicitModulesTemplate({ ownModules, dependencyModules }), watches: [] };
245
257
  }
246
258
  const implicitModulesTemplate = (0, js_handlebars_1.compile)(`
247
- import { importSync as i } from '@embroider/macros';
248
- let d = window.define;
249
- {{#each lazyModules as |module|}}
250
- d("{{js-string-escape module.runtime}}", function(){ return i("{{js-string-escape module.buildtime}}");});
259
+
260
+
261
+ {{#each dependencyModules as |module index|}}
262
+ import dep{{index}} from "{{js-string-escape module}}";
251
263
  {{/each}}
252
- {{#each eagerModules as |module|}}
253
- import "{{js-string-escape module}}";
264
+
265
+ {{#each ownModules as |module index|}}
266
+ import * as own{{index}} from "{{js-string-escape module.buildtime}}";
254
267
  {{/each}}
268
+
269
+ export default Object.assign({},
270
+ {{#each dependencyModules as |module index|}}
271
+ dep{{index}},
272
+ {{/each}}
273
+ {
274
+ {{#each ownModules as |module index|}}
275
+ "{{js-string-escape module.runtime}}": own{{index}},
276
+ {{/each}}
277
+ }
278
+ );
255
279
  `);
256
280
  // meta['renamed-modules'] has mapping from classic filename to real filename.
257
281
  // This takes that and converts it to the inverst mapping from real import path
@@ -277,26 +301,41 @@ function orderAddons(depA, depB) {
277
301
  }
278
302
  return depAIdx - depBIdx;
279
303
  }
280
- const renderCJSExternalShim = (0, js_handlebars_1.compile)(`
281
- {{#if (eq moduleName "require")}}
282
- const m = window.requirejs;
283
- {{else}}
284
- const m = window.require("{{{js-string-escape moduleName}}}");
285
- {{/if}}
286
- {{!-
287
- There are plenty of hand-written AMD defines floating around
288
- that lack this, and they will break when other build systems
289
- encounter them.
304
+ function renderCJSExternalShim(params) {
305
+ return {
306
+ src: renderCJSExternalShimTemplate(params),
307
+ watches: [],
308
+ };
309
+ }
310
+ const renderCJSExternalShimTemplate = (0, js_handlebars_1.compile)(`
311
+ module.exports = new Proxy({}, {
312
+ get(target, prop) {
290
313
 
291
- As far as I can tell, Ember's loader was already treating this
292
- case as a module, so in theory we aren't breaking anything by
293
- marking it as such when other packagers come looking.
314
+ {{!- our proxy always presents as ES module so that we can intercept "get('default')" -}}
315
+ if (prop === '__esModule') {
316
+ return true;
317
+ }
294
318
 
295
- todo: get review on this part.
296
- -}}
297
- if (m.default && !m.__esModule) {
298
- m.__esModule = true;
299
- }
300
- module.exports = m;
319
+ {{#if (eq moduleName "require")}}
320
+ const m = window.requirejs;
321
+ {{else}}
322
+ const m = window.require("{{{js-string-escape moduleName}}}");
323
+ {{/if}}
324
+
325
+ {{!-
326
+ There are plenty of hand-written AMD defines floating around
327
+ that lack an __esModule declaration.
328
+
329
+ As far as I can tell, Ember's loader was already treating the Boolean(m.default)===true
330
+ case as a module, so in theory we aren't breaking anything by
331
+ treating it as such when other packagers come looking.
332
+ -}}
333
+ if (prop === 'default' && !m.__esModule && !m.default) {
334
+ return m;
335
+ }
336
+
337
+ return m[prop];
338
+ }
339
+ });
301
340
  `);
302
341
  //# sourceMappingURL=virtual-content.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-content.js","sourceRoot":"","sources":["virtual-content.ts"],"names":[],"mappings":";;;AAAA,+BAAoE;AAEpE,wBAAwD;AACxD,mDAA0C;AAE1C,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAC/C,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AAEjD,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,mCAAmC;AACnC,SAAgB,cAAc,CAAC,QAAgB,EAAE,QAAkB;IACjE,IAAI,SAAS,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,SAAS,EAAE;QACb,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;KACzC;IAED,IAAI,MAAM,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,MAAM,EAAE;QACV,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;KACrC;IACD,IAAI,KAAK,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,KAAK,EAAE;QACT,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;KACnC;IAED,IAAI,EAAE,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,EAAE,EAAE;QACN,OAAO,sBAAsB,CAAC,EAAE,CAAC,CAAC;KACnC;IAED,IAAI,EAAE,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,EAAE,EAAE;QACN,OAAO,qBAAqB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;KAC5C;IAED,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;AACtE,CAAC;AA1BD,wCA0BC;AAED,MAAM,cAAc,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;;;;;;;;CAgB9B,CAAkF,CAAC;AAEpF,SAAS,oBAAoB,CAAC,EAAE,UAAU,EAAE,OAAO,EAA6C;IAC9F,OAAO,cAAc,CAAC;QACpB,UAAU;QACV,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QACpC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,mBAAmB,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;;CAUnC,CAA0G,CAAC;AAE5G,SAAgB,uBAAuB,CAAC,SAAiB,EAAE,OAA6B;IACtF,IAAI,OAAO,EAAE;QACX,OAAO,gBAAgB,GAAG,SAAS,GAAG,YAAY,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;KACvE;SAAM;QACL,OAAO,gBAAgB,GAAG,SAAS,CAAC;KACrC;AACH,CAAC;AAND,0DAMC;AAED,SAAgB,wBAAwB,CAAC,SAAiB;IACxD,OAAO,iBAAiB,GAAG,SAAS,CAAC;AACvC,CAAC;AAFD,4DAEC;AAED,SAAS,6BAA6B,CAAC,QAAgB;IACrD,IAAI,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;QACzC,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC,CAAC;QACjF,IAAI,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,UAAU,EAAE;YACd,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACjC;QACD,IAAI,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;KAChC;AACH,CAAC;AAED,SAAS,8BAA8B,CAAC,QAAgB;IACtD,IAAI,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;QAC1C,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;KACjE;AACH,CAAC;AAED,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AACxD,MAAM,oBAAoB,GAAG,mEAAmE,CAAC;AAEjG,SAAgB,oBAAoB,CAAC,SAAiB,EAAE,QAAuB;IAC7E,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAC1B,IAAI,QAAQ,EAAE;QACZ,4EAA4E;QAC5E,0EAA0E;QAC1E,gCAAgC;QAChC,gBAAgB,GAAG,IAAA,mBAAgB,EAAC,SAAS,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC;KAClE;IACD,OAAO,GAAG,SAAS,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,mBAAmB,EAAE,CAAC;AACtF,CAAC;AATD,oDASC;AAED,SAAS,0BAA0B,CACjC,QAAgB;IAEhB,0DAA0D;IAC1D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;QAC3C,OAAO,IAAI,CAAC;KACb;IACD,IAAI,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IACD,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,MAAkD,CAAC;IACvF,qDAAqD;IACrD,IAAI,iBAAiB,GAAG,IAAA,mBAAgB,EAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;IACvE,OAAO;QACL,iBAAiB;QACjB,gBAAgB,EAAE,kBAAkB,CAAC,QAAQ,CAAC,IAAI,IAAI;QACtD,SAAS,EAAE,IAAA,eAAQ,EAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,MAAM,oBAAoB,GAAG,4BAA4B,CAAC;AAC1D,MAAM,qBAAqB,GAAG,sEAAsE,CAAC;AACrG,SAAgB,cAAc,CAAC,SAAiB,EAAE,QAAgB,EAAE,KAAkB;IACpF,IAAI,QAAQ,GAAG,GAAG,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,GAAG,oBAAoB,EAAE,CAAC;IACjF,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE;QAClB,OAAO,GAAG,QAAQ,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;KACpD;SAAM;QACL,OAAO,QAAQ,CAAC;KACjB;AACH,CAAC;AAPD,wCAOC;AAED,SAAgB,oBAAoB,CAAC,QAAgB;;IACnD,0DAA0D;IAC1D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;QAC5C,OAAO;KACR;IACD,IAAI,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,KAAK,EAAE;QACT,IAAI,KAAK,GAAG,MAAA,MAAA,MAAA,KAAK,CAAC,MAAM,0CAAE,KAAK,0CAAE,KAAK,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC;QAClD,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;YAC/C,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC3C,QAAQ,EAAE,KAAK,CAAC,MAAO,CAAC,QAAQ;SACjC,CAAC;KACH;AACH,CAAC;AAdD,oDAcC;AAED,MAAM,sBAAsB,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;;;;;;CActC,CAAuE,CAAC;AAEzE,MAAM,sBAAsB,GAAG,qEAAqE,CAAC;AAErG,SAAgB,qBAAqB,CACnC,QAAgB;IAEhB,0DAA0D;IAC1D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE;QAC9C,OAAO;KACR;IACD,IAAI,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE;QACL,OAAO;YACL,IAAI,EAAE,CAAC,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,kBAAkB;YACnE,QAAQ,EAAE,CAAC,CAAC,MAAO,CAAC,QAAQ;SAC7B,CAAC;KACH;AACH,CAAC;AAdD,sDAcC;AAED,SAAS,qBAAqB,CAC5B,EACE,IAAI,EACJ,QAAQ,GAIT,EACD,QAAkB;IAElB,IAAI,2BAA2B,GAAG,IAAA,oBAAiB,EAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE3F,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,EAAE,CAAA,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,oEAAoE,QAAQ,EAAE,CAAC,CAAC;KACjG;IAED,IAAI,WAAW,GAA6C,EAAE,CAAC;IAC/D,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,IAAI,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE9C,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;QACpB,wEAAwE;QACxE,SAAS;QACT,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE;YACpB,SAAS;SACV;QAED,oEAAoE;QACpE,qEAAqE;QACrE,iCAAiC;QACjC,IAAI,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,kBAAkB,EAAE;YAC7D,SAAS;SACV;QAED,IAAI,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,eAAe,EAAE;YACnB,IAAI,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;YAClF,KAAK,IAAI,IAAI,IAAI,eAAe,EAAE;gBAChC,IAAI,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC;gBAE3B,IAAI,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAC/C,IAAI,WAAW,EAAE;oBACf,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;wBACnD,IAAI,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE;4BACtB,WAAW,GAAG,GAAG,CAAC;yBACnB;oBACH,CAAC,CAAC,CAAC;iBACJ;gBAED,IAAI,OAAO,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;gBAC/E,IAAI,mBAAmB,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxD,IAAI,cAAc,IAAI,cAAc,CAAC,mBAAmB,CAAC,EAAE;oBACzD,OAAO,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;iBAC/C;gBACD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,UAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvC,WAAW,CAAC,IAAI,CAAC;oBACf,OAAO;oBACP,SAAS,EAAE,YAAK,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;iBACzC,CAAC,CAAC;aACJ;SACF;QACD,uEAAuE;QACvE,oBAAoB;QACpB,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YACnB,YAAY,CAAC,IAAI,CAAC,YAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,IAAI,KAAK,CAAC,CAAC,CAAC;SAClE;KACF;IACD,OAAO,uBAAuB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,uBAAuB,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;CASvC,CAA0G,CAAC;AAE5G,8EAA8E;AAC9E,+EAA+E;AAC/E,0BAA0B;AAC1B,SAAS,qBAAqB,CAAC,IAA0B,EAAE,UAAkB;IAC3E,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACtC,IAAI,OAAO,EAAE;QACX,IAAI,QAAQ,GAAG,EAAgC,CAAC;QAChD,KAAK,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACnD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SAC1E;QACD,OAAO,QAAQ,CAAC;KACjB;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAa,EAAE,IAAa;IAC/C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;QACzC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACzC;IACD,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;QACzC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACzC;IAED,OAAO,OAAO,GAAG,OAAO,CAAC;AAC3B,CAAC;AAED,MAAM,qBAAqB,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;;;;;;;;;;;;;CAqBrC,CAA+C,CAAC","sourcesContent":["import { dirname, basename, resolve, posix, sep, join } from 'path';\nimport type { Resolver, AddonPackage, Package } from '.';\nimport { explicitRelative, extensionsPattern } from '.';\nimport { compile } from './js-handlebars';\n\nconst externalESPrefix = '/@embroider/ext-es/';\nconst externalCJSPrefix = '/@embroider/ext-cjs/';\n\n// Given a filename that was passed to your ModuleRequest's `virtualize()`,\n// this produces the corresponding contents. It's a static, stateless function\n// because we recognize that that process that did resolution might not be the\n// same one that loads the content.\nexport function virtualContent(filename: string, resolver: Resolver): string {\n let cjsExtern = decodeVirtualExternalCJSModule(filename);\n if (cjsExtern) {\n return renderCJSExternalShim(cjsExtern);\n }\n\n let extern = decodeVirtualExternalESModule(filename);\n if (extern) {\n return renderESExternalShim(extern);\n }\n let match = decodeVirtualPairComponent(filename);\n if (match) {\n return pairedComponentShim(match);\n }\n\n let fb = decodeFastbootSwitch(filename);\n if (fb) {\n return fastbootSwitchTemplate(fb);\n }\n\n let im = decodeImplicitModules(filename);\n if (im) {\n return renderImplicitModules(im, resolver);\n }\n\n throw new Error(`not an @embroider/core virtual file: ${filename}`);\n}\n\nconst externalESShim = compile(`\n{{#if (eq moduleName \"require\")}}\nconst m = window.requirejs;\nexport default m;\nconst has = m.has;\nexport { has }\n{{else}}\nconst m = window.require(\"{{{js-string-escape moduleName}}}\");\n{{#if default}}\nexport default m.default;\n{{/if}}\n{{#if names}}\nconst { {{#each names as |name|}}{{name}}, {{/each}} } = m;\nexport { {{#each names as |name|}}{{name}}, {{/each}} }\n{{/if}}\n{{/if}}\n`) as (params: { moduleName: string; default: boolean; names: string[] }) => string;\n\nfunction renderESExternalShim({ moduleName, exports }: { moduleName: string; exports: string[] }): string {\n return externalESShim({\n moduleName,\n default: exports.includes('default'),\n names: exports.filter(n => n !== 'default'),\n });\n}\n\nconst pairedComponentShim = compile(`\nimport { setComponentTemplate } from \"@ember/component\";\nimport template from \"{{{js-string-escape relativeHBSModule}}}\";\n{{#if relativeJSModule}}\nimport component from \"{{{js-string-escape relativeJSModule}}}\";\nexport default setComponentTemplate(template, component);\n{{else}}\nimport templateOnlyComponent from \"@ember/component/template-only\";\nexport default setComponentTemplate(template, templateOnlyComponent(undefined, \"{{{js-string-escape debugName}}}\"));\n{{/if}}\n`) as (params: { relativeHBSModule: string; relativeJSModule: string | null; debugName: string }) => string;\n\nexport function virtualExternalESModule(specifier: string, exports: string[] | undefined): string {\n if (exports) {\n return externalESPrefix + specifier + `?exports=${exports.join(',')}`;\n } else {\n return externalESPrefix + specifier;\n }\n}\n\nexport function virtualExternalCJSModule(specifier: string): string {\n return externalCJSPrefix + specifier;\n}\n\nfunction decodeVirtualExternalESModule(filename: string): { moduleName: string; exports: string[] } | undefined {\n if (filename.startsWith(externalESPrefix)) {\n let exports: string[] = [];\n let url = new URL(filename.slice(externalESPrefix.length), 'http://example.com');\n let nameString = url.searchParams.get('exports');\n if (nameString) {\n exports = nameString.split(',');\n }\n let moduleName = url.pathname.slice(1);\n return { moduleName, exports };\n }\n}\n\nfunction decodeVirtualExternalCJSModule(filename: string) {\n if (filename.startsWith(externalCJSPrefix)) {\n return { moduleName: filename.slice(externalCJSPrefix.length) };\n }\n}\n\nconst pairComponentMarker = '/embroider-pair-component';\nconst pairComponentPattern = /^(?<hbsModule>.*)\\/(?<jsModule>[^\\/]*)\\/embroider-pair-component$/;\n\nexport function virtualPairComponent(hbsModule: string, jsModule: string | null): string {\n let relativeJSModule = '';\n if (jsModule) {\n // The '/j/' here represents the relativeJSModule itself that we're about to\n // use to create the complete filename. It's there to get the right number\n // of `..` in our relative path.\n relativeJSModule = explicitRelative(hbsModule + '/j/', jsModule);\n }\n return `${hbsModule}/${encodeURIComponent(relativeJSModule)}${pairComponentMarker}`;\n}\n\nfunction decodeVirtualPairComponent(\n filename: string\n): { relativeHBSModule: string; relativeJSModule: string | null; debugName: string } | null {\n // Performance: avoid paying regex exec cost unless needed\n if (!filename.includes(pairComponentMarker)) {\n return null;\n }\n let match = pairComponentPattern.exec(filename);\n if (!match) {\n return null;\n }\n let { hbsModule, jsModule } = match.groups! as { hbsModule: string; jsModule: string };\n // target our real hbs module from our virtual module\n let relativeHBSModule = explicitRelative(dirname(filename), hbsModule);\n return {\n relativeHBSModule,\n relativeJSModule: decodeURIComponent(jsModule) || null,\n debugName: basename(relativeHBSModule).replace(/\\.(js|hbs)$/, ''),\n };\n}\n\nconst fastbootSwitchSuffix = '/embroider_fastboot_switch';\nconst fastbootSwitchPattern = /(?<original>.+)\\/embroider_fastboot_switch(?:\\?names=(?<names>.+))?$/;\nexport function fastbootSwitch(specifier: string, fromFile: string, names: Set<string>): string {\n let filename = `${resolve(dirname(fromFile), specifier)}${fastbootSwitchSuffix}`;\n if (names.size > 0) {\n return `${filename}?names=${[...names].join(',')}`;\n } else {\n return filename;\n }\n}\n\nexport function decodeFastbootSwitch(filename: string) {\n // Performance: avoid paying regex exec cost unless needed\n if (!filename.includes(fastbootSwitchSuffix)) {\n return;\n }\n let match = fastbootSwitchPattern.exec(filename);\n if (match) {\n let names = match.groups?.names?.split(',') ?? [];\n return {\n names: names.filter(name => name !== 'default'),\n hasDefaultExport: names.includes('default'),\n filename: match.groups!.original,\n };\n }\n}\n\nconst fastbootSwitchTemplate = compile(`\nimport { macroCondition, getGlobalConfig, importSync } from '@embroider/macros';\nlet mod;\nif (macroCondition(getGlobalConfig().fastboot?.isRunning)){\n mod = importSync('./fastboot');\n} else {\n mod = importSync('./browser');\n}\n{{#if hasDefaultExport}}\nexport default mod.default;\n{{/if}}\n{{#each names as |name|}}\nexport const {{name}} = mod.{{name}};\n{{/each}}\n`) as (params: { names: string[]; hasDefaultExport: boolean }) => string;\n\nconst implicitModulesPattern = /(?<filename>.*)[\\\\/]-embroider-implicit-(?<test>test-)?modules\\.js$/;\n\nexport function decodeImplicitModules(\n filename: string\n): { type: 'implicit-modules' | 'implicit-test-modules'; fromFile: string } | undefined {\n // Performance: avoid paying regex exec cost unless needed\n if (!filename.includes('-embroider-implicit-')) {\n return;\n }\n let m = implicitModulesPattern.exec(filename);\n if (m) {\n return {\n type: m.groups!.test ? 'implicit-test-modules' : 'implicit-modules',\n fromFile: m.groups!.filename,\n };\n }\n}\n\nfunction renderImplicitModules(\n {\n type,\n fromFile,\n }: {\n type: 'implicit-modules' | 'implicit-test-modules';\n fromFile: string;\n },\n resolver: Resolver\n): string {\n let resolvableExtensionsPattern = extensionsPattern(resolver.options.resolvableExtensions);\n\n const pkg = resolver.packageCache.ownerOfFile(fromFile);\n if (!pkg?.isV2Ember()) {\n throw new Error(`bug: saw special implicit modules import in non-ember package at ${fromFile}`);\n }\n\n let lazyModules: { runtime: string; buildtime: string }[] = [];\n let eagerModules: string[] = [];\n\n let deps = pkg.dependencies.sort(orderAddons);\n\n for (let dep of deps) {\n // anything that isn't a v2 ember package by this point is not an active\n // addon.\n if (!dep.isV2Addon()) {\n continue;\n }\n\n // we ignore peerDependencies here because classic ember-cli ignores\n // peerDependencies here, and we're implementing the implicit-modules\n // backward-comptibility feature.\n if (pkg.categorizeDependency(dep.name) === 'peerDependencies') {\n continue;\n }\n\n let implicitModules = dep.meta[type];\n if (implicitModules) {\n let renamedModules = inverseRenamedModules(dep.meta, resolvableExtensionsPattern);\n for (let name of implicitModules) {\n let packageName = dep.name;\n\n let renamedMeta = dep.meta['renamed-packages'];\n if (renamedMeta) {\n Object.entries(renamedMeta).forEach(([key, value]) => {\n if (value === dep.name) {\n packageName = key;\n }\n });\n }\n\n let runtime = join(packageName, name).replace(resolvableExtensionsPattern, '');\n let runtimeRenameLookup = runtime.split('\\\\').join('/');\n if (renamedModules && renamedModules[runtimeRenameLookup]) {\n runtime = renamedModules[runtimeRenameLookup];\n }\n runtime = runtime.split(sep).join('/');\n lazyModules.push({\n runtime,\n buildtime: posix.join(packageName, name),\n });\n }\n }\n // we don't recurse across an engine boundary. Engines import their own\n // implicit-modules.\n if (!dep.isEngine()) {\n eagerModules.push(posix.join(dep.name, `-embroider-${type}.js`));\n }\n }\n return implicitModulesTemplate({ lazyModules, eagerModules });\n}\n\nconst implicitModulesTemplate = compile(`\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n{{#each lazyModules as |module|}}\nd(\"{{js-string-escape module.runtime}}\", function(){ return i(\"{{js-string-escape module.buildtime}}\");});\n{{/each}}\n{{#each eagerModules as |module|}}\nimport \"{{js-string-escape module}}\";\n{{/each}}\n`) as (params: { eagerModules: string[]; lazyModules: { runtime: string; buildtime: string }[] }) => string;\n\n// meta['renamed-modules'] has mapping from classic filename to real filename.\n// This takes that and converts it to the inverst mapping from real import path\n// to classic import path.\nfunction inverseRenamedModules(meta: AddonPackage['meta'], extensions: RegExp) {\n let renamed = meta['renamed-modules'];\n if (renamed) {\n let inverted = {} as { [name: string]: string };\n for (let [classic, real] of Object.entries(renamed)) {\n inverted[real.replace(extensions, '')] = classic.replace(extensions, '');\n }\n return inverted;\n }\n}\n\nfunction orderAddons(depA: Package, depB: Package): number {\n let depAIdx = 0;\n let depBIdx = 0;\n\n if (depA && depA.meta && depA.isV2Addon()) {\n depAIdx = depA.meta['order-index'] || 0;\n }\n if (depB && depB.meta && depB.isV2Addon()) {\n depBIdx = depB.meta['order-index'] || 0;\n }\n\n return depAIdx - depBIdx;\n}\n\nconst renderCJSExternalShim = compile(`\n{{#if (eq moduleName \"require\")}}\nconst m = window.requirejs;\n{{else}}\nconst m = window.require(\"{{{js-string-escape moduleName}}}\");\n{{/if}}\n{{!-\n There are plenty of hand-written AMD defines floating around\n that lack this, and they will break when other build systems\n encounter them.\n\n As far as I can tell, Ember's loader was already treating this\n case as a module, so in theory we aren't breaking anything by\n marking it as such when other packagers come looking.\n\n todo: get review on this part.\n-}}\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n`) as (params: { moduleName: string }) => string;\n"]}
1
+ {"version":3,"file":"virtual-content.js","sourceRoot":"","sources":["virtual-content.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, basename, resolve, posix, sep, join } from 'path';\nimport type { Resolver, AddonPackage, Package } from '.';\nimport { explicitRelative, extensionsPattern } from '.';\nimport { compile } from './js-handlebars';\n\nconst externalESPrefix = '/@embroider/ext-es/';\nconst externalCJSPrefix = '/@embroider/ext-cjs/';\n\nexport interface VirtualContentResult {\n src: string;\n watches: string[];\n}\n\n// Given a filename that was passed to your ModuleRequest's `virtualize()`,\n// this produces the corresponding contents. It's a static, stateless function\n// because we recognize that that process that did resolution might not be the\n// same one that loads the content.\nexport function virtualContent(filename: string, resolver: Resolver): VirtualContentResult {\n let cjsExtern = decodeVirtualExternalCJSModule(filename);\n if (cjsExtern) {\n return renderCJSExternalShim(cjsExtern);\n }\n\n let extern = decodeVirtualExternalESModule(filename);\n if (extern) {\n return renderESExternalShim(extern);\n }\n let match = decodeVirtualPairComponent(filename);\n if (match) {\n return pairedComponentShim(match);\n }\n\n let fb = decodeFastbootSwitch(filename);\n if (fb) {\n return renderFastbootSwitchTemplate(fb);\n }\n\n let im = decodeImplicitModules(filename);\n if (im) {\n return renderImplicitModules(im, resolver);\n }\n\n throw new Error(`not an @embroider/core virtual file: ${filename}`);\n}\n\nconst externalESShim = compile(`\n{{#if (eq moduleName \"require\")}}\nconst m = window.requirejs;\nexport default m;\nconst has = m.has;\nexport { has }\n{{else}}\nconst m = window.require(\"{{{js-string-escape moduleName}}}\");\n{{#if default}}\nexport default m.default;\n{{/if}}\n{{#if names}}\nconst { {{#each names as |name|}}{{name}}, {{/each}} } = m;\nexport { {{#each names as |name|}}{{name}}, {{/each}} }\n{{/if}}\n{{/if}}\n`) as (params: { moduleName: string; default: boolean; names: string[] }) => string;\n\nfunction renderESExternalShim({\n moduleName,\n exports,\n}: {\n moduleName: string;\n exports: string[];\n}): VirtualContentResult {\n return {\n src: externalESShim({\n moduleName,\n default: exports.includes('default'),\n names: exports.filter(n => n !== 'default'),\n }),\n watches: [],\n };\n}\n\ninterface PairedComponentShimParams {\n relativeHBSModule: string;\n relativeJSModule: string | null;\n debugName: string;\n}\n\nfunction pairedComponentShim(params: PairedComponentShimParams): VirtualContentResult {\n return {\n src: pairedComponentShimTemplate(params),\n watches: [],\n };\n}\n\nconst pairedComponentShimTemplate = compile(`\nimport { setComponentTemplate } from \"@ember/component\";\nimport template from \"{{{js-string-escape relativeHBSModule}}}\";\n{{#if relativeJSModule}}\nimport component from \"{{{js-string-escape relativeJSModule}}}\";\nexport default setComponentTemplate(template, component);\n{{else}}\nimport templateOnlyComponent from \"@ember/component/template-only\";\nexport default setComponentTemplate(template, templateOnlyComponent(undefined, \"{{{js-string-escape debugName}}}\"));\n{{/if}}\n`) as (params: PairedComponentShimParams) => string;\n\nexport function virtualExternalESModule(specifier: string, exports: string[] | undefined): string {\n if (exports) {\n return externalESPrefix + specifier + `?exports=${exports.join(',')}`;\n } else {\n return externalESPrefix + specifier;\n }\n}\n\nexport function virtualExternalCJSModule(specifier: string): string {\n return externalCJSPrefix + specifier;\n}\n\nfunction decodeVirtualExternalESModule(filename: string): { moduleName: string; exports: string[] } | undefined {\n if (filename.startsWith(externalESPrefix)) {\n let exports: string[] = [];\n let url = new URL(filename.slice(externalESPrefix.length), 'http://example.com');\n let nameString = url.searchParams.get('exports');\n if (nameString) {\n exports = nameString.split(',');\n }\n let moduleName = url.pathname.slice(1);\n return { moduleName, exports };\n }\n}\n\nfunction decodeVirtualExternalCJSModule(filename: string) {\n if (filename.startsWith(externalCJSPrefix)) {\n return { moduleName: filename.slice(externalCJSPrefix.length) };\n }\n}\n\nconst pairComponentMarker = '-embroider-pair-component';\nconst pairComponentPattern = /^(?<hbsModule>.*)\\/(?<jsModule>[^\\/]*)-embroider-pair-component$/;\n\nexport function virtualPairComponent(hbsModule: string, jsModule: string | undefined): string {\n let relativeJSModule = '';\n if (jsModule) {\n relativeJSModule = explicitRelative(hbsModule, jsModule);\n }\n return `${hbsModule}/${encodeURIComponent(relativeJSModule)}${pairComponentMarker}`;\n}\n\nfunction decodeVirtualPairComponent(\n filename: string\n): { relativeHBSModule: string; relativeJSModule: string | null; debugName: string } | null {\n // Performance: avoid paying regex exec cost unless needed\n if (!filename.includes(pairComponentMarker)) {\n return null;\n }\n let match = pairComponentPattern.exec(filename);\n if (!match) {\n return null;\n }\n let { hbsModule, jsModule } = match.groups! as { hbsModule: string; jsModule: string };\n // target our real hbs module from our virtual module\n let relativeHBSModule = explicitRelative(dirname(filename), hbsModule);\n return {\n relativeHBSModule,\n relativeJSModule: decodeURIComponent(jsModule) || null,\n debugName: basename(relativeHBSModule).replace(/\\.(js|hbs)$/, ''),\n };\n}\n\nconst fastbootSwitchSuffix = '/embroider_fastboot_switch';\nconst fastbootSwitchPattern = /(?<original>.+)\\/embroider_fastboot_switch(?:\\?names=(?<names>.+))?$/;\nexport function fastbootSwitch(specifier: string, fromFile: string, names: Set<string>): string {\n let filename = `${resolve(dirname(fromFile), specifier)}${fastbootSwitchSuffix}`;\n if (names.size > 0) {\n return `${filename}?names=${[...names].join(',')}`;\n } else {\n return filename;\n }\n}\n\nexport function decodeFastbootSwitch(filename: string) {\n // Performance: avoid paying regex exec cost unless needed\n if (!filename.includes(fastbootSwitchSuffix)) {\n return;\n }\n let match = fastbootSwitchPattern.exec(filename);\n if (match) {\n let names = match.groups?.names?.split(',') ?? [];\n return {\n names: names.filter(name => name !== 'default'),\n hasDefaultExport: names.includes('default'),\n filename: match.groups!.original,\n };\n }\n}\n\ninterface FastbootSwitchParams {\n names: string[];\n hasDefaultExport: boolean;\n}\n\nfunction renderFastbootSwitchTemplate(params: FastbootSwitchParams): VirtualContentResult {\n return {\n src: fastbootSwitchTemplate(params),\n watches: [],\n };\n}\n\nconst fastbootSwitchTemplate = compile(`\nimport { macroCondition, getGlobalConfig, importSync } from '@embroider/macros';\nlet mod;\nif (macroCondition(getGlobalConfig().fastboot?.isRunning)){\n mod = importSync('./fastboot');\n} else {\n mod = importSync('./browser');\n}\n{{#if hasDefaultExport}}\nexport default mod.default;\n{{/if}}\n{{#each names as |name|}}\nexport const {{name}} = mod.{{name}};\n{{/each}}\n`) as (params: FastbootSwitchParams) => string;\n\nconst implicitModulesPattern = /(?<filename>.*)[\\\\/]-embroider-implicit-(?<test>test-)?modules\\.js$/;\n\nexport function decodeImplicitModules(\n filename: string\n): { type: 'implicit-modules' | 'implicit-test-modules'; fromFile: string } | undefined {\n // Performance: avoid paying regex exec cost unless needed\n if (!filename.includes('-embroider-implicit-')) {\n return;\n }\n let m = implicitModulesPattern.exec(filename);\n if (m) {\n return {\n type: m.groups!.test ? 'implicit-test-modules' : 'implicit-modules',\n fromFile: m.groups!.filename,\n };\n }\n}\n\nfunction renderImplicitModules(\n {\n type,\n fromFile,\n }: {\n type: 'implicit-modules' | 'implicit-test-modules';\n fromFile: string;\n },\n resolver: Resolver\n): VirtualContentResult {\n let resolvableExtensionsPattern = extensionsPattern(resolver.options.resolvableExtensions);\n\n const pkg = resolver.packageCache.ownerOfFile(fromFile);\n if (!pkg?.isV2Ember()) {\n throw new Error(`bug: saw special implicit modules import in non-ember package at ${fromFile}`);\n }\n\n let ownModules: { runtime: string; buildtime: string }[] = [];\n let dependencyModules: string[] = [];\n\n let deps = pkg.dependencies.sort(orderAddons);\n\n for (let dep of deps) {\n // anything that isn't a v2 ember package by this point is not an active\n // addon.\n if (!dep.isV2Addon()) {\n continue;\n }\n\n // we ignore peerDependencies here because classic ember-cli ignores\n // peerDependencies here, and we're implementing the implicit-modules\n // backward-comptibility feature.\n if (pkg.categorizeDependency(dep.name) === 'peerDependencies') {\n continue;\n }\n\n let implicitModules = dep.meta[type];\n if (implicitModules) {\n let renamedModules = inverseRenamedModules(dep.meta, resolvableExtensionsPattern);\n for (let name of implicitModules) {\n let packageName = dep.name;\n\n let renamedMeta = dep.meta['renamed-packages'];\n if (renamedMeta) {\n Object.entries(renamedMeta).forEach(([key, value]) => {\n if (value === dep.name) {\n packageName = key;\n }\n });\n }\n\n let runtime = join(packageName, name).replace(resolvableExtensionsPattern, '');\n let runtimeRenameLookup = runtime.split('\\\\').join('/');\n if (renamedModules && renamedModules[runtimeRenameLookup]) {\n runtime = renamedModules[runtimeRenameLookup];\n }\n runtime = runtime.split(sep).join('/');\n ownModules.push({\n runtime,\n buildtime: posix.join(packageName, name),\n });\n }\n }\n // we don't recurse across an engine boundary. Engines import their own\n // implicit-modules.\n if (!dep.isEngine()) {\n dependencyModules.push(posix.join(dep.name, `-embroider-${type}.js`));\n }\n }\n return { src: implicitModulesTemplate({ ownModules, dependencyModules }), watches: [] };\n}\n\nconst implicitModulesTemplate = compile(`\n\n\n{{#each dependencyModules as |module index|}}\n import dep{{index}} from \"{{js-string-escape module}}\";\n{{/each}}\n\n{{#each ownModules as |module index|}}\n import * as own{{index}} from \"{{js-string-escape module.buildtime}}\";\n{{/each}}\n\nexport default Object.assign({},\n {{#each dependencyModules as |module index|}}\n dep{{index}},\n {{/each}}\n {\n {{#each ownModules as |module index|}}\n \"{{js-string-escape module.runtime}}\": own{{index}},\n {{/each}}\n }\n);\n`) as (params: { dependencyModules: string[]; ownModules: { runtime: string; buildtime: string }[] }) => string;\n\n// meta['renamed-modules'] has mapping from classic filename to real filename.\n// This takes that and converts it to the inverst mapping from real import path\n// to classic import path.\nfunction inverseRenamedModules(meta: AddonPackage['meta'], extensions: RegExp) {\n let renamed = meta['renamed-modules'];\n if (renamed) {\n let inverted = {} as { [name: string]: string };\n for (let [classic, real] of Object.entries(renamed)) {\n inverted[real.replace(extensions, '')] = classic.replace(extensions, '');\n }\n return inverted;\n }\n}\n\nfunction orderAddons(depA: Package, depB: Package): number {\n let depAIdx = 0;\n let depBIdx = 0;\n\n if (depA && depA.meta && depA.isV2Addon()) {\n depAIdx = depA.meta['order-index'] || 0;\n }\n if (depB && depB.meta && depB.isV2Addon()) {\n depBIdx = depB.meta['order-index'] || 0;\n }\n\n return depAIdx - depBIdx;\n}\n\nfunction renderCJSExternalShim(params: { moduleName: string }): VirtualContentResult {\n return {\n src: renderCJSExternalShimTemplate(params),\n watches: [],\n };\n}\n\nconst renderCJSExternalShimTemplate = compile(`\nmodule.exports = new Proxy({}, {\n get(target, prop) {\n\n {{!- our proxy always presents as ES module so that we can intercept \"get('default')\" -}}\n if (prop === '__esModule') {\n return true;\n }\n\n {{#if (eq moduleName \"require\")}}\n const m = window.requirejs;\n {{else}}\n const m = window.require(\"{{{js-string-escape moduleName}}}\");\n {{/if}}\n\n {{!-\n There are plenty of hand-written AMD defines floating around\n that lack an __esModule declaration.\n\n As far as I can tell, Ember's loader was already treating the Boolean(m.default)===true\n case as a module, so in theory we aren't breaking anything by\n treating it as such when other packagers come looking.\n -}}\n if (prop === 'default' && !m.__esModule && !m.default) {\n return m;\n }\n\n return m[prop];\n }\n});\n`) as (params: { moduleName: string }) => string;\n"]}