@embroider/core 3.4.20-unstable.35f48d4 → 3.4.20-unstable.4070ba7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embroider/core",
3
- "version": "3.4.20-unstable.35f48d4",
3
+ "version": "3.4.20-unstable.4070ba7",
4
4
  "private": false,
5
5
  "description": "A build system for EmberJS applications.",
6
6
  "repository": {
@@ -49,9 +49,9 @@
49
49
  "semver": "^7.3.5",
50
50
  "typescript-memoize": "^1.0.1",
51
51
  "walk-sync": "^3.0.0",
52
- "@embroider/macros": "1.16.10-unstable.35f48d4",
53
- "@embroider/reverse-exports": "0.1.1-unstable.35f48d4",
54
- "@embroider/shared-internals": "2.8.2-unstable.35f48d4"
52
+ "@embroider/macros": "1.16.10-unstable.4070ba7",
53
+ "@embroider/shared-internals": "2.8.2-unstable.4070ba7",
54
+ "@embroider/reverse-exports": "0.1.1-unstable.4070ba7"
55
55
  },
56
56
  "devDependencies": {
57
57
  "@glimmer/syntax": "^0.84.2",
@@ -70,8 +70,8 @@
70
70
  "fixturify": "^2.1.1",
71
71
  "tmp": "^0.1.0",
72
72
  "typescript": "^5.4.5",
73
- "@embroider/sample-transforms": "0.0.0",
74
- "@embroider/test-support": "0.36.0"
73
+ "@embroider/test-support": "0.36.0",
74
+ "@embroider/sample-transforms": "0.0.0"
75
75
  },
76
76
  "engines": {
77
77
  "node": "12.* || 14.* || >= 16"
package/src/index.d.ts CHANGED
@@ -9,6 +9,6 @@ export { Resolver } from './module-resolver';
9
9
  export { ModuleRequest, type Resolution, type RequestAdapter, type RequestAdapterCreate } from './module-request';
10
10
  export type { Options as ResolverOptions } from './module-resolver-options';
11
11
  export { ResolverLoader } from './resolver-loader';
12
- export { virtualContent } from './virtual-content';
12
+ export { virtualContent, type VirtualResponse } from './virtual-content';
13
13
  export type { Engine } from './app-files';
14
14
  export * from '@embroider/shared-internals';
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,uCAOoB;AAHlB,qHAAA,yBAAyB,OAAA;AACzB,sGAAA,UAAU,OAAA;AACV,+GAAA,mBAAmB,OAAA;AAErB,qDAAkE;AAAzD,iHAAA,cAAc,OAAA;AAEvB,qCAAoE;AAAvC,8GAAA,mBAAmB,OAAA;AAChD,mDAAwE;AAA/D,+HAAA,OAAO,OAAgB;AAChC,iDAAiE;AAAxD,oHAAA,OAAO,OAAuB;AACvC,uCAA4F;AAAnF,gGAAA,IAAI,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,gGAAA,IAAI,OAAA;AAAE,iGAAA,KAAK,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,2GAAA,eAAe,OAAA;AACvE,qDAA6C;AAApC,2GAAA,QAAQ,OAAA;AACjB,mDAAkH;AAAzG,+GAAA,aAAa,OAAA;AAEtB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AAGvB,8EAA8E;AAC9E,+DAA+D;AAC/D,8DAA4C","sourcesContent":["export {\n Packager,\n PackagerConstructor,\n Variant,\n applyVariantToBabelConfig,\n getAppMeta,\n getPackagerCacheDir,\n} from './packager';\nexport { HTMLEntrypoint, BundleSummary } from './html-entrypoint';\nexport { default as Stage } from './stage';\nexport { default as Options, optionsWithDefaults } from './options';\nexport { default as WaitForTrees, OutputPaths } from './wait-for-trees';\nexport { compile as jsHandlebarsCompile } from './js-handlebars';\nexport { todo, unsupported, warn, debug, expectWarning, throwOnWarnings } from './messages';\nexport { Resolver } from './module-resolver';\nexport { ModuleRequest, type Resolution, type RequestAdapter, type RequestAdapterCreate } from './module-request';\nexport type { Options as ResolverOptions } from './module-resolver-options';\nexport { ResolverLoader } from './resolver-loader';\nexport { virtualContent } from './virtual-content';\nexport type { Engine } from './app-files';\n\n// this is reexported because we already make users manage a peerDep from some\n// other packages (like embroider/webpack and @embroider/compat\nexport * from '@embroider/shared-internals';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,uCAOoB;AAHlB,qHAAA,yBAAyB,OAAA;AACzB,sGAAA,UAAU,OAAA;AACV,+GAAA,mBAAmB,OAAA;AAErB,qDAAkE;AAAzD,iHAAA,cAAc,OAAA;AAEvB,qCAAoE;AAAvC,8GAAA,mBAAmB,OAAA;AAChD,mDAAwE;AAA/D,+HAAA,OAAO,OAAgB;AAChC,iDAAiE;AAAxD,oHAAA,OAAO,OAAuB;AACvC,uCAA4F;AAAnF,gGAAA,IAAI,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,gGAAA,IAAI,OAAA;AAAE,iGAAA,KAAK,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,2GAAA,eAAe,OAAA;AACvE,qDAA6C;AAApC,2GAAA,QAAQ,OAAA;AACjB,mDAAkH;AAAzG,+GAAA,aAAa,OAAA;AAEtB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,qDAAyE;AAAhE,iHAAA,cAAc,OAAA;AAGvB,8EAA8E;AAC9E,+DAA+D;AAC/D,8DAA4C","sourcesContent":["export {\n Packager,\n PackagerConstructor,\n Variant,\n applyVariantToBabelConfig,\n getAppMeta,\n getPackagerCacheDir,\n} from './packager';\nexport { HTMLEntrypoint, BundleSummary } from './html-entrypoint';\nexport { default as Stage } from './stage';\nexport { default as Options, optionsWithDefaults } from './options';\nexport { default as WaitForTrees, OutputPaths } from './wait-for-trees';\nexport { compile as jsHandlebarsCompile } from './js-handlebars';\nexport { todo, unsupported, warn, debug, expectWarning, throwOnWarnings } from './messages';\nexport { Resolver } from './module-resolver';\nexport { ModuleRequest, type Resolution, type RequestAdapter, type RequestAdapterCreate } from './module-request';\nexport type { Options as ResolverOptions } from './module-resolver-options';\nexport { ResolverLoader } from './resolver-loader';\nexport { virtualContent, type VirtualResponse } from './virtual-content';\nexport type { Engine } from './app-files';\n\n// this is reexported because we already make users manage a peerDep from some\n// other packages (like embroider/webpack and @embroider/compat\nexport * from '@embroider/shared-internals';\n"]}
@@ -1,10 +1,8 @@
1
+ import type { VirtualResponse } from './virtual-content';
1
2
  export type Resolution<T = unknown, E = unknown> = {
2
3
  type: 'found';
3
4
  filename: string;
4
- isVirtual: boolean;
5
- result: T;
6
- } | {
7
- type: 'ignored';
5
+ virtual: VirtualResponse | false;
8
6
  result: T;
9
7
  } | {
10
8
  type: 'not_found';
@@ -17,6 +15,8 @@ export type RequestAdapterCreate<Init, Res extends Resolution> = (params: Init)
17
15
  export interface RequestAdapter<Res extends Resolution> {
18
16
  readonly debugType: string;
19
17
  resolve(request: ModuleRequest<Res>): Promise<Res>;
18
+ notFoundResponse(request: ModuleRequest<Res>): Res | (() => Promise<Res>);
19
+ virtualResponse(request: ModuleRequest<Res>, response: VirtualResponse): Res | (() => Promise<Res>);
20
20
  }
21
21
  export interface InitialRequestState {
22
22
  readonly specifier: string;
@@ -29,16 +29,15 @@ export declare class ModuleRequest<Res extends Resolution = Resolution> implemen
29
29
  private constructor();
30
30
  get specifier(): string;
31
31
  get fromFile(): string;
32
- get isVirtual(): boolean;
33
32
  get debugType(): string;
34
33
  get meta(): Record<string, unknown> | undefined;
35
- get isNotFound(): boolean;
36
- get resolvedTo(): Res | undefined;
34
+ get resolvedTo(): Res | (() => Promise<Res>) | undefined;
37
35
  alias(newSpecifier: string): this;
38
36
  rehome(newFromFile: string): this;
39
- virtualize(virtualFileName: string): this;
37
+ virtualize(virtualResponse: VirtualResponse): this;
40
38
  withMeta(meta: Record<string, any> | undefined): this;
41
39
  notFound(): this;
42
- resolveTo(res: Res): this;
40
+ resolveTo(res: Res | (() => Promise<Res>)): this;
43
41
  defaultResolve(): Promise<Res>;
42
+ clone(): this;
44
43
  }
@@ -10,33 +10,26 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _ModuleRequest_instances, _a, _ModuleRequest_adapter, _ModuleRequest_specifier, _ModuleRequest_fromFile, _ModuleRequest_isVirtual, _ModuleRequest_meta, _ModuleRequest_isNotFound, _ModuleRequest_resolvedTo, _ModuleRequest_clone;
13
+ var _ModuleRequest_adapter, _ModuleRequest_specifier, _ModuleRequest_fromFile, _ModuleRequest_meta, _ModuleRequest_resolvedTo;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.ModuleRequest = void 0;
16
16
  class ModuleRequest {
17
17
  static create(createAdapter, params) {
18
18
  let result = createAdapter(params);
19
19
  if (result) {
20
- return new _a(result.adapter, result.initialState);
20
+ return new ModuleRequest(result.adapter, result.initialState);
21
21
  }
22
22
  }
23
- constructor(adapter, initialize, propagate) {
24
- var _b, _c;
25
- _ModuleRequest_instances.add(this);
23
+ constructor(adapter, initialize) {
26
24
  _ModuleRequest_adapter.set(this, void 0);
27
25
  _ModuleRequest_specifier.set(this, void 0);
28
26
  _ModuleRequest_fromFile.set(this, void 0);
29
- _ModuleRequest_isVirtual.set(this, void 0);
30
27
  _ModuleRequest_meta.set(this, void 0);
31
- _ModuleRequest_isNotFound.set(this, void 0);
32
28
  _ModuleRequest_resolvedTo.set(this, void 0);
33
29
  __classPrivateFieldSet(this, _ModuleRequest_adapter, adapter, "f");
34
30
  __classPrivateFieldSet(this, _ModuleRequest_specifier, initialize.specifier, "f");
35
31
  __classPrivateFieldSet(this, _ModuleRequest_fromFile, initialize.fromFile, "f");
36
32
  __classPrivateFieldSet(this, _ModuleRequest_meta, initialize.meta, "f");
37
- __classPrivateFieldSet(this, _ModuleRequest_isVirtual, (_b = propagate === null || propagate === void 0 ? void 0 : propagate.isVirtual) !== null && _b !== void 0 ? _b : false, "f");
38
- __classPrivateFieldSet(this, _ModuleRequest_isNotFound, (_c = propagate === null || propagate === void 0 ? void 0 : propagate.isNotFound) !== null && _c !== void 0 ? _c : false, "f");
39
- __classPrivateFieldSet(this, _ModuleRequest_resolvedTo, propagate === null || propagate === void 0 ? void 0 : propagate.resolvedTo, "f");
40
33
  }
41
34
  get specifier() {
42
35
  return __classPrivateFieldGet(this, _ModuleRequest_specifier, "f");
@@ -44,18 +37,12 @@ class ModuleRequest {
44
37
  get fromFile() {
45
38
  return __classPrivateFieldGet(this, _ModuleRequest_fromFile, "f");
46
39
  }
47
- get isVirtual() {
48
- return __classPrivateFieldGet(this, _ModuleRequest_isVirtual, "f");
49
- }
50
40
  get debugType() {
51
41
  return __classPrivateFieldGet(this, _ModuleRequest_adapter, "f").debugType;
52
42
  }
53
43
  get meta() {
54
44
  return __classPrivateFieldGet(this, _ModuleRequest_meta, "f");
55
45
  }
56
- get isNotFound() {
57
- return __classPrivateFieldGet(this, _ModuleRequest_isNotFound, "f");
58
- }
59
46
  get resolvedTo() {
60
47
  return __classPrivateFieldGet(this, _ModuleRequest_resolvedTo, "f");
61
48
  }
@@ -63,51 +50,42 @@ class ModuleRequest {
63
50
  if (__classPrivateFieldGet(this, _ModuleRequest_specifier, "f") === newSpecifier) {
64
51
  return this;
65
52
  }
66
- let result = __classPrivateFieldGet(this, _ModuleRequest_instances, "m", _ModuleRequest_clone).call(this);
53
+ let result = this.clone();
67
54
  __classPrivateFieldSet(result, _ModuleRequest_specifier, newSpecifier, "f");
68
- __classPrivateFieldSet(result, _ModuleRequest_isNotFound, false, "f");
69
- __classPrivateFieldSet(result, _ModuleRequest_resolvedTo, undefined, "f");
70
55
  return result;
71
56
  }
72
57
  rehome(newFromFile) {
73
58
  if (__classPrivateFieldGet(this, _ModuleRequest_fromFile, "f") === newFromFile) {
74
59
  return this;
75
60
  }
76
- let result = __classPrivateFieldGet(this, _ModuleRequest_instances, "m", _ModuleRequest_clone).call(this);
61
+ let result = this.clone();
77
62
  __classPrivateFieldSet(result, _ModuleRequest_fromFile, newFromFile, "f");
78
- __classPrivateFieldSet(result, _ModuleRequest_isNotFound, false, "f");
79
- __classPrivateFieldSet(result, _ModuleRequest_resolvedTo, undefined, "f");
80
63
  return result;
81
64
  }
82
- virtualize(virtualFileName) {
83
- let result = __classPrivateFieldGet(this, _ModuleRequest_instances, "m", _ModuleRequest_clone).call(this);
84
- __classPrivateFieldSet(result, _ModuleRequest_specifier, virtualFileName, "f");
85
- __classPrivateFieldSet(result, _ModuleRequest_isVirtual, true, "f");
86
- __classPrivateFieldSet(result, _ModuleRequest_isNotFound, false, "f");
87
- __classPrivateFieldSet(result, _ModuleRequest_resolvedTo, undefined, "f");
88
- return result;
65
+ virtualize(virtualResponse) {
66
+ return this.resolveTo(__classPrivateFieldGet(this, _ModuleRequest_adapter, "f").virtualResponse(this, virtualResponse));
89
67
  }
90
68
  withMeta(meta) {
91
- let result = __classPrivateFieldGet(this, _ModuleRequest_instances, "m", _ModuleRequest_clone).call(this);
69
+ let result = this.clone();
92
70
  __classPrivateFieldSet(result, _ModuleRequest_meta, meta, "f");
71
+ __classPrivateFieldSet(result, _ModuleRequest_resolvedTo, __classPrivateFieldGet(this, _ModuleRequest_resolvedTo, "f"), "f");
93
72
  return result;
94
73
  }
95
74
  notFound() {
96
- let result = __classPrivateFieldGet(this, _ModuleRequest_instances, "m", _ModuleRequest_clone).call(this);
97
- __classPrivateFieldSet(result, _ModuleRequest_isNotFound, true, "f");
98
- return result;
75
+ return this.resolveTo(__classPrivateFieldGet(this, _ModuleRequest_adapter, "f").notFoundResponse(this));
99
76
  }
100
77
  resolveTo(res) {
101
- let result = __classPrivateFieldGet(this, _ModuleRequest_instances, "m", _ModuleRequest_clone).call(this);
78
+ let result = this.clone();
102
79
  __classPrivateFieldSet(result, _ModuleRequest_resolvedTo, res, "f");
103
80
  return result;
104
81
  }
105
82
  defaultResolve() {
106
83
  return __classPrivateFieldGet(this, _ModuleRequest_adapter, "f").resolve(this);
107
84
  }
85
+ clone() {
86
+ return new ModuleRequest(__classPrivateFieldGet(this, _ModuleRequest_adapter, "f"), this);
87
+ }
108
88
  }
109
89
  exports.ModuleRequest = ModuleRequest;
110
- _a = ModuleRequest, _ModuleRequest_adapter = new WeakMap(), _ModuleRequest_specifier = new WeakMap(), _ModuleRequest_fromFile = new WeakMap(), _ModuleRequest_isVirtual = new WeakMap(), _ModuleRequest_meta = new WeakMap(), _ModuleRequest_isNotFound = new WeakMap(), _ModuleRequest_resolvedTo = new WeakMap(), _ModuleRequest_instances = new WeakSet(), _ModuleRequest_clone = function _ModuleRequest_clone() {
111
- return new _a(__classPrivateFieldGet(this, _ModuleRequest_adapter, "f"), this, this);
112
- };
90
+ _ModuleRequest_adapter = new WeakMap(), _ModuleRequest_specifier = new WeakMap(), _ModuleRequest_fromFile = new WeakMap(), _ModuleRequest_meta = new WeakMap(), _ModuleRequest_resolvedTo = new WeakMap();
113
91
  //# sourceMappingURL=module-request.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"module-request.js","sourceRoot":"","sources":["module-request.ts"],"names":[],"mappings":"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","sourcesContent":["// This is generic because different build systems have different ways of\n// representing a found module, and we just pass those values through.\nexport type Resolution<T = unknown, E = unknown> =\n | { type: 'found'; filename: string; isVirtual: boolean; result: T }\n\n // used for requests that are special and don't represent real files that\n // embroider can possibly do anything custom with.\n //\n // the motivating use case for introducing this is Vite's depscan which marks\n // almost everything as \"external\" as a way to tell esbuild to stop traversing\n // once it has been seen the first time.\n | { type: 'ignored'; result: T }\n\n // the important thing about this Resolution is that embroider should do its\n // fallback behaviors here.\n | { type: 'not_found'; err: E };\n\nexport type RequestAdapterCreate<Init, Res extends Resolution> = (\n params: Init\n) => { initialState: InitialRequestState; adapter: RequestAdapter<Res> } | undefined;\n\nexport interface RequestAdapter<Res extends Resolution> {\n readonly debugType: string;\n resolve(request: ModuleRequest<Res>): Promise<Res>;\n}\n\nexport interface InitialRequestState {\n readonly specifier: string;\n readonly fromFile: string;\n readonly meta: Record<string, unknown> | undefined;\n}\n\nexport class ModuleRequest<Res extends Resolution = Resolution> implements ModuleRequest<Res> {\n static create<Init, Res extends Resolution>(\n createAdapter: RequestAdapterCreate<Init, Res>,\n params: Init\n ): ModuleRequest<Res> | undefined {\n let result = createAdapter(params);\n if (result) {\n return new ModuleRequest(result.adapter, result.initialState);\n }\n }\n\n #adapter: RequestAdapter<Res>;\n #specifier: string;\n #fromFile: string;\n #isVirtual: boolean;\n #meta: Record<string, unknown> | undefined;\n #isNotFound: boolean;\n #resolvedTo: Res | undefined;\n\n private constructor(\n adapter: RequestAdapter<Res>,\n initialize: InitialRequestState,\n propagate?: { isVirtual: boolean; isNotFound: boolean; resolvedTo: Res | undefined }\n ) {\n this.#adapter = adapter;\n this.#specifier = initialize.specifier;\n this.#fromFile = initialize.fromFile;\n this.#meta = initialize.meta;\n this.#isVirtual = propagate?.isVirtual ?? false;\n this.#isNotFound = propagate?.isNotFound ?? false;\n this.#resolvedTo = propagate?.resolvedTo;\n }\n\n get specifier(): string {\n return this.#specifier;\n }\n\n get fromFile(): string {\n return this.#fromFile;\n }\n\n get isVirtual(): boolean {\n return this.#isVirtual;\n }\n\n get debugType(): string {\n return this.#adapter.debugType;\n }\n\n get meta(): Record<string, unknown> | undefined {\n return this.#meta;\n }\n\n get isNotFound(): boolean {\n return this.#isNotFound;\n }\n\n get resolvedTo(): Res | undefined {\n return this.#resolvedTo;\n }\n\n alias(newSpecifier: string): this {\n if (this.#specifier === newSpecifier) {\n return this;\n }\n let result = this.#clone();\n result.#specifier = newSpecifier;\n result.#isNotFound = false;\n result.#resolvedTo = undefined;\n return result;\n }\n\n rehome(newFromFile: string): this {\n if (this.#fromFile === newFromFile) {\n return this;\n }\n let result = this.#clone();\n result.#fromFile = newFromFile;\n result.#isNotFound = false;\n result.#resolvedTo = undefined;\n return result;\n }\n\n virtualize(virtualFileName: string): this {\n let result = this.#clone();\n result.#specifier = virtualFileName;\n result.#isVirtual = true;\n result.#isNotFound = false;\n result.#resolvedTo = undefined;\n return result;\n }\n\n withMeta(meta: Record<string, any> | undefined): this {\n let result = this.#clone();\n result.#meta = meta;\n return result;\n }\n\n notFound(): this {\n let result = this.#clone();\n result.#isNotFound = true;\n return result;\n }\n\n resolveTo(res: Res): this {\n let result = this.#clone();\n result.#resolvedTo = res;\n return result;\n }\n\n defaultResolve(): Promise<Res> {\n return this.#adapter.resolve(this);\n }\n\n #clone(): this {\n return new ModuleRequest(this.#adapter, this, this) as this;\n }\n}\n"]}
1
+ {"version":3,"file":"module-request.js","sourceRoot":"","sources":["module-request.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCA,MAAa,aAAa;IACxB,MAAM,CAAC,MAAM,CACX,aAA8C,EAC9C,MAAY;QAEZ,IAAI,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAQD,YAAoB,OAA4B,EAAE,UAA+B;QANjF,yCAA8B;QAC9B,2CAAmB;QACnB,0CAAkB;QAClB,sCAA2C;QAC3C,4CAAoD;QAGlD,uBAAA,IAAI,0BAAY,OAAO,MAAA,CAAC;QACxB,uBAAA,IAAI,4BAAc,UAAU,CAAC,SAAS,MAAA,CAAC;QACvC,uBAAA,IAAI,2BAAa,UAAU,CAAC,QAAQ,MAAA,CAAC;QACrC,uBAAA,IAAI,uBAAS,UAAU,CAAC,IAAI,MAAA,CAAC;IAC/B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,uBAAA,IAAI,gCAAW,CAAC;IACzB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,uBAAA,IAAI,+BAAU,CAAC;IACxB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,uBAAA,IAAI,8BAAS,CAAC,SAAS,CAAC;IACjC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,uBAAA,IAAI,2BAAM,CAAC;IACpB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,uBAAA,IAAI,iCAAY,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,YAAoB;QACxB,IAAI,uBAAA,IAAI,gCAAW,KAAK,YAAY,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,uBAAA,MAAM,4BAAc,YAAY,MAAA,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,WAAmB;QACxB,IAAI,uBAAA,IAAI,+BAAU,KAAK,WAAW,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,uBAAA,MAAM,2BAAa,WAAW,MAAA,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,eAAgC;QACzC,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAA,IAAI,8BAAS,CAAC,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,QAAQ,CAAC,IAAqC;QAC5C,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,uBAAA,MAAM,uBAAS,IAAI,MAAA,CAAC;QACpB,uBAAA,MAAM,6BAAe,uBAAA,IAAI,iCAAY,MAAA,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAA,IAAI,8BAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS,CAAC,GAA+B;QACvC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,uBAAA,MAAM,6BAAe,GAAG,MAAA,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,cAAc;QACZ,OAAO,uBAAA,IAAI,8BAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,KAAK;QACH,OAAO,IAAI,aAAa,CAAC,uBAAA,IAAI,8BAAS,EAAE,IAAI,CAAS,CAAC;IACxD,CAAC;CACF;AA1FD,sCA0FC","sourcesContent":["import type { VirtualResponse } from './virtual-content';\n\n// This is generic because different build systems have different ways of\n// representing a found module, and we just pass those values through.\nexport type Resolution<T = unknown, E = unknown> =\n | { type: 'found'; filename: string; virtual: VirtualResponse | false; result: T }\n\n // the important thing about this Resolution is that embroider should do its\n // fallback behaviors here.\n | { type: 'not_found'; err: E };\n\nexport type RequestAdapterCreate<Init, Res extends Resolution> = (\n params: Init\n) => { initialState: InitialRequestState; adapter: RequestAdapter<Res> } | undefined;\n\nexport interface RequestAdapter<Res extends Resolution> {\n readonly debugType: string;\n resolve(request: ModuleRequest<Res>): Promise<Res>;\n\n // the function-returning variants of both of these are only because webpack\n // plugins are a pain in the butt. Integrators are encouraged to use the plain\n // Response-returning variants in all sane build environments.\n notFoundResponse(request: ModuleRequest<Res>): Res | (() => Promise<Res>);\n virtualResponse(request: ModuleRequest<Res>, response: VirtualResponse): Res | (() => Promise<Res>);\n}\n\nexport interface InitialRequestState {\n readonly specifier: string;\n readonly fromFile: string;\n readonly meta: Record<string, unknown> | undefined;\n}\n\nexport class ModuleRequest<Res extends Resolution = Resolution> implements ModuleRequest<Res> {\n static create<Init, Res extends Resolution>(\n createAdapter: RequestAdapterCreate<Init, Res>,\n params: Init\n ): ModuleRequest<Res> | undefined {\n let result = createAdapter(params);\n if (result) {\n return new ModuleRequest(result.adapter, result.initialState);\n }\n }\n\n #adapter: RequestAdapter<Res>;\n #specifier: string;\n #fromFile: string;\n #meta: Record<string, unknown> | undefined;\n #resolvedTo: Res | (() => Promise<Res>) | undefined;\n\n private constructor(adapter: RequestAdapter<Res>, initialize: InitialRequestState) {\n this.#adapter = adapter;\n this.#specifier = initialize.specifier;\n this.#fromFile = initialize.fromFile;\n this.#meta = initialize.meta;\n }\n\n get specifier(): string {\n return this.#specifier;\n }\n\n get fromFile(): string {\n return this.#fromFile;\n }\n\n get debugType(): string {\n return this.#adapter.debugType;\n }\n\n get meta(): Record<string, unknown> | undefined {\n return this.#meta;\n }\n\n get resolvedTo(): Res | (() => Promise<Res>) | undefined {\n return this.#resolvedTo;\n }\n\n alias(newSpecifier: string): this {\n if (this.#specifier === newSpecifier) {\n return this;\n }\n let result = this.clone();\n result.#specifier = newSpecifier;\n return result;\n }\n\n rehome(newFromFile: string): this {\n if (this.#fromFile === newFromFile) {\n return this;\n }\n let result = this.clone();\n result.#fromFile = newFromFile;\n return result;\n }\n\n virtualize(virtualResponse: VirtualResponse): this {\n return this.resolveTo(this.#adapter.virtualResponse(this, virtualResponse));\n }\n\n withMeta(meta: Record<string, any> | undefined): this {\n let result = this.clone();\n result.#meta = meta;\n result.#resolvedTo = this.#resolvedTo;\n return result;\n }\n\n notFound(): this {\n return this.resolveTo(this.#adapter.notFoundResponse(this));\n }\n\n resolveTo(res: Res | (() => Promise<Res>)): this {\n let result = this.clone();\n result.#resolvedTo = res;\n return result;\n }\n\n defaultResolve(): Promise<Res> {\n return this.#adapter.resolve(this);\n }\n\n clone(): this {\n return new ModuleRequest(this.#adapter, this) as this;\n }\n}\n"]}
@@ -24,6 +24,7 @@ const fs_1 = require("fs");
24
24
  const node_resolve_1 = require("./node-resolve");
25
25
  const virtual_route_entrypoint_1 = require("./virtual-route-entrypoint");
26
26
  const semver_1 = require("semver");
27
+ const virtual_entrypoint_1 = require("./virtual-entrypoint");
27
28
  const debug = (0, debug_1.default)('embroider:resolver');
28
29
  // Using a formatter makes this work lazy so nothing happens when we aren't
29
30
  // logging. It is unfortunate that formatters are a globally mutable config and
@@ -36,10 +37,7 @@ debug_1.default.formatters.p = (s) => {
36
37
  return s;
37
38
  };
38
39
  function logTransition(reason, before, after = before) {
39
- if (after.isVirtual) {
40
- debug(`[%s:virtualized] %s because %s\n in %p`, before.debugType, before.specifier, reason, before.fromFile);
41
- }
42
- else if (after.resolvedTo) {
40
+ if (after.resolvedTo) {
43
41
  debug(`[%s:resolvedTo] %s because %s\n in %p`, before.debugType, before.specifier, reason, before.fromFile);
44
42
  }
45
43
  else if (before.specifier !== after.specifier) {
@@ -53,17 +51,11 @@ function logTransition(reason, before, after = before) {
53
51
  else if (before.fromFile !== after.fromFile) {
54
52
  debug(`[%s:rehomed] %s, because %s\n from %p\n to %p`, before.debugType, before.specifier, reason, before.fromFile, after.fromFile);
55
53
  }
56
- else if (after.isNotFound) {
57
- debug(`[%s:not-found] %s because %s\n in %p`, before.debugType, before.specifier, reason, before.fromFile);
58
- }
59
54
  else {
60
55
  debug(`[%s:unchanged] %s because %s\n in %p`, before.debugType, before.specifier, reason, before.fromFile);
61
56
  }
62
57
  return after;
63
58
  }
64
- function isTerminal(request) {
65
- return request.isVirtual || request.isNotFound || Boolean(request.resolvedTo);
66
- }
67
59
  const compatPattern = /@embroider\/virtual\/(?<type>[^\/]+)\/(?<rest>.*)/;
68
60
  class Resolver {
69
61
  constructor(options) {
@@ -102,36 +94,43 @@ class Resolver {
102
94
  // rules.
103
95
  async resolve(request) {
104
96
  request = await this.beforeResolve(request);
97
+ let resolution;
105
98
  if (request.resolvedTo) {
106
- return request.resolvedTo;
99
+ if (typeof request.resolvedTo === 'function') {
100
+ resolution = await request.resolvedTo();
101
+ }
102
+ else {
103
+ resolution = request.resolvedTo;
104
+ }
105
+ }
106
+ else {
107
+ resolution = await request.defaultResolve();
107
108
  }
108
- let resolution = await request.defaultResolve();
109
109
  switch (resolution.type) {
110
110
  case 'found':
111
- case 'ignored':
112
111
  return resolution;
113
112
  case 'not_found':
114
113
  break;
115
114
  default:
116
115
  throw (0, assert_never_1.default)(resolution);
117
116
  }
117
+ request = request.clone();
118
118
  let nextRequest = await this.fallbackResolve(request);
119
119
  if (nextRequest === request) {
120
120
  // no additional fallback is available.
121
121
  return resolution;
122
122
  }
123
123
  if (nextRequest.resolvedTo) {
124
- return nextRequest.resolvedTo;
124
+ if (typeof nextRequest.resolvedTo === 'function') {
125
+ return await nextRequest.resolvedTo();
126
+ }
127
+ else {
128
+ return nextRequest.resolvedTo;
129
+ }
125
130
  }
126
131
  if (nextRequest.fromFile === request.fromFile && nextRequest.specifier === request.specifier) {
127
132
  throw new Error('Bug Discovered! New request is not === original request but has the same fromFile and specifier. This will likely create a loop.');
128
133
  }
129
- if (nextRequest.isVirtual || nextRequest.isNotFound) {
130
- // virtual and NotFound requests are terminal, there is no more
131
- // beforeResolve or fallbackResolve around them. The defaultResolve is
132
- // expected to know how to implement them.
133
- return nextRequest.defaultResolve();
134
- }
135
134
  return this.resolve(nextRequest);
136
135
  }
137
136
  // Use standard NodeJS resolving, with our required compatibility rules on
@@ -155,7 +154,7 @@ class Resolver {
155
154
  return owningPackage;
156
155
  }
157
156
  generateFastbootSwitch(request) {
158
- if (isTerminal(request)) {
157
+ if (request.resolvedTo) {
159
158
  return request;
160
159
  }
161
160
  let pkg = this.packageCache.ownerOfFile(request.fromFile);
@@ -183,7 +182,7 @@ class Resolver {
183
182
  return logTransition('internal lookup from fastbootSwitch', request);
184
183
  }
185
184
  else {
186
- return logTransition('shadowed app fastboot', request, request.virtualize(switchFile));
185
+ return logTransition('shadowed app fastboot', request, request.virtualize({ type: 'fastboot-switch', specifier: switchFile }));
187
186
  }
188
187
  }
189
188
  else {
@@ -196,7 +195,7 @@ class Resolver {
196
195
  }
197
196
  handleFastbootSwitch(request) {
198
197
  var _a;
199
- if (isTerminal(request)) {
198
+ if (request.resolvedTo) {
200
199
  return request;
201
200
  }
202
201
  let match = (0, virtual_content_1.decodeFastbootSwitch)(request.fromFile);
@@ -243,7 +242,7 @@ class Resolver {
243
242
  return logTransition('failed to match in fastboot switch', request);
244
243
  }
245
244
  handleImplicitModules(request) {
246
- if (isTerminal(request)) {
245
+ if (request.resolvedTo) {
247
246
  return request;
248
247
  }
249
248
  let im = (0, virtual_content_1.decodeImplicitModules)(request.specifier);
@@ -257,51 +256,26 @@ class Resolver {
257
256
  let packageName = (0, shared_internals_1.packageName)(im.fromFile);
258
257
  if (packageName) {
259
258
  let dep = this.packageCache.resolve(packageName, pkg);
260
- return logTransition(`dep's implicit modules`, request, request.virtualize((0, path_1.resolve)(dep.root, `-embroider-${im.type}.js`)));
259
+ return logTransition(`dep's implicit modules`, request, request.virtualize({ type: im.type, specifier: (0, path_1.resolve)(dep.root, `-embroider-${im.type}.js`) }));
261
260
  }
262
261
  else {
263
- return logTransition(`own implicit modules`, request, request.virtualize((0, path_1.resolve)(pkg.root, `-embroider-${im.type}.js`)));
262
+ return logTransition(`own implicit modules`, request, request.virtualize({ type: im.type, specifier: (0, path_1.resolve)(pkg.root, `-embroider-${im.type}.js`) }));
264
263
  }
265
264
  }
266
265
  handleEntrypoint(request) {
267
- var _a;
268
- if (isTerminal(request)) {
269
- return request;
270
- }
271
- //TODO move the extra forwardslash handling out into the vite plugin
272
- const candidates = [
273
- '@embroider/virtual/compat-modules',
274
- '/@embroider/virtual/compat-modules',
275
- './@embroider/virtual/compat-modules',
276
- ];
277
- if (!candidates.some(c => request.specifier.startsWith(c + '/') || request.specifier === c)) {
266
+ if (request.resolvedTo) {
278
267
  return request;
279
268
  }
280
- const result = /\.?\/?@embroider\/virtual\/compat-modules(?:\/(?<packageName>.*))?/.exec(request.specifier);
281
- if (!result) {
282
- // TODO make a better error
283
- throw new Error('entrypoint does not match pattern' + request.specifier);
284
- }
285
- const { packageName } = result.groups;
286
- const requestingPkg = this.packageCache.ownerOfFile(request.fromFile);
287
- if (!(requestingPkg === null || requestingPkg === void 0 ? void 0 : requestingPkg.isV2Ember())) {
288
- throw new Error(`bug: found entrypoint import in non-ember package at ${request.fromFile}`);
289
- }
290
- let pkg;
291
- if (packageName) {
292
- pkg = this.packageCache.resolve(packageName, requestingPkg);
269
+ let virtualResponse = (0, virtual_entrypoint_1.virtualEntrypoint)(request, this.packageCache);
270
+ if (virtualResponse) {
271
+ return logTransition('entrypoint', request, request.virtualize(virtualResponse));
293
272
  }
294
273
  else {
295
- pkg = requestingPkg;
274
+ return request;
296
275
  }
297
- let matched = (0, resolve_exports_1.exports)(pkg.packageJSON, '-embroider-entrypoint.js', {
298
- browser: true,
299
- conditions: ['default', 'imports'],
300
- });
301
- return logTransition('entrypoint', request, request.virtualize((0, path_1.resolve)(pkg.root, (_a = matched === null || matched === void 0 ? void 0 : matched[0]) !== null && _a !== void 0 ? _a : '-embroider-entrypoint.js')));
302
276
  }
303
277
  handleRouteEntrypoint(request) {
304
- if (isTerminal(request)) {
278
+ if (request.resolvedTo) {
305
279
  return request;
306
280
  }
307
281
  let routeName = (0, virtual_route_entrypoint_1.decodePublicRouteEntrypoint)(request.specifier);
@@ -312,11 +286,7 @@ class Resolver {
312
286
  if (!(pkg === null || pkg === void 0 ? void 0 : pkg.isV2Ember())) {
313
287
  throw new Error(`bug: found entrypoint import in non-ember package at ${request.fromFile}`);
314
288
  }
315
- let matched = (0, resolve_exports_1.exports)(pkg.packageJSON, '-embroider-route-entrypoint.js', {
316
- browser: true,
317
- conditions: ['default', 'imports'],
318
- });
319
- return logTransition('route entrypoint', request, request.virtualize((0, virtual_route_entrypoint_1.encodeRouteEntrypoint)(pkg.root, matched === null || matched === void 0 ? void 0 : matched[0], routeName)));
289
+ return logTransition('route entrypoint', request, request.virtualize({ type: 'route-entrypoint', specifier: (0, virtual_route_entrypoint_1.encodeRouteEntrypoint)(pkg, routeName) }));
320
290
  }
321
291
  handleImplicitTestScripts(request) {
322
292
  //TODO move the extra forwardslash handling out into the vite plugin
@@ -332,7 +302,7 @@ class Resolver {
332
302
  if ((pkg === null || pkg === void 0 ? void 0 : pkg.root) !== this.options.engines[0].root) {
333
303
  throw new Error(`bug: found an import of ${request.specifier} in ${request.fromFile}, but this is not the top-level Ember app. The top-level Ember app is the only one that has support for @embroider/virtual/test-support.js. If you think something should be fixed in Embroider, please open an issue on https://github.com/embroider-build/embroider/issues.`);
334
304
  }
335
- return logTransition('test-support', request, request.virtualize((0, path_1.resolve)(pkg.root, '-embroider-test-support.js')));
305
+ return logTransition('test-support', request, request.virtualize({ type: 'test-support-js', specifier: (0, path_1.resolve)(pkg.root, '-embroider-test-support.js') }));
336
306
  }
337
307
  handleTestSupportStyles(request) {
338
308
  //TODO move the extra forwardslash handling out into the vite plugin
@@ -348,10 +318,13 @@ class Resolver {
348
318
  if ((pkg === null || pkg === void 0 ? void 0 : pkg.root) !== this.options.engines[0].root) {
349
319
  throw new Error(`bug: found an import of ${request.specifier} in ${request.fromFile}, but this is not the top-level Ember app. The top-level Ember app is the only one that has support for @embroider/virtual/test-support.css. If you think something should be fixed in Embroider, please open an issue on https://github.com/embroider-build/embroider/issues.`);
350
320
  }
351
- return logTransition('test-support-styles', request, request.virtualize((0, path_1.resolve)(pkg.root, '-embroider-test-support-styles.css')));
321
+ return logTransition('test-support-styles', request, request.virtualize({
322
+ type: 'test-support-css',
323
+ specifier: (0, path_1.resolve)(pkg.root, '-embroider-test-support-styles.css'),
324
+ }));
352
325
  }
353
326
  async handleGlobalsCompat(request) {
354
- if (isTerminal(request)) {
327
+ if (request.resolvedTo) {
355
328
  return request;
356
329
  }
357
330
  let match = compatPattern.exec(request.specifier);
@@ -391,7 +364,7 @@ class Resolver {
391
364
  if (!pkg || !this.options.engines.some(e => e.root === (pkg === null || pkg === void 0 ? void 0 : pkg.root))) {
392
365
  throw new Error(`bug: found an import of ${request.specifier} in ${request.fromFile}, but this is not the top-level Ember app or Engine. The top-level Ember app is the only one that has support for @embroider/virtual/vendor.css. If you think something should be fixed in Embroider, please open an issue on https://github.com/embroider-build/embroider/issues.`);
393
366
  }
394
- return logTransition('vendor-styles', request, request.virtualize((0, path_1.resolve)(pkg.root, '-embroider-vendor-styles.css')));
367
+ return logTransition('vendor-styles', request, request.virtualize({ type: 'vendor-css', specifier: (0, path_1.resolve)(pkg.root, '-embroider-vendor-styles.css') }));
395
368
  }
396
369
  resolveHelper(path, inEngine, request) {
397
370
  let target = this.parseGlobalPath(path, inEngine);
@@ -404,9 +377,7 @@ class Resolver {
404
377
  // first, the various places our template might be.
405
378
  for (let candidate of this.componentTemplateCandidates(target.packageName)) {
406
379
  let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;
407
- let resolution = await this.resolve(request.alias(candidateSpecifier).rehome(target.from).withMeta({
408
- runtimeFallback: false,
409
- }));
380
+ let resolution = await this.resolve(request.alias(candidateSpecifier).rehome(target.from));
410
381
  if (resolution.type === 'found') {
411
382
  hbsModule = resolution;
412
383
  break;
@@ -415,12 +386,7 @@ class Resolver {
415
386
  // then the various places our javascript might be.
416
387
  for (let candidate of this.componentJSCandidates(target.packageName)) {
417
388
  let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;
418
- let resolution = await this.resolve(request.alias(candidateSpecifier).rehome(target.from).withMeta({
419
- runtimeFallback: false,
420
- }));
421
- if (resolution.type === 'ignored') {
422
- return logTransition(`resolving to ignored component`, request, request.resolveTo(resolution));
423
- }
389
+ let resolution = await this.resolve(request.alias(candidateSpecifier).rehome(target.from));
424
390
  // .hbs is a resolvable extension for us, so we need to exclude it here.
425
391
  // It matches as a priority lower than .js, so finding an .hbs means
426
392
  // there's definitely not a .js.
@@ -433,7 +399,10 @@ class Resolver {
433
399
  if (!this.emberVersionSupportsSeparateTemplates) {
434
400
  throw new Error(`Components with separately resolved templates were removed at Ember 6.0. Migrate to either co-located js/ts + hbs files or to gjs/gts. https://deprecations.emberjs.com/id/component-template-resolving/. Bad template was: ${hbsModule.filename}.`);
435
401
  }
436
- return logTransition(`resolveComponent found legacy HBS`, request, request.virtualize((0, virtual_content_1.virtualPairComponent)(hbsModule.filename, jsModule === null || jsModule === void 0 ? void 0 : jsModule.filename)));
402
+ return logTransition(`resolveComponent found legacy HBS`, request, request.virtualize({
403
+ type: 'component-pair',
404
+ specifier: (0, virtual_content_1.virtualPairComponent)(this.options.appRoot, hbsModule.filename, jsModule === null || jsModule === void 0 ? void 0 : jsModule.filename),
405
+ }));
437
406
  }
438
407
  else if (jsModule) {
439
408
  return logTransition(`resolving to resolveComponent found only JS`, request, request.resolveTo(jsModule));
@@ -447,13 +416,8 @@ class Resolver {
447
416
  // component, so here to resolve the ambiguity we need to actually resolve
448
417
  // that candidate to see if it works.
449
418
  let helperCandidate = this.resolveHelper(path, inEngine, request);
450
- let helperMatch = await this.resolve(request.alias(helperCandidate.specifier).rehome(helperCandidate.fromFile).withMeta({
451
- runtimeFallback: false,
452
- }));
453
- // for the case of 'ignored' that means that esbuild found this helper in an external
454
- // package so it should be considered found in this case and we should not look for a
455
- // component with this name
456
- if (helperMatch.type === 'found' || helperMatch.type === 'ignored') {
419
+ let helperMatch = await this.resolve(request.alias(helperCandidate.specifier).rehome(helperCandidate.fromFile));
420
+ if (helperMatch.type === 'found') {
457
421
  return logTransition('resolve to ambiguous case matched a helper', request, request.resolveTo(helperMatch));
458
422
  }
459
423
  // unlike resolveHelper, resolveComponent already does pre-resolution in
@@ -631,7 +595,7 @@ class Resolver {
631
595
  });
632
596
  }
633
597
  handleRewrittenPackages(request) {
634
- if (isTerminal(request)) {
598
+ if (request.resolvedTo) {
635
599
  return request;
636
600
  }
637
601
  let requestingPkg = this.packageCache.ownerOfFile(request.fromFile);
@@ -684,7 +648,7 @@ class Resolver {
684
648
  return request;
685
649
  }
686
650
  handleRenaming(request) {
687
- if (isTerminal(request)) {
651
+ if (request.resolvedTo) {
688
652
  return request;
689
653
  }
690
654
  let packageName = (0, shared_internals_1.packageName)(request.specifier);
@@ -769,7 +733,7 @@ class Resolver {
769
733
  if ((pkg === null || pkg === void 0 ? void 0 : pkg.root) !== this.options.engines[0].root) {
770
734
  throw new Error(`bug: found an import of ${request.specifier} in ${request.fromFile}, but this is not the top-level Ember app. The top-level Ember app is the only one that has support for @embroider/virtual/vendor.js. If you think something should be fixed in Embroider, please open an issue on https://github.com/embroider-build/embroider/issues.`);
771
735
  }
772
- return logTransition('vendor', request, request.virtualize((0, path_1.resolve)(pkg.root, '-embroider-vendor.js')));
736
+ return logTransition('vendor', request, request.virtualize({ type: 'vendor-js', specifier: (0, path_1.resolve)(pkg.root, '-embroider-vendor.js') }));
773
737
  }
774
738
  resolveWithinMovedPackage(request, pkg) {
775
739
  let levels = ['..'];
@@ -786,7 +750,7 @@ class Resolver {
786
750
  return newRequest.withMeta({ originalFromFile });
787
751
  }
788
752
  preHandleExternal(request) {
789
- if (isTerminal(request)) {
753
+ if (request.resolvedTo) {
790
754
  return request;
791
755
  }
792
756
  let { specifier, fromFile } = request;
@@ -866,8 +830,8 @@ class Resolver {
866
830
  }
867
831
  }
868
832
  async fallbackResolve(request) {
869
- if (request.isVirtual) {
870
- throw new Error('Build tool bug detected! Fallback resolve should never see a virtual request. It is expected that the defaultResolve for your bundler has already resolved this request');
833
+ if (request.resolvedTo) {
834
+ throw new Error('Build tool bug detected! Fallback resolve should never see an already-resolved request.');
871
835
  }
872
836
  if (request.specifier === '@embroider/macros') {
873
837
  // the macros package is always handled directly within babel (not
@@ -1025,14 +989,15 @@ class Resolver {
1025
989
  case 'fastboot-only':
1026
990
  return request.alias(matched.entry['fastboot-js'].specifier).rehome(matched.entry['fastboot-js'].fromFile);
1027
991
  case 'both':
1028
- let foundAppJS = await this.resolve(request.alias(matched.entry['app-js'].specifier).rehome(matched.entry['app-js'].fromFile).withMeta({
1029
- runtimeFallback: false,
1030
- }));
992
+ let foundAppJS = await this.resolve(request.alias(matched.entry['app-js'].specifier).rehome(matched.entry['app-js'].fromFile));
1031
993
  if (foundAppJS.type !== 'found') {
1032
994
  throw new Error(`${matched.entry['app-js'].fromPackageName} declared ${inEngineSpecifier} in packageJSON.ember-addon.app-js, but that module does not exist`);
1033
995
  }
1034
996
  let { names } = (0, describe_exports_1.describeExports)((0, fs_1.readFileSync)(foundAppJS.filename, 'utf8'), { configFile: false });
1035
- return request.virtualize((0, virtual_content_1.fastbootSwitch)(matched.matched, (0, path_1.resolve)(engine.root, 'package.json'), names));
997
+ return request.virtualize({
998
+ type: 'fastboot-switch',
999
+ specifier: (0, virtual_content_1.fastbootSwitch)(matched.matched, (0, path_1.resolve)(engine.root, 'package.json'), names),
1000
+ });
1036
1001
  }
1037
1002
  }
1038
1003
  // check whether the given file with the given owningPackage is an addon's