@embroider/core 4.1.2 → 4.2.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 +38 -23
- package/dist/src/app-files.js.map +1 -1
- package/dist/src/module-resolver.js +33 -21
- package/dist/src/module-resolver.js.map +1 -1
- package/dist/src/virtual-entrypoint.js +28 -29
- package/dist/src/virtual-entrypoint.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
package/dist/src/app-files.js
CHANGED
@@ -10,44 +10,61 @@ class AppFiles {
|
|
10
10
|
let modifiers = [];
|
11
11
|
let otherAppFiles = [];
|
12
12
|
this.perRoute = { children: new Map() };
|
13
|
-
let combinedFiles = new
|
14
|
-
let combinedNonFastbootFiles = new
|
15
|
-
|
13
|
+
let combinedFiles = new Map();
|
14
|
+
let combinedNonFastbootFiles = new Map();
|
15
|
+
function add(map, filename) {
|
16
|
+
if (!resolvableExtensions.test(filename)) {
|
17
|
+
return;
|
18
|
+
}
|
19
|
+
if (/\.d\.ts$/.test(filename)) {
|
20
|
+
// .d.ts files are technically "*.ts" files but aren't really and we
|
21
|
+
// don't want to include them when we crawl through the app.
|
22
|
+
return;
|
23
|
+
}
|
24
|
+
filename = filename.split(path_1.sep).join('/');
|
25
|
+
let extensionless = filename.replace(resolvableExtensions, '');
|
26
|
+
let prior = map.get(extensionless);
|
27
|
+
if (!prior) {
|
28
|
+
// no prior, so we win
|
29
|
+
map.set(extensionless, filename);
|
30
|
+
}
|
31
|
+
else if (prior.startsWith('components/') && prior.endsWith('.hbs') && !prior.endsWith('/template.hbs')) {
|
32
|
+
// The prior entry in combinedFiles is a colocated hbs component. The
|
33
|
+
// name "template.hbs" is special in the template colocation rules due
|
34
|
+
// to earlier pods patterns.
|
35
|
+
//
|
36
|
+
// colocated hbs never wins over the corresponding other resolvable js
|
37
|
+
// or ts.
|
38
|
+
map.set(extensionless, filename);
|
39
|
+
}
|
40
|
+
}
|
16
41
|
for (let f of appFiles) {
|
17
|
-
|
18
|
-
|
42
|
+
add(combinedFiles, f);
|
43
|
+
add(combinedNonFastbootFiles, f);
|
19
44
|
}
|
20
45
|
for (let f of fastbootFiles) {
|
21
|
-
|
46
|
+
add(combinedFiles, f);
|
22
47
|
}
|
23
48
|
for (let addon of engine.addons.keys()) {
|
24
49
|
let appJS = addon.meta['app-js'];
|
25
50
|
if (appJS) {
|
26
51
|
for (let filename of Object.keys(appJS)) {
|
27
52
|
filename = filename.replace(/^\.\//, '');
|
28
|
-
|
29
|
-
|
53
|
+
add(combinedFiles, filename);
|
54
|
+
add(combinedNonFastbootFiles, filename);
|
30
55
|
}
|
31
56
|
}
|
32
57
|
let fastbootJS = addon.meta['fastboot-js'];
|
33
58
|
if (fastbootJS) {
|
34
59
|
for (let filename of Object.keys(fastbootJS)) {
|
35
60
|
filename = filename.replace(/^\.\//, '');
|
36
|
-
|
61
|
+
add(combinedFiles, filename);
|
37
62
|
}
|
38
63
|
}
|
39
64
|
}
|
40
|
-
|
41
|
-
|
42
|
-
relativePath
|
43
|
-
if (!resolvableExtensions.test(relativePath)) {
|
44
|
-
continue;
|
45
|
-
}
|
46
|
-
if (/\.d\.ts$/.test(relativePath)) {
|
47
|
-
// .d.ts files are technically "*.ts" files but aren't really and we
|
48
|
-
// don't want to include them when we crawl through the app.
|
49
|
-
continue;
|
50
|
-
}
|
65
|
+
let isFastbootOnly = new Map();
|
66
|
+
for (let [extensionless, relativePath] of combinedFiles) {
|
67
|
+
isFastbootOnly.set(relativePath, !combinedNonFastbootFiles.has(extensionless));
|
51
68
|
if (relativePath.startsWith('tests/')) {
|
52
69
|
// skip tests because they are dealt with separately
|
53
70
|
continue;
|
@@ -68,9 +85,7 @@ class AppFiles {
|
|
68
85
|
// because the resolver will be able to recognize a template-only and
|
69
86
|
// give a correct answer in the end.
|
70
87
|
let jsPath = relativePath.replace(/\.hbs$/, '.js');
|
71
|
-
|
72
|
-
components.push(jsPath);
|
73
|
-
}
|
88
|
+
components.push(jsPath);
|
74
89
|
}
|
75
90
|
continue;
|
76
91
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"app-files.js","sourceRoot":"","sources":["../../src/app-files.ts"],"names":[],"mappings":"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","sourcesContent":["import { sep } from 'path';\nimport type { Package, AddonPackage } from '@embroider/shared-internals';\n\nexport interface RouteFiles {\n route?: string;\n template?: string;\n controller?: string;\n children: Map<string, RouteFiles>;\n}\n\nexport class AppFiles {\n readonly components: ReadonlyArray<string>;\n readonly helpers: ReadonlyArray<string>;\n readonly modifiers: ReadonlyArray<string>;\n private perRoute: RouteFiles;\n readonly otherAppFiles: ReadonlyArray<string>;\n readonly isFastbootOnly: Map<string, boolean>;\n readonly fastbootFiles: { [appName: string]: { localFilename: string; shadowedFilename: string | undefined } };\n\n constructor(\n readonly engine: Engine,\n appFiles: Set<string>,\n fastbootFiles: Set<string>,\n resolvableExtensions: RegExp,\n staticAppPathsPattern: RegExp | undefined,\n podModulePrefix?: string\n ) {\n let components: string[] = [];\n let helpers: string[] = [];\n let modifiers: string[] = [];\n let otherAppFiles: string[] = [];\n this.perRoute = { children: new Map() };\n\n let combinedFiles = new Set<string>();\n let combinedNonFastbootFiles = new Set<string>();\n let isFastbootOnly = new Map<string, boolean>();\n\n for (let f of appFiles) {\n combinedFiles.add(f);\n combinedNonFastbootFiles.add(f);\n }\n for (let f of fastbootFiles) {\n combinedFiles.add(f);\n }\n\n for (let addon of engine.addons.keys()) {\n let appJS = addon.meta['app-js'];\n if (appJS) {\n for (let filename of Object.keys(appJS)) {\n filename = filename.replace(/^\\.\\//, '');\n combinedFiles.add(filename);\n combinedNonFastbootFiles.add(filename);\n }\n }\n\n let fastbootJS = addon.meta['fastboot-js'];\n if (fastbootJS) {\n for (let filename of Object.keys(fastbootJS)) {\n filename = filename.replace(/^\\.\\//, '');\n combinedFiles.add(filename);\n }\n }\n }\n\n for (let relativePath of combinedFiles) {\n isFastbootOnly.set(relativePath, !combinedNonFastbootFiles.has(relativePath));\n relativePath = relativePath.split(sep).join('/');\n if (!resolvableExtensions.test(relativePath)) {\n continue;\n }\n\n if (/\\.d\\.ts$/.test(relativePath)) {\n // .d.ts files are technically \"*.ts\" files but aren't really and we\n // don't want to include them when we crawl through the app.\n continue;\n }\n\n if (relativePath.startsWith('tests/')) {\n // skip tests because they are dealt with separately\n continue;\n }\n\n if (relativePath.startsWith('components/')) {\n // hbs files are not resolvable when they're used via co-location with\n // an associated js file because it's the js that is resolvable.\n // An hbs file is used via colocation when it's inside the components\n // directory, and also not named \"template.hbs\" (because that is an\n // older pattern used with pods-like layouts).\n let isHbs = relativePath.endsWith('.hbs');\n if (!isHbs || relativePath.endsWith('/template.hbs')) {\n components.push(relativePath);\n } else if (isHbs) {\n // template-only components will be compiled as js files during the\n // build process, so we push a virtual path to js in the list of files\n // because the resolver will be able to recognize a template-only and\n // give a correct answer in the end.\n let jsPath = relativePath.replace(/\\.hbs$/, '.js');\n if (!combinedFiles.has(jsPath)) {\n components.push(jsPath);\n }\n }\n continue;\n }\n\n if (relativePath.startsWith('templates/components/')) {\n components.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('helpers/')) {\n helpers.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('modifiers/')) {\n modifiers.push(relativePath);\n continue;\n }\n\n if (\n (podModulePrefix !== undefined && this.handlePodsRouteFile(relativePath, podModulePrefix)) ||\n this.handleClassicRouteFile(relativePath)\n ) {\n continue;\n }\n\n if (staticAppPathsPattern) {\n if (!staticAppPathsPattern.test(relativePath)) {\n otherAppFiles.push(relativePath);\n }\n } else {\n otherAppFiles.push(relativePath);\n }\n }\n this.components = components;\n this.helpers = helpers;\n this.modifiers = modifiers;\n this.otherAppFiles = otherAppFiles;\n this.isFastbootOnly = isFastbootOnly;\n\n // this deliberately only describes the app's fastboot files. Not the full\n // merge from all the addons. This is because they need different handling\n // in the module resolver -- addon fastboot files can always be a\n // fallbackResolve, because if the app happens to define the same name\n // (whether fastboot-specific or just browser) that wins over the addon.\n // Whereas if the app itself defines a fastbot-specific version of a file,\n // that must take precedence over the *normal* resolution, and must be\n // implemented in beforeResolve.\n this.fastbootFiles = Object.fromEntries(\n [...fastbootFiles].map(name => [\n `./${name}`,\n {\n localFilename: `./_fastboot_/${name}`,\n shadowedFilename: appFiles.has(name) ? `./${name}` : undefined,\n },\n ])\n );\n }\n\n private handleClassicRouteFile(relativePath: string): boolean {\n let [prefix, ...rest] = relativePath.replace(/\\.\\w{1,3}$/, '').split('/');\n if (!['controllers', 'templates', 'routes'].includes(prefix)) {\n return false;\n }\n let type = prefix.slice(0, -1) as 'controller' | 'template' | 'route';\n let cursor = this.perRoute;\n for (let part of rest) {\n let child = cursor.children.get(part);\n if (child) {\n cursor = child;\n } else {\n let newEntry = { children: new Map() };\n cursor.children.set(part, newEntry);\n cursor = newEntry;\n }\n }\n cursor[type] = relativePath;\n return true;\n }\n\n private handlePodsRouteFile(relativePath: string, podModulePrefix: string): boolean {\n let parts = relativePath.replace(/\\.\\w{1,3}$/, '').split('/');\n let type = parts.pop();\n if (!type || !['controller', 'template', 'route'].includes(type)) {\n return false;\n }\n let podParts = podModulePrefix.split('/');\n // The first part of podModulePrefix is the app's package name\n podParts.shift();\n\n for (let podPart of podParts) {\n if (parts.shift() !== podPart) {\n return false;\n }\n }\n\n let cursor = this.perRoute;\n for (let part of parts) {\n let child = cursor.children.get(part);\n if (child) {\n cursor = child;\n } else {\n let newEntry = { children: new Map() };\n cursor.children.set(part, newEntry);\n cursor = newEntry;\n }\n }\n cursor[type as 'controller' | 'template' | 'route'] = relativePath;\n return true;\n }\n\n get routeFiles(): Readonly<RouteFiles> {\n return this.perRoute;\n }\n}\n\nexport interface Engine {\n // the engine's own package\n package: Package;\n // the set of active addons in the engine. For each one we keep track of a file that can resolve the addon, because we'll need that later.\n addons: Map<AddonPackage, string>;\n // is this the top-level engine?\n isApp: boolean;\n // runtime name for the engine's own module namespace\n modulePrefix: string;\n // TODO: remove this after we remove the stage2 entrypoint\n appRelativePath: string;\n}\n"]}
|
1
|
+
{"version":3,"file":"app-files.js","sourceRoot":"","sources":["../../src/app-files.ts"],"names":[],"mappings":"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","sourcesContent":["import { sep } from 'path';\nimport type { Package, AddonPackage } from '@embroider/shared-internals';\n\nexport interface RouteFiles {\n route?: string;\n template?: string;\n controller?: string;\n children: Map<string, RouteFiles>;\n}\n\nexport class AppFiles {\n readonly components: ReadonlyArray<string>;\n readonly helpers: ReadonlyArray<string>;\n readonly modifiers: ReadonlyArray<string>;\n private perRoute: RouteFiles;\n readonly otherAppFiles: ReadonlyArray<string>;\n readonly isFastbootOnly: Map<string, boolean>;\n readonly fastbootFiles: { [appName: string]: { localFilename: string; shadowedFilename: string | undefined } };\n\n constructor(\n readonly engine: Engine,\n appFiles: Set<string>,\n fastbootFiles: Set<string>,\n resolvableExtensions: RegExp,\n staticAppPathsPattern: RegExp | undefined,\n podModulePrefix?: string\n ) {\n let components: string[] = [];\n let helpers: string[] = [];\n let modifiers: string[] = [];\n let otherAppFiles: string[] = [];\n this.perRoute = { children: new Map() };\n\n let combinedFiles = new Map<string, string>();\n let combinedNonFastbootFiles = new Map<string, string>();\n\n function add(map: Map<string, string>, filename: string): void {\n if (!resolvableExtensions.test(filename)) {\n return;\n }\n\n if (/\\.d\\.ts$/.test(filename)) {\n // .d.ts files are technically \"*.ts\" files but aren't really and we\n // don't want to include them when we crawl through the app.\n return;\n }\n\n filename = filename.split(sep).join('/');\n\n let extensionless = filename.replace(resolvableExtensions, '');\n let prior = map.get(extensionless);\n\n if (!prior) {\n // no prior, so we win\n map.set(extensionless, filename);\n } else if (prior.startsWith('components/') && prior.endsWith('.hbs') && !prior.endsWith('/template.hbs')) {\n // The prior entry in combinedFiles is a colocated hbs component. The\n // name \"template.hbs\" is special in the template colocation rules due\n // to earlier pods patterns.\n //\n // colocated hbs never wins over the corresponding other resolvable js\n // or ts.\n map.set(extensionless, filename);\n }\n }\n\n for (let f of appFiles) {\n add(combinedFiles, f);\n add(combinedNonFastbootFiles, f);\n }\n for (let f of fastbootFiles) {\n add(combinedFiles, f);\n }\n\n for (let addon of engine.addons.keys()) {\n let appJS = addon.meta['app-js'];\n if (appJS) {\n for (let filename of Object.keys(appJS)) {\n filename = filename.replace(/^\\.\\//, '');\n add(combinedFiles, filename);\n add(combinedNonFastbootFiles, filename);\n }\n }\n\n let fastbootJS = addon.meta['fastboot-js'];\n if (fastbootJS) {\n for (let filename of Object.keys(fastbootJS)) {\n filename = filename.replace(/^\\.\\//, '');\n add(combinedFiles, filename);\n }\n }\n }\n\n let isFastbootOnly = new Map<string, boolean>();\n for (let [extensionless, relativePath] of combinedFiles) {\n isFastbootOnly.set(relativePath, !combinedNonFastbootFiles.has(extensionless));\n\n if (relativePath.startsWith('tests/')) {\n // skip tests because they are dealt with separately\n continue;\n }\n\n if (relativePath.startsWith('components/')) {\n // hbs files are not resolvable when they're used via co-location with\n // an associated js file because it's the js that is resolvable.\n // An hbs file is used via colocation when it's inside the components\n // directory, and also not named \"template.hbs\" (because that is an\n // older pattern used with pods-like layouts).\n let isHbs = relativePath.endsWith('.hbs');\n if (!isHbs || relativePath.endsWith('/template.hbs')) {\n components.push(relativePath);\n } else if (isHbs) {\n // template-only components will be compiled as js files during the\n // build process, so we push a virtual path to js in the list of files\n // because the resolver will be able to recognize a template-only and\n // give a correct answer in the end.\n let jsPath = relativePath.replace(/\\.hbs$/, '.js');\n components.push(jsPath);\n }\n continue;\n }\n\n if (relativePath.startsWith('templates/components/')) {\n components.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('helpers/')) {\n helpers.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('modifiers/')) {\n modifiers.push(relativePath);\n continue;\n }\n\n if (\n (podModulePrefix !== undefined && this.handlePodsRouteFile(relativePath, podModulePrefix)) ||\n this.handleClassicRouteFile(relativePath)\n ) {\n continue;\n }\n\n if (staticAppPathsPattern) {\n if (!staticAppPathsPattern.test(relativePath)) {\n otherAppFiles.push(relativePath);\n }\n } else {\n otherAppFiles.push(relativePath);\n }\n }\n this.components = components;\n this.helpers = helpers;\n this.modifiers = modifiers;\n this.otherAppFiles = otherAppFiles;\n this.isFastbootOnly = isFastbootOnly;\n\n // this deliberately only describes the app's fastboot files. Not the full\n // merge from all the addons. This is because they need different handling\n // in the module resolver -- addon fastboot files can always be a\n // fallbackResolve, because if the app happens to define the same name\n // (whether fastboot-specific or just browser) that wins over the addon.\n // Whereas if the app itself defines a fastbot-specific version of a file,\n // that must take precedence over the *normal* resolution, and must be\n // implemented in beforeResolve.\n this.fastbootFiles = Object.fromEntries(\n [...fastbootFiles].map(name => [\n `./${name}`,\n {\n localFilename: `./_fastboot_/${name}`,\n shadowedFilename: appFiles.has(name) ? `./${name}` : undefined,\n },\n ])\n );\n }\n\n private handleClassicRouteFile(relativePath: string): boolean {\n let [prefix, ...rest] = relativePath.replace(/\\.\\w{1,3}$/, '').split('/');\n if (!['controllers', 'templates', 'routes'].includes(prefix)) {\n return false;\n }\n let type = prefix.slice(0, -1) as 'controller' | 'template' | 'route';\n let cursor = this.perRoute;\n for (let part of rest) {\n let child = cursor.children.get(part);\n if (child) {\n cursor = child;\n } else {\n let newEntry = { children: new Map() };\n cursor.children.set(part, newEntry);\n cursor = newEntry;\n }\n }\n cursor[type] = relativePath;\n return true;\n }\n\n private handlePodsRouteFile(relativePath: string, podModulePrefix: string): boolean {\n let parts = relativePath.replace(/\\.\\w{1,3}$/, '').split('/');\n let type = parts.pop();\n if (!type || !['controller', 'template', 'route'].includes(type)) {\n return false;\n }\n let podParts = podModulePrefix.split('/');\n // The first part of podModulePrefix is the app's package name\n podParts.shift();\n\n for (let podPart of podParts) {\n if (parts.shift() !== podPart) {\n return false;\n }\n }\n\n let cursor = this.perRoute;\n for (let part of parts) {\n let child = cursor.children.get(part);\n if (child) {\n cursor = child;\n } else {\n let newEntry = { children: new Map() };\n cursor.children.set(part, newEntry);\n cursor = newEntry;\n }\n }\n cursor[type as 'controller' | 'template' | 'route'] = relativePath;\n return true;\n }\n\n get routeFiles(): Readonly<RouteFiles> {\n return this.perRoute;\n }\n}\n\nexport interface Engine {\n // the engine's own package\n package: Package;\n // the set of active addons in the engine. For each one we keep track of a file that can resolve the addon, because we'll need that later.\n addons: Map<AddonPackage, string>;\n // is this the top-level engine?\n isApp: boolean;\n // runtime name for the engine's own module namespace\n modulePrefix: string;\n // TODO: remove this after we remove the stage2 entrypoint\n appRelativePath: string;\n}\n"]}
|
@@ -388,6 +388,8 @@ class Resolver {
|
|
388
388
|
return this.resolveModifier(rest, engine, request);
|
389
389
|
case 'ambiguous':
|
390
390
|
return this.resolveHelperOrComponent(rest, engine, request);
|
391
|
+
case 'compat-modules':
|
392
|
+
return request;
|
391
393
|
default:
|
392
394
|
throw new Error(`bug: unexepected @embroider/virtual specifier: ${request.specifier}`);
|
393
395
|
}
|
@@ -733,7 +735,7 @@ class Resolver {
|
|
733
735
|
}
|
734
736
|
if (pkg.name === packageName) {
|
735
737
|
// we found a self-import
|
736
|
-
if ((_a = pkg.meta) === null || _a === void 0 ? void 0 : _a['auto-upgraded']) {
|
738
|
+
if (((_a = pkg.meta) === null || _a === void 0 ? void 0 : _a['auto-upgraded']) && !pkg.isEngine()) {
|
737
739
|
// auto-upgraded packages always get automatically adjusted. They never
|
738
740
|
// supported fancy package.json exports features so this direct mapping
|
739
741
|
// to the root is always right.
|
@@ -745,6 +747,15 @@ class Resolver {
|
|
745
747
|
// auto-upgraded addons get special support for self-resolving here.
|
746
748
|
return logTransition(`v1 addon self-import`, request, request.rehome(addonConfig.canResolveFromFile));
|
747
749
|
}
|
750
|
+
else if (owningEngine.root === pkg.root) {
|
751
|
+
for (let engineConfig of this.options.engines) {
|
752
|
+
for (let activeAddon of engineConfig.activeAddons) {
|
753
|
+
if (activeAddon.root === pkg.root) {
|
754
|
+
return logTransition(`v1 engine self-import`, request, request.rehome(activeAddon.canResolveFromFile));
|
755
|
+
}
|
756
|
+
}
|
757
|
+
}
|
758
|
+
}
|
748
759
|
else {
|
749
760
|
// auto-upgraded apps will necessarily have packageJSON.exports
|
750
761
|
// because we insert them, so for that support we can fall through to
|
@@ -901,10 +912,16 @@ class Resolver {
|
|
901
912
|
// here.
|
902
913
|
return request;
|
903
914
|
}
|
915
|
+
let abortFallback = (() => {
|
916
|
+
const unmodified = request;
|
917
|
+
// Whenever fallbackResolve gives up, it should return the original
|
918
|
+
// unmodifiedRequest so that we communicate clearly that no further
|
919
|
+
// fallbacks should be attempted. Internally, we track a modifiedRequest
|
920
|
+
// that has been adjusted to compensate for rehoming.
|
921
|
+
return (desc) => logTransition(desc, unmodified);
|
922
|
+
})();
|
923
|
+
request = this.restoreRehomedRequest(request);
|
904
924
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
905
|
-
if (pkg) {
|
906
|
-
({ pkg, request } = this.restoreRehomedRequest(pkg, request));
|
907
|
-
}
|
908
925
|
if (!(pkg === null || pkg === void 0 ? void 0 : pkg.isV2Ember())) {
|
909
926
|
// this request is coming from a file that appears to be owned by no ember
|
910
927
|
// package. We offer one fallback behavior for such files. They're allowed
|
@@ -918,12 +935,12 @@ class Resolver {
|
|
918
935
|
if (packageName === this.options.modulePrefix) {
|
919
936
|
return logTransition(`fallbackResolver: ${description} resolved app namespace`, request, request.rehome(this.packageCache.maybeMoved(this.packageCache.get(this.options.appRoot)).root));
|
920
937
|
}
|
921
|
-
return
|
938
|
+
return abortFallback(`fallbackResolver: ${description}`);
|
922
939
|
}
|
923
940
|
let packageName = (0, shared_internals_1.packageName)(request.specifier);
|
924
941
|
if (!packageName) {
|
925
942
|
// this is a relative import
|
926
|
-
return this.relativeFallbackResolve(pkg, request);
|
943
|
+
return this.relativeFallbackResolve(pkg, request, abortFallback);
|
927
944
|
}
|
928
945
|
if (pkg.needsLooseResolving()) {
|
929
946
|
let activeAddon = this.maybeFallbackToActiveAddon(request, packageName);
|
@@ -954,44 +971,39 @@ class Resolver {
|
|
954
971
|
}
|
955
972
|
// this is falling through with the original specifier which was
|
956
973
|
// non-resolvable, which will presumably cause a static build error in stage3.
|
957
|
-
return
|
974
|
+
return abortFallback('fallbackResolve final exit');
|
958
975
|
}
|
959
|
-
restoreRehomedRequest(
|
976
|
+
restoreRehomedRequest(request) {
|
960
977
|
var _a;
|
961
978
|
// meta.originalFromFile gets set when we want to try to rehome a request
|
962
979
|
// but then come back to the original location here in the fallback when the
|
963
980
|
// rehomed request fails
|
964
|
-
let
|
965
|
-
if (
|
966
|
-
|
967
|
-
if (typeof originalFromFile !== 'string') {
|
968
|
-
throw new Error(`bug: embroider resolver's meta is not propagating`);
|
969
|
-
}
|
970
|
-
request = request.rehome(originalFromFile);
|
971
|
-
pkg = movedPkg;
|
981
|
+
let originalFromFile = (_a = request.meta) === null || _a === void 0 ? void 0 : _a.originalFromFile;
|
982
|
+
if (typeof originalFromFile === 'string') {
|
983
|
+
return request.rehome(originalFromFile);
|
972
984
|
}
|
973
|
-
return
|
985
|
+
return request;
|
974
986
|
}
|
975
|
-
async relativeFallbackResolve(pkg, request) {
|
987
|
+
async relativeFallbackResolve(pkg, request, abortFallback) {
|
976
988
|
let withinEngine = this.engineConfig(pkg.name);
|
977
989
|
if (withinEngine) {
|
978
990
|
// it's a relative import inside an engine (which also means app), which
|
979
991
|
// means we may need to satisfy the request via app tree merging.
|
980
992
|
let logicalName = engineRelativeName(pkg, (0, path_1.resolve)((0, path_1.dirname)(request.fromFile), request.specifier));
|
981
993
|
if (!logicalName) {
|
982
|
-
return
|
994
|
+
return abortFallback('fallbackResolve: relative failure because this file is not externally accessible');
|
983
995
|
}
|
984
996
|
let appJSMatch = await this.searchAppTree(request, withinEngine, logicalName);
|
985
997
|
if (appJSMatch) {
|
986
998
|
return logTransition('fallbackResolve: relative appJsMatch', request, appJSMatch);
|
987
999
|
}
|
988
1000
|
else {
|
989
|
-
return
|
1001
|
+
return abortFallback('fallbackResolve: relative appJs search failure');
|
990
1002
|
}
|
991
1003
|
}
|
992
1004
|
else {
|
993
1005
|
// nothing else to do for relative imports
|
994
|
-
return
|
1006
|
+
return abortFallback('fallbackResolve: relative failure');
|
995
1007
|
}
|
996
1008
|
}
|
997
1009
|
maybeFallbackToActiveAddon(request, requestedPackageName) {
|