@embroider/webpack 4.0.6-unstable.a691d39 → 4.0.6-unstable.aa52b09

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/webpack",
3
- "version": "4.0.6-unstable.a691d39",
3
+ "version": "4.0.6-unstable.aa52b09",
4
4
  "private": false,
5
5
  "description": "Builds EmberJS apps with Webpack",
6
6
  "repository": {
@@ -36,9 +36,9 @@
36
36
  "supports-color": "^8.1.0",
37
37
  "terser": "^5.7.0",
38
38
  "thread-loader": "^3.0.4",
39
- "@embroider/babel-loader-9": "3.1.2-unstable.a691d39",
40
- "@embroider/shared-internals": "2.6.4-unstable.a691d39",
41
- "@embroider/hbs-loader": "3.0.4-unstable.a691d39"
39
+ "@embroider/babel-loader-9": "3.1.2-unstable.aa52b09",
40
+ "@embroider/shared-internals": "2.6.4-unstable.aa52b09",
41
+ "@embroider/hbs-loader": "3.0.4-unstable.aa52b09"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/csso": "^3.5.1",
@@ -50,11 +50,11 @@
50
50
  "@types/semver": "^7.3.6",
51
51
  "typescript": "^5.4.5",
52
52
  "webpack": "^5.38.1",
53
- "@embroider/core": "^3.4.16-unstable.a691d39"
53
+ "@embroider/core": "^3.4.16-unstable.aa52b09"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "webpack": "^5.0.0",
57
- "@embroider/core": "^3.4.16-unstable.a691d39"
57
+ "@embroider/core": "^3.4.16-unstable.aa52b09"
58
58
  },
59
59
  "engines": {
60
60
  "node": "12.* || 14.* || >= 16"
@@ -9,29 +9,6 @@
9
9
  multiple HTML entrypoints and apply correct HTML semantics (for example,
10
10
  getting script vs module context correct).
11
11
  */
12
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- var desc = Object.getOwnPropertyDescriptor(m, k);
15
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
- desc = { enumerable: true, get: function() { return m[k]; } };
17
- }
18
- Object.defineProperty(o, k2, desc);
19
- }) : (function(o, m, k, k2) {
20
- if (k2 === undefined) k2 = k;
21
- o[k2] = m[k];
22
- }));
23
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
- Object.defineProperty(o, "default", { enumerable: true, value: v });
25
- }) : function(o, v) {
26
- o["default"] = v;
27
- });
28
- var __importStar = (this && this.__importStar) || function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
12
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
13
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
14
  };
@@ -55,10 +32,15 @@ const satisfies_1 = __importDefault(require("semver/functions/satisfies"));
55
32
  const supports_color_1 = __importDefault(require("supports-color"));
56
33
  const webpack_resolver_plugin_1 = require("./webpack-resolver-plugin");
57
34
  const debug = (0, debug_1.default)('embroider:debug');
35
+ // this function is never called. It exists to workaround typescript being
36
+ // obtuse. https://github.com/microsoft/TypeScript/pull/53426
37
+ async function loadTerser() {
38
+ let Terser = await import('terser');
39
+ return Terser.minify;
40
+ }
58
41
  // AppInfos are equal if they result in the same webpack config.
59
42
  function equalAppInfo(left, right) {
60
- return ((0, isEqual_1.default)(left.babel, right.babel) &&
61
- left.entrypoints.length === right.entrypoints.length &&
43
+ return (left.entrypoints.length === right.entrypoints.length &&
62
44
  left.entrypoints.every((e, index) => (0, isEqual_1.default)(e.modules, right.entrypoints[index].modules)));
63
45
  }
64
46
  function createBarrier() {
@@ -142,7 +124,6 @@ const Webpack = (_a = class Webpack {
142
124
  examineApp() {
143
125
  let meta = (0, core_1.getAppMeta)(this.pathToVanillaApp);
144
126
  let rootURL = meta['ember-addon']['root-url'];
145
- let babel = meta['ember-addon']['babel'];
146
127
  let entrypoints = [];
147
128
  let otherAssets = [];
148
129
  let publicAssetURL = this.publicAssetURL || rootURL;
@@ -155,10 +136,10 @@ const Webpack = (_a = class Webpack {
155
136
  }
156
137
  }
157
138
  let resolverConfig = (0, fs_extra_1.readJSONSync)((0, path_1.join)((0, shared_internals_1.locateEmbroiderWorkingDir)(this.appRoot), 'resolver.json'));
158
- return { entrypoints, otherAssets, babel, rootURL, resolverConfig, publicAssetURL, packageName: meta.name };
139
+ return { entrypoints, otherAssets, rootURL, resolverConfig, publicAssetURL, packageName: meta.name };
159
140
  }
160
141
  configureWebpack(appInfo, variant, variantIndex) {
161
- const { entrypoints, babel, publicAssetURL, packageName, resolverConfig } = appInfo;
142
+ const { entrypoints, publicAssetURL, packageName, resolverConfig } = appInfo;
162
143
  let entry = {};
163
144
  for (let entrypoint of entrypoints) {
164
145
  for (let moduleName of entrypoint.modules) {
@@ -166,7 +147,7 @@ const Webpack = (_a = class Webpack {
166
147
  }
167
148
  }
168
149
  let { plugins: stylePlugins, loaders: styleLoaders } = this.setupStyleConfig(variant);
169
- let babelLoaderOptions = makeBabelLoaderOptions(babel.majorVersion, variant, (0, path_1.join)(this.pathToVanillaApp, babel.filename), this.extraBabelLoaderOptions);
150
+ let babelLoaderOptions = makeBabelLoaderOptions(variant, (0, path_1.join)(this.appRoot, 'babel.config.cjs'), this.extraBabelLoaderOptions);
170
151
  let babelLoaderPrefix = `babel-loader-9?${JSON.stringify(babelLoaderOptions.options)}!`;
171
152
  return {
172
153
  mode: variant.optimizeForProduction ? 'production' : 'development',
@@ -191,7 +172,7 @@ const Webpack = (_a = class Webpack {
191
172
  {
192
173
  test: /\.hbs$/,
193
174
  use: nonNullArray([
194
- maybeThreadLoader(babel.isParallelSafe, this.extraThreadLoaderOptions),
175
+ maybeThreadLoader(this.extraThreadLoaderOptions),
195
176
  babelLoaderOptions,
196
177
  {
197
178
  loader: require.resolve('@embroider/hbs-loader'),
@@ -208,11 +189,9 @@ const Webpack = (_a = class Webpack {
208
189
  ]),
209
190
  },
210
191
  {
211
- // eslint-disable-next-line @typescript-eslint/no-require-imports
212
- test: require((0, path_1.join)(this.pathToVanillaApp, babel.fileFilter)),
213
192
  use: nonNullArray([
214
- maybeThreadLoader(babel.isParallelSafe, this.extraThreadLoaderOptions),
215
- makeBabelLoaderOptions(babel.majorVersion, variant, (0, path_1.join)(this.pathToVanillaApp, babel.filename), this.extraBabelLoaderOptions),
193
+ maybeThreadLoader(this.extraThreadLoaderOptions),
194
+ makeBabelLoaderOptions(variant, (0, path_1.join)(this.appRoot, 'babel.config.cjs'), this.extraBabelLoaderOptions),
216
195
  ]),
217
196
  },
218
197
  {
@@ -275,7 +254,7 @@ const Webpack = (_a = class Webpack {
275
254
  }
276
255
  // loading these lazily here so they never load in non-production builds.
277
256
  // The node cache will ensures we only load them once.
278
- const [Terser, srcURL] = await Promise.all([Promise.resolve().then(() => __importStar(require('terser'))), Promise.resolve().then(() => __importStar(require('source-map-url')))]);
257
+ const [Terser, srcURL] = await Promise.all([import('terser'), import('source-map-url')]);
279
258
  let inCode = (0, fs_extra_1.readFileSync)((0, path_1.join)(this.pathToVanillaApp, script), 'utf8');
280
259
  let terserOpts = {};
281
260
  let fileRelativeSourceMapURL;
@@ -295,7 +274,7 @@ const Webpack = (_a = class Webpack {
295
274
  terserOpts.sourceMap = { content, url: fileRelativeSourceMapURL };
296
275
  }
297
276
  }
298
- let { code: outCode, map: outMap } = await Terser.default.minify(inCode, terserOpts);
277
+ let { code: outCode, map: outMap } = await Terser.minify(inCode, terserOpts);
299
278
  let finalFilename = this.getFingerprintedFilename(script, outCode);
300
279
  (0, fs_extra_1.outputFileSync)((0, path_1.join)(this.outputPath, finalFilename), outCode);
301
280
  written.add(script);
@@ -311,7 +290,7 @@ const Webpack = (_a = class Webpack {
311
290
  written.add(style);
312
291
  return style;
313
292
  }
314
- const csso = await Promise.resolve().then(() => __importStar(require('csso')));
293
+ const csso = await import('csso');
315
294
  const cssContent = (0, fs_extra_1.readFileSync)((0, path_1.join)(this.pathToVanillaApp, style), 'utf8');
316
295
  const minifiedCss = csso.minify(cssContent).css;
317
296
  let finalFilename = this.getFingerprintedFilename(style, minifiedCss);
@@ -592,8 +571,8 @@ function warmUp(extraOptions) {
592
571
  require.resolve('@embroider/babel-loader-9'),
593
572
  ]);
594
573
  }
595
- function maybeThreadLoader(isParallelSafe, extraOptions) {
596
- if (!canUseThreadLoader(extraOptions) || !isParallelSafe) {
574
+ function maybeThreadLoader(extraOptions) {
575
+ if (!canUseThreadLoader(extraOptions)) {
597
576
  return null;
598
577
  }
599
578
  return {
@@ -614,7 +593,7 @@ function isCSS(filename) {
614
593
  function nonNullArray(array) {
615
594
  return array.filter(Boolean);
616
595
  }
617
- function makeBabelLoaderOptions(_majorVersion, variant, appBabelConfigPath, extraOptions) {
596
+ function makeBabelLoaderOptions(variant, appBabelConfigPath, extraOptions) {
618
597
  const cacheDirectory = (0, core_1.getPackagerCacheDir)('webpack-babel-loader');
619
598
  const options = {
620
599
  variant,
@@ -1 +1 @@
1
- {"version":3,"file":"ember-webpack.js","sourceRoot":"","sources":["ember-webpack.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n Most of the work this module does is putting an HTML-oriented facade around\n Webpack. That is, we want both the input and output to be primarily HTML files\n with proper spec semantics, and we use webpack to optimize the assets referred\n to by those files.\n\n While there are webpack plugins for handling HTML, none of them handle\n multiple HTML entrypoints and apply correct HTML semantics (for example,\n getting script vs module context correct).\n*/\n\nimport type { AppMeta, BundleSummary, Packager, PackagerConstructor, Variant, ResolverOptions } from '@embroider/core';\nimport { HTMLEntrypoint, getAppMeta, getPackagerCacheDir, getOrCreate } from '@embroider/core';\nimport { locateEmbroiderWorkingDir, RewrittenPackageCache, tmpdir } from '@embroider/shared-internals';\nimport type { Configuration, RuleSetUseItem, WebpackPluginInstance } from 'webpack';\nimport webpack from 'webpack';\nimport type { Stats } from 'fs-extra';\nimport { readFileSync, outputFileSync, copySync, statSync, readJSONSync } from 'fs-extra';\nimport { join, dirname, relative, sep } from 'path';\nimport isEqual from 'lodash/isEqual';\nimport mergeWith from 'lodash/mergeWith';\nimport flatMap from 'lodash/flatMap';\nimport MiniCssExtractPlugin from 'mini-css-extract-plugin';\nimport makeDebug from 'debug';\nimport { format } from 'util';\nimport { warmup as threadLoaderWarmup } from 'thread-loader';\nimport type { Options, BabelLoaderOptions } from './options';\nimport crypto from 'crypto';\nimport semverSatisfies from 'semver/functions/satisfies';\nimport supportsColor from 'supports-color';\nimport type { Options as HbsLoaderOptions } from '@embroider/hbs-loader';\nimport type { Options as EmbroiderPluginOptions } from './webpack-resolver-plugin';\nimport { EmbroiderPlugin } from './webpack-resolver-plugin';\n\nconst debug = makeDebug('embroider:debug');\n\n// This is a type-only import, so it gets compiled away. At runtime, we load\n// terser lazily so it's only loaded for production builds that use it. Don't\n// add any non-type-only imports here.\nimport type { MinifyOptions } from 'terser';\n\ninterface AppInfo {\n entrypoints: HTMLEntrypoint[];\n otherAssets: string[];\n babel: AppMeta['babel'];\n rootURL: AppMeta['root-url'];\n publicAssetURL: string;\n resolverConfig: ResolverOptions;\n packageName: string;\n}\n\n// AppInfos are equal if they result in the same webpack config.\nfunction equalAppInfo(left: AppInfo, right: AppInfo): boolean {\n return (\n isEqual(left.babel, right.babel) &&\n left.entrypoints.length === right.entrypoints.length &&\n left.entrypoints.every((e, index) => isEqual(e.modules, right.entrypoints[index].modules))\n );\n}\n\ntype BeginFn = (total: number) => void;\ntype IncrementFn = () => Promise<void>;\n\nfunction createBarrier(): [BeginFn, IncrementFn] {\n const barriers: Array<[() => void, (e: unknown) => void]> = [];\n let done = true;\n let limit = 0;\n return [begin, increment];\n\n function begin(newLimit: number) {\n if (!done) flush(new Error('begin called before limit reached'));\n done = false;\n limit = newLimit;\n }\n\n async function increment() {\n if (done) {\n throw new Error('increment after limit reach');\n }\n const promise = new Promise<void>((resolve, reject) => {\n barriers.push([resolve, reject]);\n });\n if (barriers.length === limit) {\n flush();\n }\n await promise;\n }\n\n function flush(err?: Error) {\n for (const [resolve, reject] of barriers) {\n if (err) reject(err);\n else resolve();\n }\n barriers.length = 0;\n done = true;\n }\n}\n\n// we want to ensure that not only does our instance conform to\n// PackagerInstance, but our constructor conforms to Packager. So instead of\n// just exporting our class directly, we export a const constructor of the\n// correct type.\nconst Webpack: PackagerConstructor<Options> = class Webpack implements Packager {\n static annotation = '@embroider/webpack';\n\n private pathToVanillaApp: string;\n private extraConfig: Configuration | undefined;\n private passthroughCache: Map<string, Stats> = new Map();\n private publicAssetURL: string | undefined;\n private extraThreadLoaderOptions: object | false | undefined;\n private extraBabelLoaderOptions: BabelLoaderOptions | undefined;\n private extraCssLoaderOptions: object | undefined;\n private extraStyleLoaderOptions: object | undefined;\n private _bundleSummary: BundleSummary | undefined;\n private beginBarrier: BeginFn;\n private incrementBarrier: IncrementFn;\n\n constructor(\n private appRoot: string,\n private outputPath: string,\n private variants: Variant[],\n private consoleWrite: (msg: string) => void,\n options?: Options\n ) {\n if (!semverSatisfies(webpack.version, '^5.0.0')) {\n throw new Error(`@embroider/webpack requires webpack@^5.0.0, but found version ${webpack.version}`);\n }\n\n let packageCache = RewrittenPackageCache.shared('embroider', appRoot);\n this.pathToVanillaApp = packageCache.maybeMoved(packageCache.get(appRoot)).root;\n this.extraConfig = options?.webpackConfig;\n this.publicAssetURL = options?.publicAssetURL;\n this.extraThreadLoaderOptions = options?.threadLoaderOptions;\n this.extraBabelLoaderOptions = options?.babelLoaderOptions;\n this.extraCssLoaderOptions = options?.cssLoaderOptions;\n this.extraStyleLoaderOptions = options?.styleLoaderOptions;\n [this.beginBarrier, this.incrementBarrier] = createBarrier();\n warmUp(this.extraThreadLoaderOptions);\n }\n\n get bundleSummary(): BundleSummary {\n let bundleSummary = this._bundleSummary;\n if (bundleSummary === undefined) {\n this._bundleSummary = bundleSummary = {\n entrypoints: new Map(),\n lazyBundles: new Map(),\n variants: this.variants,\n };\n }\n return bundleSummary;\n }\n\n async build(): Promise<void> {\n this._bundleSummary = undefined;\n this.beginBarrier(this.variants.length);\n let appInfo = this.examineApp();\n let webpack = this.getWebpack(appInfo);\n await this.runWebpack(webpack);\n }\n\n private examineApp(): AppInfo {\n let meta = getAppMeta(this.pathToVanillaApp);\n let rootURL = meta['ember-addon']['root-url'];\n let babel = meta['ember-addon']['babel'];\n let entrypoints = [];\n let otherAssets = [];\n let publicAssetURL = this.publicAssetURL || rootURL;\n\n for (let relativePath of meta['ember-addon'].assets) {\n if (/\\.html/i.test(relativePath)) {\n entrypoints.push(new HTMLEntrypoint(this.pathToVanillaApp, rootURL, publicAssetURL, relativePath));\n } else {\n otherAssets.push(relativePath);\n }\n }\n\n let resolverConfig: EmbroiderPluginOptions = readJSONSync(\n join(locateEmbroiderWorkingDir(this.appRoot), 'resolver.json')\n );\n\n return { entrypoints, otherAssets, babel, rootURL, resolverConfig, publicAssetURL, packageName: meta.name };\n }\n\n private configureWebpack(appInfo: AppInfo, variant: Variant, variantIndex: number): Configuration {\n const { entrypoints, babel, publicAssetURL, packageName, resolverConfig } = appInfo;\n\n let entry: { [name: string]: string } = {};\n for (let entrypoint of entrypoints) {\n for (let moduleName of entrypoint.modules) {\n entry[moduleName] = './' + moduleName;\n }\n }\n\n let { plugins: stylePlugins, loaders: styleLoaders } = this.setupStyleConfig(variant);\n\n let babelLoaderOptions = makeBabelLoaderOptions(\n babel.majorVersion,\n variant,\n join(this.pathToVanillaApp, babel.filename),\n this.extraBabelLoaderOptions\n );\n\n let babelLoaderPrefix = `babel-loader-9?${JSON.stringify(babelLoaderOptions.options)}!`;\n\n return {\n mode: variant.optimizeForProduction ? 'production' : 'development',\n context: this.pathToVanillaApp,\n entry,\n performance: {\n hints: false,\n },\n plugins: [\n ...stylePlugins,\n new EmbroiderPlugin(resolverConfig, babelLoaderPrefix),\n compiler => {\n compiler.hooks.done.tapPromise('EmbroiderPlugin', async stats => {\n this.summarizeStats(stats, variant, variantIndex);\n await this.writeFiles(this.bundleSummary, this.lastAppInfo!, variantIndex);\n });\n },\n ],\n node: false,\n module: {\n rules: [\n {\n test: /\\.hbs$/,\n use: nonNullArray([\n maybeThreadLoader(babel.isParallelSafe, this.extraThreadLoaderOptions),\n babelLoaderOptions,\n {\n loader: require.resolve('@embroider/hbs-loader'),\n options: (() => {\n let options: HbsLoaderOptions = {\n compatModuleNaming: {\n rootDir: this.pathToVanillaApp,\n modulePrefix: packageName,\n },\n };\n return options;\n })(),\n },\n ]),\n },\n {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n test: require(join(this.pathToVanillaApp, babel.fileFilter)),\n use: nonNullArray([\n maybeThreadLoader(babel.isParallelSafe, this.extraThreadLoaderOptions),\n makeBabelLoaderOptions(\n babel.majorVersion,\n variant,\n join(this.pathToVanillaApp, babel.filename),\n this.extraBabelLoaderOptions\n ),\n ]),\n },\n {\n test: isCSS,\n use: styleLoaders,\n },\n ],\n },\n output: {\n path: join(this.outputPath),\n filename: `assets/chunk.[chunkhash].js`,\n chunkFilename: `assets/chunk.[chunkhash].js`,\n publicPath: publicAssetURL,\n },\n optimization: {\n splitChunks: {\n chunks: 'all',\n },\n },\n resolve: {\n extensions: resolverConfig.resolvableExtensions,\n },\n resolveLoader: {\n alias: {\n // these loaders are our dependencies, not the app's dependencies. I'm\n // not overriding the default loader resolution rules in case the app also\n // wants to control those.\n 'thread-loader': require.resolve('thread-loader'),\n 'babel-loader-9': require.resolve('@embroider/babel-loader-9'),\n 'css-loader': require.resolve('css-loader'),\n 'style-loader': require.resolve('style-loader'),\n },\n },\n experiments: {\n // this is needed because fasboot-only modules need to use await import()\n topLevelAwait: true,\n },\n };\n }\n\n private lastAppInfo: AppInfo | undefined;\n private lastWebpack: webpack.MultiCompiler | undefined;\n\n private getWebpack(appInfo: AppInfo) {\n if (this.lastWebpack && this.lastAppInfo && equalAppInfo(appInfo, this.lastAppInfo)) {\n debug(`reusing webpack config`);\n // the appInfos result in equal webpack configs so we don't need to\n // reconfigure webpack. But they may contain other changes (like HTML\n // content changes that don't alter the webpack config) so we still want\n // lastAppInfo to update so that the latest one will be seen in the\n // webpack post-build.\n this.lastAppInfo = appInfo;\n return this.lastWebpack;\n }\n debug(`configuring webpack`);\n let config = this.variants.map((variant, variantIndex) =>\n mergeWith({}, this.configureWebpack(appInfo, variant, variantIndex), this.extraConfig, appendArrays)\n );\n this.lastAppInfo = appInfo;\n return (this.lastWebpack = webpack(config));\n }\n\n private async writeScript(script: string, written: Set<string>, variant: Variant) {\n if (!variant.optimizeForProduction) {\n this.copyThrough(script);\n return script;\n }\n\n // loading these lazily here so they never load in non-production builds.\n // The node cache will ensures we only load them once.\n const [Terser, srcURL] = await Promise.all([import('terser'), import('source-map-url')]);\n\n let inCode = readFileSync(join(this.pathToVanillaApp, script), 'utf8');\n let terserOpts: MinifyOptions = {};\n let fileRelativeSourceMapURL;\n let appRelativeSourceMapURL;\n if (srcURL.default.existsIn(inCode)) {\n fileRelativeSourceMapURL = srcURL.default.getFrom(inCode)!;\n appRelativeSourceMapURL = join(dirname(script), fileRelativeSourceMapURL);\n let content;\n try {\n content = readJSONSync(join(this.pathToVanillaApp, appRelativeSourceMapURL));\n } catch (err) {\n // the script refers to a sourcemap that doesn't exist, so we just leave\n // the map out.\n }\n if (content) {\n terserOpts.sourceMap = { content, url: fileRelativeSourceMapURL };\n }\n }\n let { code: outCode, map: outMap } = await Terser.default.minify(inCode, terserOpts);\n let finalFilename = this.getFingerprintedFilename(script, outCode!);\n outputFileSync(join(this.outputPath, finalFilename), outCode!);\n written.add(script);\n if (appRelativeSourceMapURL && outMap) {\n outputFileSync(join(this.outputPath, appRelativeSourceMapURL), outMap);\n written.add(appRelativeSourceMapURL);\n }\n return finalFilename;\n }\n\n private async writeStyle(style: string, written: Set<string>, variant: Variant) {\n if (!variant.optimizeForProduction) {\n this.copyThrough(style);\n written.add(style);\n return style;\n }\n\n const csso = await import('csso');\n const cssContent = readFileSync(join(this.pathToVanillaApp, style), 'utf8');\n const minifiedCss = csso.minify(cssContent).css;\n\n let finalFilename = this.getFingerprintedFilename(style, minifiedCss);\n outputFileSync(join(this.outputPath, finalFilename), minifiedCss);\n written.add(style);\n return finalFilename;\n }\n\n private async provideErrorContext(message: string, messageParams: any[], fn: () => Promise<void>) {\n try {\n return await fn();\n } catch (err) {\n let context = format(message, ...messageParams);\n err.message = context + ': ' + err.message;\n throw err;\n }\n }\n\n private async writeFiles(stats: BundleSummary, { entrypoints, otherAssets }: AppInfo, variantIndex: number) {\n // we're doing this ourselves because I haven't seen a webpack 4 HTML plugin\n // that handles multiple HTML entrypoints correctly.\n\n let written: Set<string> = new Set();\n // scripts (as opposed to modules) and stylesheets (as opposed to CSS\n // modules that are imported from JS modules) get passed through without\n // going through webpack.\n for (let entrypoint of entrypoints) {\n await this.provideErrorContext('needed by %s', [entrypoint.filename], async () => {\n for (let script of entrypoint.scripts) {\n if (!stats.entrypoints.has(script)) {\n const mapping = [] as string[];\n try {\n // zero here means we always attribute passthrough scripts to the\n // first build variant\n stats.entrypoints.set(script, new Map([[0, mapping]]));\n mapping.push(await this.writeScript(script, written, this.variants[0]));\n } catch (err) {\n if (err.code === 'ENOENT' && err.path === join(this.pathToVanillaApp, script)) {\n this.consoleWrite(\n `warning: in ${entrypoint.filename} <script src=\"${script\n .split(sep)\n .join(\n '/'\n )}\"> does not exist on disk. If this is intentional, use a data-embroider-ignore attribute.`\n );\n } else {\n throw err;\n }\n }\n }\n }\n for (let style of entrypoint.styles) {\n if (!stats.entrypoints.has(style)) {\n const mapping = [] as string[];\n try {\n // zero here means we always attribute passthrough styles to the\n // first build variant\n stats.entrypoints.set(style, new Map([[0, mapping]]));\n mapping.push(await this.writeStyle(style, written, this.variants[0]));\n } catch (err) {\n if (err.code === 'ENOENT' && err.path === join(this.pathToVanillaApp, style)) {\n this.consoleWrite(\n `warning: in ${entrypoint.filename} <link rel=\"stylesheet\" href=\"${style\n .split(sep)\n .join(\n '/'\n )}\"> does not exist on disk. If this is intentional, use a data-embroider-ignore attribute.`\n );\n } else {\n throw err;\n }\n }\n }\n }\n });\n }\n // we need to wait for both compilers before writing html entrypoint\n await this.incrementBarrier();\n // only the first variant should write it.\n if (variantIndex === 0) {\n for (let entrypoint of entrypoints) {\n this.writeIfChanged(join(this.outputPath, entrypoint.filename), entrypoint.render(stats));\n written.add(entrypoint.filename);\n }\n }\n\n for (let relativePath of otherAssets) {\n if (!written.has(relativePath)) {\n written.add(relativePath);\n await this.provideErrorContext(`while copying app's assets`, [], async () => {\n this.copyThrough(relativePath);\n });\n }\n }\n }\n\n private lastContents = new Map<string, string>();\n\n // The point of this caching isn't really performance (we generate the\n // contents either way, and the actual write is unlikely to be expensive).\n // It's helping ember-cli's traditional livereload system to avoid triggering\n // a full page reload when that wasn't really necessary.\n private writeIfChanged(filename: string, content: string) {\n if (this.lastContents.get(filename) !== content) {\n outputFileSync(filename, content, 'utf8');\n this.lastContents.set(filename, content);\n }\n }\n\n private copyThrough(relativePath: string) {\n let sourcePath = join(this.pathToVanillaApp, relativePath);\n let newStats = statSync(sourcePath);\n let oldStats = this.passthroughCache.get(sourcePath);\n if (!oldStats || oldStats.mtimeMs !== newStats.mtimeMs || oldStats.size !== newStats.size) {\n debug(`emitting ${relativePath}`);\n copySync(sourcePath, join(this.outputPath, relativePath));\n this.passthroughCache.set(sourcePath, newStats);\n }\n }\n\n private getFingerprintedFilename(filename: string, content: string): string {\n let md5 = crypto.createHash('md5');\n md5.update(content);\n let hash = md5.digest('hex');\n\n let fileParts = filename.split('.');\n fileParts.splice(fileParts.length - 1, 0, hash);\n return fileParts.join('.');\n }\n\n private summarizeStats(stats: webpack.Stats, variant: Variant, variantIndex: number): void {\n let output = this.bundleSummary;\n let { entrypoints, chunks } = stats.toJson({\n all: false,\n entrypoints: true,\n chunks: true,\n });\n\n // webpack's types are written rather loosely, implying that these two\n // properties may not be present. They really always are, as far as I can\n // tell, but we need to check here anyway to satisfy the type checker.\n if (!entrypoints) {\n throw new Error(`unexpected webpack output: no entrypoints`);\n }\n if (!chunks) {\n throw new Error(`unexpected webpack output: no chunks`);\n }\n\n for (let id of Object.keys(entrypoints)) {\n let { assets: entrypointAssets } = entrypoints[id];\n if (!entrypointAssets) {\n throw new Error(`unexpected webpack output: no entrypoint.assets`);\n }\n\n getOrCreate(output.entrypoints, id, () => new Map()).set(\n variantIndex,\n entrypointAssets.map(asset => asset.name)\n );\n if (variant.runtime !== 'browser') {\n // in the browser we don't need to worry about lazy assets (they will be\n // handled automatically by webpack as needed), but in any other runtime\n // we need the ability to preload them\n output.lazyBundles.set(\n id,\n flatMap(\n chunks.filter(chunk => chunk.runtime?.includes(id)),\n chunk => chunk.files\n ).filter(file => !entrypointAssets?.find(a => a.name === file)) as string[]\n );\n }\n }\n }\n\n private runWebpack(webpack: webpack.MultiCompiler): Promise<webpack.MultiStats> {\n return new Promise((resolve, reject) => {\n webpack.run((err, stats) => {\n try {\n if (err) {\n if (stats) {\n this.consoleWrite(stats.toString());\n }\n throw err;\n }\n if (!stats) {\n // this doesn't really happen, but webpack's types imply that it\n // could, so we just satisfy typescript here\n throw new Error('bug: no stats and no err');\n }\n if (stats.hasErrors()) {\n // write all the stats output to the console\n this.consoleWrite(\n stats.toString({\n colors: Boolean(supportsColor.stdout),\n })\n );\n\n // the typing for MultiCompiler are all foobared.\n throw this.findBestError(flatMap((stats as any).stats, s => s.compilation.errors));\n }\n if (stats.hasWarnings() || process.env.VANILLA_VERBOSE) {\n this.consoleWrite(\n stats.toString({\n colors: Boolean(supportsColor.stdout),\n })\n );\n }\n resolve(stats);\n } catch (e) {\n reject(e);\n }\n });\n });\n }\n\n private setupStyleConfig(variant: Variant): {\n loaders: RuleSetUseItem[];\n plugins: WebpackPluginInstance[];\n } {\n let cssLoader = {\n loader: 'css-loader',\n options: {\n url: true,\n import: true,\n modules: 'global',\n ...this.extraCssLoaderOptions,\n },\n };\n\n if (!variant.optimizeForProduction && variant.runtime === 'browser') {\n // in development builds that only need to work in the browser (not\n // fastboot), we can use style-loader because it's fast\n return {\n loaders: [\n { loader: 'style-loader', options: { injectType: 'styleTag', ...this.extraStyleLoaderOptions } },\n cssLoader,\n ],\n plugins: [],\n };\n } else {\n // in any other build, we separate the CSS into its own bundles\n return {\n loaders: [MiniCssExtractPlugin.loader, cssLoader],\n plugins: [\n new MiniCssExtractPlugin({\n filename: `assets/chunk.[chunkhash].css`,\n chunkFilename: `assets/chunk.[chunkhash].css`,\n // in the browser, MiniCssExtractPlugin can manage it's own runtime\n // lazy loading of stylesheets.\n //\n // but in fastboot, we need to disable that in favor of doing our\n // own insertion of `<link>` tags in the HTML\n runtime: variant.runtime === 'browser',\n }),\n ],\n };\n }\n }\n\n private findBestError(errors: any[]) {\n let error = errors[0];\n let file;\n if (error.module?.userRequest) {\n file = relative(this.pathToVanillaApp, error.module.userRequest);\n }\n\n if (!error.file) {\n error.file = file || (error.loc ? error.loc.file : null) || (error.location ? error.location.file : null);\n }\n if (error.line == null) {\n error.line = (error.loc ? error.loc.line : null) || (error.location ? error.location.line : null);\n }\n if (typeof error.message === 'string') {\n if (error.module?.context) {\n error.message = error.message.replace(error.module.context, error.module.userRequest);\n }\n\n // the tmpdir on OSX is horribly long and makes error messages hard to\n // read. This is doing the same as String.prototype.replaceAll, which node\n // doesn't have yet.\n error.message = error.message.split(tmpdir).join('$TMPDIR');\n }\n return error;\n }\n};\n\nconst threadLoaderOptions = {\n workers: 'JOBS' in process.env && Number(process.env.JOBS),\n // poolTimeout shuts down idle workers. The problem is, for\n // interactive rebuilds that means your startup cost for the\n // next rebuild is at least 600ms worse. So we insist on\n // keeping workers alive always.\n poolTimeout: Infinity,\n};\n\nfunction canUseThreadLoader(extraOptions: object | false | undefined) {\n // If the environment sets JOBS to 0, or if our extraOptions are set to false,\n // we have been explicitly configured not to use thread-loader\n if (process.env.JOBS === '0' || extraOptions === false) {\n return false;\n } else {\n return true;\n }\n}\n\nfunction warmUp(extraOptions: object | false | undefined) {\n // We don't know if we'll be parallel-safe or not, but if we've been\n // configured to not use thread-loader, then there is no need to consume extra\n // resources warming the worker pool\n if (!canUseThreadLoader(extraOptions)) {\n return null;\n }\n\n threadLoaderWarmup(Object.assign({}, threadLoaderOptions, extraOptions), [\n require.resolve('@embroider/hbs-loader'),\n require.resolve('@embroider/babel-loader-9'),\n ]);\n}\n\nfunction maybeThreadLoader(isParallelSafe: boolean, extraOptions: object | false | undefined) {\n if (!canUseThreadLoader(extraOptions) || !isParallelSafe) {\n return null;\n }\n\n return {\n loader: 'thread-loader',\n options: Object.assign({}, threadLoaderOptions, extraOptions),\n };\n}\n\nfunction appendArrays(objValue: any, srcValue: any) {\n if (Array.isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n}\n\nfunction isCSS(filename: string) {\n return /\\.css$/i.test(filename);\n}\n\n// typescript doesn't understand that regular use of array.filter(Boolean) does\n// this.\nfunction nonNullArray<T>(array: T[]): NonNullable<T>[] {\n return array.filter(Boolean) as NonNullable<T>[];\n}\n\nfunction makeBabelLoaderOptions(\n _majorVersion: 7,\n variant: Variant,\n appBabelConfigPath: string,\n extraOptions: BabelLoaderOptions | undefined\n) {\n const cacheDirectory = getPackagerCacheDir('webpack-babel-loader');\n const options: BabelLoaderOptions & { variant: Variant; appBabelConfigPath: string } = {\n variant,\n appBabelConfigPath,\n cacheDirectory,\n ...extraOptions,\n };\n return {\n loader: 'babel-loader-9',\n options,\n };\n}\n\nexport { Webpack };\n"]}
1
+ {"version":3,"file":"ember-webpack.js","sourceRoot":"","sources":["ember-webpack.ts"],"names":[],"mappings":";AAAA;;;;;;;;;EASE;;;;;;;AAGF,0CAA+F;AAC/F,kEAAuG;AAEvG,sDAA8B;AAE9B,uCAA0F;AAC1F,+BAAoD;AACpD,6DAAqC;AACrC,iEAAyC;AACzC,6DAAqC;AACrC,sFAA2D;AAC3D,kDAA8B;AAC9B,+BAA8B;AAC9B,iDAA6D;AAE7D,oDAA4B;AAC5B,2EAAyD;AACzD,oEAA2C;AAG3C,uEAA4D;AAE5D,MAAM,KAAK,GAAG,IAAA,eAAS,EAAC,iBAAiB,CAAC,CAAC;AAE3C,0EAA0E;AAC1E,6DAA6D;AAC7D,KAAK,UAAU,UAAU;IACvB,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAYD,gEAAgE;AAChE,SAAS,YAAY,CAAC,IAAa,EAAE,KAAc;IACjD,OAAO,CACL,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,KAAK,CAAC,WAAW,CAAC,MAAM;QACpD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,iBAAO,EAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAC3F,CAAC;AACJ,CAAC;AAKD,SAAS,aAAa;IACpB,MAAM,QAAQ,GAA8C,EAAE,CAAC;IAC/D,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAE1B,SAAS,KAAK,CAAC,QAAgB;QAC7B,IAAI,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QACjE,IAAI,GAAG,KAAK,CAAC;QACb,KAAK,GAAG,QAAQ,CAAC;IACnB,CAAC;IAED,KAAK,UAAU,SAAS;QACtB,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpD,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC9B,KAAK,EAAE,CAAC;QACV,CAAC;QACD,MAAM,OAAO,CAAC;IAChB,CAAC;IAED,SAAS,KAAK,CAAC,GAAW;QACxB,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzC,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;gBAChB,OAAO,EAAE,CAAC;QACjB,CAAC;QACD,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,4EAA4E;AAC5E,0EAA0E;AAC1E,gBAAgB;AAChB,MAAM,OAAO,SAAiC,MAAM,OAAO;QAezD,YACU,OAAe,EACf,UAAkB,EAClB,QAAmB,EACnB,YAAmC,EAC3C,OAAiB;YAJT,YAAO,GAAP,OAAO,CAAQ;YACf,eAAU,GAAV,UAAU,CAAQ;YAClB,aAAQ,GAAR,QAAQ,CAAW;YACnB,iBAAY,GAAZ,YAAY,CAAuB;YAdrC,qBAAgB,GAAuB,IAAI,GAAG,EAAE,CAAC;YAwVjD,iBAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;YAvU/C,IAAI,CAAC,IAAA,mBAAe,EAAC,iBAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,KAAK,CAAC,iEAAiE,iBAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACtG,CAAC;YAED,IAAI,YAAY,GAAG,wCAAqB,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACtE,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YAChF,IAAI,CAAC,WAAW,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;YAC1C,IAAI,CAAC,cAAc,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,CAAC;YAC9C,IAAI,CAAC,wBAAwB,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB,CAAC;YAC7D,IAAI,CAAC,uBAAuB,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,kBAAkB,CAAC;YAC3D,IAAI,CAAC,qBAAqB,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB,CAAC;YACvD,IAAI,CAAC,uBAAuB,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,kBAAkB,CAAC;YAC3D,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,aAAa,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,aAAa;YACf,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;YACxC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,cAAc,GAAG,aAAa,GAAG;oBACpC,WAAW,EAAE,IAAI,GAAG,EAAE;oBACtB,WAAW,EAAE,IAAI,GAAG,EAAE;oBACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACxB,CAAC;YACJ,CAAC;YACD,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,KAAK;YACT,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAEO,UAAU;YAChB,IAAI,IAAI,GAAG,IAAA,iBAAU,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7C,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC;YAEpD,KAAK,IAAI,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;gBACpD,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;oBACjC,WAAW,CAAC,IAAI,CAAC,IAAI,qBAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;gBACrG,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YAED,IAAI,cAAc,GAA2B,IAAA,uBAAY,EACvD,IAAA,WAAI,EAAC,IAAA,4CAAyB,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAC/D,CAAC;YAEF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACvG,CAAC;QAEO,gBAAgB,CAAC,OAAgB,EAAE,OAAgB,EAAE,YAAoB;YAC/E,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;YAE7E,IAAI,KAAK,GAA+B,EAAE,CAAC;YAC3C,KAAK,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;gBACnC,KAAK,IAAI,UAAU,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBAC1C,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAEtF,IAAI,kBAAkB,GAAG,sBAAsB,CAC7C,OAAO,EACP,IAAA,WAAI,EAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,EACtC,IAAI,CAAC,uBAAuB,CAC7B,CAAC;YAEF,IAAI,iBAAiB,GAAG,kBAAkB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC;YAExF,OAAO;gBACL,IAAI,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa;gBAClE,OAAO,EAAE,IAAI,CAAC,gBAAgB;gBAC9B,KAAK;gBACL,WAAW,EAAE;oBACX,KAAK,EAAE,KAAK;iBACb;gBACD,OAAO,EAAE;oBACP,GAAG,YAAY;oBACf,IAAI,yCAAe,CAAC,cAAc,EAAE,iBAAiB,CAAC;oBACtD,QAAQ,CAAC,EAAE;wBACT,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;4BAC9D,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;4BAClD,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAY,EAAE,YAAY,CAAC,CAAC;wBAC7E,CAAC,CAAC,CAAC;oBACL,CAAC;iBACF;gBACD,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE;oBACN,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,QAAQ;4BACd,GAAG,EAAE,YAAY,CAAC;gCAChB,iBAAiB,CAAC,IAAI,CAAC,wBAAwB,CAAC;gCAChD,kBAAkB;gCAClB;oCACE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;oCAChD,OAAO,EAAE,CAAC,GAAG,EAAE;wCACb,IAAI,OAAO,GAAqB;4CAC9B,kBAAkB,EAAE;gDAClB,OAAO,EAAE,IAAI,CAAC,gBAAgB;gDAC9B,YAAY,EAAE,WAAW;6CAC1B;yCACF,CAAC;wCACF,OAAO,OAAO,CAAC;oCACjB,CAAC,CAAC,EAAE;iCACL;6BACF,CAAC;yBACH;wBACD;4BACE,GAAG,EAAE,YAAY,CAAC;gCAChB,iBAAiB,CAAC,IAAI,CAAC,wBAAwB,CAAC;gCAChD,sBAAsB,CAAC,OAAO,EAAE,IAAA,WAAI,EAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC;6BACtG,CAAC;yBACH;wBACD;4BACE,IAAI,EAAE,KAAK;4BACX,GAAG,EAAE,YAAY;yBAClB;qBACF;iBACF;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,CAAC;oBAC3B,QAAQ,EAAE,6BAA6B;oBACvC,aAAa,EAAE,6BAA6B;oBAC5C,UAAU,EAAE,cAAc;iBAC3B;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE;wBACX,MAAM,EAAE,KAAK;qBACd;iBACF;gBACD,OAAO,EAAE;oBACP,UAAU,EAAE,cAAc,CAAC,oBAAoB;iBAChD;gBACD,aAAa,EAAE;oBACb,KAAK,EAAE;wBACL,sEAAsE;wBACtE,0EAA0E;wBAC1E,0BAA0B;wBAC1B,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;wBACjD,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC;wBAC9D,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;wBAC3C,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;qBAChD;iBACF;gBACD,WAAW,EAAE;oBACX,yEAAyE;oBACzE,aAAa,EAAE,IAAI;iBACpB;aACF,CAAC;QACJ,CAAC;QAKO,UAAU,CAAC,OAAgB;YACjC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpF,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAChC,mEAAmE;gBACnE,qEAAqE;gBACrE,wEAAwE;gBACxE,mEAAmE;gBACnE,sBAAsB;gBACtB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;gBAC3B,OAAO,IAAI,CAAC,WAAW,CAAC;YAC1B,CAAC;YACD,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC7B,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,CACvD,IAAA,mBAAS,EAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CACrG,CAAC;YACF,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,IAAA,iBAAO,EAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,CAAC;QAEO,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,OAAoB,EAAE,OAAgB;YAC9E,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBACnC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACzB,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,yEAAyE;YACzE,sDAAsD;YACtD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAEzF,IAAI,MAAM,GAAG,IAAA,uBAAY,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;YACvE,IAAI,UAAU,GAAkB,EAAE,CAAC;YACnC,IAAI,wBAAwB,CAAC;YAC7B,IAAI,uBAAuB,CAAC;YAC5B,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,wBAAwB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAE,CAAC;gBAC3D,uBAAuB,GAAG,IAAA,WAAI,EAAC,IAAA,cAAO,EAAC,MAAM,CAAC,EAAE,wBAAwB,CAAC,CAAC;gBAC1E,IAAI,OAAO,CAAC;gBACZ,IAAI,CAAC;oBACH,OAAO,GAAG,IAAA,uBAAY,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,CAAC,CAAC;gBAC/E,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,wEAAwE;oBACxE,eAAe;gBACjB,CAAC;gBACD,IAAI,OAAO,EAAE,CAAC;oBACZ,UAAU,CAAC,SAAS,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,wBAAwB,EAAE,CAAC;gBACpE,CAAC;YACH,CAAC;YACD,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC7E,IAAI,aAAa,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAQ,CAAC,CAAC;YACpE,IAAA,yBAAc,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,OAAQ,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,IAAI,uBAAuB,IAAI,MAAM,EAAE,CAAC;gBACtC,IAAA,yBAAc,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC,EAAE,MAAM,CAAC,CAAC;gBACvE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,aAAa,CAAC;QACvB,CAAC;QAEO,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,OAAoB,EAAE,OAAgB;YAC5E,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBACnC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACnB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,IAAA,uBAAY,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC;YAEhD,IAAI,aAAa,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACtE,IAAA,yBAAc,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,aAAa,CAAC;QACvB,CAAC;QAEO,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,aAAoB,EAAE,EAAuB;YAC9F,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,OAAO,GAAG,IAAA,aAAM,EAAC,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC;gBAChD,GAAG,CAAC,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC;gBAC3C,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAEO,KAAK,CAAC,UAAU,CAAC,KAAoB,EAAE,EAAE,WAAW,EAAE,WAAW,EAAW,EAAE,YAAoB;YACxG,4EAA4E;YAC5E,oDAAoD;YAEpD,IAAI,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;YACrC,qEAAqE;YACrE,wEAAwE;YACxE,yBAAyB;YACzB,KAAK,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,EAAE;oBAC/E,KAAK,IAAI,MAAM,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;wBACtC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;4BACnC,MAAM,OAAO,GAAG,EAAc,CAAC;4BAC/B,IAAI,CAAC;gCACH,iEAAiE;gCACjE,sBAAsB;gCACtB,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gCACvD,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC1E,CAAC;4BAAC,OAAO,GAAG,EAAE,CAAC;gCACb,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC;oCAC9E,IAAI,CAAC,YAAY,CACf,eAAe,UAAU,CAAC,QAAQ,iBAAiB,MAAM;yCACtD,KAAK,CAAC,UAAG,CAAC;yCACV,IAAI,CACH,GAAG,CACJ,2FAA2F,CAC/F,CAAC;gCACJ,CAAC;qCAAM,CAAC;oCACN,MAAM,GAAG,CAAC;gCACZ,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,KAAK,IAAI,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;wBACpC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;4BAClC,MAAM,OAAO,GAAG,EAAc,CAAC;4BAC/B,IAAI,CAAC;gCACH,gEAAgE;gCAChE,sBAAsB;gCACtB,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gCACtD,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BACxE,CAAC;4BAAC,OAAO,GAAG,EAAE,CAAC;gCACb,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;oCAC7E,IAAI,CAAC,YAAY,CACf,eAAe,UAAU,CAAC,QAAQ,kCAAkC,KAAK;yCACtE,KAAK,CAAC,UAAG,CAAC;yCACV,IAAI,CACH,GAAG,CACJ,2FAA2F,CAC/F,CAAC;gCACJ,CAAC;qCAAM,CAAC;oCACN,MAAM,GAAG,CAAC;gCACZ,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YACD,oEAAoE;YACpE,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,0CAA0C;YAC1C,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;gBACvB,KAAK,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;oBACnC,IAAI,CAAC,cAAc,CAAC,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC1F,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,KAAK,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC1B,MAAM,IAAI,CAAC,mBAAmB,CAAC,4BAA4B,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;wBAC1E,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;oBACjC,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAID,sEAAsE;QACtE,0EAA0E;QAC1E,6EAA6E;QAC7E,wDAAwD;QAChD,cAAc,CAAC,QAAgB,EAAE,OAAe;YACtD,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,OAAO,EAAE,CAAC;gBAChD,IAAA,yBAAc,EAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAEO,WAAW,CAAC,YAAoB;YACtC,IAAI,UAAU,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YAC3D,IAAI,QAAQ,GAAG,IAAA,mBAAQ,EAAC,UAAU,CAAC,CAAC;YACpC,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC1F,KAAK,CAAC,YAAY,YAAY,EAAE,CAAC,CAAC;gBAClC,IAAA,mBAAQ,EAAC,UAAU,EAAE,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;gBAC1D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAEO,wBAAwB,CAAC,QAAgB,EAAE,OAAe;YAChE,IAAI,GAAG,GAAG,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACnC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACpB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE7B,IAAI,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAChD,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAEO,cAAc,CAAC,KAAoB,EAAE,OAAgB,EAAE,YAAoB;YACjF,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;YAChC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;gBACzC,GAAG,EAAE,KAAK;gBACV,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YAEH,sEAAsE;YACtE,yEAAyE;YACzE,sEAAsE;YACtE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YAED,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;gBACnD,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACrE,CAAC;gBAED,IAAA,kBAAW,EAAC,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CACtD,YAAY,EACZ,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAC1C,CAAC;gBACF,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAClC,wEAAwE;oBACxE,wEAAwE;oBACxE,sCAAsC;oBACtC,MAAM,CAAC,WAAW,CAAC,GAAG,CACpB,EAAE,EACF,IAAA,iBAAO,EACL,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,OAAO,0CAAE,QAAQ,CAAC,EAAE,CAAC,CAAA,EAAA,CAAC,EACnD,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CACrB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA,CAAa,CAC5E,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAEO,UAAU,CAAC,OAA8B;YAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;oBACzB,IAAI,CAAC;wBACH,IAAI,GAAG,EAAE,CAAC;4BACR,IAAI,KAAK,EAAE,CAAC;gCACV,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;4BACtC,CAAC;4BACD,MAAM,GAAG,CAAC;wBACZ,CAAC;wBACD,IAAI,CAAC,KAAK,EAAE,CAAC;4BACX,gEAAgE;4BAChE,4CAA4C;4BAC5C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;wBAC9C,CAAC;wBACD,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;4BACtB,4CAA4C;4BAC5C,IAAI,CAAC,YAAY,CACf,KAAK,CAAC,QAAQ,CAAC;gCACb,MAAM,EAAE,OAAO,CAAC,wBAAa,CAAC,MAAM,CAAC;6BACtC,CAAC,CACH,CAAC;4BAEF,iDAAiD;4BACjD,MAAM,IAAI,CAAC,aAAa,CAAC,IAAA,iBAAO,EAAE,KAAa,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;wBACrF,CAAC;wBACD,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;4BACvD,IAAI,CAAC,YAAY,CACf,KAAK,CAAC,QAAQ,CAAC;gCACb,MAAM,EAAE,OAAO,CAAC,wBAAa,CAAC,MAAM,CAAC;6BACtC,CAAC,CACH,CAAC;wBACJ,CAAC;wBACD,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,MAAM,CAAC,CAAC,CAAC,CAAC;oBACZ,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAEO,gBAAgB,CAAC,OAAgB;YAIvC,IAAI,SAAS,GAAG;gBACd,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE;oBACP,GAAG,EAAE,IAAI;oBACT,MAAM,EAAE,IAAI;oBACZ,OAAO,EAAE,QAAQ;oBACjB,GAAG,IAAI,CAAC,qBAAqB;iBAC9B;aACF,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,qBAAqB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACpE,mEAAmE;gBACnE,uDAAuD;gBACvD,OAAO;oBACL,OAAO,EAAE;wBACP,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,uBAAuB,EAAE,EAAE;wBAChG,SAAS;qBACV;oBACD,OAAO,EAAE,EAAE;iBACZ,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,+DAA+D;gBAC/D,OAAO;oBACL,OAAO,EAAE,CAAC,iCAAoB,CAAC,MAAM,EAAE,SAAS,CAAC;oBACjD,OAAO,EAAE;wBACP,IAAI,iCAAoB,CAAC;4BACvB,QAAQ,EAAE,8BAA8B;4BACxC,aAAa,EAAE,8BAA8B;4BAC7C,mEAAmE;4BACnE,+BAA+B;4BAC/B,EAAE;4BACF,iEAAiE;4BACjE,6CAA6C;4BAC7C,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,SAAS;yBACvC,CAAC;qBACH;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;QAEO,aAAa,CAAC,MAAa;;YACjC,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC;YACT,IAAI,MAAA,KAAK,CAAC,MAAM,0CAAE,WAAW,EAAE,CAAC;gBAC9B,IAAI,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5G,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpG,CAAC;YACD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACtC,IAAI,MAAA,KAAK,CAAC,MAAM,0CAAE,OAAO,EAAE,CAAC;oBAC1B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACxF,CAAC;gBAED,sEAAsE;gBACtE,0EAA0E;gBAC1E,oBAAoB;gBACpB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF;IAvhBQ,aAAU,GAAG,oBAAqB;OAuhB1C,CAAC;AAgFO,0BAAO;AA9EhB,MAAM,mBAAmB,GAAG;IAC1B,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1D,2DAA2D;IAC3D,4DAA4D;IAC5D,wDAAwD;IACxD,gCAAgC;IAChC,WAAW,EAAE,QAAQ;CACtB,CAAC;AAEF,SAAS,kBAAkB,CAAC,YAAwC;IAClE,8EAA8E;IAC9E,8DAA8D;IAC9D,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,YAAwC;IACtD,oEAAoE;IACpE,8EAA8E;IAC9E,oCAAoC;IACpC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAA,sBAAkB,EAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,mBAAmB,EAAE,YAAY,CAAC,EAAE;QACvE,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;QACxC,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC;KAC7C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,YAAwC;IACjE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,MAAM,EAAE,eAAe;QACvB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,mBAAmB,EAAE,YAAY,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,QAAa,EAAE,QAAa;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,QAAgB;IAC7B,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,+EAA+E;AAC/E,QAAQ;AACR,SAAS,YAAY,CAAI,KAAU;IACjC,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAqB,CAAC;AACnD,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAgB,EAChB,kBAA0B,EAC1B,YAA4C;IAE5C,MAAM,cAAc,GAAG,IAAA,0BAAmB,EAAC,sBAAsB,CAAC,CAAC;IACnE,MAAM,OAAO,GAA0E;QACrF,OAAO;QACP,kBAAkB;QAClB,cAAc;QACd,GAAG,YAAY;KAChB,CAAC;IACF,OAAO;QACL,MAAM,EAAE,gBAAgB;QACxB,OAAO;KACR,CAAC;AACJ,CAAC","sourcesContent":["/*\n Most of the work this module does is putting an HTML-oriented facade around\n Webpack. That is, we want both the input and output to be primarily HTML files\n with proper spec semantics, and we use webpack to optimize the assets referred\n to by those files.\n\n While there are webpack plugins for handling HTML, none of them handle\n multiple HTML entrypoints and apply correct HTML semantics (for example,\n getting script vs module context correct).\n*/\n\nimport type { AppMeta, BundleSummary, Packager, PackagerConstructor, Variant, ResolverOptions } from '@embroider/core';\nimport { HTMLEntrypoint, getAppMeta, getPackagerCacheDir, getOrCreate } from '@embroider/core';\nimport { locateEmbroiderWorkingDir, RewrittenPackageCache, tmpdir } from '@embroider/shared-internals';\nimport type { Configuration, RuleSetUseItem, WebpackPluginInstance } from 'webpack';\nimport webpack from 'webpack';\nimport type { Stats } from 'fs-extra';\nimport { readFileSync, outputFileSync, copySync, statSync, readJSONSync } from 'fs-extra';\nimport { join, dirname, relative, sep } from 'path';\nimport isEqual from 'lodash/isEqual';\nimport mergeWith from 'lodash/mergeWith';\nimport flatMap from 'lodash/flatMap';\nimport MiniCssExtractPlugin from 'mini-css-extract-plugin';\nimport makeDebug from 'debug';\nimport { format } from 'util';\nimport { warmup as threadLoaderWarmup } from 'thread-loader';\nimport type { Options, BabelLoaderOptions } from './options';\nimport crypto from 'crypto';\nimport semverSatisfies from 'semver/functions/satisfies';\nimport supportsColor from 'supports-color';\nimport type { Options as HbsLoaderOptions } from '@embroider/hbs-loader';\nimport type { Options as EmbroiderPluginOptions } from './webpack-resolver-plugin';\nimport { EmbroiderPlugin } from './webpack-resolver-plugin';\n\nconst debug = makeDebug('embroider:debug');\n\n// this function is never called. It exists to workaround typescript being\n// obtuse. https://github.com/microsoft/TypeScript/pull/53426\nasync function loadTerser() {\n let Terser = await import('terser');\n return Terser.minify;\n}\ntype MinifyOptions = NonNullable<Parameters<Awaited<ReturnType<typeof loadTerser>>>[1]>;\n\ninterface AppInfo {\n entrypoints: HTMLEntrypoint[];\n otherAssets: string[];\n rootURL: AppMeta['root-url'];\n publicAssetURL: string;\n resolverConfig: ResolverOptions;\n packageName: string;\n}\n\n// AppInfos are equal if they result in the same webpack config.\nfunction equalAppInfo(left: AppInfo, right: AppInfo): boolean {\n return (\n left.entrypoints.length === right.entrypoints.length &&\n left.entrypoints.every((e, index) => isEqual(e.modules, right.entrypoints[index].modules))\n );\n}\n\ntype BeginFn = (total: number) => void;\ntype IncrementFn = () => Promise<void>;\n\nfunction createBarrier(): [BeginFn, IncrementFn] {\n const barriers: Array<[() => void, (e: unknown) => void]> = [];\n let done = true;\n let limit = 0;\n return [begin, increment];\n\n function begin(newLimit: number) {\n if (!done) flush(new Error('begin called before limit reached'));\n done = false;\n limit = newLimit;\n }\n\n async function increment() {\n if (done) {\n throw new Error('increment after limit reach');\n }\n const promise = new Promise<void>((resolve, reject) => {\n barriers.push([resolve, reject]);\n });\n if (barriers.length === limit) {\n flush();\n }\n await promise;\n }\n\n function flush(err?: Error) {\n for (const [resolve, reject] of barriers) {\n if (err) reject(err);\n else resolve();\n }\n barriers.length = 0;\n done = true;\n }\n}\n\n// we want to ensure that not only does our instance conform to\n// PackagerInstance, but our constructor conforms to Packager. So instead of\n// just exporting our class directly, we export a const constructor of the\n// correct type.\nconst Webpack: PackagerConstructor<Options> = class Webpack implements Packager {\n static annotation = '@embroider/webpack';\n\n private pathToVanillaApp: string;\n private extraConfig: Configuration | undefined;\n private passthroughCache: Map<string, Stats> = new Map();\n private publicAssetURL: string | undefined;\n private extraThreadLoaderOptions: object | false | undefined;\n private extraBabelLoaderOptions: BabelLoaderOptions | undefined;\n private extraCssLoaderOptions: object | undefined;\n private extraStyleLoaderOptions: object | undefined;\n private _bundleSummary: BundleSummary | undefined;\n private beginBarrier: BeginFn;\n private incrementBarrier: IncrementFn;\n\n constructor(\n private appRoot: string,\n private outputPath: string,\n private variants: Variant[],\n private consoleWrite: (msg: string) => void,\n options?: Options\n ) {\n if (!semverSatisfies(webpack.version, '^5.0.0')) {\n throw new Error(`@embroider/webpack requires webpack@^5.0.0, but found version ${webpack.version}`);\n }\n\n let packageCache = RewrittenPackageCache.shared('embroider', appRoot);\n this.pathToVanillaApp = packageCache.maybeMoved(packageCache.get(appRoot)).root;\n this.extraConfig = options?.webpackConfig;\n this.publicAssetURL = options?.publicAssetURL;\n this.extraThreadLoaderOptions = options?.threadLoaderOptions;\n this.extraBabelLoaderOptions = options?.babelLoaderOptions;\n this.extraCssLoaderOptions = options?.cssLoaderOptions;\n this.extraStyleLoaderOptions = options?.styleLoaderOptions;\n [this.beginBarrier, this.incrementBarrier] = createBarrier();\n warmUp(this.extraThreadLoaderOptions);\n }\n\n get bundleSummary(): BundleSummary {\n let bundleSummary = this._bundleSummary;\n if (bundleSummary === undefined) {\n this._bundleSummary = bundleSummary = {\n entrypoints: new Map(),\n lazyBundles: new Map(),\n variants: this.variants,\n };\n }\n return bundleSummary;\n }\n\n async build(): Promise<void> {\n this._bundleSummary = undefined;\n this.beginBarrier(this.variants.length);\n let appInfo = this.examineApp();\n let webpack = this.getWebpack(appInfo);\n await this.runWebpack(webpack);\n }\n\n private examineApp(): AppInfo {\n let meta = getAppMeta(this.pathToVanillaApp);\n let rootURL = meta['ember-addon']['root-url'];\n let entrypoints = [];\n let otherAssets = [];\n let publicAssetURL = this.publicAssetURL || rootURL;\n\n for (let relativePath of meta['ember-addon'].assets) {\n if (/\\.html/i.test(relativePath)) {\n entrypoints.push(new HTMLEntrypoint(this.pathToVanillaApp, rootURL, publicAssetURL, relativePath));\n } else {\n otherAssets.push(relativePath);\n }\n }\n\n let resolverConfig: EmbroiderPluginOptions = readJSONSync(\n join(locateEmbroiderWorkingDir(this.appRoot), 'resolver.json')\n );\n\n return { entrypoints, otherAssets, rootURL, resolverConfig, publicAssetURL, packageName: meta.name };\n }\n\n private configureWebpack(appInfo: AppInfo, variant: Variant, variantIndex: number): Configuration {\n const { entrypoints, publicAssetURL, packageName, resolverConfig } = appInfo;\n\n let entry: { [name: string]: string } = {};\n for (let entrypoint of entrypoints) {\n for (let moduleName of entrypoint.modules) {\n entry[moduleName] = './' + moduleName;\n }\n }\n\n let { plugins: stylePlugins, loaders: styleLoaders } = this.setupStyleConfig(variant);\n\n let babelLoaderOptions = makeBabelLoaderOptions(\n variant,\n join(this.appRoot, 'babel.config.cjs'),\n this.extraBabelLoaderOptions\n );\n\n let babelLoaderPrefix = `babel-loader-9?${JSON.stringify(babelLoaderOptions.options)}!`;\n\n return {\n mode: variant.optimizeForProduction ? 'production' : 'development',\n context: this.pathToVanillaApp,\n entry,\n performance: {\n hints: false,\n },\n plugins: [\n ...stylePlugins,\n new EmbroiderPlugin(resolverConfig, babelLoaderPrefix),\n compiler => {\n compiler.hooks.done.tapPromise('EmbroiderPlugin', async stats => {\n this.summarizeStats(stats, variant, variantIndex);\n await this.writeFiles(this.bundleSummary, this.lastAppInfo!, variantIndex);\n });\n },\n ],\n node: false,\n module: {\n rules: [\n {\n test: /\\.hbs$/,\n use: nonNullArray([\n maybeThreadLoader(this.extraThreadLoaderOptions),\n babelLoaderOptions,\n {\n loader: require.resolve('@embroider/hbs-loader'),\n options: (() => {\n let options: HbsLoaderOptions = {\n compatModuleNaming: {\n rootDir: this.pathToVanillaApp,\n modulePrefix: packageName,\n },\n };\n return options;\n })(),\n },\n ]),\n },\n {\n use: nonNullArray([\n maybeThreadLoader(this.extraThreadLoaderOptions),\n makeBabelLoaderOptions(variant, join(this.appRoot, 'babel.config.cjs'), this.extraBabelLoaderOptions),\n ]),\n },\n {\n test: isCSS,\n use: styleLoaders,\n },\n ],\n },\n output: {\n path: join(this.outputPath),\n filename: `assets/chunk.[chunkhash].js`,\n chunkFilename: `assets/chunk.[chunkhash].js`,\n publicPath: publicAssetURL,\n },\n optimization: {\n splitChunks: {\n chunks: 'all',\n },\n },\n resolve: {\n extensions: resolverConfig.resolvableExtensions,\n },\n resolveLoader: {\n alias: {\n // these loaders are our dependencies, not the app's dependencies. I'm\n // not overriding the default loader resolution rules in case the app also\n // wants to control those.\n 'thread-loader': require.resolve('thread-loader'),\n 'babel-loader-9': require.resolve('@embroider/babel-loader-9'),\n 'css-loader': require.resolve('css-loader'),\n 'style-loader': require.resolve('style-loader'),\n },\n },\n experiments: {\n // this is needed because fasboot-only modules need to use await import()\n topLevelAwait: true,\n },\n };\n }\n\n private lastAppInfo: AppInfo | undefined;\n private lastWebpack: webpack.MultiCompiler | undefined;\n\n private getWebpack(appInfo: AppInfo) {\n if (this.lastWebpack && this.lastAppInfo && equalAppInfo(appInfo, this.lastAppInfo)) {\n debug(`reusing webpack config`);\n // the appInfos result in equal webpack configs so we don't need to\n // reconfigure webpack. But they may contain other changes (like HTML\n // content changes that don't alter the webpack config) so we still want\n // lastAppInfo to update so that the latest one will be seen in the\n // webpack post-build.\n this.lastAppInfo = appInfo;\n return this.lastWebpack;\n }\n debug(`configuring webpack`);\n let config = this.variants.map((variant, variantIndex) =>\n mergeWith({}, this.configureWebpack(appInfo, variant, variantIndex), this.extraConfig, appendArrays)\n );\n this.lastAppInfo = appInfo;\n return (this.lastWebpack = webpack(config));\n }\n\n private async writeScript(script: string, written: Set<string>, variant: Variant) {\n if (!variant.optimizeForProduction) {\n this.copyThrough(script);\n return script;\n }\n\n // loading these lazily here so they never load in non-production builds.\n // The node cache will ensures we only load them once.\n const [Terser, srcURL] = await Promise.all([import('terser'), import('source-map-url')]);\n\n let inCode = readFileSync(join(this.pathToVanillaApp, script), 'utf8');\n let terserOpts: MinifyOptions = {};\n let fileRelativeSourceMapURL;\n let appRelativeSourceMapURL;\n if (srcURL.default.existsIn(inCode)) {\n fileRelativeSourceMapURL = srcURL.default.getFrom(inCode)!;\n appRelativeSourceMapURL = join(dirname(script), fileRelativeSourceMapURL);\n let content;\n try {\n content = readJSONSync(join(this.pathToVanillaApp, appRelativeSourceMapURL));\n } catch (err) {\n // the script refers to a sourcemap that doesn't exist, so we just leave\n // the map out.\n }\n if (content) {\n terserOpts.sourceMap = { content, url: fileRelativeSourceMapURL };\n }\n }\n let { code: outCode, map: outMap } = await Terser.minify(inCode, terserOpts);\n let finalFilename = this.getFingerprintedFilename(script, outCode!);\n outputFileSync(join(this.outputPath, finalFilename), outCode!);\n written.add(script);\n if (appRelativeSourceMapURL && outMap) {\n outputFileSync(join(this.outputPath, appRelativeSourceMapURL), outMap);\n written.add(appRelativeSourceMapURL);\n }\n return finalFilename;\n }\n\n private async writeStyle(style: string, written: Set<string>, variant: Variant) {\n if (!variant.optimizeForProduction) {\n this.copyThrough(style);\n written.add(style);\n return style;\n }\n\n const csso = await import('csso');\n const cssContent = readFileSync(join(this.pathToVanillaApp, style), 'utf8');\n const minifiedCss = csso.minify(cssContent).css;\n\n let finalFilename = this.getFingerprintedFilename(style, minifiedCss);\n outputFileSync(join(this.outputPath, finalFilename), minifiedCss);\n written.add(style);\n return finalFilename;\n }\n\n private async provideErrorContext(message: string, messageParams: any[], fn: () => Promise<void>) {\n try {\n return await fn();\n } catch (err) {\n let context = format(message, ...messageParams);\n err.message = context + ': ' + err.message;\n throw err;\n }\n }\n\n private async writeFiles(stats: BundleSummary, { entrypoints, otherAssets }: AppInfo, variantIndex: number) {\n // we're doing this ourselves because I haven't seen a webpack 4 HTML plugin\n // that handles multiple HTML entrypoints correctly.\n\n let written: Set<string> = new Set();\n // scripts (as opposed to modules) and stylesheets (as opposed to CSS\n // modules that are imported from JS modules) get passed through without\n // going through webpack.\n for (let entrypoint of entrypoints) {\n await this.provideErrorContext('needed by %s', [entrypoint.filename], async () => {\n for (let script of entrypoint.scripts) {\n if (!stats.entrypoints.has(script)) {\n const mapping = [] as string[];\n try {\n // zero here means we always attribute passthrough scripts to the\n // first build variant\n stats.entrypoints.set(script, new Map([[0, mapping]]));\n mapping.push(await this.writeScript(script, written, this.variants[0]));\n } catch (err) {\n if (err.code === 'ENOENT' && err.path === join(this.pathToVanillaApp, script)) {\n this.consoleWrite(\n `warning: in ${entrypoint.filename} <script src=\"${script\n .split(sep)\n .join(\n '/'\n )}\"> does not exist on disk. If this is intentional, use a data-embroider-ignore attribute.`\n );\n } else {\n throw err;\n }\n }\n }\n }\n for (let style of entrypoint.styles) {\n if (!stats.entrypoints.has(style)) {\n const mapping = [] as string[];\n try {\n // zero here means we always attribute passthrough styles to the\n // first build variant\n stats.entrypoints.set(style, new Map([[0, mapping]]));\n mapping.push(await this.writeStyle(style, written, this.variants[0]));\n } catch (err) {\n if (err.code === 'ENOENT' && err.path === join(this.pathToVanillaApp, style)) {\n this.consoleWrite(\n `warning: in ${entrypoint.filename} <link rel=\"stylesheet\" href=\"${style\n .split(sep)\n .join(\n '/'\n )}\"> does not exist on disk. If this is intentional, use a data-embroider-ignore attribute.`\n );\n } else {\n throw err;\n }\n }\n }\n }\n });\n }\n // we need to wait for both compilers before writing html entrypoint\n await this.incrementBarrier();\n // only the first variant should write it.\n if (variantIndex === 0) {\n for (let entrypoint of entrypoints) {\n this.writeIfChanged(join(this.outputPath, entrypoint.filename), entrypoint.render(stats));\n written.add(entrypoint.filename);\n }\n }\n\n for (let relativePath of otherAssets) {\n if (!written.has(relativePath)) {\n written.add(relativePath);\n await this.provideErrorContext(`while copying app's assets`, [], async () => {\n this.copyThrough(relativePath);\n });\n }\n }\n }\n\n private lastContents = new Map<string, string>();\n\n // The point of this caching isn't really performance (we generate the\n // contents either way, and the actual write is unlikely to be expensive).\n // It's helping ember-cli's traditional livereload system to avoid triggering\n // a full page reload when that wasn't really necessary.\n private writeIfChanged(filename: string, content: string) {\n if (this.lastContents.get(filename) !== content) {\n outputFileSync(filename, content, 'utf8');\n this.lastContents.set(filename, content);\n }\n }\n\n private copyThrough(relativePath: string) {\n let sourcePath = join(this.pathToVanillaApp, relativePath);\n let newStats = statSync(sourcePath);\n let oldStats = this.passthroughCache.get(sourcePath);\n if (!oldStats || oldStats.mtimeMs !== newStats.mtimeMs || oldStats.size !== newStats.size) {\n debug(`emitting ${relativePath}`);\n copySync(sourcePath, join(this.outputPath, relativePath));\n this.passthroughCache.set(sourcePath, newStats);\n }\n }\n\n private getFingerprintedFilename(filename: string, content: string): string {\n let md5 = crypto.createHash('md5');\n md5.update(content);\n let hash = md5.digest('hex');\n\n let fileParts = filename.split('.');\n fileParts.splice(fileParts.length - 1, 0, hash);\n return fileParts.join('.');\n }\n\n private summarizeStats(stats: webpack.Stats, variant: Variant, variantIndex: number): void {\n let output = this.bundleSummary;\n let { entrypoints, chunks } = stats.toJson({\n all: false,\n entrypoints: true,\n chunks: true,\n });\n\n // webpack's types are written rather loosely, implying that these two\n // properties may not be present. They really always are, as far as I can\n // tell, but we need to check here anyway to satisfy the type checker.\n if (!entrypoints) {\n throw new Error(`unexpected webpack output: no entrypoints`);\n }\n if (!chunks) {\n throw new Error(`unexpected webpack output: no chunks`);\n }\n\n for (let id of Object.keys(entrypoints)) {\n let { assets: entrypointAssets } = entrypoints[id];\n if (!entrypointAssets) {\n throw new Error(`unexpected webpack output: no entrypoint.assets`);\n }\n\n getOrCreate(output.entrypoints, id, () => new Map()).set(\n variantIndex,\n entrypointAssets.map(asset => asset.name)\n );\n if (variant.runtime !== 'browser') {\n // in the browser we don't need to worry about lazy assets (they will be\n // handled automatically by webpack as needed), but in any other runtime\n // we need the ability to preload them\n output.lazyBundles.set(\n id,\n flatMap(\n chunks.filter(chunk => chunk.runtime?.includes(id)),\n chunk => chunk.files\n ).filter(file => !entrypointAssets?.find(a => a.name === file)) as string[]\n );\n }\n }\n }\n\n private runWebpack(webpack: webpack.MultiCompiler): Promise<webpack.MultiStats> {\n return new Promise((resolve, reject) => {\n webpack.run((err, stats) => {\n try {\n if (err) {\n if (stats) {\n this.consoleWrite(stats.toString());\n }\n throw err;\n }\n if (!stats) {\n // this doesn't really happen, but webpack's types imply that it\n // could, so we just satisfy typescript here\n throw new Error('bug: no stats and no err');\n }\n if (stats.hasErrors()) {\n // write all the stats output to the console\n this.consoleWrite(\n stats.toString({\n colors: Boolean(supportsColor.stdout),\n })\n );\n\n // the typing for MultiCompiler are all foobared.\n throw this.findBestError(flatMap((stats as any).stats, s => s.compilation.errors));\n }\n if (stats.hasWarnings() || process.env.VANILLA_VERBOSE) {\n this.consoleWrite(\n stats.toString({\n colors: Boolean(supportsColor.stdout),\n })\n );\n }\n resolve(stats);\n } catch (e) {\n reject(e);\n }\n });\n });\n }\n\n private setupStyleConfig(variant: Variant): {\n loaders: RuleSetUseItem[];\n plugins: WebpackPluginInstance[];\n } {\n let cssLoader = {\n loader: 'css-loader',\n options: {\n url: true,\n import: true,\n modules: 'global',\n ...this.extraCssLoaderOptions,\n },\n };\n\n if (!variant.optimizeForProduction && variant.runtime === 'browser') {\n // in development builds that only need to work in the browser (not\n // fastboot), we can use style-loader because it's fast\n return {\n loaders: [\n { loader: 'style-loader', options: { injectType: 'styleTag', ...this.extraStyleLoaderOptions } },\n cssLoader,\n ],\n plugins: [],\n };\n } else {\n // in any other build, we separate the CSS into its own bundles\n return {\n loaders: [MiniCssExtractPlugin.loader, cssLoader],\n plugins: [\n new MiniCssExtractPlugin({\n filename: `assets/chunk.[chunkhash].css`,\n chunkFilename: `assets/chunk.[chunkhash].css`,\n // in the browser, MiniCssExtractPlugin can manage it's own runtime\n // lazy loading of stylesheets.\n //\n // but in fastboot, we need to disable that in favor of doing our\n // own insertion of `<link>` tags in the HTML\n runtime: variant.runtime === 'browser',\n }),\n ],\n };\n }\n }\n\n private findBestError(errors: any[]) {\n let error = errors[0];\n let file;\n if (error.module?.userRequest) {\n file = relative(this.pathToVanillaApp, error.module.userRequest);\n }\n\n if (!error.file) {\n error.file = file || (error.loc ? error.loc.file : null) || (error.location ? error.location.file : null);\n }\n if (error.line == null) {\n error.line = (error.loc ? error.loc.line : null) || (error.location ? error.location.line : null);\n }\n if (typeof error.message === 'string') {\n if (error.module?.context) {\n error.message = error.message.replace(error.module.context, error.module.userRequest);\n }\n\n // the tmpdir on OSX is horribly long and makes error messages hard to\n // read. This is doing the same as String.prototype.replaceAll, which node\n // doesn't have yet.\n error.message = error.message.split(tmpdir).join('$TMPDIR');\n }\n return error;\n }\n};\n\nconst threadLoaderOptions = {\n workers: 'JOBS' in process.env && Number(process.env.JOBS),\n // poolTimeout shuts down idle workers. The problem is, for\n // interactive rebuilds that means your startup cost for the\n // next rebuild is at least 600ms worse. So we insist on\n // keeping workers alive always.\n poolTimeout: Infinity,\n};\n\nfunction canUseThreadLoader(extraOptions: object | false | undefined) {\n // If the environment sets JOBS to 0, or if our extraOptions are set to false,\n // we have been explicitly configured not to use thread-loader\n if (process.env.JOBS === '0' || extraOptions === false) {\n return false;\n } else {\n return true;\n }\n}\n\nfunction warmUp(extraOptions: object | false | undefined) {\n // We don't know if we'll be parallel-safe or not, but if we've been\n // configured to not use thread-loader, then there is no need to consume extra\n // resources warming the worker pool\n if (!canUseThreadLoader(extraOptions)) {\n return null;\n }\n\n threadLoaderWarmup(Object.assign({}, threadLoaderOptions, extraOptions), [\n require.resolve('@embroider/hbs-loader'),\n require.resolve('@embroider/babel-loader-9'),\n ]);\n}\n\nfunction maybeThreadLoader(extraOptions: object | false | undefined) {\n if (!canUseThreadLoader(extraOptions)) {\n return null;\n }\n\n return {\n loader: 'thread-loader',\n options: Object.assign({}, threadLoaderOptions, extraOptions),\n };\n}\n\nfunction appendArrays(objValue: any, srcValue: any) {\n if (Array.isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n}\n\nfunction isCSS(filename: string) {\n return /\\.css$/i.test(filename);\n}\n\n// typescript doesn't understand that regular use of array.filter(Boolean) does\n// this.\nfunction nonNullArray<T>(array: T[]): NonNullable<T>[] {\n return array.filter(Boolean) as NonNullable<T>[];\n}\n\nfunction makeBabelLoaderOptions(\n variant: Variant,\n appBabelConfigPath: string,\n extraOptions: BabelLoaderOptions | undefined\n) {\n const cacheDirectory = getPackagerCacheDir('webpack-babel-loader');\n const options: BabelLoaderOptions & { variant: Variant; appBabelConfigPath: string } = {\n variant,\n appBabelConfigPath,\n cacheDirectory,\n ...extraOptions,\n };\n return {\n loader: 'babel-loader-9',\n options,\n };\n}\n\nexport { Webpack };\n"]}