@embroider/core 2.1.0 → 2.1.1-unstable.21eae41

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 (64) hide show
  1. package/package.json +3 -4
  2. package/src/app-files.d.ts +1 -1
  3. package/src/app-files.js.map +1 -1
  4. package/src/app.d.ts +9 -7
  5. package/src/app.js +20 -31
  6. package/src/app.js.map +1 -1
  7. package/src/index.d.ts +3 -0
  8. package/src/index.js +5 -1
  9. package/src/index.js.map +1 -1
  10. package/src/module-resolver.d.ts +60 -22
  11. package/src/module-resolver.js +465 -136
  12. package/src/module-resolver.js.map +1 -1
  13. package/src/virtual-content.d.ts +3 -0
  14. package/src/virtual-content.js +87 -0
  15. package/src/virtual-content.js.map +1 -0
  16. package/src/wait-for-trees.js.map +1 -1
  17. package/src/babel-plugin-adjust-imports.d.ts +0 -31
  18. package/src/babel-plugin-adjust-imports.js +0 -224
  19. package/src/babel-plugin-adjust-imports.js.map +0 -1
  20. package/src/babel-plugin-inline-hbs-deps-node.d.ts +0 -14
  21. package/src/babel-plugin-inline-hbs-deps-node.js +0 -27
  22. package/src/babel-plugin-inline-hbs-deps-node.js.map +0 -1
  23. package/src/babel-plugin-inline-hbs-deps.d.ts +0 -10
  24. package/src/babel-plugin-inline-hbs-deps.js +0 -134
  25. package/src/babel-plugin-inline-hbs-deps.js.map +0 -1
  26. package/src/babel-plugin-inline-hbs-node.d.ts +0 -7
  27. package/src/babel-plugin-inline-hbs-node.js +0 -15
  28. package/src/babel-plugin-inline-hbs-node.js.map +0 -1
  29. package/src/babel-plugin-inline-hbs.d.ts +0 -24
  30. package/src/babel-plugin-inline-hbs.js +0 -142
  31. package/src/babel-plugin-inline-hbs.js.map +0 -1
  32. package/src/babel-plugin-stage1-inline-hbs-node.d.ts +0 -12
  33. package/src/babel-plugin-stage1-inline-hbs-node.js +0 -9
  34. package/src/babel-plugin-stage1-inline-hbs-node.js.map +0 -1
  35. package/src/babel-plugin-stage1-inline-hbs.d.ts +0 -9
  36. package/src/babel-plugin-stage1-inline-hbs.js +0 -96
  37. package/src/babel-plugin-stage1-inline-hbs.js.map +0 -1
  38. package/src/browser-index.d.ts +0 -1
  39. package/src/browser-index.js +0 -6
  40. package/src/browser-index.js.map +0 -1
  41. package/src/ember-template-compiler-types.d.ts +0 -41
  42. package/src/ember-template-compiler-types.js +0 -3
  43. package/src/ember-template-compiler-types.js.map +0 -1
  44. package/src/load-ember-template-compiler.d.ts +0 -6
  45. package/src/load-ember-template-compiler.js +0 -57
  46. package/src/load-ember-template-compiler.js.map +0 -1
  47. package/src/mini-modules-polyfill.d.ts +0 -12
  48. package/src/mini-modules-polyfill.js +0 -80
  49. package/src/mini-modules-polyfill.js.map +0 -1
  50. package/src/patch-template-compiler.d.ts +0 -1
  51. package/src/patch-template-compiler.js +0 -176
  52. package/src/patch-template-compiler.js.map +0 -1
  53. package/src/resolver-plugin.d.ts +0 -3
  54. package/src/resolver-plugin.js +0 -53
  55. package/src/resolver-plugin.js.map +0 -1
  56. package/src/resolver.d.ts +0 -14
  57. package/src/resolver.js +0 -3
  58. package/src/resolver.js.map +0 -1
  59. package/src/template-compiler-common.d.ts +0 -70
  60. package/src/template-compiler-common.js +0 -176
  61. package/src/template-compiler-common.js.map +0 -1
  62. package/src/template-compiler-node.d.ts +0 -17
  63. package/src/template-compiler-node.js +0 -32
  64. 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.0",
3
+ "version": "2.1.1-unstable.21eae41",
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.0-unstable.21eae41",
30
+ "@embroider/shared-internals": "2.0.0-unstable.21eae41",
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",
@@ -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;
@@ -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":"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","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 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"]}
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 => {