@wyw-in-js/webpack-loader 1.0.6 → 1.0.7
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/esm/index.js +24 -14
- package/esm/index.js.map +1 -1
- package/lib/index.js +24 -14
- package/lib/index.js.map +1 -1
- package/package.json +8 -4
- package/types/index.js +25 -13
package/esm/index.js
CHANGED
|
@@ -28,21 +28,30 @@ const getResolverKey = (importer, stack) => {
|
|
|
28
28
|
const root = stack.length ? stack[stack.length - 1] : importer;
|
|
29
29
|
return stripQueryAndHash(root);
|
|
30
30
|
};
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
42
|
-
throw new Error('
|
|
31
|
+
const getActiveResolvers = key => {
|
|
32
|
+
const entries = resolvers[key];
|
|
33
|
+
return entries?.length ? entries : [];
|
|
34
|
+
};
|
|
35
|
+
const createAsyncResolve = resourcePath => {
|
|
36
|
+
const currentResolverKey = stripQueryAndHash(resourcePath);
|
|
37
|
+
return (what, importer, stack = [importer]) => {
|
|
38
|
+
const rootResolverKey = getResolverKey(importer, stack);
|
|
39
|
+
const rootResolvers = getActiveResolvers(rootResolverKey);
|
|
40
|
+
const resolver = rootResolvers.length > 0 ? rootResolvers : getActiveResolvers(currentResolverKey);
|
|
41
|
+
if (resolver.length === 0) {
|
|
42
|
+
throw new Error('No resolver found');
|
|
43
43
|
}
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
|
|
45
|
+
// Every resolver should return the same result, but we need to call all of them
|
|
46
|
+
// to ensure that all side effects are executed (e.g. adding dependencies)
|
|
47
|
+
return Promise.all(resolver.map(r => r(what, importer, stack))).then(results => {
|
|
48
|
+
const firstResult = results[0];
|
|
49
|
+
if (results.some(r => r !== firstResult)) {
|
|
50
|
+
throw new Error('Resolvers returned different results');
|
|
51
|
+
}
|
|
52
|
+
return firstResult;
|
|
53
|
+
});
|
|
54
|
+
};
|
|
46
55
|
};
|
|
47
56
|
function addResolver(resourcePath, resolver) {
|
|
48
57
|
if (!resolvers[resourcePath]) {
|
|
@@ -110,6 +119,7 @@ const webpack5Loader = function webpack5LoaderPlugin(content, inputSourceMap) {
|
|
|
110
119
|
return result;
|
|
111
120
|
});
|
|
112
121
|
});
|
|
122
|
+
const asyncResolve = createAsyncResolve(this.resourcePath);
|
|
113
123
|
logger('loader %s', this.resourcePath);
|
|
114
124
|
const {
|
|
115
125
|
sourceMap = undefined,
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["path","crypto","logger","transform","TransformCacheCollection","sharedState","getCacheInstance","registerCacheProvider","WYWinJSDebugPlugin","outputCssLoader","require","resolve","stripQueryAndHash","request","queryIdx","indexOf","hashIdx","slice","Math","min","hashText","text","createHash","update","digest","cache","resolvers","getResolverKey","importer","stack","root","length","asyncResolve","what","resolver","Error","Promise","all","map","r","then","results","firstResult","some","addResolver","resourcePath","push","filter","webpack5Loader","webpack5LoaderPlugin","content","inputSourceMap","convertSourceMap","value","filename","undefined","file","mappings","names","sources","version","async","resolveOptions","dependencyType","resolveModule","getResolve","isPromiseLike","resolveModuleAsync","context","reject","settled","finish","err","result","maybePromise","removeResolver","importerPath","isAbsolute","dirname","join","process","cwd","filePath","addDependency","sourceMap","preprocessor","keepComments","prefixer","extension","cssImport","cacheProvider","rest","getOptions","outputFileName","replace","transformServices","options","pluginOptions","emitWarning","message","eventEmitter","emitter","toString","cssText","Buffer","from","cssSourceMapText","dependencies","dep","cacheInstance","cacheProviderId","set","setDependencies","getDependencies","wywQuery","encodeURIComponent","hot","resourcePathWithQuery","stringifiedRequest","JSON","stringify","utils","contextify","rootContext","importCss","callback","code","catch","finally"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * This file contains a Webpack loader for WYW-in-JS.\n * It uses the transform.ts function to generate class names from source code,\n * returns transformed code without template literals and attaches generated source maps\n */\n\nimport path from 'path';\nimport crypto from 'crypto';\n\nimport type { RawSourceMap } from 'source-map';\nimport type { RawLoaderDefinitionFunction } from 'webpack';\n\nimport { logger } from '@wyw-in-js/shared';\nimport type { PluginOptions, Preprocessor, Result } from '@wyw-in-js/transform';\nimport { transform, TransformCacheCollection } from '@wyw-in-js/transform';\n\nimport { sharedState } from './WYWinJSDebugPlugin';\nimport type { ICache } from './cache';\nimport { getCacheInstance, registerCacheProvider } from './cache';\n\nexport { WYWinJSDebugPlugin } from './WYWinJSDebugPlugin';\n\nconst outputCssLoader = require.resolve('./outputCssLoader');\n\nconst stripQueryAndHash = (request: string) => {\n const queryIdx = request.indexOf('?');\n const hashIdx = request.indexOf('#');\n\n if (queryIdx === -1) {\n return hashIdx === -1 ? request : request.slice(0, hashIdx);\n }\n if (hashIdx === -1) return request.slice(0, queryIdx);\n\n return request.slice(0, Math.min(queryIdx, hashIdx));\n};\n\nconst hashText = (text: string): string =>\n crypto.createHash('sha256').update(text).digest('hex').slice(0, 12);\n\nexport type LoaderOptions = {\n cacheProvider?: string | ICache;\n cssImport?: 'require' | 'import';\n extension?: string;\n keepComments?: boolean | RegExp;\n prefixer?: boolean;\n preprocessor?: Preprocessor;\n sourceMap?: boolean;\n} & Partial<PluginOptions>;\ntype Loader = RawLoaderDefinitionFunction<LoaderOptions>;\n\nconst cache = new TransformCacheCollection();\n\ntype Resolver = (\n what: string,\n importer: string,\n stack: string[]\n) => Promise<string>;\n\nconst resolvers: Record<string, Resolver[]> = {};\n\nconst getResolverKey = (importer: string, stack: string[]): string => {\n const root = stack.length ? stack[stack.length - 1] : importer;\n return stripQueryAndHash(root);\n};\n\nconst asyncResolve = (\n what: string,\n importer: string,\n stack: string[] = [importer]\n): Promise<string> => {\n const resolver = resolvers[getResolverKey(importer, stack)];\n if (!resolver || resolver.length === 0) {\n throw new Error('No resolver found');\n }\n\n // Every resolver should return the same result, but we need to call all of them\n // to ensure that all side effects are executed (e.g. adding dependencies)\n return Promise.all(resolver.map((r) => r(what, importer, stack))).then(\n (results) => {\n const firstResult = results[0];\n if (results.some((r) => r !== firstResult)) {\n throw new Error('Resolvers returned different results');\n }\n\n return firstResult;\n }\n );\n};\n\nfunction addResolver(resourcePath: string, resolver: Resolver) {\n if (!resolvers[resourcePath]) {\n resolvers[resourcePath] = [];\n }\n\n resolvers[resourcePath].push(resolver);\n\n return () => {\n resolvers[resourcePath] = resolvers[resourcePath].filter(\n (r) => r !== resolver\n );\n };\n}\n\nconst webpack5Loader: Loader = function webpack5LoaderPlugin(\n content,\n inputSourceMap\n) {\n function convertSourceMap(\n value: typeof inputSourceMap,\n filename: string\n ): RawSourceMap | undefined {\n if (typeof value === 'string' || !value) {\n return undefined;\n }\n\n return {\n ...value,\n file: value.file ?? filename,\n mappings: value.mappings ?? '',\n names: value.names ?? [],\n sources: value.sources ?? [],\n version: value.version ?? 3,\n };\n }\n\n // tell Webpack this loader is async\n this.async();\n\n const resolveOptions = { dependencyType: 'esm' };\n\n const resolveModule: (\n context: string,\n request: string,\n callback: (err: unknown, result: unknown) => void\n ) => unknown = this.getResolve(resolveOptions);\n\n const isPromiseLike = (value: unknown): value is Promise<unknown> =>\n typeof (value as { then?: unknown } | null)?.then === 'function';\n\n const resolveModuleAsync = (context: string, request: string) =>\n new Promise<string>((resolve, reject) => {\n let settled = false;\n const finish = (err: unknown, result: unknown) => {\n if (settled) return;\n settled = true;\n\n if (err) {\n reject(err);\n return;\n }\n\n if (typeof result === 'string') {\n resolve(result);\n return;\n }\n\n reject(new Error(`Cannot resolve ${request}`));\n };\n\n try {\n const maybePromise = resolveModule(context, request, finish);\n if (isPromiseLike(maybePromise)) {\n maybePromise.then(\n (result) => finish(null, result),\n (err) => finish(err, null)\n );\n }\n } catch (err) {\n finish(err, null);\n }\n });\n\n const removeResolver = addResolver(this.resourcePath, (what, importer) => {\n const importerPath = stripQueryAndHash(importer);\n const context = path.isAbsolute(importerPath)\n ? path.dirname(importerPath)\n : path.join(process.cwd(), path.dirname(importerPath));\n\n return resolveModuleAsync(context, what).then((result) => {\n const filePath = stripQueryAndHash(result);\n if (path.isAbsolute(filePath)) {\n this.addDependency(filePath);\n }\n\n return result;\n });\n });\n\n logger('loader %s', this.resourcePath);\n\n const {\n sourceMap = undefined,\n preprocessor = undefined,\n keepComments = undefined,\n prefixer = undefined,\n extension = '.wyw-in-js.css',\n cssImport = 'require',\n cacheProvider,\n ...rest\n } = this.getOptions() || {};\n\n const outputFileName = this.resourcePath.replace(/\\.[^.]+$/, extension);\n\n const transformServices = {\n options: {\n filename: this.resourcePath,\n inputSourceMap: convertSourceMap(inputSourceMap, this.resourcePath),\n pluginOptions: rest,\n prefixer,\n keepComments,\n preprocessor,\n root: process.cwd(),\n },\n cache,\n emitWarning: (message: string) => this.emitWarning(new Error(message)),\n eventEmitter: sharedState.emitter,\n };\n\n transform(transformServices, content.toString(), asyncResolve)\n .then(\n async (result: Result) => {\n try {\n if (result.cssText) {\n let { cssText } = result;\n\n if (sourceMap) {\n cssText += `/*# sourceMappingURL=data:application/json;base64,${Buffer.from(\n result.cssSourceMapText || ''\n ).toString('base64')}*/`;\n }\n\n await Promise.all(\n result.dependencies?.map((dep) =>\n asyncResolve(dep, this.resourcePath)\n ) ?? []\n );\n\n const cacheInstance = await getCacheInstance(cacheProvider);\n const cacheProviderId =\n cacheProvider && typeof cacheProvider === 'object'\n ? registerCacheProvider(cacheInstance)\n : '';\n\n await cacheInstance.set(this.resourcePath, cssText);\n\n await cacheInstance.setDependencies?.(\n this.resourcePath,\n this.getDependencies()\n );\n\n const wywQuery = [\n `wyw=${encodeURIComponent(extension.replace(/^\\./, ''))}`,\n ];\n\n if (this.hot) {\n wywQuery.push(`v=${encodeURIComponent(hashText(cssText))}`);\n }\n\n const resourcePathWithQuery = `${this.resourcePath}?${wywQuery.join(\n '&'\n )}`;\n\n const request = `${outputFileName}!=!${outputCssLoader}?cacheProvider=${encodeURIComponent(\n typeof cacheProvider === 'string' ? cacheProvider : ''\n )}&cacheProviderId=${encodeURIComponent(\n cacheProviderId\n )}!${resourcePathWithQuery}`;\n const stringifiedRequest = JSON.stringify(\n this.utils.contextify(this.context || this.rootContext, request)\n );\n\n const importCss =\n cssImport === 'import'\n ? `import ${stringifiedRequest};`\n : `require(${stringifiedRequest});`;\n\n this.callback(\n null,\n `${result.code}\\n\\n${importCss}`,\n result.sourceMap ?? undefined\n );\n\n return;\n }\n\n this.callback(null, result.code, result.sourceMap ?? undefined);\n } catch (err) {\n this.callback(err as Error);\n }\n },\n (err: Error) => {\n this.callback(err);\n }\n )\n .catch((err: Error) => this.callback(err))\n .finally(removeResolver);\n};\n\nexport default webpack5Loader;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["path","crypto","logger","transform","TransformCacheCollection","sharedState","getCacheInstance","registerCacheProvider","WYWinJSDebugPlugin","outputCssLoader","require","resolve","stripQueryAndHash","request","queryIdx","indexOf","hashIdx","slice","Math","min","hashText","text","createHash","update","digest","cache","resolvers","getResolverKey","importer","stack","root","length","getActiveResolvers","key","entries","createAsyncResolve","resourcePath","currentResolverKey","what","rootResolverKey","rootResolvers","resolver","Error","Promise","all","map","r","then","results","firstResult","some","addResolver","push","filter","webpack5Loader","webpack5LoaderPlugin","content","inputSourceMap","convertSourceMap","value","filename","undefined","file","mappings","names","sources","version","async","resolveOptions","dependencyType","resolveModule","getResolve","isPromiseLike","resolveModuleAsync","context","reject","settled","finish","err","result","maybePromise","removeResolver","importerPath","isAbsolute","dirname","join","process","cwd","filePath","addDependency","asyncResolve","sourceMap","preprocessor","keepComments","prefixer","extension","cssImport","cacheProvider","rest","getOptions","outputFileName","replace","transformServices","options","pluginOptions","emitWarning","message","eventEmitter","emitter","toString","cssText","Buffer","from","cssSourceMapText","dependencies","dep","cacheInstance","cacheProviderId","set","setDependencies","getDependencies","wywQuery","encodeURIComponent","hot","resourcePathWithQuery","stringifiedRequest","JSON","stringify","utils","contextify","rootContext","importCss","callback","code","catch","finally"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * This file contains a Webpack loader for WYW-in-JS.\n * It uses the transform.ts function to generate class names from source code,\n * returns transformed code without template literals and attaches generated source maps\n */\n\nimport path from 'path';\nimport crypto from 'crypto';\n\nimport type { RawSourceMap } from 'source-map';\nimport type { RawLoaderDefinitionFunction } from 'webpack';\n\nimport { logger } from '@wyw-in-js/shared';\nimport type { PluginOptions, Preprocessor, Result } from '@wyw-in-js/transform';\nimport { transform, TransformCacheCollection } from '@wyw-in-js/transform';\n\nimport { sharedState } from './WYWinJSDebugPlugin';\nimport type { ICache } from './cache';\nimport { getCacheInstance, registerCacheProvider } from './cache';\n\nexport { WYWinJSDebugPlugin } from './WYWinJSDebugPlugin';\n\nconst outputCssLoader = require.resolve('./outputCssLoader');\n\nconst stripQueryAndHash = (request: string) => {\n const queryIdx = request.indexOf('?');\n const hashIdx = request.indexOf('#');\n\n if (queryIdx === -1) {\n return hashIdx === -1 ? request : request.slice(0, hashIdx);\n }\n if (hashIdx === -1) return request.slice(0, queryIdx);\n\n return request.slice(0, Math.min(queryIdx, hashIdx));\n};\n\nconst hashText = (text: string): string =>\n crypto.createHash('sha256').update(text).digest('hex').slice(0, 12);\n\nexport type LoaderOptions = {\n cacheProvider?: string | ICache;\n cssImport?: 'require' | 'import';\n extension?: string;\n keepComments?: boolean | RegExp;\n prefixer?: boolean;\n preprocessor?: Preprocessor;\n sourceMap?: boolean;\n} & Partial<PluginOptions>;\ntype Loader = RawLoaderDefinitionFunction<LoaderOptions>;\n\nconst cache = new TransformCacheCollection();\n\ntype Resolver = (\n what: string,\n importer: string,\n stack: string[]\n) => Promise<string>;\n\nconst resolvers: Record<string, Resolver[]> = {};\n\nconst getResolverKey = (importer: string, stack: string[]): string => {\n const root = stack.length ? stack[stack.length - 1] : importer;\n return stripQueryAndHash(root);\n};\n\nconst getActiveResolvers = (key: string): Resolver[] => {\n const entries = resolvers[key];\n return entries?.length ? entries : [];\n};\n\nconst createAsyncResolve = (resourcePath: string) => {\n const currentResolverKey = stripQueryAndHash(resourcePath);\n\n return (\n what: string,\n importer: string,\n stack: string[] = [importer]\n ): Promise<string> => {\n const rootResolverKey = getResolverKey(importer, stack);\n const rootResolvers = getActiveResolvers(rootResolverKey);\n const resolver =\n rootResolvers.length > 0\n ? rootResolvers\n : getActiveResolvers(currentResolverKey);\n\n if (resolver.length === 0) {\n throw new Error('No resolver found');\n }\n\n // Every resolver should return the same result, but we need to call all of them\n // to ensure that all side effects are executed (e.g. adding dependencies)\n return Promise.all(resolver.map((r) => r(what, importer, stack))).then(\n (results) => {\n const firstResult = results[0];\n if (results.some((r) => r !== firstResult)) {\n throw new Error('Resolvers returned different results');\n }\n\n return firstResult;\n }\n );\n };\n};\n\nfunction addResolver(resourcePath: string, resolver: Resolver) {\n if (!resolvers[resourcePath]) {\n resolvers[resourcePath] = [];\n }\n\n resolvers[resourcePath].push(resolver);\n\n return () => {\n resolvers[resourcePath] = resolvers[resourcePath].filter(\n (r) => r !== resolver\n );\n };\n}\n\nconst webpack5Loader: Loader = function webpack5LoaderPlugin(\n content,\n inputSourceMap\n) {\n function convertSourceMap(\n value: typeof inputSourceMap,\n filename: string\n ): RawSourceMap | undefined {\n if (typeof value === 'string' || !value) {\n return undefined;\n }\n\n return {\n ...value,\n file: value.file ?? filename,\n mappings: value.mappings ?? '',\n names: value.names ?? [],\n sources: value.sources ?? [],\n version: value.version ?? 3,\n };\n }\n\n // tell Webpack this loader is async\n this.async();\n\n const resolveOptions = { dependencyType: 'esm' };\n\n const resolveModule: (\n context: string,\n request: string,\n callback: (err: unknown, result: unknown) => void\n ) => unknown = this.getResolve(resolveOptions);\n\n const isPromiseLike = (value: unknown): value is Promise<unknown> =>\n typeof (value as { then?: unknown } | null)?.then === 'function';\n\n const resolveModuleAsync = (context: string, request: string) =>\n new Promise<string>((resolve, reject) => {\n let settled = false;\n const finish = (err: unknown, result: unknown) => {\n if (settled) return;\n settled = true;\n\n if (err) {\n reject(err);\n return;\n }\n\n if (typeof result === 'string') {\n resolve(result);\n return;\n }\n\n reject(new Error(`Cannot resolve ${request}`));\n };\n\n try {\n const maybePromise = resolveModule(context, request, finish);\n if (isPromiseLike(maybePromise)) {\n maybePromise.then(\n (result) => finish(null, result),\n (err) => finish(err, null)\n );\n }\n } catch (err) {\n finish(err, null);\n }\n });\n\n const removeResolver = addResolver(this.resourcePath, (what, importer) => {\n const importerPath = stripQueryAndHash(importer);\n const context = path.isAbsolute(importerPath)\n ? path.dirname(importerPath)\n : path.join(process.cwd(), path.dirname(importerPath));\n\n return resolveModuleAsync(context, what).then((result) => {\n const filePath = stripQueryAndHash(result);\n if (path.isAbsolute(filePath)) {\n this.addDependency(filePath);\n }\n\n return result;\n });\n });\n const asyncResolve = createAsyncResolve(this.resourcePath);\n\n logger('loader %s', this.resourcePath);\n\n const {\n sourceMap = undefined,\n preprocessor = undefined,\n keepComments = undefined,\n prefixer = undefined,\n extension = '.wyw-in-js.css',\n cssImport = 'require',\n cacheProvider,\n ...rest\n } = this.getOptions() || {};\n\n const outputFileName = this.resourcePath.replace(/\\.[^.]+$/, extension);\n\n const transformServices = {\n options: {\n filename: this.resourcePath,\n inputSourceMap: convertSourceMap(inputSourceMap, this.resourcePath),\n pluginOptions: rest,\n prefixer,\n keepComments,\n preprocessor,\n root: process.cwd(),\n },\n cache,\n emitWarning: (message: string) => this.emitWarning(new Error(message)),\n eventEmitter: sharedState.emitter,\n };\n\n transform(transformServices, content.toString(), asyncResolve)\n .then(\n async (result: Result) => {\n try {\n if (result.cssText) {\n let { cssText } = result;\n\n if (sourceMap) {\n cssText += `/*# sourceMappingURL=data:application/json;base64,${Buffer.from(\n result.cssSourceMapText || ''\n ).toString('base64')}*/`;\n }\n\n await Promise.all(\n result.dependencies?.map((dep) =>\n asyncResolve(dep, this.resourcePath)\n ) ?? []\n );\n\n const cacheInstance = await getCacheInstance(cacheProvider);\n const cacheProviderId =\n cacheProvider && typeof cacheProvider === 'object'\n ? registerCacheProvider(cacheInstance)\n : '';\n\n await cacheInstance.set(this.resourcePath, cssText);\n\n await cacheInstance.setDependencies?.(\n this.resourcePath,\n this.getDependencies()\n );\n\n const wywQuery = [\n `wyw=${encodeURIComponent(extension.replace(/^\\./, ''))}`,\n ];\n\n if (this.hot) {\n wywQuery.push(`v=${encodeURIComponent(hashText(cssText))}`);\n }\n\n const resourcePathWithQuery = `${this.resourcePath}?${wywQuery.join(\n '&'\n )}`;\n\n const request = `${outputFileName}!=!${outputCssLoader}?cacheProvider=${encodeURIComponent(\n typeof cacheProvider === 'string' ? cacheProvider : ''\n )}&cacheProviderId=${encodeURIComponent(\n cacheProviderId\n )}!${resourcePathWithQuery}`;\n const stringifiedRequest = JSON.stringify(\n this.utils.contextify(this.context || this.rootContext, request)\n );\n\n const importCss =\n cssImport === 'import'\n ? `import ${stringifiedRequest};`\n : `require(${stringifiedRequest});`;\n\n this.callback(\n null,\n `${result.code}\\n\\n${importCss}`,\n result.sourceMap ?? undefined\n );\n\n return;\n }\n\n this.callback(null, result.code, result.sourceMap ?? undefined);\n } catch (err) {\n this.callback(err as Error);\n }\n },\n (err: Error) => {\n this.callback(err);\n }\n )\n .catch((err: Error) => this.callback(err))\n .finally(removeResolver);\n};\n\nexport default webpack5Loader;\n"],"mappings":"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","ignoreList":[]}
|
package/lib/index.js
CHANGED
|
@@ -40,21 +40,30 @@ const getResolverKey = (importer, stack) => {
|
|
|
40
40
|
const root = stack.length ? stack[stack.length - 1] : importer;
|
|
41
41
|
return stripQueryAndHash(root);
|
|
42
42
|
};
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
if (
|
|
54
|
-
throw new Error('
|
|
43
|
+
const getActiveResolvers = key => {
|
|
44
|
+
const entries = resolvers[key];
|
|
45
|
+
return entries !== null && entries !== void 0 && entries.length ? entries : [];
|
|
46
|
+
};
|
|
47
|
+
const createAsyncResolve = resourcePath => {
|
|
48
|
+
const currentResolverKey = stripQueryAndHash(resourcePath);
|
|
49
|
+
return (what, importer, stack = [importer]) => {
|
|
50
|
+
const rootResolverKey = getResolverKey(importer, stack);
|
|
51
|
+
const rootResolvers = getActiveResolvers(rootResolverKey);
|
|
52
|
+
const resolver = rootResolvers.length > 0 ? rootResolvers : getActiveResolvers(currentResolverKey);
|
|
53
|
+
if (resolver.length === 0) {
|
|
54
|
+
throw new Error('No resolver found');
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
|
|
57
|
+
// Every resolver should return the same result, but we need to call all of them
|
|
58
|
+
// to ensure that all side effects are executed (e.g. adding dependencies)
|
|
59
|
+
return Promise.all(resolver.map(r => r(what, importer, stack))).then(results => {
|
|
60
|
+
const firstResult = results[0];
|
|
61
|
+
if (results.some(r => r !== firstResult)) {
|
|
62
|
+
throw new Error('Resolvers returned different results');
|
|
63
|
+
}
|
|
64
|
+
return firstResult;
|
|
65
|
+
});
|
|
66
|
+
};
|
|
58
67
|
};
|
|
59
68
|
function addResolver(resourcePath, resolver) {
|
|
60
69
|
if (!resolvers[resourcePath]) {
|
|
@@ -123,6 +132,7 @@ const webpack5Loader = function webpack5LoaderPlugin(content, inputSourceMap) {
|
|
|
123
132
|
return result;
|
|
124
133
|
});
|
|
125
134
|
});
|
|
135
|
+
const asyncResolve = createAsyncResolve(this.resourcePath);
|
|
126
136
|
(0, _shared.logger)('loader %s', this.resourcePath);
|
|
127
137
|
const {
|
|
128
138
|
sourceMap = undefined,
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_path","_interopRequireDefault","require","_crypto","_shared","_transform","_WYWinJSDebugPlugin","_cache","e","__esModule","default","outputCssLoader","resolve","stripQueryAndHash","request","queryIdx","indexOf","hashIdx","slice","Math","min","hashText","text","crypto","createHash","update","digest","cache","TransformCacheCollection","resolvers","getResolverKey","importer","stack","root","length","asyncResolve","what","resolver","Error","Promise","all","map","r","then","results","firstResult","some","addResolver","resourcePath","push","filter","webpack5Loader","webpack5LoaderPlugin","content","inputSourceMap","convertSourceMap","value","filename","_value$file","_value$mappings","_value$names","_value$sources","_value$version","undefined","file","mappings","names","sources","version","async","resolveOptions","dependencyType","resolveModule","getResolve","isPromiseLike","resolveModuleAsync","context","reject","settled","finish","err","result","maybePromise","removeResolver","importerPath","path","isAbsolute","dirname","join","process","cwd","filePath","addDependency","logger","sourceMap","preprocessor","keepComments","prefixer","extension","cssImport","cacheProvider","rest","getOptions","outputFileName","replace","transformServices","options","pluginOptions","emitWarning","message","eventEmitter","sharedState","emitter","transform","toString","_result$sourceMap2","cssText","_result$dependencies$","_result$dependencies","_cacheInstance$setDep","_result$sourceMap","Buffer","from","cssSourceMapText","dependencies","dep","cacheInstance","getCacheInstance","cacheProviderId","registerCacheProvider","set","setDependencies","call","getDependencies","wywQuery","encodeURIComponent","hot","resourcePathWithQuery","stringifiedRequest","JSON","stringify","utils","contextify","rootContext","importCss","callback","code","catch","finally","_default","exports"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * This file contains a Webpack loader for WYW-in-JS.\n * It uses the transform.ts function to generate class names from source code,\n * returns transformed code without template literals and attaches generated source maps\n */\n\nimport path from 'path';\nimport crypto from 'crypto';\n\nimport type { RawSourceMap } from 'source-map';\nimport type { RawLoaderDefinitionFunction } from 'webpack';\n\nimport { logger } from '@wyw-in-js/shared';\nimport type { PluginOptions, Preprocessor, Result } from '@wyw-in-js/transform';\nimport { transform, TransformCacheCollection } from '@wyw-in-js/transform';\n\nimport { sharedState } from './WYWinJSDebugPlugin';\nimport type { ICache } from './cache';\nimport { getCacheInstance, registerCacheProvider } from './cache';\n\nexport { WYWinJSDebugPlugin } from './WYWinJSDebugPlugin';\n\nconst outputCssLoader = require.resolve('./outputCssLoader');\n\nconst stripQueryAndHash = (request: string) => {\n const queryIdx = request.indexOf('?');\n const hashIdx = request.indexOf('#');\n\n if (queryIdx === -1) {\n return hashIdx === -1 ? request : request.slice(0, hashIdx);\n }\n if (hashIdx === -1) return request.slice(0, queryIdx);\n\n return request.slice(0, Math.min(queryIdx, hashIdx));\n};\n\nconst hashText = (text: string): string =>\n crypto.createHash('sha256').update(text).digest('hex').slice(0, 12);\n\nexport type LoaderOptions = {\n cacheProvider?: string | ICache;\n cssImport?: 'require' | 'import';\n extension?: string;\n keepComments?: boolean | RegExp;\n prefixer?: boolean;\n preprocessor?: Preprocessor;\n sourceMap?: boolean;\n} & Partial<PluginOptions>;\ntype Loader = RawLoaderDefinitionFunction<LoaderOptions>;\n\nconst cache = new TransformCacheCollection();\n\ntype Resolver = (\n what: string,\n importer: string,\n stack: string[]\n) => Promise<string>;\n\nconst resolvers: Record<string, Resolver[]> = {};\n\nconst getResolverKey = (importer: string, stack: string[]): string => {\n const root = stack.length ? stack[stack.length - 1] : importer;\n return stripQueryAndHash(root);\n};\n\nconst asyncResolve = (\n what: string,\n importer: string,\n stack: string[] = [importer]\n): Promise<string> => {\n const resolver = resolvers[getResolverKey(importer, stack)];\n if (!resolver || resolver.length === 0) {\n throw new Error('No resolver found');\n }\n\n // Every resolver should return the same result, but we need to call all of them\n // to ensure that all side effects are executed (e.g. adding dependencies)\n return Promise.all(resolver.map((r) => r(what, importer, stack))).then(\n (results) => {\n const firstResult = results[0];\n if (results.some((r) => r !== firstResult)) {\n throw new Error('Resolvers returned different results');\n }\n\n return firstResult;\n }\n );\n};\n\nfunction addResolver(resourcePath: string, resolver: Resolver) {\n if (!resolvers[resourcePath]) {\n resolvers[resourcePath] = [];\n }\n\n resolvers[resourcePath].push(resolver);\n\n return () => {\n resolvers[resourcePath] = resolvers[resourcePath].filter(\n (r) => r !== resolver\n );\n };\n}\n\nconst webpack5Loader: Loader = function webpack5LoaderPlugin(\n content,\n inputSourceMap\n) {\n function convertSourceMap(\n value: typeof inputSourceMap,\n filename: string\n ): RawSourceMap | undefined {\n if (typeof value === 'string' || !value) {\n return undefined;\n }\n\n return {\n ...value,\n file: value.file ?? filename,\n mappings: value.mappings ?? '',\n names: value.names ?? [],\n sources: value.sources ?? [],\n version: value.version ?? 3,\n };\n }\n\n // tell Webpack this loader is async\n this.async();\n\n const resolveOptions = { dependencyType: 'esm' };\n\n const resolveModule: (\n context: string,\n request: string,\n callback: (err: unknown, result: unknown) => void\n ) => unknown = this.getResolve(resolveOptions);\n\n const isPromiseLike = (value: unknown): value is Promise<unknown> =>\n typeof (value as { then?: unknown } | null)?.then === 'function';\n\n const resolveModuleAsync = (context: string, request: string) =>\n new Promise<string>((resolve, reject) => {\n let settled = false;\n const finish = (err: unknown, result: unknown) => {\n if (settled) return;\n settled = true;\n\n if (err) {\n reject(err);\n return;\n }\n\n if (typeof result === 'string') {\n resolve(result);\n return;\n }\n\n reject(new Error(`Cannot resolve ${request}`));\n };\n\n try {\n const maybePromise = resolveModule(context, request, finish);\n if (isPromiseLike(maybePromise)) {\n maybePromise.then(\n (result) => finish(null, result),\n (err) => finish(err, null)\n );\n }\n } catch (err) {\n finish(err, null);\n }\n });\n\n const removeResolver = addResolver(this.resourcePath, (what, importer) => {\n const importerPath = stripQueryAndHash(importer);\n const context = path.isAbsolute(importerPath)\n ? path.dirname(importerPath)\n : path.join(process.cwd(), path.dirname(importerPath));\n\n return resolveModuleAsync(context, what).then((result) => {\n const filePath = stripQueryAndHash(result);\n if (path.isAbsolute(filePath)) {\n this.addDependency(filePath);\n }\n\n return result;\n });\n });\n\n logger('loader %s', this.resourcePath);\n\n const {\n sourceMap = undefined,\n preprocessor = undefined,\n keepComments = undefined,\n prefixer = undefined,\n extension = '.wyw-in-js.css',\n cssImport = 'require',\n cacheProvider,\n ...rest\n } = this.getOptions() || {};\n\n const outputFileName = this.resourcePath.replace(/\\.[^.]+$/, extension);\n\n const transformServices = {\n options: {\n filename: this.resourcePath,\n inputSourceMap: convertSourceMap(inputSourceMap, this.resourcePath),\n pluginOptions: rest,\n prefixer,\n keepComments,\n preprocessor,\n root: process.cwd(),\n },\n cache,\n emitWarning: (message: string) => this.emitWarning(new Error(message)),\n eventEmitter: sharedState.emitter,\n };\n\n transform(transformServices, content.toString(), asyncResolve)\n .then(\n async (result: Result) => {\n try {\n if (result.cssText) {\n let { cssText } = result;\n\n if (sourceMap) {\n cssText += `/*# sourceMappingURL=data:application/json;base64,${Buffer.from(\n result.cssSourceMapText || ''\n ).toString('base64')}*/`;\n }\n\n await Promise.all(\n result.dependencies?.map((dep) =>\n asyncResolve(dep, this.resourcePath)\n ) ?? []\n );\n\n const cacheInstance = await getCacheInstance(cacheProvider);\n const cacheProviderId =\n cacheProvider && typeof cacheProvider === 'object'\n ? registerCacheProvider(cacheInstance)\n : '';\n\n await cacheInstance.set(this.resourcePath, cssText);\n\n await cacheInstance.setDependencies?.(\n this.resourcePath,\n this.getDependencies()\n );\n\n const wywQuery = [\n `wyw=${encodeURIComponent(extension.replace(/^\\./, ''))}`,\n ];\n\n if (this.hot) {\n wywQuery.push(`v=${encodeURIComponent(hashText(cssText))}`);\n }\n\n const resourcePathWithQuery = `${this.resourcePath}?${wywQuery.join(\n '&'\n )}`;\n\n const request = `${outputFileName}!=!${outputCssLoader}?cacheProvider=${encodeURIComponent(\n typeof cacheProvider === 'string' ? cacheProvider : ''\n )}&cacheProviderId=${encodeURIComponent(\n cacheProviderId\n )}!${resourcePathWithQuery}`;\n const stringifiedRequest = JSON.stringify(\n this.utils.contextify(this.context || this.rootContext, request)\n );\n\n const importCss =\n cssImport === 'import'\n ? `import ${stringifiedRequest};`\n : `require(${stringifiedRequest});`;\n\n this.callback(\n null,\n `${result.code}\\n\\n${importCss}`,\n result.sourceMap ?? undefined\n );\n\n return;\n }\n\n this.callback(null, result.code, result.sourceMap ?? undefined);\n } catch (err) {\n this.callback(err as Error);\n }\n },\n (err: Error) => {\n this.callback(err);\n }\n )\n .catch((err: Error) => this.callback(err))\n .finally(removeResolver);\n};\n\nexport default webpack5Loader;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_path","_interopRequireDefault","require","_crypto","_shared","_transform","_WYWinJSDebugPlugin","_cache","e","__esModule","default","outputCssLoader","resolve","stripQueryAndHash","request","queryIdx","indexOf","hashIdx","slice","Math","min","hashText","text","crypto","createHash","update","digest","cache","TransformCacheCollection","resolvers","getResolverKey","importer","stack","root","length","getActiveResolvers","key","entries","createAsyncResolve","resourcePath","currentResolverKey","what","rootResolverKey","rootResolvers","resolver","Error","Promise","all","map","r","then","results","firstResult","some","addResolver","push","filter","webpack5Loader","webpack5LoaderPlugin","content","inputSourceMap","convertSourceMap","value","filename","_value$file","_value$mappings","_value$names","_value$sources","_value$version","undefined","file","mappings","names","sources","version","async","resolveOptions","dependencyType","resolveModule","getResolve","isPromiseLike","resolveModuleAsync","context","reject","settled","finish","err","result","maybePromise","removeResolver","importerPath","path","isAbsolute","dirname","join","process","cwd","filePath","addDependency","asyncResolve","logger","sourceMap","preprocessor","keepComments","prefixer","extension","cssImport","cacheProvider","rest","getOptions","outputFileName","replace","transformServices","options","pluginOptions","emitWarning","message","eventEmitter","sharedState","emitter","transform","toString","_result$sourceMap2","cssText","_result$dependencies$","_result$dependencies","_cacheInstance$setDep","_result$sourceMap","Buffer","from","cssSourceMapText","dependencies","dep","cacheInstance","getCacheInstance","cacheProviderId","registerCacheProvider","set","setDependencies","call","getDependencies","wywQuery","encodeURIComponent","hot","resourcePathWithQuery","stringifiedRequest","JSON","stringify","utils","contextify","rootContext","importCss","callback","code","catch","finally","_default","exports"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * This file contains a Webpack loader for WYW-in-JS.\n * It uses the transform.ts function to generate class names from source code,\n * returns transformed code without template literals and attaches generated source maps\n */\n\nimport path from 'path';\nimport crypto from 'crypto';\n\nimport type { RawSourceMap } from 'source-map';\nimport type { RawLoaderDefinitionFunction } from 'webpack';\n\nimport { logger } from '@wyw-in-js/shared';\nimport type { PluginOptions, Preprocessor, Result } from '@wyw-in-js/transform';\nimport { transform, TransformCacheCollection } from '@wyw-in-js/transform';\n\nimport { sharedState } from './WYWinJSDebugPlugin';\nimport type { ICache } from './cache';\nimport { getCacheInstance, registerCacheProvider } from './cache';\n\nexport { WYWinJSDebugPlugin } from './WYWinJSDebugPlugin';\n\nconst outputCssLoader = require.resolve('./outputCssLoader');\n\nconst stripQueryAndHash = (request: string) => {\n const queryIdx = request.indexOf('?');\n const hashIdx = request.indexOf('#');\n\n if (queryIdx === -1) {\n return hashIdx === -1 ? request : request.slice(0, hashIdx);\n }\n if (hashIdx === -1) return request.slice(0, queryIdx);\n\n return request.slice(0, Math.min(queryIdx, hashIdx));\n};\n\nconst hashText = (text: string): string =>\n crypto.createHash('sha256').update(text).digest('hex').slice(0, 12);\n\nexport type LoaderOptions = {\n cacheProvider?: string | ICache;\n cssImport?: 'require' | 'import';\n extension?: string;\n keepComments?: boolean | RegExp;\n prefixer?: boolean;\n preprocessor?: Preprocessor;\n sourceMap?: boolean;\n} & Partial<PluginOptions>;\ntype Loader = RawLoaderDefinitionFunction<LoaderOptions>;\n\nconst cache = new TransformCacheCollection();\n\ntype Resolver = (\n what: string,\n importer: string,\n stack: string[]\n) => Promise<string>;\n\nconst resolvers: Record<string, Resolver[]> = {};\n\nconst getResolverKey = (importer: string, stack: string[]): string => {\n const root = stack.length ? stack[stack.length - 1] : importer;\n return stripQueryAndHash(root);\n};\n\nconst getActiveResolvers = (key: string): Resolver[] => {\n const entries = resolvers[key];\n return entries?.length ? entries : [];\n};\n\nconst createAsyncResolve = (resourcePath: string) => {\n const currentResolverKey = stripQueryAndHash(resourcePath);\n\n return (\n what: string,\n importer: string,\n stack: string[] = [importer]\n ): Promise<string> => {\n const rootResolverKey = getResolverKey(importer, stack);\n const rootResolvers = getActiveResolvers(rootResolverKey);\n const resolver =\n rootResolvers.length > 0\n ? rootResolvers\n : getActiveResolvers(currentResolverKey);\n\n if (resolver.length === 0) {\n throw new Error('No resolver found');\n }\n\n // Every resolver should return the same result, but we need to call all of them\n // to ensure that all side effects are executed (e.g. adding dependencies)\n return Promise.all(resolver.map((r) => r(what, importer, stack))).then(\n (results) => {\n const firstResult = results[0];\n if (results.some((r) => r !== firstResult)) {\n throw new Error('Resolvers returned different results');\n }\n\n return firstResult;\n }\n );\n };\n};\n\nfunction addResolver(resourcePath: string, resolver: Resolver) {\n if (!resolvers[resourcePath]) {\n resolvers[resourcePath] = [];\n }\n\n resolvers[resourcePath].push(resolver);\n\n return () => {\n resolvers[resourcePath] = resolvers[resourcePath].filter(\n (r) => r !== resolver\n );\n };\n}\n\nconst webpack5Loader: Loader = function webpack5LoaderPlugin(\n content,\n inputSourceMap\n) {\n function convertSourceMap(\n value: typeof inputSourceMap,\n filename: string\n ): RawSourceMap | undefined {\n if (typeof value === 'string' || !value) {\n return undefined;\n }\n\n return {\n ...value,\n file: value.file ?? filename,\n mappings: value.mappings ?? '',\n names: value.names ?? [],\n sources: value.sources ?? [],\n version: value.version ?? 3,\n };\n }\n\n // tell Webpack this loader is async\n this.async();\n\n const resolveOptions = { dependencyType: 'esm' };\n\n const resolveModule: (\n context: string,\n request: string,\n callback: (err: unknown, result: unknown) => void\n ) => unknown = this.getResolve(resolveOptions);\n\n const isPromiseLike = (value: unknown): value is Promise<unknown> =>\n typeof (value as { then?: unknown } | null)?.then === 'function';\n\n const resolveModuleAsync = (context: string, request: string) =>\n new Promise<string>((resolve, reject) => {\n let settled = false;\n const finish = (err: unknown, result: unknown) => {\n if (settled) return;\n settled = true;\n\n if (err) {\n reject(err);\n return;\n }\n\n if (typeof result === 'string') {\n resolve(result);\n return;\n }\n\n reject(new Error(`Cannot resolve ${request}`));\n };\n\n try {\n const maybePromise = resolveModule(context, request, finish);\n if (isPromiseLike(maybePromise)) {\n maybePromise.then(\n (result) => finish(null, result),\n (err) => finish(err, null)\n );\n }\n } catch (err) {\n finish(err, null);\n }\n });\n\n const removeResolver = addResolver(this.resourcePath, (what, importer) => {\n const importerPath = stripQueryAndHash(importer);\n const context = path.isAbsolute(importerPath)\n ? path.dirname(importerPath)\n : path.join(process.cwd(), path.dirname(importerPath));\n\n return resolveModuleAsync(context, what).then((result) => {\n const filePath = stripQueryAndHash(result);\n if (path.isAbsolute(filePath)) {\n this.addDependency(filePath);\n }\n\n return result;\n });\n });\n const asyncResolve = createAsyncResolve(this.resourcePath);\n\n logger('loader %s', this.resourcePath);\n\n const {\n sourceMap = undefined,\n preprocessor = undefined,\n keepComments = undefined,\n prefixer = undefined,\n extension = '.wyw-in-js.css',\n cssImport = 'require',\n cacheProvider,\n ...rest\n } = this.getOptions() || {};\n\n const outputFileName = this.resourcePath.replace(/\\.[^.]+$/, extension);\n\n const transformServices = {\n options: {\n filename: this.resourcePath,\n inputSourceMap: convertSourceMap(inputSourceMap, this.resourcePath),\n pluginOptions: rest,\n prefixer,\n keepComments,\n preprocessor,\n root: process.cwd(),\n },\n cache,\n emitWarning: (message: string) => this.emitWarning(new Error(message)),\n eventEmitter: sharedState.emitter,\n };\n\n transform(transformServices, content.toString(), asyncResolve)\n .then(\n async (result: Result) => {\n try {\n if (result.cssText) {\n let { cssText } = result;\n\n if (sourceMap) {\n cssText += `/*# sourceMappingURL=data:application/json;base64,${Buffer.from(\n result.cssSourceMapText || ''\n ).toString('base64')}*/`;\n }\n\n await Promise.all(\n result.dependencies?.map((dep) =>\n asyncResolve(dep, this.resourcePath)\n ) ?? []\n );\n\n const cacheInstance = await getCacheInstance(cacheProvider);\n const cacheProviderId =\n cacheProvider && typeof cacheProvider === 'object'\n ? registerCacheProvider(cacheInstance)\n : '';\n\n await cacheInstance.set(this.resourcePath, cssText);\n\n await cacheInstance.setDependencies?.(\n this.resourcePath,\n this.getDependencies()\n );\n\n const wywQuery = [\n `wyw=${encodeURIComponent(extension.replace(/^\\./, ''))}`,\n ];\n\n if (this.hot) {\n wywQuery.push(`v=${encodeURIComponent(hashText(cssText))}`);\n }\n\n const resourcePathWithQuery = `${this.resourcePath}?${wywQuery.join(\n '&'\n )}`;\n\n const request = `${outputFileName}!=!${outputCssLoader}?cacheProvider=${encodeURIComponent(\n typeof cacheProvider === 'string' ? cacheProvider : ''\n )}&cacheProviderId=${encodeURIComponent(\n cacheProviderId\n )}!${resourcePathWithQuery}`;\n const stringifiedRequest = JSON.stringify(\n this.utils.contextify(this.context || this.rootContext, request)\n );\n\n const importCss =\n cssImport === 'import'\n ? `import ${stringifiedRequest};`\n : `require(${stringifiedRequest});`;\n\n this.callback(\n null,\n `${result.code}\\n\\n${importCss}`,\n result.sourceMap ?? undefined\n );\n\n return;\n }\n\n this.callback(null, result.code, result.sourceMap ?? undefined);\n } catch (err) {\n this.callback(err as Error);\n }\n },\n (err: Error) => {\n this.callback(err);\n }\n )\n .catch((err: Error) => this.callback(err))\n .finally(removeResolver);\n};\n\nexport default webpack5Loader;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wyw-in-js/webpack-loader",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"@wyw-in-js/shared": "1.0.
|
|
6
|
-
"@wyw-in-js/transform": "1.0.
|
|
5
|
+
"@wyw-in-js/shared": "1.0.5",
|
|
6
|
+
"@wyw-in-js/transform": "1.0.7"
|
|
7
7
|
},
|
|
8
8
|
"devDependencies": {
|
|
9
9
|
"@types/node": "^16.18.55",
|
|
@@ -37,5 +37,9 @@
|
|
|
37
37
|
"lint": "eslint --ext .js,.ts .",
|
|
38
38
|
"test": "bun test src"
|
|
39
39
|
},
|
|
40
|
-
"types": "types/index.d.ts"
|
|
40
|
+
"types": "types/index.d.ts",
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "https://github.com/Anber/wyw-in-js"
|
|
44
|
+
}
|
|
41
45
|
}
|
package/types/index.js
CHANGED
|
@@ -35,20 +35,31 @@ const getResolverKey = (importer, stack) => {
|
|
|
35
35
|
const root = stack.length ? stack[stack.length - 1] : importer;
|
|
36
36
|
return stripQueryAndHash(root);
|
|
37
37
|
};
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
const getActiveResolvers = (key) => {
|
|
39
|
+
const entries = resolvers[key];
|
|
40
|
+
return entries?.length ? entries : [];
|
|
41
|
+
};
|
|
42
|
+
const createAsyncResolve = (resourcePath) => {
|
|
43
|
+
const currentResolverKey = stripQueryAndHash(resourcePath);
|
|
44
|
+
return (what, importer, stack = [importer]) => {
|
|
45
|
+
const rootResolverKey = getResolverKey(importer, stack);
|
|
46
|
+
const rootResolvers = getActiveResolvers(rootResolverKey);
|
|
47
|
+
const resolver = rootResolvers.length > 0
|
|
48
|
+
? rootResolvers
|
|
49
|
+
: getActiveResolvers(currentResolverKey);
|
|
50
|
+
if (resolver.length === 0) {
|
|
51
|
+
throw new Error('No resolver found');
|
|
49
52
|
}
|
|
50
|
-
return
|
|
51
|
-
|
|
53
|
+
// Every resolver should return the same result, but we need to call all of them
|
|
54
|
+
// to ensure that all side effects are executed (e.g. adding dependencies)
|
|
55
|
+
return Promise.all(resolver.map((r) => r(what, importer, stack))).then((results) => {
|
|
56
|
+
const firstResult = results[0];
|
|
57
|
+
if (results.some((r) => r !== firstResult)) {
|
|
58
|
+
throw new Error('Resolvers returned different results');
|
|
59
|
+
}
|
|
60
|
+
return firstResult;
|
|
61
|
+
});
|
|
62
|
+
};
|
|
52
63
|
};
|
|
53
64
|
function addResolver(resourcePath, resolver) {
|
|
54
65
|
if (!resolvers[resourcePath]) {
|
|
@@ -117,6 +128,7 @@ const webpack5Loader = function webpack5LoaderPlugin(content, inputSourceMap) {
|
|
|
117
128
|
return result;
|
|
118
129
|
});
|
|
119
130
|
});
|
|
131
|
+
const asyncResolve = createAsyncResolve(this.resourcePath);
|
|
120
132
|
(0, shared_1.logger)('loader %s', this.resourcePath);
|
|
121
133
|
const { sourceMap = undefined, preprocessor = undefined, keepComments = undefined, prefixer = undefined, extension = '.wyw-in-js.css', cssImport = 'require', cacheProvider, ...rest } = this.getOptions() || {};
|
|
122
134
|
const outputFileName = this.resourcePath.replace(/\.[^.]+$/, extension);
|