@embroider/webpack 4.0.9-unstable.b89b741 → 4.0.9-unstable.d367b87
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.d367b87",
|
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/
|
41
|
-
"@embroider/
|
39
|
+
"@embroider/babel-loader-9": "3.1.2-unstable.d367b87",
|
40
|
+
"@embroider/hbs-loader": "3.0.4-unstable.d367b87",
|
41
|
+
"@embroider/shared-internals": "2.8.2-unstable.d367b87"
|
42
42
|
},
|
43
43
|
"devDependencies": {
|
44
44
|
"@types/csso": "^3.5.1",
|
@@ -50,11 +50,11 @@
|
|
50
50
|
"@types/semver": "^7.3.6",
|
51
51
|
"typescript": "^5.4.5",
|
52
52
|
"webpack": "^5.38.1",
|
53
|
-
"@embroider/core": "^3.4.20-unstable.
|
53
|
+
"@embroider/core": "^3.4.20-unstable.d367b87"
|
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.d367b87"
|
58
58
|
},
|
59
59
|
"engines": {
|
60
60
|
"node": "12.* || 14.* || >= 16"
|
package/src/virtual-loader.js
CHANGED
@@ -19,7 +19,9 @@ function virtualLoader() {
|
|
19
19
|
}
|
20
20
|
let { resolver } = setup(appRoot);
|
21
21
|
this.resourcePath = filename;
|
22
|
-
|
22
|
+
// @ts-expect-error unimplemented
|
23
|
+
let virtual = fixmeImplementVirtualResponse();
|
24
|
+
return (0, core_1.virtualContent)(virtual, resolver).src;
|
23
25
|
}
|
24
26
|
throw new Error(`@embroider/webpack/src/virtual-loader received unexpected request: ${this.query}`);
|
25
27
|
}
|
@@ -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,gCAeC;AA3BD,0CAAuF;AAGvF,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,iCAAiC;QACjC,IAAI,OAAO,GAAoB,6BAA6B,EAAE,CAAC;QAC/D,OAAO,IAAA,qBAAc,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC;IAC/C,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,sEAAsE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACtG,CAAC","sourcesContent":["import { ResolverLoader, virtualContent, type VirtualResponse } 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>): string | undefined {\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 // @ts-expect-error unimplemented\n let virtual: VirtualResponse = fixmeImplementVirtualResponse();\n return virtualContent(virtual, resolver).src;\n }\n throw new Error(`@embroider/webpack/src/virtual-loader received unexpected request: ${this.query}`);\n}\n"]}
|
@@ -55,7 +55,6 @@ class EmbroiderPlugin {
|
|
55
55
|
callback(resolution.err);
|
56
56
|
break;
|
57
57
|
case 'found':
|
58
|
-
case 'ignored':
|
59
58
|
callback(null, undefined);
|
60
59
|
break;
|
61
60
|
default:
|
@@ -183,16 +182,16 @@ class WebpackRequestAdapter {
|
|
183
182
|
err.code = 'MODULE_NOT_FOUND';
|
184
183
|
return { type: 'not_found', err };
|
185
184
|
}
|
186
|
-
virtualResponse(request,
|
185
|
+
virtualResponse(request, virtual) {
|
187
186
|
return () => {
|
188
|
-
return this._resolve(request,
|
187
|
+
return this._resolve(request, virtual);
|
189
188
|
};
|
190
189
|
}
|
191
190
|
async resolve(request) {
|
192
|
-
return this._resolve(request,
|
191
|
+
return this._resolve(request, false);
|
193
192
|
}
|
194
|
-
async _resolve(request,
|
195
|
-
return await new Promise(resolve => this.resolveFunction(this.toWebpackResolveData(request,
|
193
|
+
async _resolve(request, virtualResponse) {
|
194
|
+
return await new Promise(resolve => this.resolveFunction(this.toWebpackResolveData(request, virtualResponse ? virtualResponse.specifier : request.specifier), err => {
|
196
195
|
if (err) {
|
197
196
|
// unfortunately webpack doesn't let us distinguish between Not Found
|
198
197
|
// and other unexpected exceptions here.
|
@@ -202,7 +201,7 @@ class WebpackRequestAdapter {
|
|
202
201
|
resolve({
|
203
202
|
type: 'found',
|
204
203
|
result: this.originalState.createData,
|
205
|
-
|
204
|
+
virtual: virtualResponse,
|
206
205
|
filename: this.originalState.createData.resource,
|
207
206
|
});
|
208
207
|
}
|
@@ -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 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"]}
|
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"]}
|