@embroider/webpack 4.0.10-unstable.d3494fe → 4.0.10
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 +8 -8
- package/src/ember-webpack.js +51 -25
- package/src/ember-webpack.js.map +1 -1
- package/src/virtual-loader.d.ts +1 -1
- package/src/virtual-loader.js +1 -3
- package/src/virtual-loader.js.map +1 -1
- package/src/webpack-resolver-plugin.js +73 -112
- package/src/webpack-resolver-plugin.js.map +1 -1
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@embroider/webpack",
|
3
|
-
"version": "4.0.10
|
3
|
+
"version": "4.0.10",
|
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.
|
40
|
-
"@embroider/
|
41
|
-
"@embroider/
|
39
|
+
"@embroider/babel-loader-9": "3.1.1",
|
40
|
+
"@embroider/hbs-loader": "3.0.3",
|
41
|
+
"@embroider/shared-internals": "2.9.0"
|
42
42
|
},
|
43
43
|
"devDependencies": {
|
44
44
|
"@types/csso": "^3.5.1",
|
@@ -46,15 +46,15 @@
|
|
46
46
|
"@types/fs-extra": "^9.0.12",
|
47
47
|
"@types/lodash": "^4.14.170",
|
48
48
|
"@types/mini-css-extract-plugin": "^1.4.3",
|
49
|
-
"@types/node": "^
|
49
|
+
"@types/node": "^15.12.2",
|
50
50
|
"@types/semver": "^7.3.6",
|
51
|
-
"typescript": "^5.
|
51
|
+
"typescript": "^5.1.6",
|
52
52
|
"webpack": "^5.38.1",
|
53
|
-
"@embroider/core": "^3.5.1
|
53
|
+
"@embroider/core": "^3.5.1"
|
54
54
|
},
|
55
55
|
"peerDependencies": {
|
56
56
|
"webpack": "^5.0.0",
|
57
|
-
"@embroider/core": "^3.5.1
|
57
|
+
"@embroider/core": "^3.5.1"
|
58
58
|
},
|
59
59
|
"engines": {
|
60
60
|
"node": "12.* || 14.* || >= 16"
|
package/src/ember-webpack.js
CHANGED
@@ -9,6 +9,39 @@
|
|
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 () {
|
29
|
+
var ownKeys = function(o) {
|
30
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
31
|
+
var ar = [];
|
32
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
33
|
+
return ar;
|
34
|
+
};
|
35
|
+
return ownKeys(o);
|
36
|
+
};
|
37
|
+
return function (mod) {
|
38
|
+
if (mod && mod.__esModule) return mod;
|
39
|
+
var result = {};
|
40
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
41
|
+
__setModuleDefault(result, mod);
|
42
|
+
return result;
|
43
|
+
};
|
44
|
+
})();
|
12
45
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
13
46
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
14
47
|
};
|
@@ -32,15 +65,10 @@ const satisfies_1 = __importDefault(require("semver/functions/satisfies"));
|
|
32
65
|
const supports_color_1 = __importDefault(require("supports-color"));
|
33
66
|
const webpack_resolver_plugin_1 = require("./webpack-resolver-plugin");
|
34
67
|
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
|
-
}
|
41
68
|
// AppInfos are equal if they result in the same webpack config.
|
42
69
|
function equalAppInfo(left, right) {
|
43
|
-
return (left.
|
70
|
+
return ((0, isEqual_1.default)(left.babel, right.babel) &&
|
71
|
+
left.entrypoints.length === right.entrypoints.length &&
|
44
72
|
left.entrypoints.every((e, index) => (0, isEqual_1.default)(e.modules, right.entrypoints[index].modules)));
|
45
73
|
}
|
46
74
|
function createBarrier() {
|
@@ -122,9 +150,9 @@ const Webpack = (_a = class Webpack {
|
|
122
150
|
await this.runWebpack(webpack);
|
123
151
|
}
|
124
152
|
examineApp() {
|
125
|
-
|
126
|
-
let meta = getAppMeta(this.pathToVanillaApp);
|
153
|
+
let meta = (0, core_1.getAppMeta)(this.pathToVanillaApp);
|
127
154
|
let rootURL = meta['ember-addon']['root-url'];
|
155
|
+
let babel = meta['ember-addon']['babel'];
|
128
156
|
let entrypoints = [];
|
129
157
|
let otherAssets = [];
|
130
158
|
let publicAssetURL = this.publicAssetURL || rootURL;
|
@@ -137,10 +165,10 @@ const Webpack = (_a = class Webpack {
|
|
137
165
|
}
|
138
166
|
}
|
139
167
|
let resolverConfig = (0, fs_extra_1.readJSONSync)((0, path_1.join)((0, shared_internals_1.locateEmbroiderWorkingDir)(this.appRoot), 'resolver.json'));
|
140
|
-
return { entrypoints, otherAssets, rootURL, resolverConfig, publicAssetURL, packageName: meta.name };
|
168
|
+
return { entrypoints, otherAssets, babel, rootURL, resolverConfig, publicAssetURL, packageName: meta.name };
|
141
169
|
}
|
142
170
|
configureWebpack(appInfo, variant, variantIndex) {
|
143
|
-
const { entrypoints, publicAssetURL, packageName, resolverConfig } = appInfo;
|
171
|
+
const { entrypoints, babel, publicAssetURL, packageName, resolverConfig } = appInfo;
|
144
172
|
let entry = {};
|
145
173
|
for (let entrypoint of entrypoints) {
|
146
174
|
for (let moduleName of entrypoint.modules) {
|
@@ -148,7 +176,7 @@ const Webpack = (_a = class Webpack {
|
|
148
176
|
}
|
149
177
|
}
|
150
178
|
let { plugins: stylePlugins, loaders: styleLoaders } = this.setupStyleConfig(variant);
|
151
|
-
let babelLoaderOptions = makeBabelLoaderOptions(variant, (0, path_1.join)(this.
|
179
|
+
let babelLoaderOptions = makeBabelLoaderOptions(babel.majorVersion, variant, (0, path_1.join)(this.pathToVanillaApp, babel.filename), this.extraBabelLoaderOptions);
|
152
180
|
let babelLoaderPrefix = `babel-loader-9?${JSON.stringify(babelLoaderOptions.options)}!`;
|
153
181
|
return {
|
154
182
|
mode: variant.optimizeForProduction ? 'production' : 'development',
|
@@ -173,7 +201,7 @@ const Webpack = (_a = class Webpack {
|
|
173
201
|
{
|
174
202
|
test: /\.hbs$/,
|
175
203
|
use: nonNullArray([
|
176
|
-
maybeThreadLoader(this.extraThreadLoaderOptions),
|
204
|
+
maybeThreadLoader(babel.isParallelSafe, this.extraThreadLoaderOptions),
|
177
205
|
babelLoaderOptions,
|
178
206
|
{
|
179
207
|
loader: require.resolve('@embroider/hbs-loader'),
|
@@ -190,9 +218,11 @@ const Webpack = (_a = class Webpack {
|
|
190
218
|
]),
|
191
219
|
},
|
192
220
|
{
|
221
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
222
|
+
test: require((0, path_1.join)(this.pathToVanillaApp, babel.fileFilter)),
|
193
223
|
use: nonNullArray([
|
194
|
-
maybeThreadLoader(this.extraThreadLoaderOptions),
|
195
|
-
makeBabelLoaderOptions(variant, (0, path_1.join)(this.
|
224
|
+
maybeThreadLoader(babel.isParallelSafe, this.extraThreadLoaderOptions),
|
225
|
+
makeBabelLoaderOptions(babel.majorVersion, variant, (0, path_1.join)(this.pathToVanillaApp, babel.filename), this.extraBabelLoaderOptions),
|
196
226
|
]),
|
197
227
|
},
|
198
228
|
{
|
@@ -226,10 +256,6 @@ const Webpack = (_a = class Webpack {
|
|
226
256
|
'style-loader': require.resolve('style-loader'),
|
227
257
|
},
|
228
258
|
},
|
229
|
-
experiments: {
|
230
|
-
// this is needed because fasboot-only modules need to use await import()
|
231
|
-
topLevelAwait: true,
|
232
|
-
},
|
233
259
|
};
|
234
260
|
}
|
235
261
|
getWebpack(appInfo) {
|
@@ -255,7 +281,7 @@ const Webpack = (_a = class Webpack {
|
|
255
281
|
}
|
256
282
|
// loading these lazily here so they never load in non-production builds.
|
257
283
|
// The node cache will ensures we only load them once.
|
258
|
-
const [Terser, srcURL] = await Promise.all([
|
284
|
+
const [Terser, srcURL] = await Promise.all([Promise.resolve().then(() => __importStar(require('terser'))), Promise.resolve().then(() => __importStar(require('source-map-url')))]);
|
259
285
|
let inCode = (0, fs_extra_1.readFileSync)((0, path_1.join)(this.pathToVanillaApp, script), 'utf8');
|
260
286
|
let terserOpts = {};
|
261
287
|
let fileRelativeSourceMapURL;
|
@@ -275,7 +301,7 @@ const Webpack = (_a = class Webpack {
|
|
275
301
|
terserOpts.sourceMap = { content, url: fileRelativeSourceMapURL };
|
276
302
|
}
|
277
303
|
}
|
278
|
-
let { code: outCode, map: outMap } = await Terser.minify(inCode, terserOpts);
|
304
|
+
let { code: outCode, map: outMap } = await Terser.default.minify(inCode, terserOpts);
|
279
305
|
let finalFilename = this.getFingerprintedFilename(script, outCode);
|
280
306
|
(0, fs_extra_1.outputFileSync)((0, path_1.join)(this.outputPath, finalFilename), outCode);
|
281
307
|
written.add(script);
|
@@ -291,7 +317,7 @@ const Webpack = (_a = class Webpack {
|
|
291
317
|
written.add(style);
|
292
318
|
return style;
|
293
319
|
}
|
294
|
-
const csso = await
|
320
|
+
const csso = await Promise.resolve().then(() => __importStar(require('csso')));
|
295
321
|
const cssContent = (0, fs_extra_1.readFileSync)((0, path_1.join)(this.pathToVanillaApp, style), 'utf8');
|
296
322
|
const minifiedCss = csso.minify(cssContent).css;
|
297
323
|
let finalFilename = this.getFingerprintedFilename(style, minifiedCss);
|
@@ -574,8 +600,8 @@ function warmUp(extraOptions) {
|
|
574
600
|
require.resolve('@embroider/babel-loader-9'),
|
575
601
|
]);
|
576
602
|
}
|
577
|
-
function maybeThreadLoader(extraOptions) {
|
578
|
-
if (!canUseThreadLoader(extraOptions)) {
|
603
|
+
function maybeThreadLoader(isParallelSafe, extraOptions) {
|
604
|
+
if (!canUseThreadLoader(extraOptions) || !isParallelSafe) {
|
579
605
|
return null;
|
580
606
|
}
|
581
607
|
return {
|
@@ -596,7 +622,7 @@ function isCSS(filename) {
|
|
596
622
|
function nonNullArray(array) {
|
597
623
|
return array.filter(Boolean);
|
598
624
|
}
|
599
|
-
function makeBabelLoaderOptions(variant, appBabelConfigPath, extraOptions) {
|
625
|
+
function makeBabelLoaderOptions(_majorVersion, variant, appBabelConfigPath, extraOptions) {
|
600
626
|
const cacheDirectory = (0, core_1.getPackagerCacheDir)('webpack-babel-loader');
|
601
627
|
const options = {
|
602
628
|
variant,
|
package/src/ember-webpack.js.map
CHANGED
@@ -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 { BundleSummary, Packager, PackagerConstructor, Variant, ResolverOptions } from '@embroider/core';\nimport { HTMLEntrypoint, 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: string;\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 // @ts-expect-error webpack is not updated to work on @embroider/core 4.x\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 // It's not reasonable to make assumptions about order when doing CSS via modules\n ignoreOrder: true,\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"]}
|
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 };\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 // It's not reasonable to make assumptions about order when doing CSS via modules\n ignoreOrder: true,\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"]}
|
package/src/virtual-loader.d.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
import type { LoaderContext } from 'webpack';
|
2
|
-
export default function virtualLoader(this: LoaderContext<unknown>): string
|
2
|
+
export default function virtualLoader(this: LoaderContext<unknown>): string;
|
package/src/virtual-loader.js
CHANGED
@@ -19,9 +19,7 @@ function virtualLoader() {
|
|
19
19
|
}
|
20
20
|
let { resolver } = setup(appRoot);
|
21
21
|
this.resourcePath = filename;
|
22
|
-
|
23
|
-
let virtual = fixmeImplementVirtualResponse();
|
24
|
-
return (0, core_1.virtualContent)(virtual, resolver).src;
|
22
|
+
return (0, core_1.virtualContent)(filename, resolver);
|
25
23
|
}
|
26
24
|
throw new Error(`@embroider/webpack/src/virtual-loader received unexpected request: ${this.query}`);
|
27
25
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"virtual-loader.js","sourceRoot":"","sources":["virtual-loader.ts"],"names":[],"mappings":";;AAYA,
|
1
|
+
{"version":3,"file":"virtual-loader.js","sourceRoot":"","sources":["virtual-loader.ts"],"names":[],"mappings":";;AAYA,gCAaC;AAzBD,0CAAiE;AAGjE,IAAI,cAA0C,CAAC;AAE/C,SAAS,KAAK,CAAC,OAAe;IAC5B,IAAI,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,OAAO,MAAK,OAAO,EAAE,CAAC;QACxC,cAAc,GAAG,IAAI,qBAAc,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAwB,aAAa;IACnC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5D,IAAI,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,qEAAqE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC7B,OAAO,IAAA,qBAAc,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,sEAAsE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACtG,CAAC","sourcesContent":["import { ResolverLoader, virtualContent } from '@embroider/core';\nimport type { LoaderContext } from 'webpack';\n\nlet resolverLoader: ResolverLoader | undefined;\n\nfunction setup(appRoot: string): ResolverLoader {\n if (resolverLoader?.appRoot !== appRoot) {\n resolverLoader = new ResolverLoader(appRoot);\n }\n return resolverLoader;\n}\n\nexport default function virtualLoader(this: LoaderContext<unknown>) {\n if (typeof this.query === 'string' && this.query[0] === '?') {\n let params = new URLSearchParams(this.query);\n let filename = params.get('f');\n let appRoot = params.get('a');\n if (!filename || !appRoot) {\n throw new Error(`bug in @embroider/webpack virtual loader, cannot locate params in ${this.query}`);\n }\n let { resolver } = setup(appRoot);\n this.resourcePath = filename;\n return virtualContent(filename, resolver);\n }\n throw new Error(`@embroider/webpack/src/virtual-loader received unexpected request: ${this.query}`);\n}\n"]}
|
@@ -18,7 +18,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.EmbroiderPlugin = void 0;
|
19
19
|
const path_1 = require("path");
|
20
20
|
const core_1 = require("@embroider/core");
|
21
|
-
const core_2 = require("@embroider/core");
|
22
21
|
const assert_never_1 = __importDefault(require("assert-never"));
|
23
22
|
const escape_string_regexp_1 = __importDefault(require("escape-string-regexp"));
|
24
23
|
const virtualLoaderName = '@embroider/webpack/src/virtual-loader';
|
@@ -30,7 +29,7 @@ class EmbroiderPlugin {
|
|
30
29
|
_EmbroiderPlugin_resolver.set(this, void 0);
|
31
30
|
_EmbroiderPlugin_babelLoaderPrefix.set(this, void 0);
|
32
31
|
_EmbroiderPlugin_appRoot.set(this, void 0);
|
33
|
-
__classPrivateFieldSet(this, _EmbroiderPlugin_resolver, new
|
32
|
+
__classPrivateFieldSet(this, _EmbroiderPlugin_resolver, new core_1.Resolver(opts), "f");
|
34
33
|
__classPrivateFieldSet(this, _EmbroiderPlugin_babelLoaderPrefix, babelLoaderPrefix, "f");
|
35
34
|
__classPrivateFieldSet(this, _EmbroiderPlugin_appRoot, opts.appRoot, "f");
|
36
35
|
}
|
@@ -38,24 +37,20 @@ class EmbroiderPlugin {
|
|
38
37
|
__classPrivateFieldGet(this, _EmbroiderPlugin_instances, "m", _EmbroiderPlugin_addLoaderAlias).call(this, compiler, virtualLoaderName, virtualLoaderPath);
|
39
38
|
compiler.hooks.normalModuleFactory.tap('@embroider/webpack', nmf => {
|
40
39
|
let defaultResolve = getDefaultResolveHook(nmf.hooks.resolve.taps);
|
40
|
+
let adaptedResolve = getAdaptedResolve(defaultResolve);
|
41
41
|
nmf.hooks.resolve.tapAsync({ name: '@embroider/webpack', stage: 50 }, (state, callback) => {
|
42
|
-
let request =
|
43
|
-
resolveFunction: defaultResolve,
|
44
|
-
state,
|
45
|
-
babelLoaderPrefix: __classPrivateFieldGet(this, _EmbroiderPlugin_babelLoaderPrefix, "f"),
|
46
|
-
appRoot: __classPrivateFieldGet(this, _EmbroiderPlugin_appRoot, "f"),
|
47
|
-
});
|
42
|
+
let request = WebpackModuleRequest.from(state, __classPrivateFieldGet(this, _EmbroiderPlugin_babelLoaderPrefix, "f"), __classPrivateFieldGet(this, _EmbroiderPlugin_appRoot, "f"));
|
48
43
|
if (!request) {
|
49
44
|
defaultResolve(state, callback);
|
50
45
|
return;
|
51
46
|
}
|
52
|
-
__classPrivateFieldGet(this, _EmbroiderPlugin_resolver, "f").resolve(request).then(resolution => {
|
47
|
+
__classPrivateFieldGet(this, _EmbroiderPlugin_resolver, "f").resolve(request, adaptedResolve).then(resolution => {
|
53
48
|
switch (resolution.type) {
|
54
49
|
case 'not_found':
|
55
50
|
callback(resolution.err);
|
56
51
|
break;
|
57
52
|
case 'found':
|
58
|
-
callback(null,
|
53
|
+
callback(null, resolution.result);
|
59
54
|
break;
|
60
55
|
default:
|
61
56
|
throw (0, assert_never_1.default)(resolution);
|
@@ -89,123 +84,89 @@ function getDefaultResolveHook(taps) {
|
|
89
84
|
let { fn } = taps.find(t => t.name === 'NormalModuleFactory');
|
90
85
|
return fn;
|
91
86
|
}
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
87
|
+
// This converts the raw function we got out of webpack into the right interface
|
88
|
+
// for use by @embroider/core's resolver.
|
89
|
+
function getAdaptedResolve(defaultResolve) {
|
90
|
+
return function (request) {
|
91
|
+
return new Promise(resolve => {
|
92
|
+
defaultResolve(request.state, (err, value) => {
|
93
|
+
if (err) {
|
94
|
+
// unfortunately webpack doesn't let us distinguish between Not Found
|
95
|
+
// and other unexpected exceptions here.
|
96
|
+
resolve({ type: 'not_found', err });
|
97
|
+
}
|
98
|
+
else {
|
99
|
+
resolve({ type: 'found', result: value });
|
100
|
+
}
|
101
|
+
});
|
102
|
+
});
|
103
|
+
};
|
104
|
+
}
|
105
|
+
class WebpackModuleRequest {
|
106
|
+
static from(state, babelLoaderPrefix, appRoot) {
|
107
|
+
var _a, _b, _c;
|
108
|
+
// when the files emitted from our virtual-loader try to import things,
|
109
|
+
// those requests show in webpack as having no issuer. But we can see here
|
110
|
+
// which requests they are and adjust the issuer so they resolve things from
|
111
|
+
// the correct logical place.
|
112
|
+
if (!((_a = state.contextInfo) === null || _a === void 0 ? void 0 : _a.issuer) && Array.isArray(state.dependencies)) {
|
110
113
|
for (let dep of state.dependencies) {
|
111
|
-
let match = virtualRequestPattern.exec((
|
114
|
+
let match = virtualRequestPattern.exec((_b = dep._parentModule) === null || _b === void 0 ? void 0 : _b.userRequest);
|
112
115
|
if (match) {
|
113
|
-
|
114
|
-
|
116
|
+
state.contextInfo.issuer = new URLSearchParams(match.groups.query).get('f');
|
117
|
+
state.context = (0, path_1.dirname)(state.contextInfo.issuer);
|
115
118
|
}
|
116
119
|
}
|
117
120
|
}
|
118
|
-
if (
|
119
|
-
|
121
|
+
if (typeof state.request === 'string' &&
|
122
|
+
typeof state.context === 'string' &&
|
123
|
+
typeof ((_c = state.contextInfo) === null || _c === void 0 ? void 0 : _c.issuer) === 'string' &&
|
124
|
+
state.contextInfo.issuer !== '' &&
|
125
|
+
!state.request.includes(virtualLoaderName) && // prevents recursion on requests we have already sent to our virtual loader
|
126
|
+
!state.request.startsWith('!') // ignores internal webpack resolvers
|
127
|
+
) {
|
128
|
+
return new WebpackModuleRequest(babelLoaderPrefix, appRoot, state);
|
120
129
|
}
|
121
|
-
return {
|
122
|
-
initialState: {
|
123
|
-
specifier,
|
124
|
-
fromFile,
|
125
|
-
meta: state.contextInfo._embroiderMeta,
|
126
|
-
},
|
127
|
-
adapter: new WebpackRequestAdapter(resolveFunction, babelLoaderPrefix, appRoot, state),
|
128
|
-
};
|
129
130
|
}
|
130
|
-
constructor(
|
131
|
-
this.resolveFunction = resolveFunction;
|
131
|
+
constructor(babelLoaderPrefix, appRoot, state, isVirtual = false) {
|
132
132
|
this.babelLoaderPrefix = babelLoaderPrefix;
|
133
133
|
this.appRoot = appRoot;
|
134
|
-
this.
|
134
|
+
this.state = state;
|
135
|
+
this.isVirtual = isVirtual;
|
136
|
+
// these get copied here because we mutate the underlying state as we
|
137
|
+
// convert one request into the next, and it seems better for debuggability
|
138
|
+
// if the fields on the previous request don't change when you make a new
|
139
|
+
// one (although it is true that only the newest one has a a valid `state`
|
140
|
+
// that can actually be handed back to webpack)
|
141
|
+
this.specifier = state.request;
|
142
|
+
this.fromFile = state.contextInfo.issuer;
|
143
|
+
this.meta = state.contextInfo._embroiderMeta ? { ...state.contextInfo._embroiderMeta } : undefined;
|
135
144
|
}
|
136
|
-
|
137
|
-
|
145
|
+
alias(newSpecifier) {
|
146
|
+
this.state.request = newSpecifier;
|
147
|
+
return new WebpackModuleRequest(this.babelLoaderPrefix, this.appRoot, this.state);
|
138
148
|
}
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
// downstream code in Webpack we would still need to mutate the original
|
143
|
-
// ResolveData with the results (primarily the `createData`). So since we
|
144
|
-
// cannot avoid the mutation anyway, it seems best to do it earlier rather
|
145
|
-
// than later, so that everything from here forward is "normal".
|
146
|
-
//
|
147
|
-
// Technically a NormalModuleLoader `resolve` hook *can* directly return a
|
148
|
-
// Module, but that is not how the stock one works, and it would force us to
|
149
|
-
// copy more of Webpack's default behaviors into the inside of our hook. Like,
|
150
|
-
// we would need to invoke afterResolve, createModule, createModuleClass, etc,
|
151
|
-
// just like webpack does if we wanted to produce a Module directly.
|
152
|
-
//
|
153
|
-
// So the mutation strategy is much less intrusive, even though it means there
|
154
|
-
// is the risk of state leakage all over the place.
|
155
|
-
//
|
156
|
-
// We mitigate that risk by waiting until the last possible moment to apply
|
157
|
-
// our desired ModuleRequest fields to the ResolveData. This means that as
|
158
|
-
// requests evolve through the module-resolver they aren't actually all
|
159
|
-
// mutating the shared state. Only when a request is allowed to bubble back
|
160
|
-
// out to webpack does that happen.
|
161
|
-
toWebpackResolveData(request, virtualFileName) {
|
162
|
-
let specifier = request.specifier;
|
163
|
-
if (virtualFileName) {
|
164
|
-
let params = new URLSearchParams();
|
165
|
-
params.set('f', virtualFileName);
|
166
|
-
params.set('a', this.appRoot);
|
167
|
-
specifier = `${this.babelLoaderPrefix}${virtualLoaderName}?${params.toString()}!`;
|
149
|
+
rehome(newFromFile) {
|
150
|
+
if (this.fromFile === newFromFile) {
|
151
|
+
return this;
|
168
152
|
}
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
if (request.resolvedTo && typeof request.resolvedTo !== 'function') {
|
174
|
-
if (request.resolvedTo.type === 'found') {
|
175
|
-
this.originalState.createData = request.resolvedTo.result;
|
176
|
-
}
|
153
|
+
else {
|
154
|
+
this.state.contextInfo.issuer = newFromFile;
|
155
|
+
this.state.context = (0, path_1.dirname)(newFromFile);
|
156
|
+
return new WebpackModuleRequest(this.babelLoaderPrefix, this.appRoot, this.state);
|
177
157
|
}
|
178
|
-
return this.originalState;
|
179
158
|
}
|
180
|
-
|
181
|
-
let
|
182
|
-
|
183
|
-
|
159
|
+
virtualize(filename) {
|
160
|
+
let params = new URLSearchParams();
|
161
|
+
params.set('f', filename);
|
162
|
+
params.set('a', this.appRoot);
|
163
|
+
let next = this.alias(`${this.babelLoaderPrefix}${virtualLoaderName}?${params.toString()}!`);
|
164
|
+
next.isVirtual = true;
|
165
|
+
return next;
|
184
166
|
}
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
};
|
189
|
-
}
|
190
|
-
async resolve(request) {
|
191
|
-
return this._resolve(request, false);
|
192
|
-
}
|
193
|
-
async _resolve(request, virtualResponse) {
|
194
|
-
return await new Promise(resolve => this.resolveFunction(this.toWebpackResolveData(request, virtualResponse ? virtualResponse.specifier : request.specifier), err => {
|
195
|
-
if (err) {
|
196
|
-
// unfortunately webpack doesn't let us distinguish between Not Found
|
197
|
-
// and other unexpected exceptions here.
|
198
|
-
resolve({ type: 'not_found', err });
|
199
|
-
}
|
200
|
-
else {
|
201
|
-
resolve({
|
202
|
-
type: 'found',
|
203
|
-
result: this.originalState.createData,
|
204
|
-
virtual: virtualResponse,
|
205
|
-
filename: this.originalState.createData.resource,
|
206
|
-
});
|
207
|
-
}
|
208
|
-
}));
|
167
|
+
withMeta(meta) {
|
168
|
+
this.state.contextInfo._embroiderMeta = meta;
|
169
|
+
return new WebpackModuleRequest(this.babelLoaderPrefix, this.appRoot, this.state);
|
209
170
|
}
|
210
171
|
}
|
211
172
|
//# sourceMappingURL=webpack-resolver-plugin.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"webpack-resolver-plugin.js","sourceRoot":"","sources":["webpack-resolver-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, resolve } from 'path';\nimport { ModuleRequest, type VirtualResponse, type RequestAdapter, type Resolution } from '@embroider/core';\nimport { Resolver as EmbroiderResolver, ResolverOptions as EmbroiderResolverOptions } from '@embroider/core';\nimport type { Compiler, Module, ResolveData } from 'webpack';\nimport assertNever from 'assert-never';\nimport escapeRegExp from 'escape-string-regexp';\n\nexport { EmbroiderResolverOptions as Options };\n\nconst virtualLoaderName = '@embroider/webpack/src/virtual-loader';\nconst virtualLoaderPath = resolve(__dirname, './virtual-loader.js');\nconst virtualRequestPattern = new RegExp(`${escapeRegExp(virtualLoaderPath)}\\\\?(?<query>.+)!`);\n\nexport class EmbroiderPlugin {\n #resolver: EmbroiderResolver;\n #babelLoaderPrefix: string;\n #appRoot: string;\n\n constructor(opts: EmbroiderResolverOptions, babelLoaderPrefix: string) {\n this.#resolver = new EmbroiderResolver(opts);\n this.#babelLoaderPrefix = babelLoaderPrefix;\n this.#appRoot = opts.appRoot;\n }\n\n #addLoaderAlias(compiler: Compiler, name: string, alias: string) {\n let { resolveLoader } = compiler.options;\n if (Array.isArray(resolveLoader.alias)) {\n resolveLoader.alias.push({ name, alias });\n } else if (resolveLoader.alias) {\n resolveLoader.alias[name] = alias;\n } else {\n resolveLoader.alias = {\n [name]: alias,\n };\n }\n }\n\n apply(compiler: Compiler) {\n this.#addLoaderAlias(compiler, virtualLoaderName, virtualLoaderPath);\n\n compiler.hooks.normalModuleFactory.tap('@embroider/webpack', nmf => {\n let defaultResolve = getDefaultResolveHook(nmf.hooks.resolve.taps);\n\n nmf.hooks.resolve.tapAsync(\n { name: '@embroider/webpack', stage: 50 },\n (state: ExtendedResolveData, callback: CB) => {\n let request = ModuleRequest.create(WebpackRequestAdapter.create, {\n resolveFunction: defaultResolve,\n state,\n babelLoaderPrefix: this.#babelLoaderPrefix,\n appRoot: this.#appRoot,\n });\n if (!request) {\n defaultResolve(state, callback);\n return;\n }\n\n this.#resolver.resolve(request).then(\n resolution => {\n switch (resolution.type) {\n case 'not_found':\n callback(resolution.err);\n break;\n case 'found':\n callback(null, undefined);\n break;\n default:\n throw assertNever(resolution);\n }\n },\n err => callback(err)\n );\n }\n );\n });\n }\n}\n\ninterface CB {\n (err: null, result: Module | undefined): void;\n (err: Error | null): void;\n}\ntype DefaultResolve = (state: ResolveData, callback: CB) => void;\n\n// Despite being absolutely riddled with way-too-powerful tap points,\n// webpack still doesn't succeed in making it possible to provide a\n// fallback to the default resolve hook in the NormalModuleFactory. So\n// instead we will find the default behavior and call it from our own tap,\n// giving us a chance to handle its failures.\nfunction getDefaultResolveHook(taps: { name: string; fn: Function }[]): DefaultResolve {\n let { fn } = taps.find(t => t.name === 'NormalModuleFactory')!;\n return fn as DefaultResolve;\n}\n\ntype ExtendedResolveData = ResolveData & {\n contextInfo: ResolveData['contextInfo'] & { _embroiderMeta?: Record<string, any> };\n};\n\ntype WebpackResolution = Resolution<ResolveData['createData'], null | Error>;\n\nclass WebpackRequestAdapter implements RequestAdapter<WebpackResolution> {\n static create({\n resolveFunction,\n state,\n babelLoaderPrefix,\n appRoot,\n }: {\n resolveFunction: DefaultResolve;\n state: ExtendedResolveData;\n babelLoaderPrefix: string;\n appRoot: string;\n }) {\n let specifier = state.request;\n if (\n specifier.includes(virtualLoaderName) || // prevents recursion on requests we have already sent to our virtual loader\n specifier.startsWith('!') // ignores internal webpack resolvers\n ) {\n return;\n }\n\n let fromFile: string | undefined;\n if (state.contextInfo.issuer) {\n fromFile = state.contextInfo.issuer;\n } else {\n // when the files emitted from our virtual-loader try to import things,\n // those requests show in webpack as having no issuer. But we can see here\n // which requests they are and adjust the issuer so they resolve things from\n // the correct logical place.\n for (let dep of state.dependencies) {\n let match = virtualRequestPattern.exec((dep as any)._parentModule?.userRequest);\n if (match) {\n fromFile = new URLSearchParams(match.groups!.query).get('f')!;\n break;\n }\n }\n }\n if (!fromFile) {\n return;\n }\n\n return {\n initialState: {\n specifier,\n fromFile,\n meta: state.contextInfo._embroiderMeta,\n },\n adapter: new WebpackRequestAdapter(resolveFunction, babelLoaderPrefix, appRoot, state),\n };\n }\n\n private constructor(\n private resolveFunction: DefaultResolve,\n private babelLoaderPrefix: string,\n private appRoot: string,\n private originalState: ExtendedResolveData\n ) {}\n\n get debugType() {\n return 'webpack';\n }\n\n // Webpack mostly relies on mutation to adjust requests. We could create a\n // whole new ResolveData instead, and that would allow defaultResolving to\n // happen, but for the output of that process to actually affect the\n // downstream code in Webpack we would still need to mutate the original\n // ResolveData with the results (primarily the `createData`). So since we\n // cannot avoid the mutation anyway, it seems best to do it earlier rather\n // than later, so that everything from here forward is \"normal\".\n //\n // Technically a NormalModuleLoader `resolve` hook *can* directly return a\n // Module, but that is not how the stock one works, and it would force us to\n // copy more of Webpack's default behaviors into the inside of our hook. Like,\n // we would need to invoke afterResolve, createModule, createModuleClass, etc,\n // just like webpack does if we wanted to produce a Module directly.\n //\n // So the mutation strategy is much less intrusive, even though it means there\n // is the risk of state leakage all over the place.\n //\n // We mitigate that risk by waiting until the last possible moment to apply\n // our desired ModuleRequest fields to the ResolveData. This means that as\n // requests evolve through the module-resolver they aren't actually all\n // mutating the shared state. Only when a request is allowed to bubble back\n // out to webpack does that happen.\n toWebpackResolveData(\n request: ModuleRequest<WebpackResolution>,\n virtualFileName: string | undefined\n ): ExtendedResolveData {\n let specifier = request.specifier;\n if (virtualFileName) {\n let params = new URLSearchParams();\n params.set('f', virtualFileName);\n params.set('a', this.appRoot);\n specifier = `${this.babelLoaderPrefix}${virtualLoaderName}?${params.toString()}!`;\n }\n\n this.originalState.request = specifier;\n this.originalState.context = dirname(request.fromFile);\n this.originalState.contextInfo.issuer = request.fromFile;\n this.originalState.contextInfo._embroiderMeta = request.meta;\n if (request.resolvedTo && typeof request.resolvedTo !== 'function') {\n if (request.resolvedTo.type === 'found') {\n this.originalState.createData = request.resolvedTo.result;\n }\n }\n return this.originalState;\n }\n\n notFoundResponse(request: ModuleRequest<WebpackResolution>): WebpackResolution {\n let err = new Error(`module not found ${request.specifier}`);\n (err as any).code = 'MODULE_NOT_FOUND';\n return { type: 'not_found', err };\n }\n\n virtualResponse(\n request: ModuleRequest<WebpackResolution>,\n virtual: VirtualResponse\n ): () => Promise<WebpackResolution> {\n return () => {\n return this._resolve(request, virtual);\n };\n }\n\n async resolve(request: ModuleRequest<WebpackResolution>): Promise<WebpackResolution> {\n return this._resolve(request, false);\n }\n\n async _resolve(\n request: ModuleRequest<WebpackResolution>,\n virtualResponse: VirtualResponse | false\n ): Promise<WebpackResolution> {\n return await new Promise(resolve =>\n this.resolveFunction(\n this.toWebpackResolveData(request, virtualResponse ? virtualResponse.specifier : request.specifier),\n err => {\n if (err) {\n // unfortunately webpack doesn't let us distinguish between Not Found\n // and other unexpected exceptions here.\n resolve({ type: 'not_found', err });\n } else {\n resolve({\n type: 'found',\n result: this.originalState.createData,\n virtual: virtualResponse,\n filename: this.originalState.createData.resource!,\n });\n }\n }\n )\n );\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"webpack-resolver-plugin.js","sourceRoot":"","sources":["webpack-resolver-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, resolve } from 'path';\nimport type { ModuleRequest, ResolverFunction, Resolution } from '@embroider/core';\nimport { Resolver as EmbroiderResolver, ResolverOptions as EmbroiderResolverOptions } from '@embroider/core';\nimport type { Compiler, Module } from 'webpack';\nimport assertNever from 'assert-never';\nimport escapeRegExp from 'escape-string-regexp';\n\nexport { EmbroiderResolverOptions as Options };\n\nconst virtualLoaderName = '@embroider/webpack/src/virtual-loader';\nconst virtualLoaderPath = resolve(__dirname, './virtual-loader.js');\nconst virtualRequestPattern = new RegExp(`${escapeRegExp(virtualLoaderPath)}\\\\?(?<query>.+)!`);\n\nexport class EmbroiderPlugin {\n #resolver: EmbroiderResolver;\n #babelLoaderPrefix: string;\n #appRoot: string;\n\n constructor(opts: EmbroiderResolverOptions, babelLoaderPrefix: string) {\n this.#resolver = new EmbroiderResolver(opts);\n this.#babelLoaderPrefix = babelLoaderPrefix;\n this.#appRoot = opts.appRoot;\n }\n\n #addLoaderAlias(compiler: Compiler, name: string, alias: string) {\n let { resolveLoader } = compiler.options;\n if (Array.isArray(resolveLoader.alias)) {\n resolveLoader.alias.push({ name, alias });\n } else if (resolveLoader.alias) {\n resolveLoader.alias[name] = alias;\n } else {\n resolveLoader.alias = {\n [name]: alias,\n };\n }\n }\n\n apply(compiler: Compiler) {\n this.#addLoaderAlias(compiler, virtualLoaderName, virtualLoaderPath);\n\n compiler.hooks.normalModuleFactory.tap('@embroider/webpack', nmf => {\n let defaultResolve = getDefaultResolveHook(nmf.hooks.resolve.taps);\n let adaptedResolve = getAdaptedResolve(defaultResolve);\n\n nmf.hooks.resolve.tapAsync({ name: '@embroider/webpack', stage: 50 }, (state: unknown, callback: CB) => {\n let request = WebpackModuleRequest.from(state, this.#babelLoaderPrefix, this.#appRoot);\n if (!request) {\n defaultResolve(state, callback);\n return;\n }\n\n this.#resolver.resolve(request, adaptedResolve).then(\n resolution => {\n switch (resolution.type) {\n case 'not_found':\n callback(resolution.err);\n break;\n case 'found':\n callback(null, resolution.result);\n break;\n default:\n throw assertNever(resolution);\n }\n },\n err => callback(err)\n );\n });\n });\n }\n}\n\ntype CB = (err: null | Error, result?: Module | undefined) => void;\ntype DefaultResolve = (state: unknown, callback: CB) => void;\n\n// Despite being absolutely riddled with way-too-powerful tap points,\n// webpack still doesn't succeed in making it possible to provide a\n// fallback to the default resolve hook in the NormalModuleFactory. So\n// instead we will find the default behavior and call it from our own tap,\n// giving us a chance to handle its failures.\nfunction getDefaultResolveHook(taps: { name: string; fn: Function }[]): DefaultResolve {\n let { fn } = taps.find(t => t.name === 'NormalModuleFactory')!;\n return fn as DefaultResolve;\n}\n\n// This converts the raw function we got out of webpack into the right interface\n// for use by @embroider/core's resolver.\nfunction getAdaptedResolve(\n defaultResolve: DefaultResolve\n): ResolverFunction<WebpackModuleRequest, Resolution<Module, null | Error>> {\n return function (request: WebpackModuleRequest): Promise<Resolution<Module, null | Error>> {\n return new Promise(resolve => {\n defaultResolve(request.state, (err, value) => {\n if (err) {\n // unfortunately webpack doesn't let us distinguish between Not Found\n // and other unexpected exceptions here.\n resolve({ type: 'not_found', err });\n } else {\n resolve({ type: 'found', result: value! });\n }\n });\n });\n };\n}\n\nclass WebpackModuleRequest implements ModuleRequest {\n readonly specifier: string;\n readonly fromFile: string;\n readonly meta: Record<string, any> | undefined;\n\n static from(state: any, babelLoaderPrefix: string, appRoot: string): WebpackModuleRequest | undefined {\n // when the files emitted from our virtual-loader try to import things,\n // those requests show in webpack as having no issuer. But we can see here\n // which requests they are and adjust the issuer so they resolve things from\n // the correct logical place.\n if (!state.contextInfo?.issuer && Array.isArray(state.dependencies)) {\n for (let dep of state.dependencies) {\n let match = virtualRequestPattern.exec(dep._parentModule?.userRequest);\n if (match) {\n state.contextInfo.issuer = new URLSearchParams(match.groups!.query).get('f');\n state.context = dirname(state.contextInfo.issuer);\n }\n }\n }\n\n if (\n typeof state.request === 'string' &&\n typeof state.context === 'string' &&\n typeof state.contextInfo?.issuer === 'string' &&\n state.contextInfo.issuer !== '' &&\n !state.request.includes(virtualLoaderName) && // prevents recursion on requests we have already sent to our virtual loader\n !state.request.startsWith('!') // ignores internal webpack resolvers\n ) {\n return new WebpackModuleRequest(babelLoaderPrefix, appRoot, state);\n }\n }\n\n constructor(\n private babelLoaderPrefix: string,\n private appRoot: string,\n public state: {\n request: string;\n context: string;\n contextInfo: {\n issuer: string;\n _embroiderMeta?: Record<string, any> | undefined;\n };\n },\n public isVirtual = false\n ) {\n // these get copied here because we mutate the underlying state as we\n // convert one request into the next, and it seems better for debuggability\n // if the fields on the previous request don't change when you make a new\n // one (although it is true that only the newest one has a a valid `state`\n // that can actually be handed back to webpack)\n this.specifier = state.request;\n this.fromFile = state.contextInfo.issuer;\n this.meta = state.contextInfo._embroiderMeta ? { ...state.contextInfo._embroiderMeta } : undefined;\n }\n\n alias(newSpecifier: string) {\n this.state.request = newSpecifier;\n return new WebpackModuleRequest(this.babelLoaderPrefix, this.appRoot, this.state) as this;\n }\n rehome(newFromFile: string) {\n if (this.fromFile === newFromFile) {\n return this;\n } else {\n this.state.contextInfo.issuer = newFromFile;\n this.state.context = dirname(newFromFile);\n return new WebpackModuleRequest(this.babelLoaderPrefix, this.appRoot, this.state) as this;\n }\n }\n virtualize(filename: string) {\n let params = new URLSearchParams();\n params.set('f', filename);\n params.set('a', this.appRoot);\n let next = this.alias(`${this.babelLoaderPrefix}${virtualLoaderName}?${params.toString()}!`);\n next.isVirtual = true;\n return next;\n }\n withMeta(meta: Record<string, any> | undefined): this {\n this.state.contextInfo._embroiderMeta = meta;\n return new WebpackModuleRequest(this.babelLoaderPrefix, this.appRoot, this.state) as this;\n }\n}\n"]}
|