@embroider/core 2.1.1 → 2.1.2-unstable.3a232cc

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.
Files changed (73) hide show
  1. package/package.json +3 -4
  2. package/src/app-differ.d.ts +1 -1
  3. package/src/app-differ.js +21 -22
  4. package/src/app-differ.js.map +1 -1
  5. package/src/app-files.d.ts +1 -2
  6. package/src/app-files.js +0 -7
  7. package/src/app-files.js.map +1 -1
  8. package/src/app.d.ts +9 -7
  9. package/src/app.js +32 -46
  10. package/src/app.js.map +1 -1
  11. package/src/describe-exports.d.ts +0 -1
  12. package/src/describe-exports.js +8 -9
  13. package/src/describe-exports.js.map +1 -1
  14. package/src/index.d.ts +3 -0
  15. package/src/index.js +5 -1
  16. package/src/index.js.map +1 -1
  17. package/src/module-resolver.d.ts +66 -25
  18. package/src/module-resolver.js +698 -131
  19. package/src/module-resolver.js.map +1 -1
  20. package/src/options.d.ts +0 -1
  21. package/src/options.js.map +1 -1
  22. package/src/virtual-content.d.ts +9 -0
  23. package/src/virtual-content.js +131 -0
  24. package/src/virtual-content.js.map +1 -0
  25. package/src/wait-for-trees.js.map +1 -1
  26. package/src/babel-plugin-adjust-imports.d.ts +0 -31
  27. package/src/babel-plugin-adjust-imports.js +0 -224
  28. package/src/babel-plugin-adjust-imports.js.map +0 -1
  29. package/src/babel-plugin-inline-hbs-deps-node.d.ts +0 -14
  30. package/src/babel-plugin-inline-hbs-deps-node.js +0 -27
  31. package/src/babel-plugin-inline-hbs-deps-node.js.map +0 -1
  32. package/src/babel-plugin-inline-hbs-deps.d.ts +0 -10
  33. package/src/babel-plugin-inline-hbs-deps.js +0 -134
  34. package/src/babel-plugin-inline-hbs-deps.js.map +0 -1
  35. package/src/babel-plugin-inline-hbs-node.d.ts +0 -7
  36. package/src/babel-plugin-inline-hbs-node.js +0 -15
  37. package/src/babel-plugin-inline-hbs-node.js.map +0 -1
  38. package/src/babel-plugin-inline-hbs.d.ts +0 -24
  39. package/src/babel-plugin-inline-hbs.js +0 -142
  40. package/src/babel-plugin-inline-hbs.js.map +0 -1
  41. package/src/babel-plugin-stage1-inline-hbs-node.d.ts +0 -12
  42. package/src/babel-plugin-stage1-inline-hbs-node.js +0 -9
  43. package/src/babel-plugin-stage1-inline-hbs-node.js.map +0 -1
  44. package/src/babel-plugin-stage1-inline-hbs.d.ts +0 -9
  45. package/src/babel-plugin-stage1-inline-hbs.js +0 -96
  46. package/src/babel-plugin-stage1-inline-hbs.js.map +0 -1
  47. package/src/browser-index.d.ts +0 -1
  48. package/src/browser-index.js +0 -6
  49. package/src/browser-index.js.map +0 -1
  50. package/src/ember-template-compiler-types.d.ts +0 -41
  51. package/src/ember-template-compiler-types.js +0 -3
  52. package/src/ember-template-compiler-types.js.map +0 -1
  53. package/src/load-ember-template-compiler.d.ts +0 -6
  54. package/src/load-ember-template-compiler.js +0 -57
  55. package/src/load-ember-template-compiler.js.map +0 -1
  56. package/src/mini-modules-polyfill.d.ts +0 -12
  57. package/src/mini-modules-polyfill.js +0 -80
  58. package/src/mini-modules-polyfill.js.map +0 -1
  59. package/src/patch-template-compiler.d.ts +0 -1
  60. package/src/patch-template-compiler.js +0 -176
  61. package/src/patch-template-compiler.js.map +0 -1
  62. package/src/resolver-plugin.d.ts +0 -3
  63. package/src/resolver-plugin.js +0 -53
  64. package/src/resolver-plugin.js.map +0 -1
  65. package/src/resolver.d.ts +0 -14
  66. package/src/resolver.js +0 -3
  67. package/src/resolver.js.map +0 -1
  68. package/src/template-compiler-common.d.ts +0 -70
  69. package/src/template-compiler-common.js +0 -176
  70. package/src/template-compiler-common.js.map +0 -1
  71. package/src/template-compiler-node.d.ts +0 -17
  72. package/src/template-compiler-node.js +0 -32
  73. package/src/template-compiler-node.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embroider/core",
3
- "version": "2.1.1",
3
+ "version": "2.1.2-unstable.3a232cc",
4
4
  "private": false,
5
5
  "description": "A build system for EmberJS applications.",
6
6
  "repository": {
@@ -26,10 +26,9 @@
26
26
  "@babel/plugin-transform-runtime": "^7.14.5",
27
27
  "@babel/runtime": "^7.14.5",
28
28
  "@babel/traverse": "^7.14.5",
29
- "@embroider/macros": "1.10.0",
30
- "@embroider/shared-internals": "2.0.0",
29
+ "@embroider/macros": "1.10.1-unstable.3a232cc",
30
+ "@embroider/shared-internals": "2.0.1-unstable.3a232cc",
31
31
  "assert-never": "^1.2.1",
32
- "babel-import-util": "^1.1.0",
33
32
  "babel-plugin-ember-template-compilation": "^2.0.0",
34
33
  "broccoli-node-api": "^1.7.0",
35
34
  "broccoli-persistent-filter": "^3.1.2",
@@ -6,7 +6,7 @@ export default class AppDiffer {
6
6
  private differ;
7
7
  private sources;
8
8
  private firstFastbootTree;
9
- readonly files: Map<string, string | null>;
9
+ readonly files: Set<string>;
10
10
  isFastbootOnly: Map<string, boolean>;
11
11
  constructor(outputPath: string, ownAppJSDir: string, activeAddonDescendants: AddonPackage[], fastbootEnabled?: boolean, ownFastbootJSDir?: string | undefined, babelParserConfig?: TransformOptions | undefined);
12
12
  update(): void;
package/src/app-differ.js CHANGED
@@ -21,13 +21,8 @@ class AppDiffer {
21
21
  this.outputPath = outputPath;
22
22
  this.babelParserConfig = babelParserConfig;
23
23
  this.firstFastbootTree = Infinity;
24
- // maps from each filename in the app to the original directory from whence it
25
- // came, if it came from an addon. The mapping allows us to preserve
26
- // resolution semantics so that each of the app files can still resolve
27
- // relative to where it was authored.
28
- //
29
- // files authored within the app map to null
30
- this.files = new Map();
24
+ // set of filenames logically located in the app
25
+ this.files = new Set();
31
26
  // true for files that are fastboot-only.
32
27
  this.isFastbootOnly = new Map();
33
28
  this.sources = activeAddonDescendants.map(addon => maybeSource(addon, 'app-js')).filter(Boolean);
@@ -96,8 +91,10 @@ class AppDiffer {
96
91
  this.isFastbootOnly.set(relativePath, sourceIndices[0] >= this.firstFastbootTree);
97
92
  let source = this.sources[sourceIndices[0]];
98
93
  let sourceFile = source.locate(relativePath);
99
- (0, fs_extra_1.copySync)(sourceFile, outputPath, { dereference: true });
100
- this.updateFiles(relativePath, source, sourceFile);
94
+ if (!source.isRelocated) {
95
+ (0, fs_extra_1.copySync)(sourceFile, outputPath, { dereference: true });
96
+ }
97
+ this.updateFiles(relativePath);
101
98
  }
102
99
  else {
103
100
  // we have both fastboot and non-fastboot files for this path.
@@ -110,10 +107,12 @@ class AppDiffer {
110
107
  let base = (0, path_1.basename)(relativePath);
111
108
  let browserDest = `_browser_${base}`;
112
109
  let fastbootDest = `_fastboot_${base}`;
113
- (0, fs_extra_1.copySync)(browserSourceFile, (0, path_1.join)(this.outputPath, dir, browserDest), { dereference: true });
114
- (0, fs_extra_1.copySync)(fastbootSourceFile, (0, path_1.join)(this.outputPath, dir, fastbootDest), { dereference: true });
115
- (0, fs_extra_1.writeFileSync)(outputPath, switcher(browserDest, fastbootDest, this.babelParserConfig, (0, fs_extra_1.readFileSync)(browserSourceFile, 'utf8')));
116
- this.updateFiles(relativePath, browserSrc, browserSourceFile);
110
+ if (!browserSrc.isRelocated && !fastbootSrc.isRelocated) {
111
+ (0, fs_extra_1.copySync)(browserSourceFile, (0, path_1.join)(this.outputPath, dir, browserDest), { dereference: true });
112
+ (0, fs_extra_1.copySync)(fastbootSourceFile, (0, path_1.join)(this.outputPath, dir, fastbootDest), { dereference: true });
113
+ (0, fs_extra_1.writeFileSync)(outputPath, switcher(browserDest, fastbootDest, this.babelParserConfig, (0, fs_extra_1.readFileSync)(browserSourceFile, 'utf8')));
114
+ }
115
+ this.updateFiles(relativePath);
117
116
  }
118
117
  break;
119
118
  default:
@@ -121,13 +120,8 @@ class AppDiffer {
121
120
  }
122
121
  }
123
122
  }
124
- updateFiles(relativePath, source, sourceFile) {
125
- if (source.isRelocated) {
126
- this.files.set(relativePath, sourceFile);
127
- }
128
- else {
129
- this.files.set(relativePath, null);
130
- }
123
+ updateFiles(relativePath) {
124
+ this.files.add(relativePath);
131
125
  }
132
126
  }
133
127
  exports.default = AppDiffer;
@@ -175,8 +169,13 @@ export const {{name}} = mod.{{name}};
175
169
  {{/each}}
176
170
  `);
177
171
  function switcher(browserDest, fastbootDest, babelParserConfig, browserSource) {
178
- let { names, hasDefaultExport } = (0, describe_exports_1.describeExports)(browserSource, babelParserConfig);
179
- return switcherTemplate({ fastbootDest, browserDest, names: [...names], hasDefaultExport });
172
+ let { names } = (0, describe_exports_1.describeExports)(browserSource, babelParserConfig);
173
+ return switcherTemplate({
174
+ fastbootDest,
175
+ browserDest,
176
+ names: [...names].filter(name => name !== 'default'),
177
+ hasDefaultExport: names.has('default'),
178
+ });
180
179
  }
181
180
  function maybeSource(addon, key) {
182
181
  let maybeFiles = addon.meta[key];
@@ -1 +1 @@
1
- {"version":3,"file":"app-differ.js","sourceRoot":"","sources":["app-differ.ts"],"names":[],"mappings":";;;;;AACA,wEAA6D;AAC7D,0DAAiC;AACjC,+BAAwD;AACxD,uCAAgH;AAChH,yCAAmC;AACnC,gEAAuC;AACvC,yDAAqD;AACrD,mDAA0C;AAE1C,2BAA8B;AAC9B,+BAA8B;AAE9B,MAAqB,SAAS;IAgB5B,YACU,UAAkB,EAC1B,WAAmB,EACnB,sBAAsC;IACtC,wEAAwE;IACxE,4EAA4E;IAC5E,eAAe,GAAG,KAAK,EACvB,gBAAqC,EAC7B,iBAAgD;QAPhD,eAAU,GAAV,UAAU,CAAQ;QAOlB,sBAAiB,GAAjB,iBAAiB,CAA+B;QArBlD,sBAAiB,GAAG,QAAQ,CAAC;QAErC,8EAA8E;QAC9E,oEAAoE;QACpE,uEAAuE;QACvE,qCAAqC;QACrC,EAAE;QACF,4CAA4C;QACnC,UAAK,GAA+B,IAAI,GAAG,EAAE,CAAC;QAEvD,yCAAyC;QACzC,mBAAc,GAAyB,IAAI,GAAG,EAAE,CAAC;QAY/C,IAAI,CAAC,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;QAE7G,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,SAAS,EAAE,IAAI;YACf,IAAI;gBACF,OAAO,mBAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACvC,CAAC;YACD,WAAW,EAAE,KAAK;YAClB,MAAM,CAAC,YAAoB;gBACzB,OAAO,IAAA,cAAO,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAC5C,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,EAAE;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,yBAAa,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC3D,OAAO;SACR;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7C,KAAK,IAAI,KAAK,IAAI,sBAAsB,EAAE;YACxC,IAAI,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC3B;SACF;QACD,IAAI,gBAAgB,EAAE;YACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,SAAS,EAAE,IAAI;gBACf,IAAI;oBACF,OAAO,mBAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBAC5C,CAAC;gBACD,WAAW,EAAE,KAAK;gBAClB,MAAM,CAAC,YAAY;oBACjB,OAAO,IAAA,cAAO,EAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;gBACjD,CAAC;aACF,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,yBAAa,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,MAAM;QACJ,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5C,IAAA,gBAAK,EAAC,iCAAiC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACrD,KAAK,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,GAAG,EAAE;YACzC,IAAI,UAAU,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YACrD,QAAQ,SAAS,EAAE;gBACjB,KAAK,QAAQ;oBACX,IAAA,qBAAU,EAAC,UAAU,CAAC,CAAC;oBACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBAChC,MAAM;gBACR,KAAK,OAAO;oBACV,IAAA,oBAAS,EAAC,UAAU,CAAC,CAAC;oBACtB,MAAM;gBACR,KAAK,OAAO;oBACV,IAAA,qBAAU,EAAC,UAAU,CAAC,CAAC;oBACvB,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAA,qBAAU,EAAC,UAAU,CAAC,CAAC;gBACzB,yBAAyB;gBACzB,KAAK,QAAQ;oBACX,IAAI,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;oBAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC9B,mEAAmE;wBACnE,gEAAgE;wBAChE,mEAAmE;wBACnE,mEAAmE;wBACnE,2BAA2B;wBAC3B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC;wBAClF,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC5C,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;wBAC7C,IAAA,mBAAQ,EAAC,UAAU,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;wBACxD,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;qBACpD;yBAAM;wBACL,8DAA8D;wBAC9D,oEAAoE;wBACpE,gBAAgB;wBAChB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;wBAC7C,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;wBACxE,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAChF,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CACzB,CAAC;wBACF,IAAI,GAAG,GAAG,IAAA,cAAO,EAAC,YAAY,CAAC,CAAC;wBAChC,IAAI,IAAI,GAAG,IAAA,eAAQ,EAAC,YAAY,CAAC,CAAC;wBAClC,IAAI,WAAW,GAAG,YAAY,IAAI,EAAE,CAAC;wBACrC,IAAI,YAAY,GAAG,aAAa,IAAI,EAAE,CAAC;wBACvC,IAAA,mBAAQ,EAAC,iBAAiB,EAAE,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC5F,IAAA,mBAAQ,EAAC,kBAAkB,EAAE,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC9F,IAAA,wBAAa,EACX,UAAU,EACV,QAAQ,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,iBAAkB,EAAE,IAAA,uBAAY,EAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CACtG,CAAC;wBACF,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;qBAC/D;oBACD,MAAM;gBACR;oBACE,IAAA,sBAAW,EAAC,SAAS,CAAC,CAAC;aAC1B;SACF;IACH,CAAC;IAEO,WAAW,CAAC,YAAoB,EAAE,MAAc,EAAE,UAAkB;QAC1E,IAAI,MAAM,CAAC,WAAW,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;SAC1C;aAAM;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;SACpC;IACH,CAAC;CACF;AArID,4BAqIC;AAED,SAAS,WAAW,CAAC,OAAiB;IACpC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,aAAa,CAAC,iBAAyB;IAC9C,OAAO,SAAS,cAAc,CAAC,OAAiB;QAC9C,IAAI,UAAU,EAAE,cAAc,CAAC;QAC/B,KAAK,IAAI,EAAE,IAAI,OAAO,EAAE;YACtB,IAAI,EAAE,GAAG,iBAAiB,EAAE;gBAC1B,UAAU,GAAG,EAAE,CAAC;aACjB;iBAAM;gBACL,cAAc,GAAG,EAAE,CAAC;aACrB;SACF;QACD,IAAI,UAAU,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,EAAE;YAChD,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;SACrC;aAAM,IAAI,UAAU,IAAI,IAAI,EAAE;YAC7B,OAAO,CAAC,UAAU,CAAC,CAAC;SACrB;aAAM,IAAI,cAAc,IAAI,IAAI,EAAE;YACjC,OAAO,CAAC,cAAc,CAAC,CAAC;SACzB;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;SACjF;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;;;;;;CAchC,CAAkH,CAAC;AAEpH,SAAS,QAAQ,CACf,WAAmB,EACnB,YAAoB,EACpB,iBAAmC,EACnC,aAAqB;IAErB,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAA,kCAAe,EAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IACpF,OAAO,gBAAgB,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC9F,CAAC;AAYD,SAAS,WAAW,CAAC,KAAmB,EAAE,GAA6B;IACrE,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,UAAU,EAAE;QACd,IAAI,KAAK,GAAG,UAAU,CAAC;QACvB,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,UAAU;YAC3B,IAAI;gBACF,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,EAAE;oBAChE,IAAI;wBACF,IAAI,IAAI,GAAG,IAAA,aAAQ,EAAC,IAAA,cAAO,EAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;wBACvD,OAAO;4BACL,YAAY,EAAE,wBAAwB,CAAC,YAAY,EAAE;gCACnD,6CAA6C;gCAC7C,KAAK,CAAC,IAAI;gCACV,GAAG;6BACJ,CAAC;4BACF,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,WAAW;gCACT,OAAO,KAAK,CAAC;4BACf,CAAC;yBACF,CAAC;qBACH;oBAAC,OAAO,GAAG,EAAE;wBACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;4BACzB,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,IAAI,uBAAuB,YAAY,mBAAmB,GAAG,gCAAgC,CACvG,CAAC;yBACH;wBACD,MAAM,GAAG,CAAC;qBACX;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YACD,WAAW,EAAE,IAAI;YACjB,MAAM,CAAC,YAAoB;gBACzB,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC;gBAC1C,IAAI,CAAC,QAAQ,EAAE;oBACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,YAAY,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBACnF;gBACD,OAAO,IAAA,cAAO,EAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACvC,CAAC;SACF,CAAC;KACH;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAgB,EAAE,SAAgB;IAClE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAA,aAAM,EAAC,SAAS,CAAC,KAAK,QAAQ,iCAAiC,CAAC,CAAC;KACrF;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC","sourcesContent":["import { AddonPackage } from '@embroider/shared-internals';\nimport MultiTreeDiff, { InputTree } from './multi-tree-diff';\nimport walkSync from 'walk-sync';\nimport { join, basename, dirname, resolve } from 'path';\nimport { mkdirpSync, unlinkSync, rmdirSync, removeSync, copySync, writeFileSync, readFileSync } from 'fs-extra';\nimport { debug } from './messages';\nimport assertNever from 'assert-never';\nimport { describeExports } from './describe-exports';\nimport { compile } from './js-handlebars';\nimport { TransformOptions } from '@babel/core';\nimport { statSync } from 'fs';\nimport { format } from 'util';\n\nexport default class AppDiffer {\n private differ: MultiTreeDiff;\n private sources: Source[];\n private firstFastbootTree = Infinity;\n\n // maps from each filename in the app to the original directory from whence it\n // came, if it came from an addon. The mapping allows us to preserve\n // resolution semantics so that each of the app files can still resolve\n // relative to where it was authored.\n //\n // files authored within the app map to null\n readonly files: Map<string, string | null> = new Map();\n\n // true for files that are fastboot-only.\n isFastbootOnly: Map<string, boolean> = new Map();\n\n constructor(\n private outputPath: string,\n ownAppJSDir: string,\n activeAddonDescendants: AddonPackage[],\n // arguments below this point are only needed in fastboot mode. Fastboot\n // makes this pretty messy because fastboot trees all merge into the app 🤮.\n fastbootEnabled = false,\n ownFastbootJSDir?: string | undefined,\n private babelParserConfig?: TransformOptions | undefined\n ) {\n this.sources = activeAddonDescendants.map(addon => maybeSource(addon, 'app-js')).filter(Boolean) as Source[];\n\n this.sources.push({\n mayChange: true,\n walk() {\n return walkSync.entries(ownAppJSDir);\n },\n isRelocated: false,\n locate(relativePath: string) {\n return resolve(ownAppJSDir, relativePath);\n },\n });\n\n if (!fastbootEnabled) {\n this.differ = new MultiTreeDiff(this.sources, lastOneWins);\n return;\n }\n\n this.firstFastbootTree = this.sources.length;\n for (let addon of activeAddonDescendants) {\n let source = maybeSource(addon, 'fastboot-js');\n if (source) {\n this.sources.push(source);\n }\n }\n if (ownFastbootJSDir) {\n this.sources.push({\n mayChange: true,\n walk() {\n return walkSync.entries(ownFastbootJSDir);\n },\n isRelocated: false,\n locate(relativePath) {\n return resolve(ownFastbootJSDir, relativePath);\n },\n });\n }\n this.differ = new MultiTreeDiff(this.sources, fastbootMerge(this.firstFastbootTree));\n }\n\n update() {\n let { ops, sources } = this.differ.update();\n debug(`app-differ operations count: %s`, ops.length);\n for (let [operation, relativePath] of ops) {\n let outputPath = join(this.outputPath, relativePath);\n switch (operation) {\n case 'unlink':\n unlinkSync(outputPath);\n this.files.delete(relativePath);\n break;\n case 'rmdir':\n rmdirSync(outputPath);\n break;\n case 'mkdir':\n mkdirpSync(outputPath);\n break;\n case 'change':\n removeSync(outputPath);\n // deliberate fallthrough\n case 'create':\n let sourceIndices = sources.get(relativePath)!;\n if (sourceIndices.length === 1) {\n // a single file won. whether it's fastboot or non-fastboot doesn't\n // actually change what we do here. It gets emitted in the app's\n // namespace (if it's fastboot-only, non-fastboot code shouldn't be\n // trying to import it anyway, because that would have already been\n // an error pre-embroider).\n this.isFastbootOnly.set(relativePath, sourceIndices[0] >= this.firstFastbootTree);\n let source = this.sources[sourceIndices[0]];\n let sourceFile = source.locate(relativePath);\n copySync(sourceFile, outputPath, { dereference: true });\n this.updateFiles(relativePath, source, sourceFile);\n } else {\n // we have both fastboot and non-fastboot files for this path.\n // Because of the way fastbootMerge is written, the first one is the\n // non-fastboot.\n this.isFastbootOnly.set(relativePath, false);\n let [browserSrc, fastbootSrc] = sourceIndices.map(i => this.sources[i]);\n let [browserSourceFile, fastbootSourceFile] = [browserSrc, fastbootSrc].map(src =>\n src.locate(relativePath)\n );\n let dir = dirname(relativePath);\n let base = basename(relativePath);\n let browserDest = `_browser_${base}`;\n let fastbootDest = `_fastboot_${base}`;\n copySync(browserSourceFile, join(this.outputPath, dir, browserDest), { dereference: true });\n copySync(fastbootSourceFile, join(this.outputPath, dir, fastbootDest), { dereference: true });\n writeFileSync(\n outputPath,\n switcher(browserDest, fastbootDest, this.babelParserConfig!, readFileSync(browserSourceFile, 'utf8'))\n );\n this.updateFiles(relativePath, browserSrc, browserSourceFile);\n }\n break;\n default:\n assertNever(operation);\n }\n }\n }\n\n private updateFiles(relativePath: string, source: Source, sourceFile: string) {\n if (source.isRelocated) {\n this.files.set(relativePath, sourceFile);\n } else {\n this.files.set(relativePath, null);\n }\n }\n}\n\nfunction lastOneWins(treeIds: number[]) {\n return treeIds.slice(-1);\n}\n\nfunction fastbootMerge(firstFastbootTree: number) {\n return function _fastbootMerge(treeIds: number[]): number[] {\n let mainWinner, fastbootWinner;\n for (let id of treeIds) {\n if (id < firstFastbootTree) {\n mainWinner = id;\n } else {\n fastbootWinner = id;\n }\n }\n if (mainWinner != null && fastbootWinner != null) {\n return [mainWinner, fastbootWinner];\n } else if (mainWinner != null) {\n return [mainWinner];\n } else if (fastbootWinner != null) {\n return [fastbootWinner];\n } else {\n throw new Error(`bug: should always have at least one winner in fastbootMerge`);\n }\n };\n}\n\nconst switcherTemplate = compile(`\nimport { macroCondition, getGlobalConfig, importSync } from '@embroider/macros';\nlet mod;\nif (macroCondition(getGlobalConfig().fastboot?.isRunning)){\n mod = importSync(\"./{{js-string-escape fastbootDest}}\");\n} else {\n mod = importSync(\"./{{js-string-escape browserDest}}\");\n}\n{{#if hasDefaultExport}}\nexport default mod.default;\n{{/if}}\n{{#each names as |name|}}\nexport const {{name}} = mod.{{name}};\n{{/each}}\n`) as (params: { fastbootDest: string; browserDest: string; names: string[]; hasDefaultExport: boolean }) => string;\n\nfunction switcher(\n browserDest: string,\n fastbootDest: string,\n babelParserConfig: TransformOptions,\n browserSource: string\n): string {\n let { names, hasDefaultExport } = describeExports(browserSource, babelParserConfig);\n return switcherTemplate({ fastbootDest, browserDest, names: [...names], hasDefaultExport });\n}\n\ninterface Source extends InputTree {\n // find the real on disk location of the file that is presented externally as\n // `relativePath`\n locate(relativePath: string): string;\n\n // true if this source relocates its file out of their original package,\n // meaning we will need to track them in order to adjust package resolution\n isRelocated: boolean;\n}\n\nfunction maybeSource(addon: AddonPackage, key: 'app-js' | 'fastboot-js'): Source | undefined {\n let maybeFiles = addon.meta[key];\n if (maybeFiles) {\n let files = maybeFiles;\n return {\n mayChange: addon.mayRebuild,\n walk() {\n return Object.entries(files).map(([externalName, internalName]) => {\n try {\n let stat = statSync(resolve(addon.root, internalName));\n return {\n relativePath: withoutMandatoryDotSlash(externalName, [\n 'in package.json at %s in key ember-addon.%s',\n addon.root,\n key,\n ]),\n mode: stat.mode,\n size: stat.size,\n mtime: stat.mtime,\n isDirectory() {\n return false;\n },\n };\n } catch (err) {\n if (err.code === 'ENOENT') {\n throw new Error(\n `${addon.name}/package.json lists ${internalName} in ember-addon.${key}, but that file does not exist`\n );\n }\n throw err;\n }\n });\n },\n isRelocated: true,\n locate(relativePath: string) {\n let internal = files['./' + relativePath];\n if (!internal) {\n throw new Error(`bug: couldn't find ${relativePath} in ${JSON.stringify(files)}`);\n }\n return resolve(addon.root, internal);\n },\n };\n }\n}\n\nfunction withoutMandatoryDotSlash(filename: string, debugInfo: any[]): string {\n if (!filename.startsWith('./')) {\n throw new Error(`${format(debugInfo)}: ${filename} is required to start with \"./\"`);\n }\n return filename.slice(2);\n}\n"]}
1
+ {"version":3,"file":"app-differ.js","sourceRoot":"","sources":["app-differ.ts"],"names":[],"mappings":"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","sourcesContent":["import { AddonPackage } from '@embroider/shared-internals';\nimport MultiTreeDiff, { InputTree } from './multi-tree-diff';\nimport walkSync from 'walk-sync';\nimport { join, basename, dirname, resolve } from 'path';\nimport { mkdirpSync, unlinkSync, rmdirSync, removeSync, copySync, writeFileSync, readFileSync } from 'fs-extra';\nimport { debug } from './messages';\nimport assertNever from 'assert-never';\nimport { describeExports } from './describe-exports';\nimport { compile } from './js-handlebars';\nimport { TransformOptions } from '@babel/core';\nimport { statSync } from 'fs';\nimport { format } from 'util';\n\nexport default class AppDiffer {\n private differ: MultiTreeDiff;\n private sources: Source[];\n private firstFastbootTree = Infinity;\n\n // set of filenames logically located in the app\n readonly files: Set<string> = new Set();\n\n // true for files that are fastboot-only.\n isFastbootOnly: Map<string, boolean> = new Map();\n\n constructor(\n private outputPath: string,\n ownAppJSDir: string,\n activeAddonDescendants: AddonPackage[],\n // arguments below this point are only needed in fastboot mode. Fastboot\n // makes this pretty messy because fastboot trees all merge into the app 🤮.\n fastbootEnabled = false,\n ownFastbootJSDir?: string | undefined,\n private babelParserConfig?: TransformOptions | undefined\n ) {\n this.sources = activeAddonDescendants.map(addon => maybeSource(addon, 'app-js')).filter(Boolean) as Source[];\n\n this.sources.push({\n mayChange: true,\n walk() {\n return walkSync.entries(ownAppJSDir);\n },\n isRelocated: false,\n locate(relativePath: string) {\n return resolve(ownAppJSDir, relativePath);\n },\n });\n\n if (!fastbootEnabled) {\n this.differ = new MultiTreeDiff(this.sources, lastOneWins);\n return;\n }\n\n this.firstFastbootTree = this.sources.length;\n for (let addon of activeAddonDescendants) {\n let source = maybeSource(addon, 'fastboot-js');\n if (source) {\n this.sources.push(source);\n }\n }\n if (ownFastbootJSDir) {\n this.sources.push({\n mayChange: true,\n walk() {\n return walkSync.entries(ownFastbootJSDir);\n },\n isRelocated: false,\n locate(relativePath) {\n return resolve(ownFastbootJSDir, relativePath);\n },\n });\n }\n this.differ = new MultiTreeDiff(this.sources, fastbootMerge(this.firstFastbootTree));\n }\n\n update() {\n let { ops, sources } = this.differ.update();\n debug(`app-differ operations count: %s`, ops.length);\n for (let [operation, relativePath] of ops) {\n let outputPath = join(this.outputPath, relativePath);\n switch (operation) {\n case 'unlink':\n unlinkSync(outputPath);\n this.files.delete(relativePath);\n break;\n case 'rmdir':\n rmdirSync(outputPath);\n break;\n case 'mkdir':\n mkdirpSync(outputPath);\n break;\n case 'change':\n removeSync(outputPath);\n // deliberate fallthrough\n case 'create':\n let sourceIndices = sources.get(relativePath)!;\n if (sourceIndices.length === 1) {\n // a single file won. whether it's fastboot or non-fastboot doesn't\n // actually change what we do here. It gets emitted in the app's\n // namespace (if it's fastboot-only, non-fastboot code shouldn't be\n // trying to import it anyway, because that would have already been\n // an error pre-embroider).\n this.isFastbootOnly.set(relativePath, sourceIndices[0] >= this.firstFastbootTree);\n let source = this.sources[sourceIndices[0]];\n let sourceFile = source.locate(relativePath);\n if (!source.isRelocated) {\n copySync(sourceFile, outputPath, { dereference: true });\n }\n this.updateFiles(relativePath);\n } else {\n // we have both fastboot and non-fastboot files for this path.\n // Because of the way fastbootMerge is written, the first one is the\n // non-fastboot.\n this.isFastbootOnly.set(relativePath, false);\n let [browserSrc, fastbootSrc] = sourceIndices.map(i => this.sources[i]);\n let [browserSourceFile, fastbootSourceFile] = [browserSrc, fastbootSrc].map(src =>\n src.locate(relativePath)\n );\n let dir = dirname(relativePath);\n let base = basename(relativePath);\n let browserDest = `_browser_${base}`;\n let fastbootDest = `_fastboot_${base}`;\n if (!browserSrc.isRelocated && !fastbootSrc.isRelocated) {\n copySync(browserSourceFile, join(this.outputPath, dir, browserDest), { dereference: true });\n copySync(fastbootSourceFile, join(this.outputPath, dir, fastbootDest), { dereference: true });\n writeFileSync(\n outputPath,\n switcher(browserDest, fastbootDest, this.babelParserConfig!, readFileSync(browserSourceFile, 'utf8'))\n );\n }\n this.updateFiles(relativePath);\n }\n break;\n default:\n assertNever(operation);\n }\n }\n }\n\n private updateFiles(relativePath: string) {\n this.files.add(relativePath);\n }\n}\n\nfunction lastOneWins(treeIds: number[]) {\n return treeIds.slice(-1);\n}\n\nfunction fastbootMerge(firstFastbootTree: number) {\n return function _fastbootMerge(treeIds: number[]): number[] {\n let mainWinner, fastbootWinner;\n for (let id of treeIds) {\n if (id < firstFastbootTree) {\n mainWinner = id;\n } else {\n fastbootWinner = id;\n }\n }\n if (mainWinner != null && fastbootWinner != null) {\n return [mainWinner, fastbootWinner];\n } else if (mainWinner != null) {\n return [mainWinner];\n } else if (fastbootWinner != null) {\n return [fastbootWinner];\n } else {\n throw new Error(`bug: should always have at least one winner in fastbootMerge`);\n }\n };\n}\n\nconst switcherTemplate = compile(`\nimport { macroCondition, getGlobalConfig, importSync } from '@embroider/macros';\nlet mod;\nif (macroCondition(getGlobalConfig().fastboot?.isRunning)){\n mod = importSync(\"./{{js-string-escape fastbootDest}}\");\n} else {\n mod = importSync(\"./{{js-string-escape browserDest}}\");\n}\n{{#if hasDefaultExport}}\nexport default mod.default;\n{{/if}}\n{{#each names as |name|}}\nexport const {{name}} = mod.{{name}};\n{{/each}}\n`) as (params: { fastbootDest: string; browserDest: string; names: string[]; hasDefaultExport: boolean }) => string;\n\nfunction switcher(\n browserDest: string,\n fastbootDest: string,\n babelParserConfig: TransformOptions,\n browserSource: string\n): string {\n let { names } = describeExports(browserSource, babelParserConfig);\n return switcherTemplate({\n fastbootDest,\n browserDest,\n names: [...names].filter(name => name !== 'default'),\n hasDefaultExport: names.has('default'),\n });\n}\n\ninterface Source extends InputTree {\n // find the real on disk location of the file that is presented externally as\n // `relativePath`\n locate(relativePath: string): string;\n\n // true if this source relocates its file out of their original package,\n // meaning we will need to track them in order to adjust package resolution\n isRelocated: boolean;\n}\n\nfunction maybeSource(addon: AddonPackage, key: 'app-js' | 'fastboot-js'): Source | undefined {\n let maybeFiles = addon.meta[key];\n if (maybeFiles) {\n let files = maybeFiles;\n return {\n mayChange: addon.mayRebuild,\n walk() {\n return Object.entries(files).map(([externalName, internalName]) => {\n try {\n let stat = statSync(resolve(addon.root, internalName));\n return {\n relativePath: withoutMandatoryDotSlash(externalName, [\n 'in package.json at %s in key ember-addon.%s',\n addon.root,\n key,\n ]),\n mode: stat.mode,\n size: stat.size,\n mtime: stat.mtime,\n isDirectory() {\n return false;\n },\n };\n } catch (err) {\n if (err.code === 'ENOENT') {\n throw new Error(\n `${addon.name}/package.json lists ${internalName} in ember-addon.${key}, but that file does not exist`\n );\n }\n throw err;\n }\n });\n },\n isRelocated: true,\n locate(relativePath: string) {\n let internal = files['./' + relativePath];\n if (!internal) {\n throw new Error(`bug: couldn't find ${relativePath} in ${JSON.stringify(files)}`);\n }\n return resolve(addon.root, internal);\n },\n };\n }\n}\n\nfunction withoutMandatoryDotSlash(filename: string, debugInfo: any[]): string {\n if (!filename.startsWith('./')) {\n throw new Error(`${format(debugInfo)}: ${filename} is required to start with \"./\"`);\n }\n return filename.slice(2);\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { Package, AddonPackage } from '@embroider/shared-internals';
2
- import AppDiffer from './app-differ';
2
+ import type AppDiffer from './app-differ';
3
3
  export interface RouteFiles {
4
4
  route?: string;
5
5
  template?: string;
@@ -13,7 +13,6 @@ export declare class AppFiles {
13
13
  readonly modifiers: ReadonlyArray<string>;
14
14
  private perRoute;
15
15
  readonly otherAppFiles: ReadonlyArray<string>;
16
- readonly relocatedFiles: Map<string, string>;
17
16
  readonly isFastbootOnly: Map<string, boolean>;
18
17
  constructor(appDiffer: AppDiffer, resolvableExtensions: RegExp, podModulePrefix?: string);
19
18
  private handleClassicRouteFile;
package/src/app-files.js CHANGED
@@ -57,13 +57,6 @@ class AppFiles {
57
57
  this.helpers = helpers;
58
58
  this.modifiers = modifiers;
59
59
  this.otherAppFiles = otherAppFiles;
60
- let relocatedFiles = new Map();
61
- for (let [relativePath, owningPath] of appDiffer.files) {
62
- if (owningPath) {
63
- relocatedFiles.set(relativePath, owningPath);
64
- }
65
- }
66
- this.relocatedFiles = relocatedFiles;
67
60
  this.isFastbootOnly = appDiffer.isFastbootOnly;
68
61
  }
69
62
  handleClassicRouteFile(relativePath) {
@@ -1 +1 @@
1
- {"version":3,"file":"app-files.js","sourceRoot":"","sources":["app-files.ts"],"names":[],"mappings":"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","sourcesContent":["import { sep } from 'path';\nimport { Package, AddonPackage } from '@embroider/shared-internals';\nimport AppDiffer from './app-differ';\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 tests: ReadonlyArray<string>;\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 relocatedFiles: Map<string, string>;\n readonly isFastbootOnly: Map<string, boolean>;\n\n constructor(appDiffer: AppDiffer, resolvableExtensions: RegExp, podModulePrefix?: string) {\n let tests: string[] = [];\n let components: string[] = [];\n let helpers: string[] = [];\n let modifiers: string[] = [];\n let otherAppFiles: string[] = [];\n this.perRoute = { children: new Map() };\n for (let relativePath of appDiffer.files.keys()) {\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 tests.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('components/')) {\n // hbs files are resolvable, but not when they're used via co-location.\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 if (!relativePath.endsWith('.hbs') || relativePath.endsWith('/template.hbs')) {\n components.push(relativePath);\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 this.handleClassicRouteFile(relativePath) ||\n (podModulePrefix !== undefined && this.handlePodsRouteFile(relativePath, podModulePrefix))\n ) {\n continue;\n }\n\n otherAppFiles.push(relativePath);\n }\n this.tests = tests;\n this.components = components;\n this.helpers = helpers;\n this.modifiers = modifiers;\n this.otherAppFiles = otherAppFiles;\n\n let relocatedFiles: Map<string, string> = new Map();\n for (let [relativePath, owningPath] of appDiffer.files) {\n if (owningPath) {\n relocatedFiles.set(relativePath, owningPath);\n }\n }\n this.relocatedFiles = relocatedFiles;\n this.isFastbootOnly = appDiffer.isFastbootOnly;\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 EngineSummary {\n // the engine's own package\n package: Package;\n // the set of active addons in the engine\n addons: Set<AddonPackage>;\n // the parent engine, if any\n parent: EngineSummary | undefined;\n // where the engine's own V2 code comes from\n sourcePath: string;\n // where the engine gets built into, combining its own code with all its\n // addons\n destPath: string;\n // runtime name for the engine's own module namespace\n modulePrefix: string;\n // this is destPath but relative to the app itself\n appRelativePath: string;\n}\n\nexport interface Engine extends EngineSummary {\n appFiles: AppFiles;\n}\n"]}
1
+ {"version":3,"file":"app-files.js","sourceRoot":"","sources":["app-files.ts"],"names":[],"mappings":";;;AAAA,+BAA2B;AAW3B,MAAa,QAAQ;IASnB,YAAY,SAAoB,EAAE,oBAA4B,EAAE,eAAwB;QACtF,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,IAAI,UAAU,GAAa,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,SAAS,GAAa,EAAE,CAAC;QAC7B,IAAI,aAAa,GAAa,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QACxC,KAAK,IAAI,YAAY,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;YAC/C,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,UAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBAC5C,SAAS;aACV;YAED,IAAI,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBACjC,oEAAoE;gBACpE,4DAA4D;gBAC5D,SAAS;aACV;YAED,IAAI,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBACrC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzB,SAAS;aACV;YAED,IAAI,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;gBAC1C,uEAAuE;gBACvE,qEAAqE;gBACrE,mEAAmE;gBACnE,8CAA8C;gBAC9C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;oBAC5E,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;iBAC/B;gBACD,SAAS;aACV;YAED,IAAI,YAAY,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE;gBACpD,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC9B,SAAS;aACV;YAED,IAAI,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;gBACvC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC3B,SAAS;aACV;YAED,IAAI,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;gBACzC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC7B,SAAS;aACV;YAED,IACE,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC;gBACzC,CAAC,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,EAC1F;gBACA,SAAS;aACV;YAED,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAClC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;IACjD,CAAC;IAEO,sBAAsB,CAAC,YAAoB;QACjD,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1E,IAAI,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC5D,OAAO,KAAK,CAAC;SACd;QACD,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAwC,CAAC;QACtE,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;YACrB,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,KAAK,EAAE;gBACT,MAAM,GAAG,KAAK,CAAC;aAChB;iBAAM;gBACL,IAAI,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;gBACvC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACpC,MAAM,GAAG,QAAQ,CAAC;aACnB;SACF;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,mBAAmB,CAAC,YAAoB,EAAE,eAAuB;QACvE,IAAI,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAChE,OAAO,KAAK,CAAC;SACd;QACD,IAAI,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,8DAA8D;QAC9D,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEjB,KAAK,IAAI,OAAO,IAAI,QAAQ,EAAE;YAC5B,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,OAAO,EAAE;gBAC7B,OAAO,KAAK,CAAC;aACd;SACF;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;YACtB,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,KAAK,EAAE;gBACT,MAAM,GAAG,KAAK,CAAC;aAChB;iBAAM;gBACL,IAAI,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;gBACvC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACpC,MAAM,GAAG,QAAQ,CAAC;aACnB;SACF;QACD,MAAM,CAAC,IAA2C,CAAC,GAAG,YAAY,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AAnID,4BAmIC","sourcesContent":["import { sep } from 'path';\nimport { Package, AddonPackage } from '@embroider/shared-internals';\nimport type AppDiffer from './app-differ';\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 tests: ReadonlyArray<string>;\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\n constructor(appDiffer: AppDiffer, resolvableExtensions: RegExp, podModulePrefix?: string) {\n let tests: string[] = [];\n let components: string[] = [];\n let helpers: string[] = [];\n let modifiers: string[] = [];\n let otherAppFiles: string[] = [];\n this.perRoute = { children: new Map() };\n for (let relativePath of appDiffer.files.keys()) {\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 tests.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('components/')) {\n // hbs files are resolvable, but not when they're used via co-location.\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 if (!relativePath.endsWith('.hbs') || relativePath.endsWith('/template.hbs')) {\n components.push(relativePath);\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 this.handleClassicRouteFile(relativePath) ||\n (podModulePrefix !== undefined && this.handlePodsRouteFile(relativePath, podModulePrefix))\n ) {\n continue;\n }\n\n otherAppFiles.push(relativePath);\n }\n this.tests = tests;\n this.components = components;\n this.helpers = helpers;\n this.modifiers = modifiers;\n this.otherAppFiles = otherAppFiles;\n this.isFastbootOnly = appDiffer.isFastbootOnly;\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 EngineSummary {\n // the engine's own package\n package: Package;\n // the set of active addons in the engine\n addons: Set<AddonPackage>;\n // the parent engine, if any\n parent: EngineSummary | undefined;\n // where the engine's own V2 code comes from\n sourcePath: string;\n // where the engine gets built into, combining its own code with all its\n // addons\n destPath: string;\n // runtime name for the engine's own module namespace\n modulePrefix: string;\n // this is destPath but relative to the app itself\n appRelativePath: string;\n}\n\nexport interface Engine extends EngineSummary {\n appFiles: AppFiles;\n}\n"]}
package/src/app.d.ts CHANGED
@@ -3,11 +3,12 @@ import { OutputPaths } from './wait-for-trees';
3
3
  import { Asset } from './asset';
4
4
  import Options from './options';
5
5
  import { MacrosConfig } from '@embroider/macros/src/node';
6
- import { TransformOptions } from '@babel/core';
7
- import { Options as AdjustImportsOptions } from './babel-plugin-adjust-imports';
6
+ import { PluginItem, TransformOptions } from '@babel/core';
7
+ import { Options as ResolverConfig } from './module-resolver';
8
+ import { Engine } from './app-files';
8
9
  import type { Transform } from 'babel-plugin-ember-template-compilation';
9
10
  export declare type EmberENV = unknown;
10
- export interface AppAdapter<TreeNames> {
11
+ export interface AppAdapter<TreeNames, SpecificResolverConfig extends ResolverConfig = ResolverConfig> {
11
12
  readonly allActiveAddons: AddonPackage[];
12
13
  activeAddonChildren(pkg: Package): AddonPackage[];
13
14
  appJSSrcDir(treePaths: OutputPaths<TreeNames>): string;
@@ -21,9 +22,10 @@ export interface AppAdapter<TreeNames> {
21
22
  podModulePrefix(): string | undefined;
22
23
  rootURL(): string;
23
24
  templateCompilerPath(): string;
24
- resolverTransform(): Transform | undefined;
25
- adjustImportsOptions(): AdjustImportsOptions;
26
- adjustImportsOptionsPath(): string;
25
+ hbsTransforms(resolverConfig: SpecificResolverConfig): Transform[];
26
+ jsPlugins(resolverConfig: SpecificResolverConfig): PluginItem[];
27
+ resolverConfig(engines: Engine[]): SpecificResolverConfig;
28
+ resolvableExtensions(): string[];
27
29
  htmlbarsPlugins(): Transform[];
28
30
  babelConfig(): TransformOptions;
29
31
  babelMajorVersion(): 7;
@@ -52,7 +54,6 @@ export declare class AppBuilder<TreeNames> {
52
54
  private impliedAddonAssets;
53
55
  private babelParserConfig;
54
56
  private babelConfig;
55
- private adjustImportsPlugin;
56
57
  private insertEmberApp;
57
58
  private implicitScriptsAsset;
58
59
  private implicitStylesAsset;
@@ -78,6 +79,7 @@ export declare class AppBuilder<TreeNames> {
78
79
  private etcOptions;
79
80
  private get portableHints();
80
81
  private addBabelConfig;
82
+ private addResolverConfig;
81
83
  private shouldSplitRoute;
82
84
  private splitRoute;
83
85
  private topAppJSAsset;
package/src/app.js CHANGED
@@ -145,7 +145,7 @@ class AppBuilder {
145
145
  }
146
146
  }
147
147
  get resolvableExtensionsPattern() {
148
- return (0, shared_internals_1.extensionsPattern)(this.adapter.adjustImportsOptions().resolvableExtensions);
148
+ return (0, shared_internals_1.extensionsPattern)(this.adapter.resolvableExtensions());
149
149
  }
150
150
  impliedAssets(type, engine, emberENV) {
151
151
  let result = this.impliedAddonAssets(type, engine).map((sourcePath) => {
@@ -238,7 +238,7 @@ class AppBuilder {
238
238
  babel.plugins.push(require.resolve('@babel/plugin-syntax-dynamic-import'));
239
239
  return babel;
240
240
  }
241
- babelConfig(appFiles) {
241
+ babelConfig(resolverConfig) {
242
242
  let babel = (0, cloneDeep_1.default)(this.adapter.babelConfig());
243
243
  if (!babel.plugins) {
244
244
  babel.plugins = [];
@@ -248,7 +248,7 @@ class AppBuilder {
248
248
  babel.plugins.push(require.resolve('@babel/plugin-syntax-dynamic-import'));
249
249
  // https://github.com/webpack/webpack/issues/12154
250
250
  babel.plugins.push(require.resolve('./rename-require-plugin'));
251
- babel.plugins.push([require.resolve('babel-plugin-ember-template-compilation'), this.etcOptions()]);
251
+ babel.plugins.push([require.resolve('babel-plugin-ember-template-compilation'), this.etcOptions(resolverConfig)]);
252
252
  // this is @embroider/macros configured for full stage3 resolution
253
253
  babel.plugins.push(...this.macrosConfig.babelPluginConfig());
254
254
  let colocationOptions = {
@@ -285,7 +285,9 @@ class AppBuilder {
285
285
  require.resolve('@embroider/shared-internals/src/template-colocation-plugin'),
286
286
  colocationOptions,
287
287
  ]);
288
- babel.plugins.push(this.adjustImportsPlugin(appFiles));
288
+ for (let p of this.adapter.jsPlugins(resolverConfig)) {
289
+ babel.plugins.push(p);
290
+ }
289
291
  // we can use globally shared babel runtime by default
290
292
  babel.plugins.push([
291
293
  require.resolve('@babel/plugin-transform-runtime'),
@@ -295,23 +297,6 @@ class AppBuilder {
295
297
  addCachablePlugin(portable.config);
296
298
  return portable;
297
299
  }
298
- adjustImportsPlugin(engines) {
299
- let relocatedFiles = {};
300
- for (let { destPath, appFiles } of engines) {
301
- for (let [relativePath, originalPath] of appFiles.relocatedFiles) {
302
- relocatedFiles[(0, path_1.join)(destPath, relativePath)] = originalPath;
303
- }
304
- }
305
- let relocatedFilesPath = (0, path_1.join)(this.root, '_relocated_files.json');
306
- (0, fs_extra_1.writeFileSync)(relocatedFilesPath, JSON.stringify({ relocatedFiles }));
307
- return [
308
- require.resolve('./babel-plugin-adjust-imports'),
309
- {
310
- adjustImportsOptionsPath: this.adapter.adjustImportsOptionsPath(),
311
- relocatedFilesPath,
312
- },
313
- ];
314
- }
315
300
  insertEmberApp(asset, appFiles, prepared, emberENV) {
316
301
  let html = asset.html;
317
302
  if (this.fastbootConfig) {
@@ -508,9 +493,10 @@ class AppBuilder {
508
493
  .reverse()
509
494
  .forEach(a => a.differ.update());
510
495
  return this.appDiffers.map(a => {
511
- return Object.assign({}, a.engine, {
496
+ return {
497
+ ...a.engine,
512
498
  appFiles: new app_files_1.AppFiles(a.differ, this.resolvableExtensionsPattern, this.adapter.podModulePrefix()),
513
- });
499
+ };
514
500
  });
515
501
  }
516
502
  prepareAsset(asset, appFiles, prepared, emberENV) {
@@ -684,8 +670,6 @@ class AppBuilder {
684
670
  let emberENV = this.adapter.emberENV();
685
671
  let assets = this.gatherAssets(inputPaths);
686
672
  let finalAssets = await this.updateAssets(assets, appFiles, emberENV);
687
- let babelConfig = this.babelConfig(appFiles);
688
- this.addBabelConfig(babelConfig);
689
673
  let assetPaths = assets.map(asset => asset.relativePath);
690
674
  if (this.activeFastboot) {
691
675
  // when using fastboot, our own package.json needs to be in the output so fastboot can read it.
@@ -705,11 +689,10 @@ class AppBuilder {
705
689
  assets: assetPaths,
706
690
  babel: {
707
691
  filename: '_babel_config_.js',
708
- isParallelSafe: babelConfig.isParallelSafe,
692
+ isParallelSafe: true,
709
693
  majorVersion: this.adapter.babelMajorVersion(),
710
694
  fileFilter: '_babel_filter_.js',
711
695
  },
712
- 'resolvable-extensions': this.adapter.adjustImportsOptions().resolvableExtensions,
713
696
  'root-url': this.adapter.rootURL(),
714
697
  };
715
698
  if (!this.adapter.strictV2Format()) {
@@ -717,6 +700,10 @@ class AppBuilder {
717
700
  }
718
701
  let pkg = this.combinePackageJSON(meta);
719
702
  (0, fs_extra_1.writeFileSync)((0, path_1.join)(this.root, 'package.json'), JSON.stringify(pkg, null, 2), 'utf8');
703
+ let resolverConfig = this.adapter.resolverConfig(appFiles);
704
+ this.addResolverConfig(resolverConfig);
705
+ let babelConfig = this.babelConfig(resolverConfig);
706
+ this.addBabelConfig(babelConfig);
720
707
  }
721
708
  combinePackageJSON(meta) {
722
709
  let pkgLayers = [this.app.packageJSON];
@@ -729,16 +716,15 @@ class AppBuilder {
729
716
  pkgLayers.push({ keywords: ['ember-addon'], 'ember-addon': meta });
730
717
  return combinePackageJSON(...pkgLayers);
731
718
  }
732
- etcOptions() {
719
+ etcOptions(resolverConfig) {
733
720
  let transforms = this.adapter.htmlbarsPlugins();
734
721
  let { plugins: macroPlugins, setConfig } = node_1.MacrosConfig.transforms();
735
722
  setConfig(this.macrosConfig);
736
723
  for (let macroPlugin of macroPlugins) {
737
724
  transforms.push(macroPlugin);
738
725
  }
739
- let transform = this.adapter.resolverTransform();
740
- if (transform) {
741
- transforms.push(transform);
726
+ for (let t of this.adapter.hbsTransforms(resolverConfig)) {
727
+ transforms.push(t);
742
728
  }
743
729
  return {
744
730
  transforms,
@@ -770,6 +756,9 @@ class AppBuilder {
770
756
  (0, fs_extra_1.writeFileSync)((0, path_1.join)(this.root, '_babel_config_.js'), `module.exports = ${JSON.stringify(pconfig.config, null, 2)}`, 'utf8');
771
757
  (0, fs_extra_1.writeFileSync)((0, path_1.join)(this.root, '_babel_filter_.js'), babelFilterTemplate({ skipBabel: this.options.skipBabel, appRoot: this.root }), 'utf8');
772
758
  }
759
+ addResolverConfig(config) {
760
+ (0, fs_extra_1.outputJSONSync)((0, path_1.join)(this.root, '.embroider', 'resolver.json'), config);
761
+ }
773
762
  shouldSplitRoute(routeName) {
774
763
  return (!this.options.splitAtRoutes ||
775
764
  this.options.splitAtRoutes.find(pattern => {
@@ -916,16 +905,16 @@ class AppBuilder {
916
905
  }
917
906
  lazyRoutes.push({
918
907
  names: routeNames,
919
- path: this.importPaths(engine, routeEntrypoint, relativePath).buildtime,
908
+ path: this.importPaths(engine, routeEntrypoint).buildtime,
920
909
  });
921
910
  });
922
911
  }
923
912
  let [fastboot, nonFastboot] = (0, partition_1.default)(excludeDotFiles((0, flatten_1.default)(requiredAppFiles)), file => appFiles.isFastbootOnly.get(file));
924
- let amdModules = nonFastboot.map(file => this.importPaths(engine, file, relativePath));
925
- let fastbootOnlyAmdModules = fastboot.map(file => this.importPaths(engine, file, relativePath));
913
+ let amdModules = nonFastboot.map(file => this.importPaths(engine, file));
914
+ let fastbootOnlyAmdModules = fastboot.map(file => this.importPaths(engine, file));
926
915
  // this is a backward-compatibility feature: addons can force inclusion of
927
916
  // modules.
928
- this.gatherImplicitModules('implicit-modules', relativePath, engine, amdModules);
917
+ this.gatherImplicitModules('implicit-modules', engine, amdModules);
929
918
  let params = { amdModules, fastbootOnlyAmdModules, lazyRoutes, lazyEngines, eagerModules, styles };
930
919
  if (entryParams) {
931
920
  Object.assign(params, entryParams);
@@ -942,12 +931,11 @@ class AppBuilder {
942
931
  get modulePrefix() {
943
932
  return this.adapter.modulePrefix();
944
933
  }
945
- importPaths(engine, engineRelativePath, fromFile) {
946
- let appRelativePath = (0, path_1.join)(engine.appRelativePath, engineRelativePath);
934
+ importPaths(engine, engineRelativePath) {
947
935
  let noHBS = engineRelativePath.replace(this.resolvableExtensionsPattern, '').replace(/\.hbs$/, '');
948
936
  return {
949
937
  runtime: `${engine.modulePrefix}/${noHBS}`,
950
- buildtime: (0, shared_internals_1.explicitRelative)((0, path_1.dirname)(fromFile), appRelativePath),
938
+ buildtime: path_1.posix.join(engine.package.name, engineRelativePath),
951
939
  };
952
940
  }
953
941
  routeEntrypoint(engine, relativePath, files) {
@@ -955,8 +943,8 @@ class AppBuilder {
955
943
  let asset = {
956
944
  kind: 'in-memory',
957
945
  source: routeEntryTemplate({
958
- files: nonFastboot.map(f => this.importPaths(engine, f, relativePath)),
959
- fastbootOnlyFiles: fastboot.map(f => this.importPaths(engine, f, relativePath)),
946
+ files: nonFastboot.map(f => this.importPaths(engine, f)),
947
+ fastbootOnlyFiles: fastboot.map(f => this.importPaths(engine, f)),
960
948
  }),
961
949
  relativePath,
962
950
  };
@@ -983,10 +971,10 @@ class AppBuilder {
983
971
  let amdModules = [];
984
972
  // this is a backward-compatibility feature: addons can force inclusion of
985
973
  // test support modules.
986
- this.gatherImplicitModules('implicit-test-modules', myName, engine, amdModules);
974
+ this.gatherImplicitModules('implicit-test-modules', engine, amdModules);
987
975
  let { appFiles } = engine;
988
976
  for (let relativePath of appFiles.tests) {
989
- amdModules.push(this.importPaths(engine, relativePath, myName));
977
+ amdModules.push(this.importPaths(engine, relativePath));
990
978
  }
991
979
  let source = entryTemplate({
992
980
  amdModules,
@@ -1001,7 +989,7 @@ class AppBuilder {
1001
989
  prepared.set(asset.relativePath, asset);
1002
990
  return asset;
1003
991
  }
1004
- gatherImplicitModules(section, relativeTo, engine, lazyModules) {
992
+ gatherImplicitModules(section, engine, lazyModules) {
1005
993
  for (let addon of engine.addons) {
1006
994
  let implicitModules = addon.meta[section];
1007
995
  if (implicitModules) {
@@ -1026,9 +1014,7 @@ class AppBuilder {
1026
1014
  runtime = runtime.split(path_1.sep).join('/');
1027
1015
  lazyModules.push({
1028
1016
  runtime,
1029
- buildtime: this.options.implicitModulesStrategy === 'packageNames'
1030
- ? (0, path_1.join)(packageName, name)
1031
- : (0, shared_internals_1.explicitRelative)((0, path_1.dirname)((0, path_1.join)(this.root, relativeTo)), (0, path_1.join)(addon.root, name)),
1017
+ buildtime: path_1.posix.join(packageName, name),
1032
1018
  });
1033
1019
  }
1034
1020
  }