@embroider/core 3.4.3-unstable.efd9117 → 3.4.3
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/LICENSE +21 -0
- package/package.json +11 -12
- package/src/app-files.d.ts +1 -1
- package/src/app-files.js +1 -1
- package/src/app-files.js.map +1 -1
- package/src/module-resolver.d.ts +3 -5
- package/src/module-resolver.js +132 -126
- package/src/module-resolver.js.map +1 -1
- package/src/node-resolve.d.ts +0 -26
- package/src/node-resolve.js +0 -105
- package/src/node-resolve.js.map +0 -1
package/src/module-resolver.js
CHANGED
@@ -15,47 +15,58 @@ const path_1 = require("path");
|
|
15
15
|
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
|
-
const
|
18
|
+
const resolve_1 = __importDefault(require("resolve"));
|
19
19
|
const virtual_content_1 = require("./virtual-content");
|
20
20
|
const typescript_memoize_1 = require("typescript-memoize");
|
21
21
|
const describe_exports_1 = require("./describe-exports");
|
22
22
|
const fs_1 = require("fs");
|
23
|
-
const node_resolve_1 = require("./node-resolve");
|
24
23
|
const debug = (0, debug_1.default)('embroider:resolver');
|
25
|
-
// Using a formatter makes this work lazy so nothing happens when we aren't
|
26
|
-
// logging. It is unfortunate that formatters are a globally mutable config and
|
27
|
-
// you can only use single character names, but oh well.
|
28
|
-
debug_1.default.formatters.p = (s) => {
|
29
|
-
let cwd = process.cwd();
|
30
|
-
if (s.startsWith(cwd)) {
|
31
|
-
return s.slice(cwd.length + 1);
|
32
|
-
}
|
33
|
-
return s;
|
34
|
-
};
|
35
24
|
function logTransition(reason, before, after = before) {
|
36
25
|
if (after.isVirtual) {
|
37
|
-
debug(`
|
26
|
+
debug(`virtualized %s in %s because %s`, before.specifier, before.fromFile, reason);
|
38
27
|
}
|
39
28
|
else if (before.specifier !== after.specifier) {
|
40
29
|
if (before.fromFile !== after.fromFile) {
|
41
|
-
debug(`
|
30
|
+
debug(`aliased and rehomed: %s to %s, from %s to %s because %s`, before.specifier, after.specifier, before.fromFile, after.fromFile, reason);
|
42
31
|
}
|
43
32
|
else {
|
44
|
-
debug(`
|
33
|
+
debug(`aliased: %s to %s in %s because`, before.specifier, after.specifier, before.fromFile, reason);
|
45
34
|
}
|
46
35
|
}
|
47
36
|
else if (before.fromFile !== after.fromFile) {
|
48
|
-
debug(`
|
49
|
-
}
|
50
|
-
else if (after.isNotFound) {
|
51
|
-
debug(`[%s:not-found] %s because %s\n in %p`, before.debugType, before.specifier, reason, before.fromFile);
|
37
|
+
debug(`rehomed: %s from %s to %s because`, before.specifier, before.fromFile, after.fromFile, reason);
|
52
38
|
}
|
53
39
|
else {
|
54
|
-
debug(`
|
40
|
+
debug(`unchanged: %s in %s because %s`, before.specifier, before.fromFile, reason);
|
55
41
|
}
|
56
42
|
return after;
|
57
43
|
}
|
58
44
|
const compatPattern = /#embroider_compat\/(?<type>[^\/]+)\/(?<rest>.*)/;
|
45
|
+
class NodeModuleRequest {
|
46
|
+
constructor(specifier, fromFile, isVirtual, meta) {
|
47
|
+
this.specifier = specifier;
|
48
|
+
this.fromFile = fromFile;
|
49
|
+
this.isVirtual = isVirtual;
|
50
|
+
this.meta = meta;
|
51
|
+
}
|
52
|
+
alias(specifier) {
|
53
|
+
return new NodeModuleRequest(specifier, this.fromFile, false, this.meta);
|
54
|
+
}
|
55
|
+
rehome(fromFile) {
|
56
|
+
if (this.fromFile === fromFile) {
|
57
|
+
return this;
|
58
|
+
}
|
59
|
+
else {
|
60
|
+
return new NodeModuleRequest(this.specifier, fromFile, false, this.meta);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
virtualize(filename) {
|
64
|
+
return new NodeModuleRequest(filename, this.fromFile, true, this.meta);
|
65
|
+
}
|
66
|
+
withMeta(meta) {
|
67
|
+
return new NodeModuleRequest(this.specifier, this.fromFile, this.isVirtual, meta);
|
68
|
+
}
|
69
|
+
}
|
59
70
|
class Resolver {
|
60
71
|
constructor(options) {
|
61
72
|
this.options = options;
|
@@ -68,9 +79,6 @@ class Resolver {
|
|
68
79
|
// why we need to know about it.
|
69
80
|
return logTransition('early exit', request);
|
70
81
|
}
|
71
|
-
if (request.specifier === 'require') {
|
72
|
-
return this.external('early require', request, request.specifier);
|
73
|
-
}
|
74
82
|
request = this.handleFastbootSwitch(request);
|
75
83
|
request = this.handleGlobalsCompat(request);
|
76
84
|
request = this.handleImplicitModules(request);
|
@@ -132,10 +140,10 @@ class Resolver {
|
|
132
140
|
if (nextRequest.fromFile === request.fromFile && nextRequest.specifier === request.specifier) {
|
133
141
|
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
142
|
}
|
135
|
-
if (nextRequest.isVirtual
|
136
|
-
// virtual
|
137
|
-
//
|
138
|
-
//
|
143
|
+
if (nextRequest.isVirtual) {
|
144
|
+
// virtual requests are terminal, there is no more beforeResolve or
|
145
|
+
// fallbackResolve around them. The defaultResolve is expected to know how
|
146
|
+
// to implement them.
|
139
147
|
return yield defaultResolve(nextRequest);
|
140
148
|
}
|
141
149
|
return yield* this.internalResolve(nextRequest, defaultResolve);
|
@@ -144,7 +152,39 @@ class Resolver {
|
|
144
152
|
// top. This is a convenience method for calling resolveSync with the
|
145
153
|
// defaultResolve already configured to be "do the normal node thing".
|
146
154
|
nodeResolve(specifier, fromFile) {
|
147
|
-
|
155
|
+
let resolution = this.resolveSync(new NodeModuleRequest(specifier, fromFile, false, undefined), request => {
|
156
|
+
if (request.isVirtual) {
|
157
|
+
return {
|
158
|
+
type: 'found',
|
159
|
+
result: {
|
160
|
+
type: 'virtual',
|
161
|
+
content: (0, virtual_content_1.virtualContent)(request.specifier, this),
|
162
|
+
filename: request.specifier,
|
163
|
+
},
|
164
|
+
};
|
165
|
+
}
|
166
|
+
try {
|
167
|
+
let filename = resolve_1.default.sync(request.specifier, {
|
168
|
+
basedir: (0, path_1.dirname)(request.fromFile),
|
169
|
+
extensions: this.options.resolvableExtensions,
|
170
|
+
});
|
171
|
+
return { type: 'found', result: { type: 'real', filename } };
|
172
|
+
}
|
173
|
+
catch (err) {
|
174
|
+
if (err.code !== 'MODULE_NOT_FOUND') {
|
175
|
+
throw err;
|
176
|
+
}
|
177
|
+
return { type: 'not_found', err };
|
178
|
+
}
|
179
|
+
});
|
180
|
+
switch (resolution.type) {
|
181
|
+
case 'not_found':
|
182
|
+
return resolution;
|
183
|
+
case 'found':
|
184
|
+
return resolution.result;
|
185
|
+
default:
|
186
|
+
throw (0, assert_never_1.default)(resolution);
|
187
|
+
}
|
148
188
|
}
|
149
189
|
get packageCache() {
|
150
190
|
return shared_internals_2.RewrittenPackageCache.shared('embroider', this.options.appRoot);
|
@@ -235,7 +275,7 @@ class Resolver {
|
|
235
275
|
}
|
236
276
|
let entry = (_a = this.getEntryFromMergeMap(rel, pkg.root)) === null || _a === void 0 ? void 0 : _a.entry;
|
237
277
|
if ((entry === null || entry === void 0 ? void 0 : entry.type) === 'both') {
|
238
|
-
return logTransition('matched addon entry', request, request.alias(entry[section].
|
278
|
+
return logTransition('matched addon entry', request, request.alias(entry[section].localPath).rehome((0, path_1.resolve)(entry[section].packageRoot, 'package.json')));
|
239
279
|
}
|
240
280
|
}
|
241
281
|
return logTransition('failed to match in fastboot switch', request);
|
@@ -374,10 +414,10 @@ class Resolver {
|
|
374
414
|
parseGlobalPath(path, inEngine) {
|
375
415
|
let parts = path.split('@');
|
376
416
|
if (parts.length > 1 && parts[0].length > 0) {
|
377
|
-
return { packageName: parts[0], memberName: parts[1], from: (0, path_1.resolve)(inEngine.root, '
|
417
|
+
return { packageName: parts[0], memberName: parts[1], from: (0, path_1.resolve)(inEngine.root, 'pacakge.json') };
|
378
418
|
}
|
379
419
|
else {
|
380
|
-
return { packageName: inEngine.packageName, memberName: path, from: (0, path_1.resolve)(inEngine.root, '
|
420
|
+
return { packageName: inEngine.packageName, memberName: path, from: (0, path_1.resolve)(inEngine.root, 'pacakge.json') };
|
381
421
|
}
|
382
422
|
}
|
383
423
|
engineConfig(packageName) {
|
@@ -409,8 +449,8 @@ class Resolver {
|
|
409
449
|
engineModules.set(inEngineName, {
|
410
450
|
type: 'app-only',
|
411
451
|
'app-js': {
|
412
|
-
|
413
|
-
|
452
|
+
localPath: inAddonName,
|
453
|
+
packageRoot: addon.root,
|
414
454
|
fromPackageName: addon.name,
|
415
455
|
},
|
416
456
|
});
|
@@ -423,8 +463,8 @@ class Resolver {
|
|
423
463
|
engineModules.set(inEngineName, {
|
424
464
|
type: 'both',
|
425
465
|
'app-js': {
|
426
|
-
|
427
|
-
|
466
|
+
localPath: inAddonName,
|
467
|
+
packageRoot: addon.root,
|
428
468
|
fromPackageName: addon.name,
|
429
469
|
},
|
430
470
|
'fastboot-js': prevEntry['fastboot-js'],
|
@@ -448,8 +488,8 @@ class Resolver {
|
|
448
488
|
engineModules.set(inEngineName, {
|
449
489
|
type: 'fastboot-only',
|
450
490
|
'fastboot-js': {
|
451
|
-
|
452
|
-
|
491
|
+
localPath: inAddonName,
|
492
|
+
packageRoot: addon.root,
|
453
493
|
fromPackageName: addon.name,
|
454
494
|
},
|
455
495
|
});
|
@@ -462,8 +502,8 @@ class Resolver {
|
|
462
502
|
engineModules.set(inEngineName, {
|
463
503
|
type: 'both',
|
464
504
|
'fastboot-js': {
|
465
|
-
|
466
|
-
|
505
|
+
localPath: inAddonName,
|
506
|
+
packageRoot: addon.root,
|
467
507
|
fromPackageName: addon.name,
|
468
508
|
},
|
469
509
|
'app-js': prevEntry['app-js'],
|
@@ -485,7 +525,7 @@ class Resolver {
|
|
485
525
|
return owningEngine;
|
486
526
|
}
|
487
527
|
handleRewrittenPackages(request) {
|
488
|
-
if (request.isVirtual
|
528
|
+
if (request.isVirtual) {
|
489
529
|
return request;
|
490
530
|
}
|
491
531
|
let requestingPkg = this.packageCache.ownerOfFile(request.fromFile);
|
@@ -504,6 +544,10 @@ class Resolver {
|
|
504
544
|
targetPkg = this.packageCache.resolve(packageName, requestingPkg);
|
505
545
|
}
|
506
546
|
catch (err) {
|
547
|
+
// this is not the place to report resolution failures. If the thing
|
548
|
+
// doesn't resolve, we're just not interested in redirecting it for
|
549
|
+
// backward-compat, that's all. The rest of the system will take care of
|
550
|
+
// reporting a failure to resolve (or handling it a different way)
|
507
551
|
if (err.code !== 'MODULE_NOT_FOUND') {
|
508
552
|
throw err;
|
509
553
|
}
|
@@ -519,26 +563,14 @@ class Resolver {
|
|
519
563
|
return logTransition('request targets a moved package', request, this.resolveWithinMovedPackage(request, targetPkg));
|
520
564
|
}
|
521
565
|
else if (originalRequestingPkg !== requestingPkg) {
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
return logTransition('outbound request from moved package', request, request
|
526
|
-
// setting meta here because if this fails, we want the fallback
|
527
|
-
// logic to revert our rehome and continue from the *moved* package.
|
528
|
-
.withMeta({ originalFromFile: request.fromFile })
|
529
|
-
.rehome((0, path_1.resolve)(originalRequestingPkg.root, 'package.json')));
|
530
|
-
}
|
531
|
-
else {
|
532
|
-
// requesting package was moved and we failed to find its target. We
|
533
|
-
// can't let that accidentally succeed in the defaultResolve because we
|
534
|
-
// could escape the moved package system.
|
535
|
-
return logTransition('missing outbound request from moved package', request, request.notFound());
|
536
|
-
}
|
566
|
+
// in this case, the requesting package is moved but its destination is
|
567
|
+
// not, so we need to rehome the request back to the original location.
|
568
|
+
return logTransition('outbound request from moved package', request, request.withMeta({ wasMovedTo: request.fromFile }).rehome((0, path_1.resolve)(originalRequestingPkg.root, 'package.json')));
|
537
569
|
}
|
538
570
|
return request;
|
539
571
|
}
|
540
572
|
handleRenaming(request) {
|
541
|
-
if (request.isVirtual
|
573
|
+
if (request.isVirtual) {
|
542
574
|
return request;
|
543
575
|
}
|
544
576
|
let packageName = (0, shared_internals_1.packageName)(request.specifier);
|
@@ -576,10 +608,7 @@ class Resolver {
|
|
576
608
|
// packages get this help, v2 packages are natively supposed to make their
|
577
609
|
// own modules resolvable, and we want to push them all to do that
|
578
610
|
// correctly.
|
579
|
-
|
580
|
-
// "my-package" -> "./" (this can't be just "." because node's require.resolve doesn't reliable support that)
|
581
|
-
let selfImportPath = request.specifier === pkg.name ? './' : request.specifier.replace(pkg.name, '.');
|
582
|
-
return logTransition(`v1 self-import`, request, request.alias(selfImportPath).rehome((0, path_1.resolve)(pkg.root, 'package.json')));
|
611
|
+
return logTransition(`v1 self-import`, request, request.alias(request.specifier.replace(pkg.name, '.')).rehome((0, path_1.resolve)(pkg.root, 'package.json')));
|
583
612
|
}
|
584
613
|
return request;
|
585
614
|
}
|
@@ -588,17 +617,16 @@ class Resolver {
|
|
588
617
|
if (pkg.name.startsWith('@')) {
|
589
618
|
levels.push('..');
|
590
619
|
}
|
591
|
-
let originalFromFile = request.fromFile;
|
592
620
|
let newRequest = request.rehome((0, path_1.resolve)(pkg.root, ...levels, 'moved-package-target.js'));
|
593
621
|
if (newRequest === request) {
|
594
622
|
return request;
|
595
623
|
}
|
596
|
-
|
597
|
-
|
598
|
-
|
624
|
+
return newRequest.withMeta({
|
625
|
+
resolvedWithinPackage: pkg.root,
|
626
|
+
});
|
599
627
|
}
|
600
628
|
preHandleExternal(request) {
|
601
|
-
if (request.isVirtual
|
629
|
+
if (request.isVirtual) {
|
602
630
|
return request;
|
603
631
|
}
|
604
632
|
let { specifier, fromFile } = request;
|
@@ -631,15 +659,7 @@ class Resolver {
|
|
631
659
|
// engine
|
632
660
|
let logicalLocation = this.reverseSearchAppTree(pkg, request.fromFile);
|
633
661
|
if (logicalLocation) {
|
634
|
-
return logTransition('beforeResolve: relative import in app-js', request, request
|
635
|
-
.alias('./' + path_1.posix.join((0, path_1.dirname)(logicalLocation.inAppName), request.specifier))
|
636
|
-
// it's important that we're rehoming this to the root of the engine
|
637
|
-
// (which we know really exists), and not to a subdir like
|
638
|
-
// logicalLocation.inAppName (which might not physically exist),
|
639
|
-
// because some environments (including node's require.resolve) will
|
640
|
-
// refuse to do resolution from a notional path that doesn't
|
641
|
-
// physically exist.
|
642
|
-
.rehome((0, path_1.resolve)(logicalLocation.owningEngine.root, 'package.json')));
|
662
|
+
return logTransition('beforeResolve: relative import in app-js', request, request.rehome((0, path_1.resolve)(logicalLocation.owningEngine.root, logicalLocation.inAppName)));
|
643
663
|
}
|
644
664
|
return request;
|
645
665
|
}
|
@@ -654,11 +674,11 @@ class Resolver {
|
|
654
674
|
if (shared_internals_1.emberVirtualPeerDeps.has(packageName) && !pkg.hasDependency(packageName)) {
|
655
675
|
// addons (whether auto-upgraded or not) may use the app's
|
656
676
|
// emberVirtualPeerDeps, like "@glimmer/component" etc.
|
657
|
-
|
658
|
-
|
659
|
-
throw new Error(`${pkg.name} is trying to import the emberVirtualPeerDep "${packageName}", but it seems to be missing`);
|
677
|
+
if (!this.options.activeAddons[packageName]) {
|
678
|
+
throw new Error(`${pkg.name} is trying to import the app's ${packageName} package, but it seems to be missing`);
|
660
679
|
}
|
661
|
-
|
680
|
+
let newHome = (0, path_1.resolve)(this.packageCache.maybeMoved(this.packageCache.get(this.options.appRoot)).root, 'package.json');
|
681
|
+
return logTransition(`emberVirtualPeerDeps in v2 addon`, request, request.rehome(newHome));
|
662
682
|
}
|
663
683
|
// if this file is part of an addon's app-js, it's really the logical
|
664
684
|
// package to which it belongs (normally the app) that affects some policy
|
@@ -689,22 +709,6 @@ class Resolver {
|
|
689
709
|
}
|
690
710
|
return request;
|
691
711
|
}
|
692
|
-
locateActiveAddon(packageName) {
|
693
|
-
if (packageName === this.options.modulePrefix) {
|
694
|
-
// the app itself is something that addon's can classically resolve if they know it's name.
|
695
|
-
return {
|
696
|
-
root: this.options.appRoot,
|
697
|
-
canResolveFromFile: (0, path_1.resolve)(this.packageCache.maybeMoved(this.packageCache.get(this.options.appRoot)).root, 'package.json'),
|
698
|
-
};
|
699
|
-
}
|
700
|
-
for (let engine of this.options.engines) {
|
701
|
-
for (let addon of engine.activeAddons) {
|
702
|
-
if (addon.name === packageName) {
|
703
|
-
return addon;
|
704
|
-
}
|
705
|
-
}
|
706
|
-
}
|
707
|
-
}
|
708
712
|
external(label, request, specifier) {
|
709
713
|
if (this.options.amdCompatibility === 'cjs') {
|
710
714
|
let filename = (0, virtual_content_1.virtualExternalCJSModule)(specifier);
|
@@ -738,7 +742,7 @@ class Resolver {
|
|
738
742
|
}
|
739
743
|
}
|
740
744
|
fallbackResolve(request) {
|
741
|
-
var _a;
|
745
|
+
var _a, _b, _c;
|
742
746
|
if (request.specifier === '@embroider/macros') {
|
743
747
|
// the macros package is always handled directly within babel (not
|
744
748
|
// necessarily as a real resolvable package), so we should not mess with it.
|
@@ -746,7 +750,8 @@ class Resolver {
|
|
746
750
|
// why we need to know about it.
|
747
751
|
return logTransition('fallback early exit', request);
|
748
752
|
}
|
749
|
-
|
753
|
+
let { specifier, fromFile } = request;
|
754
|
+
if (compatPattern.test(specifier)) {
|
750
755
|
// Some kinds of compat requests get rewritten into other things
|
751
756
|
// deterministically. For example, "#embroider_compat/helpers/whatever"
|
752
757
|
// means only "the-current-engine/helpers/whatever", and if that doesn't
|
@@ -762,33 +767,39 @@ class Resolver {
|
|
762
767
|
// here.
|
763
768
|
return request;
|
764
769
|
}
|
765
|
-
|
770
|
+
if (fromFile.endsWith('moved-package-target.js')) {
|
771
|
+
if (!((_a = request.meta) === null || _a === void 0 ? void 0 : _a.resolvedWithinPackage)) {
|
772
|
+
throw new Error(`bug: embroider resolver's meta is not propagating`);
|
773
|
+
}
|
774
|
+
fromFile = (0, path_1.resolve)((_b = request.meta) === null || _b === void 0 ? void 0 : _b.resolvedWithinPackage, 'package.json');
|
775
|
+
}
|
776
|
+
let pkg = this.packageCache.ownerOfFile(fromFile);
|
766
777
|
if (!pkg) {
|
767
778
|
return logTransition('no identifiable owningPackage', request);
|
768
779
|
}
|
769
|
-
//
|
770
|
-
//
|
771
|
-
//
|
780
|
+
// if we rehomed this request to its un-rewritten location in order to try
|
781
|
+
// to do the defaultResolve from there, now we refer back to the rewritten
|
782
|
+
// location because that's what we want to use when asking things like
|
783
|
+
// isV2Ember()
|
772
784
|
let movedPkg = this.packageCache.maybeMoved(pkg);
|
773
785
|
if (movedPkg !== pkg) {
|
774
|
-
|
775
|
-
if (typeof originalFromFile !== 'string') {
|
786
|
+
if (!((_c = request.meta) === null || _c === void 0 ? void 0 : _c.wasMovedTo)) {
|
776
787
|
throw new Error(`bug: embroider resolver's meta is not propagating`);
|
777
788
|
}
|
778
|
-
|
789
|
+
fromFile = request.meta.wasMovedTo;
|
779
790
|
pkg = movedPkg;
|
780
791
|
}
|
781
792
|
if (!pkg.isV2Ember()) {
|
782
793
|
return logTransition('fallbackResolve: not in an ember package', request);
|
783
794
|
}
|
784
|
-
let packageName = (0, shared_internals_1.packageName)(
|
795
|
+
let packageName = (0, shared_internals_1.packageName)(specifier);
|
785
796
|
if (!packageName) {
|
786
797
|
// this is a relative import
|
787
798
|
let withinEngine = this.engineConfig(pkg.name);
|
788
799
|
if (withinEngine) {
|
789
800
|
// it's a relative import inside an engine (which also means app), which
|
790
801
|
// means we may need to satisfy the request via app tree merging.
|
791
|
-
let appJSMatch = this.searchAppTree(request, withinEngine, (0, shared_internals_2.explicitRelative)(pkg.root, (0, path_1.resolve)((0, path_1.dirname)(
|
802
|
+
let appJSMatch = this.searchAppTree(request, withinEngine, (0, shared_internals_2.explicitRelative)(pkg.root, (0, path_1.resolve)((0, path_1.dirname)(fromFile), specifier)));
|
792
803
|
if (appJSMatch) {
|
793
804
|
return logTransition('fallbackResolve: relative appJsMatch', request, appJSMatch);
|
794
805
|
}
|
@@ -802,32 +813,23 @@ class Resolver {
|
|
802
813
|
}
|
803
814
|
}
|
804
815
|
// auto-upgraded packages can fall back to the set of known active addons
|
805
|
-
if (pkg.meta['auto-upgraded']) {
|
806
|
-
|
807
|
-
if (
|
808
|
-
|
809
|
-
if (rehomed !== request) {
|
810
|
-
return logTransition(`activeAddons`, request, rehomed);
|
811
|
-
}
|
816
|
+
if (pkg.meta['auto-upgraded'] && this.options.activeAddons[packageName]) {
|
817
|
+
const rehomed = this.resolveWithinMovedPackage(request, this.packageCache.get(this.options.activeAddons[packageName]));
|
818
|
+
if (rehomed !== request) {
|
819
|
+
return logTransition(`activeAddons`, request, rehomed);
|
812
820
|
}
|
813
821
|
}
|
814
|
-
let logicalLocation = this.reverseSearchAppTree(pkg,
|
822
|
+
let logicalLocation = this.reverseSearchAppTree(pkg, fromFile);
|
815
823
|
if (logicalLocation) {
|
816
824
|
// the requesting file is in an addon's appTree. We didn't succeed in
|
817
825
|
// resolving this (non-relative) request from inside the actual addon, so
|
818
826
|
// next try to resolve it from the corresponding logical location in the
|
819
827
|
// app.
|
820
|
-
return logTransition('fallbackResolve: retry from logical home of app-js file', request,
|
821
|
-
// it might look more precise to rehome into logicalLocation.inAppName
|
822
|
-
// rather than package.json. But that logical location may not actually
|
823
|
-
// exist, and some systems (including node's require.resolve) will be
|
824
|
-
// mad about trying to resolve from notional paths that don't really
|
825
|
-
// exist.
|
826
|
-
request.rehome((0, path_1.resolve)(logicalLocation.owningEngine.root, 'package.json')));
|
828
|
+
return logTransition('fallbackResolve: retry from logical home of app-js file', request, request.rehome((0, path_1.resolve)(logicalLocation.owningEngine.root, logicalLocation.inAppName)));
|
827
829
|
}
|
828
830
|
let targetingEngine = this.engineConfig(packageName);
|
829
831
|
if (targetingEngine) {
|
830
|
-
let appJSMatch = this.searchAppTree(request, targetingEngine,
|
832
|
+
let appJSMatch = this.searchAppTree(request, targetingEngine, specifier.replace(packageName, '.'));
|
831
833
|
if (appJSMatch) {
|
832
834
|
return logTransition('fallbackResolve: non-relative appJsMatch', request, appJSMatch);
|
833
835
|
}
|
@@ -837,14 +839,14 @@ class Resolver {
|
|
837
839
|
// runtime. Native v2 packages can only get this behavior in the
|
838
840
|
// isExplicitlyExternal case above because they need to explicitly ask for
|
839
841
|
// externals.
|
840
|
-
return this.external('v1 catch-all fallback', request,
|
842
|
+
return this.external('v1 catch-all fallback', request, specifier);
|
841
843
|
}
|
842
844
|
else {
|
843
845
|
// native v2 packages don't automatically externalize *everything* the way
|
844
846
|
// auto-upgraded packages do, but they still externalize known and approved
|
845
847
|
// ember virtual packages (like @ember/component)
|
846
848
|
if (shared_internals_1.emberVirtualPackages.has(packageName)) {
|
847
|
-
return this.external('emberVirtualPackages', request,
|
849
|
+
return this.external('emberVirtualPackages', request, specifier);
|
848
850
|
}
|
849
851
|
}
|
850
852
|
// this is falling through with the original specifier which was
|
@@ -877,11 +879,15 @@ class Resolver {
|
|
877
879
|
case undefined:
|
878
880
|
return undefined;
|
879
881
|
case 'app-only':
|
880
|
-
return request
|
882
|
+
return request
|
883
|
+
.alias(matched.entry['app-js'].localPath)
|
884
|
+
.rehome((0, path_1.resolve)(matched.entry['app-js'].packageRoot, 'package.json'));
|
881
885
|
case 'fastboot-only':
|
882
|
-
return request
|
886
|
+
return request
|
887
|
+
.alias(matched.entry['fastboot-js'].localPath)
|
888
|
+
.rehome((0, path_1.resolve)(matched.entry['fastboot-js'].packageRoot, 'package.json'));
|
883
889
|
case 'both':
|
884
|
-
let foundAppJS = this.nodeResolve(matched.entry['app-js'].
|
890
|
+
let foundAppJS = this.nodeResolve(matched.entry['app-js'].localPath, (0, path_1.resolve)(matched.entry['app-js'].packageRoot, 'package.json'));
|
885
891
|
if (foundAppJS.type !== 'real') {
|
886
892
|
throw new Error(`${matched.entry['app-js'].fromPackageName} declared ${inEngineSpecifier} in packageJSON.ember-addon.app-js, but that module does not exist`);
|
887
893
|
}
|