@embroider/core 3.4.15-unstable.eb93cd5 → 3.4.16-unstable.11ce470
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -6
- package/src/index.d.ts +2 -1
- package/src/index.js.map +1 -1
- package/src/measure-concat.js +1 -2
- package/src/measure-concat.js.map +1 -1
- package/src/module-resolver-options.d.ts +44 -0
- package/src/module-resolver-options.js +167 -0
- package/src/module-resolver-options.js.map +1 -0
- package/src/module-resolver.d.ts +4 -34
- package/src/module-resolver.js +73 -51
- package/src/module-resolver.js.map +1 -1
- package/src/options.d.ts +0 -4
- package/src/options.js +0 -1
- package/src/options.js.map +1 -1
- package/src/resolver-loader.js +8 -1
- package/src/resolver-loader.js.map +1 -1
- package/src/virtual-content.js +3 -3
- package/src/virtual-content.js.map +1 -1
- package/src/virtual-entrypoint.js +3 -1
- package/src/virtual-entrypoint.js.map +1 -1
- package/src/virtual-route-entrypoint.js +1 -2
- package/src/virtual-route-entrypoint.js.map +1 -1
- package/src/portable-babel-config.d.ts +0 -11
- package/src/portable-babel-config.js +0 -132
- package/src/portable-babel-config.js.map +0 -1
- package/src/portable-babel-launcher.d.ts +0 -6
- package/src/portable-babel-launcher.js +0 -75
- package/src/portable-babel-launcher.js.map +0 -1
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@embroider/core",
|
3
|
-
"version": "3.4.
|
3
|
+
"version": "3.4.16-unstable.11ce470",
|
4
4
|
"private": false,
|
5
5
|
"description": "A build system for EmberJS applications.",
|
6
6
|
"repository": {
|
@@ -21,7 +21,7 @@
|
|
21
21
|
"@babel/parser": "^7.14.5",
|
22
22
|
"@babel/traverse": "^7.14.5",
|
23
23
|
"assert-never": "^1.2.1",
|
24
|
-
"babel-plugin-ember-template-compilation": "^2.
|
24
|
+
"babel-plugin-ember-template-compilation": "^2.3.0",
|
25
25
|
"broccoli-node-api": "^1.7.0",
|
26
26
|
"broccoli-persistent-filter": "^3.1.2",
|
27
27
|
"broccoli-plugin": "^4.0.7",
|
@@ -29,7 +29,6 @@
|
|
29
29
|
"debug": "^4.3.2",
|
30
30
|
"escape-string-regexp": "^4.0.0",
|
31
31
|
"fast-sourcemap-concat": "^2.1.1",
|
32
|
-
"filesize": "^10.0.7",
|
33
32
|
"fs-extra": "^9.1.0",
|
34
33
|
"fs-tree-diff": "^2.0.1",
|
35
34
|
"handlebars": "^4.7.7",
|
@@ -41,9 +40,9 @@
|
|
41
40
|
"resolve.exports": "^2.0.2",
|
42
41
|
"typescript-memoize": "^1.0.1",
|
43
42
|
"walk-sync": "^3.0.0",
|
44
|
-
"@embroider/macros": "1.16.
|
45
|
-
"@embroider/reverse-exports": "0.1.1-unstable.
|
46
|
-
"@embroider/shared-internals": "2.6.
|
43
|
+
"@embroider/macros": "1.16.7-unstable.11ce470",
|
44
|
+
"@embroider/reverse-exports": "0.1.1-unstable.11ce470",
|
45
|
+
"@embroider/shared-internals": "2.6.4-unstable.11ce470"
|
47
46
|
},
|
48
47
|
"devDependencies": {
|
49
48
|
"@glimmer/syntax": "^0.84.2",
|
package/src/index.d.ts
CHANGED
@@ -6,7 +6,8 @@ export { default as toBroccoliPlugin } from './to-broccoli-plugin';
|
|
6
6
|
export { default as WaitForTrees, OutputPaths } from './wait-for-trees';
|
7
7
|
export { compile as jsHandlebarsCompile } from './js-handlebars';
|
8
8
|
export { todo, unsupported, warn, debug, expectWarning, throwOnWarnings } from './messages';
|
9
|
-
export { Resolver,
|
9
|
+
export { Resolver, ModuleRequest, Resolution } from './module-resolver';
|
10
|
+
export type { Options as ResolverOptions } from './module-resolver-options';
|
10
11
|
export { ResolverLoader } from './resolver-loader';
|
11
12
|
export { virtualContent } from './virtual-content';
|
12
13
|
export type { Engine } from './app-files';
|
package/src/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,uCAOoB;AAHlB,qHAAA,yBAAyB,OAAA;AACzB,sGAAA,UAAU,OAAA;AACV,+GAAA,mBAAmB,OAAA;AAErB,qDAAkE;AAAzD,iHAAA,cAAc,OAAA;AAEvB,qCAAoE;AAAvC,8GAAA,mBAAmB,OAAA;AAChD,2DAAmE;AAA1D,uIAAA,OAAO,OAAoB;AACpC,mDAAwE;AAA/D,+HAAA,OAAO,OAAgB;AAChC,iDAAiE;AAAxD,oHAAA,OAAO,OAAuB;AACvC,uCAA4F;AAAnF,gGAAA,IAAI,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,gGAAA,IAAI,OAAA;AAAE,iGAAA,KAAK,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,2GAAA,eAAe,OAAA;AACvE,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,uCAOoB;AAHlB,qHAAA,yBAAyB,OAAA;AACzB,sGAAA,UAAU,OAAA;AACV,+GAAA,mBAAmB,OAAA;AAErB,qDAAkE;AAAzD,iHAAA,cAAc,OAAA;AAEvB,qCAAoE;AAAvC,8GAAA,mBAAmB,OAAA;AAChD,2DAAmE;AAA1D,uIAAA,OAAO,OAAoB;AACpC,mDAAwE;AAA/D,+HAAA,OAAO,OAAgB;AAChC,iDAAiE;AAAxD,oHAAA,OAAO,OAAuB;AACvC,uCAA4F;AAAnF,gGAAA,IAAI,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,gGAAA,IAAI,OAAA;AAAE,iGAAA,KAAK,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,2GAAA,eAAe,OAAA;AACvE,qDAAwE;AAA/D,2GAAA,QAAQ,OAAA;AAEjB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AAGvB,8EAA8E;AAC9E,+DAA+D;AAC/D,8DAA4C","sourcesContent":["export {\n Packager,\n PackagerConstructor,\n Variant,\n applyVariantToBabelConfig,\n getAppMeta,\n getPackagerCacheDir,\n} from './packager';\nexport { HTMLEntrypoint, BundleSummary } from './html-entrypoint';\nexport { default as Stage } from './stage';\nexport { default as Options, optionsWithDefaults } from './options';\nexport { default as toBroccoliPlugin } from './to-broccoli-plugin';\nexport { default as WaitForTrees, OutputPaths } from './wait-for-trees';\nexport { compile as jsHandlebarsCompile } from './js-handlebars';\nexport { todo, unsupported, warn, debug, expectWarning, throwOnWarnings } from './messages';\nexport { Resolver, ModuleRequest, Resolution } from './module-resolver';\nexport type { Options as ResolverOptions } from './module-resolver-options';\nexport { ResolverLoader } from './resolver-loader';\nexport { virtualContent } from './virtual-content';\nexport type { Engine } from './app-files';\n\n// this is reexported because we already make users manage a peerDep from some\n// other packages (like embroider/webpack and @embroider/compat\nexport * from '@embroider/shared-internals';\n"]}
|
package/src/measure-concat.js
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
const path_1 = require("path");
|
4
4
|
const fs_1 = require("fs");
|
5
|
-
const filesize_1 = require("filesize");
|
6
5
|
class MeasureConcat {
|
7
6
|
constructor(name, concat, baseDir) {
|
8
7
|
this.name = name;
|
@@ -22,7 +21,7 @@ class MeasureConcat {
|
|
22
21
|
console.log(`Concatenated ${this.name}:`);
|
23
22
|
console.log(Object.entries(this.stats)
|
24
23
|
.sort((a, b) => b[1] - a[1])
|
25
|
-
.map(([name, bytes]) => ` ${name}: ${
|
24
|
+
.map(([name, bytes]) => ` ${name}: ${bytes} bytes`)
|
26
25
|
.join('\n'));
|
27
26
|
return await this.concat.end();
|
28
27
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"measure-concat.js","sourceRoot":"","sources":["measure-concat.ts"],"names":[],"mappings":";;AACA,+BAA4B;AAC5B,2BAA8B;
|
1
|
+
{"version":3,"file":"measure-concat.js","sourceRoot":"","sources":["measure-concat.ts"],"names":[],"mappings":";;AACA,+BAA4B;AAC5B,2BAA8B;AAE9B,MAAqB,aAAa;IAEhC,YAAoB,IAAY,EAAU,MAAuB,EAAU,OAAe;QAAtE,SAAI,GAAJ,IAAI,CAAQ;QAAU,WAAM,GAAN,MAAM,CAAiB;QAAU,YAAO,GAAP,OAAO,CAAQ;QAD1F,UAAK,GAAmC,EAAE,CAAC;IACkD,CAAC;IAC9F,OAAO,CAAC,QAAgB;QACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAA,aAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACnE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IACD,QAAQ,CAAC,QAAgB;QACvB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC3E,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,CAAC,GAAG;QACP,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;aACvB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC;aACnD,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;QACF,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;CACF;AArBD,gCAqBC","sourcesContent":["import type SourceMapConcat from 'fast-sourcemap-concat';\nimport { join } from 'path';\nimport { statSync } from 'fs';\n\nexport default class MeasureConcat {\n stats: { [filename: string]: number } = {};\n constructor(private name: string, private concat: SourceMapConcat, private baseDir: string) {}\n addFile(filename: string) {\n this.stats[filename] = statSync(join(this.baseDir, filename)).size;\n return this.concat.addFile(filename);\n }\n addSpace(contents: string) {\n this.stats['in-memory'] = (this.stats['in-memory'] || 0) + contents.length;\n return this.concat.addSpace(contents);\n }\n async end() {\n console.log(`Concatenated ${this.name}:`);\n console.log(\n Object.entries(this.stats)\n .sort((a, b) => b[1] - a[1])\n .map(([name, bytes]) => ` ${name}: ${bytes} bytes`)\n .join('\\n')\n );\n return await this.concat.end();\n }\n}\n"]}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import { type AddonPackage, type Package } from '@embroider/shared-internals';
|
2
|
+
import type UserOptions from './options';
|
3
|
+
export interface Options {
|
4
|
+
renamePackages: {
|
5
|
+
[fromName: string]: string;
|
6
|
+
};
|
7
|
+
renameModules: {
|
8
|
+
[fromName: string]: string;
|
9
|
+
};
|
10
|
+
resolvableExtensions: string[];
|
11
|
+
appRoot: string;
|
12
|
+
engines: EngineConfig[];
|
13
|
+
modulePrefix: string;
|
14
|
+
splitAtRoutes?: (RegExp | string)[];
|
15
|
+
podModulePrefix?: string;
|
16
|
+
amdCompatibility: Required<UserOptions['amdCompatibility']>;
|
17
|
+
staticAppPaths: string[];
|
18
|
+
emberVersion: string;
|
19
|
+
}
|
20
|
+
export interface EngineConfig {
|
21
|
+
packageName: string;
|
22
|
+
activeAddons: {
|
23
|
+
name: string;
|
24
|
+
root: string;
|
25
|
+
canResolveFromFile: string;
|
26
|
+
}[];
|
27
|
+
fastbootFiles: {
|
28
|
+
[appName: string]: {
|
29
|
+
localFilename: string;
|
30
|
+
shadowedFilename: string | undefined;
|
31
|
+
};
|
32
|
+
};
|
33
|
+
root: string;
|
34
|
+
isLazy: boolean;
|
35
|
+
}
|
36
|
+
export declare function buildResolverOptions<T extends Options>(inputs: {
|
37
|
+
appPackage?: Package;
|
38
|
+
extraDeps?: Map<string, AddonPackage[]>;
|
39
|
+
modulePrefix?: string;
|
40
|
+
podModulePrefix?: string;
|
41
|
+
splitAtRoutes?: (RegExp | string)[];
|
42
|
+
staticAppPaths?: string[];
|
43
|
+
extend?: (opts: T, allActiveAddons: AddonPackage[]) => T;
|
44
|
+
}): T;
|
@@ -0,0 +1,167 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.buildResolverOptions = buildResolverOptions;
|
7
|
+
const shared_internals_1 = require("@embroider/shared-internals");
|
8
|
+
const path_1 = require("path");
|
9
|
+
const fs_extra_1 = require("fs-extra");
|
10
|
+
const flatMap_1 = __importDefault(require("lodash/flatMap"));
|
11
|
+
function buildResolverOptions(inputs) {
|
12
|
+
var _a, _b;
|
13
|
+
let appPackage;
|
14
|
+
if (inputs.appPackage) {
|
15
|
+
appPackage = inputs.appPackage;
|
16
|
+
}
|
17
|
+
else {
|
18
|
+
let packageCache = shared_internals_1.RewrittenPackageCache.shared('embroider', process.cwd());
|
19
|
+
appPackage = packageCache.get(packageCache.appRoot);
|
20
|
+
}
|
21
|
+
let extraDeps = (_a = inputs.extraDeps) !== null && _a !== void 0 ? _a : new Map();
|
22
|
+
let allActiveAddons = findAllActiveAddons(appPackage, extraDeps);
|
23
|
+
let renamePackages = Object.assign({}, ...allActiveAddons.map(dep => dep.meta['renamed-packages']));
|
24
|
+
let renameModules = Object.assign({}, ...allActiveAddons.map(dep => dep.meta['renamed-modules']));
|
25
|
+
let modulePrefix = appPackage.name;
|
26
|
+
let engines = partitionEngines(appPackage, modulePrefix, extraDeps);
|
27
|
+
let output = {
|
28
|
+
renamePackages,
|
29
|
+
renameModules,
|
30
|
+
resolvableExtensions: resolvableExtensions(),
|
31
|
+
appRoot: appPackage.root,
|
32
|
+
engines,
|
33
|
+
amdCompatibility: {
|
34
|
+
es: [],
|
35
|
+
},
|
36
|
+
modulePrefix,
|
37
|
+
staticAppPaths: (_b = inputs.staticAppPaths) !== null && _b !== void 0 ? _b : [],
|
38
|
+
emberVersion: appPackage.dependencies.find(d => d.name === 'ember-source').version,
|
39
|
+
splitAtRoutes: inputs.splitAtRoutes,
|
40
|
+
podModulePrefix: inputs.podModulePrefix,
|
41
|
+
};
|
42
|
+
if (inputs.extend) {
|
43
|
+
return inputs.extend(output, allActiveAddons);
|
44
|
+
}
|
45
|
+
return output;
|
46
|
+
}
|
47
|
+
function resolvableExtensions() {
|
48
|
+
let fromEnv = process.env.EMBROIDER_RESOLVABLE_EXTENSIONS;
|
49
|
+
if (fromEnv) {
|
50
|
+
return fromEnv.split(',');
|
51
|
+
}
|
52
|
+
else {
|
53
|
+
return ['.mjs', '.gjs', '.js', '.mts', '.gts', '.ts', '.hbs', '.hbs.js', '.json'];
|
54
|
+
}
|
55
|
+
}
|
56
|
+
function partitionEngines(appPackage, modulePrefix, extraDeps) {
|
57
|
+
let queue = [
|
58
|
+
{
|
59
|
+
package: appPackage,
|
60
|
+
addons: new Map(),
|
61
|
+
isApp: true,
|
62
|
+
modulePrefix,
|
63
|
+
appRelativePath: '.',
|
64
|
+
},
|
65
|
+
];
|
66
|
+
let done = [];
|
67
|
+
let seenEngines = new Set();
|
68
|
+
while (true) {
|
69
|
+
let current = queue.shift();
|
70
|
+
if (!current) {
|
71
|
+
break;
|
72
|
+
}
|
73
|
+
findActiveAddons(current.package, current, extraDeps);
|
74
|
+
for (let addon of current.addons.keys()) {
|
75
|
+
if (addon.isEngine() && !seenEngines.has(addon)) {
|
76
|
+
seenEngines.add(addon);
|
77
|
+
queue.push({
|
78
|
+
package: addon,
|
79
|
+
addons: new Map(),
|
80
|
+
isApp: !current,
|
81
|
+
modulePrefix: addon.name,
|
82
|
+
appRelativePath: (0, shared_internals_1.explicitRelative)(appPackage.root, addon.root),
|
83
|
+
});
|
84
|
+
}
|
85
|
+
}
|
86
|
+
done.push(current);
|
87
|
+
}
|
88
|
+
return done.map(engine => ({
|
89
|
+
packageName: engine.package.name,
|
90
|
+
// we need to use the real path here because webpack requests always use the real path i.e. follow symlinks
|
91
|
+
root: (0, fs_extra_1.realpathSync)(engine.package.root),
|
92
|
+
fastbootFiles: {},
|
93
|
+
activeAddons: [...engine.addons]
|
94
|
+
.map(([addon, canResolveFromFile]) => ({
|
95
|
+
name: addon.name,
|
96
|
+
root: addon.root,
|
97
|
+
canResolveFromFile,
|
98
|
+
}))
|
99
|
+
// the traditional order is the order in which addons will run, such
|
100
|
+
// that the last one wins. Our resolver's order is the order to
|
101
|
+
// search, so first one wins.
|
102
|
+
.reverse(),
|
103
|
+
isLazy: engine.package.isLazyEngine(),
|
104
|
+
}));
|
105
|
+
}
|
106
|
+
// recurse to find all active addons that don't cross an engine boundary.
|
107
|
+
// Inner engines themselves will be returned, but not those engines' children.
|
108
|
+
// The output set's insertion order is the proper ember-cli compatible
|
109
|
+
// ordering of the addons.
|
110
|
+
function findActiveAddons(pkg, engine, extraDeps, isChild = false) {
|
111
|
+
for (let child of activeAddonChildren(pkg, extraDeps)) {
|
112
|
+
if (!child.isEngine()) {
|
113
|
+
findActiveAddons(child, engine, extraDeps, true);
|
114
|
+
}
|
115
|
+
let canResolveFrom = (0, path_1.resolve)(pkg.root, 'package.json');
|
116
|
+
engine.addons.set(child, canResolveFrom);
|
117
|
+
}
|
118
|
+
// ensure addons are applied in the correct order, if set (via @embroider/compat/v1-addon)
|
119
|
+
if (!isChild) {
|
120
|
+
engine.addons = new Map([...engine.addons].sort(([a], [b]) => {
|
121
|
+
return (a.meta['order-index'] || 0) - (b.meta['order-index'] || 0);
|
122
|
+
}));
|
123
|
+
}
|
124
|
+
}
|
125
|
+
function activeAddonChildren(pkg, extraDeps) {
|
126
|
+
let result = pkg.dependencies.filter(isActiveAddon).filter(
|
127
|
+
// When looking for child addons, we want to ignore 'peerDependencies' of
|
128
|
+
// a given package, to align with how ember-cli resolves addons. So here
|
129
|
+
// we only include dependencies that are definitely active due to one of
|
130
|
+
// the other sections.
|
131
|
+
addon => pkg.categorizeDependency(addon.name) !== 'peerDependencies');
|
132
|
+
let extras = extraDeps.get(pkg.root);
|
133
|
+
if (extras) {
|
134
|
+
result = [...result, ...extras];
|
135
|
+
}
|
136
|
+
return result.sort(orderAddons);
|
137
|
+
}
|
138
|
+
function isActiveAddon(pkg) {
|
139
|
+
// stage1 already took care of converting everything that's actually active
|
140
|
+
// into v2 addons. If it's not a v2 addon, we don't want it.
|
141
|
+
//
|
142
|
+
// We can encounter v1 addons here when there is inactive stuff floating
|
143
|
+
// around in the node_modules that accidentally satisfy something like an
|
144
|
+
// optional peer dep.
|
145
|
+
return pkg.isV2Addon();
|
146
|
+
}
|
147
|
+
function orderAddons(depA, depB) {
|
148
|
+
let depAIdx = 0;
|
149
|
+
let depBIdx = 0;
|
150
|
+
if (depA && depA.meta && depA.isV2Addon()) {
|
151
|
+
depAIdx = depA.meta['order-index'] || 0;
|
152
|
+
}
|
153
|
+
if (depB && depB.meta && depB.isV2Addon()) {
|
154
|
+
depBIdx = depB.meta['order-index'] || 0;
|
155
|
+
}
|
156
|
+
return depAIdx - depBIdx;
|
157
|
+
}
|
158
|
+
function findAllActiveAddons(appPackage, extraDeps) {
|
159
|
+
let result = appPackage.findDescendants(isActiveAddon);
|
160
|
+
let extras = extraDeps.get(appPackage.root);
|
161
|
+
if (extras) {
|
162
|
+
let extraDescendants = (0, flatMap_1.default)(extras, dep => dep.findDescendants(isActiveAddon));
|
163
|
+
result = [...result, ...extras, ...extraDescendants];
|
164
|
+
}
|
165
|
+
return result.sort(orderAddons);
|
166
|
+
}
|
167
|
+
//# sourceMappingURL=module-resolver-options.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"module-resolver-options.js","sourceRoot":"","sources":["module-resolver-options.ts"],"names":[],"mappings":"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","sourcesContent":["import { explicitRelative, RewrittenPackageCache, type AddonPackage, type Package } from '@embroider/shared-internals';\nimport type UserOptions from './options';\nimport type { Engine } from './app-files';\nimport { resolve as resolvePath } from 'path';\nimport { realpathSync } from 'fs-extra';\nimport flatMap from 'lodash/flatMap';\n\nexport interface Options {\n renamePackages: {\n [fromName: string]: string;\n };\n renameModules: {\n [fromName: string]: string;\n };\n resolvableExtensions: string[];\n appRoot: string;\n engines: EngineConfig[];\n modulePrefix: string;\n splitAtRoutes?: (RegExp | string)[];\n podModulePrefix?: string;\n amdCompatibility: Required<UserOptions['amdCompatibility']>;\n staticAppPaths: string[];\n emberVersion: string;\n}\n\nexport interface EngineConfig {\n packageName: string;\n activeAddons: { name: string; root: string; canResolveFromFile: string }[];\n fastbootFiles: { [appName: string]: { localFilename: string; shadowedFilename: string | undefined } };\n root: string;\n isLazy: boolean;\n}\n\nexport function buildResolverOptions<T extends Options>(inputs: {\n appPackage?: Package;\n extraDeps?: Map<string, AddonPackage[]>;\n modulePrefix?: string;\n podModulePrefix?: string;\n splitAtRoutes?: (RegExp | string)[];\n staticAppPaths?: string[];\n extend?: (opts: T, allActiveAddons: AddonPackage[]) => T;\n}): T {\n let appPackage: Package;\n if (inputs.appPackage) {\n appPackage = inputs.appPackage;\n } else {\n let packageCache = RewrittenPackageCache.shared('embroider', process.cwd());\n appPackage = packageCache.get(packageCache.appRoot);\n }\n\n let extraDeps = inputs.extraDeps ?? new Map();\n\n let allActiveAddons: AddonPackage[] = findAllActiveAddons(appPackage, extraDeps);\n let renamePackages = Object.assign({}, ...allActiveAddons.map(dep => dep.meta['renamed-packages']));\n let renameModules = Object.assign({}, ...allActiveAddons.map(dep => dep.meta['renamed-modules']));\n let modulePrefix = appPackage.name;\n let engines = partitionEngines(appPackage, modulePrefix, extraDeps);\n\n let output: Options = {\n renamePackages,\n renameModules,\n resolvableExtensions: resolvableExtensions(),\n appRoot: appPackage.root,\n engines,\n amdCompatibility: {\n es: [],\n },\n modulePrefix,\n staticAppPaths: inputs.staticAppPaths ?? [],\n emberVersion: appPackage.dependencies.find(d => d.name === 'ember-source')!.version,\n splitAtRoutes: inputs.splitAtRoutes,\n podModulePrefix: inputs.podModulePrefix,\n };\n\n if (inputs.extend) {\n return inputs.extend(output as T, allActiveAddons);\n }\n return output as T;\n}\n\nfunction resolvableExtensions(): string[] {\n let fromEnv = process.env.EMBROIDER_RESOLVABLE_EXTENSIONS;\n if (fromEnv) {\n return fromEnv.split(',');\n } else {\n return ['.mjs', '.gjs', '.js', '.mts', '.gts', '.ts', '.hbs', '.hbs.js', '.json'];\n }\n}\n\nfunction partitionEngines(\n appPackage: Package,\n modulePrefix: string,\n extraDeps: Map<string, AddonPackage[]>\n): EngineConfig[] {\n let queue: Engine[] = [\n {\n package: appPackage,\n addons: new Map(),\n isApp: true,\n modulePrefix,\n appRelativePath: '.',\n },\n ];\n let done: Engine[] = [];\n let seenEngines: Set<Package> = new Set();\n while (true) {\n let current = queue.shift();\n if (!current) {\n break;\n }\n findActiveAddons(current.package, current, extraDeps);\n for (let addon of current.addons.keys()) {\n if (addon.isEngine() && !seenEngines.has(addon)) {\n seenEngines.add(addon);\n queue.push({\n package: addon,\n addons: new Map(),\n isApp: !current,\n modulePrefix: addon.name,\n appRelativePath: explicitRelative(appPackage.root, addon.root),\n });\n }\n }\n done.push(current);\n }\n\n return done.map(engine => ({\n packageName: engine.package.name,\n // we need to use the real path here because webpack requests always use the real path i.e. follow symlinks\n root: realpathSync(engine.package.root),\n fastbootFiles: {},\n activeAddons: [...engine.addons]\n .map(([addon, canResolveFromFile]) => ({\n name: addon.name,\n root: addon.root,\n canResolveFromFile,\n }))\n // the traditional order is the order in which addons will run, such\n // that the last one wins. Our resolver's order is the order to\n // search, so first one wins.\n .reverse(),\n isLazy: engine.package.isLazyEngine(),\n }));\n}\n\n// recurse to find all active addons that don't cross an engine boundary.\n// Inner engines themselves will be returned, but not those engines' children.\n// The output set's insertion order is the proper ember-cli compatible\n// ordering of the addons.\nfunction findActiveAddons(pkg: Package, engine: Engine, extraDeps: Map<string, AddonPackage[]>, isChild = false): void {\n for (let child of activeAddonChildren(pkg, extraDeps)) {\n if (!child.isEngine()) {\n findActiveAddons(child, engine, extraDeps, true);\n }\n let canResolveFrom = resolvePath(pkg.root, 'package.json');\n engine.addons.set(child, canResolveFrom);\n }\n // ensure addons are applied in the correct order, if set (via @embroider/compat/v1-addon)\n if (!isChild) {\n engine.addons = new Map(\n [...engine.addons].sort(([a], [b]) => {\n return (a.meta['order-index'] || 0) - (b.meta['order-index'] || 0);\n })\n );\n }\n}\n\nfunction activeAddonChildren(pkg: Package, extraDeps: Map<string, AddonPackage[]>): AddonPackage[] {\n let result = (pkg.dependencies.filter(isActiveAddon) as AddonPackage[]).filter(\n // When looking for child addons, we want to ignore 'peerDependencies' of\n // a given package, to align with how ember-cli resolves addons. So here\n // we only include dependencies that are definitely active due to one of\n // the other sections.\n addon => pkg.categorizeDependency(addon.name) !== 'peerDependencies'\n );\n let extras = extraDeps.get(pkg.root);\n if (extras) {\n result = [...result, ...extras];\n }\n return result.sort(orderAddons);\n}\n\nfunction isActiveAddon(pkg: Package): boolean {\n // stage1 already took care of converting everything that's actually active\n // into v2 addons. If it's not a v2 addon, we don't want it.\n //\n // We can encounter v1 addons here when there is inactive stuff floating\n // around in the node_modules that accidentally satisfy something like an\n // optional peer dep.\n return pkg.isV2Addon();\n}\n\nfunction orderAddons(depA: Package, depB: Package): number {\n let depAIdx = 0;\n let depBIdx = 0;\n\n if (depA && depA.meta && depA.isV2Addon()) {\n depAIdx = depA.meta['order-index'] || 0;\n }\n if (depB && depB.meta && depB.isV2Addon()) {\n depBIdx = depB.meta['order-index'] || 0;\n }\n\n return depAIdx - depBIdx;\n}\n\nfunction findAllActiveAddons(appPackage: Package, extraDeps: Map<string, AddonPackage[]>): AddonPackage[] {\n let result = appPackage.findDescendants(isActiveAddon) as AddonPackage[];\n let extras = extraDeps.get(appPackage.root);\n if (extras) {\n let extraDescendants = flatMap(extras, dep => dep.findDescendants(isActiveAddon)) as AddonPackage[];\n result = [...result, ...extras, ...extraDescendants];\n }\n return result.sort(orderAddons);\n}\n"]}
|
package/src/module-resolver.d.ts
CHANGED
@@ -1,39 +1,6 @@
|
|
1
1
|
import type { Package } from '@embroider/shared-internals';
|
2
2
|
import { RewrittenPackageCache } from '@embroider/shared-internals';
|
3
|
-
import type
|
4
|
-
export interface Options {
|
5
|
-
renamePackages: {
|
6
|
-
[fromName: string]: string;
|
7
|
-
};
|
8
|
-
renameModules: {
|
9
|
-
[fromName: string]: string;
|
10
|
-
};
|
11
|
-
resolvableExtensions: string[];
|
12
|
-
appRoot: string;
|
13
|
-
engines: EngineConfig[];
|
14
|
-
modulePrefix: string;
|
15
|
-
splitAtRoutes?: (RegExp | string)[];
|
16
|
-
podModulePrefix?: string;
|
17
|
-
amdCompatibility: Required<UserOptions['amdCompatibility']>;
|
18
|
-
autoRun: boolean;
|
19
|
-
staticAppPaths: string[];
|
20
|
-
}
|
21
|
-
export interface EngineConfig {
|
22
|
-
packageName: string;
|
23
|
-
activeAddons: {
|
24
|
-
name: string;
|
25
|
-
root: string;
|
26
|
-
canResolveFromFile: string;
|
27
|
-
}[];
|
28
|
-
fastbootFiles: {
|
29
|
-
[appName: string]: {
|
30
|
-
localFilename: string;
|
31
|
-
shadowedFilename: string | undefined;
|
32
|
-
};
|
33
|
-
};
|
34
|
-
root: string;
|
35
|
-
isLazy: boolean;
|
36
|
-
}
|
3
|
+
import type { Options, EngineConfig } from './module-resolver-options';
|
37
4
|
export interface ModuleRequest<Res extends Resolution = Resolution> {
|
38
5
|
readonly specifier: string;
|
39
6
|
readonly fromFile: string;
|
@@ -108,6 +75,9 @@ export declare class Resolver {
|
|
108
75
|
private locateActiveAddon;
|
109
76
|
private external;
|
110
77
|
private fallbackResolve;
|
78
|
+
private restoreRehomedRequest;
|
79
|
+
private relativeFallbackResolve;
|
80
|
+
private maybeFallbackToActiveAddon;
|
111
81
|
private getEntryFromMergeMap;
|
112
82
|
private withResolvableExtensions;
|
113
83
|
private searchAppTree;
|
package/src/module-resolver.js
CHANGED
@@ -674,17 +674,11 @@ class Resolver {
|
|
674
674
|
return request;
|
675
675
|
}
|
676
676
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
677
|
-
if (!pkg || !pkg.isV2Ember()) {
|
678
|
-
return request;
|
679
|
-
}
|
680
677
|
// real deps take precedence over renaming rules. That is, a package like
|
681
678
|
// ember-source might provide backburner via module renaming, but if you
|
682
679
|
// have an explicit dependency on backburner you should still get that real
|
683
680
|
// copy.
|
684
|
-
|
685
|
-
// return logTransition('legacy config location', request, request.alias(`${pkg.name}/app/environment/config`));
|
686
|
-
// }
|
687
|
-
if (!pkg.hasDependency(packageName)) {
|
681
|
+
if (!(pkg === null || pkg === void 0 ? void 0 : pkg.hasDependency(packageName))) {
|
688
682
|
for (let [candidate, replacement] of Object.entries(this.options.renameModules)) {
|
689
683
|
if (candidate === request.specifier) {
|
690
684
|
return logTransition(`renameModules`, request, request.alias(replacement));
|
@@ -702,6 +696,9 @@ class Resolver {
|
|
702
696
|
return logTransition(`renamePackages`, request, request.alias(request.specifier.replace(packageName, this.options.renamePackages[packageName])));
|
703
697
|
}
|
704
698
|
}
|
699
|
+
if (!pkg || !pkg.isV2Ember()) {
|
700
|
+
return request;
|
701
|
+
}
|
705
702
|
if (pkg.name === packageName) {
|
706
703
|
// we found a self-import
|
707
704
|
if (pkg.meta['auto-upgraded']) {
|
@@ -897,7 +894,7 @@ class Resolver {
|
|
897
894
|
}
|
898
895
|
}
|
899
896
|
async fallbackResolve(request) {
|
900
|
-
var _a, _b
|
897
|
+
var _a, _b;
|
901
898
|
if (request.isVirtual) {
|
902
899
|
throw new Error('Build tool bug detected! Fallback resolve should never see a virtual request. It is expected that the defaultResolve for your bundler has already resolved this request');
|
903
900
|
}
|
@@ -925,56 +922,33 @@ class Resolver {
|
|
925
922
|
return request;
|
926
923
|
}
|
927
924
|
let pkg = this.packageCache.ownerOfFile(request.fromFile);
|
928
|
-
if (
|
929
|
-
|
925
|
+
if (pkg) {
|
926
|
+
({ pkg, request } = this.restoreRehomedRequest(pkg, request));
|
930
927
|
}
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
928
|
+
if (!(pkg === null || pkg === void 0 ? void 0 : pkg.isV2Ember())) {
|
929
|
+
// this request is coming from a file that appears to be owned by no ember
|
930
|
+
// package. We offer one fallback behavior for such files. They're allowed
|
931
|
+
// to resolve from the app's namespace.
|
932
|
+
//
|
933
|
+
// This makes it possible for integrations like vite to leave references
|
934
|
+
// to the app in their pre-bundled dependencies, which will end up in an
|
935
|
+
// arbitrary cache that is not inside any particular package.
|
936
|
+
let description = pkg ? 'non-ember package' : 'unowned module';
|
937
|
+
let packageName = (0, shared_internals_1.packageName)(request.specifier);
|
938
|
+
if (packageName === this.options.modulePrefix) {
|
939
|
+
return logTransition(`fallbackResolver: ${description} resolved app namespace`, request, request.rehome(this.packageCache.maybeMoved(this.packageCache.get(this.options.appRoot)).root));
|
939
940
|
}
|
940
|
-
|
941
|
-
pkg = movedPkg;
|
942
|
-
}
|
943
|
-
if (!pkg.isV2Ember()) {
|
944
|
-
return logTransition('fallbackResolve: not in an ember package', request);
|
941
|
+
return logTransition(`fallbackResolver: ${description}`, request);
|
945
942
|
}
|
946
943
|
let packageName = (0, shared_internals_1.packageName)(request.specifier);
|
947
944
|
if (!packageName) {
|
948
945
|
// this is a relative import
|
949
|
-
|
950
|
-
if (withinEngine) {
|
951
|
-
// it's a relative import inside an engine (which also means app), which
|
952
|
-
// means we may need to satisfy the request via app tree merging.
|
953
|
-
let logicalName = engineRelativeName(pkg, (0, path_1.resolve)((0, path_1.dirname)(request.fromFile), request.specifier));
|
954
|
-
if (!logicalName) {
|
955
|
-
return logTransition('fallbackResolve: relative failure because this file is not externally accessible', request);
|
956
|
-
}
|
957
|
-
let appJSMatch = await this.searchAppTree(request, withinEngine, logicalName);
|
958
|
-
if (appJSMatch) {
|
959
|
-
return logTransition('fallbackResolve: relative appJsMatch', request, appJSMatch);
|
960
|
-
}
|
961
|
-
else {
|
962
|
-
return logTransition('fallbackResolve: relative appJs search failure', request);
|
963
|
-
}
|
964
|
-
}
|
965
|
-
else {
|
966
|
-
// nothing else to do for relative imports
|
967
|
-
return logTransition('fallbackResolve: relative failure', request);
|
968
|
-
}
|
946
|
+
return this.relativeFallbackResolve(pkg, request);
|
969
947
|
}
|
970
|
-
// auto-upgraded packages can fall back to the set of known active addons
|
971
948
|
if (pkg.needsLooseResolving()) {
|
972
|
-
let
|
973
|
-
if (
|
974
|
-
|
975
|
-
if (rehomed !== request) {
|
976
|
-
return logTransition(`activeAddons`, request, rehomed);
|
977
|
-
}
|
949
|
+
let activeAddon = this.maybeFallbackToActiveAddon(request, packageName);
|
950
|
+
if (activeAddon) {
|
951
|
+
return activeAddon;
|
978
952
|
}
|
979
953
|
}
|
980
954
|
let logicalLocation = this.reverseSearchAppTree(pkg, request.fromFile);
|
@@ -998,7 +972,7 @@ class Resolver {
|
|
998
972
|
return logTransition('fallbackResolve: non-relative appJsMatch', request, appJSMatch);
|
999
973
|
}
|
1000
974
|
}
|
1001
|
-
if (pkg.needsLooseResolving() && ((
|
975
|
+
if (pkg.needsLooseResolving() && ((_b = (_a = request.meta) === null || _a === void 0 ? void 0 : _a.runtimeFallback) !== null && _b !== void 0 ? _b : true)) {
|
1002
976
|
// auto-upgraded packages can fall back to attempting to find dependencies at
|
1003
977
|
// runtime. Native v2 packages can only get this behavior in the
|
1004
978
|
// isExplicitlyExternal case above because they need to explicitly ask for
|
@@ -1017,6 +991,54 @@ class Resolver {
|
|
1017
991
|
// non-resolvable, which will presumably cause a static build error in stage3.
|
1018
992
|
return logTransition('fallbackResolve final exit', request);
|
1019
993
|
}
|
994
|
+
restoreRehomedRequest(pkg, request) {
|
995
|
+
var _a;
|
996
|
+
// meta.originalFromFile gets set when we want to try to rehome a request
|
997
|
+
// but then come back to the original location here in the fallback when the
|
998
|
+
// rehomed request fails
|
999
|
+
let movedPkg = this.packageCache.maybeMoved(pkg);
|
1000
|
+
if (movedPkg !== pkg) {
|
1001
|
+
let originalFromFile = (_a = request.meta) === null || _a === void 0 ? void 0 : _a.originalFromFile;
|
1002
|
+
if (typeof originalFromFile !== 'string') {
|
1003
|
+
throw new Error(`bug: embroider resolver's meta is not propagating`);
|
1004
|
+
}
|
1005
|
+
request = request.rehome(originalFromFile);
|
1006
|
+
pkg = movedPkg;
|
1007
|
+
}
|
1008
|
+
return { pkg, request };
|
1009
|
+
}
|
1010
|
+
async relativeFallbackResolve(pkg, request) {
|
1011
|
+
let withinEngine = this.engineConfig(pkg.name);
|
1012
|
+
if (withinEngine) {
|
1013
|
+
// it's a relative import inside an engine (which also means app), which
|
1014
|
+
// means we may need to satisfy the request via app tree merging.
|
1015
|
+
let logicalName = engineRelativeName(pkg, (0, path_1.resolve)((0, path_1.dirname)(request.fromFile), request.specifier));
|
1016
|
+
if (!logicalName) {
|
1017
|
+
return logTransition('fallbackResolve: relative failure because this file is not externally accessible', request);
|
1018
|
+
}
|
1019
|
+
let appJSMatch = await this.searchAppTree(request, withinEngine, logicalName);
|
1020
|
+
if (appJSMatch) {
|
1021
|
+
return logTransition('fallbackResolve: relative appJsMatch', request, appJSMatch);
|
1022
|
+
}
|
1023
|
+
else {
|
1024
|
+
return logTransition('fallbackResolve: relative appJs search failure', request);
|
1025
|
+
}
|
1026
|
+
}
|
1027
|
+
else {
|
1028
|
+
// nothing else to do for relative imports
|
1029
|
+
return logTransition('fallbackResolve: relative failure', request);
|
1030
|
+
}
|
1031
|
+
}
|
1032
|
+
maybeFallbackToActiveAddon(request, requestedPackageName) {
|
1033
|
+
// auto-upgraded packages can fall back to the set of known active addons
|
1034
|
+
let addon = this.locateActiveAddon(requestedPackageName);
|
1035
|
+
if (addon) {
|
1036
|
+
const rehomed = request.rehome(addon.canResolveFromFile);
|
1037
|
+
if (rehomed !== request) {
|
1038
|
+
return logTransition(`activeAddons`, request, rehomed);
|
1039
|
+
}
|
1040
|
+
}
|
1041
|
+
}
|
1020
1042
|
getEntryFromMergeMap(inEngineSpecifier, root) {
|
1021
1043
|
var _a;
|
1022
1044
|
let entry;
|