@wyw-in-js/webpack-loader 2.0.0-alpha.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/esm/index.js.map +1 -1
  2. package/package.json +3 -3
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","names":[],"sources":["../src/index.ts"],"version":3,"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';\nimport { fileURLToPath } from 'url';\n\nimport type { RawSourceMap } from 'source-map';\nimport type { Compiler, RawLoaderDefinitionFunction, Stats } from 'webpack';\n\nimport {\n logger,\n mergeOxcResolverAlias,\n toNativeResolverAlias,\n} from '@wyw-in-js/shared';\nimport type { PluginOptions, Preprocessor, Result } from '@wyw-in-js/transform';\nimport {\n disposeEvalBroker,\n transform,\n TransformCacheCollection,\n} 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 = fileURLToPath(\n new URL('./outputCssLoader.js', import.meta.url)\n);\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\ntype Resolver = (\n what: string,\n importer: string,\n stack?: string[]\n) => Promise<string>;\n\ntype DoneHook = {\n tap: (name: string, handler: (stats: Stats) => void) => void;\n};\n\ntype VoidHook = {\n tap: (name: string, handler: () => void) => void;\n};\n\ntype FailedHook = {\n tap: (name: string, handler: (error: Error) => void) => void;\n};\n\ntype CompilerHooks = {\n done?: DoneHook;\n failed?: FailedHook;\n shutdown?: VoidHook;\n watchClose?: VoidHook;\n};\n\ntype CompilerLike = Compiler & {\n hooks: CompilerHooks;\n};\n\ntype LoaderContextWithCompiler = {\n _compiler?: CompilerLike;\n};\n\ntype ResolverScope = {\n asyncResolve: Resolver;\n cache: TransformCacheCollection;\n dispose: () => void;\n key: string;\n replaceResolver: (resourcePath: string, resolver: Resolver) => void;\n};\n\ntype CompilerState = ResolverScope & {\n clearResolvers: () => void;\n hooksInstalled: boolean;\n};\n\nconst COMPILER_SCOPE_NAME = 'WYWinJSResolverScope';\nlet compilerScopeId = 0;\nconst compilerStates = new WeakMap<CompilerLike, CompilerState>();\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 createResolverScope = (): ResolverScope => {\n const resolvers = new Map<string, Resolver>();\n compilerScopeId += 1;\n const key = `webpack:${compilerScopeId}`;\n\n return {\n asyncResolve: (\n what: string,\n importer: string,\n stack: string[] = [importer]\n ): Promise<string> => {\n const resolverKeys = [\n getResolverKey(importer, stack),\n stripQueryAndHash(importer),\n ].filter((candidate, idx, all) => all.indexOf(candidate) === idx);\n\n const selectedResolvers = resolverKeys\n .map((resolverKey) => resolvers.get(resolverKey))\n .filter((resolver): resolver is Resolver => Boolean(resolver));\n\n if (selectedResolvers.length === 0) {\n throw new Error('No resolver found');\n }\n\n // Root and importer resolver side effects both matter for dependency\n // tracking, so keep them aligned and verify they agree on the answer.\n return Promise.all(\n selectedResolvers.map((resolver) => resolver(what, importer, stack))\n ).then((results) => {\n const firstResult = results[0];\n if (results.some((result) => result !== firstResult)) {\n throw new Error('Resolvers returned different results');\n }\n\n return firstResult;\n });\n },\n cache: new TransformCacheCollection(),\n dispose: () => {\n resolvers.clear();\n },\n key,\n replaceResolver: (resourcePath: string, resolver: Resolver) => {\n resolvers.set(stripQueryAndHash(resourcePath), resolver);\n },\n };\n};\n\nconst disposeCompilerState = (state: CompilerState) => {\n state.clearResolvers();\n disposeEvalBroker(state.cache);\n};\n\nconst getCompilerState = (compiler: CompilerLike): CompilerState => {\n const cached = compilerStates.get(compiler);\n if (cached) {\n return cached;\n }\n\n // Resolver identity must stay stable across files within one compiler or we\n // churn both the shared transform cache salt and the eval broker/runner.\n const scope = createResolverScope();\n const state: CompilerState = {\n ...scope,\n clearResolvers: scope.dispose,\n dispose: () => disposeCompilerState(state),\n hooksInstalled: false,\n };\n\n const installHooks = () => {\n if (state.hooksInstalled) return;\n state.hooksInstalled = true;\n\n compiler.hooks.done?.tap(COMPILER_SCOPE_NAME, () => {\n state.clearResolvers();\n });\n compiler.hooks.failed?.tap(COMPILER_SCOPE_NAME, () => {\n state.clearResolvers();\n });\n compiler.hooks.watchClose?.tap(COMPILER_SCOPE_NAME, () => {\n state.dispose();\n compilerStates.delete(compiler);\n });\n compiler.hooks.shutdown?.tap(COMPILER_SCOPE_NAME, () => {\n state.dispose();\n compilerStates.delete(compiler);\n });\n };\n\n installHooks();\n compilerStates.set(compiler, state);\n return state;\n};\n\nconst createInvocationScope = (): ResolverScope => {\n const scope = createResolverScope();\n return {\n ...scope,\n dispose: () => {\n scope.dispose();\n disposeEvalBroker(scope.cache);\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 { _compiler: compiler } = this as LoaderContextWithCompiler;\n const compilerState = compiler\n ? getCompilerState(compiler)\n : createInvocationScope();\n\n compilerState.replaceResolver(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 {\n asyncResolve,\n cache: transformCache,\n key: asyncResolveKey,\n } = compilerState;\n const nativeResolverAlias = toNativeResolverAlias(\n compiler?.options?.resolve?.alias\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: {\n ...rest,\n oxcOptions: mergeOxcResolverAlias(\n rest.oxcOptions,\n nativeResolverAlias\n ),\n },\n prefixer,\n keepComments,\n preprocessor,\n root: process.cwd(),\n },\n asyncResolveKey,\n cache: transformCache,\n emitWarning: (message: string) => {\n const warning = new Error(message);\n // Remove the stack so webpack's ModuleWarning doesn't copy it into\n // `details`, which causes the message to render twice (once from\n // .message, once from .details containing \"Error: <same message>\").\n delete warning.stack;\n this.emitWarning(warning);\n },\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(() => {\n if (!compiler) {\n compilerState.dispose();\n }\n });\n};\n\nexport default webpack5Loader;\n"],"file":"index.js"}
1
+ {"mappings":"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","names":[],"sources":["../src/index.ts"],"version":3,"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';\nimport { fileURLToPath } from 'url';\n\nimport type { RawSourceMap } from 'source-map';\nimport type { Compiler, RawLoaderDefinitionFunction, Stats } from 'webpack';\n\nimport {\n logger,\n mergeOxcResolverAlias,\n toNativeResolverAlias,\n} from '@wyw-in-js/shared';\nimport type { PluginOptions, Preprocessor, Result } from '@wyw-in-js/transform';\nimport {\n disposeEvalBroker,\n transform,\n TransformCacheCollection,\n} 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 = fileURLToPath(\n new URL('./outputCssLoader.js', import.meta.url)\n);\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\ntype Resolver = (\n what: string,\n importer: string,\n stack?: string[]\n) => Promise<string>;\n\ntype DoneHook = {\n tap: (name: string, handler: (stats: Stats) => void) => void;\n};\n\ntype VoidHook = {\n tap: (name: string, handler: () => void) => void;\n};\n\ntype FailedHook = {\n tap: (name: string, handler: (error: Error) => void) => void;\n};\n\ntype CompilerHooks = {\n done?: DoneHook;\n failed?: FailedHook;\n shutdown?: VoidHook;\n watchClose?: VoidHook;\n};\n\ntype CompilerLike = Compiler & {\n hooks: CompilerHooks;\n};\n\ntype LoaderContextWithCompiler = {\n _compiler?: CompilerLike;\n};\n\ntype ResolverScope = {\n asyncResolve: Resolver;\n cache: TransformCacheCollection;\n dispose: () => void;\n key: string;\n replaceResolver: (resourcePath: string, resolver: Resolver) => void;\n};\n\ntype CompilerState = ResolverScope & {\n clearResolvers: () => void;\n hooksInstalled: boolean;\n};\n\nconst COMPILER_SCOPE_NAME = 'WYWinJSResolverScope';\nlet compilerScopeId = 0;\nconst compilerStates = new WeakMap<CompilerLike, CompilerState>();\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 createResolverScope = (): ResolverScope => {\n const resolvers = new Map<string, Resolver>();\n compilerScopeId += 1;\n const key = `webpack:${compilerScopeId}`;\n\n return {\n asyncResolve: (\n what: string,\n importer: string,\n stack: string[] = [importer]\n ): Promise<string> => {\n const resolverKeys = [\n getResolverKey(importer, stack),\n stripQueryAndHash(importer),\n ].filter((candidate, idx, all) => all.indexOf(candidate) === idx);\n\n const selectedResolvers = resolverKeys\n .map((resolverKey) => resolvers.get(resolverKey))\n .filter((resolver): resolver is Resolver => Boolean(resolver));\n\n if (selectedResolvers.length === 0) {\n throw new Error('No resolver found');\n }\n\n // Root and importer resolver side effects both matter for dependency\n // tracking, so keep them aligned and verify they agree on the answer.\n return Promise.all(\n selectedResolvers.map((resolver) => resolver(what, importer, stack))\n ).then((results) => {\n const firstResult = results[0];\n if (results.some((result) => result !== firstResult)) {\n throw new Error('Resolvers returned different results');\n }\n\n return firstResult;\n });\n },\n cache: new TransformCacheCollection(),\n dispose: () => {\n resolvers.clear();\n },\n key,\n replaceResolver: (resourcePath: string, resolver: Resolver) => {\n resolvers.set(stripQueryAndHash(resourcePath), resolver);\n },\n };\n};\n\nconst disposeCompilerState = (state: CompilerState) => {\n state.clearResolvers();\n disposeEvalBroker(state.cache);\n};\n\nconst getCompilerState = (compiler: CompilerLike): CompilerState => {\n const cached = compilerStates.get(compiler);\n if (cached) {\n return cached;\n }\n\n // Resolver identity must stay stable across files within one compiler or we\n // churn both the shared transform cache salt and the eval broker/runner.\n const scope = createResolverScope();\n const state: CompilerState = {\n ...scope,\n clearResolvers: scope.dispose,\n dispose: () => disposeCompilerState(state),\n hooksInstalled: false,\n };\n\n const installHooks = () => {\n if (state.hooksInstalled) return;\n state.hooksInstalled = true;\n\n compiler.hooks.done?.tap(COMPILER_SCOPE_NAME, () => {\n state.clearResolvers();\n });\n compiler.hooks.failed?.tap(COMPILER_SCOPE_NAME, () => {\n state.clearResolvers();\n });\n compiler.hooks.watchClose?.tap(COMPILER_SCOPE_NAME, () => {\n state.dispose();\n compilerStates.delete(compiler);\n });\n compiler.hooks.shutdown?.tap(COMPILER_SCOPE_NAME, () => {\n state.dispose();\n compilerStates.delete(compiler);\n });\n };\n\n installHooks();\n compilerStates.set(compiler, state);\n return state;\n};\n\nconst createInvocationScope = (): ResolverScope => {\n const scope = createResolverScope();\n return {\n ...scope,\n dispose: () => {\n scope.dispose();\n disposeEvalBroker(scope.cache);\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 { _compiler: compiler } = this as LoaderContextWithCompiler;\n const compilerState = compiler\n ? getCompilerState(compiler)\n : createInvocationScope();\n\n compilerState.replaceResolver(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 {\n asyncResolve,\n cache: transformCache,\n key: asyncResolveKey,\n } = compilerState;\n const nativeResolverAlias = toNativeResolverAlias(\n compiler?.options?.resolve?.alias\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: {\n ...rest,\n oxcOptions: mergeOxcResolverAlias(rest.oxcOptions, nativeResolverAlias),\n },\n prefixer,\n keepComments,\n preprocessor,\n root: process.cwd(),\n },\n asyncResolveKey,\n cache: transformCache,\n emitWarning: (message: string) => {\n const warning = new Error(message);\n // Remove the stack so webpack's ModuleWarning doesn't copy it into\n // `details`, which causes the message to render twice (once from\n // .message, once from .details containing \"Error: <same message>\").\n delete warning.stack;\n this.emitWarning(warning);\n },\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(() => {\n if (!compiler) {\n compilerState.dispose();\n }\n });\n};\n\nexport default webpack5Loader;\n"],"file":"index.js"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@wyw-in-js/webpack-loader",
3
- "version": "2.0.0-alpha.1",
3
+ "version": "2.0.0",
4
4
  "type": "module",
5
5
  "dependencies": {
6
- "@wyw-in-js/shared": "2.0.0-alpha.1",
7
- "@wyw-in-js/transform": "2.0.0-alpha.1"
6
+ "@wyw-in-js/shared": "2.0.0",
7
+ "@wyw-in-js/transform": "2.0.0"
8
8
  },
9
9
  "devDependencies": {
10
10
  "@types/node": "^22.0.0",