@embroider/core 3.4.6-unstable.8c7b24d → 3.4.6-unstable.8e692cc
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 +5 -4
- package/src/index.d.ts +1 -1
- package/src/index.js.map +1 -1
- package/src/module-resolver.d.ts +14 -10
- package/src/module-resolver.js +106 -81
- package/src/module-resolver.js.map +1 -1
- package/src/node-resolve.d.ts +11 -4
- package/src/node-resolve.js +64 -38
- package/src/node-resolve.js.map +1 -1
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@embroider/core",
|
3
|
-
"version": "3.4.6-unstable.
|
3
|
+
"version": "3.4.6-unstable.8e692cc",
|
4
4
|
"private": false,
|
5
5
|
"description": "A build system for EmberJS applications.",
|
6
6
|
"repository": {
|
@@ -23,8 +23,8 @@
|
|
23
23
|
"@babel/core": "^7.14.5",
|
24
24
|
"@babel/parser": "^7.14.5",
|
25
25
|
"@babel/traverse": "^7.14.5",
|
26
|
-
"@embroider/macros": "1.14.1-unstable.
|
27
|
-
"@embroider/shared-internals": "2.5.3-unstable.
|
26
|
+
"@embroider/macros": "1.14.1-unstable.8e692cc",
|
27
|
+
"@embroider/shared-internals": "2.5.3-unstable.8e692cc",
|
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,8 @@
|
|
42
42
|
"lodash": "^4.17.21",
|
43
43
|
"resolve": "^1.20.0",
|
44
44
|
"resolve-package-path": "^4.0.1",
|
45
|
-
"
|
45
|
+
"resolve.exports": "^2.0.2",
|
46
|
+
"@embroider/reverse-exports": "0.1.1-unstable.8e692cc",
|
46
47
|
"typescript-memoize": "^1.0.1",
|
47
48
|
"walk-sync": "^3.0.0"
|
48
49
|
},
|
package/src/index.d.ts
CHANGED
@@ -7,7 +7,7 @@ export { default as toBroccoliPlugin } from './to-broccoli-plugin';
|
|
7
7
|
export { default as WaitForTrees, OutputPaths } from './wait-for-trees';
|
8
8
|
export { compile as jsHandlebarsCompile } from './js-handlebars';
|
9
9
|
export { todo, unsupported, warn, debug, expectWarning, throwOnWarnings } from './messages';
|
10
|
-
export { Resolver, Options as ResolverOptions, ModuleRequest, Resolution
|
10
|
+
export { Resolver, Options as ResolverOptions, ModuleRequest, Resolution } from './module-resolver';
|
11
11
|
export { ResolverLoader } from './resolver-loader';
|
12
12
|
export { virtualContent } from './virtual-content';
|
13
13
|
export type { Engine } from './app-files';
|
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;AAGvB,qCAAoE;AAAvC,8GAAA,mBAAmB,OAAA;AAChD,2DAAmE;AAA1D,uIAAA,OAAO,OAAoB;AACpC,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,
|
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;AAGvB,qCAAoE;AAAvC,8GAAA,mBAAmB,OAAA;AAChD,2DAAmE;AAA1D,uIAAA,OAAO,OAAoB;AACpC,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,qDAAoG;AAA3F,2GAAA,QAAQ,OAAA;AACjB,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 { Asset, EmberAsset, ImplicitAssetPaths } from './asset';\nexport { default as Options, optionsWithDefaults } from './options';\nexport { default as toBroccoliPlugin } from './to-broccoli-plugin';\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, Options as ResolverOptions, ModuleRequest, Resolution } from './module-resolver';\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"]}
|
package/src/module-resolver.d.ts
CHANGED
@@ -30,36 +30,40 @@ interface EngineConfig {
|
|
30
30
|
};
|
31
31
|
root: string;
|
32
32
|
}
|
33
|
-
export interface ModuleRequest {
|
33
|
+
export interface ModuleRequest<Res extends Resolution = Resolution> {
|
34
34
|
readonly specifier: string;
|
35
35
|
readonly fromFile: string;
|
36
36
|
readonly isVirtual: boolean;
|
37
37
|
readonly meta: Record<string, unknown> | undefined;
|
38
38
|
readonly debugType: string;
|
39
39
|
readonly isNotFound: boolean;
|
40
|
+
readonly resolvedTo: Res | undefined;
|
40
41
|
alias(newSpecifier: string): this;
|
41
42
|
rehome(newFromFile: string): this;
|
42
43
|
virtualize(virtualFilename: string): this;
|
43
44
|
withMeta(meta: Record<string, any> | undefined): this;
|
44
45
|
notFound(): this;
|
46
|
+
defaultResolve(): Promise<Res>;
|
47
|
+
resolveTo(resolution: Res): this;
|
45
48
|
}
|
46
49
|
export type Resolution<T = unknown, E = unknown> = {
|
47
50
|
type: 'found';
|
51
|
+
filename: string;
|
52
|
+
isVirtual: boolean;
|
53
|
+
result: T;
|
54
|
+
} | {
|
55
|
+
type: 'ignored';
|
48
56
|
result: T;
|
49
57
|
} | {
|
50
58
|
type: 'not_found';
|
51
59
|
err: E;
|
52
60
|
};
|
53
|
-
export type ResolverFunction<R extends ModuleRequest = ModuleRequest, Res extends Resolution = Resolution> = (request: R) => Promise<Res>;
|
54
|
-
export type SyncResolverFunction<R extends ModuleRequest = ModuleRequest, Res extends Resolution = Resolution> = (request: R) => Res;
|
55
61
|
export declare class Resolver {
|
56
62
|
readonly options: Options;
|
57
63
|
constructor(options: Options);
|
58
|
-
beforeResolve
|
59
|
-
resolve<
|
60
|
-
|
61
|
-
private internalResolve;
|
62
|
-
nodeResolve(specifier: string, fromFile: string): {
|
64
|
+
private beforeResolve;
|
65
|
+
resolve<ResolveResolution extends Resolution>(request: ModuleRequest<ResolveResolution>): Promise<ResolveResolution>;
|
66
|
+
nodeResolve(specifier: string, fromFile: string): Promise<{
|
63
67
|
type: 'virtual';
|
64
68
|
filename: string;
|
65
69
|
content: string;
|
@@ -69,7 +73,7 @@ export declare class Resolver {
|
|
69
73
|
} | {
|
70
74
|
type: 'not_found';
|
71
75
|
err: Error;
|
72
|
-
}
|
76
|
+
}>;
|
73
77
|
get packageCache(): RewrittenPackageCache;
|
74
78
|
private logicalPackage;
|
75
79
|
private generateFastbootSwitch;
|
@@ -93,7 +97,7 @@ export declare class Resolver {
|
|
93
97
|
private preHandleExternal;
|
94
98
|
private locateActiveAddon;
|
95
99
|
private external;
|
96
|
-
fallbackResolve
|
100
|
+
private fallbackResolve;
|
97
101
|
private getEntryFromMergeMap;
|
98
102
|
private withResolvableExtensions;
|
99
103
|
private searchAppTree;
|
package/src/module-resolver.js
CHANGED
@@ -16,6 +16,7 @@ const shared_internals_2 = require("@embroider/shared-internals");
|
|
16
16
|
const debug_1 = __importDefault(require("debug"));
|
17
17
|
const assert_never_1 = __importDefault(require("assert-never"));
|
18
18
|
const reverse_exports_1 = __importDefault(require("@embroider/reverse-exports"));
|
19
|
+
const resolve_exports_1 = require("resolve.exports");
|
19
20
|
const virtual_content_1 = require("./virtual-content");
|
20
21
|
const typescript_memoize_1 = require("typescript-memoize");
|
21
22
|
const describe_exports_1 = require("./describe-exports");
|
@@ -36,6 +37,9 @@ function logTransition(reason, before, after = before) {
|
|
36
37
|
if (after.isVirtual) {
|
37
38
|
debug(`[%s:virtualized] %s because %s\n in %p`, before.debugType, before.specifier, reason, before.fromFile);
|
38
39
|
}
|
40
|
+
else if (after.resolvedTo) {
|
41
|
+
debug(`[%s:resolvedTo] %s because %s\n in %p`, before.debugType, before.specifier, reason, before.fromFile);
|
42
|
+
}
|
39
43
|
else if (before.specifier !== after.specifier) {
|
40
44
|
if (before.fromFile !== after.fromFile) {
|
41
45
|
debug(`[%s:aliased and rehomed] %s to %s\n because %s\n from %p\n to %p`, before.debugType, before.specifier, after.specifier, reason, before.fromFile, after.fromFile);
|
@@ -55,12 +59,15 @@ function logTransition(reason, before, after = before) {
|
|
55
59
|
}
|
56
60
|
return after;
|
57
61
|
}
|
62
|
+
function isTerminal(request) {
|
63
|
+
return request.isVirtual || request.isNotFound || Boolean(request.resolvedTo);
|
64
|
+
}
|
58
65
|
const compatPattern = /#embroider_compat\/(?<type>[^\/]+)\/(?<rest>.*)/;
|
59
66
|
class Resolver {
|
60
67
|
constructor(options) {
|
61
68
|
this.options = options;
|
62
69
|
}
|
63
|
-
beforeResolve(request) {
|
70
|
+
async beforeResolve(request) {
|
64
71
|
if (request.specifier === '@embroider/macros') {
|
65
72
|
// the macros package is always handled directly within babel (not
|
66
73
|
// necessarily as a real resolvable package), so we should not mess with it.
|
@@ -72,7 +79,7 @@ class Resolver {
|
|
72
79
|
return this.external('early require', request, request.specifier);
|
73
80
|
}
|
74
81
|
request = this.handleFastbootSwitch(request);
|
75
|
-
request = this.handleGlobalsCompat(request);
|
82
|
+
request = await this.handleGlobalsCompat(request);
|
76
83
|
request = this.handleImplicitModules(request);
|
77
84
|
request = this.handleRenaming(request);
|
78
85
|
// we expect the specifier to be app relative at this point - must be after handleRenaming
|
@@ -88,47 +95,29 @@ class Resolver {
|
|
88
95
|
// that calls your build system's normal module resolver, this does both pre-
|
89
96
|
// and post-resolution adjustments as needed to implement our compatibility
|
90
97
|
// rules.
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
let
|
97
|
-
let out = gen.next();
|
98
|
-
while (!out.done) {
|
99
|
-
out = gen.next(await out.value);
|
100
|
-
}
|
101
|
-
return out.value;
|
102
|
-
}
|
103
|
-
// synchronous alternative to resolve() above. Because our own internals are
|
104
|
-
// all synchronous, you can use this if your defaultResolve function is
|
105
|
-
// synchronous.
|
106
|
-
resolveSync(request, defaultResolve) {
|
107
|
-
let gen = this.internalResolve(request, defaultResolve);
|
108
|
-
let out = gen.next();
|
109
|
-
while (!out.done) {
|
110
|
-
out = gen.next(out.value);
|
111
|
-
}
|
112
|
-
return out.value;
|
113
|
-
}
|
114
|
-
// Our core implementation is a generator so it can power both resolve() and
|
115
|
-
// resolveSync()
|
116
|
-
*internalResolve(request, defaultResolve) {
|
117
|
-
request = this.beforeResolve(request);
|
118
|
-
let resolution = yield defaultResolve(request);
|
98
|
+
async resolve(request) {
|
99
|
+
request = await this.beforeResolve(request);
|
100
|
+
if (request.resolvedTo) {
|
101
|
+
return request.resolvedTo;
|
102
|
+
}
|
103
|
+
let resolution = await request.defaultResolve();
|
119
104
|
switch (resolution.type) {
|
120
105
|
case 'found':
|
106
|
+
case 'ignored':
|
121
107
|
return resolution;
|
122
108
|
case 'not_found':
|
123
109
|
break;
|
124
110
|
default:
|
125
111
|
throw (0, assert_never_1.default)(resolution);
|
126
112
|
}
|
127
|
-
let nextRequest = this.fallbackResolve(request);
|
113
|
+
let nextRequest = await this.fallbackResolve(request);
|
128
114
|
if (nextRequest === request) {
|
129
115
|
// no additional fallback is available.
|
130
116
|
return resolution;
|
131
117
|
}
|
118
|
+
if (nextRequest.resolvedTo) {
|
119
|
+
return nextRequest.resolvedTo;
|
120
|
+
}
|
132
121
|
if (nextRequest.fromFile === request.fromFile && nextRequest.specifier === request.specifier) {
|
133
122
|
throw new Error('Bug Discovered! New request is not === original request but has the same fromFile and specifier. This will likely create a loop.');
|
134
123
|
}
|
@@ -136,14 +125,14 @@ class Resolver {
|
|
136
125
|
// virtual and NotFound requests are terminal, there is no more
|
137
126
|
// beforeResolve or fallbackResolve around them. The defaultResolve is
|
138
127
|
// expected to know how to implement them.
|
139
|
-
return
|
128
|
+
return nextRequest.defaultResolve();
|
140
129
|
}
|
141
|
-
return
|
130
|
+
return this.resolve(nextRequest);
|
142
131
|
}
|
143
132
|
// Use standard NodeJS resolving, with our required compatibility rules on
|
144
133
|
// top. This is a convenience method for calling resolveSync with the
|
145
134
|
// defaultResolve already configured to be "do the normal node thing".
|
146
|
-
nodeResolve(specifier, fromFile) {
|
135
|
+
async nodeResolve(specifier, fromFile) {
|
147
136
|
return (0, node_resolve_1.nodeResolve)(this, specifier, fromFile);
|
148
137
|
}
|
149
138
|
get packageCache() {
|
@@ -161,6 +150,9 @@ class Resolver {
|
|
161
150
|
return owningPackage;
|
162
151
|
}
|
163
152
|
generateFastbootSwitch(request) {
|
153
|
+
if (isTerminal(request)) {
|
154
|
+
return request;
|
155
|
+
}
|
164
156
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
165
157
|
if (!pkg) {
|
166
158
|
return request;
|
@@ -178,7 +170,9 @@ class Resolver {
|
|
178
170
|
let fastbootFile = engineConfig.fastbootFiles[candidate];
|
179
171
|
if (fastbootFile) {
|
180
172
|
if (fastbootFile.shadowedFilename) {
|
181
|
-
let { names } = (0, describe_exports_1.describeExports)((0, fs_1.readFileSync)((0, path_1.resolve)(pkg.root, fastbootFile.shadowedFilename), 'utf8'), {
|
173
|
+
let { names } = (0, describe_exports_1.describeExports)((0, fs_1.readFileSync)((0, path_1.resolve)(pkg.root, fastbootFile.shadowedFilename), 'utf8'), {
|
174
|
+
configFile: false,
|
175
|
+
});
|
182
176
|
let switchFile = (0, virtual_content_1.fastbootSwitch)(candidate, (0, path_1.resolve)(pkg.root, 'package.json'), names);
|
183
177
|
if (switchFile === request.fromFile) {
|
184
178
|
return logTransition('internal lookup from fastbootSwitch', request);
|
@@ -197,6 +191,9 @@ class Resolver {
|
|
197
191
|
}
|
198
192
|
handleFastbootSwitch(request) {
|
199
193
|
var _a;
|
194
|
+
if (isTerminal(request)) {
|
195
|
+
return request;
|
196
|
+
}
|
200
197
|
let match = (0, virtual_content_1.decodeFastbootSwitch)(request.fromFile);
|
201
198
|
if (!match) {
|
202
199
|
return request;
|
@@ -241,6 +238,9 @@ class Resolver {
|
|
241
238
|
return logTransition('failed to match in fastboot switch', request);
|
242
239
|
}
|
243
240
|
handleImplicitModules(request) {
|
241
|
+
if (isTerminal(request)) {
|
242
|
+
return request;
|
243
|
+
}
|
244
244
|
let im = (0, virtual_content_1.decodeImplicitModules)(request.specifier);
|
245
245
|
if (!im) {
|
246
246
|
return request;
|
@@ -258,7 +258,10 @@ class Resolver {
|
|
258
258
|
return logTransition(`own implicit modules`, request, request.virtualize((0, path_1.resolve)(pkg.root, `-embroider-${im.type}.js`)));
|
259
259
|
}
|
260
260
|
}
|
261
|
-
handleGlobalsCompat(request) {
|
261
|
+
async handleGlobalsCompat(request) {
|
262
|
+
if (isTerminal(request)) {
|
263
|
+
return request;
|
264
|
+
}
|
262
265
|
let match = compatPattern.exec(request.specifier);
|
263
266
|
if (!match) {
|
264
267
|
return request;
|
@@ -286,54 +289,60 @@ class Resolver {
|
|
286
289
|
let target = this.parseGlobalPath(path, inEngine);
|
287
290
|
return logTransition('resolveHelper', request, request.alias(`${target.packageName}/helpers/${target.memberName}`).rehome((0, path_1.resolve)(inEngine.root, 'package.json')));
|
288
291
|
}
|
289
|
-
resolveComponent(path, inEngine, request) {
|
292
|
+
async resolveComponent(path, inEngine, request) {
|
290
293
|
let target = this.parseGlobalPath(path, inEngine);
|
291
294
|
let hbsModule = null;
|
292
295
|
let jsModule = null;
|
293
296
|
// first, the various places our template might be.
|
294
297
|
for (let candidate of this.componentTemplateCandidates(target.packageName)) {
|
295
|
-
let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}
|
296
|
-
let resolution = this.
|
297
|
-
|
298
|
-
|
298
|
+
let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;
|
299
|
+
let resolution = await this.resolve(request.alias(candidateSpecifier).rehome(target.from).withMeta({
|
300
|
+
runtimeFallback: false,
|
301
|
+
}));
|
302
|
+
if (resolution.type === 'found') {
|
303
|
+
hbsModule = resolution;
|
299
304
|
break;
|
300
305
|
}
|
301
306
|
}
|
302
307
|
// then the various places our javascript might be.
|
303
308
|
for (let candidate of this.componentJSCandidates(target.packageName)) {
|
304
309
|
let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;
|
305
|
-
let resolution = this.
|
310
|
+
let resolution = await this.resolve(request.alias(candidateSpecifier).rehome(target.from).withMeta({
|
311
|
+
runtimeFallback: false,
|
312
|
+
}));
|
306
313
|
// .hbs is a resolvable extension for us, so we need to exclude it here.
|
307
314
|
// It matches as a priority lower than .js, so finding an .hbs means
|
308
315
|
// there's definitely not a .js.
|
309
|
-
if (resolution.type === '
|
310
|
-
jsModule =
|
316
|
+
if (resolution.type === 'found' && !resolution.filename.endsWith('.hbs')) {
|
317
|
+
jsModule = resolution;
|
311
318
|
break;
|
312
319
|
}
|
313
320
|
}
|
314
321
|
if (hbsModule) {
|
315
|
-
return logTransition(`resolveComponent found legacy HBS`, request, request.virtualize((0, virtual_content_1.virtualPairComponent)(hbsModule.
|
322
|
+
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)));
|
316
323
|
}
|
317
324
|
else if (jsModule) {
|
318
|
-
return logTransition(`resolveComponent found only JS`, request, request.
|
325
|
+
return logTransition(`resolving to resolveComponent found only JS`, request, request.resolveTo(jsModule));
|
319
326
|
}
|
320
327
|
else {
|
321
328
|
return logTransition(`resolveComponent failed`, request);
|
322
329
|
}
|
323
330
|
}
|
324
|
-
resolveHelperOrComponent(path, inEngine, request) {
|
331
|
+
async resolveHelperOrComponent(path, inEngine, request) {
|
325
332
|
// resolveHelper just rewrites our request to one that should target the
|
326
333
|
// component, so here to resolve the ambiguity we need to actually resolve
|
327
334
|
// that candidate to see if it works.
|
328
335
|
let helperCandidate = this.resolveHelper(path, inEngine, request);
|
329
|
-
let helperMatch = this.
|
330
|
-
|
331
|
-
|
336
|
+
let helperMatch = await this.resolve(request.alias(helperCandidate.specifier).rehome(helperCandidate.fromFile).withMeta({
|
337
|
+
runtimeFallback: false,
|
338
|
+
}));
|
339
|
+
if (helperMatch.type === 'found') {
|
340
|
+
return logTransition('resolve to ambiguous case matched a helper', request, request.resolveTo(helperMatch));
|
332
341
|
}
|
333
342
|
// unlike resolveHelper, resolveComponent already does pre-resolution in
|
334
343
|
// order to deal with its own internal ambiguity around JS vs HBS vs
|
335
344
|
// colocation.≥
|
336
|
-
let componentMatch = this.resolveComponent(path, inEngine, request);
|
345
|
+
let componentMatch = await this.resolveComponent(path, inEngine, request);
|
337
346
|
if (componentMatch !== request) {
|
338
347
|
return logTransition('ambiguous case matched a cmoponent', request, componentMatch);
|
339
348
|
}
|
@@ -357,20 +366,12 @@ class Resolver {
|
|
357
366
|
}
|
358
367
|
}
|
359
368
|
*componentJSCandidates(inPackageName) {
|
360
|
-
const extensions = ['.ts', '.gjs', '.gts'];
|
361
369
|
yield { prefix: '/components/', suffix: '' };
|
370
|
+
yield { prefix: '/components/', suffix: '/index' };
|
362
371
|
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
|
-
}
|
368
372
|
let pods = this.podPrefix(inPackageName);
|
369
373
|
if (pods) {
|
370
374
|
yield { prefix: `${pods}/components/`, suffix: '/component' };
|
371
|
-
for (const ext of extensions) {
|
372
|
-
yield { prefix: `${pods}/components/`, suffix: `/component${ext}` };
|
373
|
-
}
|
374
375
|
}
|
375
376
|
}
|
376
377
|
podPrefix(targetPackageName) {
|
@@ -496,7 +497,7 @@ class Resolver {
|
|
496
497
|
return owningEngine;
|
497
498
|
}
|
498
499
|
handleRewrittenPackages(request) {
|
499
|
-
if (request
|
500
|
+
if (isTerminal(request)) {
|
500
501
|
return request;
|
501
502
|
}
|
502
503
|
let requestingPkg = this.packageCache.ownerOfFile(request.fromFile);
|
@@ -549,7 +550,7 @@ class Resolver {
|
|
549
550
|
return request;
|
550
551
|
}
|
551
552
|
handleRenaming(request) {
|
552
|
-
if (request
|
553
|
+
if (isTerminal(request)) {
|
553
554
|
return request;
|
554
555
|
}
|
555
556
|
let packageName = (0, shared_internals_1.packageName)(request.specifier);
|
@@ -582,15 +583,34 @@ class Resolver {
|
|
582
583
|
return logTransition(`renamePackages`, request, request.alias(request.specifier.replace(packageName, this.options.renamePackages[packageName])));
|
583
584
|
}
|
584
585
|
}
|
585
|
-
if (pkg.
|
586
|
-
// we found a self-import
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
586
|
+
if (pkg.name === packageName) {
|
587
|
+
// we found a self-import
|
588
|
+
if (pkg.meta['auto-upgraded']) {
|
589
|
+
// auto-upgraded packages always get automatically adjusted. They never
|
590
|
+
// supported fancy package.json exports features so this direct mapping
|
591
|
+
// to the root is always right.
|
592
|
+
// "my-package/foo" -> "./foo"
|
593
|
+
// "my-package" -> "./" (this can't be just "." because node's require.resolve doesn't reliable support that)
|
594
|
+
let selfImportPath = request.specifier === pkg.name ? './' : request.specifier.replace(pkg.name, '.');
|
595
|
+
return logTransition(`v1 self-import`, request, request.alias(selfImportPath).rehome((0, path_1.resolve)(pkg.root, 'package.json')));
|
596
|
+
}
|
597
|
+
else {
|
598
|
+
// v2 packages are supposed to use package.json `exports` to enable
|
599
|
+
// self-imports, but not all build tools actually follow the spec. This
|
600
|
+
// is a workaround for badly behaved packagers.
|
601
|
+
//
|
602
|
+
// Known upstream bugs this works around:
|
603
|
+
// - https://github.com/vitejs/vite/issues/9731
|
604
|
+
if (pkg.packageJSON.exports) {
|
605
|
+
let found = (0, resolve_exports_1.exports)(pkg.packageJSON, request.specifier, {
|
606
|
+
browser: true,
|
607
|
+
conditions: ['default', 'imports'],
|
608
|
+
});
|
609
|
+
if (found === null || found === void 0 ? void 0 : found[0]) {
|
610
|
+
return logTransition(`v2 self-import with package.json exports`, request, request.alias(found === null || found === void 0 ? void 0 : found[0]).rehome((0, path_1.resolve)(pkg.root, 'package.json')));
|
611
|
+
}
|
612
|
+
}
|
613
|
+
}
|
594
614
|
}
|
595
615
|
return request;
|
596
616
|
}
|
@@ -609,7 +629,7 @@ class Resolver {
|
|
609
629
|
return newRequest.withMeta({ originalFromFile });
|
610
630
|
}
|
611
631
|
preHandleExternal(request) {
|
612
|
-
if (request
|
632
|
+
if (isTerminal(request)) {
|
613
633
|
return request;
|
614
634
|
}
|
615
635
|
let { specifier, fromFile } = request;
|
@@ -748,8 +768,11 @@ class Resolver {
|
|
748
768
|
throw new Error(`Embroider's amdCompatibility option is disabled, but something tried to use it to access "${request.specifier}"`);
|
749
769
|
}
|
750
770
|
}
|
751
|
-
fallbackResolve(request) {
|
752
|
-
var _a;
|
771
|
+
async fallbackResolve(request) {
|
772
|
+
var _a, _b, _c;
|
773
|
+
if (request.isVirtual) {
|
774
|
+
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');
|
775
|
+
}
|
753
776
|
if (request.specifier === '@embroider/macros') {
|
754
777
|
// the macros package is always handled directly within babel (not
|
755
778
|
// necessarily as a real resolvable package), so we should not mess with it.
|
@@ -799,7 +822,7 @@ class Resolver {
|
|
799
822
|
if (withinEngine) {
|
800
823
|
// it's a relative import inside an engine (which also means app), which
|
801
824
|
// means we may need to satisfy the request via app tree merging.
|
802
|
-
let appJSMatch = this.searchAppTree(request, withinEngine, (0, shared_internals_2.explicitRelative)(pkg.root, (0, path_1.resolve)((0, path_1.dirname)(request.fromFile), request.specifier)));
|
825
|
+
let appJSMatch = await this.searchAppTree(request, withinEngine, (0, shared_internals_2.explicitRelative)(pkg.root, (0, path_1.resolve)((0, path_1.dirname)(request.fromFile), request.specifier)));
|
803
826
|
if (appJSMatch) {
|
804
827
|
return logTransition('fallbackResolve: relative appJsMatch', request, appJSMatch);
|
805
828
|
}
|
@@ -838,12 +861,12 @@ class Resolver {
|
|
838
861
|
}
|
839
862
|
let targetingEngine = this.engineConfig(packageName);
|
840
863
|
if (targetingEngine) {
|
841
|
-
let appJSMatch = this.searchAppTree(request, targetingEngine, request.specifier.replace(packageName, '.'));
|
864
|
+
let appJSMatch = await this.searchAppTree(request, targetingEngine, request.specifier.replace(packageName, '.'));
|
842
865
|
if (appJSMatch) {
|
843
866
|
return logTransition('fallbackResolve: non-relative appJsMatch', request, appJSMatch);
|
844
867
|
}
|
845
868
|
}
|
846
|
-
if (pkg.meta['auto-upgraded']) {
|
869
|
+
if (pkg.meta['auto-upgraded'] && ((_c = (_b = request.meta) === null || _b === void 0 ? void 0 : _b.runtimeFallback) !== null && _c !== void 0 ? _c : true)) {
|
847
870
|
// auto-upgraded packages can fall back to attempting to find dependencies at
|
848
871
|
// runtime. Native v2 packages can only get this behavior in the
|
849
872
|
// isExplicitlyExternal case above because they need to explicitly ask for
|
@@ -882,7 +905,7 @@ class Resolver {
|
|
882
905
|
}
|
883
906
|
}
|
884
907
|
}
|
885
|
-
searchAppTree(request, engine, inEngineSpecifier) {
|
908
|
+
async searchAppTree(request, engine, inEngineSpecifier) {
|
886
909
|
let matched = this.getEntryFromMergeMap(inEngineSpecifier, engine.root);
|
887
910
|
switch (matched === null || matched === void 0 ? void 0 : matched.entry.type) {
|
888
911
|
case undefined:
|
@@ -892,11 +915,13 @@ class Resolver {
|
|
892
915
|
case 'fastboot-only':
|
893
916
|
return request.alias(matched.entry['fastboot-js'].specifier).rehome(matched.entry['fastboot-js'].fromFile);
|
894
917
|
case 'both':
|
895
|
-
let foundAppJS = this.
|
896
|
-
|
918
|
+
let foundAppJS = await this.resolve(request.alias(matched.entry['app-js'].specifier).rehome(matched.entry['app-js'].fromFile).withMeta({
|
919
|
+
runtimeFallback: false,
|
920
|
+
}));
|
921
|
+
if (foundAppJS.type !== 'found') {
|
897
922
|
throw new Error(`${matched.entry['app-js'].fromPackageName} declared ${inEngineSpecifier} in packageJSON.ember-addon.app-js, but that module does not exist`);
|
898
923
|
}
|
899
|
-
let { names } = (0, describe_exports_1.describeExports)((0, fs_1.readFileSync)(foundAppJS.filename, 'utf8'), {});
|
924
|
+
let { names } = (0, describe_exports_1.describeExports)((0, fs_1.readFileSync)(foundAppJS.filename, 'utf8'), { configFile: false });
|
900
925
|
return request.virtualize((0, virtual_content_1.fastbootSwitch)(matched.matched, (0, path_1.resolve)(engine.root, 'package.json'), names));
|
901
926
|
}
|
902
927
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"module-resolver.js","sourceRoot":"","sources":["module-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n emberVirtualPackages,\n emberVirtualPeerDeps,\n extensionsPattern,\n packageName as getPackageName,\n packageName,\n} from '@embroider/shared-internals';\nimport { dirname, resolve, posix } from 'path';\nimport type { Package, V2Package } from '@embroider/shared-internals';\nimport { explicitRelative, RewrittenPackageCache } from '@embroider/shared-internals';\nimport makeDebug from 'debug';\nimport assertNever from 'assert-never';\nimport reversePackageExports from '@embroider/reverse-exports';\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"]}
|
1
|
+
{"version":3,"file":"module-resolver.js","sourceRoot":"","sources":["module-resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kEAMqC;AACrC,+BAA+C;AAE/C,kEAAsF;AACtF,kDAA8B;AAC9B,gEAAuC;AACvC,iFAA+D;AAC/D,qDAA4D;AAE5D,uDAO2B;AAC3B,2DAA6C;AAC7C,yDAAqD;AACrD,2BAAkC;AAElC,iDAA6C;AAE7C,MAAM,KAAK,GAAG,IAAA,eAAS,EAAC,oBAAoB,CAAC,CAAC;AAE9C,2EAA2E;AAC3E,+EAA+E;AAC/E,wDAAwD;AACxD,eAAS,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE;IACrC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACrB,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KAChC;IACD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,SAAS,aAAa,CAA0B,MAAc,EAAE,MAAS,EAAE,QAAW,MAAM;IAC1F,IAAI,KAAK,CAAC,SAAS,EAAE;QACnB,KAAK,CAAC,4CAA4C,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KAClH;SAAM,IAAI,KAAK,CAAC,UAAU,EAAE;QAC3B,KAAK,CAAC,2CAA2C,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KACjH;SAAM,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE;QAC/C,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,EAAE;YACtC,KAAK,CACH,6EAA6E,EAC7E,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,EAChB,KAAK,CAAC,SAAS,EACf,MAAM,EACN,MAAM,CAAC,QAAQ,EACf,KAAK,CAAC,QAAQ,CACf,CAAC;SACH;aAAM;YACL,KAAK,CAAC,qCAAqC,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;SAC3G;KACF;SAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,EAAE;QAC7C,KAAK,CACH,yDAAyD,EACzD,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,EAChB,MAAM,EACN,MAAM,CAAC,QAAQ,EACf,KAAK,CAAC,QAAQ,CACf,CAAC;KACH;SAAM,IAAI,KAAK,CAAC,UAAU,EAAE;QAC3B,KAAK,CAAC,0CAA0C,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KAChH;SAAM;QACL,KAAK,CAAC,0CAA0C,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KAChH;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,OAAsB;IACxC,OAAO,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAChF,CAAC;AAyDD,MAAM,aAAa,GAAG,iDAAiD,CAAC;AAoCxE,MAAa,QAAQ;IACnB,YAAqB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAEjC,KAAK,CAAC,aAAa,CAA0B,OAAU;QAC7D,IAAI,OAAO,CAAC,SAAS,KAAK,mBAAmB,EAAE;YAC7C,kEAAkE;YAClE,4EAA4E;YAC5E,4EAA4E;YAC5E,gCAAgC;YAChC,OAAO,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;SAC7C;QAED,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE;YACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;SACnE;QAED,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC7C,OAAO,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACvC,0FAA0F;QAC1F,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC/C,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAE1C,2EAA2E;QAC3E,4EAA4E;QAC5E,kDAAkD;QAClD,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,0EAA0E;IAC1E,6EAA6E;IAC7E,2EAA2E;IAC3E,SAAS;IACT,KAAK,CAAC,OAAO,CACX,OAAyC;QAEzC,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,OAAO,OAAO,CAAC,UAAU,CAAC;SAC3B;QAED,IAAI,UAAU,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;QAEhD,QAAQ,UAAU,CAAC,IAAI,EAAE;YACvB,KAAK,OAAO,CAAC;YACb,KAAK,SAAS;gBACZ,OAAO,UAAU,CAAC;YACpB,KAAK,WAAW;gBACd,MAAM;YACR;gBACE,MAAM,IAAA,sBAAW,EAAC,UAAU,CAAC,CAAC;SACjC;QACD,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,WAAW,KAAK,OAAO,EAAE;YAC3B,uCAAuC;YACvC,OAAO,UAAU,CAAC;SACnB;QAED,IAAI,WAAW,CAAC,UAAU,EAAE;YAC1B,OAAO,WAAW,CAAC,UAAU,CAAC;SAC/B;QAED,IAAI,WAAW,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE;YAC5F,MAAM,IAAI,KAAK,CACb,kIAAkI,CACnI,CAAC;SACH;QAED,IAAI,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,UAAU,EAAE;YACnD,+DAA+D;YAC/D,sEAAsE;YACtE,0CAA0C;YAC1C,OAAO,WAAW,CAAC,cAAc,EAAE,CAAC;SACrC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAED,0EAA0E;IAC1E,qEAAqE;IACrE,sEAAsE;IACtE,KAAK,CAAC,WAAW,CACf,SAAiB,EACjB,QAAgB;QAMhB,OAAO,IAAA,0BAAW,EAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,YAAY;QACd,OAAO,wCAAqB,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC;IAEO,cAAc,CAAC,aAAwB,EAAE,IAAY;QAC3D,IAAI,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACrE,IAAI,eAAe,EAAE;YACnB,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACnE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE;gBACpB,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;aACtF;YACD,OAAO,GAAG,CAAC;SACZ;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,sBAAsB,CAA0B,OAAU;QAChE,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;YACvB,OAAO,OAAO,CAAC;SAChB;QACD,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE1D,IAAI,CAAC,GAAG,EAAE;YACR,OAAO,OAAO,CAAC;SAChB;QAED,IAAI,IAAA,8BAAW,EAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAClC,wEAAwE;YACxE,mEAAmE;YACnE,UAAU;YACV,OAAO,OAAO,CAAC;SAChB;QAED,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,eAAe,GAAG,IAAA,mCAAgB,EAAC,GAAG,CAAC,IAAI,EAAE,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACxG,IAAI,YAAY,EAAE;YAChB,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,EAAE;gBACpE,IAAI,YAAY,GAAG,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBACzD,IAAI,YAAY,EAAE;oBAChB,IAAI,YAAY,CAAC,gBAAgB,EAAE;wBACjC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAA,kCAAe,EAAC,IAAA,iBAAY,EAAC,IAAA,cAAO,EAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,EAAE;4BACtG,UAAU,EAAE,KAAK;yBAClB,CAAC,CAAC;wBACH,IAAI,UAAU,GAAG,IAAA,gCAAc,EAAC,SAAS,EAAE,IAAA,cAAO,EAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;wBACrF,IAAI,UAAU,KAAK,OAAO,CAAC,QAAQ,EAAE;4BACnC,OAAO,aAAa,CAAC,qCAAqC,EAAE,OAAO,CAAC,CAAC;yBACtE;6BAAM;4BACL,OAAO,aAAa,CAAC,uBAAuB,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;yBACxF;qBACF;yBAAM;wBACL,OAAO,aAAa,CAClB,yBAAyB,EACzB,OAAO,EACP,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,IAAA,cAAO,EAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CACpF,CAAC;qBACH;iBACF;aACF;SACF;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,oBAAoB,CAA0B,OAAU;;QAC9D,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;YACvB,OAAO,OAAO,CAAC;SAChB;QACD,IAAI,KAAK,GAAG,IAAA,sCAAoB,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,OAAO,CAAC;SAChB;QAED,IAAI,OAA6C,CAAC;QAClD,IAAI,OAAO,CAAC,SAAS,KAAK,WAAW,EAAE;YACrC,OAAO,GAAG,QAAQ,CAAC;SACpB;aAAM,IAAI,OAAO,CAAC,SAAS,KAAK,YAAY,EAAE;YAC7C,OAAO,GAAG,aAAa,CAAC;SACzB;QAED,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,aAAa,CAAC,uCAAuC,EAAE,OAAO,CAAC,CAAC;SACxE;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,GAAG,EAAE;YACP,IAAI,GAAG,GAAG,IAAA,mCAAgB,EAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAErD,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,YAAY,EAAE;gBAChB,IAAI,YAAY,GAAG,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBACnD,IAAI,YAAY,IAAI,YAAY,CAAC,gBAAgB,EAAE;oBACjD,IAAI,UAAkB,CAAC;oBACvB,IAAI,OAAO,KAAK,QAAQ,EAAE;wBACxB,UAAU,GAAG,YAAY,CAAC,gBAAgB,CAAC;qBAC5C;yBAAM;wBACL,UAAU,GAAG,YAAY,CAAC,aAAa,CAAC;qBACzC;oBACD,OAAO,aAAa,CAClB,mBAAmB,EACnB,OAAO;oBACP,gDAAgD;oBAChD,mEAAmE;oBACnE,mEAAmE;oBACnE,gEAAgE;oBAChE,OAAO,CAAC,KAAK,CAAC,IAAA,mCAAgB,EAAC,IAAA,cAAO,EAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAA,cAAO,EAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAC1F,CAAC;iBACH;aACF;YAED,IAAI,KAAK,GAAG,MAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,0CAAE,KAAK,CAAC;YAC5D,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,MAAK,MAAM,EAAE;gBAC1B,OAAO,aAAa,CAClB,qBAAqB,EACrB,OAAO,EACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CACxE,CAAC;aACH;SACF;QAED,OAAO,aAAa,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAEO,qBAAqB,CAA0B,OAAU;QAC/D,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;YACvB,OAAO,OAAO,CAAC;SAChB;QACD,IAAI,EAAE,GAAG,IAAA,uCAAqB,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,EAAE;YACP,OAAO,OAAO,CAAC;SAChB;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,EAAE,CAAA,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,8DAA8D,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;SACnG;QAED,IAAI,WAAW,GAAG,IAAA,8BAAc,EAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,WAAW,EAAE;YACf,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YACtD,OAAO,aAAa,CAClB,wBAAwB,EACxB,OAAO,EACP,OAAO,CAAC,UAAU,CAAC,IAAA,cAAO,EAAC,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAClE,CAAC;SACH;aAAM;YACL,OAAO,aAAa,CAClB,sBAAsB,EACtB,OAAO,EACP,OAAO,CAAC,UAAU,CAAC,IAAA,cAAO,EAAC,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAClE,CAAC;SACH;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAA0B,OAAU;QACnE,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;YACvB,OAAO,OAAO,CAAC;SAChB;QACD,IAAI,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,OAAO,CAAC;SAChB;QACD,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,MAAO,CAAC;QACnC,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAAE,CAAA,EAAE;YACzB,OAAO,OAAO,CAAC;SAChB;QACD,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,QAAQ,IAAI,EAAE;YACZ,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACnD,KAAK,YAAY;gBACf,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACtD,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACrD,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC9D;gBACE,MAAM,IAAI,KAAK,CAAC,iDAAiD,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;SACzF;IACH,CAAC;IAEO,aAAa,CAA0B,IAAY,EAAE,QAAsB,EAAE,OAAU;QAC7F,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO,aAAa,CAClB,eAAe,EACf,OAAO,EACP,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,WAAW,YAAY,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CACnH,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,IAAY,EACZ,QAAsB,EACtB,OAAU;QAEV,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAElD,IAAI,SAAS,GAAsB,IAAI,CAAC;QACxC,IAAI,QAAQ,GAAsB,IAAI,CAAC;QAEvC,mDAAmD;QACnD,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;YAC1E,IAAI,kBAAkB,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAE3G,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CACjC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;gBAC7D,eAAe,EAAE,KAAK;aACvB,CAAC,CACH,CAAC;YAEF,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;gBAC/B,SAAS,GAAG,UAAU,CAAC;gBACvB,MAAM;aACP;SACF;QAED,mDAAmD;QACnD,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;YACpE,IAAI,kBAAkB,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAE3G,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CACjC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;gBAC7D,eAAe,EAAE,KAAK;aACvB,CAAC,CACH,CAAC;YAEF,wEAAwE;YACxE,oEAAoE;YACpE,gCAAgC;YAChC,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACxE,QAAQ,GAAG,UAAU,CAAC;gBACtB,MAAM;aACP;SACF;QAED,IAAI,SAAS,EAAE;YACb,OAAO,aAAa,CAClB,mCAAmC,EACnC,OAAO,EACP,OAAO,CAAC,UAAU,CAAC,IAAA,sCAAoB,EAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,CAAC,CAAC,CACjF,CAAC;SACH;aAAM,IAAI,QAAQ,EAAE;YACnB,OAAO,aAAa,CAAC,6CAA6C,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC3G;aAAM;YACL,OAAO,aAAa,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;SAC1D;IACH,CAAC;IAEO,KAAK,CAAC,wBAAwB,CACpC,IAAY,EACZ,QAAsB,EACtB,OAAU;QAEV,wEAAwE;QACxE,0EAA0E;QAC1E,qCAAqC;QACrC,IAAI,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAClC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;YACjF,eAAe,EAAE,KAAK;SACvB,CAAC,CACH,CAAC;QAEF,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,EAAE;YAChC,OAAO,aAAa,CAAC,4CAA4C,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;SAC7G;QAED,wEAAwE;QACxE,oEAAoE;QACpE,eAAe;QACf,IAAI,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1E,IAAI,cAAc,KAAK,OAAO,EAAE;YAC9B,OAAO,aAAa,CAAC,oCAAoC,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;SACrF;QAED,0EAA0E;QAC1E,wEAAwE;QACxE,sBAAsB;QACtB,OAAO,aAAa,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAEO,eAAe,CAA0B,IAAY,EAAE,QAAsB,EAAE,OAAU;QAC/F,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO,aAAa,CAClB,iBAAiB,EACjB,OAAO,EACP,OAAO;aACJ,KAAK,CAAC,GAAG,MAAM,CAAC,WAAW,cAAc,MAAM,CAAC,UAAU,EAAE,CAAC;aAC7D,MAAM,CAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAClD,CAAC;IACJ,CAAC;IAEO,CAAC,2BAA2B,CAAC,aAAqB;QACxD,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACvD,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAEtD,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,IAAI,EAAE;YACR,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;SAC9D;IACH,CAAC;IAEO,CAAC,qBAAqB,CAAC,aAAqB;QAClD,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC7C,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACnD,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;QAEvD,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,IAAI,EAAE;YACR,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;SAC/D;IACH,CAAC;IAEO,SAAS,CAAC,iBAAyB;QACzC,IAAI,iBAAiB,KAAK,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YACnF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBACvE,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,CAAC,OAAO,CAAC,eAAe,iDAAiD,IAAI,CAAC,OAAO,CAAC,YAAY,sCAAsC,CACtK,CAAC;aACH;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;SAC7E;IACH,CAAC;IAED,gDAAgD;IACxC,eAAe,CAAC,IAAY,EAAE,QAAsB;QAC1D,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAA,cAAO,EAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;SACtG;aAAM;YACL,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAA,cAAO,EAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;SAC9G;IACH,CAAC;IAEO,YAAY,CAAC,WAAmB;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IACvE,CAAC;IAED,6EAA6E;IAC7E,OAAO;IAEP,IAAY,QAAQ;QAClB,IAAI,MAAM,GAAa,IAAI,GAAG,EAAE,CAAC;QACjC,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACvC,IAAI,aAAa,GAA4B,IAAI,GAAG,EAAE,CAAC;YACvD,KAAK,IAAI,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE;gBAC3C,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACpD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE;oBACtB,SAAS;iBACV;gBAED,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACjC,IAAI,KAAK,EAAE;oBACT,KAAK,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;wBAC7D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;4BAClC,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,IAAI,+DAA+D,YAAY,2EAA2E,CAC1K,CAAC;yBACH;wBACD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;4BACjC,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,IAAI,+DAA+D,WAAW,6EAA6E,CAC3K,CAAC;yBACH;wBACD,IAAI,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;wBAChD,QAAQ,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,EAAE;4BACvB,KAAK,SAAS;gCACZ,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE;oCAC9B,IAAI,EAAE,UAAU;oCAChB,QAAQ,EAAE;wCACR,SAAS,EAAE,IAAA,yBAAqB,EAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC;wCAChE,QAAQ,EAAE,WAAW,CAAC,kBAAkB;wCACxC,eAAe,EAAE,KAAK,CAAC,IAAI;qCAC5B;iCACF,CAAC,CAAC;gCACH,MAAM;4BACR,KAAK,UAAU,CAAC;4BAChB,KAAK,MAAM;gCACT,4CAA4C;gCAC5C,MAAM;4BACR,KAAK,eAAe;gCAClB,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE;oCAC9B,IAAI,EAAE,MAAM;oCACZ,QAAQ,EAAE;wCACR,SAAS,EAAE,IAAA,yBAAqB,EAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC;wCAChE,QAAQ,EAAE,WAAW,CAAC,kBAAkB;wCACxC,eAAe,EAAE,KAAK,CAAC,IAAI;qCAC5B;oCACD,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC;iCACxC,CAAC,CAAC;gCACH,MAAM;yBACT;qBACF;iBACF;gBAED,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC3C,IAAI,UAAU,EAAE;oBACd,KAAK,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;wBAClE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;4BAClC,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,IAAI,oEAAoE,YAAY,2EAA2E,CAC/K,CAAC;yBACH;wBACD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;4BACjC,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,IAAI,oEAAoE,WAAW,6EAA6E,CAChL,CAAC;yBACH;wBACD,IAAI,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;wBAChD,QAAQ,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,EAAE;4BACvB,KAAK,SAAS;gCACZ,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE;oCAC9B,IAAI,EAAE,eAAe;oCACrB,aAAa,EAAE;wCACb,SAAS,EAAE,IAAA,yBAAqB,EAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC;wCAChE,QAAQ,EAAE,WAAW,CAAC,kBAAkB;wCACxC,eAAe,EAAE,KAAK,CAAC,IAAI;qCAC5B;iCACF,CAAC,CAAC;gCACH,MAAM;4BACR,KAAK,eAAe,CAAC;4BACrB,KAAK,MAAM;gCACT,4CAA4C;gCAC5C,MAAM;4BACR,KAAK,UAAU;gCACb,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE;oCAC9B,IAAI,EAAE,MAAM;oCACZ,aAAa,EAAE;wCACb,SAAS,EAAE,IAAA,yBAAqB,EAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC;wCAChE,QAAQ,EAAE,WAAW,CAAC,kBAAkB;wCACxC,eAAe,EAAE,KAAK,CAAC,IAAI;qCAC5B;oCACD,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;iCAC9B,CAAC,CAAC;gCACH,MAAM;yBACT;qBACF;iBACF;aACF;YACD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;SACxC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,YAAY,CAAC,GAAY;QACvB,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC/C,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CACrF,CAAC;QACF,IAAI,CAAC,YAAY,EAAE;YACjB,MAAM,IAAI,KAAK,CACb,uFAAuF,GAAG,CAAC,IAAI,EAAE,CAClG,CAAC;SACH;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,uBAAuB,CAA0B,OAAU;QACjE,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;YACvB,OAAO,OAAO,CAAC;SAChB;QACD,IAAI,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpE,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,OAAO,CAAC;SAChB;QACD,IAAI,WAAW,GAAG,IAAA,8BAAc,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,EAAE;YAChB,mBAAmB;YACnB,OAAO,OAAO,CAAC;SAChB;QAED,IAAI,SAA8B,CAAC;QACnC,IAAI,WAAW,KAAK,aAAa,CAAC,IAAI,EAAE;YACtC,2EAA2E;YAC3E,IAAI;gBACF,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;aACnE;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,EAAE;oBACnC,MAAM,GAAG,CAAC;iBACX;aACF;SACF;QAED,IAAI,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACtE,IAAI,iBAAiB,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEtF,IAAI,SAAS,IAAI,iBAAiB,KAAK,SAAS,EAAE;YAChD,uEAAuE;YACvE,wEAAwE;YACxE,uEAAuE;YACvE,eAAe;YACf,OAAO,aAAa,CAClB,iCAAiC,EACjC,OAAO,EACP,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,SAAS,CAAC,CACnD,CAAC;SACH;aAAM,IAAI,qBAAqB,KAAK,aAAa,EAAE;YAClD,IAAI,SAAS,EAAE;gBACb,uEAAuE;gBACvE,uEAAuE;gBACvE,OAAO,aAAa,CAClB,qCAAqC,EACrC,OAAO,EACP,OAAO;oBACL,gEAAgE;oBAChE,oEAAoE;qBACnE,QAAQ,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;qBAChD,MAAM,CAAC,IAAA,cAAO,EAAC,qBAAqB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAC/D,CAAC;aACH;iBAAM;gBACL,oEAAoE;gBACpE,uEAAuE;gBACvE,yCAAyC;gBACzC,OAAO,aAAa,CAAC,6CAA6C,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;aAClG;SACF;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,cAAc,CAA0B,OAAU;QACxD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;YACvB,OAAO,OAAO,CAAC;SAChB;QACD,IAAI,WAAW,GAAG,IAAA,8BAAc,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,OAAO,CAAC;SAChB;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE;YAC5B,OAAO,OAAO,CAAC;SAChB;QAED,yEAAyE;QACzE,wEAAwE;QACxE,2EAA2E;QAC3E,QAAQ;QACR,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;YACnC,KAAK,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;gBAC/E,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE;oBACnC,OAAO,aAAa,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;iBAC5E;gBACD,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;oBACvD,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,GAAG,QAAQ,GAAG,SAAS,EAAE;wBAC1D,OAAO,aAAa,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;qBAC5E;oBACD,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE;wBAC/C,OAAO,aAAa,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;qBAC5E;iBACF;aACF;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;gBAC5C,OAAO,aAAa,CAClB,gBAAgB,EAChB,OAAO,EACP,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAChG,CAAC;aACH;SACF;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE;YAC5B,yBAAyB;YACzB,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;gBAC7B,uEAAuE;gBACvE,uEAAuE;gBACvE,+BAA+B;gBAE/B,8BAA8B;gBAC9B,6GAA6G;gBAC7G,IAAI,cAAc,GAAG,OAAO,CAAC,SAAS,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAEtG,OAAO,aAAa,CAClB,gBAAgB,EAChB,OAAO,EACP,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,IAAA,cAAO,EAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CACxE,CAAC;aACH;iBAAM;gBACL,mEAAmE;gBACnE,uEAAuE;gBACvE,+CAA+C;gBAC/C,EAAE;gBACF,yCAAyC;gBACzC,+CAA+C;gBAC/C,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE;oBAC3B,IAAI,KAAK,GAAG,IAAA,yBAAc,EAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE;wBAC7D,OAAO,EAAE,IAAI;wBACb,UAAU,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;qBACnC,CAAC,CAAC;oBACH,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,EAAE;wBACd,OAAO,aAAa,CAClB,0CAA0C,EAC1C,OAAO,EACP,OAAO,CAAC,KAAK,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAA,cAAO,EAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CACpE,CAAC;qBACH;iBACF;aACF;SACF;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,yBAAyB,CAA0B,OAAU,EAAE,GAAY;QACjF,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACnB;QACD,IAAI,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;QACxC,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,IAAA,cAAO,EAAC,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAC;QAEzF,IAAI,UAAU,KAAK,OAAO,EAAE;YAC1B,OAAO,OAAO,CAAC;SAChB;QAED,2EAA2E;QAC3E,sCAAsC;QACtC,OAAO,UAAU,CAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACnD,CAAC;IAEO,iBAAiB,CAA0B,OAAU;QAC3D,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;YACvB,OAAO,OAAO,CAAC;SAChB;QACD,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QACtC,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE;YAC5B,OAAO,OAAO,CAAC;SAChB;QAED,IAAI,WAAW,GAAG,IAAA,8BAAc,EAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,EAAE;YAChB,sEAAsE;YACtE,2EAA2E;YAC3E,2EAA2E;YAC3E,8DAA8D;YAC9D,uEAAuE;YACvE,IAAI,iBAAiB,GAAG,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;YAE9D,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC3C,kEAAkE;gBAClE,oEAAoE;gBACpE,sEAAsE;gBACtE,oEAAoE;gBACpE,OAAO,aAAa,CAAC,kDAAkD,EAAE,OAAO,CAAC,CAAC;aACnF;YAED,IAAI,wBAAwB,GAAG,IAAA,mCAAgB,EAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;YAC7E,IAAI,oBAAoB,CAAC,wBAAwB,EAAE,GAAG,CAAC,EAAE;gBACvD,IAAI,eAAe,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpE,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;aACjE;YAED,uEAAuE;YACvE,0EAA0E;YAC1E,SAAS;YACT,IAAI,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YACvE,IAAI,eAAe,EAAE;gBACnB,OAAO,aAAa,CAClB,0CAA0C,EAC1C,OAAO,EACP,OAAO;qBACJ,KAAK,CAAC,IAAI,GAAG,YAAK,CAAC,IAAI,CAAC,IAAA,cAAO,EAAC,eAAe,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;oBAChF,oEAAoE;oBACpE,0DAA0D;oBAC1D,gEAAgE;oBAChE,oEAAoE;oBACpE,4DAA4D;oBAC5D,oBAAoB;qBACnB,MAAM,CAAC,IAAA,cAAO,EAAC,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CACtE,CAAC;aACH;YAED,OAAO,OAAO,CAAC;SAChB;QAED,0EAA0E;QAC1E,sBAAsB;QACtB,IAAI,oBAAoB,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE;YACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;SAC3D;QAED,IAAI,uCAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;YAC5E,OAAO,IAAI,CAAC,QAAQ,CAAC,oCAAoC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;SAChF;QAED,IAAI,uCAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;YAC5E,0DAA0D;YAC1D,uDAAuD;YACvD,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,IAAI,KAAK,CACb,GAAG,GAAG,CAAC,IAAI,iDAAiD,WAAW,+BAA+B,CACvG,CAAC;aACH;YACD,OAAO,aAAa,CAAC,sBAAsB,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;SACjG;QAED,qEAAqE;QACrE,0EAA0E;QAC1E,mCAAmC;QACnC,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAExD,IAAI,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE;YAC9F,IAAI;gBACF,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;gBACjE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE;oBACzB,sEAAsE;oBACtE,0BAA0B;oBAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,gCAAgC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;iBAC5E;aACF;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,EAAE;oBACnC,MAAM,GAAG,CAAC;iBACX;aACF;SACF;QAED,iDAAiD;QACjD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;YAC9B,IACE,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;gBAC1B,CAAC,kBAAkB,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,CAAC;gBACrD,CAAC,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC,EACrC;gBACA,MAAM,IAAI,KAAK,CACb,GAAG,GAAG,CAAC,IAAI,6BAA6B,WAAW,mDAAmD,CACvG,CAAC;aACH;SACF;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,iBAAiB,CAAC,WAAmB;QAC3C,IAAI,WAAW,KAAK,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YAC7C,2FAA2F;YAC3F,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;gBAC1B,kBAAkB,EAAE,IAAA,cAAO,EACzB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAC9E,cAAc,CACf;aACF,CAAC;SACH;QACD,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACvC,KAAK,IAAI,KAAK,IAAI,MAAM,CAAC,YAAY,EAAE;gBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;oBAC9B,OAAO,KAAK,CAAC;iBACd;aACF;SACF;IACH,CAAC;IAEO,QAAQ,CAA0B,KAAa,EAAE,OAAU,EAAE,SAAiB;QACpF,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE;YAC3C,IAAI,QAAQ,GAAG,IAAA,0CAAwB,EAAC,SAAS,CAAC,CAAC;YACnD,OAAO,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;SACpE;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;YACxC,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAC/C,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,SAAS,CACrE,CAAC;YACF,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE;gBAC7C,KAAK,GAAG,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;aACzC;YACD,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,IAAI,KAAK,CACb,8BAA8B,OAAO,CAAC,SAAS,yBAAyB,KAAK;;;;;;;;UAQ7E,OAAO,CAAC,SAAS;;;;CAI1B,CACQ,CAAC;aACH;YACD,IAAI,QAAQ,GAAG,IAAA,yCAAuB,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,OAAO,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;SACpE;aAAM;YACL,MAAM,IAAI,KAAK,CACb,6FAA6F,OAAO,CAAC,SAAS,GAAG,CAClH,CAAC;SACH;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAA0B,OAAU;;QAC/D,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,MAAM,IAAI,KAAK,CACb,yKAAyK,CAC1K,CAAC;SACH;QAED,IAAI,OAAO,CAAC,SAAS,KAAK,mBAAmB,EAAE;YAC7C,kEAAkE;YAClE,4EAA4E;YAC5E,4EAA4E;YAC5E,gCAAgC;YAChC,OAAO,aAAa,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;SACtD;QAED,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACzC,gEAAgE;YAChE,uEAAuE;YACvE,wEAAwE;YACxE,uEAAuE;YACvE,EAAE;YACF,qDAAqD;YACrD,mEAAmE;YACnE,0DAA0D;YAC1D,qEAAqE;YACrE,EAAE;YACF,wEAAwE;YACxE,sEAAsE;YACtE,QAAQ;YACR,OAAO,OAAO,CAAC;SAChB;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,EAAE;YACR,OAAO,aAAa,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAC;SAChE;QAED,yEAAyE;QACzE,4EAA4E;QAC5E,wBAAwB;QACxB,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,QAAQ,KAAK,GAAG,EAAE;YACpB,IAAI,gBAAgB,GAAG,MAAA,OAAO,CAAC,IAAI,0CAAE,gBAAgB,CAAC;YACtD,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE;gBACxC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;aACtE;YACD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC3C,GAAG,GAAG,QAAQ,CAAC;SAChB;QAED,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE;YACpB,OAAO,aAAa,CAAC,0CAA0C,EAAE,OAAO,CAAC,CAAC;SAC3E;QAED,IAAI,WAAW,GAAG,IAAA,8BAAc,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,EAAE;YAChB,4BAA4B;YAE5B,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,YAAY,EAAE;gBAChB,wEAAwE;gBACxE,iEAAiE;gBACjE,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CACvC,OAAO,EACP,YAAY,EACZ,IAAA,mCAAgB,EAAC,GAAG,CAAC,IAAI,EAAE,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAClF,CAAC;gBACF,IAAI,UAAU,EAAE;oBACd,OAAO,aAAa,CAAC,sCAAsC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;iBACnF;qBAAM;oBACL,OAAO,aAAa,CAAC,gDAAgD,EAAE,OAAO,CAAC,CAAC;iBACjF;aACF;iBAAM;gBACL,0CAA0C;gBAC1C,OAAO,aAAa,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;aACpE;SACF;QAED,yEAAyE;QACzE,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;YAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,KAAK,EAAE;gBACT,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBACzD,IAAI,OAAO,KAAK,OAAO,EAAE;oBACvB,OAAO,aAAa,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;iBACxD;aACF;SACF;QAED,IAAI,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,eAAe,EAAE;YACnB,qEAAqE;YACrE,yEAAyE;YACzE,wEAAwE;YACxE,OAAO;YACP,OAAO,aAAa,CAClB,yDAAyD,EACzD,OAAO;YACP,sEAAsE;YACtE,uEAAuE;YACvE,qEAAqE;YACrE,oEAAoE;YACpE,SAAS;YACT,OAAO,CAAC,MAAM,CAAC,IAAA,cAAO,EAAC,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAC3E,CAAC;SACH;QAED,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACrD,IAAI,eAAe,EAAE;YACnB,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;YACjH,IAAI,UAAU,EAAE;gBACd,OAAO,aAAa,CAAC,0CAA0C,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;aACvF;SACF;QAED,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,eAAe,mCAAI,IAAI,CAAC,EAAE;YACxE,6EAA6E;YAC7E,gEAAgE;YAChE,0EAA0E;YAC1E,aAAa;YACb,OAAO,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;SAC3E;aAAM;YACL,0EAA0E;YAC1E,2EAA2E;YAC3E,iDAAiD;YACjD,IAAI,uCAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;gBACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;aAC1E;SACF;QAED,gEAAgE;QAChE,8EAA8E;QAC9E,OAAO,aAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAEO,oBAAoB,CAC1B,iBAAyB,EACzB,IAAY;;QAEZ,IAAI,KAA6B,CAAC;QAClC,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,EAAE;YACtE,KAAK,GAAG,MAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,0CAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,KAAK,EAAE;gBACT,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;aACtC;SACF;IACH,CAAC;IAEO,CAAC,wBAAwB,CAAC,QAAgB;QAChD,IAAI,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE;YACzC,MAAM,QAAQ,CAAC;SAChB;aAAM;YACL,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;gBAC1C,MAAM,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC;aAC3B;SACF;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,OAAU,EACV,MAAoB,EACpB,iBAAyB;QAEzB,IAAI,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAExE,QAAQ,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,IAAI,EAAE;YAC3B,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAC;YACnB,KAAK,UAAU;gBACb,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;YACnG,KAAK,eAAe;gBAClB,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC7G,KAAK,MAAM;gBACT,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CACjC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;oBACjG,eAAe,EAAE,KAAK;iBACvB,CAAC,CACH,CAAC;gBACF,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;oBAC/B,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,eAAe,aAAa,iBAAiB,oEAAoE,CAC7I,CAAC;iBACH;gBACD,IAAI,EAAE,KAAK,EAAE,GAAG,IAAA,kCAAe,EAAC,IAAA,iBAAY,EAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClG,OAAO,OAAO,CAAC,UAAU,CAAC,IAAA,gCAAc,EAAC,OAAO,CAAC,OAAO,EAAE,IAAA,cAAO,EAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;SAC3G;IACH,CAAC;IAED,0EAA0E;IAC1E,4EAA4E;IAC5E,wCAAwC;IAChC,oBAAoB,CAC1B,aAAsB,EACtB,QAAgB;QAEhB,qEAAqE;QACrE,0EAA0E;QAC1E,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE;YAC7B,IAAI,QAAQ,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YACjF,KAAK,IAAI,OAAO,IAAI,QAAQ,EAAE;gBAC5B,IAAI,OAAO,EAAE;oBACX,IAAI,uBAAuB,GAAG,IAAA,mCAAgB,EAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC7E,KAAK,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;wBAC5D,IAAI,WAAW,KAAK,uBAAuB,EAAE;4BAC3C,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;yBACtE;qBACF;iBACF;aACF;SACF;IACH,CAAC;IAED,2EAA2E;IAC3E,sBAAsB;IACtB,sBAAsB,CAAC,QAAgB;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,SAAS,EAAE,CAAA,EAAE;YAC/B,OAAO;SACR;QACD,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC;QACjF,IAAI,YAAY,EAAE;YAChB,wEAAwE;YACxE,mBAAmB;YAEnB,uEAAuE;YACvE,uEAAuE;YACvE,0EAA0E;YAC1E,0EAA0E;YAC1E,oEAAoE;YACpE,wEAAwE;YACxE,IAAI,SAAS,GAAG,IAAA,mCAAgB,EAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAE9D,OAAO,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;SACtE;QAED,IAAI,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACpE,IAAI,UAAU,EAAE;YACd,uEAAuE;YACvE,mBAAmB;YACnB,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;SAC5F;IACH,CAAC;IAEO,mBAAmB,CAAC,YAAoB,EAAE,YAAoB;QACpE,IAAI,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,IAAA,oCAAiB,EAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,EAAE,CAAC,CAAC;QACnG,IAAI,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC,CAAC;QAClH,KAAK,IAAI,SAAS,IAAI,UAAU,EAAE;YAChC,IAAI,aAAa,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;gBAChG,OAAO,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aACzG;SACF;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAlnCD,4BAknCC;AA9rBC;IADC,IAAA,4BAAO,GAAE;wCAsGT;AA2lBH,SAAS,oBAAoB,CAAC,SAAiB,EAAE,OAAkB;IACjE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACpH,CAAC;AAED,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAC9E,4EAA4E;AAC5E,qCAAqC;AACrC,SAAS,kBAAkB,CAAC,GAAc,EAAE,WAAmB;IAC7D,IAAI,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;QAClC,OAAO,IAAI,CAAC;KACb;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE;QACvD,OAAO,IAAI,CAAC;KACb;IAED,IAAI,uCAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,uCAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QAClF,OAAO,IAAI,CAAC;KACb;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,EAAE;AACF,SAAS,kBAAkB,CAAC,SAAkB,EAAE,gBAAyB,EAAE,mBAA2B;IACpG,OAAO,SAAS,KAAK,gBAAgB,IAAI,mBAAmB,KAAK,gBAAgB,CAAC,IAAI,CAAC;AACzF,CAAC","sourcesContent":["import {\n emberVirtualPackages,\n emberVirtualPeerDeps,\n extensionsPattern,\n packageName as getPackageName,\n packageName,\n} from '@embroider/shared-internals';\nimport { dirname, resolve, posix } from 'path';\nimport type { Package, V2Package } from '@embroider/shared-internals';\nimport { explicitRelative, RewrittenPackageCache } from '@embroider/shared-internals';\nimport makeDebug from 'debug';\nimport assertNever from 'assert-never';\nimport reversePackageExports from '@embroider/reverse-exports';\nimport { exports as resolveExports } from 'resolve.exports';\n\nimport {\n virtualExternalESModule,\n virtualExternalCJSModule,\n virtualPairComponent,\n fastbootSwitch,\n decodeFastbootSwitch,\n decodeImplicitModules,\n} from './virtual-content';\nimport { Memoize } from 'typescript-memoize';\nimport { describeExports } from './describe-exports';\nimport { readFileSync } from 'fs';\nimport type UserOptions from './options';\nimport { nodeResolve } from './node-resolve';\n\nconst debug = makeDebug('embroider:resolver');\n\n// Using a formatter makes this work lazy so nothing happens when we aren't\n// logging. It is unfortunate that formatters are a globally mutable config and\n// you can only use single character names, but oh well.\nmakeDebug.formatters.p = (s: string) => {\n let cwd = process.cwd();\n if (s.startsWith(cwd)) {\n return s.slice(cwd.length + 1);\n }\n return s;\n};\n\nfunction logTransition<R extends ModuleRequest>(reason: string, before: R, after: R = before): R {\n if (after.isVirtual) {\n debug(`[%s:virtualized] %s because %s\\n in %p`, before.debugType, before.specifier, reason, before.fromFile);\n } else if (after.resolvedTo) {\n debug(`[%s:resolvedTo] %s because %s\\n in %p`, before.debugType, before.specifier, reason, before.fromFile);\n } else if (before.specifier !== after.specifier) {\n if (before.fromFile !== after.fromFile) {\n debug(\n `[%s:aliased and rehomed] %s to %s\\n because %s\\n from %p\\n to %p`,\n before.debugType,\n before.specifier,\n after.specifier,\n reason,\n before.fromFile,\n after.fromFile\n );\n } else {\n debug(`[%s:aliased] %s to %s\\n because %s`, before.debugType, before.specifier, after.specifier, reason);\n }\n } else if (before.fromFile !== after.fromFile) {\n debug(\n `[%s:rehomed] %s, because %s\\n from %p\\n to %p`,\n before.debugType,\n before.specifier,\n reason,\n before.fromFile,\n after.fromFile\n );\n } else if (after.isNotFound) {\n debug(`[%s:not-found] %s because %s\\n in %p`, before.debugType, before.specifier, reason, before.fromFile);\n } else {\n debug(`[%s:unchanged] %s because %s\\n in %p`, before.debugType, before.specifier, reason, before.fromFile);\n }\n return after;\n}\n\nfunction isTerminal(request: ModuleRequest): boolean {\n return request.isVirtual || request.isNotFound || Boolean(request.resolvedTo);\n}\n\nexport interface Options {\n renamePackages: {\n [fromName: string]: string;\n };\n renameModules: {\n [fromName: string]: string;\n };\n resolvableExtensions: string[];\n appRoot: string;\n engines: EngineConfig[];\n modulePrefix: string;\n podModulePrefix?: string;\n amdCompatibility: Required<UserOptions['amdCompatibility']>;\n}\n\ninterface EngineConfig {\n packageName: string;\n activeAddons: { name: string; root: string; canResolveFromFile: string }[];\n fastbootFiles: { [appName: string]: { localFilename: string; shadowedFilename: string | undefined } };\n root: string;\n}\n\ntype MergeEntry =\n | {\n type: 'app-only';\n 'app-js': {\n specifier: string;\n fromFile: string;\n fromPackageName: string;\n };\n }\n | {\n type: 'fastboot-only';\n 'fastboot-js': {\n specifier: string;\n fromFile: string;\n fromPackageName: string;\n };\n }\n | {\n type: 'both';\n 'app-js': {\n specifier: string;\n fromFile: string;\n fromPackageName: string;\n };\n 'fastboot-js': {\n specifier: string;\n fromFile: string;\n fromPackageName: string;\n };\n };\n\ntype MergeMap = Map</* engine root dir */ string, Map</* withinEngineModuleName */ string, MergeEntry>>;\n\nconst compatPattern = /#embroider_compat\\/(?<type>[^\\/]+)\\/(?<rest>.*)/;\n\nexport interface ModuleRequest<Res extends Resolution = Resolution> {\n readonly specifier: string;\n readonly fromFile: string;\n readonly isVirtual: boolean;\n readonly meta: Record<string, unknown> | undefined;\n readonly debugType: string;\n readonly isNotFound: boolean;\n readonly resolvedTo: Res | undefined;\n alias(newSpecifier: string): this;\n rehome(newFromFile: string): this;\n virtualize(virtualFilename: string): this;\n withMeta(meta: Record<string, any> | undefined): this;\n notFound(): this;\n defaultResolve(): Promise<Res>;\n resolveTo(resolution: Res): this;\n}\n\n// This is generic because different build systems have different ways of\n// representing a found module, and we just pass those values through.\nexport type Resolution<T = unknown, E = unknown> =\n | { type: 'found'; filename: string; isVirtual: boolean; result: T }\n\n // used for requests that are special and don't represent real files that\n // embroider can possibly do anything custom with.\n //\n // the motivating use case for introducing this is Vite's depscan which marks\n // almost everything as \"external\" as a way to tell esbuild to stop traversing\n // once it has been seen the first time.\n | { type: 'ignored'; result: T }\n\n // the important thing about this Resolution is that embroider should do its\n // fallback behaviors here.\n | { type: 'not_found'; err: E };\n\nexport class Resolver {\n constructor(readonly options: Options) {}\n\n private async beforeResolve<R extends ModuleRequest>(request: R): Promise<R> {\n if (request.specifier === '@embroider/macros') {\n // the macros package is always handled directly within babel (not\n // necessarily as a real resolvable package), so we should not mess with it.\n // It might not get compiled away until *after* our plugin has run, which is\n // why we need to know about it.\n return logTransition('early exit', request);\n }\n\n if (request.specifier === 'require') {\n return this.external('early require', request, request.specifier);\n }\n\n request = this.handleFastbootSwitch(request);\n request = await this.handleGlobalsCompat(request);\n request = this.handleImplicitModules(request);\n request = this.handleRenaming(request);\n // we expect the specifier to be app relative at this point - must be after handleRenaming\n request = this.generateFastbootSwitch(request);\n request = this.preHandleExternal(request);\n\n // this should probably stay the last step in beforeResolve, because it can\n // rehome requests to their un-rewritten locations, and for the most part we\n // want to be dealing with the rewritten packages.\n request = this.handleRewrittenPackages(request);\n return request;\n }\n\n // This encapsulates the whole resolving process. Given a `defaultResolve`\n // that calls your build system's normal module resolver, this does both pre-\n // and post-resolution adjustments as needed to implement our compatibility\n // rules.\n async resolve<ResolveResolution extends Resolution>(\n request: ModuleRequest<ResolveResolution>\n ): Promise<ResolveResolution> {\n request = await this.beforeResolve(request);\n if (request.resolvedTo) {\n return request.resolvedTo;\n }\n\n let resolution = await request.defaultResolve();\n\n switch (resolution.type) {\n case 'found':\n case 'ignored':\n return resolution;\n case 'not_found':\n break;\n default:\n throw assertNever(resolution);\n }\n let nextRequest = await this.fallbackResolve(request);\n if (nextRequest === request) {\n // no additional fallback is available.\n return resolution;\n }\n\n if (nextRequest.resolvedTo) {\n return nextRequest.resolvedTo;\n }\n\n if (nextRequest.fromFile === request.fromFile && nextRequest.specifier === request.specifier) {\n throw new Error(\n 'Bug Discovered! New request is not === original request but has the same fromFile and specifier. This will likely create a loop.'\n );\n }\n\n if (nextRequest.isVirtual || nextRequest.isNotFound) {\n // virtual and NotFound requests are terminal, there is no more\n // beforeResolve or fallbackResolve around them. The defaultResolve is\n // expected to know how to implement them.\n return nextRequest.defaultResolve();\n }\n\n return this.resolve(nextRequest);\n }\n\n // Use standard NodeJS resolving, with our required compatibility rules on\n // top. This is a convenience method for calling resolveSync with the\n // defaultResolve already configured to be \"do the normal node thing\".\n async nodeResolve(\n specifier: string,\n fromFile: string\n ): Promise<\n | { type: 'virtual'; filename: string; content: string }\n | { type: 'real'; filename: string }\n | { type: 'not_found'; err: Error }\n > {\n return nodeResolve(this, specifier, fromFile);\n }\n\n get packageCache() {\n return RewrittenPackageCache.shared('embroider', this.options.appRoot);\n }\n\n private logicalPackage(owningPackage: V2Package, file: string): V2Package {\n let logicalLocation = this.reverseSearchAppTree(owningPackage, file);\n if (logicalLocation) {\n let pkg = this.packageCache.get(logicalLocation.owningEngine.root);\n if (!pkg.isV2Ember()) {\n throw new Error(`bug: all engines should be v2 addons by the time we see them here`);\n }\n return pkg;\n }\n return owningPackage;\n }\n\n private generateFastbootSwitch<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let pkg = this.packageCache.ownerOfFile(request.fromFile);\n\n if (!pkg) {\n return request;\n }\n\n if (packageName(request.specifier)) {\n // not a relative request, and we're assuming all within-engine requests\n // are relative by this point due to `v1 self-import` which happens\n // earlier\n return request;\n }\n\n let engineConfig = this.engineConfig(pkg.name);\n let appRelativePath = explicitRelative(pkg.root, resolve(dirname(request.fromFile), request.specifier));\n if (engineConfig) {\n for (let candidate of this.withResolvableExtensions(appRelativePath)) {\n let fastbootFile = engineConfig.fastbootFiles[candidate];\n if (fastbootFile) {\n if (fastbootFile.shadowedFilename) {\n let { names } = describeExports(readFileSync(resolve(pkg.root, fastbootFile.shadowedFilename), 'utf8'), {\n configFile: false,\n });\n let switchFile = fastbootSwitch(candidate, resolve(pkg.root, 'package.json'), names);\n if (switchFile === request.fromFile) {\n return logTransition('internal lookup from fastbootSwitch', request);\n } else {\n return logTransition('shadowed app fastboot', request, request.virtualize(switchFile));\n }\n } else {\n return logTransition(\n 'unshadowed app fastboot',\n request,\n request.alias(fastbootFile.localFilename).rehome(resolve(pkg.root, 'package.json'))\n );\n }\n }\n }\n }\n\n return request;\n }\n\n private handleFastbootSwitch<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let match = decodeFastbootSwitch(request.fromFile);\n if (!match) {\n return request;\n }\n\n let section: 'app-js' | 'fastboot-js' | undefined;\n if (request.specifier === './browser') {\n section = 'app-js';\n } else if (request.specifier === './fastboot') {\n section = 'fastboot-js';\n }\n\n if (!section) {\n return logTransition('non-special import in fastboot switch', request);\n }\n\n let pkg = this.packageCache.ownerOfFile(match.filename);\n if (pkg) {\n let rel = explicitRelative(pkg.root, match.filename);\n\n let engineConfig = this.engineConfig(pkg.name);\n if (engineConfig) {\n let fastbootFile = engineConfig.fastbootFiles[rel];\n if (fastbootFile && fastbootFile.shadowedFilename) {\n let targetFile: string;\n if (section === 'app-js') {\n targetFile = fastbootFile.shadowedFilename;\n } else {\n targetFile = fastbootFile.localFilename;\n }\n return logTransition(\n 'matched app entry',\n request,\n // deliberately not using rehome because we want\n // generateFastbootSwitch to see that this request is coming *from*\n // a fastboot switch so it won't cycle back around. Instead we make\n // the targetFile relative to the fromFile that we already have.\n request.alias(explicitRelative(dirname(request.fromFile), resolve(pkg.root, targetFile)))\n );\n }\n }\n\n let entry = this.getEntryFromMergeMap(rel, pkg.root)?.entry;\n if (entry?.type === 'both') {\n return logTransition(\n 'matched addon entry',\n request,\n request.alias(entry[section].specifier).rehome(entry[section].fromFile)\n );\n }\n }\n\n return logTransition('failed to match in fastboot switch', request);\n }\n\n private handleImplicitModules<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let im = decodeImplicitModules(request.specifier);\n if (!im) {\n return request;\n }\n\n let pkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!pkg?.isV2Ember()) {\n throw new Error(`bug: found implicit modules import in non-ember package at ${request.fromFile}`);\n }\n\n let packageName = getPackageName(im.fromFile);\n if (packageName) {\n let dep = this.packageCache.resolve(packageName, pkg);\n return logTransition(\n `dep's implicit modules`,\n request,\n request.virtualize(resolve(dep.root, `-embroider-${im.type}.js`))\n );\n } else {\n return logTransition(\n `own implicit modules`,\n request,\n request.virtualize(resolve(pkg.root, `-embroider-${im.type}.js`))\n );\n }\n }\n\n private async handleGlobalsCompat<R extends ModuleRequest>(request: R): Promise<R> {\n if (isTerminal(request)) {\n return request;\n }\n let match = compatPattern.exec(request.specifier);\n if (!match) {\n return request;\n }\n let { type, rest } = match.groups!;\n let fromPkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!fromPkg?.isV2Ember()) {\n return request;\n }\n let engine = this.owningEngine(fromPkg);\n\n switch (type) {\n case 'helpers':\n return this.resolveHelper(rest, engine, request);\n case 'components':\n return this.resolveComponent(rest, engine, request);\n case 'modifiers':\n return this.resolveModifier(rest, engine, request);\n case 'ambiguous':\n return this.resolveHelperOrComponent(rest, engine, request);\n default:\n throw new Error(`bug: unexepected #embroider_compat specifier: ${request.specifier}`);\n }\n }\n\n private resolveHelper<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): R {\n let target = this.parseGlobalPath(path, inEngine);\n return logTransition(\n 'resolveHelper',\n request,\n request.alias(`${target.packageName}/helpers/${target.memberName}`).rehome(resolve(inEngine.root, 'package.json'))\n );\n }\n\n private async resolveComponent<R extends ModuleRequest>(\n path: string,\n inEngine: EngineConfig,\n request: R\n ): Promise<R> {\n let target = this.parseGlobalPath(path, inEngine);\n\n let hbsModule: Resolution | null = null;\n let jsModule: Resolution | null = null;\n\n // first, the various places our template might be.\n for (let candidate of this.componentTemplateCandidates(target.packageName)) {\n let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;\n\n let resolution = await this.resolve(\n request.alias(candidateSpecifier).rehome(target.from).withMeta({\n runtimeFallback: false,\n })\n );\n\n if (resolution.type === 'found') {\n hbsModule = resolution;\n break;\n }\n }\n\n // then the various places our javascript might be.\n for (let candidate of this.componentJSCandidates(target.packageName)) {\n let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;\n\n let resolution = await this.resolve(\n request.alias(candidateSpecifier).rehome(target.from).withMeta({\n runtimeFallback: false,\n })\n );\n\n // .hbs is a resolvable extension for us, so we need to exclude it here.\n // It matches as a priority lower than .js, so finding an .hbs means\n // there's definitely not a .js.\n if (resolution.type === 'found' && !resolution.filename.endsWith('.hbs')) {\n jsModule = resolution;\n break;\n }\n }\n\n if (hbsModule) {\n return logTransition(\n `resolveComponent found legacy HBS`,\n request,\n request.virtualize(virtualPairComponent(hbsModule.filename, jsModule?.filename))\n );\n } else if (jsModule) {\n return logTransition(`resolving to resolveComponent found only JS`, request, request.resolveTo(jsModule));\n } else {\n return logTransition(`resolveComponent failed`, request);\n }\n }\n\n private async resolveHelperOrComponent<R extends ModuleRequest>(\n path: string,\n inEngine: EngineConfig,\n request: R\n ): Promise<R> {\n // resolveHelper just rewrites our request to one that should target the\n // component, so here to resolve the ambiguity we need to actually resolve\n // that candidate to see if it works.\n let helperCandidate = this.resolveHelper(path, inEngine, request);\n let helperMatch = await this.resolve(\n request.alias(helperCandidate.specifier).rehome(helperCandidate.fromFile).withMeta({\n runtimeFallback: false,\n })\n );\n\n if (helperMatch.type === 'found') {\n return logTransition('resolve to ambiguous case matched a helper', request, request.resolveTo(helperMatch));\n }\n\n // unlike resolveHelper, resolveComponent already does pre-resolution in\n // order to deal with its own internal ambiguity around JS vs HBS vs\n // colocation.≥\n let componentMatch = await this.resolveComponent(path, inEngine, request);\n if (componentMatch !== request) {\n return logTransition('ambiguous case matched a cmoponent', request, componentMatch);\n }\n\n // this is the hard failure case -- we were supposed to find something and\n // didn't. Let the normal resolution process progress so the user gets a\n // normal build error.\n return logTransition('ambiguous case failing', request);\n }\n\n private resolveModifier<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): R {\n let target = this.parseGlobalPath(path, inEngine);\n return logTransition(\n 'resolveModifier',\n request,\n request\n .alias(`${target.packageName}/modifiers/${target.memberName}`)\n .rehome(resolve(inEngine.root, 'package.json'))\n );\n }\n\n private *componentTemplateCandidates(inPackageName: string) {\n yield { prefix: '/templates/components/', suffix: '' };\n yield { prefix: '/components/', suffix: '/template' };\n\n let pods = this.podPrefix(inPackageName);\n if (pods) {\n yield { prefix: `${pods}/components/`, suffix: '/template' };\n }\n }\n\n private *componentJSCandidates(inPackageName: string) {\n yield { prefix: '/components/', suffix: '' };\n yield { prefix: '/components/', suffix: '/index' };\n yield { prefix: '/components/', suffix: '/component' };\n\n let pods = this.podPrefix(inPackageName);\n if (pods) {\n yield { prefix: `${pods}/components/`, suffix: '/component' };\n }\n }\n\n private podPrefix(targetPackageName: string) {\n if (targetPackageName === this.options.modulePrefix && this.options.podModulePrefix) {\n if (!this.options.podModulePrefix.startsWith(this.options.modulePrefix)) {\n throw new Error(\n `Your podModulePrefix (${this.options.podModulePrefix}) does not start with your app module prefix (${this.options.modulePrefix}). Not gonna support that silliness.`\n );\n }\n return this.options.podModulePrefix.slice(this.options.modulePrefix.length);\n }\n }\n\n // for paths that come from non-strict templates\n private parseGlobalPath(path: string, inEngine: EngineConfig) {\n let parts = path.split('@');\n if (parts.length > 1 && parts[0].length > 0) {\n return { packageName: parts[0], memberName: parts[1], from: resolve(inEngine.root, 'package.json') };\n } else {\n return { packageName: inEngine.packageName, memberName: path, from: resolve(inEngine.root, 'package.json') };\n }\n }\n\n private engineConfig(packageName: string): EngineConfig | undefined {\n return this.options.engines.find(e => e.packageName === packageName);\n }\n\n // This is where we figure out how all the classic treeForApp merging bottoms\n // out.\n @Memoize()\n private get mergeMap(): MergeMap {\n let result: MergeMap = new Map();\n for (let engine of this.options.engines) {\n let engineModules: Map<string, MergeEntry> = new Map();\n for (let addonConfig of engine.activeAddons) {\n let addon = this.packageCache.get(addonConfig.root);\n if (!addon.isV2Addon()) {\n continue;\n }\n\n let appJS = addon.meta['app-js'];\n if (appJS) {\n for (let [inEngineName, inAddonName] of Object.entries(appJS)) {\n if (!inEngineName.startsWith('./')) {\n throw new Error(\n `addon ${addon.name} declares app-js in its package.json with the illegal name \"${inEngineName}\". It must start with \"./\" to make it clear that it's relative to the app`\n );\n }\n if (!inAddonName.startsWith('./')) {\n throw new Error(\n `addon ${addon.name} declares app-js in its package.json with the illegal name \"${inAddonName}\". It must start with \"./\" to make it clear that it's relative to the addon`\n );\n }\n let prevEntry = engineModules.get(inEngineName);\n switch (prevEntry?.type) {\n case undefined:\n engineModules.set(inEngineName, {\n type: 'app-only',\n 'app-js': {\n specifier: reversePackageExports(addon.packageJSON, inAddonName),\n fromFile: addonConfig.canResolveFromFile,\n fromPackageName: addon.name,\n },\n });\n break;\n case 'app-only':\n case 'both':\n // first match wins, so this one is shadowed\n break;\n case 'fastboot-only':\n engineModules.set(inEngineName, {\n type: 'both',\n 'app-js': {\n specifier: reversePackageExports(addon.packageJSON, inAddonName),\n fromFile: addonConfig.canResolveFromFile,\n fromPackageName: addon.name,\n },\n 'fastboot-js': prevEntry['fastboot-js'],\n });\n break;\n }\n }\n }\n\n let fastbootJS = addon.meta['fastboot-js'];\n if (fastbootJS) {\n for (let [inEngineName, inAddonName] of Object.entries(fastbootJS)) {\n if (!inEngineName.startsWith('./')) {\n throw new Error(\n `addon ${addon.name} declares fastboot-js in its package.json with the illegal name \"${inEngineName}\". It must start with \"./\" to make it clear that it's relative to the app`\n );\n }\n if (!inAddonName.startsWith('./')) {\n throw new Error(\n `addon ${addon.name} declares fastboot-js in its package.json with the illegal name \"${inAddonName}\". It must start with \"./\" to make it clear that it's relative to the addon`\n );\n }\n let prevEntry = engineModules.get(inEngineName);\n switch (prevEntry?.type) {\n case undefined:\n engineModules.set(inEngineName, {\n type: 'fastboot-only',\n 'fastboot-js': {\n specifier: reversePackageExports(addon.packageJSON, inAddonName),\n fromFile: addonConfig.canResolveFromFile,\n fromPackageName: addon.name,\n },\n });\n break;\n case 'fastboot-only':\n case 'both':\n // first match wins, so this one is shadowed\n break;\n case 'app-only':\n engineModules.set(inEngineName, {\n type: 'both',\n 'fastboot-js': {\n specifier: reversePackageExports(addon.packageJSON, inAddonName),\n fromFile: addonConfig.canResolveFromFile,\n fromPackageName: addon.name,\n },\n 'app-js': prevEntry['app-js'],\n });\n break;\n }\n }\n }\n }\n result.set(engine.root, engineModules);\n }\n return result;\n }\n\n owningEngine(pkg: Package) {\n let owningEngine = this.options.engines.find(e =>\n pkg.isEngine() ? e.root === pkg.root : e.activeAddons.find(a => a.root === pkg.root)\n );\n if (!owningEngine) {\n throw new Error(\n `bug in @embroider/core/src/module-resolver: cannot figure out the owning engine for ${pkg.root}`\n );\n }\n return owningEngine;\n }\n\n private handleRewrittenPackages<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let requestingPkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!requestingPkg) {\n return request;\n }\n let packageName = getPackageName(request.specifier);\n if (!packageName) {\n // relative request\n return request;\n }\n\n let targetPkg: Package | undefined;\n if (packageName !== requestingPkg.name) {\n // non-relative, non-self request, so check if it aims at a rewritten addon\n try {\n targetPkg = this.packageCache.resolve(packageName, requestingPkg);\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n }\n }\n\n let originalRequestingPkg = this.packageCache.original(requestingPkg);\n let originalTargetPkg = targetPkg ? this.packageCache.original(targetPkg) : undefined;\n\n if (targetPkg && originalTargetPkg !== targetPkg) {\n // in this case it doesn't matter whether or not the requesting package\n // was moved. RewrittenPackageCache.resolve already took care of finding\n // the right target, and we redirect the request so it will look inside\n // that target.\n return logTransition(\n 'request targets a moved package',\n request,\n this.resolveWithinMovedPackage(request, targetPkg)\n );\n } else if (originalRequestingPkg !== requestingPkg) {\n if (targetPkg) {\n // in this case, the requesting package is moved but its destination is\n // not, so we need to rehome the request back to the original location.\n return logTransition(\n 'outbound request from moved package',\n request,\n request\n // setting meta here because if this fails, we want the fallback\n // logic to revert our rehome and continue from the *moved* package.\n .withMeta({ originalFromFile: request.fromFile })\n .rehome(resolve(originalRequestingPkg.root, 'package.json'))\n );\n } else {\n // requesting package was moved and we failed to find its target. We\n // can't let that accidentally succeed in the defaultResolve because we\n // could escape the moved package system.\n return logTransition('missing outbound request from moved package', request, request.notFound());\n }\n }\n\n return request;\n }\n\n private handleRenaming<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let packageName = getPackageName(request.specifier);\n if (!packageName) {\n return request;\n }\n\n let pkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!pkg || !pkg.isV2Ember()) {\n return request;\n }\n\n // real deps take precedence over renaming rules. That is, a package like\n // ember-source might provide backburner via module renaming, but if you\n // have an explicit dependency on backburner you should still get that real\n // copy.\n if (!pkg.hasDependency(packageName)) {\n for (let [candidate, replacement] of Object.entries(this.options.renameModules)) {\n if (candidate === request.specifier) {\n return logTransition(`renameModules`, request, request.alias(replacement));\n }\n for (let extension of this.options.resolvableExtensions) {\n if (candidate === request.specifier + '/index' + extension) {\n return logTransition(`renameModules`, request, request.alias(replacement));\n }\n if (candidate === request.specifier + extension) {\n return logTransition(`renameModules`, request, request.alias(replacement));\n }\n }\n }\n\n if (this.options.renamePackages[packageName]) {\n return logTransition(\n `renamePackages`,\n request,\n request.alias(request.specifier.replace(packageName, this.options.renamePackages[packageName]))\n );\n }\n }\n\n if (pkg.name === packageName) {\n // we found a self-import\n if (pkg.meta['auto-upgraded']) {\n // auto-upgraded packages always get automatically adjusted. They never\n // supported fancy package.json exports features so this direct mapping\n // to the root is always right.\n\n // \"my-package/foo\" -> \"./foo\"\n // \"my-package\" -> \"./\" (this can't be just \".\" because node's require.resolve doesn't reliable support that)\n let selfImportPath = request.specifier === pkg.name ? './' : request.specifier.replace(pkg.name, '.');\n\n return logTransition(\n `v1 self-import`,\n request,\n request.alias(selfImportPath).rehome(resolve(pkg.root, 'package.json'))\n );\n } else {\n // v2 packages are supposed to use package.json `exports` to enable\n // self-imports, but not all build tools actually follow the spec. This\n // is a workaround for badly behaved packagers.\n //\n // Known upstream bugs this works around:\n // - https://github.com/vitejs/vite/issues/9731\n if (pkg.packageJSON.exports) {\n let found = resolveExports(pkg.packageJSON, request.specifier, {\n browser: true,\n conditions: ['default', 'imports'],\n });\n if (found?.[0]) {\n return logTransition(\n `v2 self-import with package.json exports`,\n request,\n request.alias(found?.[0]).rehome(resolve(pkg.root, 'package.json'))\n );\n }\n }\n }\n }\n\n return request;\n }\n\n private resolveWithinMovedPackage<R extends ModuleRequest>(request: R, pkg: Package): R {\n let levels = ['..'];\n if (pkg.name.startsWith('@')) {\n levels.push('..');\n }\n let originalFromFile = request.fromFile;\n let newRequest = request.rehome(resolve(pkg.root, ...levels, 'moved-package-target.js'));\n\n if (newRequest === request) {\n return request;\n }\n\n // setting meta because if this fails, we want the fallback to pick up back\n // in the original requesting package.\n return newRequest.withMeta({ originalFromFile });\n }\n\n private preHandleExternal<R extends ModuleRequest>(request: R): R {\n if (isTerminal(request)) {\n return request;\n }\n let { specifier, fromFile } = request;\n let pkg = this.packageCache.ownerOfFile(fromFile);\n if (!pkg || !pkg.isV2Ember()) {\n return request;\n }\n\n let packageName = getPackageName(specifier);\n if (!packageName) {\n // This is a relative import. We don't automatically externalize those\n // because it's rare, and by keeping them static we give better errors. But\n // we do allow them to be explicitly externalized by the package author (or\n // a compat adapter). In the metadata, they would be listed in\n // package-relative form, so we need to convert this specifier to that.\n let absoluteSpecifier = resolve(dirname(fromFile), specifier);\n\n if (!absoluteSpecifier.startsWith(pkg.root)) {\n // this relative path escape its package. So it's not really using\n // normal inter-package resolving and we should leave it alone. This\n // case comes up especially when babel transforms are trying to insert\n // references to runtime utilities, like we do in @embroider/macros.\n return logTransition('beforeResolve: relative path escapes its package', request);\n }\n\n let packageRelativeSpecifier = explicitRelative(pkg.root, absoluteSpecifier);\n if (isExplicitlyExternal(packageRelativeSpecifier, pkg)) {\n let publicSpecifier = absoluteSpecifier.replace(pkg.root, pkg.name);\n return this.external('beforeResolve', request, publicSpecifier);\n }\n\n // if the requesting file is in an addon's app-js, the relative request\n // should really be understood as a request for a module in the containing\n // engine\n let logicalLocation = this.reverseSearchAppTree(pkg, request.fromFile);\n if (logicalLocation) {\n return logTransition(\n 'beforeResolve: relative import in app-js',\n request,\n request\n .alias('./' + posix.join(dirname(logicalLocation.inAppName), request.specifier))\n // it's important that we're rehoming this to the root of the engine\n // (which we know really exists), and not to a subdir like\n // logicalLocation.inAppName (which might not physically exist),\n // because some environments (including node's require.resolve) will\n // refuse to do resolution from a notional path that doesn't\n // physically exist.\n .rehome(resolve(logicalLocation.owningEngine.root, 'package.json'))\n );\n }\n\n return request;\n }\n\n // absolute package imports can also be explicitly external based on their\n // full specifier name\n if (isExplicitlyExternal(specifier, pkg)) {\n return this.external('beforeResolve', request, specifier);\n }\n\n if (emberVirtualPackages.has(packageName) && !pkg.hasDependency(packageName)) {\n return this.external('beforeResolve emberVirtualPackages', request, specifier);\n }\n\n if (emberVirtualPeerDeps.has(packageName) && !pkg.hasDependency(packageName)) {\n // addons (whether auto-upgraded or not) may use the app's\n // emberVirtualPeerDeps, like \"@glimmer/component\" etc.\n let addon = this.locateActiveAddon(packageName);\n if (!addon) {\n throw new Error(\n `${pkg.name} is trying to import the emberVirtualPeerDep \"${packageName}\", but it seems to be missing`\n );\n }\n return logTransition(`emberVirtualPeerDeps`, request, request.rehome(addon.canResolveFromFile));\n }\n\n // if this file is part of an addon's app-js, it's really the logical\n // package to which it belongs (normally the app) that affects some policy\n // choices about what it can import\n let logicalPackage = this.logicalPackage(pkg, fromFile);\n\n if (logicalPackage.meta['auto-upgraded'] && !logicalPackage.hasDependency('ember-auto-import')) {\n try {\n let dep = this.packageCache.resolve(packageName, logicalPackage);\n if (!dep.isEmberPackage()) {\n // classic ember addons can only import non-ember dependencies if they\n // have ember-auto-import.\n return this.external('v1 package without auto-import', request, specifier);\n }\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n }\n }\n\n // assertions on what native v2 addons can import\n if (!pkg.meta['auto-upgraded']) {\n if (\n !pkg.meta['auto-upgraded'] &&\n !appImportInAppTree(pkg, logicalPackage, packageName) &&\n !reliablyResolvable(pkg, packageName)\n ) {\n throw new Error(\n `${pkg.name} is trying to import from ${packageName} but that is not one of its explicit dependencies`\n );\n }\n }\n return request;\n }\n\n private locateActiveAddon(packageName: string): { root: string; canResolveFromFile: string } | undefined {\n if (packageName === this.options.modulePrefix) {\n // the app itself is something that addon's can classically resolve if they know it's name.\n return {\n root: this.options.appRoot,\n canResolveFromFile: resolve(\n this.packageCache.maybeMoved(this.packageCache.get(this.options.appRoot)).root,\n 'package.json'\n ),\n };\n }\n for (let engine of this.options.engines) {\n for (let addon of engine.activeAddons) {\n if (addon.name === packageName) {\n return addon;\n }\n }\n }\n }\n\n private external<R extends ModuleRequest>(label: string, request: R, specifier: string): R {\n if (this.options.amdCompatibility === 'cjs') {\n let filename = virtualExternalCJSModule(specifier);\n return logTransition(label, request, request.virtualize(filename));\n } else if (this.options.amdCompatibility) {\n let entry = this.options.amdCompatibility.es.find(\n entry => entry[0] === specifier || entry[0] + '/index' === specifier\n );\n if (!entry && request.specifier === 'require') {\n entry = ['require', ['default', 'has']];\n }\n if (!entry) {\n throw new Error(\n `A module tried to resolve \"${request.specifier}\" and didn't find it (${label}).\n\n - Maybe a dependency declaration is missing?\n - Remember that v1 addons can only import non-Ember-addon NPM dependencies if they include ember-auto-import in their dependencies.\n - If this dependency is available in the AMD loader (because someone manually called \"define()\" for it), you can configure a shim like:\n\n amdCompatibility: {\n es: [\n [\"${request.specifier}\", [\"default\", \"yourNamedExportsGoHere\"]],\n ]\n }\n\n`\n );\n }\n let filename = virtualExternalESModule(specifier, entry[1]);\n return logTransition(label, request, request.virtualize(filename));\n } else {\n throw new Error(\n `Embroider's amdCompatibility option is disabled, but something tried to use it to access \"${request.specifier}\"`\n );\n }\n }\n\n private async fallbackResolve<R extends ModuleRequest>(request: R): Promise<R> {\n if (request.isVirtual) {\n throw new Error(\n 'Build tool bug detected! Fallback resolve should never see a virtual request. It is expected that the defaultResolve for your bundler has already resolved this request'\n );\n }\n\n if (request.specifier === '@embroider/macros') {\n // the macros package is always handled directly within babel (not\n // necessarily as a real resolvable package), so we should not mess with it.\n // It might not get compiled away until *after* our plugin has run, which is\n // why we need to know about it.\n return logTransition('fallback early exit', request);\n }\n\n if (compatPattern.test(request.specifier)) {\n // Some kinds of compat requests get rewritten into other things\n // deterministically. For example, \"#embroider_compat/helpers/whatever\"\n // means only \"the-current-engine/helpers/whatever\", and if that doesn't\n // actually exist it's that path that will show up as a missing import.\n //\n // But others have an ambiguous meaning. For example,\n // #embroider_compat/components/whatever can mean several different\n // things. If we're unable to find any of them, the actual\n // \"#embroider_compat\" request will fall through all the way to here.\n //\n // In that case, we don't want to externalize that failure. We know it's\n // not a classic runtime thing. It's better to let it be a build error\n // here.\n return request;\n }\n\n let pkg = this.packageCache.ownerOfFile(request.fromFile);\n if (!pkg) {\n return logTransition('no identifiable owningPackage', request);\n }\n\n // meta.originalFromFile gets set when we want to try to rehome a request\n // but then come back to the original location here in the fallback when the\n // rehomed request fails\n let movedPkg = this.packageCache.maybeMoved(pkg);\n if (movedPkg !== pkg) {\n let originalFromFile = request.meta?.originalFromFile;\n if (typeof originalFromFile !== 'string') {\n throw new Error(`bug: embroider resolver's meta is not propagating`);\n }\n request = request.rehome(originalFromFile);\n pkg = movedPkg;\n }\n\n if (!pkg.isV2Ember()) {\n return logTransition('fallbackResolve: not in an ember package', request);\n }\n\n let packageName = getPackageName(request.specifier);\n if (!packageName) {\n // this is a relative import\n\n let withinEngine = this.engineConfig(pkg.name);\n if (withinEngine) {\n // it's a relative import inside an engine (which also means app), which\n // means we may need to satisfy the request via app tree merging.\n let appJSMatch = await this.searchAppTree(\n request,\n withinEngine,\n explicitRelative(pkg.root, resolve(dirname(request.fromFile), request.specifier))\n );\n if (appJSMatch) {\n return logTransition('fallbackResolve: relative appJsMatch', request, appJSMatch);\n } else {\n return logTransition('fallbackResolve: relative appJs search failure', request);\n }\n } else {\n // nothing else to do for relative imports\n return logTransition('fallbackResolve: relative failure', request);\n }\n }\n\n // auto-upgraded packages can fall back to the set of known active addons\n if (pkg.meta['auto-upgraded']) {\n let addon = this.locateActiveAddon(packageName);\n if (addon) {\n const rehomed = request.rehome(addon.canResolveFromFile);\n if (rehomed !== request) {\n return logTransition(`activeAddons`, request, rehomed);\n }\n }\n }\n\n let logicalLocation = this.reverseSearchAppTree(pkg, request.fromFile);\n if (logicalLocation) {\n // the requesting file is in an addon's appTree. We didn't succeed in\n // resolving this (non-relative) request from inside the actual addon, so\n // next try to resolve it from the corresponding logical location in the\n // app.\n return logTransition(\n 'fallbackResolve: retry from logical home of app-js file',\n request,\n // it might look more precise to rehome into logicalLocation.inAppName\n // rather than package.json. But that logical location may not actually\n // exist, and some systems (including node's require.resolve) will be\n // mad about trying to resolve from notional paths that don't really\n // exist.\n request.rehome(resolve(logicalLocation.owningEngine.root, 'package.json'))\n );\n }\n\n let targetingEngine = this.engineConfig(packageName);\n if (targetingEngine) {\n let appJSMatch = await this.searchAppTree(request, targetingEngine, request.specifier.replace(packageName, '.'));\n if (appJSMatch) {\n return logTransition('fallbackResolve: non-relative appJsMatch', request, appJSMatch);\n }\n }\n\n if (pkg.meta['auto-upgraded'] && (request.meta?.runtimeFallback ?? true)) {\n // auto-upgraded packages can fall back to attempting to find dependencies at\n // runtime. Native v2 packages can only get this behavior in the\n // isExplicitlyExternal case above because they need to explicitly ask for\n // externals.\n return this.external('v1 catch-all fallback', request, request.specifier);\n } else {\n // native v2 packages don't automatically externalize *everything* the way\n // auto-upgraded packages do, but they still externalize known and approved\n // ember virtual packages (like @ember/component)\n if (emberVirtualPackages.has(packageName)) {\n return this.external('emberVirtualPackages', request, request.specifier);\n }\n }\n\n // this is falling through with the original specifier which was\n // non-resolvable, which will presumably cause a static build error in stage3.\n return logTransition('fallbackResolve final exit', request);\n }\n\n private getEntryFromMergeMap(\n inEngineSpecifier: string,\n root: string\n ): { entry: MergeEntry; matched: string } | undefined {\n let entry: MergeEntry | undefined;\n for (let candidate of this.withResolvableExtensions(inEngineSpecifier)) {\n entry = this.mergeMap.get(root)?.get(candidate);\n if (entry) {\n return { entry, matched: candidate };\n }\n }\n }\n\n private *withResolvableExtensions(filename: string): Generator<string, void, void> {\n if (filename.match(/\\.(hbs|js|hbs\\.js)$/)) {\n yield filename;\n } else {\n for (let ext of ['.js', '.hbs.js', '.hbs']) {\n yield `${filename}${ext}`;\n }\n }\n }\n\n private async searchAppTree<R extends ModuleRequest>(\n request: R,\n engine: EngineConfig,\n inEngineSpecifier: string\n ): Promise<R | undefined> {\n let matched = this.getEntryFromMergeMap(inEngineSpecifier, engine.root);\n\n switch (matched?.entry.type) {\n case undefined:\n return undefined;\n case 'app-only':\n return request.alias(matched.entry['app-js'].specifier).rehome(matched.entry['app-js'].fromFile);\n case 'fastboot-only':\n return request.alias(matched.entry['fastboot-js'].specifier).rehome(matched.entry['fastboot-js'].fromFile);\n case 'both':\n let foundAppJS = await this.resolve(\n request.alias(matched.entry['app-js'].specifier).rehome(matched.entry['app-js'].fromFile).withMeta({\n runtimeFallback: false,\n })\n );\n if (foundAppJS.type !== 'found') {\n throw new Error(\n `${matched.entry['app-js'].fromPackageName} declared ${inEngineSpecifier} in packageJSON.ember-addon.app-js, but that module does not exist`\n );\n }\n let { names } = describeExports(readFileSync(foundAppJS.filename, 'utf8'), { configFile: false });\n return request.virtualize(fastbootSwitch(matched.matched, resolve(engine.root, 'package.json'), names));\n }\n }\n\n // check whether the given file with the given owningPackage is an addon's\n // appTree, and if so return the notional location within the app (or owning\n // engine) that it \"logically\" lives at.\n private reverseSearchAppTree(\n owningPackage: Package,\n fromFile: string\n ): { owningEngine: EngineConfig; inAppName: string } | undefined {\n // if the requesting file is in an addon's app-js, the request should\n // really be understood as a request for a module in the containing engine\n if (owningPackage.isV2Addon()) {\n let sections = [owningPackage.meta['app-js'], owningPackage.meta['fastboot-js']];\n for (let section of sections) {\n if (section) {\n let fromPackageRelativePath = explicitRelative(owningPackage.root, fromFile);\n for (let [inAppName, inAddonName] of Object.entries(section)) {\n if (inAddonName === fromPackageRelativePath) {\n return { owningEngine: this.owningEngine(owningPackage), inAppName };\n }\n }\n }\n }\n }\n }\n\n // check if this file is resolvable as a global component, and if so return\n // its dasherized name\n reverseComponentLookup(filename: string): string | undefined {\n const owningPackage = this.packageCache.ownerOfFile(filename);\n if (!owningPackage?.isV2Ember()) {\n return;\n }\n let engineConfig = this.options.engines.find(e => e.root === owningPackage.root);\n if (engineConfig) {\n // we're directly inside an engine, so we're potentially resolvable as a\n // global component\n\n // this kind of mapping is not true in general for all packages, but it\n // *is* true for all classical engines (which includes apps) since they\n // don't support package.json `exports`. As for a future v2 engine or app:\n // this whole method is only relevant for implementing packageRules, which\n // should only be for classic stuff. v2 packages should do the right\n // things from the beginning and not need packageRules about themselves.\n let inAppName = explicitRelative(engineConfig.root, filename);\n\n return this.tryReverseComponent(engineConfig.packageName, inAppName);\n }\n\n let engineInfo = this.reverseSearchAppTree(owningPackage, filename);\n if (engineInfo) {\n // we're in some addon's app tree, so we're potentially resolvable as a\n // global component\n return this.tryReverseComponent(engineInfo.owningEngine.packageName, engineInfo.inAppName);\n }\n }\n\n private tryReverseComponent(inEngineName: string, relativePath: string): string | undefined {\n let extensionless = relativePath.replace(extensionsPattern(this.options.resolvableExtensions), '');\n let candidates = [...this.componentJSCandidates(inEngineName), ...this.componentTemplateCandidates(inEngineName)];\n for (let candidate of candidates) {\n if (extensionless.startsWith(`.${candidate.prefix}`) && extensionless.endsWith(candidate.suffix)) {\n return extensionless.slice(candidate.prefix.length + 1, extensionless.length - candidate.suffix.length);\n }\n }\n return undefined;\n }\n}\n\nfunction isExplicitlyExternal(specifier: string, fromPkg: V2Package): boolean {\n return Boolean(fromPkg.isV2Addon() && fromPkg.meta['externals'] && fromPkg.meta['externals'].includes(specifier));\n}\n\n// we don't want to allow things that resolve only by accident that are likely\n// to break in other setups. For example: import your dependencies'\n// dependencies, or importing your own name from within a monorepo (which will\n// work because of the symlinking) without setting up \"exports\" (which makes\n// your own name reliably resolvable)\nfunction reliablyResolvable(pkg: V2Package, packageName: string) {\n if (pkg.hasDependency(packageName)) {\n return true;\n }\n\n if (pkg.name === packageName && pkg.packageJSON.exports) {\n return true;\n }\n\n if (emberVirtualPeerDeps.has(packageName) || emberVirtualPackages.has(packageName)) {\n return true;\n }\n\n return false;\n}\n\n//\nfunction appImportInAppTree(inPackage: Package, inLogicalPackage: Package, importedPackageName: string): boolean {\n return inPackage !== inLogicalPackage && importedPackageName === inLogicalPackage.name;\n}\n"]}
|
package/src/node-resolve.d.ts
CHANGED
@@ -1,26 +1,33 @@
|
|
1
|
-
import type { ModuleRequest, Resolver } from './module-resolver';
|
1
|
+
import type { ModuleRequest, Resolution, Resolver } from './module-resolver';
|
2
2
|
export declare class NodeModuleRequest implements ModuleRequest {
|
3
|
+
private resolver;
|
3
4
|
readonly specifier: string;
|
4
5
|
readonly fromFile: string;
|
5
6
|
readonly isVirtual: boolean;
|
6
7
|
readonly meta: Record<string, any> | undefined;
|
7
8
|
readonly isNotFound: boolean;
|
8
|
-
|
9
|
+
readonly resolvedTo: Resolution<NodeResolution, Error> | undefined;
|
10
|
+
constructor(resolver: Resolver, specifier: string, fromFile: string, isVirtual: boolean, meta: Record<string, any> | undefined, isNotFound: boolean, resolvedTo: Resolution<NodeResolution, Error> | undefined);
|
9
11
|
get debugType(): string;
|
10
12
|
alias(specifier: string): this;
|
11
13
|
rehome(fromFile: string): this;
|
12
14
|
virtualize(filename: string): this;
|
13
15
|
withMeta(meta: Record<string, any> | undefined): this;
|
14
16
|
notFound(): this;
|
17
|
+
resolveTo(resolution: Resolution<NodeResolution, Error>): this;
|
18
|
+
defaultResolve(): Promise<Resolution<NodeResolution, Error>>;
|
15
19
|
}
|
16
|
-
|
20
|
+
type NodeResolution = {
|
17
21
|
type: 'virtual';
|
18
22
|
filename: string;
|
19
23
|
content: string;
|
20
24
|
} | {
|
21
25
|
type: 'real';
|
22
26
|
filename: string;
|
23
|
-
}
|
27
|
+
};
|
28
|
+
type NodeResolutionError = {
|
24
29
|
type: 'not_found';
|
25
30
|
err: Error;
|
26
31
|
};
|
32
|
+
export declare function nodeResolve(resolver: Resolver, specifier: string, fromFile: string): Promise<NodeResolution | NodeResolutionError>;
|
33
|
+
export {};
|
package/src/node-resolve.js
CHANGED
@@ -9,46 +9,51 @@ const path_1 = require("path");
|
|
9
9
|
const shared_internals_1 = require("@embroider/shared-internals");
|
10
10
|
const assert_never_1 = __importDefault(require("assert-never"));
|
11
11
|
class NodeModuleRequest {
|
12
|
-
constructor(specifier, fromFile, isVirtual, meta, isNotFound) {
|
12
|
+
constructor(resolver, specifier, fromFile, isVirtual, meta, isNotFound, resolvedTo) {
|
13
|
+
this.resolver = resolver;
|
13
14
|
this.specifier = specifier;
|
14
15
|
this.fromFile = fromFile;
|
15
16
|
this.isVirtual = isVirtual;
|
16
17
|
this.meta = meta;
|
17
18
|
this.isNotFound = isNotFound;
|
19
|
+
this.resolvedTo = resolvedTo;
|
18
20
|
}
|
19
21
|
get debugType() {
|
20
22
|
return 'node';
|
21
23
|
}
|
22
24
|
alias(specifier) {
|
23
|
-
return new NodeModuleRequest(specifier, this.fromFile, false, this.meta, false);
|
25
|
+
return new NodeModuleRequest(this.resolver, specifier, this.fromFile, false, this.meta, false, undefined);
|
24
26
|
}
|
25
27
|
rehome(fromFile) {
|
26
28
|
if (this.fromFile === fromFile) {
|
27
29
|
return this;
|
28
30
|
}
|
29
31
|
else {
|
30
|
-
return new NodeModuleRequest(this.specifier, fromFile, false, this.meta, false);
|
32
|
+
return new NodeModuleRequest(this.resolver, this.specifier, fromFile, false, this.meta, false, undefined);
|
31
33
|
}
|
32
34
|
}
|
33
35
|
virtualize(filename) {
|
34
|
-
return new NodeModuleRequest(filename, this.fromFile, true, this.meta, false);
|
36
|
+
return new NodeModuleRequest(this.resolver, filename, this.fromFile, true, this.meta, false, undefined);
|
35
37
|
}
|
36
38
|
withMeta(meta) {
|
37
|
-
return new NodeModuleRequest(this.specifier, this.fromFile, this.isVirtual, meta, this.isNotFound);
|
39
|
+
return new NodeModuleRequest(this.resolver, this.specifier, this.fromFile, this.isVirtual, meta, this.isNotFound, this.resolvedTo);
|
38
40
|
}
|
39
41
|
notFound() {
|
40
|
-
return new NodeModuleRequest(this.specifier, this.fromFile, this.isVirtual, this.meta, true);
|
42
|
+
return new NodeModuleRequest(this.resolver, this.specifier, this.fromFile, this.isVirtual, this.meta, true, undefined);
|
41
43
|
}
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
resolveTo(resolution) {
|
45
|
+
return new NodeModuleRequest(this.resolver, this.specifier, this.fromFile, this.isVirtual, this.meta, this.isNotFound, resolution);
|
46
|
+
}
|
47
|
+
async defaultResolve() {
|
48
|
+
const request = this;
|
46
49
|
if (request.isVirtual) {
|
47
50
|
return {
|
48
51
|
type: 'found',
|
52
|
+
filename: request.specifier,
|
53
|
+
isVirtual: true,
|
49
54
|
result: {
|
50
55
|
type: 'virtual',
|
51
|
-
content: (0, virtual_content_1.virtualContent)(request.specifier, resolver).src,
|
56
|
+
content: (0, virtual_content_1.virtualContent)(request.specifier, this.resolver).src,
|
52
57
|
filename: request.specifier,
|
53
58
|
},
|
54
59
|
};
|
@@ -61,42 +66,63 @@ function nodeResolve(resolver, specifier, fromFile) {
|
|
61
66
|
err,
|
62
67
|
};
|
63
68
|
}
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
fromDir = newFromDir;
|
81
|
-
}
|
69
|
+
// require.resolve does not like when we resolve from virtual paths.
|
70
|
+
// That is, a request like "../thing.js" from
|
71
|
+
// "/a/real/path/VIRTUAL_SUBDIR/virtual.js" has an unambiguous target of
|
72
|
+
// "/a/real/path/thing.js", but require.resolve won't do that path
|
73
|
+
// adjustment until after checking whether VIRTUAL_SUBDIR actually
|
74
|
+
// exists.
|
75
|
+
//
|
76
|
+
// We can do the path adjustments before doing require.resolve.
|
77
|
+
let { specifier } = request;
|
78
|
+
let fromDir = (0, path_1.dirname)(request.fromFile);
|
79
|
+
if (!(0, path_1.isAbsolute)(specifier) && specifier.startsWith('.')) {
|
80
|
+
let targetPath = (0, path_1.resolve)(fromDir, specifier);
|
81
|
+
let newFromDir = (0, path_1.dirname)(targetPath);
|
82
|
+
if (fromDir !== newFromDir) {
|
83
|
+
specifier = (0, shared_internals_1.explicitRelative)(newFromDir, targetPath);
|
84
|
+
fromDir = newFromDir;
|
82
85
|
}
|
83
|
-
let filename = require.resolve(specifier, {
|
84
|
-
paths: [fromDir],
|
85
|
-
});
|
86
|
-
return { type: 'found', result: { type: 'real', filename } };
|
87
86
|
}
|
88
|
-
|
89
|
-
|
90
|
-
|
87
|
+
let initialError;
|
88
|
+
for (let candidate of candidates(specifier)) {
|
89
|
+
let filename;
|
90
|
+
try {
|
91
|
+
filename = require.resolve(candidate, {
|
92
|
+
paths: [fromDir],
|
93
|
+
});
|
94
|
+
}
|
95
|
+
catch (err) {
|
96
|
+
if (err.code !== 'MODULE_NOT_FOUND') {
|
97
|
+
throw err;
|
98
|
+
}
|
99
|
+
if (!initialError) {
|
100
|
+
initialError = err;
|
101
|
+
}
|
102
|
+
continue;
|
91
103
|
}
|
92
|
-
return { type: '
|
104
|
+
return { type: 'found', filename, result: { type: 'real', filename }, isVirtual: false };
|
93
105
|
}
|
94
|
-
|
106
|
+
return { type: 'not_found', err: initialError };
|
107
|
+
}
|
108
|
+
}
|
109
|
+
exports.NodeModuleRequest = NodeModuleRequest;
|
110
|
+
function* candidates(specifier) {
|
111
|
+
yield specifier;
|
112
|
+
const extensions = ['.hbs.js', '.hbs'];
|
113
|
+
for (let ext of extensions) {
|
114
|
+
yield `${specifier}${ext}`;
|
115
|
+
}
|
116
|
+
}
|
117
|
+
async function nodeResolve(resolver, specifier, fromFile) {
|
118
|
+
let resolution = await resolver.resolve(new NodeModuleRequest(resolver, specifier, fromFile, false, undefined, false, undefined));
|
95
119
|
switch (resolution.type) {
|
96
120
|
case 'not_found':
|
97
121
|
return resolution;
|
98
122
|
case 'found':
|
99
123
|
return resolution.result;
|
124
|
+
case 'ignored':
|
125
|
+
throw new Error(`bug: this is supposed to be impossible because NodeModuleRequest.prototype.defaultResove does not use "ignored"`);
|
100
126
|
default:
|
101
127
|
throw (0, assert_never_1.default)(resolution);
|
102
128
|
}
|
package/src/node-resolve.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"node-resolve.js","sourceRoot":"","sources":["node-resolve.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAmD;AACnD,+BAAoD;AACpD,kEAA+D;AAC/D,gEAAuC;AAKvC,MAAa,iBAAiB;IAC5B,
|
1
|
+
{"version":3,"file":"node-resolve.js","sourceRoot":"","sources":["node-resolve.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAmD;AACnD,+BAAoD;AACpD,kEAA+D;AAC/D,gEAAuC;AAKvC,MAAa,iBAAiB;IAC5B,YACU,QAAkB,EACjB,SAAiB,EACjB,QAAgB,EAChB,SAAkB,EAClB,IAAqC,EACrC,UAAmB,EACnB,UAAyD;QAN1D,aAAQ,GAAR,QAAQ,CAAU;QACjB,cAAS,GAAT,SAAS,CAAQ;QACjB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,cAAS,GAAT,SAAS,CAAS;QAClB,SAAI,GAAJ,IAAI,CAAiC;QACrC,eAAU,GAAV,UAAU,CAAS;QACnB,eAAU,GAAV,UAAU,CAA+C;IACjE,CAAC;IAEJ,IAAI,SAAS;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,SAAiB;QACrB,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAS,CAAC;IACpH,CAAC;IACD,MAAM,CAAC,QAAgB;QACrB,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC9B,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAS,CAAC;SACnH;IACH,CAAC;IACD,UAAU,CAAC,QAAgB;QACzB,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAS,CAAC;IAClH,CAAC;IACD,QAAQ,CAAC,IAAqC;QAC5C,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,EACd,IAAI,EACJ,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,UAAU,CACR,CAAC;IACZ,CAAC;IACD,QAAQ;QACN,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,IAAI,EACT,IAAI,EACJ,SAAS,CACF,CAAC;IACZ,CAAC;IAED,SAAS,CAAC,UAA6C;QACrD,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,UAAU,EACf,UAAU,CACH,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC;QACrB,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,OAAO,CAAC,SAAS;gBAC3B,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE;oBACN,IAAI,EAAE,SAAsB;oBAC5B,OAAO,EAAE,IAAA,gCAAc,EAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG;oBAC7D,QAAQ,EAAE,OAAO,CAAC,SAAS;iBAC5B;aACF,CAAC;SACH;QACD,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAC5D,GAAW,CAAC,IAAI,GAAG,kBAAkB,CAAC;YACvC,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,GAAG;aACJ,CAAC;SACH;QAED,oEAAoE;QACpE,6CAA6C;QAC7C,wEAAwE;QACxE,kEAAkE;QAClE,kEAAkE;QAClE,UAAU;QACV,EAAE;QACF,+DAA+D;QAC/D,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC5B,IAAI,OAAO,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,IAAA,iBAAU,EAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACvD,IAAI,UAAU,GAAG,IAAA,cAAO,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC7C,IAAI,UAAU,GAAG,IAAA,cAAO,EAAC,UAAU,CAAC,CAAC;YACrC,IAAI,OAAO,KAAK,UAAU,EAAE;gBAC1B,SAAS,GAAG,IAAA,mCAAgB,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBACrD,OAAO,GAAG,UAAU,CAAC;aACtB;SACF;QAED,IAAI,YAAY,CAAC;QAEjB,KAAK,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE;YAC3C,IAAI,QAAQ,CAAC;YACb,IAAI;gBACF,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE;oBACpC,KAAK,EAAE,CAAC,OAAO,CAAC;iBACjB,CAAC,CAAC;aACJ;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,EAAE;oBACnC,MAAM,GAAG,CAAC;iBACX;gBAED,IAAI,CAAC,YAAY,EAAE;oBACjB,YAAY,GAAG,GAAG,CAAC;iBACpB;gBAED,SAAS;aACV;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAgB,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;SACpG;QAED,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;IAClD,CAAC;CACF;AAjID,8CAiIC;AAED,QAAQ,CAAC,CAAC,UAAU,CAAC,SAAiB;IACpC,MAAM,SAAS,CAAC;IAEhB,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEvC,KAAK,IAAI,GAAG,IAAI,UAAU,EAAE;QAC1B,MAAM,GAAG,SAAS,GAAG,GAAG,EAAE,CAAC;KAC5B;AACH,CAAC;AAMM,KAAK,UAAU,WAAW,CAC/B,QAAkB,EAClB,SAAiB,EACjB,QAAgB;IAEhB,IAAI,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CACrC,IAAI,iBAAiB,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CACzF,CAAC;IACF,QAAQ,UAAU,CAAC,IAAI,EAAE;QACvB,KAAK,WAAW;YACd,OAAO,UAAU,CAAC;QACpB,KAAK,OAAO;YACV,OAAO,UAAU,CAAC,MAAM,CAAC;QAC3B,KAAK,SAAS;YACZ,MAAM,IAAI,KAAK,CACb,iHAAiH,CAClH,CAAC;QACJ;YACE,MAAM,IAAA,sBAAW,EAAC,UAAU,CAAC,CAAC;KACjC;AACH,CAAC;AApBD,kCAoBC","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, Resolution, Resolver } from './module-resolver';\n\nexport class NodeModuleRequest implements ModuleRequest {\n constructor(\n private resolver: Resolver,\n readonly specifier: string,\n readonly fromFile: string,\n readonly isVirtual: boolean,\n readonly meta: Record<string, any> | undefined,\n readonly isNotFound: boolean,\n readonly resolvedTo: Resolution<NodeResolution, Error> | undefined\n ) {}\n\n get debugType() {\n return 'node';\n }\n\n alias(specifier: string): this {\n return new NodeModuleRequest(this.resolver, specifier, this.fromFile, false, this.meta, false, undefined) as this;\n }\n rehome(fromFile: string): this {\n if (this.fromFile === fromFile) {\n return this;\n } else {\n return new NodeModuleRequest(this.resolver, this.specifier, fromFile, false, this.meta, false, undefined) as this;\n }\n }\n virtualize(filename: string): this {\n return new NodeModuleRequest(this.resolver, filename, this.fromFile, true, this.meta, false, undefined) as this;\n }\n withMeta(meta: Record<string, any> | undefined): this {\n return new NodeModuleRequest(\n this.resolver,\n this.specifier,\n this.fromFile,\n this.isVirtual,\n meta,\n this.isNotFound,\n this.resolvedTo\n ) as this;\n }\n notFound(): this {\n return new NodeModuleRequest(\n this.resolver,\n this.specifier,\n this.fromFile,\n this.isVirtual,\n this.meta,\n true,\n undefined\n ) as this;\n }\n\n resolveTo(resolution: Resolution<NodeResolution, Error>): this {\n return new NodeModuleRequest(\n this.resolver,\n this.specifier,\n this.fromFile,\n this.isVirtual,\n this.meta,\n this.isNotFound,\n resolution\n ) as this;\n }\n\n async defaultResolve(): Promise<Resolution<NodeResolution, Error>> {\n const request = this;\n if (request.isVirtual) {\n return {\n type: 'found',\n filename: request.specifier,\n isVirtual: true,\n result: {\n type: 'virtual' as 'virtual',\n content: virtualContent(request.specifier, this.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\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 initialError;\n\n for (let candidate of candidates(specifier)) {\n let filename;\n try {\n filename = require.resolve(candidate, {\n paths: [fromDir],\n });\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n\n if (!initialError) {\n initialError = err;\n }\n\n continue;\n }\n return { type: 'found', filename, result: { type: 'real' as 'real', filename }, isVirtual: false };\n }\n\n return { type: 'not_found', err: initialError };\n }\n}\n\nfunction* candidates(specifier: string) {\n yield specifier;\n\n const extensions = ['.hbs.js', '.hbs'];\n\n for (let ext of extensions) {\n yield `${specifier}${ext}`;\n }\n}\n\ntype NodeResolution = { type: 'virtual'; filename: string; content: string } | { type: 'real'; filename: string };\n\ntype NodeResolutionError = { type: 'not_found'; err: Error };\n\nexport async function nodeResolve(\n resolver: Resolver,\n specifier: string,\n fromFile: string\n): Promise<NodeResolution | NodeResolutionError> {\n let resolution = await resolver.resolve(\n new NodeModuleRequest(resolver, specifier, fromFile, false, undefined, false, undefined)\n );\n switch (resolution.type) {\n case 'not_found':\n return resolution;\n case 'found':\n return resolution.result;\n case 'ignored':\n throw new Error(\n `bug: this is supposed to be impossible because NodeModuleRequest.prototype.defaultResove does not use \"ignored\"`\n );\n default:\n throw assertNever(resolution);\n }\n}\n"]}
|