weapp-tailwindcss 5.1.14 → 5.1.15

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 (63) hide show
  1. package/dist/auto-2dg_uhEJ.mjs +13 -0
  2. package/dist/bundlers/gulp/frameworks/native/index.d.ts +2 -0
  3. package/dist/bundlers/gulp/index.d.ts +2 -0
  4. package/dist/bundlers/gulp/shared/create-native-framework-plugins.d.ts +2 -0
  5. package/dist/bundlers/shared/generated-css-marker.d.ts +2 -2
  6. package/dist/bundlers/shared/generator-css/local-imports.d.ts +1 -1
  7. package/dist/bundlers/shared/generator-css/source-resolver/postcss-source.d.ts +2 -0
  8. package/dist/bundlers/shared/generator-css/types.d.ts +5 -0
  9. package/dist/bundlers/shared/style-requests.d.ts +1 -0
  10. package/dist/bundlers/vite/bundle-state.d.ts +1 -0
  11. package/dist/bundlers/vite/generate-bundle/bundle-markup-candidates.d.ts +20 -0
  12. package/dist/bundlers/vite/generate-bundle/css-handler-options.d.ts +1 -0
  13. package/dist/bundlers/vite/generate-bundle/remembered-css-replay.d.ts +1 -0
  14. package/dist/bundlers/vite/generate-bundle/sfc-style-source.d.ts +2 -1
  15. package/dist/bundlers/vite/generate-bundle/source-candidate-source.d.ts +1 -0
  16. package/dist/bundlers/vite/generate-bundle/types.d.ts +5 -0
  17. package/dist/bundlers/vite/serve-css-generation.d.ts +3 -2
  18. package/dist/bundlers/vite/shared/create-framework-plugins.d.ts +1 -0
  19. package/dist/bundlers/vite/watch-css-post.d.ts +10 -0
  20. package/dist/bundlers/webpack/BaseUnifiedPlugin/shared.d.ts +6 -0
  21. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/css-source-resolvers.d.ts +1 -0
  22. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/pipeline-helpers.d.ts +2 -0
  23. package/dist/bundlers/webpack/loaders/runtime-registry.d.ts +1 -0
  24. package/dist/bundlers/webpack/loaders/weapp-tw-css-generation-loader.d.ts +4 -0
  25. package/dist/bundlers/webpack/loaders/weapp-tw-css-import-rewrite-loader.d.ts +3 -0
  26. package/dist/{context-BL8Gy71H.mjs → context-BgGWVAmN.mjs} +2 -2
  27. package/dist/core.mjs +1 -1
  28. package/dist/css-macro.mjs +1 -1
  29. package/dist/{generator-B59OA64h.mjs → generator-CEo920So.mjs} +1 -1
  30. package/dist/generator.mjs +1 -1
  31. package/dist/{gulp-C1Q3LRzg.js → gulp-3m1dAiig.js} +84 -50
  32. package/dist/{gulp-DUYWxmZC.mjs → gulp-DP71z1jG.mjs} +87 -53
  33. package/dist/gulp.js +1 -1
  34. package/dist/gulp.mjs +1 -1
  35. package/dist/{hmr-timing-C3ed5vCx.mjs → hmr-timing-1aS6--U7.mjs} +170 -44
  36. package/dist/{hmr-timing-BZ5sWIqO.js → hmr-timing-B8p4f0ca.js} +219 -39
  37. package/dist/index.js +3 -3
  38. package/dist/index.mjs +4 -4
  39. package/dist/postcss.mjs +1 -1
  40. package/dist/presets.mjs +1 -1
  41. package/dist/rspack.js +1 -1
  42. package/dist/rspack.mjs +1 -1
  43. package/dist/shared/mpx.d.ts +4 -1
  44. package/dist/{source-candidate-scan-signature-R3dzamcm.js → source-candidate-scan-signature-BAahhiwb.js} +4 -96
  45. package/dist/{source-candidate-scan-signature-D7RWjWsY.mjs → source-candidate-scan-signature-Cf7259PR.mjs} +6 -62
  46. package/dist/{tailwindcss-DPcKMLxL.mjs → tailwindcss-xs704TRw.mjs} +1 -1
  47. package/dist/{transform-D5JUgMpE.mjs → transform-B_KM9sLX.mjs} +47 -5
  48. package/dist/{transform-COFRlmDF.js → transform-CcYptivi.js} +47 -5
  49. package/dist/uni-app-x/component-local-style.d.ts +1 -0
  50. package/dist/uni-app-x/style-asset/style-value.d.ts +1 -1
  51. package/dist/{vite-BNlPdsGM.js → vite-DUVjMduj.js} +550 -273
  52. package/dist/{vite-CBU5NXTX.mjs → vite-nXZEiwG0.mjs} +501 -224
  53. package/dist/vite.js +1 -1
  54. package/dist/vite.mjs +1 -1
  55. package/dist/weapp-tw-css-generation-loader.js +12 -0
  56. package/dist/weapp-tw-css-import-rewrite-loader-DNk0IxAt.js +10198 -0
  57. package/dist/weapp-tw-css-import-rewrite-loader.js +6 -10255
  58. package/dist/{webpack-CZ38fMGC.mjs → webpack-C_UUFRgj.mjs} +223 -57
  59. package/dist/{webpack-Jpe048pQ.js → webpack-nppysF4B.js} +232 -66
  60. package/dist/webpack.js +1 -1
  61. package/dist/webpack.mjs +1 -1
  62. package/package.json +11 -3
  63. package/dist/auto-CrJJc5rK.mjs +0 -13
@@ -1,16 +1,16 @@
1
- import { B as stripUnmatchedTailwindSourceMediaCloseFragments, E as resolveTailwindcssOptions, F as removeTailwindV4GeneratedUserCssArtifacts, H as finalizeMiniProgramCss, I as removeTailwindV4GeneratorAtRules, J as hasTailwindApplyDirective, K as stripMiniProgramCssSpecificityPlaceholders, M as isCommentOnlyCss, P as removeMiniProgramHoverSelectors, Q as normalizeTailwindConfigDirectives, W as pruneMiniProgramGeneratedCss, X as hasTailwindRootDirectives, Z as hasTailwindSourceDirectives, ct as hasTailwindGeneratedCssMarkers, g as upsertTailwindV4CssSource, h as hasConfiguredTailwindV4CssRoots, i as normalizeWeappTailwindcssGeneratorOptions, kt as resolveSourceScanPath, nt as removeTailwindSourceDirectives, o as resolveRuntimeBranch, st as hasTailwindGeneratedCss, tt as parseImportRequest, vt as getTailwindV4IncrementalGenerateCacheStats, z as stripTailwindSourceMediaFragments } from "./generator-B59OA64h.mjs";
2
- import { g as resolveTailwindV4EntriesFromCssCached, l as getRuntimeClassSetSignature, p as resolveViteSourceScanEntries } from "./tailwindcss-DPcKMLxL.mjs";
1
+ import { B as stripUnmatchedTailwindSourceMediaCloseFragments, E as resolveTailwindcssOptions, F as removeTailwindV4GeneratedUserCssArtifacts, H as finalizeMiniProgramCss, I as removeTailwindV4GeneratorAtRules, J as hasTailwindApplyDirective, K as stripMiniProgramCssSpecificityPlaceholders, M as isCommentOnlyCss, P as removeMiniProgramHoverSelectors, Q as normalizeTailwindConfigDirectives, W as pruneMiniProgramGeneratedCss, X as hasTailwindRootDirectives, Z as hasTailwindSourceDirectives, ct as hasTailwindGeneratedCssMarkers, g as upsertTailwindV4CssSource, h as hasConfiguredTailwindV4CssRoots, i as normalizeWeappTailwindcssGeneratorOptions, kt as resolveSourceScanPath, nt as removeTailwindSourceDirectives, o as resolveRuntimeBranch, st as hasTailwindGeneratedCss, tt as parseImportRequest, vt as getTailwindV4IncrementalGenerateCacheStats, z as stripTailwindSourceMediaFragments } from "./generator-CEo920So.mjs";
2
+ import { g as resolveTailwindV4EntriesFromCssCached, l as getRuntimeClassSetSignature, p as resolveViteSourceScanEntries } from "./tailwindcss-xs704TRw.mjs";
3
3
  import { r as getGroupedEntries } from "./utils-MVwpU07P.mjs";
4
4
  import { b as md5Hash, c as _defineProperty, y as createDebug } from "./wxml-DdGdeqaH.mjs";
5
- import { d as refreshTailwindRuntimeState, i as pluginName, l as createTailwindRuntimeReadyPromise, n as normalizeStyleHandlerMajorVersion, o as shouldSkipJsTransform, r as resolveStyleOptionsFromContext, t as getCompilerContext, u as ensureRuntimeClassSet } from "./context-BL8Gy71H.mjs";
5
+ import { d as refreshTailwindRuntimeState, i as pluginName, l as createTailwindRuntimeReadyPromise, n as normalizeStyleHandlerMajorVersion, o as shouldSkipJsTransform, r as resolveStyleOptionsFromContext, t as getCompilerContext, u as ensureRuntimeClassSet } from "./context-BgGWVAmN.mjs";
6
6
  import { getDefaultCssPreflight } from "./defaults.mjs";
7
- import { A as processCachedTask, C as removeGeneratedSelectorCompatCss, D as createCssSourceTraceCacheSignature, E as annotateCssSourceTrace, O as createCssTokenSourceMap, S as scoreTailwindV4CssSourceFileMatch, T as hasMiniProgramTailwindV4PreflightReset, a as isSourceCandidateRequest, c as collectStrictEscapedRuntimeCandidates, f as pushConcurrentTaskFactories, i as createSourceCandidateStore, k as isCssSourceTraceEnabled, l as createEscapeFragments, n as emitHmrTiming, o as resolveSourceCandidateScanFiles, p as resolveTaskConcurrency, s as createBundleRuntimeClassSetManager, w as createCssSourceOrderAppend, y as isPureLocalCssImportWrapper } from "./hmr-timing-C3ed5vCx.mjs";
8
- import { E as stripRequestQuery, F as resolvePluginDisabledState, L as createBuiltinWebpackStyleInjectorPlugin, N as stripBundlerGeneratedCssMarkers, O as resolveOutputSpecifier, P as resolvePackageDir, T as isSourceStyleRequest, V as resolveWebpackFrameworkProfile, a as createCandidateSignature, f as classifyBundleEntry, j as hasBundlerGeneratedCssMarker, k as toAbsoluteOutputPath, m as updateBundleBuildState, p as createBundleBuildState, r as createScopedGeneratorRuntime, t as createSourceCandidateScanSignature, w as generateTailwindV4Css, x as createRuntimeAffectingSourceSignature, z as webpackStyleInjectorDelegates } from "./source-candidate-scan-signature-D7RWjWsY.mjs";
7
+ import { A as collectRawSourceClassSelectors, C as scoreTailwindV4CssSourceFileMatch, D as hasMiniProgramTailwindV4PreflightReset, F as annotateCssSourceTrace, I as createCssSourceTraceCacheSignature, L as createCssTokenSourceMap, M as hasBundlerGeneratedCssMarker, O as isSourceStyleRequest, P as stripBundlerGeneratedCssMarkers, R as isCssSourceTraceEnabled, T as createCssSourceOrderAppend, a as isSourceCandidateRequest, b as isPureLocalCssImportWrapper, c as createBundleRuntimeClassSetManager, i as createSourceCandidateStore, k as stripRequestQuery, l as collectStrictEscapedRuntimeCandidates, m as resolveTaskConcurrency, n as emitHmrTiming, o as resolveSourceCandidateScanFiles, p as pushConcurrentTaskFactories, u as createEscapeFragments, w as removeGeneratedSelectorCompatCss, z as processCachedTask } from "./hmr-timing-1aS6--U7.mjs";
8
+ import { D as toAbsoluteOutputPath, E as resolveOutputSpecifier, F as resolveWebpackFrameworkProfile, N as webpackStyleInjectorDelegates, O as resolvePackageDir, a as createCandidateSignature, f as classifyBundleEntry, j as createBuiltinWebpackStyleInjectorPlugin, k as resolvePluginDisabledState, m as updateBundleBuildState, p as createBundleBuildState, r as createScopedGeneratorRuntime, t as createSourceCandidateScanSignature, w as generateTailwindV4Css, x as createRuntimeAffectingSourceSignature } from "./source-candidate-scan-signature-Cf7259PR.mjs";
9
9
  import Module, { createRequire } from "node:module";
10
10
  import fs from "node:fs";
11
11
  import path from "node:path";
12
12
  import process from "node:process";
13
- import { filterExistingCssRules, postcss } from "@weapp-tailwindcss/postcss";
13
+ import { dedupeCoveredCssRules, filterExistingCssRules, mergeCoveredCssRuleDeclarations, postcss } from "@weapp-tailwindcss/postcss";
14
14
  import { readFile, stat } from "node:fs/promises";
15
15
  import micromatch from "micromatch";
16
16
  import { MappingChars2String } from "@weapp-core/escape";
@@ -67,17 +67,27 @@ function resolveSingleActiveWebpackCssResource(assetResources, activeWebpackAsse
67
67
  const activeAssetResourceMatches = [...assetResources ?? []].map((sourceFile) => path.resolve(sourceFile)).filter((sourceFile) => activeWebpackAssetResourceFiles.has(sourceFile)).sort();
68
68
  return activeAssetResourceMatches.length === 1 ? activeAssetResourceMatches[0] : void 0;
69
69
  }
70
- function createWebpackCssAssetResourceMap(chunks, chunkGraph, cssMatcher, normalizeResource) {
70
+ function resolveWebpackCssModuleIdentifierResource(module) {
71
+ if (!module.type?.startsWith("css/") || typeof module.identifier !== "function") return;
72
+ const identifier = module.identifier();
73
+ const request = identifier.startsWith("css|") ? identifier.slice(4) : identifier;
74
+ const resourceWithMetadata = request.slice(request.lastIndexOf("!") + 1);
75
+ const metadataIndex = resourceWithMetadata.indexOf("|");
76
+ return metadataIndex === -1 ? resourceWithMetadata : resourceWithMetadata.slice(0, metadataIndex);
77
+ }
78
+ function createWebpackCssAssetResourceMapInternal(chunks, chunkGraph, cssMatcher, normalizeResource, onlyUnambiguousCssAssets) {
71
79
  const resourcesByAsset = /* @__PURE__ */ new Map();
72
80
  if (!chunkGraph?.getChunkModulesIterable) return resourcesByAsset;
73
81
  const collectModuleResources = (module, resources, seen = /* @__PURE__ */ new Set()) => {
74
82
  if (!module || seen.has(module)) return;
75
83
  seen.add(module);
76
- for (const candidate of [
84
+ const candidates = [
77
85
  module.resource,
78
86
  module.request,
79
87
  module.userRequest
80
- ]) {
88
+ ];
89
+ if (onlyUnambiguousCssAssets) candidates.push(resolveWebpackCssModuleIdentifierResource(module));
90
+ for (const candidate of candidates) {
81
91
  if (typeof candidate !== "string") continue;
82
92
  const normalized = normalizeResource(candidate, module);
83
93
  if (normalized) resources.add(normalized);
@@ -97,7 +107,7 @@ function createWebpackCssAssetResourceMap(chunks, chunkGraph, cssMatcher, normal
97
107
  };
98
108
  for (const chunk of chunks) {
99
109
  const cssFiles = toChunkFiles(chunk.files).filter((file) => cssMatcher(file));
100
- if (cssFiles.length === 0) continue;
110
+ if (cssFiles.length === 0 || onlyUnambiguousCssAssets && cssFiles.length !== 1) continue;
101
111
  const modules = chunkGraph.getChunkModulesIterable(chunk);
102
112
  if (!modules) continue;
103
113
  const cssResources = /* @__PURE__ */ new Set();
@@ -107,6 +117,12 @@ function createWebpackCssAssetResourceMap(chunks, chunkGraph, cssMatcher, normal
107
117
  }
108
118
  return resourcesByAsset;
109
119
  }
120
+ function createWebpackCssAssetResourceMap(chunks, chunkGraph, cssMatcher, normalizeResource) {
121
+ return createWebpackCssAssetResourceMapInternal(chunks, chunkGraph, cssMatcher, normalizeResource, false);
122
+ }
123
+ function createWebpackDirectCssAssetResourceMap(chunks, chunkGraph, cssMatcher, normalizeResource) {
124
+ return createWebpackCssAssetResourceMapInternal(chunks, chunkGraph, cssMatcher, normalizeResource, true);
125
+ }
110
126
  function createAssetHashByChunkMap(chunks) {
111
127
  const partsByFile = /* @__PURE__ */ new Map();
112
128
  for (const chunk of chunks) {
@@ -309,8 +325,15 @@ function resolveWebpackGeneratorRawSource(rawSource, cssHandlerOptions) {
309
325
  }
310
326
  function shouldConsumeWebpackLoaderGeneratedCss(options) {
311
327
  if (!options.shouldRegenerateExplicitTailwindV4CssSource) return true;
312
- if (options.watchMode === true && options.loaderGeneratedClassSet && options.sourceCandidates && (hasMissingRuntimeCandidates(options.loaderGeneratedClassSet, options.sourceCandidates) || hasStaleRuntimeCandidates(options.loaderGeneratedClassSet, options.sourceCandidates))) return false;
313
- return options.hasBundlerGeneratedCssMarker;
328
+ if (options.watchMode === true && options.loaderGeneratedClassSet && options.sourceCandidates && hasStaleRuntimeCandidates(options.loaderGeneratedClassSet, options.sourceCandidates)) return false;
329
+ if (options.hasBundlerGeneratedCssMarker) return true;
330
+ if (options.watchMode === true && options.loaderGeneratedClassSet && options.sourceCandidates && hasMissingRuntimeCandidates(options.loaderGeneratedClassSet, options.sourceCandidates)) return false;
331
+ return Boolean(options.allowMarkerlessRegistryMatch && options.loaderGeneratedClassSet && options.sourceCandidates && !hasMissingRuntimeCandidates(options.loaderGeneratedClassSet, options.sourceCandidates) && !hasStaleRuntimeCandidates(options.loaderGeneratedClassSet, options.sourceCandidates));
332
+ }
333
+ function hasDeferredWebpackGeneratedCss(source, generatedClassSets) {
334
+ const selectors = collectRawSourceClassSelectors(source);
335
+ for (const classSet of generatedClassSets) for (const candidate of classSet) if (selectors.has(candidate)) return true;
336
+ return false;
314
337
  }
315
338
  function hasUsableWebpackGeneratorCssSources(cssSources) {
316
339
  return Array.isArray(cssSources) && cssSources.some((source) => typeof source?.css === "string" && source.css.length > 0);
@@ -399,7 +422,8 @@ function isWebpackKeyframesRule(rule) {
399
422
  }
400
423
  function collectWebpackBareSelectorUserCss(source) {
401
424
  try {
402
- const root = postcss.parse(removeTailwindSourceDirectives(stripTailwindSourceMediaFragments(removeTailwindV4GeneratorAtRules(source)), { importFallback: true }));
425
+ const normalizedSource = removeTailwindSourceDirectives(stripTailwindSourceMediaFragments(removeTailwindV4GeneratorAtRules(source)), { importFallback: true });
426
+ const root = postcss.parse(normalizedSource);
403
427
  let changed = false;
404
428
  root.walkAtRules((rule) => {
405
429
  if (rule.name === "import" || rule.name === "font-face" || rule.name.endsWith("keyframes")) {
@@ -419,7 +443,7 @@ function collectWebpackBareSelectorUserCss(source) {
419
443
  changed = true;
420
444
  }
421
445
  });
422
- return changed ? root.toString() : source;
446
+ return changed ? root.toString() : normalizedSource;
423
447
  } catch {
424
448
  return "";
425
449
  }
@@ -699,7 +723,9 @@ function createWebpackGeneratorUserCssSourceAppend(...sources) {
699
723
  let css = "";
700
724
  const usedParts = [];
701
725
  for (const source of parts) {
702
- const nextCss = css.trim().length > 0 ? filterExistingCssRules(css, source.css) : source.css;
726
+ const merged = css.trim().length > 0 ? mergeCoveredCssRuleDeclarations(css, source.css) : void 0;
727
+ if (merged?.changed) css = merged.baseCss;
728
+ const nextCss = css.trim().length > 0 ? filterExistingCssRules(css, merged?.css ?? source.css) : source.css;
703
729
  if (!(nextCss.trim().length > 0)) continue;
704
730
  css = createCssSourceOrderAppend(css, nextCss);
705
731
  usedParts.push(source);
@@ -877,7 +903,7 @@ function finalizeWebpackCssAssetSource(source, compilerOptions, isWebGeneratorTa
877
903
  function finalizeWebpackCssAssetOutputSource(source, compilerOptions, isWebGeneratorTarget) {
878
904
  if (isWebGeneratorTarget) return source;
879
905
  const styleOptions = resolveStyleOptionsFromContext(compilerOptions);
880
- return stripMiniProgramCssSpecificityPlaceholders(removeMiniProgramHoverSelectors(dedupeMiniProgramPreflightSelectorRules(source), styleOptions.cssRemoveHoverPseudoClass));
906
+ return stripMiniProgramCssSpecificityPlaceholders(removeMiniProgramHoverSelectors(dedupeCoveredCssRules(dedupeMiniProgramPreflightSelectorRules(source)), styleOptions.cssRemoveHoverPseudoClass));
881
907
  }
882
908
  function collectWebpackJsRuntimeCandidatesFromAssets(options) {
883
909
  if (options.isWebGeneratorTarget) return;
@@ -968,7 +994,7 @@ function collectMainImportedCssFiles(compilation, cssAssetFiles, cssMatcher, isM
968
994
  return files;
969
995
  }
970
996
  function createWebpackCssSourceResolvers(options) {
971
- const { activeWebpackAssetResourceFiles, appType, compilerOptions, compilation, cssAssetFiles, cssAssetResources, cssHandlerOptionsCache, cssSources, cssUserHandlerOptionsCache, groupedCssEntriesLength, singleCssAssetFile, isWebGeneratorTarget, outputDir, runtimeState } = options;
997
+ const { activeWebpackAssetResourceFiles, appType, compilerOptions, compilation, cssAssetFiles, cssAssetResources, directCssAssetResources, cssHandlerOptionsCache, cssSources, cssUserHandlerOptionsCache, groupedCssEntriesLength, singleCssAssetFile, isWebGeneratorTarget, outputDir, runtimeState } = options;
972
998
  const hasConfiguredTailwindV4SourceRoots = () => {
973
999
  const tailwindOptions = resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
974
1000
  return (tailwindOptions?.v4?.cssEntries?.length ?? 0) > 0 || (tailwindOptions?.v4?.cssSources?.length ?? 0) > 0;
@@ -985,7 +1011,7 @@ function createWebpackCssSourceResolvers(options) {
985
1011
  cwd: compilerOptions.tailwindcssBasedir
986
1012
  });
987
1013
  const isConfiguredMainCssEntryFile = (sourceFile) => configuredMainCssEntryFiles.some((entry) => path.resolve(entry) === path.resolve(sourceFile));
988
- const isCssSourceAllowedForOutput = (file, sourceFile) => !isConfiguredMainCssEntryFile(sourceFile) || scoreCssSourceOutputMatch(file, sourceFile) > 0;
1014
+ const isCssSourceAllowedForOutput = (file, sourceFile) => !isConfiguredMainCssEntryFile(sourceFile) || directCssAssetResources.get(file)?.has(sourceFile) === true || scoreCssSourceOutputMatch(file, sourceFile) > 0;
989
1015
  const inferredMainCssFiles = new Set([...inferWebpackMainCssFiles(compilation.chunks, compilerOptions.cssMatcher, {
990
1016
  mainSourceFiles: new Set(configuredMainCssEntryFiles),
991
1017
  resourcesByAsset: cssAssetResources
@@ -1026,6 +1052,12 @@ function createWebpackCssSourceResolvers(options) {
1026
1052
  return resolveConfiguredMainCssSourceFile(file);
1027
1053
  }
1028
1054
  const resourceMatches = [...assetResources ?? []].filter((sourceFile) => cssSources.has(sourceFile)).filter((sourceFile) => isCssSourceAllowedForOutput(file, sourceFile)).sort();
1055
+ const configuredResourceMatches = resourceMatches.filter((sourceFile) => configuredCssEntryFiles.some((entry) => path.resolve(entry) === path.resolve(sourceFile)));
1056
+ if (configuredResourceMatches.length === 1) {
1057
+ const sourceFile = configuredResourceMatches[0];
1058
+ activeWebpackCssSourceFiles.add(sourceFile);
1059
+ return sourceFile;
1060
+ }
1029
1061
  if (resourceMatches.length === 1) {
1030
1062
  const sourceFile = resourceMatches[0];
1031
1063
  activeWebpackCssSourceFiles.add(sourceFile);
@@ -1576,6 +1608,10 @@ function setupWebpackV5ProcessAssetsHook(options) {
1576
1608
  appType,
1577
1609
  cssMatcher: compilerOptions.cssMatcher
1578
1610
  }));
1611
+ const directCssAssetResources = createWebpackDirectCssAssetResourceMap(compilation.chunks, compilation.chunkGraph, compilerOptions.cssMatcher, (resource, issuer) => resolveWebpackCssAssetModuleResource(resource, issuer, {
1612
+ appType,
1613
+ cssMatcher: compilerOptions.cssMatcher
1614
+ }));
1579
1615
  const watchChangedFiles = new Set([...getWatchChangedFiles?.() ?? []].map((file) => path.resolve(file)));
1580
1616
  const taskConcurrency = watchMode ? resolveTaskConcurrency(1) : void 0;
1581
1617
  const activeProcessCacheKeys = /* @__PURE__ */ new Set();
@@ -1596,6 +1632,7 @@ function setupWebpackV5ProcessAssetsHook(options) {
1596
1632
  compilation,
1597
1633
  cssAssetFiles: entries.map(([file]) => file),
1598
1634
  cssAssetResources,
1635
+ directCssAssetResources,
1599
1636
  cssHandlerOptionsCache,
1600
1637
  cssSources,
1601
1638
  cssUserHandlerOptionsCache,
@@ -1896,8 +1933,16 @@ function setupWebpackV5ProcessAssetsHook(options) {
1896
1933
  },
1897
1934
  transform: async () => {
1898
1935
  const source = readCurrentProcessedRawSource();
1899
- const processedBareSelectorSourceCss = processedSourceCss ?? (hasTailwindGeneratedAssetCss ? removeWebpackTailwindGeneratedAssetCss(source) : void 0);
1900
- const handledCss = hasTailwindGeneratedAssetCss && !hasGeneratedCssMarker ? isWebGeneratorTarget ? source : (await compilerOptions.styleHandler(source, cssHandlerOptionsForProcessedAsset)).css : source;
1936
+ const missingProcessedLoaderGeneratedCss = isWebGeneratorTarget && processedLoaderGeneratedCss ? filterExistingCssRules(source, stripBundlerGeneratedCssMarkers(processedLoaderGeneratedCss.css)) : "";
1937
+ const sourceWithLoaderGeneratedCss = missingProcessedLoaderGeneratedCss.trim().length === 0 ? source : createWebpackGeneratorUserCssSourceAppend({
1938
+ css: source,
1939
+ processed: true
1940
+ }, {
1941
+ css: missingProcessedLoaderGeneratedCss,
1942
+ processed: true
1943
+ }).css;
1944
+ const processedBareSelectorSourceCss = processedSourceCss ?? (hasTailwindGeneratedAssetCss ? removeWebpackTailwindGeneratedAssetCss(sourceWithLoaderGeneratedCss) : void 0);
1945
+ const handledCss = hasTailwindGeneratedAssetCss && (!hasGeneratedCssMarker || !isWebGeneratorTarget && hasDeferredWebpackGeneratedCss(source, [...generatedCssSources.values()].map((item) => item.classSet))) ? isWebGeneratorTarget ? sourceWithLoaderGeneratedCss : (await compilerOptions.styleHandler(sourceWithLoaderGeneratedCss, cssHandlerOptionsForProcessedAsset)).css : sourceWithLoaderGeneratedCss;
1901
1946
  const nextCss = stripTrailingLineWhitespace(finalizeCssAssetSource(handledCss, {
1902
1947
  cssPreflight: cssHandlerOptionsForProcessedAsset.isMainChunk,
1903
1948
  generatedCss: hasGeneratedCssMarker || hasTailwindGeneratedAssetCss
@@ -1990,10 +2035,11 @@ function setupWebpackV5ProcessAssetsHook(options) {
1990
2035
  const isConfiguredMainCssSource = sourceFile !== void 0 && configuredMainCssEntryFiles.some((entry) => path.resolve(entry) === path.resolve(sourceFile));
1991
2036
  const sourceCssHasTailwindRoot = sourceCss !== void 0 && hasTailwindRootDirectives(sourceCss, { importFallback: true });
1992
2037
  const shouldPreserveExistingPreflight = cssHandlerOptions.isMainChunk || !isConfiguredMainCssSource && (isConfiguredCssSource || sourceCssHasTailwindRoot);
1993
- const loaderGeneratedCss = sourceFile && !isWebGeneratorTarget ? generatedCssSources.get(path.resolve(sourceFile)) : void 0;
2038
+ const loaderGeneratedCss = sourceFile ? generatedCssSources.get(path.resolve(sourceFile)) : void 0;
1994
2039
  const shouldRegenerateExplicitTailwindV4CssSource = sourceCss !== void 0 && (hasTailwindSourceDirectives(sourceCss, { importFallback: true }) || sourceCss.includes("@config"));
1995
2040
  const explicitTailwindV4SourceCandidates = shouldRegenerateExplicitTailwindV4CssSource && sourceCss && sourceFile && webpackSourceCandidates?.getSourceCandidatesForEntries ? await resolveTailwindV4EntriesFromCssCached(sourceCss, path.dirname(sourceFile)).then((resolved) => resolved?.entries ? webpackSourceCandidates.getSourceCandidatesForEntries(resolved.entries) : void 0) : void 0;
1996
2041
  if (loaderGeneratedCss && shouldConsumeWebpackLoaderGeneratedCss({
2042
+ allowMarkerlessRegistryMatch: configuredCssEntryFiles.length === 1,
1997
2043
  hasBundlerGeneratedCssMarker: hasBundlerGeneratedCssMarker(currentRawSource),
1998
2044
  loaderGeneratedClassSet: loaderGeneratedCss.classSet,
1999
2045
  sourceCandidates: explicitTailwindV4SourceCandidates,
@@ -2026,7 +2072,8 @@ function setupWebpackV5ProcessAssetsHook(options) {
2026
2072
  css: currentAssetUserCss,
2027
2073
  processed: true
2028
2074
  }).css;
2029
- const finalizedLoaderCss = finalizeCssAssetSource(mergedLoaderCss, {
2075
+ const handledLoaderCss = isWebGeneratorTarget ? mergedLoaderCss : (await compilerOptions.styleHandler(mergedLoaderCss, cssHandlerOptions)).css;
2076
+ const finalizedLoaderCss = finalizeCssAssetSource(handledLoaderCss, {
2030
2077
  cssPreflight: cssHandlerOptions.isMainChunk,
2031
2078
  generatedCss: true,
2032
2079
  preserveExistingPreflight: shouldPreserveExistingPreflight
@@ -2044,7 +2091,8 @@ function setupWebpackV5ProcessAssetsHook(options) {
2044
2091
  processed: source.processed
2045
2092
  };
2046
2093
  }));
2047
- const finalizedLoaderSourceBareUserCss = loaderSourceBareUserCss === void 0 ? "" : finalizeCssAssetSource(loaderSourceBareUserCss.css, {
2094
+ const handledLoaderSourceBareUserCss = loaderSourceBareUserCss === void 0 ? "" : loaderSourceBareUserCss.processed ? loaderSourceBareUserCss.css : (await compilerOptions.styleHandler(loaderSourceBareUserCss.css, cssHandlerOptions)).css;
2095
+ const finalizedLoaderSourceBareUserCss = handledLoaderSourceBareUserCss.trim().length === 0 ? "" : finalizeCssAssetSource(handledLoaderSourceBareUserCss, {
2048
2096
  cssPreflight: false,
2049
2097
  generatedCss: false
2050
2098
  });
@@ -2178,7 +2226,8 @@ function setupWebpackV5ProcessAssetsHook(options) {
2178
2226
  processed: source.processed
2179
2227
  };
2180
2228
  }));
2181
- const finalizedSourceBareUserCss = sourceBareUserCss === void 0 ? "" : finalizeCssAssetSource(sourceBareUserCss.css, {
2229
+ const handledSourceBareUserCss = sourceBareUserCss === void 0 ? "" : sourceBareUserCss.processed ? sourceBareUserCss.css : (await compilerOptions.styleHandler(sourceBareUserCss.css, cssHandlerOptions)).css;
2230
+ const finalizedSourceBareUserCss = handledSourceBareUserCss.trim().length === 0 ? "" : finalizeCssAssetSource(handledSourceBareUserCss, {
2182
2231
  cssPreflight: false,
2183
2232
  generatedCss: false
2184
2233
  });
@@ -2280,6 +2329,30 @@ function installTailwindcssCssRedirect(pkgDir) {
2280
2329
  const localRequire = createRequire(import.meta.url);
2281
2330
  const MPX_STYLE_RESOURCE_QUERY_RE = /(?:^|[?&])type=styles(?:&|$)/;
2282
2331
  const MPX_WEBPACK_PLUGIN_PACKAGE_RE = /@mpxjs[\\/]webpack-plugin[\\/]package\.json$/;
2332
+ const MPX_WEBPACK_PLUGIN_LIB_RE = /^(.*[\\/]@mpxjs[\\/]webpack-plugin)[\\/]lib[\\/]/;
2333
+ const MPX_WEBPACK_PLUGIN_REQUEST_RE = /@mpxjs\/webpack-plugin\/([^!?]+)/g;
2334
+ function findMpxWebpackPluginDirFromRules(rules) {
2335
+ const visit = (value) => {
2336
+ if (typeof value === "string") return value.match(MPX_WEBPACK_PLUGIN_LIB_RE)?.[1];
2337
+ if (Array.isArray(value)) {
2338
+ for (const item of value) {
2339
+ const result = visit(item);
2340
+ if (result) return result;
2341
+ }
2342
+ return;
2343
+ }
2344
+ if (value && typeof value === "object") for (const key of [
2345
+ "loader",
2346
+ "use",
2347
+ "rules",
2348
+ "oneOf"
2349
+ ]) {
2350
+ const result = visit(value[key]);
2351
+ if (result) return result;
2352
+ }
2353
+ };
2354
+ return visit(rules);
2355
+ }
2283
2356
  function isMpxStyleResourceQuery(query) {
2284
2357
  if (typeof query !== "string") return false;
2285
2358
  return MPX_STYLE_RESOURCE_QUERY_RE.test(query);
@@ -2288,6 +2361,12 @@ function getTailwindcssCssEntry(pkgDir) {
2288
2361
  return path.join(pkgDir, "index.css");
2289
2362
  }
2290
2363
  function resolveMpxWebpackPluginDir(compiler) {
2364
+ const rulePluginDir = findMpxWebpackPluginDirFromRules([
2365
+ compiler?._module?.loaders,
2366
+ compiler?.loaders,
2367
+ compiler?.options?.module?.rules
2368
+ ]);
2369
+ if (rulePluginDir) return rulePluginDir;
2291
2370
  const candidates = [
2292
2371
  compiler?.context,
2293
2372
  compiler?.options?.context,
@@ -2305,6 +2384,45 @@ function resolveMpxWebpackPluginDir(compiler) {
2305
2384
  return;
2306
2385
  }
2307
2386
  }
2387
+ function rewriteMpxWebpackPluginRequests(request, mpxWebpackPluginDir, pathImpl = path) {
2388
+ return request.replace(MPX_WEBPACK_PLUGIN_REQUEST_RE, (_full, subpath) => {
2389
+ return pathImpl.join(mpxWebpackPluginDir, ...subpath.split("/"));
2390
+ });
2391
+ }
2392
+ function patchMpxWebpackPluginRequests(compiler, mpxWebpackPluginDir) {
2393
+ if (!mpxWebpackPluginDir || !compiler) return false;
2394
+ const pluginName = "weapp-tailwindcss-mpx-loader-resolve";
2395
+ const patchedCompilers = /* @__PURE__ */ new WeakSet();
2396
+ const patchedLoaderResolvers = /* @__PURE__ */ new WeakSet();
2397
+ const patchedResolverFactories = /* @__PURE__ */ new WeakSet();
2398
+ const install = (targetCompiler) => {
2399
+ if (!targetCompiler || typeof targetCompiler !== "object" || patchedCompilers.has(targetCompiler)) return;
2400
+ patchedCompilers.add(targetCompiler);
2401
+ ensureResolveLoaderAlias(targetCompiler, mpxWebpackPluginDir);
2402
+ const resolverFactory = targetCompiler.resolverFactory;
2403
+ if (resolverFactory && typeof resolverFactory === "object" && !patchedResolverFactories.has(resolverFactory)) {
2404
+ patchedResolverFactories.add(resolverFactory);
2405
+ installMpxResolveLoaderAlias(targetCompiler, mpxWebpackPluginDir);
2406
+ }
2407
+ targetCompiler.hooks?.normalModuleFactory?.tap?.(pluginName, (normalModuleFactory) => {
2408
+ const loaderResolver = normalModuleFactory.getResolver?.("loader");
2409
+ if (loaderResolver && typeof loaderResolver === "object" && !patchedLoaderResolvers.has(loaderResolver)) {
2410
+ patchedLoaderResolvers.add(loaderResolver);
2411
+ patchMpxLoaderResolver(loaderResolver, mpxWebpackPluginDir);
2412
+ }
2413
+ normalModuleFactory.hooks.beforeResolve.tap(pluginName, (resolveData) => {
2414
+ if (typeof resolveData?.request === "string") resolveData.request = rewriteMpxWebpackPluginRequests(resolveData.request, mpxWebpackPluginDir);
2415
+ });
2416
+ });
2417
+ targetCompiler.hooks?.compilation?.tap?.(pluginName, (compilation) => {
2418
+ compilation.hooks?.childCompiler?.tap?.(pluginName, (childCompiler) => {
2419
+ install(childCompiler);
2420
+ });
2421
+ });
2422
+ };
2423
+ install(compiler);
2424
+ return true;
2425
+ }
2308
2426
  function isMpxWebpackPluginRequest(request) {
2309
2427
  return request === "@mpxjs/webpack-plugin" || Boolean(request?.startsWith("@mpxjs/webpack-plugin/"));
2310
2428
  }
@@ -2343,27 +2461,39 @@ function ensureResolveLoaderAlias(compiler, mpxWebpackPluginDir) {
2343
2461
  compiler.options.resolveLoader.alias = alias;
2344
2462
  addMpxWebpackPluginAlias(alias, mpxWebpackPluginDir);
2345
2463
  }
2346
- function resolveMpxWebpackPluginRequire(compiler) {
2347
- const candidates = [
2348
- compiler?.context,
2349
- compiler?.options?.context,
2350
- process.cwd()
2351
- ].filter((item) => typeof item === "string" && item.length > 0);
2352
- for (const candidate of candidates) try {
2353
- const projectRequire = createRequire(path.join(candidate, "package.json"));
2354
- projectRequire.resolve("@mpxjs/webpack-plugin/package.json");
2355
- return projectRequire;
2356
- } catch {}
2357
- const cachedPackageJson = Object.keys(localRequire.cache).find((file) => MPX_WEBPACK_PLUGIN_PACKAGE_RE.test(file));
2358
- if (cachedPackageJson) return createRequire(cachedPackageJson);
2359
- return localRequire;
2464
+ function installMpxResolveLoaderAlias(compiler, mpxWebpackPluginDir) {
2465
+ const resolveOptionsHook = compiler?.resolverFactory?.hooks?.resolveOptions?.for?.("loader");
2466
+ if (!resolveOptionsHook?.tap) return;
2467
+ resolveOptionsHook.tap({
2468
+ name: "weapp-tailwindcss-mpx-loader-resolve",
2469
+ stage: 100
2470
+ }, (resolveOptions) => {
2471
+ const alias = Array.isArray(resolveOptions.alias) ? [...resolveOptions.alias] : { ...resolveOptions.alias };
2472
+ addMpxWebpackPluginAlias(alias, mpxWebpackPluginDir);
2473
+ return {
2474
+ ...resolveOptions,
2475
+ alias
2476
+ };
2477
+ });
2478
+ }
2479
+ function patchMpxLoaderResolver(resolver, mpxWebpackPluginDir) {
2480
+ const originalResolve = resolver?.resolve;
2481
+ if (typeof originalResolve !== "function" || originalResolve.__weappTwPatched) return;
2482
+ const wrappedResolve = function(...args) {
2483
+ const requestIndex = typeof args[0] === "string" ? 1 : 2;
2484
+ const request = args[requestIndex];
2485
+ if (typeof request === "string" && isMpxWebpackPluginRequest(request)) args[requestIndex] = resolveMpxWebpackPluginRequest(request, mpxWebpackPluginDir);
2486
+ return originalResolve.apply(this, args);
2487
+ };
2488
+ wrappedResolve.__weappTwPatched = true;
2489
+ wrappedResolve.__weappTwOriginal = originalResolve;
2490
+ resolver.resolve = wrappedResolve;
2360
2491
  }
2361
- function patchMpxWebpackPluginNormalizeLib(compiler, mpxWebpackPluginDir) {
2492
+ function patchMpxWebpackPluginNormalizeLib(_compiler, mpxWebpackPluginDir) {
2362
2493
  if (!mpxWebpackPluginDir) return false;
2363
- const projectRequire = resolveMpxWebpackPluginRequire(compiler);
2364
2494
  let normalize;
2365
2495
  try {
2366
- normalize = projectRequire("@mpxjs/webpack-plugin/lib/utils/normalize");
2496
+ normalize = createRequire(path.join(mpxWebpackPluginDir, "package.json"))(path.join(mpxWebpackPluginDir, "lib/utils/normalize"));
2367
2497
  } catch {
2368
2498
  return false;
2369
2499
  }
@@ -2381,6 +2511,7 @@ function ensureMpxTailwindcssAliases(compiler, pkgDir) {
2381
2511
  compiler.options.resolve = compiler.options.resolve || {};
2382
2512
  const mpxWebpackPluginDir = resolveMpxWebpackPluginDir(compiler);
2383
2513
  patchMpxWebpackPluginNormalizeLib(compiler, mpxWebpackPluginDir);
2514
+ patchMpxWebpackPluginRequests(compiler, mpxWebpackPluginDir);
2384
2515
  if (mpxWebpackPluginDir) ensureResolveLoaderAlias(compiler, mpxWebpackPluginDir);
2385
2516
  const alias = compiler.options.resolve.alias ?? {};
2386
2517
  compiler.options.resolve.alias = alias;
@@ -2399,19 +2530,29 @@ function ensureMpxTailwindcssAliases(compiler, pkgDir) {
2399
2530
  return tailwindcssCssEntry;
2400
2531
  }
2401
2532
  function patchMpxLoaderResolve(loaderContext, pkgDir, enabled) {
2402
- if (!enabled || typeof loaderContext.resolve !== "function") return;
2403
- const originalResolve = loaderContext.resolve;
2404
- if (originalResolve.__weappTwPatched) return;
2533
+ if (!enabled) return;
2405
2534
  const tailwindcssCssEntry = getTailwindcssCssEntry(pkgDir);
2406
2535
  const mpxWebpackPluginDir = resolveMpxWebpackPluginDir(loaderContext);
2407
- const wrappedResolve = function(context, request, callback) {
2408
- if (request === "tailwindcss" || request === "tailwindcss$") return callback(null, tailwindcssCssEntry);
2409
- if (request?.startsWith("tailwindcss/")) return callback(null, path.join(pkgDir, request.slice(12)));
2410
- if (mpxWebpackPluginDir && isMpxWebpackPluginRequest(request)) return callback(null, resolveMpxWebpackPluginRequest(request, mpxWebpackPluginDir));
2411
- return originalResolve.call(this, context, request, callback);
2412
- };
2413
- wrappedResolve.__weappTwPatched = true;
2414
- loaderContext.resolve = wrappedResolve;
2536
+ const originalResolve = loaderContext.resolve;
2537
+ if (typeof originalResolve === "function" && !originalResolve.__weappTwPatched) {
2538
+ const wrappedResolve = function(context, request, callback) {
2539
+ if (request === "tailwindcss" || request === "tailwindcss$") return callback(null, tailwindcssCssEntry);
2540
+ if (request?.startsWith("tailwindcss/")) return callback(null, path.join(pkgDir, request.slice(12)));
2541
+ if (mpxWebpackPluginDir && isMpxWebpackPluginRequest(request)) return callback(null, resolveMpxWebpackPluginRequest(request, mpxWebpackPluginDir));
2542
+ return originalResolve.call(this, context, request, callback);
2543
+ };
2544
+ wrappedResolve.__weappTwPatched = true;
2545
+ loaderContext.resolve = wrappedResolve;
2546
+ }
2547
+ const originalImportModule = loaderContext.importModule;
2548
+ if (mpxWebpackPluginDir && typeof originalImportModule === "function" && !originalImportModule.__weappTwPatched) {
2549
+ const wrappedImportModule = function(request, ...args) {
2550
+ const resolvedRequest = typeof request === "string" ? rewriteMpxWebpackPluginRequests(request, mpxWebpackPluginDir) : request;
2551
+ return originalImportModule.call(this, resolvedRequest, ...args);
2552
+ };
2553
+ wrappedImportModule.__weappTwPatched = true;
2554
+ loaderContext.importModule = wrappedImportModule;
2555
+ }
2415
2556
  }
2416
2557
  function setupMpxTailwindcssRedirect(pkgDir, enabled) {
2417
2558
  if (enabled) installTailwindcssCssRedirect(pkgDir);
@@ -2496,11 +2637,14 @@ function setupWebpackV5Loaders(options) {
2496
2637
  if (shouldRewriteCssImports && mpxCssImportRewrite) ensureMpxTailwindcssAliases(compiler, weappTailwindcssPackageDir);
2497
2638
  const runtimeClassSetLoader = runtimeLoaderPath ?? path.resolve(__dirname, "./weapp-tw-runtime-classset-loader.js");
2498
2639
  const shouldInjectRuntimeClassSetLoader = !generatorBranch.isWeb;
2499
- const shouldInjectCssImportRewriteLoader = shouldRewriteCssImports || generatorOptions.enabled && (!generatorBranch.isWeb || runtimeState.tailwindRuntime.majorVersion === 4);
2640
+ const shouldInjectCssGenerationLoader = generatorOptions.enabled && runtimeState.tailwindRuntime.majorVersion === 4 && (generatorTarget === "web" || generatorTarget === "weapp");
2641
+ const shouldInjectCssImportRewriteLoader = shouldRewriteCssImports || shouldInjectCssGenerationLoader;
2642
+ const runtimeCssGenerationLoader = shouldInjectCssGenerationLoader ? path.resolve(__dirname, "./weapp-tw-css-generation-loader.js") : void 0;
2500
2643
  const runtimeCssImportRewriteLoader = shouldInjectCssImportRewriteLoader ? path.resolve(__dirname, "./weapp-tw-css-import-rewrite-loader.js") : void 0;
2501
2644
  const runtimeClassSetLoaderExists = fs.existsSync(runtimeClassSetLoader);
2645
+ const runtimeCssGenerationLoaderExists = runtimeCssGenerationLoader ? fs.existsSync(runtimeCssGenerationLoader) : false;
2502
2646
  const runtimeCssImportRewriteLoaderExists = runtimeCssImportRewriteLoader ? fs.existsSync(runtimeCssImportRewriteLoader) : false;
2503
- const runtimeLoaderRewriteOptions = shouldInjectCssImportRewriteLoader ? {
2647
+ const runtimeLoaderRewriteOptions = shouldInjectCssImportRewriteLoader || shouldInjectCssGenerationLoader ? {
2504
2648
  pkgDir: weappTailwindcssPackageDir,
2505
2649
  compilerOptions,
2506
2650
  runtimeState,
@@ -2525,7 +2669,11 @@ function setupWebpackV5Loaders(options) {
2525
2669
  compiler.hooks.watchClose?.tap?.(pluginName, cleanupWebpackLoaderRuntime);
2526
2670
  compiler.hooks.shutdown?.tap?.(pluginName, cleanupWebpackLoaderRuntime);
2527
2671
  const { findRewriteAnchor, findClassSetAnchor } = loaderAnchorFinders;
2528
- const cssImportRewriteLoaderOptions = runtimeLoaderRewriteOptions ? { tailwindcssImportRewriteRuntimeKey: runtimeRegistryKey } : void 0;
2672
+ const cssImportRewriteLoaderOptions = runtimeLoaderRewriteOptions && shouldInjectCssImportRewriteLoader ? {
2673
+ generateCss: false,
2674
+ tailwindcssImportRewriteRuntimeKey: runtimeRegistryKey
2675
+ } : void 0;
2676
+ const cssGenerationLoaderOptions = runtimeLoaderRewriteOptions && shouldInjectCssGenerationLoader ? { tailwindcssImportRewriteRuntimeKey: runtimeRegistryKey } : void 0;
2529
2677
  if (runtimeCssImportRewriteLoader && shouldRewriteCssImports && cssImportRewriteLoaderOptions && mpxCssImportRewrite) injectMpxCssRewritePreRules(compiler, runtimeCssImportRewriteLoader, cssImportRewriteLoaderOptions);
2530
2678
  const createRuntimeClassSetLoaderEntry = () => ({
2531
2679
  loader: runtimeClassSetLoader,
@@ -2542,10 +2690,22 @@ function setupWebpackV5Loaders(options) {
2542
2690
  type: null
2543
2691
  };
2544
2692
  };
2693
+ const createCssGenerationLoaderEntry = () => {
2694
+ if (!runtimeCssGenerationLoader || !cssGenerationLoaderOptions) return null;
2695
+ return {
2696
+ loader: runtimeCssGenerationLoader,
2697
+ options: cssGenerationLoaderOptions,
2698
+ ident: null,
2699
+ type: null
2700
+ };
2701
+ };
2545
2702
  const { NormalModule } = compiler.webpack;
2546
2703
  compiler.hooks.compilation.tap(pluginName, (compilation) => {
2547
- NormalModule.getCompilationHooks(compilation).loader.tap(pluginName, (_loaderContext, module) => {
2548
- if (!(runtimeClassSetLoaderExists || runtimeCssImportRewriteLoaderExists)) return;
2704
+ NormalModule.getCompilationHooks(compilation).loader.tap({
2705
+ name: pluginName,
2706
+ stage: 100
2707
+ }, (_loaderContext, module) => {
2708
+ if (!(runtimeClassSetLoaderExists || runtimeCssGenerationLoaderExists || runtimeCssImportRewriteLoaderExists)) return;
2549
2709
  patchMpxLoaderResolve(_loaderContext, weappTailwindcssPackageDir, shouldRewriteCssImports && mpxCssImportRewrite);
2550
2710
  const loaderEntries = module.loaders || [];
2551
2711
  let rewriteAnchorIdx = findRewriteAnchor(loaderEntries);
@@ -2565,6 +2725,12 @@ function setupWebpackV5Loaders(options) {
2565
2725
  if (position === "after") loaderEntries.push(entry);
2566
2726
  else loaderEntries.unshift(entry);
2567
2727
  };
2728
+ if (cssGenerationLoaderOptions && runtimeCssGenerationLoaderExists && runtimeCssGenerationLoader && isCssModule && !hasLoaderEntry(loaderEntries, runtimeCssGenerationLoader)) {
2729
+ const generationLoaderEntry = createCssGenerationLoaderEntry();
2730
+ const anchorIndex = findRewriteAnchor(loaderEntries);
2731
+ if (generationLoaderEntry) if (anchorIndex === -1) anchorlessInsert(generationLoaderEntry, "after");
2732
+ else loaderEntries.splice(anchorIndex + 1, 0, generationLoaderEntry);
2733
+ }
2568
2734
  if (cssImportRewriteLoaderOptions && runtimeCssImportRewriteLoaderExists && runtimeCssImportRewriteLoader && isCssModule) {
2569
2735
  const existingIndex = loaderEntries.findIndex((entry) => entry.loader?.includes?.(runtimeCssImportRewriteLoader));
2570
2736
  const rewriteLoaderEntry = existingIndex !== -1 ? {