@embroider/webpack 4.0.9-unstable.3e8dbe3 → 4.0.9-unstable.48f6e51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@embroider/webpack",
|
3
|
-
"version": "4.0.9-unstable.
|
3
|
+
"version": "4.0.9-unstable.48f6e51",
|
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/
|
40
|
-
"@embroider/hbs-loader": "3.0.4-unstable.
|
41
|
-
"@embroider/
|
39
|
+
"@embroider/shared-internals": "2.8.2-unstable.48f6e51",
|
40
|
+
"@embroider/hbs-loader": "3.0.4-unstable.48f6e51",
|
41
|
+
"@embroider/babel-loader-9": "3.1.2-unstable.48f6e51"
|
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": "^22.9.3",
|
50
50
|
"@types/semver": "^7.3.6",
|
51
51
|
"typescript": "^5.4.5",
|
52
52
|
"webpack": "^5.38.1",
|
53
|
-
"@embroider/core": "^3.4.20-unstable.
|
53
|
+
"@embroider/core": "^3.4.20-unstable.48f6e51"
|
54
54
|
},
|
55
55
|
"peerDependencies": {
|
56
56
|
"webpack": "^5.0.0",
|
57
|
-
"@embroider/core": "^3.4.20-unstable.
|
57
|
+
"@embroider/core": "^3.4.20-unstable.48f6e51"
|
58
58
|
},
|
59
59
|
"engines": {
|
60
60
|
"node": "12.* || 14.* || >= 16"
|
@@ -18,6 +18,7 @@ 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");
|
21
22
|
const assert_never_1 = __importDefault(require("assert-never"));
|
22
23
|
const escape_string_regexp_1 = __importDefault(require("escape-string-regexp"));
|
23
24
|
const virtualLoaderName = '@embroider/webpack/src/virtual-loader';
|
@@ -29,7 +30,7 @@ class EmbroiderPlugin {
|
|
29
30
|
_EmbroiderPlugin_resolver.set(this, void 0);
|
30
31
|
_EmbroiderPlugin_babelLoaderPrefix.set(this, void 0);
|
31
32
|
_EmbroiderPlugin_appRoot.set(this, void 0);
|
32
|
-
__classPrivateFieldSet(this, _EmbroiderPlugin_resolver, new
|
33
|
+
__classPrivateFieldSet(this, _EmbroiderPlugin_resolver, new core_2.Resolver(opts), "f");
|
33
34
|
__classPrivateFieldSet(this, _EmbroiderPlugin_babelLoaderPrefix, babelLoaderPrefix, "f");
|
34
35
|
__classPrivateFieldSet(this, _EmbroiderPlugin_appRoot, opts.appRoot, "f");
|
35
36
|
}
|
@@ -38,7 +39,12 @@ class EmbroiderPlugin {
|
|
38
39
|
compiler.hooks.normalModuleFactory.tap('@embroider/webpack', nmf => {
|
39
40
|
let defaultResolve = getDefaultResolveHook(nmf.hooks.resolve.taps);
|
40
41
|
nmf.hooks.resolve.tapAsync({ name: '@embroider/webpack', stage: 50 }, (state, callback) => {
|
41
|
-
let request =
|
42
|
+
let request = core_1.ModuleRequest.create(WebpackRequestAdapter.create, {
|
43
|
+
resolveFunction: defaultResolve,
|
44
|
+
state,
|
45
|
+
babelLoaderPrefix: __classPrivateFieldGet(this, _EmbroiderPlugin_babelLoaderPrefix, "f"),
|
46
|
+
appRoot: __classPrivateFieldGet(this, _EmbroiderPlugin_appRoot, "f"),
|
47
|
+
});
|
42
48
|
if (!request) {
|
43
49
|
defaultResolve(state, callback);
|
44
50
|
return;
|
@@ -84,8 +90,8 @@ function getDefaultResolveHook(taps) {
|
|
84
90
|
let { fn } = taps.find(t => t.name === 'NormalModuleFactory');
|
85
91
|
return fn;
|
86
92
|
}
|
87
|
-
class
|
88
|
-
static
|
93
|
+
class WebpackRequestAdapter {
|
94
|
+
static create({ resolveFunction, state, babelLoaderPrefix, appRoot, }) {
|
89
95
|
var _a;
|
90
96
|
let specifier = state.request;
|
91
97
|
if (specifier.includes(virtualLoaderName) || // prevents recursion on requests we have already sent to our virtual loader
|
@@ -113,18 +119,19 @@ class WebpackModuleRequest {
|
|
113
119
|
if (!fromFile) {
|
114
120
|
return;
|
115
121
|
}
|
116
|
-
return
|
122
|
+
return {
|
123
|
+
initialState: {
|
124
|
+
specifier,
|
125
|
+
fromFile,
|
126
|
+
meta: state.contextInfo._embroiderMeta,
|
127
|
+
},
|
128
|
+
adapter: new WebpackRequestAdapter(resolveFunction, babelLoaderPrefix, appRoot, state),
|
129
|
+
};
|
117
130
|
}
|
118
|
-
constructor(resolveFunction, babelLoaderPrefix, appRoot,
|
131
|
+
constructor(resolveFunction, babelLoaderPrefix, appRoot, originalState) {
|
119
132
|
this.resolveFunction = resolveFunction;
|
120
133
|
this.babelLoaderPrefix = babelLoaderPrefix;
|
121
134
|
this.appRoot = appRoot;
|
122
|
-
this.specifier = specifier;
|
123
|
-
this.fromFile = fromFile;
|
124
|
-
this.meta = meta;
|
125
|
-
this.isVirtual = isVirtual;
|
126
|
-
this.isNotFound = isNotFound;
|
127
|
-
this.resolvedTo = resolvedTo;
|
128
135
|
this.originalState = originalState;
|
129
136
|
}
|
130
137
|
get debugType() {
|
@@ -152,54 +159,40 @@ class WebpackModuleRequest {
|
|
152
159
|
// requests evolve through the module-resolver they aren't actually all
|
153
160
|
// mutating the shared state. Only when a request is allowed to bubble back
|
154
161
|
// out to webpack does that happen.
|
155
|
-
toWebpackResolveData() {
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
162
|
+
toWebpackResolveData(request, virtualFileName) {
|
163
|
+
let specifier = request.specifier;
|
164
|
+
if (virtualFileName) {
|
165
|
+
let params = new URLSearchParams();
|
166
|
+
params.set('f', virtualFileName);
|
167
|
+
params.set('a', this.appRoot);
|
168
|
+
specifier = `${this.babelLoaderPrefix}${virtualLoaderName}?${params.toString()}!`;
|
169
|
+
}
|
170
|
+
this.originalState.request = specifier;
|
171
|
+
this.originalState.context = (0, path_1.dirname)(request.fromFile);
|
172
|
+
this.originalState.contextInfo.issuer = request.fromFile;
|
173
|
+
this.originalState.contextInfo._embroiderMeta = request.meta;
|
174
|
+
if (request.resolvedTo && typeof request.resolvedTo !== 'function') {
|
175
|
+
if (request.resolvedTo.type === 'found') {
|
176
|
+
this.originalState.createData = request.resolvedTo.result;
|
163
177
|
}
|
164
178
|
}
|
165
179
|
return this.originalState;
|
166
180
|
}
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
}
|
171
|
-
return new WebpackModuleRequest(this.resolveFunction, this.babelLoaderPrefix, this.appRoot, newSpecifier, this.fromFile, this.meta, this.isVirtual, false, undefined, this.originalState);
|
172
|
-
}
|
173
|
-
rehome(newFromFile) {
|
174
|
-
if (this.fromFile === newFromFile) {
|
175
|
-
return this;
|
176
|
-
}
|
177
|
-
return new WebpackModuleRequest(this.resolveFunction, this.babelLoaderPrefix, this.appRoot, this.specifier, newFromFile, this.meta, this.isVirtual, false, undefined, this.originalState);
|
178
|
-
}
|
179
|
-
virtualize(filename) {
|
180
|
-
let params = new URLSearchParams();
|
181
|
-
params.set('f', filename);
|
182
|
-
params.set('a', this.appRoot);
|
183
|
-
return new WebpackModuleRequest(this.resolveFunction, this.babelLoaderPrefix, this.appRoot, `${this.babelLoaderPrefix}${virtualLoaderName}?${params.toString()}!`, this.fromFile, this.meta, true, false, undefined, this.originalState);
|
184
|
-
}
|
185
|
-
withMeta(meta) {
|
186
|
-
return new WebpackModuleRequest(this.resolveFunction, this.babelLoaderPrefix, this.appRoot, this.specifier, this.fromFile, meta, this.isVirtual, this.isNotFound, this.resolvedTo, this.originalState);
|
181
|
+
notFoundResponse(request) {
|
182
|
+
let err = new Error(`module not found ${request.specifier}`);
|
183
|
+
err.code = 'MODULE_NOT_FOUND';
|
184
|
+
return { type: 'not_found', err };
|
187
185
|
}
|
188
|
-
|
189
|
-
return
|
186
|
+
virtualResponse(request, virtualFileName) {
|
187
|
+
return () => {
|
188
|
+
return this._resolve(request, virtualFileName);
|
189
|
+
};
|
190
190
|
}
|
191
|
-
|
192
|
-
return
|
191
|
+
async resolve(request) {
|
192
|
+
return this._resolve(request, undefined);
|
193
193
|
}
|
194
|
-
async
|
195
|
-
|
196
|
-
// TODO: we can make sure this looks correct in webpack output when a
|
197
|
-
// user encounters it
|
198
|
-
let err = new Error(`module not found ${this.specifier}`);
|
199
|
-
err.code = 'MODULE_NOT_FOUND';
|
200
|
-
return { type: 'not_found', err };
|
201
|
-
}
|
202
|
-
return await new Promise(resolve => this.resolveFunction(this.toWebpackResolveData(), err => {
|
194
|
+
async _resolve(request, virtualFileName) {
|
195
|
+
return await new Promise(resolve => this.resolveFunction(this.toWebpackResolveData(request, virtualFileName), err => {
|
203
196
|
if (err) {
|
204
197
|
// unfortunately webpack doesn't let us distinguish between Not Found
|
205
198
|
// and other unexpected exceptions here.
|
@@ -209,7 +202,7 @@ class WebpackModuleRequest {
|
|
209
202
|
resolve({
|
210
203
|
type: 'found',
|
211
204
|
result: this.originalState.createData,
|
212
|
-
isVirtual:
|
205
|
+
isVirtual: Boolean(virtualFileName),
|
213
206
|
filename: this.originalState.createData.resource,
|
214
207
|
});
|
215
208
|
}
|
@@ -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 type { ModuleRequest, 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 = WebpackModuleRequest.from(defaultResolve, state, this.#babelLoaderPrefix, this.#appRoot);\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 case 'ignored':\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 WebpackModuleRequest implements ModuleRequest {\n static from(\n resolveFunction: DefaultResolve,\n state: ExtendedResolveData,\n babelLoaderPrefix: string,\n appRoot: string\n ): WebpackModuleRequest | undefined {\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 new WebpackModuleRequest(\n resolveFunction,\n babelLoaderPrefix,\n appRoot,\n specifier,\n fromFile,\n state.contextInfo._embroiderMeta,\n false,\n false,\n undefined,\n state\n );\n }\n\n private constructor(\n private resolveFunction: DefaultResolve,\n private babelLoaderPrefix: string,\n private appRoot: string,\n readonly specifier: string,\n readonly fromFile: string,\n readonly meta: Record<string, any> | undefined,\n readonly isVirtual: boolean,\n readonly isNotFound: boolean,\n readonly resolvedTo: WebpackResolution | undefined,\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(): ExtendedResolveData {\n this.originalState.request = this.specifier;\n this.originalState.context = dirname(this.fromFile);\n this.originalState.contextInfo.issuer = this.fromFile;\n this.originalState.contextInfo._embroiderMeta = this.meta;\n if (this.resolvedTo) {\n if (this.resolvedTo.type === 'found') {\n this.originalState.createData = this.resolvedTo.result;\n }\n }\n return this.originalState;\n }\n\n alias(newSpecifier: string) {\n if (newSpecifier === this.specifier) {\n return this;\n }\n return new WebpackModuleRequest(\n this.resolveFunction,\n this.babelLoaderPrefix,\n this.appRoot,\n newSpecifier,\n this.fromFile,\n this.meta,\n this.isVirtual,\n false,\n undefined,\n this.originalState\n ) as this;\n }\n rehome(newFromFile: string) {\n if (this.fromFile === newFromFile) {\n return this;\n }\n return new WebpackModuleRequest(\n this.resolveFunction,\n this.babelLoaderPrefix,\n this.appRoot,\n this.specifier,\n newFromFile,\n this.meta,\n this.isVirtual,\n false,\n undefined,\n this.originalState\n ) as this;\n }\n virtualize(filename: string) {\n let params = new URLSearchParams();\n params.set('f', filename);\n params.set('a', this.appRoot);\n return new WebpackModuleRequest(\n this.resolveFunction,\n this.babelLoaderPrefix,\n this.appRoot,\n `${this.babelLoaderPrefix}${virtualLoaderName}?${params.toString()}!`,\n this.fromFile,\n this.meta,\n true,\n false,\n undefined,\n this.originalState\n ) as this;\n }\n withMeta(meta: Record<string, any> | undefined): this {\n return new WebpackModuleRequest(\n this.resolveFunction,\n this.babelLoaderPrefix,\n this.appRoot,\n this.specifier,\n this.fromFile,\n meta,\n this.isVirtual,\n this.isNotFound,\n this.resolvedTo,\n this.originalState\n ) as this;\n }\n notFound(): this {\n return new WebpackModuleRequest(\n this.resolveFunction,\n this.babelLoaderPrefix,\n this.appRoot,\n this.specifier,\n this.fromFile,\n this.meta,\n this.isVirtual,\n true,\n undefined,\n this.originalState\n ) as this;\n }\n\n resolveTo(resolution: WebpackResolution): this {\n return new WebpackModuleRequest(\n this.resolveFunction,\n this.babelLoaderPrefix,\n this.appRoot,\n this.specifier,\n this.fromFile,\n this.meta,\n this.isVirtual,\n this.isNotFound,\n resolution,\n this.originalState\n ) as this;\n }\n\n async defaultResolve(): Promise<WebpackResolution> {\n if (this.isNotFound) {\n // TODO: we can make sure this looks correct in webpack output when a\n // user encounters it\n let err = new Error(`module not found ${this.specifier}`);\n (err as any).code = 'MODULE_NOT_FOUND';\n return { type: 'not_found', err };\n }\n return await new Promise(resolve =>\n this.resolveFunction(this.toWebpackResolveData(), 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 isVirtual: this.isVirtual,\n filename: this.originalState.createData.resource!,\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 { ModuleRequest, 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 case 'ignored':\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 virtualFileName: string\n ): () => Promise<WebpackResolution> {\n return () => {\n return this._resolve(request, virtualFileName);\n };\n }\n\n async resolve(request: ModuleRequest<WebpackResolution>): Promise<WebpackResolution> {\n return this._resolve(request, undefined);\n }\n\n async _resolve(\n request: ModuleRequest<WebpackResolution>,\n virtualFileName: string | undefined\n ): Promise<WebpackResolution> {\n return await new Promise(resolve =>\n this.resolveFunction(this.toWebpackResolveData(request, virtualFileName), 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 isVirtual: Boolean(virtualFileName),\n filename: this.originalState.createData.resource!,\n });\n }\n })\n );\n }\n}\n"]}
|