weapp-tailwindcss 5.1.13 → 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 (78) 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/css-finalizer.d.ts +1 -0
  12. package/dist/bundlers/vite/frameworks/taro/index.d.ts +2 -0
  13. package/dist/bundlers/vite/frameworks/uni-app/index.d.ts +2 -0
  14. package/dist/bundlers/vite/frameworks/uni-app-x/index.d.ts +2 -0
  15. package/dist/bundlers/vite/generate-bundle/bundle-markup-candidates.d.ts +20 -0
  16. package/dist/bundlers/vite/generate-bundle/css-handler-options.d.ts +1 -0
  17. package/dist/bundlers/vite/generate-bundle/remembered-css-replay.d.ts +4 -0
  18. package/dist/bundlers/vite/generate-bundle/root-style-output.d.ts +18 -0
  19. package/dist/bundlers/vite/generate-bundle/sfc-style-source.d.ts +2 -1
  20. package/dist/bundlers/vite/generate-bundle/source-candidate-source.d.ts +1 -0
  21. package/dist/bundlers/vite/generate-bundle/types.d.ts +7 -0
  22. package/dist/bundlers/vite/serve-css-generation.d.ts +3 -2
  23. package/dist/bundlers/vite/serve-root-import-shell.d.ts +8 -0
  24. package/dist/bundlers/vite/shared/create-framework-plugins.d.ts +1 -0
  25. package/dist/bundlers/vite/source-candidates.d.ts +3 -0
  26. package/dist/bundlers/vite/watch-css-post.d.ts +10 -0
  27. package/dist/bundlers/webpack/BaseUnifiedPlugin/shared.d.ts +6 -0
  28. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/css-source-resolvers.d.ts +1 -0
  29. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/pipeline-helpers.d.ts +2 -0
  30. package/dist/bundlers/webpack/loaders/runtime-registry.d.ts +1 -0
  31. package/dist/bundlers/webpack/loaders/weapp-tw-css-generation-loader.d.ts +4 -0
  32. package/dist/bundlers/webpack/loaders/weapp-tw-css-import-rewrite-loader.d.ts +3 -0
  33. package/dist/{context-xSJE588m.mjs → context-BgGWVAmN.mjs} +5 -3
  34. package/dist/{context-DRRgW7i2.js → context-VeFq_8vW.js} +5 -3
  35. package/dist/core.js +1 -1
  36. package/dist/core.mjs +1 -1
  37. package/dist/css-macro.mjs +1 -1
  38. package/dist/{generator-CS10c9g1.js → generator-CEnUsjed.js} +17 -3
  39. package/dist/{generator-BvPcmqxU.mjs → generator-CEo920So.mjs} +18 -4
  40. package/dist/generator.js +1 -1
  41. package/dist/generator.mjs +1 -1
  42. package/dist/{gulp-DNZZvUMq.js → gulp-3m1dAiig.js} +92 -54
  43. package/dist/{gulp-BEOzXrbp.mjs → gulp-DP71z1jG.mjs} +92 -54
  44. package/dist/gulp.js +1 -1
  45. package/dist/gulp.mjs +1 -1
  46. package/dist/{hmr-timing-hRhRAjYV.mjs → hmr-timing-1aS6--U7.mjs} +272 -56
  47. package/dist/{hmr-timing-DW1g3zjl.js → hmr-timing-B8p4f0ca.js} +323 -53
  48. package/dist/index.js +4 -4
  49. package/dist/index.mjs +4 -4
  50. package/dist/postcss.js +1 -1
  51. package/dist/postcss.mjs +1 -1
  52. package/dist/presets.js +1 -1
  53. package/dist/presets.mjs +1 -1
  54. package/dist/rspack.js +1 -1
  55. package/dist/rspack.mjs +1 -1
  56. package/dist/shared/mpx.d.ts +4 -1
  57. package/dist/{source-candidate-scan-signature-CMgu5bJk.js → source-candidate-scan-signature-BAahhiwb.js} +20 -139
  58. package/dist/{source-candidate-scan-signature-t4XKAQ04.mjs → source-candidate-scan-signature-Cf7259PR.mjs} +21 -104
  59. package/dist/tailwindcss/candidates.d.ts +4 -0
  60. package/dist/{tailwindcss-z9JMF-qU.js → tailwindcss-KBYPJ2DW.js} +1 -1
  61. package/dist/{tailwindcss-DZT_pWrd.mjs → tailwindcss-xs704TRw.mjs} +1 -1
  62. package/dist/{transform-D5JUgMpE.mjs → transform-B_KM9sLX.mjs} +47 -5
  63. package/dist/{transform-COFRlmDF.js → transform-CcYptivi.js} +47 -5
  64. package/dist/uni-app-x/component-local-style.d.ts +1 -0
  65. package/dist/uni-app-x/style-asset/style-value.d.ts +1 -1
  66. package/dist/{vite-DnkObu2L.js → vite-DUVjMduj.js} +807 -320
  67. package/dist/{vite-Tpgi77vE.mjs → vite-nXZEiwG0.mjs} +757 -270
  68. package/dist/vite.js +1 -1
  69. package/dist/vite.mjs +1 -1
  70. package/dist/weapp-tw-css-generation-loader.js +12 -0
  71. package/dist/weapp-tw-css-import-rewrite-loader-DNk0IxAt.js +10198 -0
  72. package/dist/weapp-tw-css-import-rewrite-loader.js +6 -8209
  73. package/dist/{webpack-CTYm19zA.mjs → webpack-C_UUFRgj.mjs} +228 -58
  74. package/dist/{webpack-CzXjfvYS.js → webpack-nppysF4B.js} +240 -70
  75. package/dist/webpack.js +1 -1
  76. package/dist/webpack.mjs +1 -1
  77. package/package.json +11 -3
  78. 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-BvPcmqxU.mjs";
2
- import { g as resolveTailwindV4EntriesFromCssCached, l as getRuntimeClassSetSignature, p as resolveViteSourceScanEntries } from "./tailwindcss-DZT_pWrd.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-xSJE588m.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-hRhRAjYV.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-t4XKAQ04.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);
@@ -1511,7 +1543,11 @@ async function refreshWebpackSourceCandidates(options) {
1511
1543
  if (!sourceScan || !sourceScan.explicit && !sourceScan.entries?.length && !sourceScan.inlineCandidates) return;
1512
1544
  return options.scanCache.resolve({
1513
1545
  changedFiles: options.watchChangedFiles,
1514
- collector: createSourceCandidateStore({ bareArbitraryValues: options.compilerOptions.arbitraryValues?.bareArbitraryValues }),
1546
+ collector: createSourceCandidateStore({
1547
+ bareArbitraryValues: options.compilerOptions.arbitraryValues?.bareArbitraryValues,
1548
+ customAttributesEntities: options.compilerOptions.customAttributesEntities,
1549
+ disabledDefaultTemplateHandler: options.compilerOptions.disabledDefaultTemplateHandler
1550
+ }),
1515
1551
  outDir: options.outputDir,
1516
1552
  root,
1517
1553
  sourceScan,
@@ -1572,6 +1608,10 @@ function setupWebpackV5ProcessAssetsHook(options) {
1572
1608
  appType,
1573
1609
  cssMatcher: compilerOptions.cssMatcher
1574
1610
  }));
1611
+ const directCssAssetResources = createWebpackDirectCssAssetResourceMap(compilation.chunks, compilation.chunkGraph, compilerOptions.cssMatcher, (resource, issuer) => resolveWebpackCssAssetModuleResource(resource, issuer, {
1612
+ appType,
1613
+ cssMatcher: compilerOptions.cssMatcher
1614
+ }));
1575
1615
  const watchChangedFiles = new Set([...getWatchChangedFiles?.() ?? []].map((file) => path.resolve(file)));
1576
1616
  const taskConcurrency = watchMode ? resolveTaskConcurrency(1) : void 0;
1577
1617
  const activeProcessCacheKeys = /* @__PURE__ */ new Set();
@@ -1592,6 +1632,7 @@ function setupWebpackV5ProcessAssetsHook(options) {
1592
1632
  compilation,
1593
1633
  cssAssetFiles: entries.map(([file]) => file),
1594
1634
  cssAssetResources,
1635
+ directCssAssetResources,
1595
1636
  cssHandlerOptionsCache,
1596
1637
  cssSources,
1597
1638
  cssUserHandlerOptionsCache,
@@ -1892,8 +1933,16 @@ function setupWebpackV5ProcessAssetsHook(options) {
1892
1933
  },
1893
1934
  transform: async () => {
1894
1935
  const source = readCurrentProcessedRawSource();
1895
- const processedBareSelectorSourceCss = processedSourceCss ?? (hasTailwindGeneratedAssetCss ? removeWebpackTailwindGeneratedAssetCss(source) : void 0);
1896
- 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;
1897
1946
  const nextCss = stripTrailingLineWhitespace(finalizeCssAssetSource(handledCss, {
1898
1947
  cssPreflight: cssHandlerOptionsForProcessedAsset.isMainChunk,
1899
1948
  generatedCss: hasGeneratedCssMarker || hasTailwindGeneratedAssetCss
@@ -1986,10 +2035,11 @@ function setupWebpackV5ProcessAssetsHook(options) {
1986
2035
  const isConfiguredMainCssSource = sourceFile !== void 0 && configuredMainCssEntryFiles.some((entry) => path.resolve(entry) === path.resolve(sourceFile));
1987
2036
  const sourceCssHasTailwindRoot = sourceCss !== void 0 && hasTailwindRootDirectives(sourceCss, { importFallback: true });
1988
2037
  const shouldPreserveExistingPreflight = cssHandlerOptions.isMainChunk || !isConfiguredMainCssSource && (isConfiguredCssSource || sourceCssHasTailwindRoot);
1989
- const loaderGeneratedCss = sourceFile && !isWebGeneratorTarget ? generatedCssSources.get(path.resolve(sourceFile)) : void 0;
2038
+ const loaderGeneratedCss = sourceFile ? generatedCssSources.get(path.resolve(sourceFile)) : void 0;
1990
2039
  const shouldRegenerateExplicitTailwindV4CssSource = sourceCss !== void 0 && (hasTailwindSourceDirectives(sourceCss, { importFallback: true }) || sourceCss.includes("@config"));
1991
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;
1992
2041
  if (loaderGeneratedCss && shouldConsumeWebpackLoaderGeneratedCss({
2042
+ allowMarkerlessRegistryMatch: configuredCssEntryFiles.length === 1,
1993
2043
  hasBundlerGeneratedCssMarker: hasBundlerGeneratedCssMarker(currentRawSource),
1994
2044
  loaderGeneratedClassSet: loaderGeneratedCss.classSet,
1995
2045
  sourceCandidates: explicitTailwindV4SourceCandidates,
@@ -2022,7 +2072,8 @@ function setupWebpackV5ProcessAssetsHook(options) {
2022
2072
  css: currentAssetUserCss,
2023
2073
  processed: true
2024
2074
  }).css;
2025
- const finalizedLoaderCss = finalizeCssAssetSource(mergedLoaderCss, {
2075
+ const handledLoaderCss = isWebGeneratorTarget ? mergedLoaderCss : (await compilerOptions.styleHandler(mergedLoaderCss, cssHandlerOptions)).css;
2076
+ const finalizedLoaderCss = finalizeCssAssetSource(handledLoaderCss, {
2026
2077
  cssPreflight: cssHandlerOptions.isMainChunk,
2027
2078
  generatedCss: true,
2028
2079
  preserveExistingPreflight: shouldPreserveExistingPreflight
@@ -2040,7 +2091,8 @@ function setupWebpackV5ProcessAssetsHook(options) {
2040
2091
  processed: source.processed
2041
2092
  };
2042
2093
  }));
2043
- 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, {
2044
2096
  cssPreflight: false,
2045
2097
  generatedCss: false
2046
2098
  });
@@ -2174,7 +2226,8 @@ function setupWebpackV5ProcessAssetsHook(options) {
2174
2226
  processed: source.processed
2175
2227
  };
2176
2228
  }));
2177
- 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, {
2178
2231
  cssPreflight: false,
2179
2232
  generatedCss: false
2180
2233
  });
@@ -2276,6 +2329,30 @@ function installTailwindcssCssRedirect(pkgDir) {
2276
2329
  const localRequire = createRequire(import.meta.url);
2277
2330
  const MPX_STYLE_RESOURCE_QUERY_RE = /(?:^|[?&])type=styles(?:&|$)/;
2278
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
+ }
2279
2356
  function isMpxStyleResourceQuery(query) {
2280
2357
  if (typeof query !== "string") return false;
2281
2358
  return MPX_STYLE_RESOURCE_QUERY_RE.test(query);
@@ -2284,6 +2361,12 @@ function getTailwindcssCssEntry(pkgDir) {
2284
2361
  return path.join(pkgDir, "index.css");
2285
2362
  }
2286
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;
2287
2370
  const candidates = [
2288
2371
  compiler?.context,
2289
2372
  compiler?.options?.context,
@@ -2301,6 +2384,45 @@ function resolveMpxWebpackPluginDir(compiler) {
2301
2384
  return;
2302
2385
  }
2303
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
+ }
2304
2426
  function isMpxWebpackPluginRequest(request) {
2305
2427
  return request === "@mpxjs/webpack-plugin" || Boolean(request?.startsWith("@mpxjs/webpack-plugin/"));
2306
2428
  }
@@ -2339,27 +2461,39 @@ function ensureResolveLoaderAlias(compiler, mpxWebpackPluginDir) {
2339
2461
  compiler.options.resolveLoader.alias = alias;
2340
2462
  addMpxWebpackPluginAlias(alias, mpxWebpackPluginDir);
2341
2463
  }
2342
- function resolveMpxWebpackPluginRequire(compiler) {
2343
- const candidates = [
2344
- compiler?.context,
2345
- compiler?.options?.context,
2346
- process.cwd()
2347
- ].filter((item) => typeof item === "string" && item.length > 0);
2348
- for (const candidate of candidates) try {
2349
- const projectRequire = createRequire(path.join(candidate, "package.json"));
2350
- projectRequire.resolve("@mpxjs/webpack-plugin/package.json");
2351
- return projectRequire;
2352
- } catch {}
2353
- const cachedPackageJson = Object.keys(localRequire.cache).find((file) => MPX_WEBPACK_PLUGIN_PACKAGE_RE.test(file));
2354
- if (cachedPackageJson) return createRequire(cachedPackageJson);
2355
- 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;
2356
2491
  }
2357
- function patchMpxWebpackPluginNormalizeLib(compiler, mpxWebpackPluginDir) {
2492
+ function patchMpxWebpackPluginNormalizeLib(_compiler, mpxWebpackPluginDir) {
2358
2493
  if (!mpxWebpackPluginDir) return false;
2359
- const projectRequire = resolveMpxWebpackPluginRequire(compiler);
2360
2494
  let normalize;
2361
2495
  try {
2362
- normalize = projectRequire("@mpxjs/webpack-plugin/lib/utils/normalize");
2496
+ normalize = createRequire(path.join(mpxWebpackPluginDir, "package.json"))(path.join(mpxWebpackPluginDir, "lib/utils/normalize"));
2363
2497
  } catch {
2364
2498
  return false;
2365
2499
  }
@@ -2377,6 +2511,7 @@ function ensureMpxTailwindcssAliases(compiler, pkgDir) {
2377
2511
  compiler.options.resolve = compiler.options.resolve || {};
2378
2512
  const mpxWebpackPluginDir = resolveMpxWebpackPluginDir(compiler);
2379
2513
  patchMpxWebpackPluginNormalizeLib(compiler, mpxWebpackPluginDir);
2514
+ patchMpxWebpackPluginRequests(compiler, mpxWebpackPluginDir);
2380
2515
  if (mpxWebpackPluginDir) ensureResolveLoaderAlias(compiler, mpxWebpackPluginDir);
2381
2516
  const alias = compiler.options.resolve.alias ?? {};
2382
2517
  compiler.options.resolve.alias = alias;
@@ -2395,19 +2530,29 @@ function ensureMpxTailwindcssAliases(compiler, pkgDir) {
2395
2530
  return tailwindcssCssEntry;
2396
2531
  }
2397
2532
  function patchMpxLoaderResolve(loaderContext, pkgDir, enabled) {
2398
- if (!enabled || typeof loaderContext.resolve !== "function") return;
2399
- const originalResolve = loaderContext.resolve;
2400
- if (originalResolve.__weappTwPatched) return;
2533
+ if (!enabled) return;
2401
2534
  const tailwindcssCssEntry = getTailwindcssCssEntry(pkgDir);
2402
2535
  const mpxWebpackPluginDir = resolveMpxWebpackPluginDir(loaderContext);
2403
- const wrappedResolve = function(context, request, callback) {
2404
- if (request === "tailwindcss" || request === "tailwindcss$") return callback(null, tailwindcssCssEntry);
2405
- if (request?.startsWith("tailwindcss/")) return callback(null, path.join(pkgDir, request.slice(12)));
2406
- if (mpxWebpackPluginDir && isMpxWebpackPluginRequest(request)) return callback(null, resolveMpxWebpackPluginRequest(request, mpxWebpackPluginDir));
2407
- return originalResolve.call(this, context, request, callback);
2408
- };
2409
- wrappedResolve.__weappTwPatched = true;
2410
- 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
+ }
2411
2556
  }
2412
2557
  function setupMpxTailwindcssRedirect(pkgDir, enabled) {
2413
2558
  if (enabled) installTailwindcssCssRedirect(pkgDir);
@@ -2492,11 +2637,14 @@ function setupWebpackV5Loaders(options) {
2492
2637
  if (shouldRewriteCssImports && mpxCssImportRewrite) ensureMpxTailwindcssAliases(compiler, weappTailwindcssPackageDir);
2493
2638
  const runtimeClassSetLoader = runtimeLoaderPath ?? path.resolve(__dirname, "./weapp-tw-runtime-classset-loader.js");
2494
2639
  const shouldInjectRuntimeClassSetLoader = !generatorBranch.isWeb;
2495
- 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;
2496
2643
  const runtimeCssImportRewriteLoader = shouldInjectCssImportRewriteLoader ? path.resolve(__dirname, "./weapp-tw-css-import-rewrite-loader.js") : void 0;
2497
2644
  const runtimeClassSetLoaderExists = fs.existsSync(runtimeClassSetLoader);
2645
+ const runtimeCssGenerationLoaderExists = runtimeCssGenerationLoader ? fs.existsSync(runtimeCssGenerationLoader) : false;
2498
2646
  const runtimeCssImportRewriteLoaderExists = runtimeCssImportRewriteLoader ? fs.existsSync(runtimeCssImportRewriteLoader) : false;
2499
- const runtimeLoaderRewriteOptions = shouldInjectCssImportRewriteLoader ? {
2647
+ const runtimeLoaderRewriteOptions = shouldInjectCssImportRewriteLoader || shouldInjectCssGenerationLoader ? {
2500
2648
  pkgDir: weappTailwindcssPackageDir,
2501
2649
  compilerOptions,
2502
2650
  runtimeState,
@@ -2521,7 +2669,11 @@ function setupWebpackV5Loaders(options) {
2521
2669
  compiler.hooks.watchClose?.tap?.(pluginName, cleanupWebpackLoaderRuntime);
2522
2670
  compiler.hooks.shutdown?.tap?.(pluginName, cleanupWebpackLoaderRuntime);
2523
2671
  const { findRewriteAnchor, findClassSetAnchor } = loaderAnchorFinders;
2524
- 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;
2525
2677
  if (runtimeCssImportRewriteLoader && shouldRewriteCssImports && cssImportRewriteLoaderOptions && mpxCssImportRewrite) injectMpxCssRewritePreRules(compiler, runtimeCssImportRewriteLoader, cssImportRewriteLoaderOptions);
2526
2678
  const createRuntimeClassSetLoaderEntry = () => ({
2527
2679
  loader: runtimeClassSetLoader,
@@ -2538,10 +2690,22 @@ function setupWebpackV5Loaders(options) {
2538
2690
  type: null
2539
2691
  };
2540
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
+ };
2541
2702
  const { NormalModule } = compiler.webpack;
2542
2703
  compiler.hooks.compilation.tap(pluginName, (compilation) => {
2543
- NormalModule.getCompilationHooks(compilation).loader.tap(pluginName, (_loaderContext, module) => {
2544
- 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;
2545
2709
  patchMpxLoaderResolve(_loaderContext, weappTailwindcssPackageDir, shouldRewriteCssImports && mpxCssImportRewrite);
2546
2710
  const loaderEntries = module.loaders || [];
2547
2711
  let rewriteAnchorIdx = findRewriteAnchor(loaderEntries);
@@ -2561,6 +2725,12 @@ function setupWebpackV5Loaders(options) {
2561
2725
  if (position === "after") loaderEntries.push(entry);
2562
2726
  else loaderEntries.unshift(entry);
2563
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
+ }
2564
2734
  if (cssImportRewriteLoaderOptions && runtimeCssImportRewriteLoaderExists && runtimeCssImportRewriteLoader && isCssModule) {
2565
2735
  const existingIndex = loaderEntries.findIndex((entry) => entry.loader?.includes?.(runtimeCssImportRewriteLoader));
2566
2736
  const rewriteLoaderEntry = existingIndex !== -1 ? {