@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embroider/core",
3
- "version": "3.4.15-unstable.eb93cd5",
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.1.1",
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.6-unstable.eb93cd5",
45
- "@embroider/reverse-exports": "0.1.1-unstable.eb93cd5",
46
- "@embroider/shared-internals": "2.6.3-unstable.eb93cd5"
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, Options as ResolverOptions, ModuleRequest, Resolution } from './module-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,qDAAoG;AAA3F,2GAAA,QAAQ,OAAA;AACjB,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, Options as ResolverOptions, ModuleRequest, Resolution } from './module-resolver';\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"]}
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"]}
@@ -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}: ${(0, filesize_1.filesize)(bytes, {})}`)
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;AAC9B,uCAAoC;AAEpC,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,IAAA,mBAAQ,EAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;aAC3D,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';\nimport { filesize } from 'filesize';\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}: ${filesize(bytes, {})}`)\n .join('\\n')\n );\n return await this.concat.end();\n }\n}\n"]}
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"]}
@@ -1,39 +1,6 @@
1
1
  import type { Package } from '@embroider/shared-internals';
2
2
  import { RewrittenPackageCache } from '@embroider/shared-internals';
3
- import type UserOptions from './options';
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;
@@ -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
- // if (pkg.root === this.options.engines[0].root && request.specifier === `${pkg.name}/environment/config`) {
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, _c;
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 (!pkg) {
929
- return logTransition('no identifiable owningPackage', request);
925
+ if (pkg) {
926
+ ({ pkg, request } = this.restoreRehomedRequest(pkg, request));
930
927
  }
931
- // meta.originalFromFile gets set when we want to try to rehome a request
932
- // but then come back to the original location here in the fallback when the
933
- // rehomed request fails
934
- let movedPkg = this.packageCache.maybeMoved(pkg);
935
- if (movedPkg !== pkg) {
936
- let originalFromFile = (_a = request.meta) === null || _a === void 0 ? void 0 : _a.originalFromFile;
937
- if (typeof originalFromFile !== 'string') {
938
- throw new Error(`bug: embroider resolver's meta is not propagating`);
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
- request = request.rehome(originalFromFile);
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
- let withinEngine = this.engineConfig(pkg.name);
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 addon = this.locateActiveAddon(packageName);
973
- if (addon) {
974
- const rehomed = request.rehome(addon.canResolveFromFile);
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() && ((_c = (_b = request.meta) === null || _b === void 0 ? void 0 : _b.runtimeFallback) !== null && _c !== void 0 ? _c : true)) {
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;