@embroider/core 0.47.2 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embroider/core",
3
- "version": "0.47.2",
3
+ "version": "0.50.0",
4
4
  "private": false,
5
5
  "description": "A build system for EmberJS applications.",
6
6
  "repository": {
@@ -37,10 +37,10 @@
37
37
  "@babel/plugin-transform-runtime": "^7.14.5",
38
38
  "@babel/runtime": "^7.14.5",
39
39
  "@babel/traverse": "^7.14.5",
40
- "@embroider/macros": "0.47.2",
41
- "@embroider/shared-internals": "0.47.2",
40
+ "@embroider/macros": "0.50.0",
41
+ "@embroider/shared-internals": "0.50.0",
42
42
  "assert-never": "^1.2.1",
43
- "babel-import-util": "^0.2.0",
43
+ "babel-import-util": "^1.1.0",
44
44
  "babel-plugin-ember-template-compilation": "^1.0.0",
45
45
  "broccoli-node-api": "^1.7.0",
46
46
  "broccoli-persistent-filter": "^3.1.2",
@@ -10,6 +10,7 @@ export declare class AppFiles {
10
10
  readonly tests: ReadonlyArray<string>;
11
11
  readonly components: ReadonlyArray<string>;
12
12
  readonly helpers: ReadonlyArray<string>;
13
+ readonly modifiers: ReadonlyArray<string>;
13
14
  private perRoute;
14
15
  readonly otherAppFiles: ReadonlyArray<string>;
15
16
  readonly relocatedFiles: Map<string, string>;
package/src/app-files.js CHANGED
@@ -7,6 +7,7 @@ class AppFiles {
7
7
  let tests = [];
8
8
  let components = [];
9
9
  let helpers = [];
10
+ let modifiers = [];
10
11
  let otherAppFiles = [];
11
12
  this.perRoute = { children: new Map() };
12
13
  for (let relativePath of appDiffer.files.keys()) {
@@ -43,6 +44,10 @@ class AppFiles {
43
44
  helpers.push(relativePath);
44
45
  continue;
45
46
  }
47
+ if (relativePath.startsWith('modifiers/')) {
48
+ modifiers.push(relativePath);
49
+ continue;
50
+ }
46
51
  if (this.handleClassicRouteFile(relativePath) ||
47
52
  (podModulePrefix !== undefined && this.handlePodsRouteFile(relativePath, podModulePrefix))) {
48
53
  continue;
@@ -52,6 +57,7 @@ class AppFiles {
52
57
  this.tests = tests;
53
58
  this.components = components;
54
59
  this.helpers = helpers;
60
+ this.modifiers = modifiers;
55
61
  this.otherAppFiles = otherAppFiles;
56
62
  let relocatedFiles = new Map();
57
63
  for (let [relativePath, owningPath] of appDiffer.files) {
@@ -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 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 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 if (/-test\\.\\w+$/.test(relativePath)) {\n tests.push(relativePath);\n }\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 (\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.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 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 if (/-test\\.\\w+$/.test(relativePath)) {\n tests.push(relativePath);\n }\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.js CHANGED
@@ -883,6 +883,9 @@ class AppBuilder {
883
883
  if (!this.options.staticHelpers) {
884
884
  requiredAppFiles.push(appFiles.helpers);
885
885
  }
886
+ if (!this.options.staticModifiers) {
887
+ requiredAppFiles.push(appFiles.modifiers);
888
+ }
886
889
  let styles = [];
887
890
  // only import styles from engines with a parent (this excludeds the parent application) as their styles
888
891
  // will be inserted via a direct <link> tag.
package/src/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AddonMeta,\n AppMeta,\n Package,\n AddonPackage,\n explicitRelative,\n extensionsPattern,\n PackageInfo,\n} from '@embroider/shared-internals';\nimport { OutputPaths } from './wait-for-trees';\nimport { compile } from './js-handlebars';\nimport resolve from 'resolve';\nimport { Memoize } from 'typescript-memoize';\nimport { copySync, ensureDirSync, readJSONSync, statSync, unlinkSync, writeFileSync } from 'fs-extra';\nimport { dirname, join, resolve as resolvePath, sep } from 'path';\nimport { debug, warn } from './messages';\nimport sortBy from 'lodash/sortBy';\nimport flatten from 'lodash/flatten';\nimport AppDiffer from './app-differ';\nimport { PreparedEmberHTML } from './ember-html';\nimport { Asset, EmberAsset, ImplicitAssetPaths, InMemoryAsset, OnDiskAsset } from './asset';\nimport assertNever from 'assert-never';\nimport SourceMapConcat from 'fast-sourcemap-concat';\nimport Options from './options';\nimport { MacrosConfig } from '@embroider/macros/src/node';\nimport { PluginItem, TransformOptions } from '@babel/core';\nimport { makePortable } from './portable-babel-config';\nimport { TemplateCompilerPlugins } from '.';\nimport type { NodeTemplateCompilerParams } from './template-compiler-node';\nimport { templateCompilerModule } from './write-template-compiler';\nimport { Resolver } from './resolver';\nimport { Options as AdjustImportsOptions } from './babel-plugin-adjust-imports';\nimport { mangledEngineRoot } from './engine-mangler';\nimport { AppFiles, Engine, EngineSummary, RouteFiles } from './app-files';\nimport partition from 'lodash/partition';\nimport mergeWith from 'lodash/mergeWith';\nimport cloneDeep from 'lodash/cloneDeep';\nimport type { Params as InlineBabelParams } from './babel-plugin-inline-hbs-node';\nimport { PortableHint, maybeNodeModuleVersion } from './portable';\nimport escapeRegExp from 'escape-string-regexp';\nimport { getEmberExports } from './load-ember-template-compiler';\nimport type { Options as InlinePrecompileOptions } from 'babel-plugin-ember-template-compilation';\nimport type { Options as ColocationOptions } from '@embroider/shared-internals/src/template-colocation-plugin';\n\nexport type EmberENV = unknown;\n\n/*\n This interface is the boundary between the general-purpose build system in\n AppBuilder and the messy specifics of apps.\n\n - CompatAppAdapter in `@embroider/compat` implements this interface for\n building based of a legacy ember-cli EmberApp instance\n - We will want to make a different class that implements this interface for\n building apps that don't need an EmberApp instance at all (presumably\n because they opt into new authoring standards.\n*/\nexport interface AppAdapter<TreeNames> {\n // the set of all addon packages that are active (recursive)\n readonly allActiveAddons: AddonPackage[];\n\n // the direct active addon dependencies of a given package\n activeAddonChildren(pkg: Package): AddonPackage[];\n\n // path to the directory where the app's own Javascript lives. Doesn't include\n // any files copied out of addons, we take care of that generically in\n // AppBuilder.\n appJSSrcDir(treePaths: OutputPaths<TreeNames>): string;\n\n // path to the directory where the app's own Fastboot-only Javascript lives.\n // Doesn't include any files copied out of addons, we take care of that\n // generically in AppBuilder.\n fastbootJSSrcDir(treePaths: OutputPaths<TreeNames>): string | undefined;\n\n // this is where you declare what assets must be in the final output\n // (especially index.html, tests/index.html, and anything from your classic\n // public tree).\n assets(treePaths: OutputPaths<TreeNames>): Asset[];\n\n // whether the ember app should boot itself automatically\n autoRun(): boolean;\n\n // custom app-boot logic when the autoRun is set to false\n appBoot(): string | undefined;\n\n // the ember app's main module\n mainModule(): string;\n\n // the configuration that will get passed into the ember app's main module.\n // This traditionally comes from the `APP` property returned by\n // config/environment.js.\n mainModuleConfig(): unknown;\n\n // The namespace for the app's own modules at runtime.\n //\n // (For apps, we _do_ still allow this to be arbitrary. This is in contrast\n // with _addons_, which absolutley must use their real NPM package name as\n // their modulePrefix.)\n modulePrefix(): string;\n\n // The module prefix when pods file layout is used\n podModulePrefix(): string | undefined;\n\n // The public URL at which your app will be served.\n rootURL(): string;\n\n // The path to ember's template compiler source\n templateCompilerPath(): string;\n\n // Path to a build-time Resolver module to be used during template\n // compilation.\n templateResolver(): Resolver;\n\n // describes the special module naming rules that we need to achieve\n // compatibility\n adjustImportsOptions(): AdjustImportsOptions;\n\n adjustImportsOptionsPath(): string;\n\n // The template preprocessor plugins that are configured in the app.\n htmlbarsPlugins(): TemplateCompilerPlugins;\n\n // the app's preferred babel config. No need to worry about making it portable\n // yet, we will do that for you.\n babelConfig(): TransformOptions;\n\n // the babel version that works with your babelConfig.\n babelMajorVersion(): 7;\n\n // The environment settings used to control Ember itself. In a classic app,\n // this comes from the EmberENV property returned by config/environment.js.\n emberENV(): EmberENV;\n\n // when true, the app's own code is understood to already follow v2 standards.\n // For example, all imports of templates have an explicit `hbs` extension, and\n // all imports of your own package use relative imports instead of you rown\n // name. When false, your code is treated more leniently and you get the\n // auto-upgraded behaviors that v1 addons also get.\n strictV2Format(): boolean;\n\n // list of directories that point to the roots of addon packages that are\n // under active development\n developingAddons(): string[];\n\n // development, test, or production\n env: string;\n}\n\nexport function excludeDotFiles(files: string[]) {\n return files.filter(file => !file.startsWith('.') && !file.includes('/.'));\n}\n\nexport const CACHE_BUSTING_PLUGIN = {\n path: require.resolve('@embroider/shared-internals/src/babel-plugin-cache-busting.js'),\n version: readJSONSync(`${__dirname}/../package.json`).version,\n};\n\nexport function addCachablePlugin(babelConfig: TransformOptions) {\n if (Array.isArray(babelConfig.plugins) && babelConfig.plugins.length > 0) {\n const plugins = Object.create(null);\n plugins[CACHE_BUSTING_PLUGIN.path] = CACHE_BUSTING_PLUGIN.version;\n\n for (const plugin of babelConfig.plugins) {\n let absolutePathToPlugin: string;\n if (Array.isArray(plugin) && typeof plugin[0] === 'string') {\n absolutePathToPlugin = plugin[0] as string;\n } else if (typeof plugin === 'string') {\n absolutePathToPlugin = plugin;\n } else {\n throw new Error(`[Embroider] a babel plugin without an absolute path was from: ${plugin}`);\n }\n\n plugins[absolutePathToPlugin] = maybeNodeModuleVersion(absolutePathToPlugin);\n }\n\n babelConfig.plugins.push([\n CACHE_BUSTING_PLUGIN.path,\n {\n plugins,\n },\n ]);\n }\n}\n\nclass ParsedEmberAsset {\n kind: 'parsed-ember' = 'parsed-ember';\n relativePath: string;\n fileAsset: EmberAsset;\n html: PreparedEmberHTML;\n\n constructor(asset: EmberAsset) {\n this.fileAsset = asset;\n this.html = new PreparedEmberHTML(asset);\n this.relativePath = asset.relativePath;\n }\n\n validFor(other: EmberAsset) {\n return this.fileAsset.mtime === other.mtime && this.fileAsset.size === other.size;\n }\n}\n\nclass BuiltEmberAsset {\n kind: 'built-ember' = 'built-ember';\n relativePath: string;\n parsedAsset: ParsedEmberAsset;\n source: string;\n\n constructor(asset: ParsedEmberAsset) {\n this.parsedAsset = asset;\n this.source = asset.html.dom.serialize();\n this.relativePath = asset.relativePath;\n }\n}\n\nclass ConcatenatedAsset {\n kind: 'concatenated-asset' = 'concatenated-asset';\n constructor(\n public relativePath: string,\n public sources: (OnDiskAsset | InMemoryAsset)[],\n private resolvableExtensions: RegExp\n ) {}\n get sourcemapPath() {\n return this.relativePath.replace(this.resolvableExtensions, '') + '.map';\n }\n}\n\ntype InternalAsset = OnDiskAsset | InMemoryAsset | BuiltEmberAsset | ConcatenatedAsset;\n\nexport class AppBuilder<TreeNames> {\n // for each relativePath, an Asset we have already emitted\n private assets: Map<string, InternalAsset> = new Map();\n\n constructor(\n private root: string,\n private app: Package,\n private adapter: AppAdapter<TreeNames>,\n private options: Required<Options>,\n private macrosConfig: MacrosConfig\n ) {\n // this uses globalConfig because it's a way for packages to ask \"is\n // Embroider doing this build?\". So it's necessarily global, not scoped to\n // any subgraph of dependencies.\n macrosConfig.setGlobalConfig(__filename, `@embroider/core`, {\n // this is hard-coded to true because it literally means \"embroider is\n // building this Ember app\". You can see non-true when using the Embroider\n // macros in a classic build.\n active: true,\n });\n }\n\n private scriptPriority(pkg: Package) {\n switch (pkg.name) {\n case 'loader.js':\n return 0;\n case 'ember-source':\n return 10;\n default:\n return 1000;\n }\n }\n\n @Memoize()\n private get resolvableExtensionsPattern(): RegExp {\n return extensionsPattern(this.adapter.adjustImportsOptions().resolvableExtensions);\n }\n\n private impliedAssets(\n type: keyof ImplicitAssetPaths,\n engine: Engine,\n emberENV?: EmberENV\n ): (OnDiskAsset | InMemoryAsset)[] {\n let result: (OnDiskAsset | InMemoryAsset)[] = this.impliedAddonAssets(type, engine).map(\n (sourcePath: string): OnDiskAsset => {\n let stats = statSync(sourcePath);\n return {\n kind: 'on-disk',\n relativePath: explicitRelative(this.root, sourcePath),\n sourcePath,\n mtime: stats.mtimeMs,\n size: stats.size,\n };\n }\n );\n\n if (type === 'implicit-scripts') {\n result.unshift({\n kind: 'in-memory',\n relativePath: '_testing_prefix_.js',\n source: `var runningTests=false;`,\n });\n\n result.unshift({\n kind: 'in-memory',\n relativePath: '_ember_env_.js',\n source: `window.EmberENV=${JSON.stringify(emberENV, null, 2)};`,\n });\n\n result.push({\n kind: 'in-memory',\n relativePath: '_loader_.js',\n source: `loader.makeDefaultExport=false;`,\n });\n }\n\n if (type === 'implicit-test-scripts') {\n // this is the traditional test-support-suffix.js\n result.push({\n kind: 'in-memory',\n relativePath: '_testing_suffix_.js',\n source: `\n var runningTests=true;\n if (typeof Testem !== 'undefined' && (typeof QUnit !== 'undefined' || typeof Mocha !== 'undefined')) {\n Testem.hookIntoTestFramework();\n }`,\n });\n\n // whether or not anybody was actually using @embroider/macros\n // explicitly as an addon, we ensure its test-support file is always\n // present.\n if (!result.find(s => s.kind === 'on-disk' && s.sourcePath.endsWith('embroider-macros-test-support.js'))) {\n result.unshift({\n kind: 'on-disk',\n sourcePath: require.resolve('@embroider/macros/src/vendor/embroider-macros-test-support'),\n mtime: 0,\n size: 0,\n relativePath: 'embroider-macros-test-support.js',\n });\n }\n }\n\n return result;\n }\n\n private impliedAddonAssets(type: keyof ImplicitAssetPaths, engine: Engine): string[] {\n let result: Array<string> = [];\n for (let addon of sortBy(Array.from(engine.addons), this.scriptPriority.bind(this))) {\n let implicitScripts = addon.meta[type];\n if (implicitScripts) {\n let styles = [];\n let options = { basedir: addon.root };\n for (let mod of implicitScripts) {\n if (type === 'implicit-styles') {\n // exclude engines because they will handle their own css importation\n if (!addon.isLazyEngine()) {\n styles.push(resolve.sync(mod, options));\n }\n } else {\n result.push(resolve.sync(mod, options));\n }\n }\n if (styles.length) {\n result = [...styles, ...result];\n }\n }\n }\n return result;\n }\n\n // unlike our full config, this one just needs to know how to parse all the\n // syntax our app can contain.\n @Memoize()\n private babelParserConfig(): TransformOptions {\n let babel = cloneDeep(this.adapter.babelConfig());\n\n if (!babel.plugins) {\n babel.plugins = [];\n }\n\n // Our stage3 code is always allowed to use dynamic import. We may emit it\n // ourself when splitting routes.\n babel.plugins.push(require.resolve('@babel/plugin-syntax-dynamic-import'));\n return babel;\n }\n\n @Memoize()\n private babelConfig(templateCompilerParams: NodeTemplateCompilerParams, appFiles: Engine[]) {\n let babel = cloneDeep(this.adapter.babelConfig());\n\n if (!babel.plugins) {\n babel.plugins = [];\n }\n\n // Our stage3 code is always allowed to use dynamic import. We may emit it\n // ourself when splitting routes.\n babel.plugins.push(require.resolve('@babel/plugin-syntax-dynamic-import'));\n\n // https://github.com/webpack/webpack/issues/12154\n babel.plugins.push(require.resolve('./rename-require-plugin'));\n\n if (this.adapter.adjustImportsOptions().emberNeedsModulesPolyfill) {\n // on older ember versions that need the modules-api-polyfill, we use our\n // bespoke inline template compiler plugin.\n babel.plugins.push([\n join(__dirname, 'babel-plugin-inline-hbs-node.js'),\n {\n templateCompiler: templateCompilerParams,\n stage: 3,\n } as InlineBabelParams,\n ]);\n } else {\n // on newer ember versions that don't need the modules-api-polyfill, we\n // can compose with the newer babel-plugin-htmlbars-inline-precompile, and\n // use a simpler plugin that only needs to handle inserting discovered\n // dependencies.\n babel.plugins.push([\n join(__dirname, '../src/babel-plugin-inline-hbs-deps-node.js'),\n { templateCompiler: templateCompilerParams },\n ]);\n babel.plugins.push([\n require.resolve('babel-plugin-ember-template-compilation'),\n {\n precompilerPath: join(__dirname, '../src/babel-plugin-inline-hbs-deps-node.js'),\n } as InlinePrecompileOptions,\n ]);\n }\n\n // this is @embroider/macros configured for full stage3 resolution\n babel.plugins.push(...this.macrosConfig.babelPluginConfig());\n\n let colocationOptions: ColocationOptions = {\n packageGuard: true,\n };\n babel.plugins.push([\n require.resolve('@embroider/shared-internals/src/template-colocation-plugin'),\n colocationOptions,\n ]);\n\n babel.plugins.push(this.adjustImportsPlugin(appFiles));\n\n // we can use globally shared babel runtime by default\n babel.plugins.push([\n require.resolve('@babel/plugin-transform-runtime'),\n { absoluteRuntime: __dirname, useESModules: true, regenerator: false },\n ]);\n\n const portable = makePortable(babel, { basedir: this.root }, this.portableHints);\n addCachablePlugin(portable.config);\n return portable;\n }\n\n private adjustImportsPlugin(engines: Engine[]): PluginItem {\n let relocatedFiles: AdjustImportsOptions['relocatedFiles'] = {};\n for (let { destPath, appFiles } of engines) {\n for (let [relativePath, originalPath] of appFiles.relocatedFiles) {\n relocatedFiles[join(destPath, relativePath).split(sep).join('/')] = originalPath;\n }\n }\n let relocatedFilesPath = join(this.root, '_relocated_files.json');\n writeFileSync(relocatedFilesPath, JSON.stringify({ relocatedFiles }));\n return [\n require.resolve('./babel-plugin-adjust-imports'),\n {\n adjustImportsOptionsPath: this.adapter.adjustImportsOptionsPath(),\n relocatedFilesPath,\n },\n ];\n }\n\n private insertEmberApp(\n asset: ParsedEmberAsset,\n appFiles: Engine[],\n prepared: Map<string, InternalAsset>,\n emberENV: EmberENV\n ) {\n let html = asset.html;\n\n if (this.fastbootConfig) {\n // ignore scripts like ember-cli-livereload.js which are not really associated with\n // \"the app\".\n let ignoreScripts = html.dom.window.document.querySelectorAll('script');\n ignoreScripts.forEach(script => {\n script.setAttribute('data-fastboot-ignore', '');\n });\n }\n\n // our tests entrypoint already includes a correct module dependency on the\n // app, so we only insert the app when we're not inserting tests\n if (!asset.fileAsset.includeTests) {\n let appJS = this.topAppJSAsset(appFiles, prepared);\n html.insertScriptTag(html.javascript, appJS.relativePath, { type: 'module' });\n }\n\n if (this.fastbootConfig) {\n // any extra fastboot app files get inserted into our html.javascript\n // section, after the app has been inserted.\n for (let script of this.fastbootConfig.extraAppFiles) {\n html.insertScriptTag(html.javascript, script, { tag: 'fastboot-script' });\n }\n }\n\n html.insertStyleLink(html.styles, `assets/${this.app.name}.css`);\n\n const parentEngine = appFiles.find(e => !e.parent) as Engine;\n let vendorJS = this.implicitScriptsAsset(prepared, parentEngine, emberENV);\n if (vendorJS) {\n html.insertScriptTag(html.implicitScripts, vendorJS.relativePath);\n }\n\n if (this.fastbootConfig) {\n // any extra fastboot vendor files get inserted into our\n // html.implicitScripts section, after the regular implicit script\n // (vendor.js) have been inserted.\n for (let script of this.fastbootConfig.extraVendorFiles) {\n html.insertScriptTag(html.implicitScripts, script, { tag: 'fastboot-script' });\n }\n }\n\n let implicitStyles = this.implicitStylesAsset(prepared, parentEngine);\n if (implicitStyles) {\n html.insertStyleLink(html.implicitStyles, implicitStyles.relativePath);\n }\n\n if (!asset.fileAsset.includeTests) {\n return;\n }\n\n // Test-related assets happen below this point\n\n let testJS = this.testJSEntrypoint(appFiles, prepared);\n html.insertScriptTag(html.testJavascript, testJS.relativePath, { type: 'module' });\n\n let implicitTestScriptsAsset = this.implicitTestScriptsAsset(prepared, parentEngine);\n if (implicitTestScriptsAsset) {\n html.insertScriptTag(html.implicitTestScripts, implicitTestScriptsAsset.relativePath);\n }\n\n let implicitTestStylesAsset = this.implicitTestStylesAsset(prepared, parentEngine);\n if (implicitTestStylesAsset) {\n html.insertStyleLink(html.implicitTestStyles, implicitTestStylesAsset.relativePath);\n }\n }\n\n private implicitScriptsAsset(\n prepared: Map<string, InternalAsset>,\n application: Engine,\n emberENV: EmberENV\n ): InternalAsset | undefined {\n let asset = prepared.get('assets/vendor.js');\n if (!asset) {\n let implicitScripts = this.impliedAssets('implicit-scripts', application, emberENV);\n if (implicitScripts.length > 0) {\n asset = new ConcatenatedAsset('assets/vendor.js', implicitScripts, this.resolvableExtensionsPattern);\n prepared.set(asset.relativePath, asset);\n }\n }\n return asset;\n }\n\n private implicitStylesAsset(prepared: Map<string, InternalAsset>, application: Engine): InternalAsset | undefined {\n let asset = prepared.get('assets/vendor.css');\n if (!asset) {\n let implicitStyles = this.impliedAssets('implicit-styles', application);\n if (implicitStyles.length > 0) {\n // we reverse because we want the synthetic vendor style at the top\n asset = new ConcatenatedAsset('assets/vendor.css', implicitStyles.reverse(), this.resolvableExtensionsPattern);\n prepared.set(asset.relativePath, asset);\n }\n }\n return asset;\n }\n\n private implicitTestScriptsAsset(\n prepared: Map<string, InternalAsset>,\n application: Engine\n ): InternalAsset | undefined {\n let testSupportJS = prepared.get('assets/test-support.js');\n if (!testSupportJS) {\n let implicitTestScripts = this.impliedAssets('implicit-test-scripts', application);\n if (implicitTestScripts.length > 0) {\n testSupportJS = new ConcatenatedAsset(\n 'assets/test-support.js',\n implicitTestScripts,\n this.resolvableExtensionsPattern\n );\n prepared.set(testSupportJS.relativePath, testSupportJS);\n }\n }\n return testSupportJS;\n }\n\n private implicitTestStylesAsset(\n prepared: Map<string, InternalAsset>,\n application: Engine\n ): InternalAsset | undefined {\n let asset = prepared.get('assets/test-support.css');\n if (!asset) {\n let implicitTestStyles = this.impliedAssets('implicit-test-styles', application);\n if (implicitTestStyles.length > 0) {\n asset = new ConcatenatedAsset('assets/test-support.css', implicitTestStyles, this.resolvableExtensionsPattern);\n prepared.set(asset.relativePath, asset);\n }\n }\n return asset;\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.\n private findActiveAddons(pkg: Package, engine: EngineSummary): void {\n for (let child of this.adapter.activeAddonChildren(pkg)) {\n if (!child.isEngine()) {\n this.findActiveAddons(child, engine);\n }\n engine.addons.add(child);\n }\n }\n\n private partitionEngines(appJSPath: string): EngineSummary[] {\n let queue: EngineSummary[] = [\n {\n package: this.app,\n addons: new Set(),\n parent: undefined,\n sourcePath: appJSPath,\n destPath: this.root,\n modulePrefix: this.modulePrefix,\n appRelativePath: '.',\n },\n ];\n let done: EngineSummary[] = [];\n let seenEngines: Set<Package> = new Set();\n while (true) {\n let current = queue.shift();\n if (!current) {\n break;\n }\n this.findActiveAddons(current.package, current);\n for (let addon of current.addons) {\n if (addon.isEngine() && !seenEngines.has(addon)) {\n seenEngines.add(addon);\n queue.push({\n package: addon,\n addons: new Set(),\n parent: current,\n sourcePath: mangledEngineRoot(addon),\n destPath: addon.root,\n modulePrefix: addon.name,\n appRelativePath: explicitRelative(this.root, addon.root),\n });\n }\n }\n done.push(current);\n }\n return done;\n }\n\n @Memoize()\n private get activeFastboot() {\n return this.adapter.activeAddonChildren(this.app).find(a => a.name === 'ember-cli-fastboot');\n }\n\n @Memoize()\n private get fastbootConfig():\n | { packageJSON: PackageInfo; extraAppFiles: string[]; extraVendorFiles: string[] }\n | undefined {\n if (this.activeFastboot) {\n // this is relying on work done in stage1 by @embroider/compat/src/compat-adapters/ember-cli-fastboot.ts\n let packageJSON = readJSONSync(join(this.activeFastboot.root, '_fastboot_', 'package.json'));\n let { extraAppFiles, extraVendorFiles } = packageJSON['embroider-fastboot'];\n delete packageJSON['embroider-fastboot'];\n extraVendorFiles.push('assets/embroider_macros_fastboot_init.js');\n return { packageJSON, extraAppFiles, extraVendorFiles };\n }\n }\n\n private appDiffers: { differ: AppDiffer; engine: EngineSummary }[] | undefined;\n\n private updateAppJS(inputPaths: OutputPaths<TreeNames>): Engine[] {\n let appJSPath = this.adapter.appJSSrcDir(inputPaths);\n if (!this.appDiffers) {\n let engines = this.partitionEngines(appJSPath);\n this.appDiffers = engines.map(engine => {\n let differ: AppDiffer;\n if (this.activeFastboot) {\n differ = new AppDiffer(\n engine.destPath,\n engine.sourcePath,\n [...engine.addons],\n true,\n this.adapter.fastbootJSSrcDir(inputPaths),\n this.babelParserConfig()\n );\n } else {\n differ = new AppDiffer(engine.destPath, engine.sourcePath, [...engine.addons]);\n }\n return {\n differ,\n engine,\n };\n });\n }\n // this is in reverse order because we need deeper engines to update before\n // their parents, because they aren't really valid packages until they\n // update, and their parents will go looking for their own `app-js` content.\n this.appDiffers\n .slice()\n .reverse()\n .forEach(a => a.differ.update());\n return this.appDiffers.map(a => {\n return Object.assign({}, a.engine, {\n appFiles: new AppFiles(a.differ, this.resolvableExtensionsPattern, this.adapter.podModulePrefix()),\n });\n });\n }\n\n private prepareAsset(asset: Asset, appFiles: Engine[], prepared: Map<string, InternalAsset>, emberENV: EmberENV) {\n if (asset.kind === 'ember') {\n let prior = this.assets.get(asset.relativePath);\n let parsed: ParsedEmberAsset;\n if (prior && prior.kind === 'built-ember' && prior.parsedAsset.validFor(asset)) {\n // we can reuse the parsed html\n parsed = prior.parsedAsset;\n parsed.html.clear();\n } else {\n parsed = new ParsedEmberAsset(asset);\n }\n this.insertEmberApp(parsed, appFiles, prepared, emberENV);\n prepared.set(asset.relativePath, new BuiltEmberAsset(parsed));\n } else {\n prepared.set(asset.relativePath, asset);\n }\n }\n\n private prepareAssets(requestedAssets: Asset[], appFiles: Engine[], emberENV: EmberENV): Map<string, InternalAsset> {\n let prepared: Map<string, InternalAsset> = new Map();\n for (let asset of requestedAssets) {\n this.prepareAsset(asset, appFiles, prepared, emberENV);\n }\n return prepared;\n }\n\n private assetIsValid(asset: InternalAsset, prior: InternalAsset | undefined): boolean {\n if (!prior) {\n return false;\n }\n switch (asset.kind) {\n case 'on-disk':\n return prior.kind === 'on-disk' && prior.size === asset.size && prior.mtime === asset.mtime;\n case 'in-memory':\n return prior.kind === 'in-memory' && stringOrBufferEqual(prior.source, asset.source);\n case 'built-ember':\n return prior.kind === 'built-ember' && prior.source === asset.source;\n case 'concatenated-asset':\n return (\n prior.kind === 'concatenated-asset' &&\n prior.sources.length === asset.sources.length &&\n prior.sources.every((priorFile, index) => {\n let newFile = asset.sources[index];\n return this.assetIsValid(newFile, priorFile);\n })\n );\n }\n }\n\n private updateOnDiskAsset(asset: OnDiskAsset) {\n let destination = join(this.root, asset.relativePath);\n ensureDirSync(dirname(destination));\n copySync(asset.sourcePath, destination, { dereference: true });\n }\n\n private updateInMemoryAsset(asset: InMemoryAsset) {\n let destination = join(this.root, asset.relativePath);\n ensureDirSync(dirname(destination));\n writeFileSync(destination, asset.source, 'utf8');\n }\n\n private updateBuiltEmberAsset(asset: BuiltEmberAsset) {\n let destination = join(this.root, asset.relativePath);\n ensureDirSync(dirname(destination));\n writeFileSync(destination, asset.source, 'utf8');\n }\n\n private async updateConcatenatedAsset(asset: ConcatenatedAsset) {\n let concat = new SourceMapConcat({\n outputFile: join(this.root, asset.relativePath),\n mapCommentType: asset.relativePath.endsWith('.js') ? 'line' : 'block',\n baseDir: this.root,\n });\n if (process.env.EMBROIDER_CONCAT_STATS) {\n let MeasureConcat = (await import('./measure-concat')).default;\n concat = new MeasureConcat(asset.relativePath, concat, this.root);\n }\n for (let source of asset.sources) {\n switch (source.kind) {\n case 'on-disk':\n concat.addFile(explicitRelative(this.root, source.sourcePath));\n break;\n case 'in-memory':\n if (typeof source.source !== 'string') {\n throw new Error(`attempted to concatenated a Buffer-backed in-memory asset`);\n }\n concat.addSpace(source.source);\n break;\n default:\n assertNever(source);\n }\n }\n await concat.end();\n }\n\n private async updateAssets(requestedAssets: Asset[], appFiles: Engine[], emberENV: EmberENV) {\n let assets = this.prepareAssets(requestedAssets, appFiles, emberENV);\n for (let asset of assets.values()) {\n if (this.assetIsValid(asset, this.assets.get(asset.relativePath))) {\n continue;\n }\n debug('rebuilding %s', asset.relativePath);\n switch (asset.kind) {\n case 'on-disk':\n this.updateOnDiskAsset(asset);\n break;\n case 'in-memory':\n this.updateInMemoryAsset(asset);\n break;\n case 'built-ember':\n this.updateBuiltEmberAsset(asset);\n break;\n case 'concatenated-asset':\n await this.updateConcatenatedAsset(asset);\n break;\n default:\n assertNever(asset);\n }\n }\n for (let oldAsset of this.assets.values()) {\n if (!assets.has(oldAsset.relativePath)) {\n unlinkSync(join(this.root, oldAsset.relativePath));\n }\n }\n this.assets = assets;\n return [...assets.values()];\n }\n\n private gatherAssets(inputPaths: OutputPaths<TreeNames>): Asset[] {\n // first gather all the assets out of addons\n let assets: Asset[] = [];\n for (let pkg of this.adapter.allActiveAddons) {\n if (pkg.meta['public-assets']) {\n for (let [filename, appRelativeURL] of Object.entries(pkg.meta['public-assets'] || {})) {\n let sourcePath = resolvePath(pkg.root, filename);\n let stats = statSync(sourcePath);\n assets.push({\n kind: 'on-disk',\n sourcePath,\n relativePath: appRelativeURL,\n mtime: stats.mtimeMs,\n size: stats.size,\n });\n }\n }\n }\n\n if (this.activeFastboot) {\n const source = `\n (function(){\n var key = '_embroider_macros_runtime_config';\n if (!window[key]){ window[key] = [];}\n window[key].push(function(m) {\n m.setGlobalConfig('fastboot', Object.assign({}, m.getGlobalConfig().fastboot, { isRunning: true }));\n });\n }())`;\n assets.push({\n kind: 'in-memory',\n source,\n relativePath: 'assets/embroider_macros_fastboot_init.js',\n });\n }\n\n // and finally tack on the ones from our app itself\n return assets.concat(this.adapter.assets(inputPaths));\n }\n\n async build(inputPaths: OutputPaths<TreeNames>) {\n if (this.adapter.env !== 'production') {\n this.macrosConfig.enableAppDevelopment(this.root);\n this.macrosConfig.enableRuntimeMode();\n }\n for (let pkgRoot of this.adapter.developingAddons()) {\n this.macrosConfig.enablePackageDevelopment(pkgRoot);\n }\n\n // on the first build, we lock down the macros config. on subsequent builds,\n // this doesn't do anything anyway because it's idempotent.\n this.macrosConfig.finalize();\n\n let appFiles = this.updateAppJS(inputPaths);\n let emberENV = this.adapter.emberENV();\n let assets = this.gatherAssets(inputPaths);\n\n let finalAssets = await this.updateAssets(assets, appFiles, emberENV);\n let templateCompiler = this.templateCompiler(emberENV);\n let babelConfig = this.babelConfig(templateCompiler, appFiles);\n let templateCompilerIsParallelSafe = this.addTemplateCompiler(templateCompiler);\n this.addBabelConfig(babelConfig);\n\n let assetPaths = assets.map(asset => asset.relativePath);\n\n if (this.activeFastboot) {\n // when using fastboot, our own package.json needs to be in the output so fastboot can read it.\n assetPaths.push('package.json');\n }\n\n for (let asset of finalAssets) {\n // our concatenated assets all have map files that ride along. Here we're\n // telling the final stage packager to be sure and serve the map files\n // too.\n if (asset.kind === 'concatenated-asset') {\n assetPaths.push(asset.sourcemapPath);\n }\n }\n\n let meta: AppMeta = {\n type: 'app',\n version: 2,\n assets: assetPaths,\n 'template-compiler': {\n filename: '_template_compiler_.js',\n isParallelSafe: templateCompilerIsParallelSafe,\n },\n babel: {\n filename: '_babel_config_.js',\n isParallelSafe: babelConfig.isParallelSafe,\n majorVersion: this.adapter.babelMajorVersion(),\n fileFilter: '_babel_filter_.js',\n },\n 'resolvable-extensions': this.adapter.adjustImportsOptions().resolvableExtensions,\n 'root-url': this.adapter.rootURL(),\n };\n\n if (!this.adapter.strictV2Format()) {\n meta['auto-upgraded'] = true;\n }\n\n let pkg = this.combinePackageJSON(meta);\n writeFileSync(join(this.root, 'package.json'), JSON.stringify(pkg, null, 2), 'utf8');\n }\n\n private combinePackageJSON(meta: AppMeta): object {\n let pkgLayers: any[] = [this.app.packageJSON];\n let fastbootConfig = this.fastbootConfig;\n if (fastbootConfig) {\n // fastboot-specific package.json output is allowed to add to our original package.json\n pkgLayers.push(fastbootConfig.packageJSON);\n }\n // but our own new v2 app metadata takes precedence over both\n pkgLayers.push({ keywords: ['ember-addon'], 'ember-addon': meta });\n return combinePackageJSON(...pkgLayers);\n }\n\n private templateCompiler(config: EmberENV): NodeTemplateCompilerParams {\n let plugins = this.adapter.htmlbarsPlugins();\n if (!plugins.ast) {\n plugins.ast = [];\n }\n let { plugins: macroPlugins, setConfig } = MacrosConfig.astPlugins();\n setConfig(this.macrosConfig);\n for (let macroPlugin of macroPlugins) {\n plugins.ast.push(macroPlugin);\n }\n\n const compilerPath = resolve.sync(this.adapter.templateCompilerPath(), { basedir: this.root });\n const compilerChecksum = getEmberExports(compilerPath).cacheKey;\n\n return {\n plugins,\n compilerPath,\n compilerChecksum,\n resolver: this.adapter.templateResolver(),\n EmberENV: config,\n };\n }\n\n @Memoize()\n private get portableHints(): PortableHint[] {\n return this.options.pluginHints.map(hint => {\n let cursor = join(this.app.root, 'package.json');\n for (let i = 0; i < hint.resolve.length; i++) {\n let target = hint.resolve[i];\n if (i < hint.resolve.length - 1) {\n target = join(target, 'package.json');\n }\n cursor = resolve.sync(target, { basedir: dirname(cursor) });\n }\n\n return {\n requireFile: cursor,\n useMethod: hint.useMethod,\n packageVersion: maybeNodeModuleVersion(cursor),\n };\n });\n }\n\n private addTemplateCompiler(params: NodeTemplateCompilerParams): boolean {\n let mod = templateCompilerModule(params, this.portableHints);\n writeFileSync(join(this.root, '_template_compiler_.js'), mod.src, 'utf8');\n return mod.isParallelSafe;\n }\n\n private addBabelConfig(pconfig: { config: TransformOptions; isParallelSafe: boolean }) {\n if (!pconfig.isParallelSafe) {\n warn('Your build is slower because some babel plugins are non-serializable');\n }\n writeFileSync(\n join(this.root, '_babel_config_.js'),\n `module.exports = ${JSON.stringify(pconfig.config, null, 2)}`,\n 'utf8'\n );\n writeFileSync(\n join(this.root, '_babel_filter_.js'),\n babelFilterTemplate({ skipBabel: this.options.skipBabel }),\n 'utf8'\n );\n }\n\n private shouldSplitRoute(routeName: string) {\n return (\n !this.options.splitAtRoutes ||\n this.options.splitAtRoutes.find(pattern => {\n if (typeof pattern === 'string') {\n return pattern === routeName;\n } else {\n return pattern.test(routeName);\n }\n })\n );\n }\n\n private splitRoute(\n routeName: string,\n files: RouteFiles,\n addToParent: (routeName: string, filename: string) => void,\n addLazyBundle: (routeNames: string[], files: string[]) => void\n ) {\n let shouldSplit = routeName && this.shouldSplitRoute(routeName);\n let ownFiles = [];\n let ownNames = new Set() as Set<string>;\n\n if (files.template) {\n if (shouldSplit) {\n ownFiles.push(files.template);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.template);\n }\n }\n\n if (files.controller) {\n if (shouldSplit) {\n ownFiles.push(files.controller);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.controller);\n }\n }\n\n if (files.route) {\n if (shouldSplit) {\n ownFiles.push(files.route);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.route);\n }\n }\n\n for (let [childName, childFiles] of files.children) {\n this.splitRoute(\n `${routeName}.${childName}`,\n childFiles,\n\n (childRouteName: string, childFile: string) => {\n // this is our child calling \"addToParent\"\n if (shouldSplit) {\n ownFiles.push(childFile);\n ownNames.add(childRouteName);\n } else {\n addToParent(childRouteName, childFile);\n }\n },\n (routeNames: string[], files: string[]) => {\n addLazyBundle(routeNames, files);\n }\n );\n }\n\n if (ownFiles.length > 0) {\n addLazyBundle([...ownNames], ownFiles);\n }\n }\n\n private topAppJSAsset(engines: Engine[], prepared: Map<string, InternalAsset>): InternalAsset {\n let [app, ...childEngines] = engines;\n let relativePath = `assets/${this.app.name}.js`;\n return this.appJSAsset(relativePath, app, childEngines, prepared, {\n autoRun: this.adapter.autoRun(),\n appBoot: !this.adapter.autoRun() ? this.adapter.appBoot() : '',\n mainModule: explicitRelative(dirname(relativePath), this.adapter.mainModule()),\n appConfig: this.adapter.mainModuleConfig(),\n });\n }\n\n @Memoize()\n private get staticAppPathsPattern(): RegExp | undefined {\n if (this.options.staticAppPaths.length > 0) {\n return new RegExp(\n '^(?:' +\n this.options.staticAppPaths.map(staticAppPath => escapeRegExp(staticAppPath.replace(/\\//g, sep))).join('|') +\n ')(?:$|' +\n sep +\n ')'\n );\n }\n }\n\n private requiredOtherFiles(appFiles: AppFiles): readonly string[] {\n let pattern = this.staticAppPathsPattern;\n if (pattern) {\n return appFiles.otherAppFiles.filter(f => {\n return !pattern!.test(f);\n });\n } else {\n return appFiles.otherAppFiles;\n }\n }\n\n private appJSAsset(\n relativePath: string,\n engine: Engine,\n childEngines: Engine[],\n prepared: Map<string, InternalAsset>,\n entryParams?: Partial<Parameters<typeof entryTemplate>[0]>\n ): InternalAsset {\n let { appFiles } = engine;\n let cached = prepared.get(relativePath);\n if (cached) {\n return cached;\n }\n\n let eagerModules = [];\n\n let requiredAppFiles = [this.requiredOtherFiles(appFiles)];\n if (!this.options.staticComponents) {\n requiredAppFiles.push(appFiles.components);\n }\n if (!this.options.staticHelpers) {\n requiredAppFiles.push(appFiles.helpers);\n }\n\n let styles = [];\n // only import styles from engines with a parent (this excludeds the parent application) as their styles\n // will be inserted via a direct <link> tag.\n if (engine.parent && engine.package.isLazyEngine()) {\n let implicitStyles = this.impliedAssets('implicit-styles', engine);\n for (let style of implicitStyles) {\n styles.push({\n path: explicitRelative('assets/_engine_', style.relativePath),\n });\n }\n\n let engineMeta = engine.package.meta as AddonMeta;\n if (engineMeta && engineMeta['implicit-styles']) {\n for (let style of engineMeta['implicit-styles']) {\n styles.push({\n path: explicitRelative(dirname(relativePath), join(engine.appRelativePath, style)),\n });\n }\n }\n }\n\n let lazyEngines: { names: string[]; path: string }[] = [];\n for (let childEngine of childEngines) {\n let asset = this.appJSAsset(\n `assets/_engine_/${encodeURIComponent(childEngine.package.name)}.js`,\n childEngine,\n [],\n prepared\n );\n if (childEngine.package.isLazyEngine()) {\n lazyEngines.push({\n names: [childEngine.package.name],\n path: explicitRelative(dirname(relativePath), asset.relativePath),\n });\n } else {\n eagerModules.push(explicitRelative(dirname(relativePath), asset.relativePath));\n }\n }\n let lazyRoutes: { names: string[]; path: string }[] = [];\n for (let [routeName, routeFiles] of appFiles.routeFiles.children) {\n this.splitRoute(\n routeName,\n routeFiles,\n (_: string, filename: string) => {\n requiredAppFiles.push([filename]);\n },\n (routeNames: string[], files: string[]) => {\n let routeEntrypoint = `assets/_route_/${encodeURIComponent(routeNames[0])}.js`;\n if (!prepared.has(routeEntrypoint)) {\n prepared.set(routeEntrypoint, this.routeEntrypoint(engine, routeEntrypoint, files));\n }\n lazyRoutes.push({\n names: routeNames,\n path: this.importPaths(engine, routeEntrypoint, relativePath).buildtime,\n });\n }\n );\n }\n\n let [fastboot, nonFastboot] = partition(excludeDotFiles(flatten(requiredAppFiles)), file =>\n appFiles.isFastbootOnly.get(file)\n );\n let amdModules = nonFastboot.map(file => this.importPaths(engine, file, relativePath));\n let fastbootOnlyAmdModules = fastboot.map(file => this.importPaths(engine, file, relativePath));\n\n // this is a backward-compatibility feature: addons can force inclusion of\n // modules.\n this.gatherImplicitModules('implicit-modules', relativePath, engine, amdModules);\n\n let params = { amdModules, fastbootOnlyAmdModules, lazyRoutes, lazyEngines, eagerModules, styles };\n if (entryParams) {\n Object.assign(params, entryParams);\n }\n\n let source = entryTemplate(params);\n\n let asset: InternalAsset = {\n kind: 'in-memory',\n source,\n relativePath,\n };\n prepared.set(relativePath, asset);\n return asset;\n }\n\n @Memoize()\n private get modulePrefix() {\n return this.adapter.modulePrefix();\n }\n\n private importPaths(engine: Engine, engineRelativePath: string, fromFile: string) {\n let appRelativePath = join(engine.appRelativePath, engineRelativePath);\n let noHBS = engineRelativePath.replace(this.resolvableExtensionsPattern, '').replace(/\\.hbs$/, '');\n return {\n runtime: `${engine.modulePrefix}/${noHBS}`,\n buildtime: explicitRelative(dirname(fromFile), appRelativePath),\n };\n }\n\n private routeEntrypoint(engine: Engine, relativePath: string, files: string[]) {\n let [fastboot, nonFastboot] = partition(files, file => engine.appFiles.isFastbootOnly.get(file));\n\n let asset: InternalAsset = {\n kind: 'in-memory',\n source: routeEntryTemplate({\n files: nonFastboot.map(f => this.importPaths(engine, f, relativePath)),\n fastbootOnlyFiles: fastboot.map(f => this.importPaths(engine, f, relativePath)),\n }),\n relativePath,\n };\n return asset;\n }\n\n private testJSEntrypoint(engines: Engine[], prepared: Map<string, InternalAsset>): InternalAsset {\n let asset = prepared.get(`assets/test.js`);\n if (asset) {\n return asset;\n }\n\n // We're only building tests from the first engine (the app). This is the\n // normal thing to do -- tests from engines don't automatically roll up into\n // the app.\n let engine = engines[0];\n\n const myName = 'assets/test.js';\n\n // tests necessarily also include the app. This is where we account for\n // that. The classic solution was to always include the app's separate\n // script tag in the tests HTML, but that isn't as easy for final stage\n // packagers to understand. It's better to express it here as a direct\n // module dependency.\n let eagerModules: string[] = [\n explicitRelative(dirname(myName), this.topAppJSAsset(engines, prepared).relativePath),\n ];\n\n let amdModules: { runtime: string; buildtime: string }[] = [];\n // this is a backward-compatibility feature: addons can force inclusion of\n // test support modules.\n this.gatherImplicitModules('implicit-test-modules', myName, engine, amdModules);\n\n let { appFiles } = engine;\n for (let relativePath of appFiles.tests) {\n amdModules.push(this.importPaths(engine, relativePath, myName));\n }\n\n let source = entryTemplate({\n amdModules,\n eagerModules,\n testSuffix: true,\n });\n\n asset = {\n kind: 'in-memory',\n source,\n relativePath: myName,\n };\n prepared.set(asset.relativePath, asset);\n return asset;\n }\n\n private gatherImplicitModules(\n section: 'implicit-modules' | 'implicit-test-modules',\n relativeTo: string,\n engine: Engine,\n lazyModules: { runtime: string; buildtime: string }[]\n ) {\n for (let addon of engine.addons) {\n let implicitModules = addon.meta[section];\n if (implicitModules) {\n let renamedModules = inverseRenamedModules(addon.meta, this.resolvableExtensionsPattern);\n for (let name of implicitModules) {\n let packageName = addon.name;\n\n if (addon.isV2Addon()) {\n let renamedMeta = addon.meta['renamed-packages'];\n if (renamedMeta) {\n Object.entries(renamedMeta).forEach(([key, value]) => {\n if (value === addon!.name) {\n packageName = key;\n }\n });\n }\n }\n\n let runtime = join(packageName, name).replace(this.resolvableExtensionsPattern, '');\n let runtimeRenameLookup = runtime.split('\\\\').join('/');\n if (renamedModules && renamedModules[runtimeRenameLookup]) {\n runtime = renamedModules[runtimeRenameLookup];\n }\n runtime = runtime.split(sep).join('/');\n lazyModules.push({\n runtime,\n buildtime:\n this.options.implicitModulesStrategy === 'packageNames'\n ? join(packageName, name)\n : explicitRelative(dirname(join(this.root, relativeTo)), join(addon.root, name)),\n });\n }\n }\n }\n }\n}\n\nconst entryTemplate = compile(`\nimport { importSync as i, macroCondition, getGlobalConfig } from '@embroider/macros';\nlet w = window;\nlet d = w.define;\n\n{{#if styles}}\n if (macroCondition(!getGlobalConfig().fastboot?.isRunning)) {\n {{#each styles as |stylePath| ~}}\n i(\"{{js-string-escape stylePath.path}}\");\n {{/each}}\n }\n{{/if}}\n\n{{#each amdModules as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n{{/each}}\n\n{{#if fastbootOnlyAmdModules}}\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n {{#each fastbootOnlyAmdModules as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n {{/each}}\n }\n{{/if}}\n\n{{#each eagerModules as |eagerModule| ~}}\n i(\"{{js-string-escape eagerModule}}\");\n{{/each}}\n\n{{#if lazyRoutes}}\nw._embroiderRouteBundles_ = [\n {{#each lazyRoutes as |route|}}\n {\n names: {{{json-stringify route.names}}},\n load: function() {\n return import(\"{{js-string-escape route.path}}\");\n }\n },\n {{/each}}\n]\n{{/if}}\n\n{{#if lazyEngines}}\nw._embroiderEngineBundles_ = [\n {{#each lazyEngines as |engine|}}\n {\n names: {{{json-stringify engine.names}}},\n load: function() {\n return import(\"{{js-string-escape engine.path}}\");\n }\n },\n {{/each}}\n]\n{{/if}}\n\n{{#if autoRun ~}}\nif (!runningTests) {\n i(\"{{js-string-escape mainModule}}\").default.create({{{json-stringify appConfig}}});\n}\n{{else if appBoot ~}}\n {{{ appBoot }}}\n{{/if}}\n\n{{#if testSuffix ~}}\n {{!- TODO: both of these suffixes should get dynamically generated so they incorporate\n any content-for added by addons. -}}\n\n\n {{!- this is the traditional tests-suffix.js -}}\n i('../tests/test-helper');\n EmberENV.TESTS_FILE_LOADED = true;\n{{/if}}\n`) as (params: {\n amdModules: { runtime: string; buildtime: string }[];\n fastbootOnlyAmdModules?: { runtime: string; buildtime: string }[];\n eagerModules?: string[];\n autoRun?: boolean;\n appBoot?: string;\n mainModule?: string;\n appConfig?: unknown;\n testSuffix?: boolean;\n lazyRoutes?: { names: string[]; path: string }[];\n lazyEngines?: { names: string[]; path: string }[];\n styles?: { path: string }[];\n}) => string;\n\nconst routeEntryTemplate = compile(`\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n{{#each files as |amdModule| ~}}\nd(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n{{/each}}\n{{#if fastbootOnlyFiles}}\n import { macroCondition, getGlobalConfig } from '@embroider/macros';\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n {{#each fastbootOnlyFiles as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n {{/each}}\n }\n{{/if}}\n`) as (params: {\n files: { runtime: string; buildtime: string }[];\n fastbootOnlyFiles: { runtime: string; buildtime: string }[];\n}) => string;\n\nfunction stringOrBufferEqual(a: string | Buffer, b: string | Buffer): boolean {\n if (typeof a === 'string' && typeof b === 'string') {\n return a === b;\n }\n if (a instanceof Buffer && b instanceof Buffer) {\n return Buffer.compare(a, b) === 0;\n }\n return false;\n}\n\nconst babelFilterTemplate = compile(`\nconst { babelFilter } = require('@embroider/core');\nmodule.exports = babelFilter({{{json-stringify skipBabel}}});\n`) as (params: { skipBabel: Options['skipBabel'] }) => string;\n\n// meta['renamed-modules'] has mapping from classic filename to real filename.\n// This takes that and converts it to the inverst mapping from real import path\n// to classic import path.\nfunction inverseRenamedModules(meta: AddonPackage['meta'], extensions: RegExp) {\n let renamed = meta['renamed-modules'];\n if (renamed) {\n let inverted = {} as { [name: string]: string };\n for (let [classic, real] of Object.entries(renamed)) {\n inverted[real.replace(extensions, '')] = classic.replace(extensions, '');\n }\n return inverted;\n }\n}\n\nfunction combinePackageJSON(...layers: object[]) {\n function custom(objValue: any, srcValue: any, key: string, _object: any, _source: any, stack: { size: number }) {\n if (key === 'keywords' && stack.size === 0) {\n if (Array.isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n }\n return mergeWith({}, ...layers, custom);\n}\n"]}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AddonMeta,\n AppMeta,\n Package,\n AddonPackage,\n explicitRelative,\n extensionsPattern,\n PackageInfo,\n} from '@embroider/shared-internals';\nimport { OutputPaths } from './wait-for-trees';\nimport { compile } from './js-handlebars';\nimport resolve from 'resolve';\nimport { Memoize } from 'typescript-memoize';\nimport { copySync, ensureDirSync, readJSONSync, statSync, unlinkSync, writeFileSync } from 'fs-extra';\nimport { dirname, join, resolve as resolvePath, sep } from 'path';\nimport { debug, warn } from './messages';\nimport sortBy from 'lodash/sortBy';\nimport flatten from 'lodash/flatten';\nimport AppDiffer from './app-differ';\nimport { PreparedEmberHTML } from './ember-html';\nimport { Asset, EmberAsset, ImplicitAssetPaths, InMemoryAsset, OnDiskAsset } from './asset';\nimport assertNever from 'assert-never';\nimport SourceMapConcat from 'fast-sourcemap-concat';\nimport Options from './options';\nimport { MacrosConfig } from '@embroider/macros/src/node';\nimport { PluginItem, TransformOptions } from '@babel/core';\nimport { makePortable } from './portable-babel-config';\nimport { TemplateCompilerPlugins } from '.';\nimport type { NodeTemplateCompilerParams } from './template-compiler-node';\nimport { templateCompilerModule } from './write-template-compiler';\nimport { Resolver } from './resolver';\nimport { Options as AdjustImportsOptions } from './babel-plugin-adjust-imports';\nimport { mangledEngineRoot } from './engine-mangler';\nimport { AppFiles, Engine, EngineSummary, RouteFiles } from './app-files';\nimport partition from 'lodash/partition';\nimport mergeWith from 'lodash/mergeWith';\nimport cloneDeep from 'lodash/cloneDeep';\nimport type { Params as InlineBabelParams } from './babel-plugin-inline-hbs-node';\nimport { PortableHint, maybeNodeModuleVersion } from './portable';\nimport escapeRegExp from 'escape-string-regexp';\nimport { getEmberExports } from './load-ember-template-compiler';\nimport type { Options as InlinePrecompileOptions } from 'babel-plugin-ember-template-compilation';\nimport type { Options as ColocationOptions } from '@embroider/shared-internals/src/template-colocation-plugin';\n\nexport type EmberENV = unknown;\n\n/*\n This interface is the boundary between the general-purpose build system in\n AppBuilder and the messy specifics of apps.\n\n - CompatAppAdapter in `@embroider/compat` implements this interface for\n building based of a legacy ember-cli EmberApp instance\n - We will want to make a different class that implements this interface for\n building apps that don't need an EmberApp instance at all (presumably\n because they opt into new authoring standards.\n*/\nexport interface AppAdapter<TreeNames> {\n // the set of all addon packages that are active (recursive)\n readonly allActiveAddons: AddonPackage[];\n\n // the direct active addon dependencies of a given package\n activeAddonChildren(pkg: Package): AddonPackage[];\n\n // path to the directory where the app's own Javascript lives. Doesn't include\n // any files copied out of addons, we take care of that generically in\n // AppBuilder.\n appJSSrcDir(treePaths: OutputPaths<TreeNames>): string;\n\n // path to the directory where the app's own Fastboot-only Javascript lives.\n // Doesn't include any files copied out of addons, we take care of that\n // generically in AppBuilder.\n fastbootJSSrcDir(treePaths: OutputPaths<TreeNames>): string | undefined;\n\n // this is where you declare what assets must be in the final output\n // (especially index.html, tests/index.html, and anything from your classic\n // public tree).\n assets(treePaths: OutputPaths<TreeNames>): Asset[];\n\n // whether the ember app should boot itself automatically\n autoRun(): boolean;\n\n // custom app-boot logic when the autoRun is set to false\n appBoot(): string | undefined;\n\n // the ember app's main module\n mainModule(): string;\n\n // the configuration that will get passed into the ember app's main module.\n // This traditionally comes from the `APP` property returned by\n // config/environment.js.\n mainModuleConfig(): unknown;\n\n // The namespace for the app's own modules at runtime.\n //\n // (For apps, we _do_ still allow this to be arbitrary. This is in contrast\n // with _addons_, which absolutley must use their real NPM package name as\n // their modulePrefix.)\n modulePrefix(): string;\n\n // The module prefix when pods file layout is used\n podModulePrefix(): string | undefined;\n\n // The public URL at which your app will be served.\n rootURL(): string;\n\n // The path to ember's template compiler source\n templateCompilerPath(): string;\n\n // Path to a build-time Resolver module to be used during template\n // compilation.\n templateResolver(): Resolver;\n\n // describes the special module naming rules that we need to achieve\n // compatibility\n adjustImportsOptions(): AdjustImportsOptions;\n\n adjustImportsOptionsPath(): string;\n\n // The template preprocessor plugins that are configured in the app.\n htmlbarsPlugins(): TemplateCompilerPlugins;\n\n // the app's preferred babel config. No need to worry about making it portable\n // yet, we will do that for you.\n babelConfig(): TransformOptions;\n\n // the babel version that works with your babelConfig.\n babelMajorVersion(): 7;\n\n // The environment settings used to control Ember itself. In a classic app,\n // this comes from the EmberENV property returned by config/environment.js.\n emberENV(): EmberENV;\n\n // when true, the app's own code is understood to already follow v2 standards.\n // For example, all imports of templates have an explicit `hbs` extension, and\n // all imports of your own package use relative imports instead of you rown\n // name. When false, your code is treated more leniently and you get the\n // auto-upgraded behaviors that v1 addons also get.\n strictV2Format(): boolean;\n\n // list of directories that point to the roots of addon packages that are\n // under active development\n developingAddons(): string[];\n\n // development, test, or production\n env: string;\n}\n\nexport function excludeDotFiles(files: string[]) {\n return files.filter(file => !file.startsWith('.') && !file.includes('/.'));\n}\n\nexport const CACHE_BUSTING_PLUGIN = {\n path: require.resolve('@embroider/shared-internals/src/babel-plugin-cache-busting.js'),\n version: readJSONSync(`${__dirname}/../package.json`).version,\n};\n\nexport function addCachablePlugin(babelConfig: TransformOptions) {\n if (Array.isArray(babelConfig.plugins) && babelConfig.plugins.length > 0) {\n const plugins = Object.create(null);\n plugins[CACHE_BUSTING_PLUGIN.path] = CACHE_BUSTING_PLUGIN.version;\n\n for (const plugin of babelConfig.plugins) {\n let absolutePathToPlugin: string;\n if (Array.isArray(plugin) && typeof plugin[0] === 'string') {\n absolutePathToPlugin = plugin[0] as string;\n } else if (typeof plugin === 'string') {\n absolutePathToPlugin = plugin;\n } else {\n throw new Error(`[Embroider] a babel plugin without an absolute path was from: ${plugin}`);\n }\n\n plugins[absolutePathToPlugin] = maybeNodeModuleVersion(absolutePathToPlugin);\n }\n\n babelConfig.plugins.push([\n CACHE_BUSTING_PLUGIN.path,\n {\n plugins,\n },\n ]);\n }\n}\n\nclass ParsedEmberAsset {\n kind: 'parsed-ember' = 'parsed-ember';\n relativePath: string;\n fileAsset: EmberAsset;\n html: PreparedEmberHTML;\n\n constructor(asset: EmberAsset) {\n this.fileAsset = asset;\n this.html = new PreparedEmberHTML(asset);\n this.relativePath = asset.relativePath;\n }\n\n validFor(other: EmberAsset) {\n return this.fileAsset.mtime === other.mtime && this.fileAsset.size === other.size;\n }\n}\n\nclass BuiltEmberAsset {\n kind: 'built-ember' = 'built-ember';\n relativePath: string;\n parsedAsset: ParsedEmberAsset;\n source: string;\n\n constructor(asset: ParsedEmberAsset) {\n this.parsedAsset = asset;\n this.source = asset.html.dom.serialize();\n this.relativePath = asset.relativePath;\n }\n}\n\nclass ConcatenatedAsset {\n kind: 'concatenated-asset' = 'concatenated-asset';\n constructor(\n public relativePath: string,\n public sources: (OnDiskAsset | InMemoryAsset)[],\n private resolvableExtensions: RegExp\n ) {}\n get sourcemapPath() {\n return this.relativePath.replace(this.resolvableExtensions, '') + '.map';\n }\n}\n\ntype InternalAsset = OnDiskAsset | InMemoryAsset | BuiltEmberAsset | ConcatenatedAsset;\n\nexport class AppBuilder<TreeNames> {\n // for each relativePath, an Asset we have already emitted\n private assets: Map<string, InternalAsset> = new Map();\n\n constructor(\n private root: string,\n private app: Package,\n private adapter: AppAdapter<TreeNames>,\n private options: Required<Options>,\n private macrosConfig: MacrosConfig\n ) {\n // this uses globalConfig because it's a way for packages to ask \"is\n // Embroider doing this build?\". So it's necessarily global, not scoped to\n // any subgraph of dependencies.\n macrosConfig.setGlobalConfig(__filename, `@embroider/core`, {\n // this is hard-coded to true because it literally means \"embroider is\n // building this Ember app\". You can see non-true when using the Embroider\n // macros in a classic build.\n active: true,\n });\n }\n\n private scriptPriority(pkg: Package) {\n switch (pkg.name) {\n case 'loader.js':\n return 0;\n case 'ember-source':\n return 10;\n default:\n return 1000;\n }\n }\n\n @Memoize()\n private get resolvableExtensionsPattern(): RegExp {\n return extensionsPattern(this.adapter.adjustImportsOptions().resolvableExtensions);\n }\n\n private impliedAssets(\n type: keyof ImplicitAssetPaths,\n engine: Engine,\n emberENV?: EmberENV\n ): (OnDiskAsset | InMemoryAsset)[] {\n let result: (OnDiskAsset | InMemoryAsset)[] = this.impliedAddonAssets(type, engine).map(\n (sourcePath: string): OnDiskAsset => {\n let stats = statSync(sourcePath);\n return {\n kind: 'on-disk',\n relativePath: explicitRelative(this.root, sourcePath),\n sourcePath,\n mtime: stats.mtimeMs,\n size: stats.size,\n };\n }\n );\n\n if (type === 'implicit-scripts') {\n result.unshift({\n kind: 'in-memory',\n relativePath: '_testing_prefix_.js',\n source: `var runningTests=false;`,\n });\n\n result.unshift({\n kind: 'in-memory',\n relativePath: '_ember_env_.js',\n source: `window.EmberENV=${JSON.stringify(emberENV, null, 2)};`,\n });\n\n result.push({\n kind: 'in-memory',\n relativePath: '_loader_.js',\n source: `loader.makeDefaultExport=false;`,\n });\n }\n\n if (type === 'implicit-test-scripts') {\n // this is the traditional test-support-suffix.js\n result.push({\n kind: 'in-memory',\n relativePath: '_testing_suffix_.js',\n source: `\n var runningTests=true;\n if (typeof Testem !== 'undefined' && (typeof QUnit !== 'undefined' || typeof Mocha !== 'undefined')) {\n Testem.hookIntoTestFramework();\n }`,\n });\n\n // whether or not anybody was actually using @embroider/macros\n // explicitly as an addon, we ensure its test-support file is always\n // present.\n if (!result.find(s => s.kind === 'on-disk' && s.sourcePath.endsWith('embroider-macros-test-support.js'))) {\n result.unshift({\n kind: 'on-disk',\n sourcePath: require.resolve('@embroider/macros/src/vendor/embroider-macros-test-support'),\n mtime: 0,\n size: 0,\n relativePath: 'embroider-macros-test-support.js',\n });\n }\n }\n\n return result;\n }\n\n private impliedAddonAssets(type: keyof ImplicitAssetPaths, engine: Engine): string[] {\n let result: Array<string> = [];\n for (let addon of sortBy(Array.from(engine.addons), this.scriptPriority.bind(this))) {\n let implicitScripts = addon.meta[type];\n if (implicitScripts) {\n let styles = [];\n let options = { basedir: addon.root };\n for (let mod of implicitScripts) {\n if (type === 'implicit-styles') {\n // exclude engines because they will handle their own css importation\n if (!addon.isLazyEngine()) {\n styles.push(resolve.sync(mod, options));\n }\n } else {\n result.push(resolve.sync(mod, options));\n }\n }\n if (styles.length) {\n result = [...styles, ...result];\n }\n }\n }\n return result;\n }\n\n // unlike our full config, this one just needs to know how to parse all the\n // syntax our app can contain.\n @Memoize()\n private babelParserConfig(): TransformOptions {\n let babel = cloneDeep(this.adapter.babelConfig());\n\n if (!babel.plugins) {\n babel.plugins = [];\n }\n\n // Our stage3 code is always allowed to use dynamic import. We may emit it\n // ourself when splitting routes.\n babel.plugins.push(require.resolve('@babel/plugin-syntax-dynamic-import'));\n return babel;\n }\n\n @Memoize()\n private babelConfig(templateCompilerParams: NodeTemplateCompilerParams, appFiles: Engine[]) {\n let babel = cloneDeep(this.adapter.babelConfig());\n\n if (!babel.plugins) {\n babel.plugins = [];\n }\n\n // Our stage3 code is always allowed to use dynamic import. We may emit it\n // ourself when splitting routes.\n babel.plugins.push(require.resolve('@babel/plugin-syntax-dynamic-import'));\n\n // https://github.com/webpack/webpack/issues/12154\n babel.plugins.push(require.resolve('./rename-require-plugin'));\n\n if (this.adapter.adjustImportsOptions().emberNeedsModulesPolyfill) {\n // on older ember versions that need the modules-api-polyfill, we use our\n // bespoke inline template compiler plugin.\n babel.plugins.push([\n join(__dirname, 'babel-plugin-inline-hbs-node.js'),\n {\n templateCompiler: templateCompilerParams,\n stage: 3,\n } as InlineBabelParams,\n ]);\n } else {\n // on newer ember versions that don't need the modules-api-polyfill, we\n // can compose with the newer babel-plugin-htmlbars-inline-precompile, and\n // use a simpler plugin that only needs to handle inserting discovered\n // dependencies.\n babel.plugins.push([\n join(__dirname, '../src/babel-plugin-inline-hbs-deps-node.js'),\n { templateCompiler: templateCompilerParams },\n ]);\n babel.plugins.push([\n require.resolve('babel-plugin-ember-template-compilation'),\n {\n precompilerPath: join(__dirname, '../src/babel-plugin-inline-hbs-deps-node.js'),\n } as InlinePrecompileOptions,\n ]);\n }\n\n // this is @embroider/macros configured for full stage3 resolution\n babel.plugins.push(...this.macrosConfig.babelPluginConfig());\n\n let colocationOptions: ColocationOptions = {\n packageGuard: true,\n };\n babel.plugins.push([\n require.resolve('@embroider/shared-internals/src/template-colocation-plugin'),\n colocationOptions,\n ]);\n\n babel.plugins.push(this.adjustImportsPlugin(appFiles));\n\n // we can use globally shared babel runtime by default\n babel.plugins.push([\n require.resolve('@babel/plugin-transform-runtime'),\n { absoluteRuntime: __dirname, useESModules: true, regenerator: false },\n ]);\n\n const portable = makePortable(babel, { basedir: this.root }, this.portableHints);\n addCachablePlugin(portable.config);\n return portable;\n }\n\n private adjustImportsPlugin(engines: Engine[]): PluginItem {\n let relocatedFiles: AdjustImportsOptions['relocatedFiles'] = {};\n for (let { destPath, appFiles } of engines) {\n for (let [relativePath, originalPath] of appFiles.relocatedFiles) {\n relocatedFiles[join(destPath, relativePath).split(sep).join('/')] = originalPath;\n }\n }\n let relocatedFilesPath = join(this.root, '_relocated_files.json');\n writeFileSync(relocatedFilesPath, JSON.stringify({ relocatedFiles }));\n return [\n require.resolve('./babel-plugin-adjust-imports'),\n {\n adjustImportsOptionsPath: this.adapter.adjustImportsOptionsPath(),\n relocatedFilesPath,\n },\n ];\n }\n\n private insertEmberApp(\n asset: ParsedEmberAsset,\n appFiles: Engine[],\n prepared: Map<string, InternalAsset>,\n emberENV: EmberENV\n ) {\n let html = asset.html;\n\n if (this.fastbootConfig) {\n // ignore scripts like ember-cli-livereload.js which are not really associated with\n // \"the app\".\n let ignoreScripts = html.dom.window.document.querySelectorAll('script');\n ignoreScripts.forEach(script => {\n script.setAttribute('data-fastboot-ignore', '');\n });\n }\n\n // our tests entrypoint already includes a correct module dependency on the\n // app, so we only insert the app when we're not inserting tests\n if (!asset.fileAsset.includeTests) {\n let appJS = this.topAppJSAsset(appFiles, prepared);\n html.insertScriptTag(html.javascript, appJS.relativePath, { type: 'module' });\n }\n\n if (this.fastbootConfig) {\n // any extra fastboot app files get inserted into our html.javascript\n // section, after the app has been inserted.\n for (let script of this.fastbootConfig.extraAppFiles) {\n html.insertScriptTag(html.javascript, script, { tag: 'fastboot-script' });\n }\n }\n\n html.insertStyleLink(html.styles, `assets/${this.app.name}.css`);\n\n const parentEngine = appFiles.find(e => !e.parent) as Engine;\n let vendorJS = this.implicitScriptsAsset(prepared, parentEngine, emberENV);\n if (vendorJS) {\n html.insertScriptTag(html.implicitScripts, vendorJS.relativePath);\n }\n\n if (this.fastbootConfig) {\n // any extra fastboot vendor files get inserted into our\n // html.implicitScripts section, after the regular implicit script\n // (vendor.js) have been inserted.\n for (let script of this.fastbootConfig.extraVendorFiles) {\n html.insertScriptTag(html.implicitScripts, script, { tag: 'fastboot-script' });\n }\n }\n\n let implicitStyles = this.implicitStylesAsset(prepared, parentEngine);\n if (implicitStyles) {\n html.insertStyleLink(html.implicitStyles, implicitStyles.relativePath);\n }\n\n if (!asset.fileAsset.includeTests) {\n return;\n }\n\n // Test-related assets happen below this point\n\n let testJS = this.testJSEntrypoint(appFiles, prepared);\n html.insertScriptTag(html.testJavascript, testJS.relativePath, { type: 'module' });\n\n let implicitTestScriptsAsset = this.implicitTestScriptsAsset(prepared, parentEngine);\n if (implicitTestScriptsAsset) {\n html.insertScriptTag(html.implicitTestScripts, implicitTestScriptsAsset.relativePath);\n }\n\n let implicitTestStylesAsset = this.implicitTestStylesAsset(prepared, parentEngine);\n if (implicitTestStylesAsset) {\n html.insertStyleLink(html.implicitTestStyles, implicitTestStylesAsset.relativePath);\n }\n }\n\n private implicitScriptsAsset(\n prepared: Map<string, InternalAsset>,\n application: Engine,\n emberENV: EmberENV\n ): InternalAsset | undefined {\n let asset = prepared.get('assets/vendor.js');\n if (!asset) {\n let implicitScripts = this.impliedAssets('implicit-scripts', application, emberENV);\n if (implicitScripts.length > 0) {\n asset = new ConcatenatedAsset('assets/vendor.js', implicitScripts, this.resolvableExtensionsPattern);\n prepared.set(asset.relativePath, asset);\n }\n }\n return asset;\n }\n\n private implicitStylesAsset(prepared: Map<string, InternalAsset>, application: Engine): InternalAsset | undefined {\n let asset = prepared.get('assets/vendor.css');\n if (!asset) {\n let implicitStyles = this.impliedAssets('implicit-styles', application);\n if (implicitStyles.length > 0) {\n // we reverse because we want the synthetic vendor style at the top\n asset = new ConcatenatedAsset('assets/vendor.css', implicitStyles.reverse(), this.resolvableExtensionsPattern);\n prepared.set(asset.relativePath, asset);\n }\n }\n return asset;\n }\n\n private implicitTestScriptsAsset(\n prepared: Map<string, InternalAsset>,\n application: Engine\n ): InternalAsset | undefined {\n let testSupportJS = prepared.get('assets/test-support.js');\n if (!testSupportJS) {\n let implicitTestScripts = this.impliedAssets('implicit-test-scripts', application);\n if (implicitTestScripts.length > 0) {\n testSupportJS = new ConcatenatedAsset(\n 'assets/test-support.js',\n implicitTestScripts,\n this.resolvableExtensionsPattern\n );\n prepared.set(testSupportJS.relativePath, testSupportJS);\n }\n }\n return testSupportJS;\n }\n\n private implicitTestStylesAsset(\n prepared: Map<string, InternalAsset>,\n application: Engine\n ): InternalAsset | undefined {\n let asset = prepared.get('assets/test-support.css');\n if (!asset) {\n let implicitTestStyles = this.impliedAssets('implicit-test-styles', application);\n if (implicitTestStyles.length > 0) {\n asset = new ConcatenatedAsset('assets/test-support.css', implicitTestStyles, this.resolvableExtensionsPattern);\n prepared.set(asset.relativePath, asset);\n }\n }\n return asset;\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.\n private findActiveAddons(pkg: Package, engine: EngineSummary): void {\n for (let child of this.adapter.activeAddonChildren(pkg)) {\n if (!child.isEngine()) {\n this.findActiveAddons(child, engine);\n }\n engine.addons.add(child);\n }\n }\n\n private partitionEngines(appJSPath: string): EngineSummary[] {\n let queue: EngineSummary[] = [\n {\n package: this.app,\n addons: new Set(),\n parent: undefined,\n sourcePath: appJSPath,\n destPath: this.root,\n modulePrefix: this.modulePrefix,\n appRelativePath: '.',\n },\n ];\n let done: EngineSummary[] = [];\n let seenEngines: Set<Package> = new Set();\n while (true) {\n let current = queue.shift();\n if (!current) {\n break;\n }\n this.findActiveAddons(current.package, current);\n for (let addon of current.addons) {\n if (addon.isEngine() && !seenEngines.has(addon)) {\n seenEngines.add(addon);\n queue.push({\n package: addon,\n addons: new Set(),\n parent: current,\n sourcePath: mangledEngineRoot(addon),\n destPath: addon.root,\n modulePrefix: addon.name,\n appRelativePath: explicitRelative(this.root, addon.root),\n });\n }\n }\n done.push(current);\n }\n return done;\n }\n\n @Memoize()\n private get activeFastboot() {\n return this.adapter.activeAddonChildren(this.app).find(a => a.name === 'ember-cli-fastboot');\n }\n\n @Memoize()\n private get fastbootConfig():\n | { packageJSON: PackageInfo; extraAppFiles: string[]; extraVendorFiles: string[] }\n | undefined {\n if (this.activeFastboot) {\n // this is relying on work done in stage1 by @embroider/compat/src/compat-adapters/ember-cli-fastboot.ts\n let packageJSON = readJSONSync(join(this.activeFastboot.root, '_fastboot_', 'package.json'));\n let { extraAppFiles, extraVendorFiles } = packageJSON['embroider-fastboot'];\n delete packageJSON['embroider-fastboot'];\n extraVendorFiles.push('assets/embroider_macros_fastboot_init.js');\n return { packageJSON, extraAppFiles, extraVendorFiles };\n }\n }\n\n private appDiffers: { differ: AppDiffer; engine: EngineSummary }[] | undefined;\n\n private updateAppJS(inputPaths: OutputPaths<TreeNames>): Engine[] {\n let appJSPath = this.adapter.appJSSrcDir(inputPaths);\n if (!this.appDiffers) {\n let engines = this.partitionEngines(appJSPath);\n this.appDiffers = engines.map(engine => {\n let differ: AppDiffer;\n if (this.activeFastboot) {\n differ = new AppDiffer(\n engine.destPath,\n engine.sourcePath,\n [...engine.addons],\n true,\n this.adapter.fastbootJSSrcDir(inputPaths),\n this.babelParserConfig()\n );\n } else {\n differ = new AppDiffer(engine.destPath, engine.sourcePath, [...engine.addons]);\n }\n return {\n differ,\n engine,\n };\n });\n }\n // this is in reverse order because we need deeper engines to update before\n // their parents, because they aren't really valid packages until they\n // update, and their parents will go looking for their own `app-js` content.\n this.appDiffers\n .slice()\n .reverse()\n .forEach(a => a.differ.update());\n return this.appDiffers.map(a => {\n return Object.assign({}, a.engine, {\n appFiles: new AppFiles(a.differ, this.resolvableExtensionsPattern, this.adapter.podModulePrefix()),\n });\n });\n }\n\n private prepareAsset(asset: Asset, appFiles: Engine[], prepared: Map<string, InternalAsset>, emberENV: EmberENV) {\n if (asset.kind === 'ember') {\n let prior = this.assets.get(asset.relativePath);\n let parsed: ParsedEmberAsset;\n if (prior && prior.kind === 'built-ember' && prior.parsedAsset.validFor(asset)) {\n // we can reuse the parsed html\n parsed = prior.parsedAsset;\n parsed.html.clear();\n } else {\n parsed = new ParsedEmberAsset(asset);\n }\n this.insertEmberApp(parsed, appFiles, prepared, emberENV);\n prepared.set(asset.relativePath, new BuiltEmberAsset(parsed));\n } else {\n prepared.set(asset.relativePath, asset);\n }\n }\n\n private prepareAssets(requestedAssets: Asset[], appFiles: Engine[], emberENV: EmberENV): Map<string, InternalAsset> {\n let prepared: Map<string, InternalAsset> = new Map();\n for (let asset of requestedAssets) {\n this.prepareAsset(asset, appFiles, prepared, emberENV);\n }\n return prepared;\n }\n\n private assetIsValid(asset: InternalAsset, prior: InternalAsset | undefined): boolean {\n if (!prior) {\n return false;\n }\n switch (asset.kind) {\n case 'on-disk':\n return prior.kind === 'on-disk' && prior.size === asset.size && prior.mtime === asset.mtime;\n case 'in-memory':\n return prior.kind === 'in-memory' && stringOrBufferEqual(prior.source, asset.source);\n case 'built-ember':\n return prior.kind === 'built-ember' && prior.source === asset.source;\n case 'concatenated-asset':\n return (\n prior.kind === 'concatenated-asset' &&\n prior.sources.length === asset.sources.length &&\n prior.sources.every((priorFile, index) => {\n let newFile = asset.sources[index];\n return this.assetIsValid(newFile, priorFile);\n })\n );\n }\n }\n\n private updateOnDiskAsset(asset: OnDiskAsset) {\n let destination = join(this.root, asset.relativePath);\n ensureDirSync(dirname(destination));\n copySync(asset.sourcePath, destination, { dereference: true });\n }\n\n private updateInMemoryAsset(asset: InMemoryAsset) {\n let destination = join(this.root, asset.relativePath);\n ensureDirSync(dirname(destination));\n writeFileSync(destination, asset.source, 'utf8');\n }\n\n private updateBuiltEmberAsset(asset: BuiltEmberAsset) {\n let destination = join(this.root, asset.relativePath);\n ensureDirSync(dirname(destination));\n writeFileSync(destination, asset.source, 'utf8');\n }\n\n private async updateConcatenatedAsset(asset: ConcatenatedAsset) {\n let concat = new SourceMapConcat({\n outputFile: join(this.root, asset.relativePath),\n mapCommentType: asset.relativePath.endsWith('.js') ? 'line' : 'block',\n baseDir: this.root,\n });\n if (process.env.EMBROIDER_CONCAT_STATS) {\n let MeasureConcat = (await import('./measure-concat')).default;\n concat = new MeasureConcat(asset.relativePath, concat, this.root);\n }\n for (let source of asset.sources) {\n switch (source.kind) {\n case 'on-disk':\n concat.addFile(explicitRelative(this.root, source.sourcePath));\n break;\n case 'in-memory':\n if (typeof source.source !== 'string') {\n throw new Error(`attempted to concatenated a Buffer-backed in-memory asset`);\n }\n concat.addSpace(source.source);\n break;\n default:\n assertNever(source);\n }\n }\n await concat.end();\n }\n\n private async updateAssets(requestedAssets: Asset[], appFiles: Engine[], emberENV: EmberENV) {\n let assets = this.prepareAssets(requestedAssets, appFiles, emberENV);\n for (let asset of assets.values()) {\n if (this.assetIsValid(asset, this.assets.get(asset.relativePath))) {\n continue;\n }\n debug('rebuilding %s', asset.relativePath);\n switch (asset.kind) {\n case 'on-disk':\n this.updateOnDiskAsset(asset);\n break;\n case 'in-memory':\n this.updateInMemoryAsset(asset);\n break;\n case 'built-ember':\n this.updateBuiltEmberAsset(asset);\n break;\n case 'concatenated-asset':\n await this.updateConcatenatedAsset(asset);\n break;\n default:\n assertNever(asset);\n }\n }\n for (let oldAsset of this.assets.values()) {\n if (!assets.has(oldAsset.relativePath)) {\n unlinkSync(join(this.root, oldAsset.relativePath));\n }\n }\n this.assets = assets;\n return [...assets.values()];\n }\n\n private gatherAssets(inputPaths: OutputPaths<TreeNames>): Asset[] {\n // first gather all the assets out of addons\n let assets: Asset[] = [];\n for (let pkg of this.adapter.allActiveAddons) {\n if (pkg.meta['public-assets']) {\n for (let [filename, appRelativeURL] of Object.entries(pkg.meta['public-assets'] || {})) {\n let sourcePath = resolvePath(pkg.root, filename);\n let stats = statSync(sourcePath);\n assets.push({\n kind: 'on-disk',\n sourcePath,\n relativePath: appRelativeURL,\n mtime: stats.mtimeMs,\n size: stats.size,\n });\n }\n }\n }\n\n if (this.activeFastboot) {\n const source = `\n (function(){\n var key = '_embroider_macros_runtime_config';\n if (!window[key]){ window[key] = [];}\n window[key].push(function(m) {\n m.setGlobalConfig('fastboot', Object.assign({}, m.getGlobalConfig().fastboot, { isRunning: true }));\n });\n }())`;\n assets.push({\n kind: 'in-memory',\n source,\n relativePath: 'assets/embroider_macros_fastboot_init.js',\n });\n }\n\n // and finally tack on the ones from our app itself\n return assets.concat(this.adapter.assets(inputPaths));\n }\n\n async build(inputPaths: OutputPaths<TreeNames>) {\n if (this.adapter.env !== 'production') {\n this.macrosConfig.enableAppDevelopment(this.root);\n this.macrosConfig.enableRuntimeMode();\n }\n for (let pkgRoot of this.adapter.developingAddons()) {\n this.macrosConfig.enablePackageDevelopment(pkgRoot);\n }\n\n // on the first build, we lock down the macros config. on subsequent builds,\n // this doesn't do anything anyway because it's idempotent.\n this.macrosConfig.finalize();\n\n let appFiles = this.updateAppJS(inputPaths);\n let emberENV = this.adapter.emberENV();\n let assets = this.gatherAssets(inputPaths);\n\n let finalAssets = await this.updateAssets(assets, appFiles, emberENV);\n let templateCompiler = this.templateCompiler(emberENV);\n let babelConfig = this.babelConfig(templateCompiler, appFiles);\n let templateCompilerIsParallelSafe = this.addTemplateCompiler(templateCompiler);\n this.addBabelConfig(babelConfig);\n\n let assetPaths = assets.map(asset => asset.relativePath);\n\n if (this.activeFastboot) {\n // when using fastboot, our own package.json needs to be in the output so fastboot can read it.\n assetPaths.push('package.json');\n }\n\n for (let asset of finalAssets) {\n // our concatenated assets all have map files that ride along. Here we're\n // telling the final stage packager to be sure and serve the map files\n // too.\n if (asset.kind === 'concatenated-asset') {\n assetPaths.push(asset.sourcemapPath);\n }\n }\n\n let meta: AppMeta = {\n type: 'app',\n version: 2,\n assets: assetPaths,\n 'template-compiler': {\n filename: '_template_compiler_.js',\n isParallelSafe: templateCompilerIsParallelSafe,\n },\n babel: {\n filename: '_babel_config_.js',\n isParallelSafe: babelConfig.isParallelSafe,\n majorVersion: this.adapter.babelMajorVersion(),\n fileFilter: '_babel_filter_.js',\n },\n 'resolvable-extensions': this.adapter.adjustImportsOptions().resolvableExtensions,\n 'root-url': this.adapter.rootURL(),\n };\n\n if (!this.adapter.strictV2Format()) {\n meta['auto-upgraded'] = true;\n }\n\n let pkg = this.combinePackageJSON(meta);\n writeFileSync(join(this.root, 'package.json'), JSON.stringify(pkg, null, 2), 'utf8');\n }\n\n private combinePackageJSON(meta: AppMeta): object {\n let pkgLayers: any[] = [this.app.packageJSON];\n let fastbootConfig = this.fastbootConfig;\n if (fastbootConfig) {\n // fastboot-specific package.json output is allowed to add to our original package.json\n pkgLayers.push(fastbootConfig.packageJSON);\n }\n // but our own new v2 app metadata takes precedence over both\n pkgLayers.push({ keywords: ['ember-addon'], 'ember-addon': meta });\n return combinePackageJSON(...pkgLayers);\n }\n\n private templateCompiler(config: EmberENV): NodeTemplateCompilerParams {\n let plugins = this.adapter.htmlbarsPlugins();\n if (!plugins.ast) {\n plugins.ast = [];\n }\n let { plugins: macroPlugins, setConfig } = MacrosConfig.astPlugins();\n setConfig(this.macrosConfig);\n for (let macroPlugin of macroPlugins) {\n plugins.ast.push(macroPlugin);\n }\n\n const compilerPath = resolve.sync(this.adapter.templateCompilerPath(), { basedir: this.root });\n const compilerChecksum = getEmberExports(compilerPath).cacheKey;\n\n return {\n plugins,\n compilerPath,\n compilerChecksum,\n resolver: this.adapter.templateResolver(),\n EmberENV: config,\n };\n }\n\n @Memoize()\n private get portableHints(): PortableHint[] {\n return this.options.pluginHints.map(hint => {\n let cursor = join(this.app.root, 'package.json');\n for (let i = 0; i < hint.resolve.length; i++) {\n let target = hint.resolve[i];\n if (i < hint.resolve.length - 1) {\n target = join(target, 'package.json');\n }\n cursor = resolve.sync(target, { basedir: dirname(cursor) });\n }\n\n return {\n requireFile: cursor,\n useMethod: hint.useMethod,\n packageVersion: maybeNodeModuleVersion(cursor),\n };\n });\n }\n\n private addTemplateCompiler(params: NodeTemplateCompilerParams): boolean {\n let mod = templateCompilerModule(params, this.portableHints);\n writeFileSync(join(this.root, '_template_compiler_.js'), mod.src, 'utf8');\n return mod.isParallelSafe;\n }\n\n private addBabelConfig(pconfig: { config: TransformOptions; isParallelSafe: boolean }) {\n if (!pconfig.isParallelSafe) {\n warn('Your build is slower because some babel plugins are non-serializable');\n }\n writeFileSync(\n join(this.root, '_babel_config_.js'),\n `module.exports = ${JSON.stringify(pconfig.config, null, 2)}`,\n 'utf8'\n );\n writeFileSync(\n join(this.root, '_babel_filter_.js'),\n babelFilterTemplate({ skipBabel: this.options.skipBabel }),\n 'utf8'\n );\n }\n\n private shouldSplitRoute(routeName: string) {\n return (\n !this.options.splitAtRoutes ||\n this.options.splitAtRoutes.find(pattern => {\n if (typeof pattern === 'string') {\n return pattern === routeName;\n } else {\n return pattern.test(routeName);\n }\n })\n );\n }\n\n private splitRoute(\n routeName: string,\n files: RouteFiles,\n addToParent: (routeName: string, filename: string) => void,\n addLazyBundle: (routeNames: string[], files: string[]) => void\n ) {\n let shouldSplit = routeName && this.shouldSplitRoute(routeName);\n let ownFiles = [];\n let ownNames = new Set() as Set<string>;\n\n if (files.template) {\n if (shouldSplit) {\n ownFiles.push(files.template);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.template);\n }\n }\n\n if (files.controller) {\n if (shouldSplit) {\n ownFiles.push(files.controller);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.controller);\n }\n }\n\n if (files.route) {\n if (shouldSplit) {\n ownFiles.push(files.route);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.route);\n }\n }\n\n for (let [childName, childFiles] of files.children) {\n this.splitRoute(\n `${routeName}.${childName}`,\n childFiles,\n\n (childRouteName: string, childFile: string) => {\n // this is our child calling \"addToParent\"\n if (shouldSplit) {\n ownFiles.push(childFile);\n ownNames.add(childRouteName);\n } else {\n addToParent(childRouteName, childFile);\n }\n },\n (routeNames: string[], files: string[]) => {\n addLazyBundle(routeNames, files);\n }\n );\n }\n\n if (ownFiles.length > 0) {\n addLazyBundle([...ownNames], ownFiles);\n }\n }\n\n private topAppJSAsset(engines: Engine[], prepared: Map<string, InternalAsset>): InternalAsset {\n let [app, ...childEngines] = engines;\n let relativePath = `assets/${this.app.name}.js`;\n return this.appJSAsset(relativePath, app, childEngines, prepared, {\n autoRun: this.adapter.autoRun(),\n appBoot: !this.adapter.autoRun() ? this.adapter.appBoot() : '',\n mainModule: explicitRelative(dirname(relativePath), this.adapter.mainModule()),\n appConfig: this.adapter.mainModuleConfig(),\n });\n }\n\n @Memoize()\n private get staticAppPathsPattern(): RegExp | undefined {\n if (this.options.staticAppPaths.length > 0) {\n return new RegExp(\n '^(?:' +\n this.options.staticAppPaths.map(staticAppPath => escapeRegExp(staticAppPath.replace(/\\//g, sep))).join('|') +\n ')(?:$|' +\n sep +\n ')'\n );\n }\n }\n\n private requiredOtherFiles(appFiles: AppFiles): readonly string[] {\n let pattern = this.staticAppPathsPattern;\n if (pattern) {\n return appFiles.otherAppFiles.filter(f => {\n return !pattern!.test(f);\n });\n } else {\n return appFiles.otherAppFiles;\n }\n }\n\n private appJSAsset(\n relativePath: string,\n engine: Engine,\n childEngines: Engine[],\n prepared: Map<string, InternalAsset>,\n entryParams?: Partial<Parameters<typeof entryTemplate>[0]>\n ): InternalAsset {\n let { appFiles } = engine;\n let cached = prepared.get(relativePath);\n if (cached) {\n return cached;\n }\n\n let eagerModules = [];\n\n let requiredAppFiles = [this.requiredOtherFiles(appFiles)];\n if (!this.options.staticComponents) {\n requiredAppFiles.push(appFiles.components);\n }\n if (!this.options.staticHelpers) {\n requiredAppFiles.push(appFiles.helpers);\n }\n if (!this.options.staticModifiers) {\n requiredAppFiles.push(appFiles.modifiers);\n }\n\n let styles = [];\n // only import styles from engines with a parent (this excludeds the parent application) as their styles\n // will be inserted via a direct <link> tag.\n if (engine.parent && engine.package.isLazyEngine()) {\n let implicitStyles = this.impliedAssets('implicit-styles', engine);\n for (let style of implicitStyles) {\n styles.push({\n path: explicitRelative('assets/_engine_', style.relativePath),\n });\n }\n\n let engineMeta = engine.package.meta as AddonMeta;\n if (engineMeta && engineMeta['implicit-styles']) {\n for (let style of engineMeta['implicit-styles']) {\n styles.push({\n path: explicitRelative(dirname(relativePath), join(engine.appRelativePath, style)),\n });\n }\n }\n }\n\n let lazyEngines: { names: string[]; path: string }[] = [];\n for (let childEngine of childEngines) {\n let asset = this.appJSAsset(\n `assets/_engine_/${encodeURIComponent(childEngine.package.name)}.js`,\n childEngine,\n [],\n prepared\n );\n if (childEngine.package.isLazyEngine()) {\n lazyEngines.push({\n names: [childEngine.package.name],\n path: explicitRelative(dirname(relativePath), asset.relativePath),\n });\n } else {\n eagerModules.push(explicitRelative(dirname(relativePath), asset.relativePath));\n }\n }\n let lazyRoutes: { names: string[]; path: string }[] = [];\n for (let [routeName, routeFiles] of appFiles.routeFiles.children) {\n this.splitRoute(\n routeName,\n routeFiles,\n (_: string, filename: string) => {\n requiredAppFiles.push([filename]);\n },\n (routeNames: string[], files: string[]) => {\n let routeEntrypoint = `assets/_route_/${encodeURIComponent(routeNames[0])}.js`;\n if (!prepared.has(routeEntrypoint)) {\n prepared.set(routeEntrypoint, this.routeEntrypoint(engine, routeEntrypoint, files));\n }\n lazyRoutes.push({\n names: routeNames,\n path: this.importPaths(engine, routeEntrypoint, relativePath).buildtime,\n });\n }\n );\n }\n\n let [fastboot, nonFastboot] = partition(excludeDotFiles(flatten(requiredAppFiles)), file =>\n appFiles.isFastbootOnly.get(file)\n );\n let amdModules = nonFastboot.map(file => this.importPaths(engine, file, relativePath));\n let fastbootOnlyAmdModules = fastboot.map(file => this.importPaths(engine, file, relativePath));\n\n // this is a backward-compatibility feature: addons can force inclusion of\n // modules.\n this.gatherImplicitModules('implicit-modules', relativePath, engine, amdModules);\n\n let params = { amdModules, fastbootOnlyAmdModules, lazyRoutes, lazyEngines, eagerModules, styles };\n if (entryParams) {\n Object.assign(params, entryParams);\n }\n\n let source = entryTemplate(params);\n\n let asset: InternalAsset = {\n kind: 'in-memory',\n source,\n relativePath,\n };\n prepared.set(relativePath, asset);\n return asset;\n }\n\n @Memoize()\n private get modulePrefix() {\n return this.adapter.modulePrefix();\n }\n\n private importPaths(engine: Engine, engineRelativePath: string, fromFile: string) {\n let appRelativePath = join(engine.appRelativePath, engineRelativePath);\n let noHBS = engineRelativePath.replace(this.resolvableExtensionsPattern, '').replace(/\\.hbs$/, '');\n return {\n runtime: `${engine.modulePrefix}/${noHBS}`,\n buildtime: explicitRelative(dirname(fromFile), appRelativePath),\n };\n }\n\n private routeEntrypoint(engine: Engine, relativePath: string, files: string[]) {\n let [fastboot, nonFastboot] = partition(files, file => engine.appFiles.isFastbootOnly.get(file));\n\n let asset: InternalAsset = {\n kind: 'in-memory',\n source: routeEntryTemplate({\n files: nonFastboot.map(f => this.importPaths(engine, f, relativePath)),\n fastbootOnlyFiles: fastboot.map(f => this.importPaths(engine, f, relativePath)),\n }),\n relativePath,\n };\n return asset;\n }\n\n private testJSEntrypoint(engines: Engine[], prepared: Map<string, InternalAsset>): InternalAsset {\n let asset = prepared.get(`assets/test.js`);\n if (asset) {\n return asset;\n }\n\n // We're only building tests from the first engine (the app). This is the\n // normal thing to do -- tests from engines don't automatically roll up into\n // the app.\n let engine = engines[0];\n\n const myName = 'assets/test.js';\n\n // tests necessarily also include the app. This is where we account for\n // that. The classic solution was to always include the app's separate\n // script tag in the tests HTML, but that isn't as easy for final stage\n // packagers to understand. It's better to express it here as a direct\n // module dependency.\n let eagerModules: string[] = [\n explicitRelative(dirname(myName), this.topAppJSAsset(engines, prepared).relativePath),\n ];\n\n let amdModules: { runtime: string; buildtime: string }[] = [];\n // this is a backward-compatibility feature: addons can force inclusion of\n // test support modules.\n this.gatherImplicitModules('implicit-test-modules', myName, engine, amdModules);\n\n let { appFiles } = engine;\n for (let relativePath of appFiles.tests) {\n amdModules.push(this.importPaths(engine, relativePath, myName));\n }\n\n let source = entryTemplate({\n amdModules,\n eagerModules,\n testSuffix: true,\n });\n\n asset = {\n kind: 'in-memory',\n source,\n relativePath: myName,\n };\n prepared.set(asset.relativePath, asset);\n return asset;\n }\n\n private gatherImplicitModules(\n section: 'implicit-modules' | 'implicit-test-modules',\n relativeTo: string,\n engine: Engine,\n lazyModules: { runtime: string; buildtime: string }[]\n ) {\n for (let addon of engine.addons) {\n let implicitModules = addon.meta[section];\n if (implicitModules) {\n let renamedModules = inverseRenamedModules(addon.meta, this.resolvableExtensionsPattern);\n for (let name of implicitModules) {\n let packageName = addon.name;\n\n if (addon.isV2Addon()) {\n let renamedMeta = addon.meta['renamed-packages'];\n if (renamedMeta) {\n Object.entries(renamedMeta).forEach(([key, value]) => {\n if (value === addon!.name) {\n packageName = key;\n }\n });\n }\n }\n\n let runtime = join(packageName, name).replace(this.resolvableExtensionsPattern, '');\n let runtimeRenameLookup = runtime.split('\\\\').join('/');\n if (renamedModules && renamedModules[runtimeRenameLookup]) {\n runtime = renamedModules[runtimeRenameLookup];\n }\n runtime = runtime.split(sep).join('/');\n lazyModules.push({\n runtime,\n buildtime:\n this.options.implicitModulesStrategy === 'packageNames'\n ? join(packageName, name)\n : explicitRelative(dirname(join(this.root, relativeTo)), join(addon.root, name)),\n });\n }\n }\n }\n }\n}\n\nconst entryTemplate = compile(`\nimport { importSync as i, macroCondition, getGlobalConfig } from '@embroider/macros';\nlet w = window;\nlet d = w.define;\n\n{{#if styles}}\n if (macroCondition(!getGlobalConfig().fastboot?.isRunning)) {\n {{#each styles as |stylePath| ~}}\n i(\"{{js-string-escape stylePath.path}}\");\n {{/each}}\n }\n{{/if}}\n\n{{#each amdModules as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n{{/each}}\n\n{{#if fastbootOnlyAmdModules}}\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n {{#each fastbootOnlyAmdModules as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n {{/each}}\n }\n{{/if}}\n\n{{#each eagerModules as |eagerModule| ~}}\n i(\"{{js-string-escape eagerModule}}\");\n{{/each}}\n\n{{#if lazyRoutes}}\nw._embroiderRouteBundles_ = [\n {{#each lazyRoutes as |route|}}\n {\n names: {{{json-stringify route.names}}},\n load: function() {\n return import(\"{{js-string-escape route.path}}\");\n }\n },\n {{/each}}\n]\n{{/if}}\n\n{{#if lazyEngines}}\nw._embroiderEngineBundles_ = [\n {{#each lazyEngines as |engine|}}\n {\n names: {{{json-stringify engine.names}}},\n load: function() {\n return import(\"{{js-string-escape engine.path}}\");\n }\n },\n {{/each}}\n]\n{{/if}}\n\n{{#if autoRun ~}}\nif (!runningTests) {\n i(\"{{js-string-escape mainModule}}\").default.create({{{json-stringify appConfig}}});\n}\n{{else if appBoot ~}}\n {{{ appBoot }}}\n{{/if}}\n\n{{#if testSuffix ~}}\n {{!- TODO: both of these suffixes should get dynamically generated so they incorporate\n any content-for added by addons. -}}\n\n\n {{!- this is the traditional tests-suffix.js -}}\n i('../tests/test-helper');\n EmberENV.TESTS_FILE_LOADED = true;\n{{/if}}\n`) as (params: {\n amdModules: { runtime: string; buildtime: string }[];\n fastbootOnlyAmdModules?: { runtime: string; buildtime: string }[];\n eagerModules?: string[];\n autoRun?: boolean;\n appBoot?: string;\n mainModule?: string;\n appConfig?: unknown;\n testSuffix?: boolean;\n lazyRoutes?: { names: string[]; path: string }[];\n lazyEngines?: { names: string[]; path: string }[];\n styles?: { path: string }[];\n}) => string;\n\nconst routeEntryTemplate = compile(`\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n{{#each files as |amdModule| ~}}\nd(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n{{/each}}\n{{#if fastbootOnlyFiles}}\n import { macroCondition, getGlobalConfig } from '@embroider/macros';\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n {{#each fastbootOnlyFiles as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n {{/each}}\n }\n{{/if}}\n`) as (params: {\n files: { runtime: string; buildtime: string }[];\n fastbootOnlyFiles: { runtime: string; buildtime: string }[];\n}) => string;\n\nfunction stringOrBufferEqual(a: string | Buffer, b: string | Buffer): boolean {\n if (typeof a === 'string' && typeof b === 'string') {\n return a === b;\n }\n if (a instanceof Buffer && b instanceof Buffer) {\n return Buffer.compare(a, b) === 0;\n }\n return false;\n}\n\nconst babelFilterTemplate = compile(`\nconst { babelFilter } = require('@embroider/core');\nmodule.exports = babelFilter({{{json-stringify skipBabel}}});\n`) as (params: { skipBabel: Options['skipBabel'] }) => string;\n\n// meta['renamed-modules'] has mapping from classic filename to real filename.\n// This takes that and converts it to the inverst mapping from real import path\n// to classic import path.\nfunction inverseRenamedModules(meta: AddonPackage['meta'], extensions: RegExp) {\n let renamed = meta['renamed-modules'];\n if (renamed) {\n let inverted = {} as { [name: string]: string };\n for (let [classic, real] of Object.entries(renamed)) {\n inverted[real.replace(extensions, '')] = classic.replace(extensions, '');\n }\n return inverted;\n }\n}\n\nfunction combinePackageJSON(...layers: object[]) {\n function custom(objValue: any, srcValue: any, key: string, _object: any, _source: any, stack: { size: number }) {\n if (key === 'keywords' && stack.size === 0) {\n if (Array.isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n }\n return mergeWith({}, ...layers, custom);\n}\n"]}
@@ -14,6 +14,7 @@ const fs_extra_1 = require("fs-extra");
14
14
  const typescript_memoize_1 = require("typescript-memoize");
15
15
  const js_handlebars_1 = require("./js-handlebars");
16
16
  const mini_modules_polyfill_1 = require("./mini-modules-polyfill");
17
+ const babel_import_util_1 = require("babel-import-util");
17
18
  const packageCache = shared_internals_2.PackageCache.shared('embroider-stage3');
18
19
  function isImportSyncExpression(t, path) {
19
20
  if (!path ||
@@ -173,6 +174,26 @@ function handleExternal(specifier, sourceFile, opts, isDynamic) {
173
174
  if (isExplicitlyExternal(specifier, pkg)) {
174
175
  return makeExternal(specifier, sourceFile, opts);
175
176
  }
177
+ if (!pkg.meta['auto-upgraded'] && shared_internals_1.emberVirtualPeerDeps.has(packageName)) {
178
+ // Native v2 addons are allowed to use the emberVirtualPeerDeps like
179
+ // `@glimmer/component`. And like all v2 addons, it's important that they
180
+ // see those dependencies after those dependencies have been converted to
181
+ // v2.
182
+ //
183
+ // But unlike auto-upgraded addons, native v2 addons are not necessarily
184
+ // copied out of their original place in node_modules. And from that
185
+ // original place they might accidentally resolve the emberVirtualPeerDeps
186
+ // that are present there in v1 format.
187
+ //
188
+ // So before we even check isResolvable, we adjust these imports to point at
189
+ // the app's copies instead.
190
+ if (shared_internals_1.emberVirtualPeerDeps.has(packageName)) {
191
+ if (!opts.activeAddons[packageName]) {
192
+ throw new Error(`${pkg.name} is trying to import the app's ${packageName} package, but it seems to be missing`);
193
+ }
194
+ return (0, shared_internals_2.explicitRelative)((0, path_1.dirname)(sourceFile.name), specifier.replace(packageName, opts.activeAddons[packageName]));
195
+ }
196
+ }
176
197
  let relocatedPkg = sourceFile.relocatedIntoPackage();
177
198
  if (relocatedPkg) {
178
199
  // this file has been moved into another package (presumably the app).
@@ -212,29 +233,20 @@ function handleExternal(specifier, sourceFile, opts, isDynamic) {
212
233
  if (pkg.meta['auto-upgraded'] && opts.activeAddons[packageName]) {
213
234
  return (0, shared_internals_2.explicitRelative)((0, path_1.dirname)(sourceFile.name), specifier.replace(packageName, opts.activeAddons[packageName]));
214
235
  }
215
- // auto-upgraded packages can fall back to attmpeting to find dependencies at
216
- // runtime. Native v2 packages can only get this behavior in the
217
- // isExplicitlyExternal case above because they need to explicitly ask for
218
- // externals.
219
236
  if (pkg.meta['auto-upgraded']) {
237
+ // auto-upgraded packages can fall back to attempting to find dependencies at
238
+ // runtime. Native v2 packages can only get this behavior in the
239
+ // isExplicitlyExternal case above because they need to explicitly ask for
240
+ // externals.
220
241
  return makeExternal(specifier, sourceFile, opts);
221
242
  }
222
- if (pkg.isV2Ember()) {
243
+ else {
223
244
  // native v2 packages don't automatically externalize *everything* the way
224
245
  // auto-upgraded packages do, but they still externalize known and approved
225
246
  // ember virtual packages (like @ember/component)
226
247
  if (shared_internals_1.emberVirtualPackages.has(packageName)) {
227
248
  return makeExternal(specifier, sourceFile, opts);
228
249
  }
229
- // native v2 packages don't automatically get to use every other addon as a
230
- // peerDep, but they do get the known and approved ember virtual peer deps,
231
- // like @glimmer/component
232
- if (shared_internals_1.emberVirtualPeerDeps.has(packageName)) {
233
- if (!opts.activeAddons[packageName]) {
234
- throw new Error(`${pkg.name} is trying to import from ${packageName}, which is supposed to be present in all ember apps but seems to be missing`);
235
- }
236
- return (0, shared_internals_2.explicitRelative)((0, path_1.dirname)(sourceFile.name), specifier.replace(packageName, opts.activeAddons[packageName]));
237
- }
238
250
  }
239
251
  // non-resolvable imports in dynamic positions become runtime errors, not
240
252
  // build-time errors, so we emit the runtime error module here before the
@@ -270,7 +282,8 @@ function main(babel) {
270
282
  enter(path, state) {
271
283
  let opts = ensureOpts(state);
272
284
  state.adjustFile = new AdjustFile(path.hub.file.opts.filename, opts.relocatedFiles);
273
- addExtraImports(t, path, opts.extraImports);
285
+ let adder = new babel_import_util_1.ImportUtil(t, path);
286
+ addExtraImports(adder, t, path, opts.extraImports);
274
287
  },
275
288
  exit(path, state) {
276
289
  for (let child of path.get('body')) {
@@ -342,24 +355,23 @@ function rewriteTopLevelImport(t, path, state) {
342
355
  main.baseDir = function () {
343
356
  return (0, path_1.join)(__dirname, '..');
344
357
  };
345
- function addExtraImports(t, path, extraImports) {
346
- let counter = 0;
358
+ function addExtraImports(adder, t, path, extraImports) {
347
359
  for (let { absPath, target, runtimeName } of extraImports) {
348
360
  if (absPath === path.hub.file.opts.filename) {
349
361
  if (runtimeName) {
350
- path.node.body.unshift(amdDefine(t, runtimeName, counter));
351
- path.node.body.unshift(t.importDeclaration([t.importNamespaceSpecifier(t.identifier(`a${counter++}`))], t.stringLiteral(target)));
362
+ path.node.body.unshift(amdDefine(t, adder, path, target, runtimeName));
352
363
  }
353
364
  else {
354
- path.node.body.unshift(t.importDeclaration([], t.stringLiteral(target)));
365
+ adder.importForSideEffect(target);
355
366
  }
356
367
  }
357
368
  }
358
369
  }
359
- function amdDefine(t, runtimeName, importCounter) {
370
+ function amdDefine(t, adder, path, target, runtimeName) {
371
+ let value = t.callExpression(adder.import(path, '@embroider/macros', 'importSync'), [t.stringLiteral(target)]);
360
372
  return t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('window'), t.identifier('define')), [
361
373
  t.stringLiteral(runtimeName),
362
- t.functionExpression(null, [], t.blockStatement([t.returnStatement(t.identifier(`a${importCounter}`))])),
374
+ t.functionExpression(null, [], t.blockStatement([t.returnStatement(value)])),
363
375
  ]));
364
376
  }
365
377
  class AdjustFile {
@@ -1 +1 @@
1
- {"version":3,"file":"babel-plugin-adjust-imports.js","sourceRoot":"","sources":["babel-plugin-adjust-imports.ts"],"names":[],"mappings":"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","sourcesContent":["import { emberVirtualPackages, emberVirtualPeerDeps, packageName as getPackageName } from '@embroider/shared-internals';\nimport { join, dirname, resolve } from 'path';\nimport type { NodePath } from '@babel/traverse';\nimport type * as Babel from '@babel/core';\nimport type { types as t } from '@babel/core';\nimport { PackageCache, Package, V2Package, explicitRelative } from '@embroider/shared-internals';\nimport { outputFileSync } from 'fs-extra';\nimport { Memoize } from 'typescript-memoize';\nimport { compile } from './js-handlebars';\nimport { handleImportDeclaration } from './mini-modules-polyfill';\n\ninterface State {\n adjustFile: AdjustFile;\n opts: Options | DeflatedOptions;\n}\n\nexport interface DeflatedOptions {\n adjustImportsOptionsPath: string;\n relocatedFilesPath: string;\n}\n\ntype BabelTypes = typeof t;\n\nexport interface Options {\n renamePackages: {\n [fromName: string]: string;\n };\n renameModules: {\n [fromName: string]: string;\n };\n extraImports: {\n absPath: string;\n target: string;\n runtimeName?: string;\n }[];\n externalsDir: string;\n activeAddons: {\n [packageName: string]: string;\n };\n relocatedFiles: { [relativePath: string]: string };\n resolvableExtensions: string[];\n emberNeedsModulesPolyfill: boolean;\n}\n\nconst packageCache = PackageCache.shared('embroider-stage3');\n\ntype DefineExpressionPath = NodePath<t.CallExpression> & {\n node: t.CallExpression & {\n arguments: [t.StringLiteral, t.ArrayExpression, Function];\n };\n};\n\nexport function isImportSyncExpression(t: BabelTypes, path: NodePath<any>) {\n if (\n !path ||\n !path.isCallExpression() ||\n path.node.callee.type !== 'Identifier' ||\n !path.get('callee').referencesImport('@embroider/macros', 'importSync')\n ) {\n return false;\n }\n\n const args = path.node.arguments;\n return Array.isArray(args) && args.length === 1 && t.isStringLiteral(args[0]);\n}\n\nexport function isDynamicImportExpression(t: BabelTypes, path: NodePath<any>) {\n if (!path || !path.isCallExpression() || path.node.callee.type !== 'Import') {\n return false;\n }\n\n const args = path.node.arguments;\n return Array.isArray(args) && args.length === 1 && t.isStringLiteral(args[0]);\n}\n\nexport function isDefineExpression(t: BabelTypes, path: NodePath<any>): path is DefineExpressionPath {\n // should we allow nested defines, or stop at the top level?\n if (!path.isCallExpression() || path.node.callee.type !== 'Identifier' || path.node.callee.name !== 'define') {\n return false;\n }\n\n const args = path.node.arguments;\n\n // only match define with 3 arguments define(name: string, deps: string[], cb: Function);\n return (\n Array.isArray(args) &&\n args.length === 3 &&\n t.isStringLiteral(args[0]) &&\n t.isArrayExpression(args[1]) &&\n t.isFunction(args[2])\n );\n}\n\nfunction adjustSpecifier(specifier: string, file: AdjustFile, opts: Options, isDynamic: boolean) {\n if (specifier === '@embroider/macros') {\n // the macros package is always handled directly within babel (not\n // necessarily as a real resolvable package), so we should not mess with it.\n // It might not get compiled away until *after* our plugin has run, which is\n // why we need to know about it.\n return specifier;\n }\n\n specifier = handleRenaming(specifier, file, opts);\n specifier = handleExternal(specifier, file, opts, isDynamic);\n return specifier;\n}\n\nfunction handleRenaming(specifier: string, sourceFile: AdjustFile, opts: Options) {\n let packageName = getPackageName(specifier);\n if (!packageName) {\n return specifier;\n }\n\n for (let [candidate, replacement] of Object.entries(opts.renameModules)) {\n if (candidate === specifier) {\n return replacement;\n }\n for (let extension of opts.resolvableExtensions) {\n if (candidate === specifier + '/index' + extension) {\n return replacement;\n }\n if (candidate === specifier + extension) {\n return replacement;\n }\n }\n }\n\n if (opts.renamePackages[packageName]) {\n return specifier.replace(packageName, opts.renamePackages[packageName]);\n }\n\n let pkg = sourceFile.owningPackage();\n if (!pkg || !pkg.isV2Ember()) {\n return specifier;\n }\n\n if (pkg.meta['auto-upgraded'] && pkg.name === packageName) {\n // we found a self-import, make it relative. Only auto-upgraded packages get\n // this help, v2 packages are natively supposed to use relative imports for\n // their own modules, and we want to push them all to do that correctly.\n let fullPath = specifier.replace(packageName, pkg.root);\n return explicitRelative(dirname(sourceFile.name), fullPath);\n }\n\n let relocatedIntoPkg = sourceFile.relocatedIntoPackage();\n if (relocatedIntoPkg && pkg.meta['auto-upgraded'] && relocatedIntoPkg.name === packageName) {\n // a file that was relocated into a package does a self-import of that\n // package's name. This can happen when an addon (like ember-cli-mirage)\n // emits files from its own treeForApp that contain imports of the app's own\n // fully qualified name.\n let fullPath = specifier.replace(packageName, relocatedIntoPkg.root);\n return explicitRelative(dirname(sourceFile.name), fullPath);\n }\n\n return specifier;\n}\n\nfunction isExplicitlyExternal(specifier: string, fromPkg: V2Package): boolean {\n return Boolean(fromPkg.isV2Addon() && fromPkg.meta['externals'] && fromPkg.meta['externals'].includes(specifier));\n}\n\nfunction isResolvable(packageName: string, fromPkg: Package): false | Package {\n try {\n let dep = packageCache.resolve(packageName, fromPkg);\n if (!dep.isEmberPackage() && !fromPkg.hasDependency('ember-auto-import')) {\n return false;\n }\n return dep;\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n return false;\n }\n}\n\nconst dynamicMissingModule = compile(`\n throw new Error('Could not find module \\`{{{js-string-escape moduleName}}}\\`');\n`) as (params: { moduleName: string }) => string;\n\nconst externalTemplate = compile(`\n{{#if (eq runtimeName \"require\")}}\nconst m = window.requirejs;\n{{else}}\nconst m = window.require(\"{{{js-string-escape runtimeName}}}\");\n{{/if}}\n{{!-\n There are plenty of hand-written AMD defines floating around\n that lack this, and they will break when other build systems\n encounter them.\n\n As far as I can tell, Ember's loader was already treating this\n case as a module, so in theory we aren't breaking anything by\n marking it as such when other packagers come looking.\n\n todo: get review on this part.\n-}}\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n`) as (params: { runtimeName: string }) => string;\n\nfunction handleExternal(specifier: string, sourceFile: AdjustFile, opts: Options, isDynamic: boolean): string {\n let pkg = sourceFile.owningPackage();\n if (!pkg || !pkg.isV2Ember()) {\n return specifier;\n }\n\n let packageName = getPackageName(specifier);\n if (!packageName) {\n // This is a relative import. We don't automatically externalize those\n // because it's rare, and by keeping them static we give better errors. But\n // we do allow them to be explicitly externalized by the package author (or\n // a compat adapter). In the metadata, they would be listed in\n // package-relative form, so we need to convert this specifier to that.\n let absoluteSpecifier = resolve(dirname(sourceFile.name), specifier);\n let packageRelativeSpecifier = explicitRelative(pkg.root, absoluteSpecifier);\n if (isExplicitlyExternal(packageRelativeSpecifier, pkg)) {\n let publicSpecifier = absoluteSpecifier.replace(pkg.root, pkg.name);\n return makeExternal(publicSpecifier, sourceFile, opts);\n } else {\n return specifier;\n }\n }\n\n // absolute package imports can also be explicitly external based on their\n // full specifier name\n if (isExplicitlyExternal(specifier, pkg)) {\n return makeExternal(specifier, sourceFile, opts);\n }\n\n let relocatedPkg = sourceFile.relocatedIntoPackage();\n if (relocatedPkg) {\n // this file has been moved into another package (presumably the app).\n\n // self-imports are legal in the app tree, even for v2 packages\n if (packageName === pkg.name) {\n return specifier;\n }\n\n // first try to resolve from the destination package\n if (isResolvable(packageName, relocatedPkg)) {\n if (!pkg.meta['auto-upgraded']) {\n throw new Error(\n `${pkg.name} is trying to import ${packageName} from within its app tree. This is unsafe, because ${pkg.name} can't control which dependencies are resolvable from the app`\n );\n }\n return specifier;\n } else {\n // second try to resolve from the source package\n let targetPkg = isResolvable(packageName, pkg);\n if (targetPkg) {\n if (!pkg.meta['auto-upgraded']) {\n throw new Error(\n `${pkg.name} is trying to import ${packageName} from within its app tree. This is unsafe, because ${pkg.name} can't control which dependencies are resolvable from the app`\n );\n }\n // we found it, but we need to rewrite it because it's not really going to\n // resolve from where its sitting\n return explicitRelative(dirname(sourceFile.name), specifier.replace(packageName, targetPkg.root));\n }\n }\n } else {\n if (isResolvable(packageName, pkg)) {\n if (!pkg.meta['auto-upgraded'] && !reliablyResolvable(pkg, packageName)) {\n throw new Error(\n `${pkg.name} is trying to import from ${packageName} but that is not one of its explicit dependencies`\n );\n }\n return specifier;\n }\n }\n\n // auto-upgraded packages can fall back to the set of known active addons\n if (pkg.meta['auto-upgraded'] && opts.activeAddons[packageName]) {\n return explicitRelative(dirname(sourceFile.name), specifier.replace(packageName, opts.activeAddons[packageName]));\n }\n\n // auto-upgraded packages can fall back to attmpeting to find dependencies at\n // runtime. Native v2 packages can only get this behavior in the\n // isExplicitlyExternal case above because they need to explicitly ask for\n // externals.\n if (pkg.meta['auto-upgraded']) {\n return makeExternal(specifier, sourceFile, opts);\n }\n\n if (pkg.isV2Ember()) {\n // native v2 packages don't automatically externalize *everything* the way\n // auto-upgraded packages do, but they still externalize known and approved\n // ember virtual packages (like @ember/component)\n if (emberVirtualPackages.has(packageName)) {\n return makeExternal(specifier, sourceFile, opts);\n }\n\n // native v2 packages don't automatically get to use every other addon as a\n // peerDep, but they do get the known and approved ember virtual peer deps,\n // like @glimmer/component\n if (emberVirtualPeerDeps.has(packageName)) {\n if (!opts.activeAddons[packageName]) {\n throw new Error(\n `${pkg.name} is trying to import from ${packageName}, which is supposed to be present in all ember apps but seems to be missing`\n );\n }\n return explicitRelative(dirname(sourceFile.name), specifier.replace(packageName, opts.activeAddons[packageName]));\n }\n }\n\n // non-resolvable imports in dynamic positions become runtime errors, not\n // build-time errors, so we emit the runtime error module here before the\n // stage3 packager has a chance to see the missing module. (Maybe some stage3\n // packagers will have this behavior by default, because it would make sense,\n // but webpack at least does not.)\n if (isDynamic) {\n return makeMissingModule(specifier, sourceFile, opts);\n }\n\n // this is falling through with the original specifier which was\n // non-resolvable, which will presumably cause a static build error in stage3.\n return specifier;\n}\n\nfunction makeMissingModule(specifier: string, sourceFile: AdjustFile, opts: Options): string {\n let target = join(opts.externalsDir, specifier + '.js');\n outputFileSync(\n target,\n dynamicMissingModule({\n moduleName: specifier,\n })\n );\n return explicitRelative(dirname(sourceFile.name), target.slice(0, -3));\n}\n\nfunction makeExternal(specifier: string, sourceFile: AdjustFile, opts: Options): string {\n let target = join(opts.externalsDir, specifier + '.js');\n outputFileSync(\n target,\n externalTemplate({\n runtimeName: specifier,\n })\n );\n return explicitRelative(dirname(sourceFile.name), target.slice(0, -3));\n}\n\nexport default function main(babel: typeof Babel) {\n let t = babel.types;\n return {\n visitor: {\n Program: {\n enter(path: NodePath<t.Program>, state: State) {\n let opts = ensureOpts(state);\n state.adjustFile = new AdjustFile(path.hub.file.opts.filename, opts.relocatedFiles);\n addExtraImports(t, path, opts.extraImports);\n },\n exit(path: NodePath<t.Program>, state: State) {\n for (let child of path.get('body')) {\n if (child.isImportDeclaration() || child.isExportNamedDeclaration() || child.isExportAllDeclaration()) {\n rewriteTopLevelImport(t, child, state);\n }\n }\n },\n },\n CallExpression(path: NodePath<t.CallExpression>, state: State) {\n if (isImportSyncExpression(t, path) || isDynamicImportExpression(t, path)) {\n const [source] = path.get('arguments');\n let opts = ensureOpts(state);\n let specifier = adjustSpecifier((source.node as any).value, state.adjustFile, opts, true);\n source.replaceWith(t.stringLiteral(specifier));\n return;\n }\n\n // Should/can we make this early exit when the first define was found?\n if (!isDefineExpression(t, path)) {\n return;\n }\n\n let pkg = state.adjustFile.owningPackage();\n if (pkg && pkg.isV2Ember() && !pkg.meta['auto-upgraded']) {\n throw new Error(\n `The file ${state.adjustFile.originalFile} in package ${pkg.name} tried to use AMD define. Native V2 Ember addons are forbidden from using AMD define, they must use ECMA export only.`\n );\n }\n\n let opts = ensureOpts(state);\n\n const dependencies = path.node.arguments[1];\n\n const specifiers = dependencies.elements.slice();\n specifiers.push(path.node.arguments[0]);\n\n for (let source of specifiers) {\n if (!source) {\n continue;\n }\n\n if (source.type !== 'StringLiteral') {\n throw path.buildCodeFrameError(`expected only string literal arguments`);\n }\n\n if (source.value === 'exports' || source.value === 'require') {\n // skip \"special\" AMD dependencies\n continue;\n }\n\n let specifier = adjustSpecifier(source.value, state.adjustFile, opts, false);\n\n if (specifier !== source.value) {\n source.value = specifier;\n }\n }\n },\n },\n };\n}\n\nfunction rewriteTopLevelImport(\n t: BabelTypes,\n path: NodePath<t.ImportDeclaration | t.ExportNamedDeclaration | t.ExportAllDeclaration>,\n state: State\n) {\n let opts = ensureOpts(state);\n const { source } = path.node;\n if (source === null || source === undefined) {\n return;\n }\n\n if (opts.emberNeedsModulesPolyfill && path.isImportDeclaration()) {\n let replacement = handleImportDeclaration(t, path);\n if (replacement) {\n path.replaceWith(replacement);\n return;\n }\n }\n\n let specifier = adjustSpecifier(source.value, state.adjustFile, opts, false);\n if (specifier !== source.value) {\n source.value = specifier;\n }\n}\n\n(main as any).baseDir = function () {\n return join(__dirname, '..');\n};\n\nfunction addExtraImports(t: BabelTypes, path: NodePath<t.Program>, extraImports: Required<Options>['extraImports']) {\n let counter = 0;\n for (let { absPath, target, runtimeName } of extraImports) {\n if (absPath === path.hub.file.opts.filename) {\n if (runtimeName) {\n path.node.body.unshift(amdDefine(t, runtimeName, counter));\n path.node.body.unshift(\n t.importDeclaration([t.importNamespaceSpecifier(t.identifier(`a${counter++}`))], t.stringLiteral(target))\n );\n } else {\n path.node.body.unshift(t.importDeclaration([], t.stringLiteral(target)));\n }\n }\n }\n}\n\nfunction amdDefine(t: BabelTypes, runtimeName: string, importCounter: number) {\n return t.expressionStatement(\n t.callExpression(t.memberExpression(t.identifier('window'), t.identifier('define')), [\n t.stringLiteral(runtimeName),\n t.functionExpression(null, [], t.blockStatement([t.returnStatement(t.identifier(`a${importCounter}`))])),\n ])\n );\n}\n\nclass AdjustFile {\n readonly originalFile: string;\n\n constructor(public name: string, relocatedFiles: Options['relocatedFiles']) {\n if (!name) {\n throw new Error(`bug: adjust-imports plugin was run without a filename`);\n }\n this.originalFile = relocatedFiles[name] || name;\n }\n\n get isRelocated() {\n return this.originalFile !== this.name;\n }\n\n @Memoize()\n owningPackage(): Package | undefined {\n return packageCache.ownerOfFile(this.originalFile);\n }\n\n @Memoize()\n relocatedIntoPackage(): Package | undefined {\n if (this.isRelocated) {\n return packageCache.ownerOfFile(this.name);\n }\n }\n}\n\nfunction ensureOpts(state: State): Options {\n let { opts } = state;\n if ('adjustImportsOptionsPath' in opts) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return (state.opts = { ...require(opts.adjustImportsOptionsPath), ...require(opts.relocatedFilesPath) });\n }\n return opts;\n}\n\n// we don't want to allow things that resolve only by accident that are likely\n// to break in other setups. For example: import your dependencies'\n// dependencies, or importing your own name from within a monorepo (which will\n// work because of the symlinking) without setting up \"exports\" (which makes\n// your own name reliably resolvable)\nfunction reliablyResolvable(pkg: V2Package, packageName: string) {\n if (pkg.hasDependency(packageName)) {\n return true;\n }\n\n if (pkg.name === packageName && pkg.packageJSON.exports) {\n return true;\n }\n\n if (emberVirtualPeerDeps.has(packageName)) {\n return true;\n }\n\n return false;\n}\n"]}
1
+ {"version":3,"file":"babel-plugin-adjust-imports.js","sourceRoot":"","sources":["babel-plugin-adjust-imports.ts"],"names":[],"mappings":"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","sourcesContent":["import { emberVirtualPackages, emberVirtualPeerDeps, packageName as getPackageName } from '@embroider/shared-internals';\nimport { join, dirname, resolve } from 'path';\nimport type { NodePath } from '@babel/traverse';\nimport type * as Babel from '@babel/core';\nimport type { types as t } from '@babel/core';\nimport { PackageCache, Package, V2Package, explicitRelative } from '@embroider/shared-internals';\nimport { outputFileSync } from 'fs-extra';\nimport { Memoize } from 'typescript-memoize';\nimport { compile } from './js-handlebars';\nimport { handleImportDeclaration } from './mini-modules-polyfill';\nimport { ImportUtil } from 'babel-import-util';\n\ninterface State {\n adjustFile: AdjustFile;\n opts: Options | DeflatedOptions;\n}\n\nexport interface DeflatedOptions {\n adjustImportsOptionsPath: string;\n relocatedFilesPath: string;\n}\n\ntype BabelTypes = typeof t;\n\nexport interface Options {\n renamePackages: {\n [fromName: string]: string;\n };\n renameModules: {\n [fromName: string]: string;\n };\n extraImports: {\n absPath: string;\n target: string;\n runtimeName?: string;\n }[];\n externalsDir: string;\n activeAddons: {\n [packageName: string]: string;\n };\n relocatedFiles: { [relativePath: string]: string };\n resolvableExtensions: string[];\n emberNeedsModulesPolyfill: boolean;\n}\n\nconst packageCache = PackageCache.shared('embroider-stage3');\n\ntype DefineExpressionPath = NodePath<t.CallExpression> & {\n node: t.CallExpression & {\n arguments: [t.StringLiteral, t.ArrayExpression, Function];\n };\n};\n\nexport function isImportSyncExpression(t: BabelTypes, path: NodePath<any>) {\n if (\n !path ||\n !path.isCallExpression() ||\n path.node.callee.type !== 'Identifier' ||\n !path.get('callee').referencesImport('@embroider/macros', 'importSync')\n ) {\n return false;\n }\n\n const args = path.node.arguments;\n return Array.isArray(args) && args.length === 1 && t.isStringLiteral(args[0]);\n}\n\nexport function isDynamicImportExpression(t: BabelTypes, path: NodePath<any>) {\n if (!path || !path.isCallExpression() || path.node.callee.type !== 'Import') {\n return false;\n }\n\n const args = path.node.arguments;\n return Array.isArray(args) && args.length === 1 && t.isStringLiteral(args[0]);\n}\n\nexport function isDefineExpression(t: BabelTypes, path: NodePath<any>): path is DefineExpressionPath {\n // should we allow nested defines, or stop at the top level?\n if (!path.isCallExpression() || path.node.callee.type !== 'Identifier' || path.node.callee.name !== 'define') {\n return false;\n }\n\n const args = path.node.arguments;\n\n // only match define with 3 arguments define(name: string, deps: string[], cb: Function);\n return (\n Array.isArray(args) &&\n args.length === 3 &&\n t.isStringLiteral(args[0]) &&\n t.isArrayExpression(args[1]) &&\n t.isFunction(args[2])\n );\n}\n\nfunction adjustSpecifier(specifier: string, file: AdjustFile, opts: Options, isDynamic: boolean) {\n if (specifier === '@embroider/macros') {\n // the macros package is always handled directly within babel (not\n // necessarily as a real resolvable package), so we should not mess with it.\n // It might not get compiled away until *after* our plugin has run, which is\n // why we need to know about it.\n return specifier;\n }\n\n specifier = handleRenaming(specifier, file, opts);\n specifier = handleExternal(specifier, file, opts, isDynamic);\n return specifier;\n}\n\nfunction handleRenaming(specifier: string, sourceFile: AdjustFile, opts: Options) {\n let packageName = getPackageName(specifier);\n if (!packageName) {\n return specifier;\n }\n\n for (let [candidate, replacement] of Object.entries(opts.renameModules)) {\n if (candidate === specifier) {\n return replacement;\n }\n for (let extension of opts.resolvableExtensions) {\n if (candidate === specifier + '/index' + extension) {\n return replacement;\n }\n if (candidate === specifier + extension) {\n return replacement;\n }\n }\n }\n\n if (opts.renamePackages[packageName]) {\n return specifier.replace(packageName, opts.renamePackages[packageName]);\n }\n\n let pkg = sourceFile.owningPackage();\n if (!pkg || !pkg.isV2Ember()) {\n return specifier;\n }\n\n if (pkg.meta['auto-upgraded'] && pkg.name === packageName) {\n // we found a self-import, make it relative. Only auto-upgraded packages get\n // this help, v2 packages are natively supposed to use relative imports for\n // their own modules, and we want to push them all to do that correctly.\n let fullPath = specifier.replace(packageName, pkg.root);\n return explicitRelative(dirname(sourceFile.name), fullPath);\n }\n\n let relocatedIntoPkg = sourceFile.relocatedIntoPackage();\n if (relocatedIntoPkg && pkg.meta['auto-upgraded'] && relocatedIntoPkg.name === packageName) {\n // a file that was relocated into a package does a self-import of that\n // package's name. This can happen when an addon (like ember-cli-mirage)\n // emits files from its own treeForApp that contain imports of the app's own\n // fully qualified name.\n let fullPath = specifier.replace(packageName, relocatedIntoPkg.root);\n return explicitRelative(dirname(sourceFile.name), fullPath);\n }\n\n return specifier;\n}\n\nfunction isExplicitlyExternal(specifier: string, fromPkg: V2Package): boolean {\n return Boolean(fromPkg.isV2Addon() && fromPkg.meta['externals'] && fromPkg.meta['externals'].includes(specifier));\n}\n\nfunction isResolvable(packageName: string, fromPkg: Package): false | Package {\n try {\n let dep = packageCache.resolve(packageName, fromPkg);\n if (!dep.isEmberPackage() && !fromPkg.hasDependency('ember-auto-import')) {\n return false;\n }\n return dep;\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n return false;\n }\n}\n\nconst dynamicMissingModule = compile(`\n throw new Error('Could not find module \\`{{{js-string-escape moduleName}}}\\`');\n`) as (params: { moduleName: string }) => string;\n\nconst externalTemplate = compile(`\n{{#if (eq runtimeName \"require\")}}\nconst m = window.requirejs;\n{{else}}\nconst m = window.require(\"{{{js-string-escape runtimeName}}}\");\n{{/if}}\n{{!-\n There are plenty of hand-written AMD defines floating around\n that lack this, and they will break when other build systems\n encounter them.\n\n As far as I can tell, Ember's loader was already treating this\n case as a module, so in theory we aren't breaking anything by\n marking it as such when other packagers come looking.\n\n todo: get review on this part.\n-}}\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n`) as (params: { runtimeName: string }) => string;\n\nfunction handleExternal(specifier: string, sourceFile: AdjustFile, opts: Options, isDynamic: boolean): string {\n let pkg = sourceFile.owningPackage();\n if (!pkg || !pkg.isV2Ember()) {\n return specifier;\n }\n\n let packageName = getPackageName(specifier);\n if (!packageName) {\n // This is a relative import. We don't automatically externalize those\n // because it's rare, and by keeping them static we give better errors. But\n // we do allow them to be explicitly externalized by the package author (or\n // a compat adapter). In the metadata, they would be listed in\n // package-relative form, so we need to convert this specifier to that.\n let absoluteSpecifier = resolve(dirname(sourceFile.name), specifier);\n let packageRelativeSpecifier = explicitRelative(pkg.root, absoluteSpecifier);\n if (isExplicitlyExternal(packageRelativeSpecifier, pkg)) {\n let publicSpecifier = absoluteSpecifier.replace(pkg.root, pkg.name);\n return makeExternal(publicSpecifier, sourceFile, opts);\n } else {\n return specifier;\n }\n }\n\n // absolute package imports can also be explicitly external based on their\n // full specifier name\n if (isExplicitlyExternal(specifier, pkg)) {\n return makeExternal(specifier, sourceFile, opts);\n }\n\n if (!pkg.meta['auto-upgraded'] && emberVirtualPeerDeps.has(packageName)) {\n // Native v2 addons are allowed to use the emberVirtualPeerDeps like\n // `@glimmer/component`. And like all v2 addons, it's important that they\n // see those dependencies after those dependencies have been converted to\n // v2.\n //\n // But unlike auto-upgraded addons, native v2 addons are not necessarily\n // copied out of their original place in node_modules. And from that\n // original place they might accidentally resolve the emberVirtualPeerDeps\n // that are present there in v1 format.\n //\n // So before we even check isResolvable, we adjust these imports to point at\n // the app's copies instead.\n if (emberVirtualPeerDeps.has(packageName)) {\n if (!opts.activeAddons[packageName]) {\n throw new Error(`${pkg.name} is trying to import the app's ${packageName} package, but it seems to be missing`);\n }\n return explicitRelative(dirname(sourceFile.name), specifier.replace(packageName, opts.activeAddons[packageName]));\n }\n }\n\n let relocatedPkg = sourceFile.relocatedIntoPackage();\n if (relocatedPkg) {\n // this file has been moved into another package (presumably the app).\n\n // self-imports are legal in the app tree, even for v2 packages\n if (packageName === pkg.name) {\n return specifier;\n }\n\n // first try to resolve from the destination package\n if (isResolvable(packageName, relocatedPkg)) {\n if (!pkg.meta['auto-upgraded']) {\n throw new Error(\n `${pkg.name} is trying to import ${packageName} from within its app tree. This is unsafe, because ${pkg.name} can't control which dependencies are resolvable from the app`\n );\n }\n return specifier;\n } else {\n // second try to resolve from the source package\n let targetPkg = isResolvable(packageName, pkg);\n if (targetPkg) {\n if (!pkg.meta['auto-upgraded']) {\n throw new Error(\n `${pkg.name} is trying to import ${packageName} from within its app tree. This is unsafe, because ${pkg.name} can't control which dependencies are resolvable from the app`\n );\n }\n // we found it, but we need to rewrite it because it's not really going to\n // resolve from where its sitting\n return explicitRelative(dirname(sourceFile.name), specifier.replace(packageName, targetPkg.root));\n }\n }\n } else {\n if (isResolvable(packageName, pkg)) {\n if (!pkg.meta['auto-upgraded'] && !reliablyResolvable(pkg, packageName)) {\n throw new Error(\n `${pkg.name} is trying to import from ${packageName} but that is not one of its explicit dependencies`\n );\n }\n return specifier;\n }\n }\n\n // auto-upgraded packages can fall back to the set of known active addons\n if (pkg.meta['auto-upgraded'] && opts.activeAddons[packageName]) {\n return explicitRelative(dirname(sourceFile.name), specifier.replace(packageName, opts.activeAddons[packageName]));\n }\n\n if (pkg.meta['auto-upgraded']) {\n // auto-upgraded packages can fall back to attempting to find dependencies at\n // runtime. Native v2 packages can only get this behavior in the\n // isExplicitlyExternal case above because they need to explicitly ask for\n // externals.\n return makeExternal(specifier, sourceFile, opts);\n } else {\n // native v2 packages don't automatically externalize *everything* the way\n // auto-upgraded packages do, but they still externalize known and approved\n // ember virtual packages (like @ember/component)\n if (emberVirtualPackages.has(packageName)) {\n return makeExternal(specifier, sourceFile, opts);\n }\n }\n\n // non-resolvable imports in dynamic positions become runtime errors, not\n // build-time errors, so we emit the runtime error module here before the\n // stage3 packager has a chance to see the missing module. (Maybe some stage3\n // packagers will have this behavior by default, because it would make sense,\n // but webpack at least does not.)\n if (isDynamic) {\n return makeMissingModule(specifier, sourceFile, opts);\n }\n\n // this is falling through with the original specifier which was\n // non-resolvable, which will presumably cause a static build error in stage3.\n return specifier;\n}\n\nfunction makeMissingModule(specifier: string, sourceFile: AdjustFile, opts: Options): string {\n let target = join(opts.externalsDir, specifier + '.js');\n outputFileSync(\n target,\n dynamicMissingModule({\n moduleName: specifier,\n })\n );\n return explicitRelative(dirname(sourceFile.name), target.slice(0, -3));\n}\n\nfunction makeExternal(specifier: string, sourceFile: AdjustFile, opts: Options): string {\n let target = join(opts.externalsDir, specifier + '.js');\n outputFileSync(\n target,\n externalTemplate({\n runtimeName: specifier,\n })\n );\n return explicitRelative(dirname(sourceFile.name), target.slice(0, -3));\n}\n\nexport default function main(babel: typeof Babel) {\n let t = babel.types;\n return {\n visitor: {\n Program: {\n enter(path: NodePath<t.Program>, state: State) {\n let opts = ensureOpts(state);\n state.adjustFile = new AdjustFile(path.hub.file.opts.filename, opts.relocatedFiles);\n let adder = new ImportUtil(t, path);\n addExtraImports(adder, t, path, opts.extraImports);\n },\n exit(path: NodePath<t.Program>, state: State) {\n for (let child of path.get('body')) {\n if (child.isImportDeclaration() || child.isExportNamedDeclaration() || child.isExportAllDeclaration()) {\n rewriteTopLevelImport(t, child, state);\n }\n }\n },\n },\n CallExpression(path: NodePath<t.CallExpression>, state: State) {\n if (isImportSyncExpression(t, path) || isDynamicImportExpression(t, path)) {\n const [source] = path.get('arguments');\n let opts = ensureOpts(state);\n let specifier = adjustSpecifier((source.node as any).value, state.adjustFile, opts, true);\n source.replaceWith(t.stringLiteral(specifier));\n return;\n }\n\n // Should/can we make this early exit when the first define was found?\n if (!isDefineExpression(t, path)) {\n return;\n }\n\n let pkg = state.adjustFile.owningPackage();\n if (pkg && pkg.isV2Ember() && !pkg.meta['auto-upgraded']) {\n throw new Error(\n `The file ${state.adjustFile.originalFile} in package ${pkg.name} tried to use AMD define. Native V2 Ember addons are forbidden from using AMD define, they must use ECMA export only.`\n );\n }\n\n let opts = ensureOpts(state);\n\n const dependencies = path.node.arguments[1];\n\n const specifiers = dependencies.elements.slice();\n specifiers.push(path.node.arguments[0]);\n\n for (let source of specifiers) {\n if (!source) {\n continue;\n }\n\n if (source.type !== 'StringLiteral') {\n throw path.buildCodeFrameError(`expected only string literal arguments`);\n }\n\n if (source.value === 'exports' || source.value === 'require') {\n // skip \"special\" AMD dependencies\n continue;\n }\n\n let specifier = adjustSpecifier(source.value, state.adjustFile, opts, false);\n\n if (specifier !== source.value) {\n source.value = specifier;\n }\n }\n },\n },\n };\n}\n\nfunction rewriteTopLevelImport(\n t: BabelTypes,\n path: NodePath<t.ImportDeclaration | t.ExportNamedDeclaration | t.ExportAllDeclaration>,\n state: State\n) {\n let opts = ensureOpts(state);\n const { source } = path.node;\n if (source === null || source === undefined) {\n return;\n }\n\n if (opts.emberNeedsModulesPolyfill && path.isImportDeclaration()) {\n let replacement = handleImportDeclaration(t, path);\n if (replacement) {\n path.replaceWith(replacement);\n return;\n }\n }\n\n let specifier = adjustSpecifier(source.value, state.adjustFile, opts, false);\n if (specifier !== source.value) {\n source.value = specifier;\n }\n}\n\n(main as any).baseDir = function () {\n return join(__dirname, '..');\n};\n\nfunction addExtraImports(\n adder: ImportUtil,\n t: BabelTypes,\n path: NodePath<t.Program>,\n extraImports: Required<Options>['extraImports']\n) {\n for (let { absPath, target, runtimeName } of extraImports) {\n if (absPath === path.hub.file.opts.filename) {\n if (runtimeName) {\n path.node.body.unshift(amdDefine(t, adder, path, target, runtimeName));\n } else {\n adder.importForSideEffect(target);\n }\n }\n }\n}\n\nfunction amdDefine(t: BabelTypes, adder: ImportUtil, path: NodePath<t.Program>, target: string, runtimeName: string) {\n let value = t.callExpression(adder.import(path, '@embroider/macros', 'importSync'), [t.stringLiteral(target)]);\n return t.expressionStatement(\n t.callExpression(t.memberExpression(t.identifier('window'), t.identifier('define')), [\n t.stringLiteral(runtimeName),\n t.functionExpression(null, [], t.blockStatement([t.returnStatement(value)])),\n ])\n );\n}\n\nclass AdjustFile {\n readonly originalFile: string;\n\n constructor(public name: string, relocatedFiles: Options['relocatedFiles']) {\n if (!name) {\n throw new Error(`bug: adjust-imports plugin was run without a filename`);\n }\n this.originalFile = relocatedFiles[name] || name;\n }\n\n get isRelocated() {\n return this.originalFile !== this.name;\n }\n\n @Memoize()\n owningPackage(): Package | undefined {\n return packageCache.ownerOfFile(this.originalFile);\n }\n\n @Memoize()\n relocatedIntoPackage(): Package | undefined {\n if (this.isRelocated) {\n return packageCache.ownerOfFile(this.name);\n }\n }\n}\n\nfunction ensureOpts(state: State): Options {\n let { opts } = state;\n if ('adjustImportsOptionsPath' in opts) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return (state.opts = { ...require(opts.adjustImportsOptionsPath), ...require(opts.relocatedFilesPath) });\n }\n return opts;\n}\n\n// we don't want to allow things that resolve only by accident that are likely\n// to break in other setups. For example: import your dependencies'\n// dependencies, or importing your own name from within a monorepo (which will\n// work because of the symlinking) without setting up \"exports\" (which makes\n// your own name reliably resolvable)\nfunction reliablyResolvable(pkg: V2Package, packageName: string) {\n if (pkg.hasDependency(packageName)) {\n return true;\n }\n\n if (pkg.name === packageName && pkg.packageJSON.exports) {\n return true;\n }\n\n if (emberVirtualPeerDeps.has(packageName)) {\n return true;\n }\n\n return false;\n}\n"]}
@@ -132,10 +132,12 @@ function isAbsoluteURL(url) {
132
132
  function maybeInsertLazyBundles(insertedLazy, lazyBundles, placeholder, publicAssetURL) {
133
133
  if (!insertedLazy && placeholder.isScript()) {
134
134
  for (let bundle of lazyBundles) {
135
- let element = placeholder.start.ownerDocument.createElement('fastboot-script');
136
- element.setAttribute('src', publicAssetURL + bundle);
137
- placeholder.insert(element);
138
- placeholder.insertNewline();
135
+ if (bundle.endsWith('.js')) {
136
+ let element = placeholder.start.ownerDocument.createElement('fastboot-script');
137
+ element.setAttribute('src', publicAssetURL + bundle);
138
+ placeholder.insert(element);
139
+ placeholder.insertNewline();
140
+ }
139
141
  }
140
142
  return true;
141
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-entrypoint.js","sourceRoot":"","sources":["html-entrypoint.ts"],"names":[],"mappings":"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","sourcesContent":["import { getOrCreate } from '@embroider/shared-internals';\nimport { readFileSync } from 'fs-extra';\nimport { join } from 'path';\nimport { JSDOM } from 'jsdom';\nimport partition from 'lodash/partition';\nimport zip from 'lodash/zip';\nimport Placeholder from './html-placeholder';\nimport { Variant } from './packager';\n\nexport class HTMLEntrypoint {\n private dom: JSDOM;\n private placeholders: Map<string, Placeholder[]> = new Map();\n modules: string[] = [];\n scripts: string[] = [];\n styles: string[] = [];\n\n constructor(\n private pathToVanillaApp: string,\n private rootURL: string,\n private publicAssetURL: string,\n public filename: string\n ) {\n this.dom = new JSDOM(readFileSync(join(this.pathToVanillaApp, this.filename), 'utf8'));\n\n for (let tag of this.handledStyles()) {\n let styleTag = tag as HTMLLinkElement;\n let href = styleTag.href;\n if (!isAbsoluteURL(href)) {\n let url = this.relativeToApp(href);\n this.styles.push(url);\n let placeholder = new Placeholder(styleTag);\n let list = getOrCreate(this.placeholders, url, () => []);\n list.push(placeholder);\n }\n }\n\n for (let scriptTag of this.handledScripts()) {\n // scriptTag.src include rootURL. Convert it to be relative to the app.\n let src = this.relativeToApp(scriptTag.src);\n\n if (scriptTag.type === 'module') {\n this.modules.push(src);\n } else {\n this.scripts.push(src);\n }\n\n let placeholder = new Placeholder(scriptTag);\n let list = getOrCreate(this.placeholders, src, () => []);\n list.push(placeholder);\n }\n }\n\n private relativeToApp(rootRelativeURL: string) {\n return rootRelativeURL.replace(this.rootURL, '');\n }\n\n private handledScripts() {\n let scriptTags = [...this.dom.window.document.querySelectorAll('script')] as HTMLScriptElement[];\n let [ignoredScriptTags, handledScriptTags] = partition(scriptTags, scriptTag => {\n return !scriptTag.src || scriptTag.hasAttribute('data-embroider-ignore') || isAbsoluteURL(scriptTag.src);\n });\n for (let scriptTag of ignoredScriptTags) {\n scriptTag.removeAttribute('data-embroider-ignore');\n }\n return handledScriptTags;\n }\n\n private handledStyles() {\n let styleTags = [...this.dom.window.document.querySelectorAll('link[rel=\"stylesheet\"]')] as HTMLLinkElement[];\n let [ignoredStyleTags, handledStyleTags] = partition(styleTags, styleTag => {\n return !styleTag.href || styleTag.hasAttribute('data-embroider-ignore') || isAbsoluteURL(styleTag.href);\n });\n for (let styleTag of ignoredStyleTags) {\n styleTag.removeAttribute('data-embroider-ignore');\n }\n return handledStyleTags;\n }\n\n // bundles maps from input asset to a per-variant map of output assets\n render(stats: BundleSummary): string {\n let insertedLazy = false;\n let fastbootVariant = stats.variants.findIndex(v => Boolean(v.runtime === 'fastboot'));\n let supportsFastboot = stats.variants.some(v => v.runtime === 'fastboot' || v.runtime === 'all');\n\n for (let [src, placeholders] of this.placeholders) {\n let match = stats.entrypoints.get(src);\n if (match) {\n let firstVariant = stats.variants.findIndex((_, index) => Boolean(match!.get(index)));\n let matchingBundles = match.get(firstVariant)!;\n let matchingFastbootBundles = fastbootVariant >= 0 ? match.get(fastbootVariant) || [] : [];\n\n for (let placeholder of placeholders) {\n if (supportsFastboot) {\n // if there is any fastboot involved, we will emit the lazy bundles\n // right before our first script.\n insertedLazy = maybeInsertLazyBundles(insertedLazy, stats.lazyBundles, placeholder, this.publicAssetURL);\n }\n for (let [base, fastboot] of zip(matchingBundles, matchingFastbootBundles)) {\n if (!base) {\n // this bundle only exists in the fastboot variant\n let element = placeholder.start.ownerDocument.createElement('fastboot-script');\n element.setAttribute('src', this.publicAssetURL + fastboot);\n placeholder.insert(element);\n placeholder.insertNewline();\n } else if (!fastboot || base === fastboot) {\n // no specialized fastboot variant\n let src = this.publicAssetURL + base;\n placeholder.insertURL(src);\n } else {\n // we have both and they differ\n let src = this.publicAssetURL + base;\n let element = placeholder.insertURL(src);\n if (element) {\n element.setAttribute('data-fastboot-src', this.publicAssetURL + fastboot);\n }\n }\n }\n }\n } else {\n // no match means keep the original HTML content for this placeholder.\n // (If we really wanted it empty instead, there would be matchingBundles\n // and it would be an empty list.)\n for (let placeholder of placeholders) {\n placeholder.reset();\n }\n }\n }\n return this.dom.serialize();\n }\n}\n\nexport interface BundleSummary {\n // entrypoints.get(inputAsset).get(variantIndex) === outputAssets\n entrypoints: Map<string, Map<number, string[]>>;\n\n // lazyBundles are tracked specifically for fastboot, so these always come\n // from the fastboot variant, if any\n lazyBundles: Set<string>;\n\n variants: Variant[];\n}\n\nfunction isAbsoluteURL(url: string) {\n return /^(?:[a-z]+:)?\\/\\//i.test(url);\n}\n\n// we (somewhat arbitrarily) decide to put the lazy bundles before the very\n// first <script> that we have rewritten\nfunction maybeInsertLazyBundles(\n insertedLazy: boolean,\n lazyBundles: Set<string>,\n placeholder: Placeholder,\n publicAssetURL: string\n): boolean {\n if (!insertedLazy && placeholder.isScript()) {\n for (let bundle of lazyBundles) {\n let element = placeholder.start.ownerDocument.createElement('fastboot-script');\n element.setAttribute('src', publicAssetURL + bundle);\n placeholder.insert(element);\n placeholder.insertNewline();\n }\n return true;\n }\n return insertedLazy;\n}\n"]}
1
+ {"version":3,"file":"html-entrypoint.js","sourceRoot":"","sources":["html-entrypoint.ts"],"names":[],"mappings":";;;;;;AAAA,kEAA0D;AAC1D,uCAAwC;AACxC,+BAA4B;AAC5B,iCAA8B;AAC9B,iEAAyC;AACzC,qDAA6B;AAC7B,0EAA6C;AAG7C,MAAa,cAAc;IAOzB,YACU,gBAAwB,EACxB,OAAe,EACf,cAAsB,EACvB,QAAgB;QAHf,qBAAgB,GAAhB,gBAAgB,CAAQ;QACxB,YAAO,GAAP,OAAO,CAAQ;QACf,mBAAc,GAAd,cAAc,CAAQ;QACvB,aAAQ,GAAR,QAAQ,CAAQ;QATjB,iBAAY,GAA+B,IAAI,GAAG,EAAE,CAAC;QAC7D,YAAO,GAAa,EAAE,CAAC;QACvB,YAAO,GAAa,EAAE,CAAC;QACvB,WAAM,GAAa,EAAE,CAAC;QAQpB,IAAI,CAAC,GAAG,GAAG,IAAI,aAAK,CAAC,IAAA,uBAAY,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAEvF,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACpC,IAAI,QAAQ,GAAG,GAAsB,CAAC;YACtC,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;gBACxB,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAI,WAAW,GAAG,IAAI,0BAAW,CAAC,QAAQ,CAAC,CAAC;gBAC5C,IAAI,IAAI,GAAG,IAAA,8BAAW,EAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACzD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACxB;SACF;QAED,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YAC3C,uEAAuE;YACvE,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAE5C,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACxB;iBAAM;gBACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACxB;YAED,IAAI,WAAW,GAAG,IAAI,0BAAW,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,IAAI,GAAG,IAAA,8BAAW,EAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACxB;IACH,CAAC;IAEO,aAAa,CAAC,eAAuB;QAC3C,OAAO,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAEO,cAAc;QACpB,IAAI,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAwB,CAAC;QACjG,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,IAAA,mBAAS,EAAC,UAAU,EAAE,SAAS,CAAC,EAAE;YAC7E,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,YAAY,CAAC,uBAAuB,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3G,CAAC,CAAC,CAAC;QACH,KAAK,IAAI,SAAS,IAAI,iBAAiB,EAAE;YACvC,SAAS,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC;SACpD;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEO,aAAa;QACnB,IAAI,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAsB,CAAC;QAC9G,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,IAAA,mBAAS,EAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;YACzE,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,YAAY,CAAC,uBAAuB,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1G,CAAC,CAAC,CAAC;QACH,KAAK,IAAI,QAAQ,IAAI,gBAAgB,EAAE;YACrC,QAAQ,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC;SACnD;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,sEAAsE;IACtE,MAAM,CAAC,KAAoB;QACzB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC;QACvF,IAAI,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;QAEjG,KAAK,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;YACjD,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,KAAK,EAAE;gBACT,IAAI,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtF,IAAI,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;gBAC/C,IAAI,uBAAuB,GAAG,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAE3F,KAAK,IAAI,WAAW,IAAI,YAAY,EAAE;oBACpC,IAAI,gBAAgB,EAAE;wBACpB,mEAAmE;wBACnE,iCAAiC;wBACjC,YAAY,GAAG,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;qBAC1G;oBACD,KAAK,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAA,aAAG,EAAC,eAAe,EAAE,uBAAuB,CAAC,EAAE;wBAC1E,IAAI,CAAC,IAAI,EAAE;4BACT,kDAAkD;4BAClD,IAAI,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;4BAC/E,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAC;4BAC5D,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;4BAC5B,WAAW,CAAC,aAAa,EAAE,CAAC;yBAC7B;6BAAM,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE;4BACzC,kCAAkC;4BAClC,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;4BACrC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;yBAC5B;6BAAM;4BACL,+BAA+B;4BAC/B,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;4BACrC,IAAI,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;4BACzC,IAAI,OAAO,EAAE;gCACX,OAAO,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAC;6BAC3E;yBACF;qBACF;iBACF;aACF;iBAAM;gBACL,sEAAsE;gBACtE,wEAAwE;gBACxE,kCAAkC;gBAClC,KAAK,IAAI,WAAW,IAAI,YAAY,EAAE;oBACpC,WAAW,CAAC,KAAK,EAAE,CAAC;iBACrB;aACF;SACF;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;IAC9B,CAAC;CACF;AAxHD,wCAwHC;AAaD,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,2EAA2E;AAC3E,wCAAwC;AACxC,SAAS,sBAAsB,CAC7B,YAAqB,EACrB,WAAwB,EACxB,WAAwB,EACxB,cAAsB;IAEtB,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE;QAC3C,KAAK,IAAI,MAAM,IAAI,WAAW,EAAE;YAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC1B,IAAI,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;gBAC/E,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAAC,CAAC;gBACrD,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5B,WAAW,CAAC,aAAa,EAAE,CAAC;aAC7B;SACF;QACD,OAAO,IAAI,CAAC;KACb;IACD,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["import { getOrCreate } from '@embroider/shared-internals';\nimport { readFileSync } from 'fs-extra';\nimport { join } from 'path';\nimport { JSDOM } from 'jsdom';\nimport partition from 'lodash/partition';\nimport zip from 'lodash/zip';\nimport Placeholder from './html-placeholder';\nimport { Variant } from './packager';\n\nexport class HTMLEntrypoint {\n private dom: JSDOM;\n private placeholders: Map<string, Placeholder[]> = new Map();\n modules: string[] = [];\n scripts: string[] = [];\n styles: string[] = [];\n\n constructor(\n private pathToVanillaApp: string,\n private rootURL: string,\n private publicAssetURL: string,\n public filename: string\n ) {\n this.dom = new JSDOM(readFileSync(join(this.pathToVanillaApp, this.filename), 'utf8'));\n\n for (let tag of this.handledStyles()) {\n let styleTag = tag as HTMLLinkElement;\n let href = styleTag.href;\n if (!isAbsoluteURL(href)) {\n let url = this.relativeToApp(href);\n this.styles.push(url);\n let placeholder = new Placeholder(styleTag);\n let list = getOrCreate(this.placeholders, url, () => []);\n list.push(placeholder);\n }\n }\n\n for (let scriptTag of this.handledScripts()) {\n // scriptTag.src include rootURL. Convert it to be relative to the app.\n let src = this.relativeToApp(scriptTag.src);\n\n if (scriptTag.type === 'module') {\n this.modules.push(src);\n } else {\n this.scripts.push(src);\n }\n\n let placeholder = new Placeholder(scriptTag);\n let list = getOrCreate(this.placeholders, src, () => []);\n list.push(placeholder);\n }\n }\n\n private relativeToApp(rootRelativeURL: string) {\n return rootRelativeURL.replace(this.rootURL, '');\n }\n\n private handledScripts() {\n let scriptTags = [...this.dom.window.document.querySelectorAll('script')] as HTMLScriptElement[];\n let [ignoredScriptTags, handledScriptTags] = partition(scriptTags, scriptTag => {\n return !scriptTag.src || scriptTag.hasAttribute('data-embroider-ignore') || isAbsoluteURL(scriptTag.src);\n });\n for (let scriptTag of ignoredScriptTags) {\n scriptTag.removeAttribute('data-embroider-ignore');\n }\n return handledScriptTags;\n }\n\n private handledStyles() {\n let styleTags = [...this.dom.window.document.querySelectorAll('link[rel=\"stylesheet\"]')] as HTMLLinkElement[];\n let [ignoredStyleTags, handledStyleTags] = partition(styleTags, styleTag => {\n return !styleTag.href || styleTag.hasAttribute('data-embroider-ignore') || isAbsoluteURL(styleTag.href);\n });\n for (let styleTag of ignoredStyleTags) {\n styleTag.removeAttribute('data-embroider-ignore');\n }\n return handledStyleTags;\n }\n\n // bundles maps from input asset to a per-variant map of output assets\n render(stats: BundleSummary): string {\n let insertedLazy = false;\n let fastbootVariant = stats.variants.findIndex(v => Boolean(v.runtime === 'fastboot'));\n let supportsFastboot = stats.variants.some(v => v.runtime === 'fastboot' || v.runtime === 'all');\n\n for (let [src, placeholders] of this.placeholders) {\n let match = stats.entrypoints.get(src);\n if (match) {\n let firstVariant = stats.variants.findIndex((_, index) => Boolean(match!.get(index)));\n let matchingBundles = match.get(firstVariant)!;\n let matchingFastbootBundles = fastbootVariant >= 0 ? match.get(fastbootVariant) || [] : [];\n\n for (let placeholder of placeholders) {\n if (supportsFastboot) {\n // if there is any fastboot involved, we will emit the lazy bundles\n // right before our first script.\n insertedLazy = maybeInsertLazyBundles(insertedLazy, stats.lazyBundles, placeholder, this.publicAssetURL);\n }\n for (let [base, fastboot] of zip(matchingBundles, matchingFastbootBundles)) {\n if (!base) {\n // this bundle only exists in the fastboot variant\n let element = placeholder.start.ownerDocument.createElement('fastboot-script');\n element.setAttribute('src', this.publicAssetURL + fastboot);\n placeholder.insert(element);\n placeholder.insertNewline();\n } else if (!fastboot || base === fastboot) {\n // no specialized fastboot variant\n let src = this.publicAssetURL + base;\n placeholder.insertURL(src);\n } else {\n // we have both and they differ\n let src = this.publicAssetURL + base;\n let element = placeholder.insertURL(src);\n if (element) {\n element.setAttribute('data-fastboot-src', this.publicAssetURL + fastboot);\n }\n }\n }\n }\n } else {\n // no match means keep the original HTML content for this placeholder.\n // (If we really wanted it empty instead, there would be matchingBundles\n // and it would be an empty list.)\n for (let placeholder of placeholders) {\n placeholder.reset();\n }\n }\n }\n return this.dom.serialize();\n }\n}\n\nexport interface BundleSummary {\n // entrypoints.get(inputAsset).get(variantIndex) === outputAssets\n entrypoints: Map<string, Map<number, string[]>>;\n\n // lazyBundles are tracked specifically for fastboot, so these always come\n // from the fastboot variant, if any\n lazyBundles: Set<string>;\n\n variants: Variant[];\n}\n\nfunction isAbsoluteURL(url: string) {\n return /^(?:[a-z]+:)?\\/\\//i.test(url);\n}\n\n// we (somewhat arbitrarily) decide to put the lazy bundles before the very\n// first <script> that we have rewritten\nfunction maybeInsertLazyBundles(\n insertedLazy: boolean,\n lazyBundles: Set<string>,\n placeholder: Placeholder,\n publicAssetURL: string\n): boolean {\n if (!insertedLazy && placeholder.isScript()) {\n for (let bundle of lazyBundles) {\n if (bundle.endsWith('.js')) {\n let element = placeholder.start.ownerDocument.createElement('fastboot-script');\n element.setAttribute('src', publicAssetURL + bundle);\n placeholder.insert(element);\n placeholder.insertNewline();\n }\n }\n return true;\n }\n return insertedLazy;\n}\n"]}
@@ -6,11 +6,12 @@ export default class Placeholder {
6
6
  reset(): void;
7
7
  clear(): void;
8
8
  insert(node: Node): void;
9
+ appendToHead(node: Node): void;
9
10
  isScript(): boolean;
10
11
  insertURL(url: string): void | HTMLScriptElement;
11
12
  insertScriptTag(src: string): HTMLScriptElement;
12
13
  insertStyleLink(href: string): void;
13
- insertNewline(): void;
14
+ insertNewline(node?: InDOMNode): void;
14
15
  }
15
16
  interface InDOMNode extends Node {
16
17
  parentElement: HTMLElement;
@@ -30,6 +30,9 @@ class Placeholder {
30
30
  insert(node) {
31
31
  this.end.parentElement.insertBefore(node, this.end);
32
32
  }
33
+ appendToHead(node) {
34
+ this.end.ownerDocument.head.appendChild(node);
35
+ }
33
36
  isScript() {
34
37
  return this.target.tagName === 'SCRIPT';
35
38
  }
@@ -61,11 +64,19 @@ class Placeholder {
61
64
  let newTag = this.end.ownerDocument.createElement('link');
62
65
  newTag.href = href;
63
66
  newTag.rel = 'stylesheet';
64
- this.insert(newTag);
65
- this.insertNewline();
67
+ if (this.isScript()) {
68
+ // Add dynamic styles from scripts to the bottom of the head, and not to where the script was,
69
+ // to prevent FOUC when pre-rendering (FastBoot)
70
+ this.appendToHead(newTag);
71
+ }
72
+ else {
73
+ // Keep the new style in the same place as the original one
74
+ this.insert(newTag);
75
+ }
76
+ this.insertNewline(newTag);
66
77
  }
67
- insertNewline() {
68
- this.end.parentElement.insertBefore(this.end.ownerDocument.createTextNode('\n'), this.end);
78
+ insertNewline(node = this.end) {
79
+ node.parentElement.insertBefore(node.ownerDocument.createTextNode('\n'), node);
69
80
  }
70
81
  }
71
82
  exports.default = Placeholder;
@@ -1 +1 @@
1
- {"version":3,"file":"html-placeholder.js","sourceRoot":"","sources":["html-placeholder.ts"],"names":[],"mappings":"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","sourcesContent":["export default class Placeholder {\n end: InDOMNode;\n start: StartNode;\n\n // remove the target Element from the DOM, and track where it was so we can\n // update that location later.\n constructor(private target: HTMLElement) {\n if (!target.ownerDocument || !target.parentElement) {\n throw new Error('can only construct a placeholder for an element that is in DOM');\n }\n let start = target.ownerDocument.createTextNode('');\n target.parentElement.insertBefore(start, target);\n let endNode = target.ownerDocument.createTextNode('');\n target.replaceWith(endNode);\n\n // Type cast is justified because start always has a nextSibling (it's\n // \"end\") and because we know we already inserted the node.\n this.start = start as StartNode;\n\n // Type cast is justified because we know we already inserted the node.\n this.end = endNode as InDOMNode;\n }\n\n reset() {\n this.clear();\n this.insert(this.target);\n }\n\n clear() {\n while (this.start.nextSibling !== this.end) {\n this.start.parentElement.removeChild(this.start.nextSibling);\n }\n }\n\n insert(node: Node) {\n this.end.parentElement.insertBefore(node, this.end);\n }\n\n isScript(): boolean {\n return this.target.tagName === 'SCRIPT';\n }\n\n insertURL(url: string) {\n if (url.endsWith('.js')) {\n return this.insertScriptTag(url);\n }\n if (url.endsWith('.css')) {\n return this.insertStyleLink(url);\n }\n throw new Error(`don't know how to insertURL ${url}`);\n }\n\n insertScriptTag(src: string) {\n let newTag = this.end.ownerDocument.createElement('script');\n for (let { name, value } of [...this.target.attributes]) {\n if (name === 'type' && value === 'module') {\n // we always convert modules to scripts\n continue;\n }\n // all other attributes are copied forward unchanged\n newTag.setAttribute(name, value);\n }\n newTag.src = src;\n this.insert(newTag);\n this.insertNewline();\n return newTag;\n }\n\n insertStyleLink(href: string) {\n let newTag = this.end.ownerDocument.createElement('link');\n newTag.href = href;\n newTag.rel = 'stylesheet';\n this.insert(newTag);\n this.insertNewline();\n }\n\n insertNewline() {\n this.end.parentElement.insertBefore(this.end.ownerDocument.createTextNode('\\n'), this.end);\n }\n}\n\n// an html node that's definitely inserted into the DOM\ninterface InDOMNode extends Node {\n parentElement: HTMLElement;\n ownerDocument: Document;\n}\n\n// an html node that definitely has a next sibling.\ninterface StartNode extends InDOMNode {\n nextSibling: InDOMNode & ChildNode;\n}\n"]}
1
+ {"version":3,"file":"html-placeholder.js","sourceRoot":"","sources":["html-placeholder.ts"],"names":[],"mappings":"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","sourcesContent":["export default class Placeholder {\n end: InDOMNode;\n start: StartNode;\n\n // remove the target Element from the DOM, and track where it was so we can\n // update that location later.\n constructor(private target: HTMLElement) {\n if (!target.ownerDocument || !target.parentElement) {\n throw new Error('can only construct a placeholder for an element that is in DOM');\n }\n let start = target.ownerDocument.createTextNode('');\n target.parentElement.insertBefore(start, target);\n let endNode = target.ownerDocument.createTextNode('');\n target.replaceWith(endNode);\n\n // Type cast is justified because start always has a nextSibling (it's\n // \"end\") and because we know we already inserted the node.\n this.start = start as StartNode;\n\n // Type cast is justified because we know we already inserted the node.\n this.end = endNode as InDOMNode;\n }\n\n reset() {\n this.clear();\n this.insert(this.target);\n }\n\n clear() {\n while (this.start.nextSibling !== this.end) {\n this.start.parentElement.removeChild(this.start.nextSibling);\n }\n }\n\n insert(node: Node): void {\n this.end.parentElement.insertBefore(node, this.end);\n }\n\n appendToHead(node: Node): void {\n this.end.ownerDocument.head.appendChild(node);\n }\n\n isScript(): boolean {\n return this.target.tagName === 'SCRIPT';\n }\n\n insertURL(url: string) {\n if (url.endsWith('.js')) {\n return this.insertScriptTag(url);\n }\n if (url.endsWith('.css')) {\n return this.insertStyleLink(url);\n }\n throw new Error(`don't know how to insertURL ${url}`);\n }\n\n insertScriptTag(src: string) {\n let newTag = this.end.ownerDocument.createElement('script');\n for (let { name, value } of [...this.target.attributes]) {\n if (name === 'type' && value === 'module') {\n // we always convert modules to scripts\n continue;\n }\n // all other attributes are copied forward unchanged\n newTag.setAttribute(name, value);\n }\n newTag.src = src;\n this.insert(newTag);\n this.insertNewline();\n return newTag;\n }\n\n insertStyleLink(href: string) {\n let newTag = this.end.ownerDocument.createElement('link');\n newTag.href = href;\n newTag.rel = 'stylesheet';\n\n if (this.isScript()) {\n // Add dynamic styles from scripts to the bottom of the head, and not to where the script was,\n // to prevent FOUC when pre-rendering (FastBoot)\n this.appendToHead(newTag);\n } else {\n // Keep the new style in the same place as the original one\n this.insert(newTag);\n }\n this.insertNewline(newTag as InDOMNode);\n }\n\n insertNewline(node: InDOMNode = this.end): void {\n node.parentElement.insertBefore(node.ownerDocument.createTextNode('\\n'), node);\n }\n}\n\n// an html node that's definitely inserted into the DOM\ninterface InDOMNode extends Node {\n parentElement: HTMLElement;\n ownerDocument: Document;\n}\n\n// an html node that definitely has a next sibling.\ninterface StartNode extends InDOMNode {\n nextSibling: InDOMNode & ChildNode;\n}\n"]}
package/src/options.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export default interface Options {
2
2
  staticHelpers?: boolean;
3
+ staticModifiers?: boolean;
3
4
  staticComponents?: boolean;
4
5
  splitAtRoutes?: (RegExp | string)[];
5
6
  staticAppPaths?: string[];
package/src/options.js CHANGED
@@ -4,6 +4,7 @@ exports.optionsWithDefaults = void 0;
4
4
  function optionsWithDefaults(options) {
5
5
  let defaults = {
6
6
  staticHelpers: false,
7
+ staticModifiers: false,
7
8
  staticComponents: false,
8
9
  packageRules: [],
9
10
  splitAtRoutes: [],
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["options.ts"],"names":[],"mappings":";;;AAmGA,SAAgB,mBAAmB,CAAC,OAAiB;IACnD,IAAI,QAAQ,GAAG;QACb,aAAa,EAAE,KAAK;QACpB,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,EAAE;QACjB,gBAAgB,EAAE,KAAK;QACvB,iBAAiB,EAAE,KAAK;QACxB,cAAc,EAAE,EAAE;QAClB,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,EAAE;QACf,uBAAuB,EAAE,eAAkC;KAC5D,CAAC;IACF,IAAI,OAAO,EAAE;QACX,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KACzC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAjBD,kDAiBC","sourcesContent":["export default interface Options {\n // When true, we statically resolve all template helpers at build time. This\n // causes unused helpers to be left out of the build (\"tree shaking\" of\n // helpers).\n //\n // Defaults to false, which gives you greater compatibility with classic Ember\n // apps at the cost of bigger builds.\n //\n // Enabling this is a prerequisite for route splitting.\n staticHelpers?: boolean;\n\n // When true, we statically resolve all components at build time. This causes\n // unused components to be left out of the build (\"tree shaking\" of\n // components).\n //\n // Defaults to false, which gives you greater compatibility with classic Ember\n // apps at the cost of bigger builds.\n //\n // Enabling this is a prerequisite for route splitting.\n staticComponents?: boolean;\n\n // Enables per-route code splitting. Any route names that match these patterns\n // will be split out of the initial app payload. If you use this, you must\n // also add @embroider/router to your app. See [@embroider/router's\n // README](https://github.com/embroider-build/embroider/blob/master/packages/router/README.md)\n splitAtRoutes?: (RegExp | string)[];\n\n // Every file within your application's `app` directory is categorized as a\n // component, helper, route, route template, controller, or \"other\".\n //\n // This option lets you decide which \"other\" files should be loaded\n // statically. By default, all \"other\" files will be included in the build and\n // registered with Ember's runtime loader, because we can't know if somebody\n // is going to try to access them dynamically via Ember's resolver or AMD\n // runtime `require`.\n //\n // If you know that your files are only ever imported, you can list them here\n // and then they will only be included exactly where they're needed.\n //\n // Provide a list of directories or files relative to `/app`. For example\n //\n // staticAppPaths: ['lib']\n //\n // means that everything under your-project/app/lib will be loaded statically.\n //\n // This option has no effect on components (which are governed by\n // staticComponents), helpers (which are governed by staticHelpers), or the\n // route-specific files (routes, route templates, and controllers which are\n // governed by splitAtRoutes).\n staticAppPaths?: string[];\n\n // By default, all modules that get imported into the app go through Babel, so\n // that all code will conform with your Babel targets. This option allows you\n // to turn Babel off for a particular package. You might need this to work\n // around a transpiler bug or you might use this as a build-performance\n // optimization if you've manually verified that a particular package doesn't\n // need transpilation to be safe in your target browsers.\n skipBabel?: { package: string; semverRange?: string }[];\n\n // This is a performance optimization that can help you avoid the \"Your build\n // is slower because some babel plugins are non-serializable\" penalty. If you\n // provide the locations of known non-serializable objects, we can discover\n // them and make them serializable.\n //\n // resolve is a list of paths to resolve, in a chain. This lets you resolve\n // your dependencies' dependencies, like: resolve: ['your-dependency',\n // 'inner-dependency/lib/transform']\n //\n // useMethod optionally lets you pick which property within the module to use.\n // If not provided, we use the module.exports itself.\n pluginHints?: { resolve: string[]; useMethod?: string }[];\n\n // Our addons' implicit-modules and implicit-test-modules are not necessarily\n // resolvable directly from the app, but the meaning of those\n // backward-compatibility features is \"the app should import this module\". So\n // we need some strategy for making them importable by the app. We can either\n // turn those imports into complete relative paths, or leave them as package\n // names:\n //\n // relativePaths:\n //\n // import('./node_modules/intermediate/node_modules/some-addon/thing.js')\n //\n // packageNames:\n //\n // import('some-addon/thing.js')\n //\n // When building under a tool like webpack, the relativePaths are safe and\n // always work, although they can be uglier to look at when debugging in\n // development.\n //\n // When building under a tool like snowpack, the package names can be easier\n // to work with because you already have web-bundles per package, and can't\n // necessarily address arbitrary places on the filesystem.\n //\n // Defaults to \"relativePaths\".\n implicitModulesStrategy?: 'packageNames' | 'relativePaths';\n}\n\nexport function optionsWithDefaults(options?: Options): Required<Options> {\n let defaults = {\n staticHelpers: false,\n staticComponents: false,\n packageRules: [],\n splitAtRoutes: [],\n splitControllers: false,\n splitRouteClasses: false,\n staticAppPaths: [],\n skipBabel: [],\n pluginHints: [],\n implicitModulesStrategy: 'relativePaths' as 'relativePaths',\n };\n if (options) {\n return Object.assign(defaults, options);\n }\n return defaults;\n}\n"]}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["options.ts"],"names":[],"mappings":";;;AA6GA,SAAgB,mBAAmB,CAAC,OAAiB;IACnD,IAAI,QAAQ,GAAG;QACb,aAAa,EAAE,KAAK;QACpB,eAAe,EAAE,KAAK;QACtB,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,EAAE;QACjB,gBAAgB,EAAE,KAAK;QACvB,iBAAiB,EAAE,KAAK;QACxB,cAAc,EAAE,EAAE;QAClB,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,EAAE;QACf,uBAAuB,EAAE,eAAkC;KAC5D,CAAC;IACF,IAAI,OAAO,EAAE;QACX,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KACzC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAlBD,kDAkBC","sourcesContent":["export default interface Options {\n // When true, we statically resolve all template helpers at build time. This\n // causes unused helpers to be left out of the build (\"tree shaking\" of\n // helpers).\n //\n // Defaults to false, which gives you greater compatibility with classic Ember\n // apps at the cost of bigger builds.\n //\n // Enabling this is a prerequisite for route splitting.\n staticHelpers?: boolean;\n\n // When true, we statically resolve all modifiers at build time. This\n // causes unused modifiers to be left out of the build (\"tree shaking\" of\n // modifiers).\n //\n // Defaults to false, which gives you greater compatibility with classic Ember\n // apps at the cost of bigger builds.\n //\n // Enabling this is a prerequisite for route splitting.\n staticModifiers?: boolean;\n\n // When true, we statically resolve all components at build time. This causes\n // unused components to be left out of the build (\"tree shaking\" of\n // components).\n //\n // Defaults to false, which gives you greater compatibility with classic Ember\n // apps at the cost of bigger builds.\n //\n // Enabling this is a prerequisite for route splitting.\n staticComponents?: boolean;\n\n // Enables per-route code splitting. Any route names that match these patterns\n // will be split out of the initial app payload. If you use this, you must\n // also add @embroider/router to your app. See [@embroider/router's\n // README](https://github.com/embroider-build/embroider/blob/master/packages/router/README.md)\n splitAtRoutes?: (RegExp | string)[];\n\n // Every file within your application's `app` directory is categorized as a\n // component, helper, modifier, route, route template, controller, or \"other\".\n //\n // This option lets you decide which \"other\" files should be loaded\n // statically. By default, all \"other\" files will be included in the build and\n // registered with Ember's runtime loader, because we can't know if somebody\n // is going to try to access them dynamically via Ember's resolver or AMD\n // runtime `require`.\n //\n // If you know that your files are only ever imported, you can list them here\n // and then they will only be included exactly where they're needed.\n //\n // Provide a list of directories or files relative to `/app`. For example\n //\n // staticAppPaths: ['lib']\n //\n // means that everything under your-project/app/lib will be loaded statically.\n //\n // This option has no effect on components (which are governed by\n // staticComponents), helpers (which are governed by staticHelpers), modifiers\n // (which are governed by staticModifiers) or the route-specific files (routes,\n // route templates, and controllers which are governed by splitAtRoutes).\n staticAppPaths?: string[];\n\n // By default, all modules that get imported into the app go through Babel, so\n // that all code will conform with your Babel targets. This option allows you\n // to turn Babel off for a particular package. You might need this to work\n // around a transpiler bug or you might use this as a build-performance\n // optimization if you've manually verified that a particular package doesn't\n // need transpilation to be safe in your target browsers.\n skipBabel?: { package: string; semverRange?: string }[];\n\n // This is a performance optimization that can help you avoid the \"Your build\n // is slower because some babel plugins are non-serializable\" penalty. If you\n // provide the locations of known non-serializable objects, we can discover\n // them and make them serializable.\n //\n // resolve is a list of paths to resolve, in a chain. This lets you resolve\n // your dependencies' dependencies, like: resolve: ['your-dependency',\n // 'inner-dependency/lib/transform']\n //\n // useMethod optionally lets you pick which property within the module to use.\n // If not provided, we use the module.exports itself.\n pluginHints?: { resolve: string[]; useMethod?: string }[];\n\n // Our addons' implicit-modules and implicit-test-modules are not necessarily\n // resolvable directly from the app, but the meaning of those\n // backward-compatibility features is \"the app should import this module\". So\n // we need some strategy for making them importable by the app. We can either\n // turn those imports into complete relative paths, or leave them as package\n // names:\n //\n // relativePaths:\n //\n // import('./node_modules/intermediate/node_modules/some-addon/thing.js')\n //\n // packageNames:\n //\n // import('some-addon/thing.js')\n //\n // When building under a tool like webpack, the relativePaths are safe and\n // always work, although they can be uglier to look at when debugging in\n // development.\n //\n // When building under a tool like snowpack, the package names can be easier\n // to work with because you already have web-bundles per package, and can't\n // necessarily address arbitrary places on the filesystem.\n //\n // Defaults to \"relativePaths\".\n implicitModulesStrategy?: 'packageNames' | 'relativePaths';\n}\n\nexport function optionsWithDefaults(options?: Options): Required<Options> {\n let defaults = {\n staticHelpers: false,\n staticModifiers: false,\n staticComponents: false,\n packageRules: [],\n splitAtRoutes: [],\n splitControllers: false,\n splitRouteClasses: false,\n staticAppPaths: [],\n skipBabel: [],\n pluginHints: [],\n implicitModulesStrategy: 'relativePaths' as 'relativePaths',\n };\n if (options) {\n return Object.assign(defaults, options);\n }\n return defaults;\n}\n"]}