@embroider/core 4.4.7 → 4.6.0
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/dist/src/app-files.js +8 -0
- package/dist/src/app-files.js.map +1 -1
- package/dist/src/html-entrypoint.js +10 -5
- package/dist/src/html-entrypoint.js.map +1 -1
- package/dist/src/html-placeholder.js +4 -1
- package/dist/src/html-placeholder.js.map +1 -1
- package/dist/src/measure-concat.js +4 -1
- package/dist/src/measure-concat.js.map +1 -1
- package/dist/src/module-request.js +25 -38
- package/dist/src/module-request.js.map +1 -1
- package/dist/src/module-resolver-options.js +2 -3
- package/dist/src/module-resolver-options.js.map +1 -1
- package/dist/src/module-resolver.d.ts +1 -0
- package/dist/src/module-resolver.js +48 -44
- package/dist/src/module-resolver.js.map +1 -1
- package/dist/src/node-resolve.js +13 -12
- package/dist/src/node-resolve.js.map +1 -1
- package/dist/src/options.js +3 -3
- package/dist/src/options.js.map +1 -1
- package/dist/src/portable.js +1 -0
- package/dist/src/portable.js.map +1 -1
- package/dist/src/resolver-loader.js +15 -29
- package/dist/src/resolver-loader.js.map +1 -1
- package/dist/src/virtual-content.js +1 -1
- package/dist/src/virtual-content.js.map +1 -1
- package/dist/src/virtual-entrypoint.js +2 -3
- package/dist/src/virtual-entrypoint.js.map +1 -1
- package/dist/src/virtual-route-entrypoint.js +1 -1
- package/dist/src/virtual-route-entrypoint.js.map +1 -1
- package/dist/src/wait-for-trees.js +2 -0
- package/dist/src/wait-for-trees.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -56,6 +56,7 @@ function logTransition(reason, before, after = before) {
|
|
|
56
56
|
}
|
|
57
57
|
const compatPattern = /@embroider\/virtual\/(?<type>[^\/]+)\/(?<rest>.*)/;
|
|
58
58
|
class Resolver {
|
|
59
|
+
options;
|
|
59
60
|
constructor(options) {
|
|
60
61
|
this.options = options;
|
|
61
62
|
}
|
|
@@ -211,7 +212,6 @@ class Resolver {
|
|
|
211
212
|
return request;
|
|
212
213
|
}
|
|
213
214
|
handleFastbootSwitch(request) {
|
|
214
|
-
var _a;
|
|
215
215
|
if (request.resolvedTo) {
|
|
216
216
|
return request;
|
|
217
217
|
}
|
|
@@ -251,8 +251,8 @@ class Resolver {
|
|
|
251
251
|
request.alias((0, shared_internals_2.explicitRelative)((0, path_1.dirname)(request.fromFile), (0, path_1.resolve)(pkg.root, targetFile))));
|
|
252
252
|
}
|
|
253
253
|
}
|
|
254
|
-
let entry =
|
|
255
|
-
if (
|
|
254
|
+
let entry = this.getEntryFromMergeMap(rel, pkg.root)?.entry;
|
|
255
|
+
if (entry?.type === 'both') {
|
|
256
256
|
return logTransition('matched addon entry', request, request.alias(entry[section].specifier).rehome(entry[section].fromFile));
|
|
257
257
|
}
|
|
258
258
|
}
|
|
@@ -273,7 +273,7 @@ class Resolver {
|
|
|
273
273
|
}
|
|
274
274
|
filename = filename.slice(0, -1);
|
|
275
275
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
|
276
|
-
if (!
|
|
276
|
+
if (!pkg?.isV2Ember()) {
|
|
277
277
|
throw new Error(`bug: found implicit modules import in non-ember package at ${request.fromFile}`);
|
|
278
278
|
}
|
|
279
279
|
let type = `implicit-${variant}modules`;
|
|
@@ -289,7 +289,6 @@ class Resolver {
|
|
|
289
289
|
return request;
|
|
290
290
|
}
|
|
291
291
|
handleEntrypoint(request) {
|
|
292
|
-
var _a;
|
|
293
292
|
if (request.resolvedTo) {
|
|
294
293
|
return request;
|
|
295
294
|
}
|
|
@@ -299,7 +298,7 @@ class Resolver {
|
|
|
299
298
|
return request;
|
|
300
299
|
}
|
|
301
300
|
const requestingPkg = this.packageCache.ownerOfFile(request.fromFile);
|
|
302
|
-
if (!
|
|
301
|
+
if (!requestingPkg?.isV2Ember()) {
|
|
303
302
|
throw new Error(`bug: found entrypoint import in non-ember package at ${request.fromFile}`);
|
|
304
303
|
}
|
|
305
304
|
let pkg;
|
|
@@ -314,7 +313,7 @@ class Resolver {
|
|
|
314
313
|
browser: true,
|
|
315
314
|
conditions: ['default', 'imports'],
|
|
316
315
|
});
|
|
317
|
-
let specifier = (0, path_1.resolve)(pkg.root,
|
|
316
|
+
let specifier = (0, path_1.resolve)(pkg.root, matched?.[0] ?? '-embroider-entrypoint.js');
|
|
318
317
|
return logTransition('entrypoint', request, request.virtualize({
|
|
319
318
|
type: 'entrypoint',
|
|
320
319
|
specifier,
|
|
@@ -331,7 +330,7 @@ class Resolver {
|
|
|
331
330
|
}
|
|
332
331
|
let routeName = request.specifier.slice(publicPrefix.length);
|
|
333
332
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
|
334
|
-
if (!
|
|
333
|
+
if (!pkg?.isV2Ember()) {
|
|
335
334
|
throw new Error(`bug: found entrypoint import in non-ember package at ${request.fromFile}`);
|
|
336
335
|
}
|
|
337
336
|
let matched = (0, resolve_exports_1.exports)(pkg.packageJSON, '-embroider-route-entrypoint.js', {
|
|
@@ -347,7 +346,7 @@ class Resolver {
|
|
|
347
346
|
return request;
|
|
348
347
|
}
|
|
349
348
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
|
350
|
-
if (
|
|
349
|
+
if (pkg?.root !== this.options.engines[0].root) {
|
|
351
350
|
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.`);
|
|
352
351
|
}
|
|
353
352
|
return logTransition('test-support', request, request.virtualize({ type: 'test-support-js', specifier: (0, path_1.resolve)(pkg.root, '-embroider-test-support.js') }));
|
|
@@ -357,7 +356,7 @@ class Resolver {
|
|
|
357
356
|
return request;
|
|
358
357
|
}
|
|
359
358
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
|
360
|
-
if (
|
|
359
|
+
if (pkg?.root !== this.options.engines[0].root) {
|
|
361
360
|
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.`);
|
|
362
361
|
}
|
|
363
362
|
return logTransition('test-support-styles', request, request.virtualize({
|
|
@@ -375,7 +374,7 @@ class Resolver {
|
|
|
375
374
|
}
|
|
376
375
|
let { type, rest } = match.groups;
|
|
377
376
|
let fromPkg = this.packageCache.ownerOfFile(request.fromFile);
|
|
378
|
-
if (!
|
|
377
|
+
if (!fromPkg?.isV2Ember()) {
|
|
379
378
|
return request;
|
|
380
379
|
}
|
|
381
380
|
let engine = this.owningEngine(fromPkg);
|
|
@@ -399,7 +398,7 @@ class Resolver {
|
|
|
399
398
|
return request;
|
|
400
399
|
}
|
|
401
400
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
|
402
|
-
if (!pkg || !this.options.engines.some(e => e.root ===
|
|
401
|
+
if (!pkg || !this.options.engines.some(e => e.root === pkg?.root)) {
|
|
403
402
|
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.`);
|
|
404
403
|
}
|
|
405
404
|
return logTransition('vendor-styles', request, request.virtualize({ type: 'vendor-css', specifier: (0, path_1.resolve)(pkg.root, '-embroider-vendor-styles.css') }));
|
|
@@ -409,7 +408,6 @@ class Resolver {
|
|
|
409
408
|
return logTransition('resolveHelper', request, request.alias(`${target.packageName}/helpers/${target.memberName}`).rehome((0, path_1.resolve)(inEngine.root, 'package.json')));
|
|
410
409
|
}
|
|
411
410
|
async resolveComponent(path, inEngine, request) {
|
|
412
|
-
var _a, _b;
|
|
413
411
|
let target = this.parseGlobalPath(path, inEngine);
|
|
414
412
|
let hbsModule = null;
|
|
415
413
|
let jsModule = null;
|
|
@@ -441,9 +439,9 @@ class Resolver {
|
|
|
441
439
|
return logTransition(`resolveComponent found legacy HBS`, request, request.virtualize({
|
|
442
440
|
type: 'component-pair',
|
|
443
441
|
hbsModule: hbsModule.filename,
|
|
444
|
-
jsModule:
|
|
442
|
+
jsModule: jsModule?.filename ?? null,
|
|
445
443
|
debugName: (0, path_1.basename)(hbsModule.filename).replace(/\.(js|hbs)$/, ''),
|
|
446
|
-
specifier: `${this.options.appRoot}/embroider-pair-component/${encodeURIComponent(hbsModule.filename)}/__vpc__/${encodeURIComponent(
|
|
444
|
+
specifier: `${this.options.appRoot}/embroider-pair-component/${encodeURIComponent(hbsModule.filename)}/__vpc__/${encodeURIComponent(jsModule?.filename ?? '')}`,
|
|
447
445
|
}));
|
|
448
446
|
}
|
|
449
447
|
else if (jsModule) {
|
|
@@ -551,7 +549,7 @@ class Resolver {
|
|
|
551
549
|
}
|
|
552
550
|
reverse.set((0, path_1.resolve)(addon.root, inAddonName), { inEngineName, owningPackageRoot: addon.root });
|
|
553
551
|
let prevEntry = engineModules.get(inEngineName);
|
|
554
|
-
switch (prevEntry
|
|
552
|
+
switch (prevEntry?.type) {
|
|
555
553
|
case undefined:
|
|
556
554
|
engineModules.set(inEngineName, {
|
|
557
555
|
type: 'app-only',
|
|
@@ -595,7 +593,7 @@ class Resolver {
|
|
|
595
593
|
}
|
|
596
594
|
reverse.set((0, path_1.resolve)(addon.root, inAddonName), { inEngineName, owningPackageRoot: addon.root });
|
|
597
595
|
let prevEntry = engineModules.get(inEngineName);
|
|
598
|
-
switch (prevEntry
|
|
596
|
+
switch (prevEntry?.type) {
|
|
599
597
|
case undefined:
|
|
600
598
|
engineModules.set(inEngineName, {
|
|
601
599
|
type: 'fastboot-only',
|
|
@@ -698,8 +696,23 @@ class Resolver {
|
|
|
698
696
|
}
|
|
699
697
|
return request;
|
|
700
698
|
}
|
|
699
|
+
get renameModulesMap() {
|
|
700
|
+
let extensionPattern = (0, shared_internals_1.extensionsPattern)(this.options.resolvableExtensions);
|
|
701
|
+
let map = new Map();
|
|
702
|
+
for (let [candidate, replacement] of Object.entries(this.options.renameModules)) {
|
|
703
|
+
map.set(candidate, replacement);
|
|
704
|
+
let withoutExtension = candidate.replace(extensionPattern, '');
|
|
705
|
+
if (withoutExtension !== candidate) {
|
|
706
|
+
map.set(withoutExtension, replacement);
|
|
707
|
+
let withoutIndex = withoutExtension.replace(/\/index$/, '');
|
|
708
|
+
if (withoutIndex !== withoutExtension) {
|
|
709
|
+
map.set(withoutIndex, replacement);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
return map;
|
|
714
|
+
}
|
|
701
715
|
handleRenaming(request) {
|
|
702
|
-
var _a;
|
|
703
716
|
if (request.resolvedTo) {
|
|
704
717
|
return request;
|
|
705
718
|
}
|
|
@@ -712,19 +725,10 @@ class Resolver {
|
|
|
712
725
|
// ember-source might provide backburner via module renaming, but if you
|
|
713
726
|
// have an explicit dependency on backburner you should still get that real
|
|
714
727
|
// copy.
|
|
715
|
-
if (!
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
}
|
|
720
|
-
for (let extension of this.options.resolvableExtensions) {
|
|
721
|
-
if (candidate === request.specifier + '/index' + extension) {
|
|
722
|
-
return logTransition(`renameModules`, request, request.alias(replacement));
|
|
723
|
-
}
|
|
724
|
-
if (candidate === request.specifier + extension) {
|
|
725
|
-
return logTransition(`renameModules`, request, request.alias(replacement));
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
+
if (!pkg?.hasDependency(packageName)) {
|
|
729
|
+
let replacement = this.renameModulesMap.get(request.specifier);
|
|
730
|
+
if (replacement !== undefined) {
|
|
731
|
+
return logTransition(`renameModules`, request, request.alias(replacement));
|
|
728
732
|
}
|
|
729
733
|
if (this.options.renamePackages[packageName]) {
|
|
730
734
|
return logTransition(`renamePackages`, request, request.alias(request.specifier.replace(packageName, this.options.renamePackages[packageName])));
|
|
@@ -735,7 +739,7 @@ class Resolver {
|
|
|
735
739
|
}
|
|
736
740
|
if (pkg.name === packageName) {
|
|
737
741
|
// we found a self-import
|
|
738
|
-
if (
|
|
742
|
+
if (pkg.meta?.['auto-upgraded'] && !pkg.isEngine()) {
|
|
739
743
|
// auto-upgraded packages always get automatically adjusted. They never
|
|
740
744
|
// supported fancy package.json exports features so this direct mapping
|
|
741
745
|
// to the root is always right.
|
|
@@ -773,8 +777,8 @@ class Resolver {
|
|
|
773
777
|
browser: true,
|
|
774
778
|
conditions: ['default', 'imports'],
|
|
775
779
|
});
|
|
776
|
-
if (found
|
|
777
|
-
return logTransition(`v2 self-import with package.json exports`, request, request.alias(found
|
|
780
|
+
if (found?.[0]) {
|
|
781
|
+
return logTransition(`v2 self-import with package.json exports`, request, request.alias(found?.[0]).rehome((0, path_1.resolve)(pkg.root, 'package.json')));
|
|
778
782
|
}
|
|
779
783
|
}
|
|
780
784
|
}
|
|
@@ -785,7 +789,7 @@ class Resolver {
|
|
|
785
789
|
return request;
|
|
786
790
|
}
|
|
787
791
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
|
788
|
-
if (
|
|
792
|
+
if (pkg?.root !== this.options.engines[0].root) {
|
|
789
793
|
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.`);
|
|
790
794
|
}
|
|
791
795
|
return logTransition('vendor', request, request.virtualize({ type: 'vendor-js', specifier: (0, path_1.resolve)(pkg.root, '-embroider-vendor.js') }));
|
|
@@ -805,7 +809,6 @@ class Resolver {
|
|
|
805
809
|
return newRequest.withMeta({ originalFromFile });
|
|
806
810
|
}
|
|
807
811
|
preHandleExternal(request) {
|
|
808
|
-
var _a;
|
|
809
812
|
if (request.resolvedTo) {
|
|
810
813
|
return request;
|
|
811
814
|
}
|
|
@@ -846,7 +849,7 @@ class Resolver {
|
|
|
846
849
|
// package to which it belongs (normally the app) that affects some policy
|
|
847
850
|
// choices about what it can import
|
|
848
851
|
let logicalPackage = this.logicalPackage(pkg, fromFile);
|
|
849
|
-
if (
|
|
852
|
+
if (logicalPackage.meta?.['auto-upgraded'] && !logicalPackage.hasDependency('ember-auto-import')) {
|
|
850
853
|
try {
|
|
851
854
|
let dep = this.packageCache.resolve(packageName, logicalPackage);
|
|
852
855
|
if (!dep.isEmberAddon()) {
|
|
@@ -922,7 +925,7 @@ class Resolver {
|
|
|
922
925
|
})();
|
|
923
926
|
request = this.restoreRehomedRequest(request);
|
|
924
927
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
|
925
|
-
if (!
|
|
928
|
+
if (!pkg?.isV2Ember()) {
|
|
926
929
|
// this request is coming from a file that appears to be owned by no ember
|
|
927
930
|
// package. We offer one fallback behavior for such files. They're allowed
|
|
928
931
|
// to resolve from the app's namespace.
|
|
@@ -974,11 +977,10 @@ class Resolver {
|
|
|
974
977
|
return abortFallback('fallbackResolve final exit');
|
|
975
978
|
}
|
|
976
979
|
restoreRehomedRequest(request) {
|
|
977
|
-
var _a;
|
|
978
980
|
// meta.originalFromFile gets set when we want to try to rehome a request
|
|
979
981
|
// but then come back to the original location here in the fallback when the
|
|
980
982
|
// rehomed request fails
|
|
981
|
-
let originalFromFile =
|
|
983
|
+
let originalFromFile = request.meta?.originalFromFile;
|
|
982
984
|
if (typeof originalFromFile === 'string') {
|
|
983
985
|
return request.rehome(originalFromFile);
|
|
984
986
|
}
|
|
@@ -1017,10 +1019,9 @@ class Resolver {
|
|
|
1017
1019
|
}
|
|
1018
1020
|
}
|
|
1019
1021
|
getEntryFromMergeMap(inEngineSpecifier, root) {
|
|
1020
|
-
var _a;
|
|
1021
1022
|
let entry;
|
|
1022
1023
|
for (let candidate of this.withResolvableExtensions(inEngineSpecifier)) {
|
|
1023
|
-
entry =
|
|
1024
|
+
entry = this.mergeMap.get(root)?.get(candidate);
|
|
1024
1025
|
if (entry) {
|
|
1025
1026
|
return { entry, matched: candidate };
|
|
1026
1027
|
}
|
|
@@ -1038,7 +1039,7 @@ class Resolver {
|
|
|
1038
1039
|
}
|
|
1039
1040
|
async searchAppTree(request, engine, inEngineSpecifier) {
|
|
1040
1041
|
let matched = this.getEntryFromMergeMap(inEngineSpecifier, engine.root);
|
|
1041
|
-
switch (matched
|
|
1042
|
+
switch (matched?.entry.type) {
|
|
1042
1043
|
case undefined:
|
|
1043
1044
|
return undefined;
|
|
1044
1045
|
case 'app-only':
|
|
@@ -1070,7 +1071,7 @@ class Resolver {
|
|
|
1070
1071
|
// its dasherized name
|
|
1071
1072
|
reverseComponentLookup(filename) {
|
|
1072
1073
|
const owningPackage = this.packageCache.ownerOfFile(filename);
|
|
1073
|
-
if (!
|
|
1074
|
+
if (!owningPackage?.isV2Ember()) {
|
|
1074
1075
|
return;
|
|
1075
1076
|
}
|
|
1076
1077
|
let engineConfig = this.options.engines.find(e => e.root === owningPackage.root);
|
|
@@ -1107,6 +1108,9 @@ __decorate([
|
|
|
1107
1108
|
__decorate([
|
|
1108
1109
|
(0, typescript_memoize_1.Memoize)()
|
|
1109
1110
|
], Resolver.prototype, "emberVersionSupportsSeparateTemplates", null);
|
|
1111
|
+
__decorate([
|
|
1112
|
+
(0, typescript_memoize_1.Memoize)()
|
|
1113
|
+
], Resolver.prototype, "renameModulesMap", null);
|
|
1110
1114
|
// we don't want to allow things that resolve only by accident that are likely
|
|
1111
1115
|
// to break in other setups. For example: import your dependencies'
|
|
1112
1116
|
// dependencies, or importing your own name from within a monorepo (which will
|