@embroider/core 0.50.0 → 0.50.1

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.50.0",
3
+ "version": "0.50.1",
4
4
  "private": false,
5
5
  "description": "A build system for EmberJS applications.",
6
6
  "repository": {
@@ -37,8 +37,8 @@
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.50.0",
41
- "@embroider/shared-internals": "0.50.0",
40
+ "@embroider/macros": "0.50.1",
41
+ "@embroider/shared-internals": "0.50.1",
42
42
  "assert-never": "^1.2.1",
43
43
  "babel-import-util": "^1.1.0",
44
44
  "babel-plugin-ember-template-compilation": "^1.0.0",
package/src/app.js CHANGED
@@ -281,6 +281,7 @@ class AppBuilder {
281
281
  babel.plugins.push(...this.macrosConfig.babelPluginConfig());
282
282
  let colocationOptions = {
283
283
  packageGuard: true,
284
+ appRoot: this.root,
284
285
  };
285
286
  babel.plugins.push([
286
287
  require.resolve('@embroider/shared-internals/src/template-colocation-plugin'),
@@ -666,7 +667,7 @@ class AppBuilder {
666
667
  }
667
668
  async build(inputPaths) {
668
669
  if (this.adapter.env !== 'production') {
669
- this.macrosConfig.enableAppDevelopment(this.root);
670
+ this.macrosConfig.enablePackageDevelopment(this.root);
670
671
  this.macrosConfig.enableRuntimeMode();
671
672
  }
672
673
  for (let pkgRoot of this.adapter.developingAddons()) {
@@ -777,7 +778,7 @@ class AppBuilder {
777
778
  (0, messages_1.warn)('Your build is slower because some babel plugins are non-serializable');
778
779
  }
779
780
  (0, fs_extra_1.writeFileSync)((0, path_1.join)(this.root, '_babel_config_.js'), `module.exports = ${JSON.stringify(pconfig.config, null, 2)}`, 'utf8');
780
- (0, fs_extra_1.writeFileSync)((0, path_1.join)(this.root, '_babel_filter_.js'), babelFilterTemplate({ skipBabel: this.options.skipBabel }), 'utf8');
781
+ (0, fs_extra_1.writeFileSync)((0, path_1.join)(this.root, '_babel_filter_.js'), babelFilterTemplate({ skipBabel: this.options.skipBabel, appRoot: this.root }), 'utf8');
781
782
  }
782
783
  shouldSplitRoute(routeName) {
783
784
  return (!this.options.splitAtRoutes ||
@@ -1171,8 +1172,8 @@ function stringOrBufferEqual(a, b) {
1171
1172
  return false;
1172
1173
  }
1173
1174
  const babelFilterTemplate = (0, js_handlebars_1.compile)(`
1174
- const { babelFilter } = require('@embroider/core');
1175
- module.exports = babelFilter({{{json-stringify skipBabel}}});
1175
+ const { babelFilter } = require(${JSON.stringify(require.resolve('./index.js'))});
1176
+ module.exports = babelFilter({{{json-stringify skipBabel}}}, "{{{js-string-escape appRoot}}}");
1176
1177
  `);
1177
1178
  // meta['renamed-modules'] has mapping from classic filename to real filename.
1178
1179
  // This takes that and converts it to the inverst mapping from real import path
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 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"]}
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 appRoot: this.root,\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.enablePackageDevelopment(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, appRoot: this.root }),\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(${JSON.stringify(require.resolve('./index.js'))});\nmodule.exports = babelFilter({{{json-stringify skipBabel}}}, \"{{{js-string-escape appRoot}}}\");\n`) as (params: { skipBabel: Options['skipBabel']; appRoot: string }) => 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"]}
@@ -32,6 +32,7 @@ export interface Options {
32
32
  };
33
33
  resolvableExtensions: string[];
34
34
  emberNeedsModulesPolyfill: boolean;
35
+ appRoot: string;
35
36
  }
36
37
  declare type DefineExpressionPath = NodePath<t.CallExpression> & {
37
38
  node: t.CallExpression & {
@@ -53,7 +54,8 @@ export default function main(babel: typeof Babel): {
53
54
  declare class AdjustFile {
54
55
  name: string;
55
56
  readonly originalFile: string;
56
- constructor(name: string, relocatedFiles: Options['relocatedFiles']);
57
+ private packageCache;
58
+ constructor(name: string, relocatedFiles: Options['relocatedFiles'], appRoot: string);
57
59
  get isRelocated(): boolean;
58
60
  owningPackage(): Package | undefined;
59
61
  relocatedIntoPackage(): Package | undefined;
@@ -15,7 +15,6 @@ 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
17
  const babel_import_util_1 = require("babel-import-util");
18
- const packageCache = shared_internals_2.PackageCache.shared('embroider-stage3');
19
18
  function isImportSyncExpression(t, path) {
20
19
  if (!path ||
21
20
  !path.isCallExpression() ||
@@ -107,9 +106,9 @@ function handleRenaming(specifier, sourceFile, opts) {
107
106
  function isExplicitlyExternal(specifier, fromPkg) {
108
107
  return Boolean(fromPkg.isV2Addon() && fromPkg.meta['externals'] && fromPkg.meta['externals'].includes(specifier));
109
108
  }
110
- function isResolvable(packageName, fromPkg) {
109
+ function isResolvable(packageName, fromPkg, appRoot) {
111
110
  try {
112
- let dep = packageCache.resolve(packageName, fromPkg);
111
+ let dep = shared_internals_2.PackageCache.shared('embroider-stage3', appRoot).resolve(packageName, fromPkg);
113
112
  if (!dep.isEmberPackage() && !fromPkg.hasDependency('ember-auto-import')) {
114
113
  return false;
115
114
  }
@@ -202,7 +201,7 @@ function handleExternal(specifier, sourceFile, opts, isDynamic) {
202
201
  return specifier;
203
202
  }
204
203
  // first try to resolve from the destination package
205
- if (isResolvable(packageName, relocatedPkg)) {
204
+ if (isResolvable(packageName, relocatedPkg, opts.appRoot)) {
206
205
  if (!pkg.meta['auto-upgraded']) {
207
206
  throw new Error(`${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`);
208
207
  }
@@ -210,7 +209,7 @@ function handleExternal(specifier, sourceFile, opts, isDynamic) {
210
209
  }
211
210
  else {
212
211
  // second try to resolve from the source package
213
- let targetPkg = isResolvable(packageName, pkg);
212
+ let targetPkg = isResolvable(packageName, pkg, opts.appRoot);
214
213
  if (targetPkg) {
215
214
  if (!pkg.meta['auto-upgraded']) {
216
215
  throw new Error(`${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`);
@@ -222,7 +221,7 @@ function handleExternal(specifier, sourceFile, opts, isDynamic) {
222
221
  }
223
222
  }
224
223
  else {
225
- if (isResolvable(packageName, pkg)) {
224
+ if (isResolvable(packageName, pkg, opts.appRoot)) {
226
225
  if (!pkg.meta['auto-upgraded'] && !reliablyResolvable(pkg, packageName)) {
227
226
  throw new Error(`${pkg.name} is trying to import from ${packageName} but that is not one of its explicit dependencies`);
228
227
  }
@@ -281,7 +280,7 @@ function main(babel) {
281
280
  Program: {
282
281
  enter(path, state) {
283
282
  let opts = ensureOpts(state);
284
- state.adjustFile = new AdjustFile(path.hub.file.opts.filename, opts.relocatedFiles);
283
+ state.adjustFile = new AdjustFile(path.hub.file.opts.filename, opts.relocatedFiles, opts.appRoot);
285
284
  let adder = new babel_import_util_1.ImportUtil(t, path);
286
285
  addExtraImports(adder, t, path, opts.extraImports);
287
286
  },
@@ -375,8 +374,9 @@ function amdDefine(t, adder, path, target, runtimeName) {
375
374
  ]));
376
375
  }
377
376
  class AdjustFile {
378
- constructor(name, relocatedFiles) {
377
+ constructor(name, relocatedFiles, appRoot) {
379
378
  this.name = name;
379
+ this.packageCache = shared_internals_2.PackageCache.shared('embroider-stage3', appRoot);
380
380
  if (!name) {
381
381
  throw new Error(`bug: adjust-imports plugin was run without a filename`);
382
382
  }
@@ -386,11 +386,11 @@ class AdjustFile {
386
386
  return this.originalFile !== this.name;
387
387
  }
388
388
  owningPackage() {
389
- return packageCache.ownerOfFile(this.originalFile);
389
+ return this.packageCache.ownerOfFile(this.originalFile);
390
390
  }
391
391
  relocatedIntoPackage() {
392
392
  if (this.isRelocated) {
393
- return packageCache.ownerOfFile(this.name);
393
+ return this.packageCache.ownerOfFile(this.name);
394
394
  }
395
395
  }
396
396
  }
@@ -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';\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"]}
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 appRoot: string;\n}\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, appRoot: string): false | Package {\n try {\n let dep = PackageCache.shared('embroider-stage3', appRoot).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, opts.appRoot)) {\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, opts.appRoot);\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, opts.appRoot)) {\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, opts.appRoot);\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 private packageCache: PackageCache;\n\n constructor(public name: string, relocatedFiles: Options['relocatedFiles'], appRoot: string) {\n this.packageCache = PackageCache.shared('embroider-stage3', appRoot);\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 this.packageCache.ownerOfFile(this.originalFile);\n }\n\n @Memoize()\n relocatedIntoPackage(): Package | undefined {\n if (this.isRelocated) {\n return this.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"]}
@@ -10,7 +10,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const wait_for_trees_1 = __importDefault(require("./wait-for-trees"));
13
- const shared_internals_1 = require("@embroider/shared-internals");
14
13
  const typescript_memoize_1 = require("typescript-memoize");
15
14
  // This is a utility class for defining new Stages. It aids in handling the
16
15
  // boilerplate required to split your functionality between the
@@ -26,9 +25,6 @@ class BuildStage {
26
25
  return new wait_for_trees_1.default(this.augment(this.inTrees), this.annotation, async (treePaths) => {
27
26
  if (!this.active) {
28
27
  let { outputPath, packageCache } = await this.prevStage.ready();
29
- if (!packageCache) {
30
- packageCache = new shared_internals_1.PackageCache();
31
- }
32
28
  this.outputPath = outputPath;
33
29
  this.packageCache = packageCache;
34
30
  this.active = await this.instantiate(outputPath, this.prevStage.inputPath, packageCache);
@@ -1 +1 @@
1
- {"version":3,"file":"build-stage.js","sourceRoot":"","sources":["build-stage.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sEAA6D;AAC7D,kEAA2D;AAG3D,2DAA6C;AAE7C,2EAA2E;AAC3E,+DAA+D;AAC/D,sEAAsE;AACtE,MAAqB,UAAU;IAK7B,YACU,SAAgB,EAChB,OAAmB,EACnB,UAAkB,EAClB,WAIiC;QAPjC,cAAS,GAAT,SAAS,CAAO;QAChB,YAAO,GAAP,OAAO,CAAY;QACnB,eAAU,GAAV,UAAU,CAAQ;QAClB,gBAAW,GAAX,WAAW,CAIsB;IACxC,CAAC;IAGJ,IAAI,IAAI;QACN,OAAO,IAAI,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAC,SAAS,EAAC,EAAE;YACrF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBAChE,IAAI,CAAC,YAAY,EAAE;oBACjB,YAAY,GAAG,IAAI,+BAAY,EAAE,CAAC;iBACnC;gBACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;gBACjC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;aAC1F;YACD,OAAQ,SAAiB,CAAC,eAAe,CAAC;YAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC9B,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAW;YAC5B,YAAY,EAAE,IAAI,CAAC,YAAa;SACjC,CAAC;IACJ,CAAC;IAGD,IAAY,UAAU;QACpB,IAAI,OAAiB,CAAC;QACtB,IAAI,OAAO,GAAkB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,OAAQ,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IAEO,OAAO,CAAC,OAAmB;QACjC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAEO,SAAS,CAAC,SAA8C;QAC9D,OAAQ,SAAiB,CAAC,eAAe,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AA5CC;IADC,IAAA,4BAAO,GAAE;sCAgBT;AAeD;IADC,IAAA,4BAAO,GAAE;4CAKT;AAnDH,6BA6DC","sourcesContent":["import WaitForTrees, { OutputPaths } from './wait-for-trees';\nimport { PackageCache } from '@embroider/shared-internals';\nimport Stage from './stage';\nimport { Node } from 'broccoli-node-api';\nimport { Memoize } from 'typescript-memoize';\n\n// This is a utility class for defining new Stages. It aids in handling the\n// boilerplate required to split your functionality between the\n// broccoli-pipeline-construction phase and the actual building phase.\nexport default class BuildStage<NamedTrees> implements Stage {\n private active: BuilderInstance<NamedTrees> | undefined;\n private outputPath: string | undefined;\n private packageCache: PackageCache | undefined;\n\n constructor(\n private prevStage: Stage,\n private inTrees: NamedTrees,\n private annotation: string,\n private instantiate: (\n root: string,\n appSrcDir: string,\n packageCache: PackageCache\n ) => Promise<BuilderInstance<NamedTrees>>\n ) {}\n\n @Memoize()\n get tree(): Node {\n return new WaitForTrees(this.augment(this.inTrees), this.annotation, async treePaths => {\n if (!this.active) {\n let { outputPath, packageCache } = await this.prevStage.ready();\n if (!packageCache) {\n packageCache = new PackageCache();\n }\n this.outputPath = outputPath;\n this.packageCache = packageCache;\n this.active = await this.instantiate(outputPath, this.prevStage.inputPath, packageCache);\n }\n delete (treePaths as any).__prevStageTree;\n await this.active.build(this.deAugment(treePaths));\n this.deferReady.resolve();\n });\n }\n\n get inputPath(): string {\n return this.prevStage.inputPath;\n }\n\n async ready(): Promise<{ outputPath: string; packageCache: PackageCache }> {\n await this.deferReady.promise;\n return {\n outputPath: this.outputPath!,\n packageCache: this.packageCache!,\n };\n }\n\n @Memoize()\n private get deferReady() {\n let resolve: Function;\n let promise: Promise<void> = new Promise(r => (resolve = r));\n return { resolve: resolve!, promise };\n }\n\n private augment(inTrees: NamedTrees): NamedTrees & ExtraTree {\n return Object.assign({ __prevStageTree: this.prevStage.tree }, inTrees);\n }\n\n private deAugment(treePaths: OutputPaths<NamedTrees & ExtraTree>): OutputPaths<NamedTrees> {\n delete (treePaths as any).__prevStageTree;\n return treePaths;\n }\n}\n\ninterface BuilderInstance<NamedTrees> {\n build(inputPaths: OutputPaths<NamedTrees>): Promise<void>;\n}\n\ninterface ExtraTree {\n __prevStageTree: Node;\n}\n"]}
1
+ {"version":3,"file":"build-stage.js","sourceRoot":"","sources":["build-stage.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sEAA6D;AAI7D,2DAA6C;AAE7C,2EAA2E;AAC3E,+DAA+D;AAC/D,sEAAsE;AACtE,MAAqB,UAAU;IAK7B,YACU,SAAgB,EAChB,OAAmB,EACnB,UAAkB,EAClB,WAIiC;QAPjC,cAAS,GAAT,SAAS,CAAO;QAChB,YAAO,GAAP,OAAO,CAAY;QACnB,eAAU,GAAV,UAAU,CAAQ;QAClB,gBAAW,GAAX,WAAW,CAIsB;IACxC,CAAC;IAGJ,IAAI,IAAI;QACN,OAAO,IAAI,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAC,SAAS,EAAC,EAAE;YACrF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBAChE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;gBACjC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;aAC1F;YACD,OAAQ,SAAiB,CAAC,eAAe,CAAC;YAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC9B,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAW;YAC5B,YAAY,EAAE,IAAI,CAAC,YAAa;SACjC,CAAC;IACJ,CAAC;IAGD,IAAY,UAAU;QACpB,IAAI,OAAiB,CAAC;QACtB,IAAI,OAAO,GAAkB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,OAAQ,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IAEO,OAAO,CAAC,OAAmB;QACjC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAEO,SAAS,CAAC,SAA8C;QAC9D,OAAQ,SAAiB,CAAC,eAAe,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAzCC;IADC,IAAA,4BAAO,GAAE;sCAaT;AAeD;IADC,IAAA,4BAAO,GAAE;4CAKT;AAhDH,6BA0DC","sourcesContent":["import WaitForTrees, { OutputPaths } from './wait-for-trees';\nimport { PackageCache } from '@embroider/shared-internals';\nimport Stage from './stage';\nimport { Node } from 'broccoli-node-api';\nimport { Memoize } from 'typescript-memoize';\n\n// This is a utility class for defining new Stages. It aids in handling the\n// boilerplate required to split your functionality between the\n// broccoli-pipeline-construction phase and the actual building phase.\nexport default class BuildStage<NamedTrees> implements Stage {\n private active: BuilderInstance<NamedTrees> | undefined;\n private outputPath: string | undefined;\n private packageCache: PackageCache | undefined;\n\n constructor(\n private prevStage: Stage,\n private inTrees: NamedTrees,\n private annotation: string,\n private instantiate: (\n root: string,\n appSrcDir: string,\n packageCache: PackageCache\n ) => Promise<BuilderInstance<NamedTrees>>\n ) {}\n\n @Memoize()\n get tree(): Node {\n return new WaitForTrees(this.augment(this.inTrees), this.annotation, async treePaths => {\n if (!this.active) {\n let { outputPath, packageCache } = await this.prevStage.ready();\n this.outputPath = outputPath;\n this.packageCache = packageCache;\n this.active = await this.instantiate(outputPath, this.prevStage.inputPath, packageCache);\n }\n delete (treePaths as any).__prevStageTree;\n await this.active.build(this.deAugment(treePaths));\n this.deferReady.resolve();\n });\n }\n\n get inputPath(): string {\n return this.prevStage.inputPath;\n }\n\n async ready(): Promise<{ outputPath: string; packageCache: PackageCache }> {\n await this.deferReady.promise;\n return {\n outputPath: this.outputPath!,\n packageCache: this.packageCache!,\n };\n }\n\n @Memoize()\n private get deferReady() {\n let resolve: Function;\n let promise: Promise<void> = new Promise(r => (resolve = r));\n return { resolve: resolve!, promise };\n }\n\n private augment(inTrees: NamedTrees): NamedTrees & ExtraTree {\n return Object.assign({ __prevStageTree: this.prevStage.tree }, inTrees);\n }\n\n private deAugment(treePaths: OutputPaths<NamedTrees & ExtraTree>): OutputPaths<NamedTrees> {\n delete (treePaths as any).__prevStageTree;\n return treePaths;\n }\n}\n\ninterface BuilderInstance<NamedTrees> {\n build(inputPaths: OutputPaths<NamedTrees>): Promise<void>;\n}\n\ninterface ExtraTree {\n __prevStageTree: Node;\n}\n"]}
package/src/stage.d.ts CHANGED
@@ -5,6 +5,6 @@ export default interface Stage {
5
5
  readonly inputPath: string;
6
6
  ready(): Promise<{
7
7
  readonly outputPath: string;
8
- readonly packageCache?: PackageCache;
8
+ readonly packageCache: PackageCache;
9
9
  }>;
10
10
  }
package/src/stage.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"stage.js","sourceRoot":"","sources":["stage.ts"],"names":[],"mappings":"","sourcesContent":["import type { Node } from 'broccoli-node-api';\nimport { PackageCache } from '@embroider/shared-internals';\n\n// A build Stage is _kinda_ like a Broccoli transform, and it interoperates with\n// Broccoli, but it takes a different approach to how stages combine.\n//\n// Conceptually, normal broccoli transforms pass trees by value (meaning they\n// always get copied) whereas Stages pass trees by reference (meaning they can\n// be borrowed and mutated).\n//\n// This would be potentially bad if abused, but we are only using them for\n// precisely three well-defined stages, where each has clear responsibilities.\n//\nexport default interface Stage {\n // this is the broccoli tree that must get built for the Stage to be ready.\n // But! This tree's output path is _not_ necessarily where the Stage's output\n // will be, for that you must wait for `outputPath`.\n readonly tree: Node;\n\n // this is where our stage was reading from. Subsequent stages are also\n // allowed to read from here in addition to reading from our `outputPath`.\n readonly inputPath: string;\n\n // this promise is only guaranteed to resolve if you cause `tree` to be\n // included in a broccoli build.\n ready(): Promise<{\n // This is the actual directory in which the output will be. It's guaranteed\n // to not change once you get it.\n readonly outputPath: string;\n\n // This optionally allows the Stage to share a PackageCache with the next\n // Stage, as an optimization. If the Stage uses a PackageCache, it _should_\n // share it here.\n readonly packageCache?: PackageCache;\n }>;\n}\n"]}
1
+ {"version":3,"file":"stage.js","sourceRoot":"","sources":["stage.ts"],"names":[],"mappings":"","sourcesContent":["import type { Node } from 'broccoli-node-api';\nimport { PackageCache } from '@embroider/shared-internals';\n\n// A build Stage is _kinda_ like a Broccoli transform, and it interoperates with\n// Broccoli, but it takes a different approach to how stages combine.\n//\n// Conceptually, normal broccoli transforms pass trees by value (meaning they\n// always get copied) whereas Stages pass trees by reference (meaning they can\n// be borrowed and mutated).\n//\n// This would be potentially bad if abused, but we are only using them for\n// precisely three well-defined stages, where each has clear responsibilities.\n//\nexport default interface Stage {\n // this is the broccoli tree that must get built for the Stage to be ready.\n // But! This tree's output path is _not_ necessarily where the Stage's output\n // will be, for that you must wait for `outputPath`.\n readonly tree: Node;\n\n // this is where our stage was reading from. Subsequent stages are also\n // allowed to read from here in addition to reading from our `outputPath`.\n readonly inputPath: string;\n\n // this promise is only guaranteed to resolve if you cause `tree` to be\n // included in a broccoli build.\n ready(): Promise<{\n // This is the actual directory in which the output will be. It's guaranteed\n // to not change once you get it.\n readonly outputPath: string;\n\n // Stages must propagate their PackageCache forward to the next stage so we\n // don't repeat a lot of resolving work.\n readonly packageCache: PackageCache;\n }>;\n}\n"]}