@embroider/webpack 1.4.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embroider/webpack",
3
- "version": "1.4.0",
3
+ "version": "1.7.0",
4
4
  "private": false,
5
5
  "description": "Builds EmberJS apps with Webpack",
6
6
  "repository": {
@@ -23,9 +23,9 @@
23
23
  "@babel/core": "^7.14.5",
24
24
  "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5",
25
25
  "@babel/plugin-proposal-optional-chaining": "^7.14.5",
26
- "@embroider/babel-loader-8": "1.4.0",
27
- "@embroider/hbs-loader": "1.4.0",
28
- "@embroider/shared-internals": "1.4.0",
26
+ "@embroider/babel-loader-8": "1.7.0",
27
+ "@embroider/hbs-loader": "1.7.0",
28
+ "@embroider/shared-internals": "1.7.0",
29
29
  "@types/source-map": "^0.5.7",
30
30
  "@types/supports-color": "^8.1.0",
31
31
  "babel-loader": "^8.2.2",
@@ -54,7 +54,7 @@
54
54
  "webpack": "^5.38.1"
55
55
  },
56
56
  "peerDependencies": {
57
- "@embroider/core": "1.4.0",
57
+ "@embroider/core": "1.7.0",
58
58
  "webpack": "^5.0.0"
59
59
  },
60
60
  "engines": {
@@ -11,7 +11,11 @@
11
11
  */
12
12
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
13
  if (k2 === undefined) k2 = k;
14
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
15
19
  }) : (function(o, m, k, k2) {
16
20
  if (k2 === undefined) k2 = k;
17
21
  o[k2] = m[k];
@@ -56,6 +60,40 @@ function equalAppInfo(left, right) {
56
60
  left.entrypoints.length === right.entrypoints.length &&
57
61
  left.entrypoints.every((e, index) => (0, isEqual_1.default)(e.modules, right.entrypoints[index].modules)));
58
62
  }
63
+ function createBarrier() {
64
+ const barriers = [];
65
+ let done = true;
66
+ let limit = 0;
67
+ return [begin, increment];
68
+ function begin(newLimit) {
69
+ if (!done)
70
+ flush(new Error('begin called before limit reached'));
71
+ done = false;
72
+ limit = newLimit;
73
+ }
74
+ async function increment() {
75
+ if (done) {
76
+ throw new Error('increment after limit reach');
77
+ }
78
+ const promise = new Promise((resolve, reject) => {
79
+ barriers.push([resolve, reject]);
80
+ });
81
+ if (barriers.length === limit) {
82
+ flush();
83
+ }
84
+ await promise;
85
+ }
86
+ function flush(err) {
87
+ for (const [resolve, reject] of barriers) {
88
+ if (err)
89
+ reject(err);
90
+ else
91
+ resolve();
92
+ }
93
+ barriers.length = 0;
94
+ done = true;
95
+ }
96
+ }
59
97
  // we want to ensure that not only does our instance conform to
60
98
  // PackagerInstance, but our constructor conforms to Packager. So instead of
61
99
  // just exporting our class directly, we export a const constructor of the
@@ -76,17 +114,29 @@ const Webpack = (_a = class Webpack {
76
114
  this.extraBabelLoaderOptions = options === null || options === void 0 ? void 0 : options.babelLoaderOptions;
77
115
  this.extraCssLoaderOptions = options === null || options === void 0 ? void 0 : options.cssLoaderOptions;
78
116
  this.extraStyleLoaderOptions = options === null || options === void 0 ? void 0 : options.styleLoaderOptions;
117
+ [this.beginBarrier, this.incrementBarrier] = createBarrier();
79
118
  warmUp(this.extraThreadLoaderOptions);
80
119
  }
120
+ get bundleSummary() {
121
+ let bundleSummary = this._bundleSummary;
122
+ if (bundleSummary === undefined) {
123
+ this._bundleSummary = bundleSummary = {
124
+ entrypoints: new Map(),
125
+ lazyBundles: new Map(),
126
+ variants: this.variants,
127
+ };
128
+ }
129
+ return bundleSummary;
130
+ }
81
131
  async build() {
132
+ this._bundleSummary = undefined;
133
+ this.beginBarrier(this.variants.length);
82
134
  let appInfo = this.examineApp();
83
135
  let webpack = this.getWebpack(appInfo);
84
- let stats = this.summarizeStats(await this.runWebpack(webpack));
85
- await this.writeFiles(stats, appInfo);
136
+ await this.runWebpack(webpack);
86
137
  }
87
138
  examineApp() {
88
139
  let meta = (0, core_1.getAppMeta)(this.pathToVanillaApp);
89
- let templateCompiler = meta['template-compiler'];
90
140
  let rootURL = meta['root-url'];
91
141
  let babel = meta['babel'];
92
142
  let resolvableExtensions = meta['resolvable-extensions'];
@@ -101,19 +151,16 @@ const Webpack = (_a = class Webpack {
101
151
  otherAssets.push(relativePath);
102
152
  }
103
153
  }
104
- return { entrypoints, otherAssets, templateCompiler, babel, rootURL, resolvableExtensions, publicAssetURL };
154
+ return { entrypoints, otherAssets, babel, rootURL, resolvableExtensions, publicAssetURL };
105
155
  }
106
- configureWebpack({ entrypoints, templateCompiler, babel, resolvableExtensions, publicAssetURL }, variant) {
156
+ configureWebpack(appInfo, variant, variantIndex) {
157
+ const { entrypoints, babel, resolvableExtensions, publicAssetURL } = appInfo;
107
158
  let entry = {};
108
159
  for (let entrypoint of entrypoints) {
109
160
  for (let moduleName of entrypoint.modules) {
110
161
  entry[moduleName] = './' + moduleName;
111
162
  }
112
163
  }
113
- let hbsOptions = {
114
- templateCompilerFile: (0, path_1.join)(this.pathToVanillaApp, templateCompiler.filename),
115
- variant,
116
- };
117
164
  let { plugins: stylePlugins, loaders: styleLoaders } = this.setupStyleConfig(variant);
118
165
  return {
119
166
  mode: variant.optimizeForProduction ? 'production' : 'development',
@@ -122,17 +169,25 @@ const Webpack = (_a = class Webpack {
122
169
  performance: {
123
170
  hints: false,
124
171
  },
125
- plugins: stylePlugins,
172
+ plugins: [
173
+ ...stylePlugins,
174
+ compiler => {
175
+ compiler.hooks.done.tapPromise('EmbroiderPlugin', async (stats) => {
176
+ this.summarizeStats(stats, variant, variantIndex);
177
+ await this.writeFiles(this.bundleSummary, appInfo, variantIndex);
178
+ });
179
+ },
180
+ ],
126
181
  node: false,
127
182
  module: {
128
183
  rules: [
129
184
  {
130
185
  test: /\.hbs$/,
131
186
  use: nonNullArray([
132
- maybeThreadLoader(templateCompiler.isParallelSafe, this.extraThreadLoaderOptions),
187
+ maybeThreadLoader(babel.isParallelSafe, this.extraThreadLoaderOptions),
188
+ babelLoaderOptions(babel.majorVersion, variant, (0, path_1.join)(this.pathToVanillaApp, babel.filename), this.extraBabelLoaderOptions),
133
189
  {
134
190
  loader: require.resolve('@embroider/hbs-loader'),
135
- options: hbsOptions,
136
191
  },
137
192
  ]),
138
193
  },
@@ -151,10 +206,10 @@ const Webpack = (_a = class Webpack {
151
206
  ],
152
207
  },
153
208
  output: {
154
- path: (0, path_1.join)(this.outputPath, 'assets'),
155
- filename: `chunk.[chunkhash].js`,
156
- chunkFilename: `chunk.[chunkhash].js`,
157
- publicPath: publicAssetURL + 'assets/',
209
+ path: (0, path_1.join)(this.outputPath),
210
+ filename: `assets/chunk.[chunkhash].js`,
211
+ chunkFilename: `assets/chunk.[chunkhash].js`,
212
+ publicPath: publicAssetURL,
158
213
  },
159
214
  optimization: {
160
215
  splitChunks: {
@@ -183,7 +238,7 @@ const Webpack = (_a = class Webpack {
183
238
  return this.lastWebpack;
184
239
  }
185
240
  debug(`configuring webpack`);
186
- let config = this.variants.map(variant => (0, mergeWith_1.default)({}, this.configureWebpack(appInfo, variant), this.extraConfig, appendArrays));
241
+ let config = this.variants.map((variant, variantIndex) => (0, mergeWith_1.default)({}, this.configureWebpack(appInfo, variant, variantIndex), this.extraConfig, appendArrays));
187
242
  this.lastAppInfo = appInfo;
188
243
  return (this.lastWebpack = (0, webpack_1.default)(config));
189
244
  }
@@ -248,7 +303,7 @@ const Webpack = (_a = class Webpack {
248
303
  throw err;
249
304
  }
250
305
  }
251
- async writeFiles(stats, { entrypoints, otherAssets }) {
306
+ async writeFiles(stats, { entrypoints, otherAssets }, variantIndex) {
252
307
  // we're doing this ourselves because I haven't seen a webpack 4 HTML plugin
253
308
  // that handles multiple HTML entrypoints correctly.
254
309
  let written = new Set();
@@ -259,10 +314,12 @@ const Webpack = (_a = class Webpack {
259
314
  await this.provideErrorContext('needed by %s', [entrypoint.filename], async () => {
260
315
  for (let script of entrypoint.scripts) {
261
316
  if (!stats.entrypoints.has(script)) {
317
+ const mapping = [];
262
318
  try {
263
319
  // zero here means we always attribute passthrough scripts to the
264
320
  // first build variant
265
- stats.entrypoints.set(script, new Map([[0, [await this.writeScript(script, written, this.variants[0])]]]));
321
+ stats.entrypoints.set(script, new Map([[0, mapping]]));
322
+ mapping.push(await this.writeScript(script, written, this.variants[0]));
266
323
  }
267
324
  catch (err) {
268
325
  if (err.code === 'ENOENT' && err.path === (0, path_1.join)(this.pathToVanillaApp, script)) {
@@ -278,10 +335,12 @@ const Webpack = (_a = class Webpack {
278
335
  }
279
336
  for (let style of entrypoint.styles) {
280
337
  if (!stats.entrypoints.has(style)) {
338
+ const mapping = [];
281
339
  try {
282
340
  // zero here means we always attribute passthrough styles to the
283
341
  // first build variant
284
- stats.entrypoints.set(style, new Map([[0, [await this.writeStyle(style, written, this.variants[0])]]]));
342
+ stats.entrypoints.set(style, new Map([[0, mapping]]));
343
+ mapping.push(await this.writeStyle(style, written, this.variants[0]));
285
344
  }
286
345
  catch (err) {
287
346
  if (err.code === 'ENOENT' && err.path === (0, path_1.join)(this.pathToVanillaApp, style)) {
@@ -297,12 +356,18 @@ const Webpack = (_a = class Webpack {
297
356
  }
298
357
  });
299
358
  }
300
- for (let entrypoint of entrypoints) {
301
- (0, fs_extra_1.outputFileSync)((0, path_1.join)(this.outputPath, entrypoint.filename), entrypoint.render(stats), 'utf8');
302
- written.add(entrypoint.filename);
359
+ // we need to wait for both compilers before writing html entrypoint
360
+ await this.incrementBarrier();
361
+ // only the first variant should write it.
362
+ if (variantIndex === 0) {
363
+ for (let entrypoint of entrypoints) {
364
+ (0, fs_extra_1.outputFileSync)((0, path_1.join)(this.outputPath, entrypoint.filename), entrypoint.render(stats), 'utf8');
365
+ written.add(entrypoint.filename);
366
+ }
303
367
  }
304
368
  for (let relativePath of otherAssets) {
305
369
  if (!written.has(relativePath)) {
370
+ written.add(relativePath);
306
371
  await this.provideErrorContext(`while copying app's assets`, [], async () => {
307
372
  this.copyThrough(relativePath);
308
373
  });
@@ -327,44 +392,35 @@ const Webpack = (_a = class Webpack {
327
392
  fileParts.splice(fileParts.length - 1, 0, hash);
328
393
  return fileParts.join('.');
329
394
  }
330
- summarizeStats(multiStats) {
331
- let output = {
332
- entrypoints: new Map(),
333
- lazyBundles: new Map(),
334
- variants: this.variants,
335
- };
336
- for (let [variantIndex, variant] of this.variants.entries()) {
337
- let { entrypoints, chunks } = multiStats.stats[variantIndex].toJson({
338
- all: false,
339
- entrypoints: true,
340
- chunks: true,
341
- });
342
- // webpack's types are written rather loosely, implying that these two
343
- // properties may not be present. They really always are, as far as I can
344
- // tell, but we need to check here anyway to satisfy the type checker.
345
- if (!entrypoints) {
346
- throw new Error(`unexpected webpack output: no entrypoints`);
347
- }
348
- if (!chunks) {
349
- throw new Error(`unexpected webpack output: no chunks`);
395
+ summarizeStats(stats, variant, variantIndex) {
396
+ let output = this.bundleSummary;
397
+ let { entrypoints, chunks } = stats.toJson({
398
+ all: false,
399
+ entrypoints: true,
400
+ chunks: true,
401
+ });
402
+ // webpack's types are written rather loosely, implying that these two
403
+ // properties may not be present. They really always are, as far as I can
404
+ // tell, but we need to check here anyway to satisfy the type checker.
405
+ if (!entrypoints) {
406
+ throw new Error(`unexpected webpack output: no entrypoints`);
407
+ }
408
+ if (!chunks) {
409
+ throw new Error(`unexpected webpack output: no chunks`);
410
+ }
411
+ for (let id of Object.keys(entrypoints)) {
412
+ let { assets: entrypointAssets } = entrypoints[id];
413
+ if (!entrypointAssets) {
414
+ throw new Error(`unexpected webpack output: no entrypoint.assets`);
350
415
  }
351
- for (let id of Object.keys(entrypoints)) {
352
- let { assets: entrypointAssets } = entrypoints[id];
353
- if (!entrypointAssets) {
354
- throw new Error(`unexpected webpack output: no entrypoint.assets`);
355
- }
356
- (0, core_1.getOrCreate)(output.entrypoints, id, () => new Map()).set(variantIndex, entrypointAssets.map(asset => 'assets/' + asset.name));
357
- if (variant.runtime !== 'browser') {
358
- // in the browser we don't need to worry about lazy assets (they will be
359
- // handled automatically by webpack as needed), but in any other runtime
360
- // we need the ability to preload them
361
- output.lazyBundles.set(id, (0, flatMap_1.default)(chunks.filter(chunk => { var _a; return (_a = chunk.runtime) === null || _a === void 0 ? void 0 : _a.includes(id); }), chunk => chunk.files)
362
- .filter(file => !(entrypointAssets === null || entrypointAssets === void 0 ? void 0 : entrypointAssets.find(a => a.name === file)))
363
- .map(file => `assets/${file}`));
364
- }
416
+ (0, core_1.getOrCreate)(output.entrypoints, id, () => new Map()).set(variantIndex, entrypointAssets.map(asset => asset.name));
417
+ if (variant.runtime !== 'browser') {
418
+ // in the browser we don't need to worry about lazy assets (they will be
419
+ // handled automatically by webpack as needed), but in any other runtime
420
+ // we need the ability to preload them
421
+ output.lazyBundles.set(id, (0, flatMap_1.default)(chunks.filter(chunk => { var _a; return (_a = chunk.runtime) === null || _a === void 0 ? void 0 : _a.includes(id); }), chunk => chunk.files).filter(file => !(entrypointAssets === null || entrypointAssets === void 0 ? void 0 : entrypointAssets.find(a => a.name === file))));
365
422
  }
366
423
  }
367
- return output;
368
424
  }
369
425
  runWebpack(webpack) {
370
426
  return new Promise((resolve, reject) => {
@@ -405,14 +461,19 @@ const Webpack = (_a = class Webpack {
405
461
  setupStyleConfig(variant) {
406
462
  let cssLoader = {
407
463
  loader: 'css-loader',
408
- options: Object.assign({ url: true, import: true, modules: 'global' }, this.extraCssLoaderOptions),
464
+ options: {
465
+ url: true,
466
+ import: true,
467
+ modules: 'global',
468
+ ...this.extraCssLoaderOptions,
469
+ },
409
470
  };
410
471
  if (!variant.optimizeForProduction && variant.runtime === 'browser') {
411
472
  // in development builds that only need to work in the browser (not
412
473
  // fastboot), we can use style-loader because it's fast
413
474
  return {
414
475
  loaders: [
415
- { loader: 'style-loader', options: Object.assign({ injectType: 'styleTag' }, this.extraStyleLoaderOptions) },
476
+ { loader: 'style-loader', options: { injectType: 'styleTag', ...this.extraStyleLoaderOptions } },
416
477
  cssLoader,
417
478
  ],
418
479
  plugins: [],
@@ -508,9 +569,12 @@ function nonNullArray(array) {
508
569
  }
509
570
  function babelLoaderOptions(_majorVersion, variant, appBabelConfigPath, extraOptions) {
510
571
  const cacheDirectory = (0, core_1.getPackagerCacheDir)('webpack-babel-loader');
511
- const options = Object.assign({ variant,
572
+ const options = {
573
+ variant,
512
574
  appBabelConfigPath,
513
- cacheDirectory }, extraOptions);
575
+ cacheDirectory,
576
+ ...extraOptions,
577
+ };
514
578
  return {
515
579
  loader: 'babel-loader-8',
516
580
  options,
@@ -1 +1 @@
1
- {"version":3,"file":"ember-webpack.js","sourceRoot":"","sources":["ember-webpack.ts"],"names":[],"mappings":";AAAA;;;;;;;;;EASE;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,0CAUyB;AACzB,kEAAqD;AACrD,sDAAwF;AACxF,uCAA+G;AAC/G,+BAAoD;AACpD,6DAAqC;AACrC,iEAAyC;AACzC,6DAAqC;AACrC,sFAA2D;AAC3D,kDAA8B;AAC9B,+BAA8B;AAC9B,iDAA6D;AAE7D,oDAA4B;AAE5B,2EAAyD;AACzD,oEAA2C;AAE3C,MAAM,KAAK,GAAG,IAAA,eAAS,EAAC,iBAAiB,CAAC,CAAC;AAiB3C,gEAAgE;AAChE,SAAS,YAAY,CAAC,IAAa,EAAE,KAAc;IACjD,OAAO,CACL,IAAA,iBAAO,EAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;QAChC,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;AAED,+DAA+D;AAC/D,4EAA4E;AAC5E,0EAA0E;AAC1E,gBAAgB;AAChB,MAAM,OAAO,SAAiC,MAAM,OAAO;QAYzD,YACE,gBAAwB,EAChB,UAAkB,EAClB,QAAmB,EACnB,YAAmC,EAC3C,OAAiB;YAHT,eAAU,GAAV,UAAU,CAAQ;YAClB,aAAQ,GAAR,QAAQ,CAAW;YACnB,iBAAY,GAAZ,YAAY,CAAuB;YAXrC,qBAAgB,GAAuB,IAAI,GAAG,EAAE,CAAC;YAcvD,IAAI,CAAC,IAAA,mBAAe,EAAC,iBAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;gBAC/C,MAAM,IAAI,KAAK,CAAC,iEAAiE,iBAAO,CAAC,OAAO,EAAE,CAAC,CAAC;aACrG;YAED,IAAI,CAAC,gBAAgB,GAAG,IAAA,uBAAY,EAAC,gBAAgB,CAAC,CAAC;YACvD,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,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,KAAK;YACT,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YAChE,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QAEO,UAAU;YAChB,IAAI,IAAI,GAAG,IAAA,iBAAU,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7C,IAAI,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjD,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACzD,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,MAAM,EAAE;gBACpC,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;oBAChC,WAAW,CAAC,IAAI,CAAC,IAAI,qBAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;iBACpG;qBAAM;oBACL,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;iBAChC;aACF;YAED,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,CAAC;QAC9G,CAAC;QAEO,gBAAgB,CACtB,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAW,EACvF,OAAgB;YAEhB,IAAI,KAAK,GAA+B,EAAE,CAAC;YAC3C,KAAK,IAAI,UAAU,IAAI,WAAW,EAAE;gBAClC,KAAK,IAAI,UAAU,IAAI,UAAU,CAAC,OAAO,EAAE;oBACzC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC;iBACvC;aACF;YAED,IAAI,UAAU,GAAoB;gBAChC,oBAAoB,EAAE,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,CAAC;gBAC5E,OAAO;aACR,CAAC;YAEF,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAEtF,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,YAAY;gBACrB,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE;oBACN,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,QAAQ;4BACd,GAAG,EAAE,YAAY,CAAC;gCAChB,iBAAiB,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,wBAAwB,CAAC;gCACjF;oCACE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;oCAChD,OAAO,EAAE,UAAU;iCACpB;6BACF,CAAC;yBACH;wBACD;4BACE,iEAAiE;4BACjE,IAAI,EAAE,OAAO,CAAC,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;4BAC5D,GAAG,EAAE,YAAY,CAAC;gCAChB,iBAAiB,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,wBAAwB,CAAC;gCACtE,kBAAkB,CAChB,KAAK,CAAC,YAAY,EAClB,OAAO,EACP,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,EAC3C,IAAI,CAAC,uBAAuB,CAC7B;6BACF,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,EAAE,QAAQ,CAAC;oBACrC,QAAQ,EAAE,sBAAsB;oBAChC,aAAa,EAAE,sBAAsB;oBACrC,UAAU,EAAE,cAAc,GAAG,SAAS;iBACvC;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE;wBACX,MAAM,EAAE,KAAK;qBACd;iBACF;gBACD,OAAO,EAAE;oBACP,UAAU,EAAE,oBAAoB;iBACjC;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;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;gBACnF,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAChC,OAAO,IAAI,CAAC,WAAW,CAAC;aACzB;YACD,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC7B,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CACvC,IAAA,mBAAS,EAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CACvF,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;gBAClC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACzB,OAAO,MAAM,CAAC;aACf;YAED,yEAAyE;YACzE,sDAAsD;YACtD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,mDAAQ,QAAQ,uDAAU,gBAAgB,IAAE,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;gBACnC,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;oBACF,OAAO,GAAG,IAAA,uBAAY,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,CAAC,CAAC;iBAC9E;gBAAC,OAAO,GAAG,EAAE;oBACZ,wEAAwE;oBACxE,eAAe;iBAChB;gBACD,IAAI,OAAO,EAAE;oBACX,UAAU,CAAC,SAAS,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,wBAAwB,EAAE,CAAC;iBACnE;aACF;YACD,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACrF,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;gBACrC,IAAA,yBAAc,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC,EAAE,MAAM,CAAC,CAAC;gBACvE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;aACtC;YACD,OAAO,aAAa,CAAC;QACvB,CAAC;QAEO,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,OAAoB,EAAE,OAAgB;YAC5E,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;gBAClC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACnB,OAAO,KAAK,CAAC;aACd;YAED,MAAM,IAAI,GAAG,wDAAa,MAAM,GAAC,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;gBACF,OAAO,MAAM,EAAE,EAAE,CAAC;aACnB;YAAC,OAAO,GAAG,EAAE;gBACZ,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;aACX;QACH,CAAC;QAEO,KAAK,CAAC,UAAU,CAAC,KAAoB,EAAE,EAAE,WAAW,EAAE,WAAW,EAAW;YAClF,4EAA4E;YAC5E,oDAAoD;YAEpD,IAAI,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;YACrC,qEAAqE;YACrE,wEAAwE;YACxE,yBAAyB;YACzB,KAAK,IAAI,UAAU,IAAI,WAAW,EAAE;gBAClC,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;wBACrC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;4BAClC,IAAI;gCACF,iEAAiE;gCACjE,sBAAsB;gCACtB,KAAK,CAAC,WAAW,CAAC,GAAG,CACnB,MAAM,EACN,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5E,CAAC;6BACH;4BAAC,OAAO,GAAG,EAAE;gCACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE;oCAC7E,IAAI,CAAC,YAAY,CACf,eAAe,UAAU,CAAC,QAAQ,iBAAiB,MAAM;yCACtD,KAAK,CAAC,UAAG,CAAC;yCACV,IAAI,CACH,GAAG,CACJ,2FAA2F,CAC/F,CAAC;iCACH;qCAAM;oCACL,MAAM,GAAG,CAAC;iCACX;6BACF;yBACF;qBACF;oBACD,KAAK,IAAI,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE;wBACnC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;4BACjC,IAAI;gCACF,gEAAgE;gCAChE,sBAAsB;gCACtB,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;6BACzG;4BAAC,OAAO,GAAG,EAAE;gCACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE;oCAC5E,IAAI,CAAC,YAAY,CACf,eAAe,UAAU,CAAC,QAAQ,kCAAkC,KAAK;yCACtE,KAAK,CAAC,UAAG,CAAC;yCACV,IAAI,CACH,GAAG,CACJ,2FAA2F,CAC/F,CAAC;iCACH;qCAAM;oCACL,MAAM,GAAG,CAAC;iCACX;6BACF;yBACF;qBACF;gBACH,CAAC,CAAC,CAAC;aACJ;YAED,KAAK,IAAI,UAAU,IAAI,WAAW,EAAE;gBAClC,IAAA,yBAAc,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC7F,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;aAClC;YAED,KAAK,IAAI,YAAY,IAAI,WAAW,EAAE;gBACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;oBAC9B,MAAM,IAAI,CAAC,mBAAmB,CAAC,4BAA4B,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;wBAC1E,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;oBACjC,CAAC,CAAC,CAAC;iBACJ;aACF;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;gBACzF,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;aACjD;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,UAA8B;YACnD,IAAI,MAAM,GAAkB;gBAC1B,WAAW,EAAE,IAAI,GAAG,EAAE;gBACtB,WAAW,EAAE,IAAI,GAAG,EAAE;gBACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC;YACF,KAAK,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;gBAC3D,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;oBAClE,GAAG,EAAE,KAAK;oBACV,WAAW,EAAE,IAAI;oBACjB,MAAM,EAAE,IAAI;iBACb,CAAC,CAAC;gBAEH,sEAAsE;gBACtE,yEAAyE;gBACzE,sEAAsE;gBACtE,IAAI,CAAC,WAAW,EAAE;oBAChB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;iBAC9D;gBACD,IAAI,CAAC,MAAM,EAAE;oBACX,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;iBACzD;gBAED,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;oBACvC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;oBACnD,IAAI,CAAC,gBAAgB,EAAE;wBACrB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;qBACpE;oBAED,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,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CACtD,CAAC;oBACF,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE;wBACjC,wEAAwE;wBACxE,wEAAwE;wBACxE,sCAAsC;wBACtC,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;6BACE,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,CAAC;6BAC7D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,CACjC,CAAC;qBACH;iBACF;aACF;YACD,OAAO,MAAM,CAAC;QAChB,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;wBACF,IAAI,GAAG,EAAE;4BACP,IAAI,KAAK,EAAE;gCACT,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;6BACrC;4BACD,MAAM,GAAG,CAAC;yBACX;wBACD,IAAI,CAAC,KAAK,EAAE;4BACV,gEAAgE;4BAChE,4CAA4C;4BAC5C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;yBAC7C;wBACD,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE;4BACrB,4CAA4C;4BAC5C,IAAI,CAAC,YAAY,CACf,KAAK,CAAC,QAAQ,CAAC;gCACb,KAAK,EAAE,OAAO,CAAC,wBAAa,CAAC,MAAM,CAAC;6BACrC,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;yBACpF;wBACD,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE;4BACtD,IAAI,CAAC,YAAY,CACf,KAAK,CAAC,QAAQ,CAAC;gCACb,KAAK,EAAE,OAAO,CAAC,wBAAa,CAAC,MAAM,CAAC;6BACrC,CAAC,CACH,CAAC;yBACH;wBACD,OAAO,CAAC,KAAK,CAAC,CAAC;qBAChB;oBAAC,OAAO,CAAC,EAAE;wBACV,MAAM,CAAC,CAAC,CAAC,CAAC;qBACX;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAEO,gBAAgB,CAAC,OAAgB;YAIvC,IAAI,SAAS,GAAG;gBACd,MAAM,EAAE,YAAY;gBACpB,OAAO,kBACL,GAAG,EAAE,IAAI,EACT,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,QAAQ,IACd,IAAI,CAAC,qBAAqB,CAC9B;aACF,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,qBAAqB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE;gBACnE,mEAAmE;gBACnE,uDAAuD;gBACvD,OAAO;oBACL,OAAO,EAAE;wBACP,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,kBAAI,UAAU,EAAE,UAAU,IAAK,IAAI,CAAC,uBAAuB,CAAE,EAAE;wBAChG,SAAS;qBACV;oBACD,OAAO,EAAE,EAAE;iBACZ,CAAC;aACH;iBAAM;gBACL,+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,uBAAuB;4BACjC,aAAa,EAAE,uBAAuB;4BACtC,mEAAmE;4BACnE,+BAA+B;4BAC/B,EAAE;4BACF,iEAAiE;4BACjE,6CAA6C;4BAC7C,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,SAAS;yBACvC,CAAC;qBACH;iBACF,CAAC;aACH;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;gBAC7B,IAAI,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;aAClE;YAED,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBACf,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;aAC3G;YACD,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE;gBACtB,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;aACnG;YACD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;gBACrC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAEtF,sEAAsE;gBACtE,0EAA0E;gBAC1E,oBAAoB;gBACpB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC7D;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF;IAjeQ,aAAU,GAAG,oBAAqB;OAie1C,CAAC;AAwEO,0BAAO;AAtEhB,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,MAAM,CAAC,YAAwC;IACtD,8EAA8E;IAC9E,wEAAwE;IACxE,0EAA0E;IAC1E,OAAO;IACP,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,YAAY,KAAK,KAAK,EAAE;QACtD,OAAO,IAAI,CAAC;KACb;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,cAAuB,EAAE,YAAwC;IAC1F,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,YAAY,KAAK,KAAK,IAAI,CAAC,cAAc,EAAE;QACzE,OAAO,IAAI,CAAC;KACb;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;QAC3B,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAClC;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,kBAAkB,CACzB,aAAgB,EAChB,OAAgB,EAChB,kBAA0B,EAC1B,YAA4C;IAE5C,MAAM,cAAc,GAAG,IAAA,0BAAmB,EAAC,sBAAsB,CAAC,CAAC;IACnE,MAAM,OAAO,mBACX,OAAO;QACP,kBAAkB;QAClB,cAAc,IACX,YAAY,CAChB,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 {\n AppMeta,\n HTMLEntrypoint,\n BundleSummary,\n Packager,\n PackagerConstructor,\n Variant,\n getAppMeta,\n getPackagerCacheDir,\n getOrCreate,\n} from '@embroider/core';\nimport { tmpdir } from '@embroider/shared-internals';\nimport webpack, { Configuration, RuleSetUseItem, WebpackPluginInstance } from 'webpack';\nimport { readFileSync, outputFileSync, copySync, realpathSync, Stats, 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 { Options, BabelLoaderOptions } from './options';\nimport crypto from 'crypto';\nimport type { HbsLoaderConfig } from '@embroider/hbs-loader';\nimport semverSatisfies from 'semver/functions/satisfies';\nimport supportsColor from 'supports-color';\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 templateCompiler: AppMeta['template-compiler'];\n babel: AppMeta['babel'];\n rootURL: AppMeta['root-url'];\n publicAssetURL: string;\n resolvableExtensions: AppMeta['resolvable-extensions'];\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\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 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\n constructor(\n pathToVanillaApp: 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 this.pathToVanillaApp = realpathSync(pathToVanillaApp);\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 warmUp(this.extraThreadLoaderOptions);\n }\n\n async build(): Promise<void> {\n let appInfo = this.examineApp();\n let webpack = this.getWebpack(appInfo);\n let stats = this.summarizeStats(await this.runWebpack(webpack));\n await this.writeFiles(stats, appInfo);\n }\n\n private examineApp(): AppInfo {\n let meta = getAppMeta(this.pathToVanillaApp);\n let templateCompiler = meta['template-compiler'];\n let rootURL = meta['root-url'];\n let babel = meta['babel'];\n let resolvableExtensions = meta['resolvable-extensions'];\n let entrypoints = [];\n let otherAssets = [];\n let publicAssetURL = this.publicAssetURL || rootURL;\n\n for (let relativePath of meta.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 return { entrypoints, otherAssets, templateCompiler, babel, rootURL, resolvableExtensions, publicAssetURL };\n }\n\n private configureWebpack(\n { entrypoints, templateCompiler, babel, resolvableExtensions, publicAssetURL }: AppInfo,\n variant: Variant\n ): Configuration {\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 hbsOptions: HbsLoaderConfig = {\n templateCompilerFile: join(this.pathToVanillaApp, templateCompiler.filename),\n variant,\n };\n\n let { plugins: stylePlugins, loaders: styleLoaders } = this.setupStyleConfig(variant);\n\n return {\n mode: variant.optimizeForProduction ? 'production' : 'development',\n context: this.pathToVanillaApp,\n entry,\n performance: {\n hints: false,\n },\n plugins: stylePlugins,\n node: false,\n module: {\n rules: [\n {\n test: /\\.hbs$/,\n use: nonNullArray([\n maybeThreadLoader(templateCompiler.isParallelSafe, this.extraThreadLoaderOptions),\n {\n loader: require.resolve('@embroider/hbs-loader'),\n options: hbsOptions,\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 babelLoaderOptions(\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, 'assets'),\n filename: `chunk.[chunkhash].js`,\n chunkFilename: `chunk.[chunkhash].js`,\n publicPath: publicAssetURL + 'assets/',\n },\n optimization: {\n splitChunks: {\n chunks: 'all',\n },\n },\n resolve: {\n extensions: 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-8': require.resolve('@embroider/babel-loader-8'),\n 'css-loader': require.resolve('css-loader'),\n 'style-loader': require.resolve('style-loader'),\n },\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 return this.lastWebpack;\n }\n debug(`configuring webpack`);\n let config = this.variants.map(variant =>\n mergeWith({}, this.configureWebpack(appInfo, variant), 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) {\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 try {\n // zero here means we always attribute passthrough scripts to the\n // first build variant\n stats.entrypoints.set(\n script,\n new Map([[0, [await this.writeScript(script, written, this.variants[0])]]])\n );\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 try {\n // zero here means we always attribute passthrough styles to the\n // first build variant\n stats.entrypoints.set(style, new Map([[0, [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\n for (let entrypoint of entrypoints) {\n outputFileSync(join(this.outputPath, entrypoint.filename), entrypoint.render(stats), 'utf8');\n written.add(entrypoint.filename);\n }\n\n for (let relativePath of otherAssets) {\n if (!written.has(relativePath)) {\n await this.provideErrorContext(`while copying app's assets`, [], async () => {\n this.copyThrough(relativePath);\n });\n }\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(multiStats: webpack.MultiStats): BundleSummary {\n let output: BundleSummary = {\n entrypoints: new Map(),\n lazyBundles: new Map(),\n variants: this.variants,\n };\n for (let [variantIndex, variant] of this.variants.entries()) {\n let { entrypoints, chunks } = multiStats.stats[variantIndex].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 => 'assets/' + 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 )\n .filter(file => !entrypointAssets?.find(a => a.name === file))\n .map(file => `assets/${file}`)\n );\n }\n }\n }\n return output;\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 color: 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 color: 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: `chunk.[chunkhash].css`,\n chunkFilename: `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 error.message = error.message.replace(error.module.context, error.module.userRequest);\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 warmUp(extraOptions: object | false | undefined) {\n // We don't know if we'll be parallel-safe or not, but if the environment sets\n // JOBS to 0, or our extraOptions are set to false, we know we won't use\n // thread-loader, so no need to consume extra resources warming the worker\n // pool\n if (process.env.JOBS === '1' || extraOptions === false) {\n return null;\n }\n\n threadLoaderWarmup(Object.assign({}, threadLoaderOptions, extraOptions), [\n require.resolve('@embroider/hbs-loader'),\n require.resolve('@embroider/babel-loader-8'),\n ]);\n}\n\nfunction maybeThreadLoader(isParallelSafe: boolean, extraOptions: object | false | undefined) {\n if (process.env.JOBS === '0' || extraOptions === false || !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 babelLoaderOptions(\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-8',\n options,\n };\n}\n\nexport { Webpack };\n"]}
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 {\n AppMeta,\n HTMLEntrypoint,\n BundleSummary,\n Packager,\n PackagerConstructor,\n Variant,\n getAppMeta,\n getPackagerCacheDir,\n getOrCreate,\n} from '@embroider/core';\nimport { tmpdir } from '@embroider/shared-internals';\nimport webpack, { Configuration, RuleSetUseItem, WebpackPluginInstance } from 'webpack';\nimport { readFileSync, outputFileSync, copySync, realpathSync, Stats, 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 { Options, BabelLoaderOptions } from './options';\nimport crypto from 'crypto';\nimport semverSatisfies from 'semver/functions/satisfies';\nimport supportsColor from 'supports-color';\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 resolvableExtensions: AppMeta['resolvable-extensions'];\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 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 pathToVanillaApp: 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 this.pathToVanillaApp = realpathSync(pathToVanillaApp);\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['root-url'];\n let babel = meta['babel'];\n let resolvableExtensions = meta['resolvable-extensions'];\n let entrypoints = [];\n let otherAssets = [];\n let publicAssetURL = this.publicAssetURL || rootURL;\n\n for (let relativePath of meta.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 return { entrypoints, otherAssets, babel, rootURL, resolvableExtensions, publicAssetURL };\n }\n\n private configureWebpack(appInfo: AppInfo, variant: Variant, variantIndex: number): Configuration {\n const { entrypoints, babel, resolvableExtensions, publicAssetURL } = 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 return {\n mode: variant.optimizeForProduction ? 'production' : 'development',\n context: this.pathToVanillaApp,\n entry,\n performance: {\n hints: false,\n },\n plugins: [\n ...stylePlugins,\n compiler => {\n compiler.hooks.done.tapPromise('EmbroiderPlugin', async stats => {\n this.summarizeStats(stats, variant, variantIndex);\n await this.writeFiles(this.bundleSummary, appInfo, 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 babel.majorVersion,\n variant,\n join(this.pathToVanillaApp, babel.filename),\n this.extraBabelLoaderOptions\n ),\n {\n loader: require.resolve('@embroider/hbs-loader'),\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 babelLoaderOptions(\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: 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-8': require.resolve('@embroider/babel-loader-8'),\n 'css-loader': require.resolve('css-loader'),\n 'style-loader': require.resolve('style-loader'),\n },\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 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 outputFileSync(join(this.outputPath, entrypoint.filename), entrypoint.render(stats), 'utf8');\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 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 color: 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 color: 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: `chunk.[chunkhash].css`,\n chunkFilename: `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 error.message = error.message.replace(error.module.context, error.module.userRequest);\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 warmUp(extraOptions: object | false | undefined) {\n // We don't know if we'll be parallel-safe or not, but if the environment sets\n // JOBS to 0, or our extraOptions are set to false, we know we won't use\n // thread-loader, so no need to consume extra resources warming the worker\n // pool\n if (process.env.JOBS === '1' || extraOptions === false) {\n return null;\n }\n\n threadLoaderWarmup(Object.assign({}, threadLoaderOptions, extraOptions), [\n require.resolve('@embroider/hbs-loader'),\n require.resolve('@embroider/babel-loader-8'),\n ]);\n}\n\nfunction maybeThreadLoader(isParallelSafe: boolean, extraOptions: object | false | undefined) {\n if (process.env.JOBS === '0' || extraOptions === false || !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 babelLoaderOptions(\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-8',\n options,\n };\n}\n\nexport { Webpack };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["options.ts"],"names":[],"mappings":"","sourcesContent":["import { Configuration } from 'webpack';\n\n// [babel-loader](https://webpack.js.org/loaders/babel-loader/#options) specific options.\n// This does not include the babel configuration, which is pulled from the app, only the\n// additional options that `babel-loader` supports.\nexport interface BabelLoaderOptions {\n cacheDirectory?: boolean | string;\n cacheIdentifier?: string;\n cacheCompression?: boolean;\n customize?: string;\n}\n\nexport interface Options {\n webpackConfig: Configuration;\n\n // the base public URL for your assets in production. Use this when you want\n // to serve all your assets from a different origin (like a CDN) than your\n // actual index.html will be served on.\n //\n // This should be a URL ending in \"/\".\n publicAssetURL?: string;\n\n // [thread-loader](https://github.com/webpack-contrib/thread-loader) options.\n // If set to false, `thread-loader` will not be used. If set to an object, it\n // will be used to configure `thread-loader`. If not specified,\n // `thread-loader` will be used with a default configuration.\n //\n // Note that setting `JOBS=1` in the environment will also disable\n // `thread-loader`.\n threadLoaderOptions?: object | false;\n\n babelLoaderOptions?: BabelLoaderOptions;\n\n /**\n * Options for [`css-loader`](https://webpack.js.org/loaders/css-loader)\n */\n cssLoaderOptions?: object;\n\n /**\n * Options for [`style-loader`](https://webpack.js.org/loaders/style-loader/).\n *\n * Note that [`mini-css-extract-plugin`](https://webpack.js.org/plugins/mini-css-extract-plugin/)\n * is used instead of `style-loader` in production builds.\n */\n styleLoaderOptions?: object;\n}\n"]}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["options.ts"],"names":[],"mappings":"","sourcesContent":["import { Configuration } from 'webpack';\n\n// [babel-loader](https://webpack.js.org/loaders/babel-loader/#options) specific options.\n// This does not include the babel configuration, which is pulled from the app, only the\n// additional options that `babel-loader` supports.\nexport interface BabelLoaderOptions {\n cacheDirectory?: boolean | string;\n cacheIdentifier?: string;\n cacheCompression?: boolean;\n customize?: string;\n}\n\nexport interface Options {\n // This allows you to extend the webpack config in arbitrary ways. Your\n // changes will get applied on top of the defaults provided by\n // @embroider/webpack.\n webpackConfig: Configuration;\n\n // the base public URL for your assets in production. Use this when you want\n // to serve all your assets from a different origin (like a CDN) than your\n // actual index.html will be served on.\n //\n // This should be a URL ending in \"/\".\n //\n // For example:\n //\n // 1. If your build produces the file \"./dist/assets/chunk.123.js\"\n // 2. And you set publicAssetURL to \"https://cdn/\"\n // 3. Browsers will try to locate the file at\n // \"https://cdn/assets/chunk.123.js\".\n //\n // Notice that `publicAssetURL` gets applied relative to your whole built\n // application -- not a particular subdirectory like \"/assets\". If you don't\n // want a part of the path to show up in the public URLs, you should adjust the\n // actual locations of the output files to remove that directory. For example:\n //\n // webpackConfig: {\n // output: {\n // // This overrides our default of \"assets/chunk.[chunkhash].js\"\n // // to move the chunks to the root of the app, eliminating the assets subdirectory.\n // filename: `mychunk.[chunkhash].js`,\n // chunkFilename: `mychunk.[chunkhash].js`,\n // },\n // publicOutputPath: \"https://cdn/\",\n // },\n //\n // The above example will result in CDN URLs like \"https://cdn/mychunk.123.js\".\n //\n publicAssetURL?: string;\n\n // [thread-loader](https://github.com/webpack-contrib/thread-loader) options.\n // If set to false, `thread-loader` will not be used. If set to an object, it\n // will be used to configure `thread-loader`. If not specified,\n // `thread-loader` will be used with a default configuration.\n //\n // Note that setting `JOBS=1` in the environment will also disable\n // `thread-loader`.\n threadLoaderOptions?: object | false;\n\n babelLoaderOptions?: BabelLoaderOptions;\n\n /**\n * Options for [`css-loader`](https://webpack.js.org/loaders/css-loader)\n */\n cssLoaderOptions?: object;\n\n /**\n * Options for [`style-loader`](https://webpack.js.org/loaders/style-loader/).\n *\n * Note that [`mini-css-extract-plugin`](https://webpack.js.org/plugins/mini-css-extract-plugin/)\n * is used instead of `style-loader` in production builds.\n */\n styleLoaderOptions?: object;\n}\n"]}