@embroider/core 3.4.20-unstable.947c6d2 → 3.4.20-unstable.b470496
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 +7 -7
- package/src/index.d.ts +3 -3
- package/src/index.js +3 -3
- package/src/index.js.map +1 -1
- package/src/module-request.d.ts +43 -0
- package/src/module-request.js +91 -0
- package/src/module-request.js.map +1 -0
- package/src/module-resolver.d.ts +1 -28
- package/src/module-resolver.js +123 -124
- package/src/module-resolver.js.map +1 -1
- package/src/node-resolve.d.ts +13 -16
- package/src/node-resolve.js +38 -57
- package/src/node-resolve.js.map +1 -1
- package/src/virtual-content.d.ts +24 -10
- package/src/virtual-content.js +35 -114
- package/src/virtual-content.js.map +1 -1
- package/src/virtual-entrypoint.d.ts +4 -2
- package/src/virtual-entrypoint.js +2 -18
- package/src/virtual-entrypoint.js.map +1 -1
- package/src/virtual-route-entrypoint.d.ts +4 -9
- package/src/virtual-route-entrypoint.js +1 -33
- package/src/virtual-route-entrypoint.js.map +1 -1
- package/src/virtual-test-support-styles.d.ts +5 -2
- package/src/virtual-test-support-styles.js +2 -5
- package/src/virtual-test-support-styles.js.map +1 -1
- package/src/virtual-test-support.d.ts +5 -2
- package/src/virtual-test-support.js +2 -5
- package/src/virtual-test-support.js.map +1 -1
- package/src/virtual-vendor-styles.d.ts +5 -1
- package/src/virtual-vendor-styles.js +2 -1
- package/src/virtual-vendor-styles.js.map +1 -1
- package/src/virtual-vendor.d.ts +5 -2
- package/src/virtual-vendor.js +4 -8
- package/src/virtual-vendor.js.map +1 -1
- package/src/to-broccoli-plugin.d.ts +0 -8
- package/src/to-broccoli-plugin.js +0 -30
- package/src/to-broccoli-plugin.js.map +0 -1
package/src/module-resolver.js
CHANGED
@@ -17,12 +17,10 @@ const debug_1 = __importDefault(require("debug"));
|
|
17
17
|
const assert_never_1 = __importDefault(require("assert-never"));
|
18
18
|
const reverse_exports_1 = require("@embroider/reverse-exports");
|
19
19
|
const resolve_exports_1 = require("resolve.exports");
|
20
|
-
const virtual_content_1 = require("./virtual-content");
|
21
20
|
const typescript_memoize_1 = require("typescript-memoize");
|
22
21
|
const describe_exports_1 = require("./describe-exports");
|
23
22
|
const fs_1 = require("fs");
|
24
23
|
const node_resolve_1 = require("./node-resolve");
|
25
|
-
const virtual_route_entrypoint_1 = require("./virtual-route-entrypoint");
|
26
24
|
const semver_1 = require("semver");
|
27
25
|
const debug = (0, debug_1.default)('embroider:resolver');
|
28
26
|
// Using a formatter makes this work lazy so nothing happens when we aren't
|
@@ -36,10 +34,7 @@ debug_1.default.formatters.p = (s) => {
|
|
36
34
|
return s;
|
37
35
|
};
|
38
36
|
function logTransition(reason, before, after = before) {
|
39
|
-
if (after.
|
40
|
-
debug(`[%s:virtualized] %s because %s\n in %p`, before.debugType, before.specifier, reason, before.fromFile);
|
41
|
-
}
|
42
|
-
else if (after.resolvedTo) {
|
37
|
+
if (after.resolvedTo) {
|
43
38
|
debug(`[%s:resolvedTo] %s because %s\n in %p`, before.debugType, before.specifier, reason, before.fromFile);
|
44
39
|
}
|
45
40
|
else if (before.specifier !== after.specifier) {
|
@@ -53,17 +48,11 @@ function logTransition(reason, before, after = before) {
|
|
53
48
|
else if (before.fromFile !== after.fromFile) {
|
54
49
|
debug(`[%s:rehomed] %s, because %s\n from %p\n to %p`, before.debugType, before.specifier, reason, before.fromFile, after.fromFile);
|
55
50
|
}
|
56
|
-
else if (after.isNotFound) {
|
57
|
-
debug(`[%s:not-found] %s because %s\n in %p`, before.debugType, before.specifier, reason, before.fromFile);
|
58
|
-
}
|
59
51
|
else {
|
60
52
|
debug(`[%s:unchanged] %s because %s\n in %p`, before.debugType, before.specifier, reason, before.fromFile);
|
61
53
|
}
|
62
54
|
return after;
|
63
55
|
}
|
64
|
-
function isTerminal(request) {
|
65
|
-
return request.isVirtual || request.isNotFound || Boolean(request.resolvedTo);
|
66
|
-
}
|
67
56
|
const compatPattern = /@embroider\/virtual\/(?<type>[^\/]+)\/(?<rest>.*)/;
|
68
57
|
class Resolver {
|
69
58
|
constructor(options) {
|
@@ -102,36 +91,43 @@ class Resolver {
|
|
102
91
|
// rules.
|
103
92
|
async resolve(request) {
|
104
93
|
request = await this.beforeResolve(request);
|
94
|
+
let resolution;
|
105
95
|
if (request.resolvedTo) {
|
106
|
-
|
96
|
+
if (typeof request.resolvedTo === 'function') {
|
97
|
+
resolution = await request.resolvedTo();
|
98
|
+
}
|
99
|
+
else {
|
100
|
+
resolution = request.resolvedTo;
|
101
|
+
}
|
102
|
+
}
|
103
|
+
else {
|
104
|
+
resolution = await request.defaultResolve();
|
107
105
|
}
|
108
|
-
let resolution = await request.defaultResolve();
|
109
106
|
switch (resolution.type) {
|
110
107
|
case 'found':
|
111
|
-
case 'ignored':
|
112
108
|
return resolution;
|
113
109
|
case 'not_found':
|
114
110
|
break;
|
115
111
|
default:
|
116
112
|
throw (0, assert_never_1.default)(resolution);
|
117
113
|
}
|
114
|
+
request = request.clone();
|
118
115
|
let nextRequest = await this.fallbackResolve(request);
|
119
116
|
if (nextRequest === request) {
|
120
117
|
// no additional fallback is available.
|
121
118
|
return resolution;
|
122
119
|
}
|
123
120
|
if (nextRequest.resolvedTo) {
|
124
|
-
|
121
|
+
if (typeof nextRequest.resolvedTo === 'function') {
|
122
|
+
return await nextRequest.resolvedTo();
|
123
|
+
}
|
124
|
+
else {
|
125
|
+
return nextRequest.resolvedTo;
|
126
|
+
}
|
125
127
|
}
|
126
128
|
if (nextRequest.fromFile === request.fromFile && nextRequest.specifier === request.specifier) {
|
127
129
|
throw new Error('Bug Discovered! New request is not === original request but has the same fromFile and specifier. This will likely create a loop.');
|
128
130
|
}
|
129
|
-
if (nextRequest.isVirtual || nextRequest.isNotFound) {
|
130
|
-
// virtual and NotFound requests are terminal, there is no more
|
131
|
-
// beforeResolve or fallbackResolve around them. The defaultResolve is
|
132
|
-
// expected to know how to implement them.
|
133
|
-
return nextRequest.defaultResolve();
|
134
|
-
}
|
135
131
|
return this.resolve(nextRequest);
|
136
132
|
}
|
137
133
|
// Use standard NodeJS resolving, with our required compatibility rules on
|
@@ -155,7 +151,7 @@ class Resolver {
|
|
155
151
|
return owningPackage;
|
156
152
|
}
|
157
153
|
generateFastbootSwitch(request) {
|
158
|
-
if (
|
154
|
+
if (request.resolvedTo) {
|
159
155
|
return request;
|
160
156
|
}
|
161
157
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
@@ -178,8 +174,8 @@ class Resolver {
|
|
178
174
|
let { names } = (0, describe_exports_1.describeExports)((0, fs_1.readFileSync)((0, path_1.resolve)(pkg.root, fastbootFile.shadowedFilename), 'utf8'), {
|
179
175
|
configFile: false,
|
180
176
|
});
|
181
|
-
let switchFile =
|
182
|
-
if (switchFile === request.fromFile) {
|
177
|
+
let switchFile = fastbootSwitch(candidate, (0, path_1.resolve)(pkg.root, 'package.json'), names);
|
178
|
+
if (switchFile.specifier === request.fromFile) {
|
183
179
|
return logTransition('internal lookup from fastbootSwitch', request);
|
184
180
|
}
|
185
181
|
else {
|
@@ -196,10 +192,10 @@ class Resolver {
|
|
196
192
|
}
|
197
193
|
handleFastbootSwitch(request) {
|
198
194
|
var _a;
|
199
|
-
if (
|
195
|
+
if (request.resolvedTo) {
|
200
196
|
return request;
|
201
197
|
}
|
202
|
-
let match =
|
198
|
+
let match = decodeFastbootSwitch(request.fromFile);
|
203
199
|
if (!match) {
|
204
200
|
return request;
|
205
201
|
}
|
@@ -243,71 +239,77 @@ class Resolver {
|
|
243
239
|
return logTransition('failed to match in fastboot switch', request);
|
244
240
|
}
|
245
241
|
handleImplicitModules(request) {
|
246
|
-
if (
|
247
|
-
return request;
|
248
|
-
}
|
249
|
-
let im = (0, virtual_content_1.decodeImplicitModules)(request.specifier);
|
250
|
-
if (!im) {
|
242
|
+
if (request.resolvedTo) {
|
251
243
|
return request;
|
252
244
|
}
|
253
|
-
let
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
245
|
+
for (let variant of ['', 'test-']) {
|
246
|
+
let suffix = `-embroider-implicit-${variant}modules.js`;
|
247
|
+
if (!request.specifier.endsWith(suffix)) {
|
248
|
+
continue;
|
249
|
+
}
|
250
|
+
let filename = request.specifier.slice(0, -1 * suffix.length);
|
251
|
+
if (!filename.endsWith('/') && filename.endsWith('\\')) {
|
252
|
+
continue;
|
253
|
+
}
|
254
|
+
filename = filename.slice(0, -1);
|
255
|
+
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
256
|
+
if (!(pkg === null || pkg === void 0 ? void 0 : pkg.isV2Ember())) {
|
257
|
+
throw new Error(`bug: found implicit modules import in non-ember package at ${request.fromFile}`);
|
258
|
+
}
|
259
|
+
let type = `implicit-${variant}modules`;
|
260
|
+
let packageName = (0, shared_internals_1.packageName)(filename);
|
261
|
+
if (packageName) {
|
262
|
+
let dep = this.packageCache.resolve(packageName, pkg);
|
263
|
+
return logTransition(`dep's implicit modules`, request, request.virtualize({ type, specifier: (0, path_1.resolve)(dep.root, `-embroider-${type}.js`), fromFile: dep.root }));
|
264
|
+
}
|
265
|
+
else {
|
266
|
+
return logTransition(`own implicit modules`, request, request.virtualize({ type, specifier: (0, path_1.resolve)(pkg.root, `-embroider-${type}.js`), fromFile: pkg.root }));
|
267
|
+
}
|
264
268
|
}
|
269
|
+
return request;
|
265
270
|
}
|
266
271
|
handleEntrypoint(request) {
|
267
272
|
var _a;
|
268
|
-
if (
|
273
|
+
if (request.resolvedTo) {
|
269
274
|
return request;
|
270
275
|
}
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
'/@embroider/virtual/compat-modules',
|
275
|
-
'./@embroider/virtual/compat-modules',
|
276
|
-
];
|
277
|
-
if (!candidates.some(c => request.specifier.startsWith(c + '/') || request.specifier === c)) {
|
276
|
+
const compatModulesSpecifier = '@embroider/virtual/compat-modules';
|
277
|
+
let isCompatModules = request.specifier === compatModulesSpecifier || request.specifier.startsWith(compatModulesSpecifier + '/');
|
278
|
+
if (!isCompatModules) {
|
278
279
|
return request;
|
279
280
|
}
|
280
|
-
const result = /\.?\/?@embroider\/virtual\/compat-modules(?:\/(?<packageName>.*))?/.exec(request.specifier);
|
281
|
-
if (!result) {
|
282
|
-
// TODO make a better error
|
283
|
-
throw new Error('entrypoint does not match pattern' + request.specifier);
|
284
|
-
}
|
285
|
-
const { packageName } = result.groups;
|
286
281
|
const requestingPkg = this.packageCache.ownerOfFile(request.fromFile);
|
287
282
|
if (!(requestingPkg === null || requestingPkg === void 0 ? void 0 : requestingPkg.isV2Ember())) {
|
288
283
|
throw new Error(`bug: found entrypoint import in non-ember package at ${request.fromFile}`);
|
289
284
|
}
|
290
285
|
let pkg;
|
291
|
-
if (
|
292
|
-
pkg =
|
286
|
+
if (request.specifier === compatModulesSpecifier) {
|
287
|
+
pkg = requestingPkg;
|
293
288
|
}
|
294
289
|
else {
|
295
|
-
|
290
|
+
let packageName = request.specifier.slice(compatModulesSpecifier.length + 1);
|
291
|
+
pkg = this.packageCache.resolve(packageName, requestingPkg);
|
296
292
|
}
|
297
293
|
let matched = (0, resolve_exports_1.exports)(pkg.packageJSON, '-embroider-entrypoint.js', {
|
298
294
|
browser: true,
|
299
295
|
conditions: ['default', 'imports'],
|
300
296
|
});
|
301
|
-
|
297
|
+
let specifier = (0, path_1.resolve)(pkg.root, (_a = matched === null || matched === void 0 ? void 0 : matched[0]) !== null && _a !== void 0 ? _a : '-embroider-entrypoint.js');
|
298
|
+
return logTransition('entrypoint', request, request.virtualize({
|
299
|
+
type: 'entrypoint',
|
300
|
+
specifier,
|
301
|
+
fromDir: (0, path_1.dirname)(specifier),
|
302
|
+
}));
|
302
303
|
}
|
303
304
|
handleRouteEntrypoint(request) {
|
304
|
-
if (
|
305
|
+
if (request.resolvedTo) {
|
305
306
|
return request;
|
306
307
|
}
|
307
|
-
|
308
|
-
if (!
|
308
|
+
const publicPrefix = '@embroider/core/route/';
|
309
|
+
if (!request.specifier.startsWith(publicPrefix)) {
|
309
310
|
return request;
|
310
311
|
}
|
312
|
+
let routeName = request.specifier.slice(publicPrefix.length);
|
311
313
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
312
314
|
if (!(pkg === null || pkg === void 0 ? void 0 : pkg.isV2Ember())) {
|
313
315
|
throw new Error(`bug: found entrypoint import in non-ember package at ${request.fromFile}`);
|
@@ -316,42 +318,35 @@ class Resolver {
|
|
316
318
|
browser: true,
|
317
319
|
conditions: ['default', 'imports'],
|
318
320
|
});
|
319
|
-
|
321
|
+
let target = matched ? `${matched}:route=${routeName}` : `-embroider-route-entrypoint.js:route=${routeName}`;
|
322
|
+
let specifier = (0, path_1.resolve)(pkg.root, target);
|
323
|
+
return logTransition('route entrypoint', request, request.virtualize({ type: 'route-entrypoint', specifier, route: routeName, fromDir: (0, path_1.dirname)(specifier) }));
|
320
324
|
}
|
321
325
|
handleImplicitTestScripts(request) {
|
322
|
-
|
323
|
-
const candidates = [
|
324
|
-
'@embroider/virtual/test-support.js',
|
325
|
-
'/@embroider/virtual/test-support.js',
|
326
|
-
'./@embroider/virtual/test-support.js',
|
327
|
-
];
|
328
|
-
if (!candidates.includes(request.specifier)) {
|
326
|
+
if (request.specifier !== '@embroider/virtual/test-support.js') {
|
329
327
|
return request;
|
330
328
|
}
|
331
329
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
332
330
|
if ((pkg === null || pkg === void 0 ? void 0 : pkg.root) !== this.options.engines[0].root) {
|
333
331
|
throw new Error(`bug: found an import of ${request.specifier} in ${request.fromFile}, but this is not the top-level Ember app. The top-level Ember app is the only one that has support for @embroider/virtual/test-support.js. If you think something should be fixed in Embroider, please open an issue on https://github.com/embroider-build/embroider/issues.`);
|
334
332
|
}
|
335
|
-
return logTransition('test-support', request, request.virtualize((0, path_1.resolve)(pkg.root, '-embroider-test-support.js')));
|
333
|
+
return logTransition('test-support', request, request.virtualize({ type: 'test-support-js', specifier: (0, path_1.resolve)(pkg.root, '-embroider-test-support.js') }));
|
336
334
|
}
|
337
335
|
handleTestSupportStyles(request) {
|
338
|
-
|
339
|
-
const candidates = [
|
340
|
-
'@embroider/virtual/test-support.css',
|
341
|
-
'/@embroider/virtual/test-support.css',
|
342
|
-
'./@embroider/virtual/test-support.css',
|
343
|
-
];
|
344
|
-
if (!candidates.includes(request.specifier)) {
|
336
|
+
if (request.specifier !== '@embroider/virtual/test-support.css') {
|
345
337
|
return request;
|
346
338
|
}
|
347
339
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
348
340
|
if ((pkg === null || pkg === void 0 ? void 0 : pkg.root) !== this.options.engines[0].root) {
|
349
341
|
throw new Error(`bug: found an import of ${request.specifier} in ${request.fromFile}, but this is not the top-level Ember app. The top-level Ember app is the only one that has support for @embroider/virtual/test-support.css. If you think something should be fixed in Embroider, please open an issue on https://github.com/embroider-build/embroider/issues.`);
|
350
342
|
}
|
351
|
-
return logTransition('test-support-styles', request, request.virtualize(
|
343
|
+
return logTransition('test-support-styles', request, request.virtualize({
|
344
|
+
type: 'test-support-css',
|
345
|
+
specifier: (0, path_1.resolve)(pkg.root, '-embroider-test-support-styles.css'),
|
346
|
+
}));
|
352
347
|
}
|
353
348
|
async handleGlobalsCompat(request) {
|
354
|
-
if (
|
349
|
+
if (request.resolvedTo) {
|
355
350
|
return request;
|
356
351
|
}
|
357
352
|
let match = compatPattern.exec(request.specifier);
|
@@ -378,35 +373,28 @@ class Resolver {
|
|
378
373
|
}
|
379
374
|
}
|
380
375
|
handleVendorStyles(request) {
|
381
|
-
|
382
|
-
const candidates = [
|
383
|
-
'@embroider/virtual/vendor.css',
|
384
|
-
'/@embroider/virtual/vendor.css',
|
385
|
-
'./@embroider/virtual/vendor.css',
|
386
|
-
];
|
387
|
-
if (!candidates.includes(request.specifier)) {
|
376
|
+
if (request.specifier !== '@embroider/virtual/vendor.css') {
|
388
377
|
return request;
|
389
378
|
}
|
390
379
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
391
380
|
if (!pkg || !this.options.engines.some(e => e.root === (pkg === null || pkg === void 0 ? void 0 : pkg.root))) {
|
392
381
|
throw new Error(`bug: found an import of ${request.specifier} in ${request.fromFile}, but this is not the top-level Ember app or Engine. The top-level Ember app is the only one that has support for @embroider/virtual/vendor.css. If you think something should be fixed in Embroider, please open an issue on https://github.com/embroider-build/embroider/issues.`);
|
393
382
|
}
|
394
|
-
return logTransition('vendor-styles', request, request.virtualize((0, path_1.resolve)(pkg.root, '-embroider-vendor-styles.css')));
|
383
|
+
return logTransition('vendor-styles', request, request.virtualize({ type: 'vendor-css', specifier: (0, path_1.resolve)(pkg.root, '-embroider-vendor-styles.css') }));
|
395
384
|
}
|
396
385
|
resolveHelper(path, inEngine, request) {
|
397
386
|
let target = this.parseGlobalPath(path, inEngine);
|
398
387
|
return logTransition('resolveHelper', request, request.alias(`${target.packageName}/helpers/${target.memberName}`).rehome((0, path_1.resolve)(inEngine.root, 'package.json')));
|
399
388
|
}
|
400
389
|
async resolveComponent(path, inEngine, request) {
|
390
|
+
var _a, _b;
|
401
391
|
let target = this.parseGlobalPath(path, inEngine);
|
402
392
|
let hbsModule = null;
|
403
393
|
let jsModule = null;
|
404
394
|
// first, the various places our template might be.
|
405
395
|
for (let candidate of this.componentTemplateCandidates(target.packageName)) {
|
406
396
|
let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;
|
407
|
-
let resolution = await this.resolve(request.alias(candidateSpecifier).rehome(target.from)
|
408
|
-
runtimeFallback: false,
|
409
|
-
}));
|
397
|
+
let resolution = await this.resolve(request.alias(candidateSpecifier).rehome(target.from));
|
410
398
|
if (resolution.type === 'found') {
|
411
399
|
hbsModule = resolution;
|
412
400
|
break;
|
@@ -415,12 +403,7 @@ class Resolver {
|
|
415
403
|
// then the various places our javascript might be.
|
416
404
|
for (let candidate of this.componentJSCandidates(target.packageName)) {
|
417
405
|
let candidateSpecifier = `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`;
|
418
|
-
let resolution = await this.resolve(request.alias(candidateSpecifier).rehome(target.from)
|
419
|
-
runtimeFallback: false,
|
420
|
-
}));
|
421
|
-
if (resolution.type === 'ignored') {
|
422
|
-
return logTransition(`resolving to ignored component`, request, request.resolveTo(resolution));
|
423
|
-
}
|
406
|
+
let resolution = await this.resolve(request.alias(candidateSpecifier).rehome(target.from));
|
424
407
|
// .hbs is a resolvable extension for us, so we need to exclude it here.
|
425
408
|
// It matches as a priority lower than .js, so finding an .hbs means
|
426
409
|
// there's definitely not a .js.
|
@@ -433,7 +416,13 @@ class Resolver {
|
|
433
416
|
if (!this.emberVersionSupportsSeparateTemplates) {
|
434
417
|
throw new Error(`Components with separately resolved templates were removed at Ember 6.0. Migrate to either co-located js/ts + hbs files or to gjs/gts. https://deprecations.emberjs.com/id/component-template-resolving/. Bad template was: ${hbsModule.filename}.`);
|
435
418
|
}
|
436
|
-
return logTransition(`resolveComponent found legacy HBS`, request, request.virtualize(
|
419
|
+
return logTransition(`resolveComponent found legacy HBS`, request, request.virtualize({
|
420
|
+
type: 'component-pair',
|
421
|
+
hbsModule: hbsModule.filename,
|
422
|
+
jsModule: (_a = jsModule === null || jsModule === void 0 ? void 0 : jsModule.filename) !== null && _a !== void 0 ? _a : null,
|
423
|
+
debugName: (0, path_1.basename)(hbsModule.filename).replace(/\.(js|hbs)$/, ''),
|
424
|
+
specifier: `${this.options.appRoot}/embroider-pair-component/${encodeURIComponent(hbsModule.filename)}/__vpc__/${encodeURIComponent((_b = jsModule === null || jsModule === void 0 ? void 0 : jsModule.filename) !== null && _b !== void 0 ? _b : '')}`,
|
425
|
+
}));
|
437
426
|
}
|
438
427
|
else if (jsModule) {
|
439
428
|
return logTransition(`resolving to resolveComponent found only JS`, request, request.resolveTo(jsModule));
|
@@ -447,13 +436,8 @@ class Resolver {
|
|
447
436
|
// component, so here to resolve the ambiguity we need to actually resolve
|
448
437
|
// that candidate to see if it works.
|
449
438
|
let helperCandidate = this.resolveHelper(path, inEngine, request);
|
450
|
-
let helperMatch = await this.resolve(request.alias(helperCandidate.specifier).rehome(helperCandidate.fromFile)
|
451
|
-
|
452
|
-
}));
|
453
|
-
// for the case of 'ignored' that means that esbuild found this helper in an external
|
454
|
-
// package so it should be considered found in this case and we should not look for a
|
455
|
-
// component with this name
|
456
|
-
if (helperMatch.type === 'found' || helperMatch.type === 'ignored') {
|
439
|
+
let helperMatch = await this.resolve(request.alias(helperCandidate.specifier).rehome(helperCandidate.fromFile));
|
440
|
+
if (helperMatch.type === 'found') {
|
457
441
|
return logTransition('resolve to ambiguous case matched a helper', request, request.resolveTo(helperMatch));
|
458
442
|
}
|
459
443
|
// unlike resolveHelper, resolveComponent already does pre-resolution in
|
@@ -631,7 +615,7 @@ class Resolver {
|
|
631
615
|
});
|
632
616
|
}
|
633
617
|
handleRewrittenPackages(request) {
|
634
|
-
if (
|
618
|
+
if (request.resolvedTo) {
|
635
619
|
return request;
|
636
620
|
}
|
637
621
|
let requestingPkg = this.packageCache.ownerOfFile(request.fromFile);
|
@@ -684,7 +668,7 @@ class Resolver {
|
|
684
668
|
return request;
|
685
669
|
}
|
686
670
|
handleRenaming(request) {
|
687
|
-
if (
|
671
|
+
if (request.resolvedTo) {
|
688
672
|
return request;
|
689
673
|
}
|
690
674
|
let packageName = (0, shared_internals_1.packageName)(request.specifier);
|
@@ -756,20 +740,14 @@ class Resolver {
|
|
756
740
|
return request;
|
757
741
|
}
|
758
742
|
handleVendor(request) {
|
759
|
-
|
760
|
-
const candidates = [
|
761
|
-
'@embroider/virtual/vendor.js',
|
762
|
-
'/@embroider/virtual/vendor.js',
|
763
|
-
'./@embroider/virtual/vendor.js',
|
764
|
-
];
|
765
|
-
if (!candidates.includes(request.specifier)) {
|
743
|
+
if (request.specifier !== '@embroider/virtual/vendor.js') {
|
766
744
|
return request;
|
767
745
|
}
|
768
746
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
769
747
|
if ((pkg === null || pkg === void 0 ? void 0 : pkg.root) !== this.options.engines[0].root) {
|
770
748
|
throw new Error(`bug: found an import of ${request.specifier} in ${request.fromFile}, but this is not the top-level Ember app. The top-level Ember app is the only one that has support for @embroider/virtual/vendor.js. If you think something should be fixed in Embroider, please open an issue on https://github.com/embroider-build/embroider/issues.`);
|
771
749
|
}
|
772
|
-
return logTransition('vendor', request, request.virtualize((0, path_1.resolve)(pkg.root, '-embroider-vendor.js')));
|
750
|
+
return logTransition('vendor', request, request.virtualize({ type: 'vendor-js', specifier: (0, path_1.resolve)(pkg.root, '-embroider-vendor.js') }));
|
773
751
|
}
|
774
752
|
resolveWithinMovedPackage(request, pkg) {
|
775
753
|
let levels = ['..'];
|
@@ -786,7 +764,7 @@ class Resolver {
|
|
786
764
|
return newRequest.withMeta({ originalFromFile });
|
787
765
|
}
|
788
766
|
preHandleExternal(request) {
|
789
|
-
if (
|
767
|
+
if (request.resolvedTo) {
|
790
768
|
return request;
|
791
769
|
}
|
792
770
|
let { specifier, fromFile } = request;
|
@@ -866,8 +844,8 @@ class Resolver {
|
|
866
844
|
}
|
867
845
|
}
|
868
846
|
async fallbackResolve(request) {
|
869
|
-
if (request.
|
870
|
-
throw new Error('Build tool bug detected! Fallback resolve should never see
|
847
|
+
if (request.resolvedTo) {
|
848
|
+
throw new Error('Build tool bug detected! Fallback resolve should never see an already-resolved request.');
|
871
849
|
}
|
872
850
|
if (request.specifier === '@embroider/macros') {
|
873
851
|
// the macros package is always handled directly within babel (not
|
@@ -1025,14 +1003,12 @@ class Resolver {
|
|
1025
1003
|
case 'fastboot-only':
|
1026
1004
|
return request.alias(matched.entry['fastboot-js'].specifier).rehome(matched.entry['fastboot-js'].fromFile);
|
1027
1005
|
case 'both':
|
1028
|
-
let foundAppJS = await this.resolve(request.alias(matched.entry['app-js'].specifier).rehome(matched.entry['app-js'].fromFile)
|
1029
|
-
runtimeFallback: false,
|
1030
|
-
}));
|
1006
|
+
let foundAppJS = await this.resolve(request.alias(matched.entry['app-js'].specifier).rehome(matched.entry['app-js'].fromFile));
|
1031
1007
|
if (foundAppJS.type !== 'found') {
|
1032
1008
|
throw new Error(`${matched.entry['app-js'].fromPackageName} declared ${inEngineSpecifier} in packageJSON.ember-addon.app-js, but that module does not exist`);
|
1033
1009
|
}
|
1034
1010
|
let { names } = (0, describe_exports_1.describeExports)((0, fs_1.readFileSync)(foundAppJS.filename, 'utf8'), { configFile: false });
|
1035
|
-
return request.virtualize(
|
1011
|
+
return request.virtualize(fastbootSwitch(matched.matched, (0, path_1.resolve)(engine.root, 'package.json'), names));
|
1036
1012
|
}
|
1037
1013
|
}
|
1038
1014
|
// check whether the given file with the given owningPackage is an addon's
|
@@ -1123,4 +1099,27 @@ function engineRelativeName(pkg, filename) {
|
|
1123
1099
|
return '.' + outsideName.slice(pkg.name.length);
|
1124
1100
|
}
|
1125
1101
|
}
|
1102
|
+
const fastbootSwitchSuffix = '/embroider_fastboot_switch';
|
1103
|
+
function fastbootSwitch(specifier, fromFile, names) {
|
1104
|
+
let filename = `${(0, path_1.resolve)((0, path_1.dirname)(fromFile), specifier)}${fastbootSwitchSuffix}`;
|
1105
|
+
let virtualSpecifier;
|
1106
|
+
if (names.size > 0) {
|
1107
|
+
virtualSpecifier = `${filename}?names=${[...names].join(',')}`;
|
1108
|
+
}
|
1109
|
+
else {
|
1110
|
+
virtualSpecifier = filename;
|
1111
|
+
}
|
1112
|
+
return {
|
1113
|
+
type: 'fastboot-switch',
|
1114
|
+
specifier: virtualSpecifier,
|
1115
|
+
names,
|
1116
|
+
hasDefaultExport: 'x',
|
1117
|
+
};
|
1118
|
+
}
|
1119
|
+
function decodeFastbootSwitch(filename) {
|
1120
|
+
let index = filename.indexOf(fastbootSwitchSuffix);
|
1121
|
+
if (index >= 0) {
|
1122
|
+
return { filename: filename.slice(0, index) };
|
1123
|
+
}
|
1124
|
+
}
|
1126
1125
|
//# sourceMappingURL=module-resolver.js.map
|