weapp-tailwindcss 5.0.13 → 5.1.1

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 (200) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/auto-Ba6hDrse.mjs +13 -0
  4. package/dist/auto-DtU6f3X6.js +18 -0
  5. package/dist/bundlers/shared/css-cleanup.d.ts +1 -1
  6. package/dist/bundlers/shared/generator-css/class-selectors.d.ts +2 -0
  7. package/dist/bundlers/shared/generator-css/directives.d.ts +2 -1
  8. package/dist/bundlers/shared/generator-css/generation-helpers.d.ts +10 -6
  9. package/dist/bundlers/shared/generator-css/local-imports.d.ts +3 -0
  10. package/dist/bundlers/shared/generator-css/source-resolver/apply-reference.d.ts +3 -0
  11. package/dist/bundlers/shared/generator-css/source-resolver/matching.d.ts +0 -1
  12. package/dist/bundlers/shared/generator-css/source-resolver/metadata.d.ts +1 -1
  13. package/dist/bundlers/shared/generator-css/source-resolver/types.d.ts +3 -3
  14. package/dist/bundlers/shared/generator-css/source-resolver.d.ts +2 -2
  15. package/dist/bundlers/shared/generator-css/types.d.ts +13 -1
  16. package/dist/bundlers/shared/generator-css/user-css.d.ts +5 -1
  17. package/dist/bundlers/shared/generator-css/validate.d.ts +1 -0
  18. package/dist/bundlers/shared/run-tasks.d.ts +1 -0
  19. package/dist/bundlers/shared/v4-generation-core.d.ts +11 -0
  20. package/dist/bundlers/vite/css-finalizer.d.ts +1 -1
  21. package/dist/bundlers/vite/css-memory.d.ts +16 -0
  22. package/dist/bundlers/vite/generate-bundle/candidates.d.ts +0 -1
  23. package/dist/bundlers/vite/generate-bundle/configured-css-sources.d.ts +1 -1
  24. package/dist/bundlers/vite/generate-bundle/css-assets.d.ts +1 -1
  25. package/dist/bundlers/vite/generate-bundle/css-handler-options.d.ts +1 -1
  26. package/dist/bundlers/vite/generate-bundle/css-output-helpers.d.ts +39 -0
  27. package/dist/bundlers/vite/generate-bundle/css-output.d.ts +1 -0
  28. package/dist/bundlers/vite/generate-bundle/env-flags.d.ts +1 -1
  29. package/dist/bundlers/vite/generate-bundle/final-css-assets.d.ts +13 -0
  30. package/dist/bundlers/vite/generate-bundle/finalize.d.ts +7 -0
  31. package/dist/bundlers/vite/generate-bundle/html-processing.d.ts +26 -0
  32. package/dist/bundlers/vite/generate-bundle/js-processing.d.ts +4 -0
  33. package/dist/bundlers/vite/generate-bundle/memory-debug.d.ts +21 -18
  34. package/dist/bundlers/vite/generate-bundle/remembered-css-replay.d.ts +1 -1
  35. package/dist/bundlers/vite/generate-bundle/remembered-css.d.ts +1 -1
  36. package/dist/bundlers/vite/generate-bundle/root-style-output.d.ts +6 -0
  37. package/dist/bundlers/vite/generate-bundle/runtime-linked-source-memory.d.ts +25 -0
  38. package/dist/bundlers/vite/generate-bundle/sfc-style-source.d.ts +3 -1
  39. package/dist/bundlers/vite/generate-bundle/source-candidate-scope.d.ts +1 -0
  40. package/dist/bundlers/vite/generate-bundle/source-candidate-source.d.ts +9 -0
  41. package/dist/bundlers/vite/generate-bundle/tailwind-v4-css-source.d.ts +9 -0
  42. package/dist/bundlers/vite/generate-bundle/transform-filter.d.ts +15 -0
  43. package/dist/bundlers/vite/generate-bundle/types.d.ts +2 -1
  44. package/dist/bundlers/vite/generate-bundle/vite-css-cache.d.ts +1 -1
  45. package/dist/bundlers/vite/generate-bundle.d.ts +2 -1
  46. package/dist/bundlers/vite/incremental-runtime-class-set/escaped-candidates.d.ts +1 -0
  47. package/dist/bundlers/vite/incremental-runtime-class-set.d.ts +3 -3
  48. package/dist/bundlers/vite/plugin-cache.d.ts +15 -0
  49. package/dist/bundlers/vite/rewrite-css-imports.d.ts +1 -0
  50. package/dist/bundlers/vite/runtime-class-set.d.ts +5 -4
  51. package/dist/bundlers/vite/source-candidates/script.d.ts +1 -7
  52. package/dist/bundlers/vite/source-candidates.d.ts +9 -2
  53. package/dist/bundlers/vite/source-scan/css-entries.d.ts +2 -6
  54. package/dist/bundlers/vite/source-scan.d.ts +2 -2
  55. package/dist/bundlers/vite/uni-app-x-css-options.d.ts +1 -1
  56. package/dist/bundlers/vite/utils.d.ts +1 -0
  57. package/dist/bundlers/webpack/BaseUnifiedPlugin/shared.d.ts +26 -2
  58. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/css-source-resolvers.d.ts +34 -0
  59. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/helpers.d.ts +48 -11
  60. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/js-module-graph.d.ts +37 -0
  61. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/pipeline-helpers.d.ts +199 -0
  62. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/source-candidate-cache.d.ts +28 -0
  63. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/source-candidate-refresh.d.ts +11 -0
  64. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets.d.ts +1 -0
  65. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-loaders.d.ts +4 -2
  66. package/dist/bundlers/webpack/loaders/runtime-registry.d.ts +10 -1
  67. package/dist/bundlers/webpack/shared/css-loader-runtime.d.ts +1 -0
  68. package/dist/cache/index.d.ts +1 -0
  69. package/dist/cli/mount-options.d.ts +2 -2
  70. package/dist/cli.js +138 -444
  71. package/dist/cli.mjs +134 -440
  72. package/dist/context/index.d.ts +3 -3
  73. package/dist/context/style-options.d.ts +5 -1
  74. package/dist/context/tailwindcss.d.ts +1 -1
  75. package/dist/{precheck-B0Z8yW7E.js → context-B6hVF7dr.js} +405 -156
  76. package/dist/{precheck-CRI90iL1.mjs → context-DlpKD7aN.mjs} +377 -141
  77. package/dist/core.js +15 -12
  78. package/dist/core.mjs +10 -7
  79. package/dist/css-macro/index.d.ts +3 -7
  80. package/dist/css-macro.js +1 -1
  81. package/dist/css-macro.mjs +1 -1
  82. package/dist/{defaults-Bqx18S1f.mjs → defaults-BhE26nSw.mjs} +12 -13
  83. package/dist/{defaults-C_J_kBpw.js → defaults-CmFBmxsr.js} +11 -18
  84. package/dist/defaults.d.ts +2 -8
  85. package/dist/defaults.js +1 -2
  86. package/dist/defaults.mjs +2 -2
  87. package/dist/generator/index.d.ts +6 -7
  88. package/dist/generator/options.d.ts +3 -3
  89. package/dist/generator/types.d.ts +9 -10
  90. package/dist/generator-6oMJtTDO.js +170 -0
  91. package/dist/generator-CjzBK7h-.mjs +123 -0
  92. package/dist/generator.js +10 -16
  93. package/dist/generator.mjs +3 -3
  94. package/dist/{gulp-XT8Jc7lH.js → gulp-BtGq6LP9.js} +49 -87
  95. package/dist/{gulp-DfOQERcV.mjs → gulp-DNU10Vtc.mjs} +42 -80
  96. package/dist/gulp.js +1 -1
  97. package/dist/gulp.mjs +1 -1
  98. package/dist/{hmr-timing-DQIP_8qP.mjs → hmr-timing-B0KuWDjV.mjs} +1197 -858
  99. package/dist/{hmr-timing-BMftW7Us.js → hmr-timing-CegXR9O4.js} +1356 -927
  100. package/dist/index.js +4 -4
  101. package/dist/index.mjs +4 -4
  102. package/dist/js/fast-path/oxc.d.ts +4 -0
  103. package/dist/js/precheck.d.ts +1 -0
  104. package/dist/postcss.js +3 -4
  105. package/dist/postcss.mjs +2 -3
  106. package/dist/presets.js +9 -19
  107. package/dist/presets.mjs +8 -18
  108. package/dist/runtime-branch/create-branch.d.ts +2 -0
  109. package/dist/runtime-branch/generator-target-env.d.ts +4 -0
  110. package/dist/runtime-branch/index.d.ts +6 -0
  111. package/dist/runtime-branch/mini-program.d.ts +2 -0
  112. package/dist/runtime-branch/native-app.d.ts +2 -0
  113. package/dist/runtime-branch/platform.d.ts +6 -0
  114. package/dist/runtime-branch/tailwind-version.d.ts +2 -0
  115. package/dist/runtime-branch/types.d.ts +37 -0
  116. package/dist/runtime-branch/web.d.ts +2 -0
  117. package/dist/runtime-branch.d.ts +1 -0
  118. package/dist/{bundle-state-zQ2MrDdi.mjs → source-candidate-scan-signature-B5af2Ahe.mjs} +187 -17
  119. package/dist/{bundle-state-CKWeTEhv.js → source-candidate-scan-signature-BKYb9jxa.js} +261 -19
  120. package/dist/tailwindcss/candidates.d.ts +7 -0
  121. package/dist/tailwindcss/index.d.ts +2 -2
  122. package/dist/tailwindcss/runtime/cache.d.ts +6 -6
  123. package/dist/tailwindcss/runtime-factory.d.ts +12 -0
  124. package/dist/tailwindcss/runtime-options.d.ts +8 -0
  125. package/dist/tailwindcss/runtime-types.d.ts +87 -0
  126. package/dist/tailwindcss/runtime.d.ts +6 -6
  127. package/dist/tailwindcss/source-scan.d.ts +1 -1
  128. package/dist/tailwindcss/targets.d.ts +2 -2
  129. package/dist/tailwindcss/v4/config.d.ts +3 -3
  130. package/dist/tailwindcss/v4/css-entries.d.ts +1 -0
  131. package/dist/tailwindcss/v4/css-sources.d.ts +4 -2
  132. package/dist/tailwindcss/v4/index.d.ts +1 -1
  133. package/dist/tailwindcss/v4/multi-runtime.d.ts +2 -0
  134. package/dist/tailwindcss/v4/runtime-factory.d.ts +15 -0
  135. package/dist/tailwindcss/v4/runtime-options.d.ts +2 -0
  136. package/dist/tailwindcss/v4-engine/design-system.d.ts +1 -1
  137. package/dist/tailwindcss/v4-engine/generator/css-compat.d.ts +1 -1
  138. package/dist/tailwindcss/v4-engine/generator/rpx-candidates.d.ts +3 -3
  139. package/dist/tailwindcss/v4-engine/generator/scan-sources.d.ts +1 -1
  140. package/dist/tailwindcss/v4-engine/generator.d.ts +10 -3
  141. package/dist/tailwindcss/v4-engine/index.d.ts +1 -1
  142. package/dist/tailwindcss/v4-engine/miniprogram.d.ts +7 -1
  143. package/dist/tailwindcss/v4-engine/source.d.ts +15 -7
  144. package/dist/tailwindcss/v4-engine/types.d.ts +17 -10
  145. package/dist/tailwindcss/version.d.ts +1 -1
  146. package/dist/tailwindcss-B5mRo0-M.mjs +1423 -0
  147. package/dist/tailwindcss-dbrbY4cd.js +1528 -0
  148. package/dist/{transform-DfcEjsZF.mjs → transform-fRBeuuK-.mjs} +2 -2
  149. package/dist/{transform-YmrmxuF3.js → transform-vLwZpiTE.js} +17 -17
  150. package/dist/typedoc.export.d.ts +1 -1
  151. package/dist/types/index.d.ts +16 -17
  152. package/dist/types/shared.d.ts +1 -1
  153. package/dist/types/{typedoc-tailwindcss-patch.d.ts → typedoc-tailwindcss-runtime.d.ts} +4 -10
  154. package/dist/types/user-defined-options/general.d.ts +5 -3
  155. package/dist/types/user-defined-options/important.d.ts +2 -2
  156. package/dist/types/user-defined-options/matcher.d.ts +7 -0
  157. package/dist/uni-app-x/style-asset.d.ts +1 -0
  158. package/dist/v4-engine-C3qSwQ-e.mjs +2376 -0
  159. package/dist/v4-engine-ON_oSLfO.js +2752 -0
  160. package/dist/{vite-DjI09vVN.mjs → vite-CWRooooa.mjs} +1417 -540
  161. package/dist/{vite-CXHVsHmX.js → vite-w-RkgaTY.js} +1575 -698
  162. package/dist/vite.js +1 -1
  163. package/dist/vite.mjs +1 -1
  164. package/dist/weapp-tw-css-import-rewrite-loader.js +5665 -4443
  165. package/dist/weapp-tw-runtime-classset-loader.js +15 -4
  166. package/dist/webpack-8PaV1gG3.mjs +2334 -0
  167. package/dist/webpack-CGgBOx9l.js +2346 -0
  168. package/dist/webpack.js +1 -1
  169. package/dist/webpack.mjs +1 -1
  170. package/package.json +6 -7
  171. package/dist/auto-CTp6wE5a.js +0 -33
  172. package/dist/auto-Cl8_hsG6.mjs +0 -22
  173. package/dist/bundlers/vite/incremental-runtime-class-set/v3-candidates.d.ts +0 -13
  174. package/dist/bundlers/vite/source-candidates/tailwind-v3-default-extractor.d.ts +0 -1
  175. package/dist/context/tailwindcss/rax.d.ts +0 -2
  176. package/dist/generator-CzpArpCL.js +0 -92
  177. package/dist/generator-ITLd7PTl.mjs +0 -67
  178. package/dist/tailwindcss/patcher-options.d.ts +0 -8
  179. package/dist/tailwindcss/patcher.d.ts +0 -12
  180. package/dist/tailwindcss/runtime-patch.d.ts +0 -5
  181. package/dist/tailwindcss/v3-engine/generator/cache-key.d.ts +0 -3
  182. package/dist/tailwindcss/v3-engine/generator/content.d.ts +0 -10
  183. package/dist/tailwindcss/v3-engine/generator/runtime-ready.d.ts +0 -2
  184. package/dist/tailwindcss/v3-engine/generator.d.ts +0 -19
  185. package/dist/tailwindcss/v3-engine/index.d.ts +0 -4
  186. package/dist/tailwindcss/v3-engine/miniprogram.d.ts +0 -4
  187. package/dist/tailwindcss/v3-engine/source.d.ts +0 -5
  188. package/dist/tailwindcss/v3-engine/types.d.ts +0 -61
  189. package/dist/tailwindcss/v4/multi-patcher.d.ts +0 -2
  190. package/dist/tailwindcss/v4/patcher-options.d.ts +0 -2
  191. package/dist/tailwindcss/v4/patcher.d.ts +0 -15
  192. package/dist/tailwindcss/v4-engine/tailwind-v3-compatibility.d.ts +0 -1
  193. package/dist/tailwindcss/v4-engine/tailwind-v3-default-colors.d.ts +0 -1
  194. package/dist/tailwindcss-DTq3uYBK.mjs +0 -556
  195. package/dist/tailwindcss-DZEwT3C_.js +0 -613
  196. package/dist/v3-engine-2rrgylhn.js +0 -4686
  197. package/dist/v3-engine-C6eJ0YzK.mjs +0 -4272
  198. package/dist/webpack-BcPpnT90.mjs +0 -1184
  199. package/dist/webpack-CfkUkMXG.js +0 -1196
  200. /package/dist/tailwindcss/{patcher-resolve.d.ts → runtime-resolve.d.ts} +0 -0
@@ -0,0 +1,2334 @@
1
+ import { C as hasTailwindRootDirectives, F as hasTailwindGeneratedCssMarkers, G as getTailwindV4IncrementalGenerateCacheStats, O as parseImportRequest, P as hasTailwindGeneratedCss, T as normalizeTailwindConfigDirectives, _ as resolveTailwindcssOptions, ct as inferGeneratorTargetFromEnv, k as removeTailwindSourceDirectives, nt as resolveSourceScanPath, o as hasConfiguredTailwindV4CssRoots, s as upsertTailwindV4CssSource, w as hasTailwindSourceDirectives, x as hasTailwindApplyDirective } from "./v4-engine-C3qSwQ-e.mjs";
2
+ import { o as resolveRuntimeBranch } from "./generator-CjzBK7h-.mjs";
3
+ import { r as getGroupedEntries } from "./utils-DodxWHGz.mjs";
4
+ import { C as md5Hash, S as createDebug, b as ensureRuntimeClassSet, f as _defineProperty, i as pluginName, l as shouldSkipJsTransform, n as normalizeStyleHandlerMajorVersion, r as resolveStyleOptionsFromContext, t as getCompilerContext, x as refreshTailwindRuntimeState, y as createTailwindRuntimeReadyPromise } from "./context-DlpKD7aN.mjs";
5
+ import { l as getRuntimeClassSetSignature, p as resolveViteSourceScanEntries } from "./tailwindcss-B5mRo0-M.mjs";
6
+ import { C as stripTailwindSourceMediaFragments, D as createCssSourceOrderAppend, E as removeGeneratedSelectorCompatCss, F as createCssTokenSourceMap, I as isCssSourceTraceEnabled, L as processCachedTask, M as stripMiniProgramCssSpecificityPlaceholders, N as annotateCssSourceTrace, O as hasMiniProgramTailwindV4PreflightReset, P as createCssSourceTraceCacheSignature, S as removeTailwindV4GeneratorAtRules, T as scoreTailwindV4CssSourceFileMatch, _ as isPureLocalCssImportWrapper, a as isSourceCandidateRequest, b as removeMiniProgramHoverSelectors, c as collectStrictEscapedRuntimeCandidates, f as pushConcurrentTaskFactories, i as createSourceCandidateStore, j as pruneMiniProgramGeneratedCss, k as finalizeMiniProgramCss, l as createEscapeFragments, n as emitHmrTiming, o as resolveSourceCandidateScanFiles, p as resolveTaskConcurrency, s as createBundleRuntimeClassSetManager, w as stripUnmatchedTailwindSourceMediaCloseFragments, x as removeTailwindV4GeneratedUserCssArtifacts } from "./hmr-timing-B0KuWDjV.mjs";
7
+ import { A as isSourceStyleRequest, C as resolvePluginDisabledState, N as resolveOutputSpecifier, P as toAbsoluteOutputPath, S as resolvePackageDir, _ as generateTailwindV4Css, d as classifyBundleEntry, f as createBundleBuildState, i as createCandidateSignature, j as stripRequestQuery, m as createRuntimeAffectingSourceSignature, p as updateBundleBuildState, r as createScopedGeneratorRuntime, t as createSourceCandidateScanSignature, x as stripBundlerGeneratedCssMarkers, y as hasBundlerGeneratedCssMarker } from "./source-candidate-scan-signature-B5af2Ahe.mjs";
8
+ import Module, { createRequire } from "node:module";
9
+ import fs from "node:fs";
10
+ import path from "node:path";
11
+ import process from "node:process";
12
+ import { filterExistingCssRules, postcss } from "@weapp-tailwindcss/postcss";
13
+ import { readFile, stat } from "node:fs/promises";
14
+ import micromatch from "micromatch";
15
+ import { MappingChars2String } from "@weapp-core/escape";
16
+ import { fileURLToPath } from "node:url";
17
+ //#region src/shared/tailwindcss-css-redirect.ts
18
+ const moduleWithMutableResolve = Module;
19
+ const patched = /* @__PURE__ */ new WeakSet();
20
+ function installTailwindcssCssRedirect(pkgDir) {
21
+ const target = path.join(pkgDir, "index.css");
22
+ const original = moduleWithMutableResolve._resolveFilename;
23
+ if (patched.has(original)) return;
24
+ const replacements = new Set(["tailwindcss", "tailwindcss$"]);
25
+ const resolveTailwindcssCss = (request, parent, isMain, options) => {
26
+ if (replacements.has(request)) return target;
27
+ if (request.startsWith("tailwindcss/")) return path.join(pkgDir, request.slice(12));
28
+ return original(request, parent, isMain, options);
29
+ };
30
+ moduleWithMutableResolve._resolveFilename = resolveTailwindcssCss;
31
+ patched.add(moduleWithMutableResolve._resolveFilename);
32
+ }
33
+ //#endregion
34
+ //#region src/shared/mpx.ts
35
+ const localRequire = createRequire(import.meta.url);
36
+ const MPX_STYLE_RESOURCE_QUERY_RE$1 = /(?:^|[?&])type=styles(?:&|$)/;
37
+ const MPX_WEBPACK_PLUGIN_PACKAGE_RE = /@mpxjs[\\/]webpack-plugin[\\/]package\.json$/;
38
+ function isMpxStyleResourceQuery(query) {
39
+ if (typeof query !== "string") return false;
40
+ return MPX_STYLE_RESOURCE_QUERY_RE$1.test(query);
41
+ }
42
+ function isMpx(appType) {
43
+ return appType === "mpx";
44
+ }
45
+ function getTailwindcssCssEntry(pkgDir) {
46
+ return path.join(pkgDir, "index.css");
47
+ }
48
+ function resolveMpxWebpackPluginDir(compiler) {
49
+ const candidates = [
50
+ compiler?.context,
51
+ compiler?.options?.context,
52
+ process.cwd()
53
+ ].filter((item) => typeof item === "string" && item.length > 0);
54
+ for (const candidate of candidates) try {
55
+ const projectRequire = createRequire(path.join(candidate, "package.json"));
56
+ return path.dirname(projectRequire.resolve("@mpxjs/webpack-plugin/package.json"));
57
+ } catch {}
58
+ const cachedPackageJson = Object.keys(localRequire.cache).find((file) => MPX_WEBPACK_PLUGIN_PACKAGE_RE.test(file));
59
+ if (cachedPackageJson) return path.dirname(cachedPackageJson);
60
+ try {
61
+ return path.dirname(localRequire.resolve("@mpxjs/webpack-plugin/package.json"));
62
+ } catch {
63
+ return;
64
+ }
65
+ }
66
+ function isMpxWebpackPluginRequest(request) {
67
+ return request === "@mpxjs/webpack-plugin" || Boolean(request?.startsWith("@mpxjs/webpack-plugin/"));
68
+ }
69
+ function resolveMpxWebpackPluginRequest(request, mpxWebpackPluginDir) {
70
+ if (request === "@mpxjs/webpack-plugin") return mpxWebpackPluginDir;
71
+ return path.join(mpxWebpackPluginDir, request.slice(22));
72
+ }
73
+ function addMpxWebpackPluginAlias(alias, pkgDir) {
74
+ const recordLoader = path.join(pkgDir, "lib/record-loader");
75
+ const styleCompiler = path.join(pkgDir, "lib/style-compiler/index");
76
+ const stripConditionalLoader = path.join(pkgDir, "lib/style-compiler/strip-conditional-loader");
77
+ if (Array.isArray(alias)) alias.push({
78
+ name: "@mpxjs/webpack-plugin/lib/record-loader",
79
+ alias: recordLoader
80
+ }, {
81
+ name: "@mpxjs/webpack-plugin/lib/style-compiler/index",
82
+ alias: styleCompiler
83
+ }, {
84
+ name: "@mpxjs/webpack-plugin/lib/style-compiler/strip-conditional-loader",
85
+ alias: stripConditionalLoader
86
+ }, {
87
+ name: /^@mpxjs\/webpack-plugin\//,
88
+ alias: pkgDir
89
+ });
90
+ else {
91
+ alias["@mpxjs/webpack-plugin"] = pkgDir;
92
+ alias["@mpxjs/webpack-plugin$"] = pkgDir;
93
+ alias["@mpxjs/webpack-plugin/lib/record-loader"] = recordLoader;
94
+ alias["@mpxjs/webpack-plugin/lib/style-compiler/index"] = styleCompiler;
95
+ alias["@mpxjs/webpack-plugin/lib/style-compiler/strip-conditional-loader"] = stripConditionalLoader;
96
+ }
97
+ }
98
+ function ensureResolveLoaderAlias(compiler, mpxWebpackPluginDir) {
99
+ compiler.options.resolveLoader = compiler.options.resolveLoader || {};
100
+ const alias = compiler.options.resolveLoader.alias ?? {};
101
+ compiler.options.resolveLoader.alias = alias;
102
+ addMpxWebpackPluginAlias(alias, mpxWebpackPluginDir);
103
+ }
104
+ function resolveMpxWebpackPluginRequire(compiler) {
105
+ const candidates = [
106
+ compiler?.context,
107
+ compiler?.options?.context,
108
+ process.cwd()
109
+ ].filter((item) => typeof item === "string" && item.length > 0);
110
+ for (const candidate of candidates) try {
111
+ const projectRequire = createRequire(path.join(candidate, "package.json"));
112
+ projectRequire.resolve("@mpxjs/webpack-plugin/package.json");
113
+ return projectRequire;
114
+ } catch {}
115
+ const cachedPackageJson = Object.keys(localRequire.cache).find((file) => MPX_WEBPACK_PLUGIN_PACKAGE_RE.test(file));
116
+ if (cachedPackageJson) return createRequire(cachedPackageJson);
117
+ return localRequire;
118
+ }
119
+ function patchMpxWebpackPluginNormalizeLib(compiler, mpxWebpackPluginDir) {
120
+ if (!mpxWebpackPluginDir) return false;
121
+ const projectRequire = resolveMpxWebpackPluginRequire(compiler);
122
+ let normalize;
123
+ try {
124
+ normalize = projectRequire("@mpxjs/webpack-plugin/lib/utils/normalize");
125
+ } catch {
126
+ return false;
127
+ }
128
+ if (typeof normalize.lib !== "function") return false;
129
+ if (normalize.lib.__weappTwPatched) return true;
130
+ const wrappedLib = (file) => path.join(mpxWebpackPluginDir, "lib", file);
131
+ wrappedLib.__weappTwPatched = true;
132
+ wrappedLib.__weappTwOriginal = normalize.lib;
133
+ normalize.lib = wrappedLib;
134
+ return true;
135
+ }
136
+ function ensureMpxTailwindcssAliases(compiler, pkgDir) {
137
+ const tailwindcssCssEntry = getTailwindcssCssEntry(pkgDir);
138
+ compiler.options = compiler.options || {};
139
+ compiler.options.resolve = compiler.options.resolve || {};
140
+ const mpxWebpackPluginDir = resolveMpxWebpackPluginDir(compiler);
141
+ patchMpxWebpackPluginNormalizeLib(compiler, mpxWebpackPluginDir);
142
+ if (mpxWebpackPluginDir) ensureResolveLoaderAlias(compiler, mpxWebpackPluginDir);
143
+ const alias = compiler.options.resolve.alias ?? {};
144
+ compiler.options.resolve.alias = alias;
145
+ if (Array.isArray(alias)) alias.push({
146
+ name: "tailwindcss",
147
+ alias: tailwindcssCssEntry
148
+ }, {
149
+ name: "tailwindcss$",
150
+ alias: tailwindcssCssEntry
151
+ });
152
+ else {
153
+ alias.tailwindcss = tailwindcssCssEntry;
154
+ alias.tailwindcss$ = tailwindcssCssEntry;
155
+ }
156
+ if (mpxWebpackPluginDir) addMpxWebpackPluginAlias(alias, mpxWebpackPluginDir);
157
+ return tailwindcssCssEntry;
158
+ }
159
+ function patchMpxLoaderResolve(loaderContext, pkgDir, enabled) {
160
+ if (!enabled || typeof loaderContext.resolve !== "function") return;
161
+ const originalResolve = loaderContext.resolve;
162
+ if (originalResolve.__weappTwPatched) return;
163
+ const tailwindcssCssEntry = getTailwindcssCssEntry(pkgDir);
164
+ const mpxWebpackPluginDir = resolveMpxWebpackPluginDir(loaderContext);
165
+ const wrappedResolve = function(context, request, callback) {
166
+ if (request === "tailwindcss" || request === "tailwindcss$") return callback(null, tailwindcssCssEntry);
167
+ if (request?.startsWith("tailwindcss/")) return callback(null, path.join(pkgDir, request.slice(12)));
168
+ if (mpxWebpackPluginDir && isMpxWebpackPluginRequest(request)) return callback(null, resolveMpxWebpackPluginRequest(request, mpxWebpackPluginDir));
169
+ return originalResolve.call(this, context, request, callback);
170
+ };
171
+ wrappedResolve.__weappTwPatched = true;
172
+ loaderContext.resolve = wrappedResolve;
173
+ }
174
+ function setupMpxTailwindcssRedirect(pkgDir, enabled) {
175
+ if (enabled) installTailwindcssCssRedirect(pkgDir);
176
+ }
177
+ const CSS_EXT_RE = /\.css$/i;
178
+ function injectMpxCssRewritePreRules(compiler, loader, loaderOptions) {
179
+ var _compiler$options;
180
+ if (!loader) return;
181
+ const moduleOptions = (_compiler$options = compiler.options).module ?? (_compiler$options.module = { rules: [] });
182
+ moduleOptions.rules = moduleOptions.rules || [];
183
+ const createRule = (match) => ({
184
+ ...match,
185
+ enforce: "pre",
186
+ use: [{
187
+ loader,
188
+ options: loaderOptions
189
+ }]
190
+ });
191
+ moduleOptions.rules.unshift(createRule({ resourceQuery: (query) => isMpxStyleResourceQuery(query) }), createRule({
192
+ test: CSS_EXT_RE,
193
+ resourceQuery: (query) => !isMpxStyleResourceQuery(query)
194
+ }));
195
+ }
196
+ //#endregion
197
+ //#region src/bundlers/webpack/BaseUnifiedPlugin/shared.ts
198
+ const MPX_STYLE_RESOURCE_QUERY_RE = /(?:\?|&)type=styles\b/;
199
+ function getCacheKey(filename) {
200
+ return filename;
201
+ }
202
+ function stripResourceQuery(resource) {
203
+ if (typeof resource !== "string") return resource;
204
+ return stripRequestQuery(resource);
205
+ }
206
+ function isCssLikeModuleResource(resource, cssMatcher, appType) {
207
+ if (typeof resource !== "string") return false;
208
+ const normalizedResource = stripResourceQuery(resource);
209
+ if (normalizedResource && cssMatcher(normalizedResource)) return true;
210
+ if (isSourceStyleRequest(resource)) return true;
211
+ if (appType === "mpx") return MPX_STYLE_RESOURCE_QUERY_RE.test(resource);
212
+ return false;
213
+ }
214
+ function hasLoaderEntry(entries, target) {
215
+ if (!target) return false;
216
+ return entries.some((entry) => entry.loader?.includes?.(target));
217
+ }
218
+ function normalizeWatchPath(file) {
219
+ return path.resolve(file);
220
+ }
221
+ function isFileInContext(file, context) {
222
+ const relative = path.relative(normalizeWatchPath(context), normalizeWatchPath(file));
223
+ return relative.length > 0 && !relative.startsWith("..") && !path.isAbsolute(relative);
224
+ }
225
+ function toChunkFiles(files) {
226
+ if (!files) return [];
227
+ if (Array.isArray(files)) return files;
228
+ return [...files];
229
+ }
230
+ function inferWebpackMainCssFiles(chunks, cssMatcher, options = {}) {
231
+ const mainCssFiles = /* @__PURE__ */ new Set();
232
+ const shouldCheckSourceResources = Boolean(options.mainSourceFiles?.size);
233
+ for (const chunk of chunks) {
234
+ const files = toChunkFiles(chunk.files);
235
+ if (!(chunk.hasRuntime?.() === true)) continue;
236
+ for (const file of files) {
237
+ if (!cssMatcher(file)) continue;
238
+ if (shouldCheckSourceResources) {
239
+ const resources = options.resourcesByAsset?.get(file);
240
+ if (!resources || ![...resources].some((resource) => options.mainSourceFiles?.has(resource))) continue;
241
+ }
242
+ mainCssFiles.add(file);
243
+ }
244
+ }
245
+ return mainCssFiles;
246
+ }
247
+ function resolveSingleActiveWebpackCssResource(assetResources, activeWebpackAssetResourceFiles) {
248
+ const activeAssetResourceMatches = [...assetResources ?? []].map((sourceFile) => path.resolve(sourceFile)).filter((sourceFile) => activeWebpackAssetResourceFiles.has(sourceFile)).sort();
249
+ return activeAssetResourceMatches.length === 1 ? activeAssetResourceMatches[0] : void 0;
250
+ }
251
+ function createWebpackCssAssetResourceMap(chunks, chunkGraph, cssMatcher, normalizeResource) {
252
+ const resourcesByAsset = /* @__PURE__ */ new Map();
253
+ if (!chunkGraph?.getChunkModulesIterable) return resourcesByAsset;
254
+ const collectModuleResources = (module, resources, seen = /* @__PURE__ */ new Set()) => {
255
+ if (!module || seen.has(module)) return;
256
+ seen.add(module);
257
+ for (const candidate of [
258
+ module.resource,
259
+ module.request,
260
+ module.userRequest
261
+ ]) {
262
+ if (typeof candidate !== "string") continue;
263
+ const normalized = normalizeResource(candidate, module);
264
+ if (normalized) resources.add(normalized);
265
+ }
266
+ for (const nested of [module.rootModule, chunkGraph.getIssuer?.(module)]) if (nested) collectModuleResources(nested, resources, seen);
267
+ for (const nested of module.modules ?? []) collectModuleResources(nested, resources, seen);
268
+ for (const dependency of module.dependencies ?? []) {
269
+ const dependencyLike = dependency;
270
+ for (const candidate of [dependencyLike.request, dependencyLike.userRequest]) {
271
+ if (typeof candidate !== "string") continue;
272
+ const normalized = normalizeResource(candidate, module);
273
+ if (normalized) resources.add(normalized);
274
+ }
275
+ const dependencyModule = chunkGraph.getModule?.(dependency);
276
+ if (dependencyModule) collectModuleResources(dependencyModule, resources, seen);
277
+ }
278
+ };
279
+ for (const chunk of chunks) {
280
+ const cssFiles = toChunkFiles(chunk.files).filter((file) => cssMatcher(file));
281
+ if (cssFiles.length === 0) continue;
282
+ const modules = chunkGraph.getChunkModulesIterable(chunk);
283
+ if (!modules) continue;
284
+ const cssResources = /* @__PURE__ */ new Set();
285
+ for (const module of modules) collectModuleResources(module, cssResources);
286
+ if (cssResources.size === 0) continue;
287
+ for (const cssFile of cssFiles) resourcesByAsset.set(cssFile, cssResources);
288
+ }
289
+ return resourcesByAsset;
290
+ }
291
+ function createAssetHashByChunkMap(chunks) {
292
+ const partsByFile = /* @__PURE__ */ new Map();
293
+ for (const chunk of chunks) {
294
+ const hash = typeof chunk.hash === "string" ? chunk.hash : void 0;
295
+ if (!hash) continue;
296
+ const chunkId = String(chunk.id ?? chunk.name ?? "");
297
+ for (const file of toChunkFiles(chunk.files)) {
298
+ if (!file) continue;
299
+ let parts = partsByFile.get(file);
300
+ if (!parts) {
301
+ parts = [];
302
+ partsByFile.set(file, parts);
303
+ }
304
+ parts.push(`${chunkId}:${hash}`);
305
+ }
306
+ }
307
+ const hashByFile = /* @__PURE__ */ new Map();
308
+ for (const [file, parts] of partsByFile.entries()) hashByFile.set(file, parts.sort().join("|"));
309
+ return hashByFile;
310
+ }
311
+ function createRuntimeAwareCssHash(assetHash, sourceHash, runtimeSetHash) {
312
+ return `${assetHash ?? sourceHash}:${runtimeSetHash}`;
313
+ }
314
+ function isWatchFileInRuntimeDependencies(file, dependencies) {
315
+ const normalizedFile = normalizeWatchPath(file);
316
+ for (const dependency of dependencies.files ?? []) if (normalizeWatchPath(dependency) === normalizedFile) return true;
317
+ for (const context of dependencies.contexts ?? []) if (isFileInContext(normalizedFile, context)) return true;
318
+ return false;
319
+ }
320
+ //#endregion
321
+ //#region src/bundlers/webpack/shared/css-loader-runtime.ts
322
+ function isWebpackCssLoaderRuntimeSource(source) {
323
+ return source.includes("___CSS_LOADER_EXPORT___") && source.includes("___CSS_LOADER_API_IMPORT___") && source.includes("module.exports = ___CSS_LOADER_EXPORT___");
324
+ }
325
+ //#endregion
326
+ //#region src/bundlers/webpack/BaseUnifiedPlugin/v5-assets/pipeline-helpers.ts
327
+ const WEBPACK_CSS_HANDLER_OPTIONS_CACHE_MAX = 128;
328
+ function removeTailwindV4StandaloneHostPreflightRule(source) {
329
+ if (!source.includes("--theme(")) return source;
330
+ try {
331
+ const root = postcss.parse(source);
332
+ let changed = false;
333
+ root.walkRules((rule) => {
334
+ if (rule.selector.trim() !== ":host") return;
335
+ if (!rule.nodes?.some((node) => node.type === "decl" && node.value?.includes("--theme("))) return;
336
+ rule.remove();
337
+ changed = true;
338
+ });
339
+ return changed ? root.toString() : source;
340
+ } catch {
341
+ return source;
342
+ }
343
+ }
344
+ function isRuntimeTransformCandidate(candidate) {
345
+ return candidate.length > 0 && !candidate.includes("=") && !candidate.includes("<") && !candidate.includes(">") && !candidate.includes("${");
346
+ }
347
+ function collectRuntimeTokenSignatureParts(source) {
348
+ return source.match(/[\w-]+_[A-Z][\w-]*/gi) ?? [];
349
+ }
350
+ function hasMissingRuntimeCandidates(classSet, candidates) {
351
+ if (!classSet || !candidates?.size) return false;
352
+ for (const candidate of candidates) if (isRuntimeTransformCandidate(candidate) && !classSet.has(candidate)) return true;
353
+ return false;
354
+ }
355
+ function resolveGeneratedCssRuntimeCandidates(source, fallbackClassSet) {
356
+ const classSet = collectGeneratedCssRuntimeCandidates(source);
357
+ if (classSet.size > 0 || fallbackClassSet === void 0) return classSet;
358
+ return fallbackClassSet;
359
+ }
360
+ function getRuntimeClassSetSync(tailwindRuntime) {
361
+ if (typeof tailwindRuntime.getClassSetSync !== "function") return /* @__PURE__ */ new Set();
362
+ try {
363
+ return new Set(tailwindRuntime.getClassSetSync() ?? []);
364
+ } catch {
365
+ return /* @__PURE__ */ new Set();
366
+ }
367
+ }
368
+ function toMb(bytes) {
369
+ return Math.round(bytes / 1024 / 1024);
370
+ }
371
+ function pruneMapToMaxSize(map, maxSize) {
372
+ while (map.size > maxSize) {
373
+ const oldestKey = map.keys().next().value;
374
+ if (oldestKey === void 0) break;
375
+ map.delete(oldestKey);
376
+ }
377
+ }
378
+ function stripTrailingLineWhitespace(source) {
379
+ return source.replace(/[ \t]+$/gm, "");
380
+ }
381
+ function pruneWebpackCssHandlerOptionCaches(cssHandlerOptionsCache, cssUserHandlerOptionsCache, activeCssFiles) {
382
+ const activeSuffixes = [...activeCssFiles].map((file) => `:${file}`);
383
+ for (const key of cssHandlerOptionsCache.keys()) if (!activeSuffixes.some((suffix) => key.endsWith(suffix))) cssHandlerOptionsCache.delete(key);
384
+ for (const key of cssUserHandlerOptionsCache.keys()) if (!activeSuffixes.some((suffix) => key.endsWith(suffix))) cssUserHandlerOptionsCache.delete(key);
385
+ pruneMapToMaxSize(cssHandlerOptionsCache, WEBPACK_CSS_HANDLER_OPTIONS_CACHE_MAX);
386
+ pruneMapToMaxSize(cssUserHandlerOptionsCache, WEBPACK_CSS_HANDLER_OPTIONS_CACHE_MAX);
387
+ }
388
+ function resolveWebpackGeneratorRawSource(rawSource, cssHandlerOptions) {
389
+ const sourceCss = cssHandlerOptions.sourceOptions?.sourceCss;
390
+ if (sourceCss && (hasTailwindRootDirectives(sourceCss, { importFallback: true }) || hasTailwindSourceDirectives(sourceCss, { importFallback: true }) || hasTailwindApplyDirective(sourceCss) || hasTailwindGeneratedCss(sourceCss) || hasTailwindGeneratedCssMarkers(sourceCss))) return sourceCss;
391
+ return rawSource;
392
+ }
393
+ function hasUsableWebpackGeneratorCssSources(cssSources) {
394
+ return Array.isArray(cssSources) && cssSources.some((source) => typeof source?.css === "string" && source.css.length > 0);
395
+ }
396
+ function normalizeWebpackGeneratorCssSources(cssSources) {
397
+ if (!Array.isArray(cssSources)) return;
398
+ const normalized = cssSources.filter((source) => typeof source?.css === "string" && source.css.length > 0);
399
+ return normalized.length > 0 ? normalized : void 0;
400
+ }
401
+ function hasProcessedCssAssetUrl(css) {
402
+ return /url\(\s*["']?data:/i.test(css);
403
+ }
404
+ function shouldUseWebpackAssetAsGeneratorUserCss(rawSource, generatorRawSource, options = {}) {
405
+ return rawSource !== generatorRawSource && (options.processed === true || !rawSource.includes("data:")) && !hasTailwindRootDirectives(rawSource, { importFallback: true }) && !hasTailwindSourceDirectives(rawSource, { importFallback: true }) && !hasTailwindApplyDirective(rawSource) && /(?:^|[^\w-])\.[_a-z\u00A0-\uFFFF\\-]/i.test(rawSource) && (!hasTailwindGeneratedCssMarkers(rawSource) || hasAdditionalWebpackAssetUserCssMarkers(rawSource, generatorRawSource));
406
+ }
407
+ function collectWebpackAssetUserCssMarkers(source) {
408
+ const markers = /* @__PURE__ */ new Set();
409
+ for (const match of source.matchAll(/\.((?:\\.|[_a-z\u00A0-\uFFFF-])(?:\\.|[\w\u00A0-\uFFFF-])*)/gi)) markers.add(`class:${match[1]}`);
410
+ for (const match of source.matchAll(/@(?:-[\w-]+-)?keyframes\s+((?:\\.|[-\w\u00A0-\uFFFF])+)/gi)) markers.add(`keyframes:${match[1]}`);
411
+ try {
412
+ const root = postcss.parse(source);
413
+ root.walkRules((rule) => {
414
+ for (const selector of rule.selectors) if (!/(?:^|[^\w-])\.[_a-z\u00A0-\uFFFF\\-]/i.test(selector)) markers.add(`selector:${selector.trim().replace(/\s+/g, " ")}`);
415
+ rule.walkDecls((decl) => {
416
+ if (decl.prop.startsWith("--")) markers.add(`custom-property:${decl.prop}`);
417
+ });
418
+ });
419
+ root.walkAtRules("font-face", (rule) => {
420
+ rule.walkDecls("font-family", (decl) => {
421
+ markers.add(`font-face:${decl.value.trim()}`);
422
+ });
423
+ });
424
+ } catch {}
425
+ return markers;
426
+ }
427
+ const WEBPACK_TAILWIND_GENERATED_LAYER_NAMES = new Set([
428
+ "theme",
429
+ "base",
430
+ "utilities"
431
+ ]);
432
+ const WEBPACK_TAILWIND_UTILITY_RULE_MARKER_RE = /(?:^|[^\w-])\.[^,{]{0,512}(?:\\:|\\\[|\\#)/;
433
+ const WEBPACK_TAILWIND_UTILITY_PREFIX_RE = /^\.(?:-?(?:bg|text|border|ring|shadow|drop-shadow|[pmwhz]|px|py|pt|pr|pb|pl|mx|my|mt|mr|mb|ml|min-w|min-h|max-w|max-h|flex|grid|inline|block|hidden|rounded|opacity|translate|scale|rotate|skew|top|right|bottom|left|inset|gap|font|leading|tracking|underline|container)(?:[\-\\{]|$)|\\\[)/;
434
+ function parseWebpackCssLayerNames(params) {
435
+ return params.split(",").map((name) => name.trim()).filter(Boolean);
436
+ }
437
+ function removeWebpackTailwindGeneratedAssetCss(source) {
438
+ const cleaned = removeTailwindV4GeneratedUserCssArtifacts(source);
439
+ try {
440
+ const root = postcss.parse(cleaned);
441
+ let changed = false;
442
+ root.walkAtRules("layer", (rule) => {
443
+ const names = parseWebpackCssLayerNames(rule.params);
444
+ const hasGeneratedLayerName = names.some((name) => WEBPACK_TAILWIND_GENERATED_LAYER_NAMES.has(name));
445
+ const isLayerDeclaration = rule.nodes === void 0;
446
+ const shouldRemoveLayer = isLayerDeclaration ? hasGeneratedLayerName : names.length > 0 && names.every((name) => WEBPACK_TAILWIND_GENERATED_LAYER_NAMES.has(name));
447
+ if (shouldRemoveLayer && isLayerDeclaration) {
448
+ rule.remove();
449
+ changed = true;
450
+ return;
451
+ }
452
+ if (shouldRemoveLayer && !names.includes("utilities")) {
453
+ rule.remove();
454
+ changed = true;
455
+ return;
456
+ }
457
+ if (shouldRemoveLayer) {
458
+ rule.walkRules((nestedRule) => {
459
+ const selector = nestedRule.selector.trim();
460
+ if (WEBPACK_TAILWIND_UTILITY_RULE_MARKER_RE.test(selector) || WEBPACK_TAILWIND_UTILITY_PREFIX_RE.test(selector)) {
461
+ nestedRule.remove();
462
+ changed = true;
463
+ }
464
+ });
465
+ if (rule.nodes?.length === 0) {
466
+ rule.remove();
467
+ changed = true;
468
+ }
469
+ }
470
+ });
471
+ root.walkAtRules((rule) => {
472
+ if (rule.nodes !== void 0 && rule.nodes.length === 0) {
473
+ rule.remove();
474
+ changed = true;
475
+ }
476
+ });
477
+ return changed ? root.toString() : cleaned;
478
+ } catch {
479
+ return cleaned;
480
+ }
481
+ }
482
+ function collectWebpackCssRuleIdentityMarkers(source) {
483
+ const markers = /* @__PURE__ */ new Set();
484
+ try {
485
+ const root = postcss.parse(source);
486
+ root.walkRules((rule) => {
487
+ for (const selector of rule.selectors) for (const match of selector.matchAll(/\.((?:\\.|[_a-z\u00A0-\uFFFF-])(?:\\.|[\w\u00A0-\uFFFF-])*)/gi)) markers.add(`class:${match[1]}`);
488
+ });
489
+ root.walkAtRules("keyframes", (rule) => {
490
+ if (rule.params) markers.add(`keyframes:${rule.params}`);
491
+ });
492
+ } catch {}
493
+ return markers;
494
+ }
495
+ function unescapeCssIdentifier(value) {
496
+ return value.replace(/\\([0-9a-f]{1,6}\s?|.)/gi, (_match, escaped) => {
497
+ const hex = escaped.trim();
498
+ if (/^[0-9a-f]+$/i.test(hex)) return String.fromCodePoint(Number.parseInt(hex, 16));
499
+ return escaped;
500
+ });
501
+ }
502
+ function collectGeneratedCssRuntimeCandidates(source) {
503
+ const candidates = /* @__PURE__ */ new Set();
504
+ if (hasBundlerGeneratedCssMarker(source) || !hasTailwindGeneratedCss(source) && !hasTailwindGeneratedCssMarkers(source)) return candidates;
505
+ try {
506
+ postcss.parse(source).walkRules((rule) => {
507
+ for (const selector of rule.selectors) for (const match of selector.matchAll(/\.((?:\\.|[\w\u00A0-\uFFFF-])(?:\\.|[\w\u00A0-\uFFFF-])*)/g)) {
508
+ const candidate = unescapeCssIdentifier(match[1]);
509
+ if (isRuntimeTransformCandidate(candidate)) candidates.add(candidate);
510
+ }
511
+ });
512
+ } catch {}
513
+ return candidates;
514
+ }
515
+ function hasAdditionalWebpackAssetUserCssMarkers(rawSource, generatorRawSource) {
516
+ const rawMarkers = collectWebpackAssetUserCssMarkers(rawSource);
517
+ if (rawMarkers.size === 0) return false;
518
+ const generatorMarkers = collectWebpackAssetUserCssMarkers(generatorRawSource);
519
+ for (const marker of rawMarkers) if (!generatorMarkers.has(marker)) return true;
520
+ return false;
521
+ }
522
+ function hasWebpackTailwindSourceDirectives(source) {
523
+ return Boolean(source) && (hasTailwindRootDirectives(source, { importFallback: true }) || hasTailwindSourceDirectives(source, { importFallback: true }) || hasTailwindApplyDirective(source) || hasTailwindGeneratedCss(source) || hasTailwindGeneratedCssMarkers(source));
524
+ }
525
+ function isWebpackTailwindImportRequest(request) {
526
+ return request === "tailwindcss" || request === "tailwindcss4" || request?.startsWith("tailwindcss/") || request?.startsWith("tailwindcss4/") || request === "weapp-tailwindcss" || request?.startsWith("weapp-tailwindcss/");
527
+ }
528
+ function removeWebpackGeneratorNonTailwindImports(source) {
529
+ if (!source?.includes("@import")) return source;
530
+ try {
531
+ const root = postcss.parse(source);
532
+ let changed = false;
533
+ root.walkAtRules("import", (rule) => {
534
+ if (isWebpackTailwindImportRequest(parseImportRequest(rule.params))) return;
535
+ rule.remove();
536
+ changed = true;
537
+ });
538
+ return changed ? root.toString() : source;
539
+ } catch {
540
+ return source;
541
+ }
542
+ }
543
+ function isWebpackCssSourceRepresentedInAsset(rawSource, sourceCss) {
544
+ if (!sourceCss || !hasWebpackTailwindSourceDirectives(sourceCss)) return false;
545
+ const sourceMarkers = collectWebpackCssRuleIdentityMarkers(sourceCss);
546
+ if (sourceMarkers.size === 0) return false;
547
+ const rawMarkers = collectWebpackCssRuleIdentityMarkers(rawSource);
548
+ for (const marker of sourceMarkers) if (!rawMarkers.has(marker)) return false;
549
+ return true;
550
+ }
551
+ function createWebpackGeneratorCssSource(file, css) {
552
+ if (!file || !css || !hasWebpackTailwindSourceDirectives(css)) return;
553
+ return {
554
+ file,
555
+ base: path.dirname(file),
556
+ css,
557
+ dependencies: [file]
558
+ };
559
+ }
560
+ function createWebpackUserCssSourceAppend(sources, generatorRawSource, currentSourceFile, shouldIncludeSource) {
561
+ const matchedSources = [];
562
+ const seen = /* @__PURE__ */ new Set();
563
+ for (const source of sources) {
564
+ const css = source.css;
565
+ if (!css || seen.has(css)) continue;
566
+ if (shouldIncludeSource && !shouldIncludeSource(source.file)) continue;
567
+ seen.add(css);
568
+ if ((source.processed === true || !css.includes("data:")) && hasAdditionalWebpackAssetUserCssMarkers(css, generatorRawSource)) matchedSources.push({
569
+ css,
570
+ file: source.file,
571
+ processed: source.processed === true
572
+ });
573
+ }
574
+ const currentFile = currentSourceFile ? path.resolve(currentSourceFile) : void 0;
575
+ const parts = matchedSources.sort((a, b) => {
576
+ const aCurrent = currentFile !== void 0 && path.resolve(a.file) === currentFile;
577
+ if (aCurrent !== (currentFile !== void 0 && path.resolve(b.file) === currentFile)) return aCurrent ? -1 : 1;
578
+ return a.file.localeCompare(b.file);
579
+ }).map((source) => source.css);
580
+ return parts.length > 0 ? {
581
+ css: parts.join("\n"),
582
+ processed: matchedSources.every((source) => source.processed)
583
+ } : void 0;
584
+ }
585
+ function createWebpackGeneratorUserCssSourceAppend(...sources) {
586
+ const parts = sources.filter((source) => source !== void 0 && source.css.trim().length > 0);
587
+ if (parts.length === 0) return;
588
+ let css = "";
589
+ const usedParts = [];
590
+ for (const source of parts) {
591
+ const nextCss = css.trim().length > 0 ? filterExistingCssRules(css, source.css) : source.css;
592
+ if (!(nextCss.trim().length > 0)) continue;
593
+ css = createCssSourceOrderAppend(css, nextCss);
594
+ usedParts.push(source);
595
+ }
596
+ return {
597
+ css,
598
+ processed: usedParts.every((source) => source.processed)
599
+ };
600
+ }
601
+ function resolveWebpackMemoryDebugStats(context) {
602
+ if (process.env["WEAPP_TW_HMR_MEMORY_DEBUG"] !== "1") return;
603
+ const memory = process.memoryUsage();
604
+ const processCacheInstanceSize = context.cache.instance.size;
605
+ const processCacheHashMapSize = context.cache.hashMap.size;
606
+ return {
607
+ phase: context.phase,
608
+ process: {
609
+ rssMb: toMb(memory.rss),
610
+ heapTotalMb: toMb(memory.heapTotal),
611
+ heapUsedMb: toMb(memory.heapUsed),
612
+ externalMb: toMb(memory.external),
613
+ arrayBuffersMb: toMb(memory.arrayBuffers)
614
+ },
615
+ assets: {
616
+ active: context.activeAssetFiles,
617
+ activeCss: context.activeCssFiles
618
+ },
619
+ processCache: {
620
+ instance: processCacheInstanceSize,
621
+ hashMap: processCacheHashMapSize,
622
+ activeCacheKeys: context.activeProcessCacheKeys.size,
623
+ activeHashKeys: context.activeProcessHashKeys.size,
624
+ staleCacheKeys: Math.max(0, processCacheInstanceSize - context.activeProcessCacheKeys.size),
625
+ staleHashKeys: Math.max(0, processCacheHashMapSize - context.activeProcessHashKeys.size),
626
+ pruned: true,
627
+ pruneSkipped: false
628
+ },
629
+ webpackCss: {
630
+ handlerOptions: context.cssHandlerOptionsCache.size,
631
+ userHandlerOptions: context.cssUserHandlerOptionsCache.size,
632
+ maxHandlerOptions: WEBPACK_CSS_HANDLER_OPTIONS_CACHE_MAX
633
+ },
634
+ sourceCandidateScan: context.sourceCandidateScan,
635
+ tailwind: { v4: getTailwindV4IncrementalGenerateCacheStats() }
636
+ };
637
+ }
638
+ function shouldInjectWebpackCssTracePreflight(appType, cssHandlerOptions) {
639
+ return appType !== "mpx" || cssHandlerOptions.isMainChunk !== false;
640
+ }
641
+ function finalizeMiniProgramUserCssAssetSource(source, compilerOptions, isWebGeneratorTarget, options = {}) {
642
+ const styleOptions = resolveStyleOptionsFromContext(compilerOptions);
643
+ if (isWebGeneratorTarget) return source;
644
+ return stripMiniProgramCssSpecificityPlaceholders(removeTailwindV4StandaloneHostPreflightRule(finalizeMiniProgramCss(removeMiniProgramHoverSelectors(source, styleOptions.cssRemoveHoverPseudoClass), {
645
+ cssPreflight: options.cssPreflight !== false && !hasMiniProgramTailwindV4PreflightReset(source) ? compilerOptions.cssPreflight : void 0,
646
+ isTailwindcssV4: true,
647
+ tailwindcssV4GradientFallback: styleOptions.tailwindcssV4GradientFallback
648
+ })));
649
+ }
650
+ function shouldFallbackToWebpackUserCssOnGeneratorError(options) {
651
+ return !hasTailwindRootDirectives(options.generatorRawSource, { importFallback: true }) && !hasTailwindSourceDirectives(options.generatorRawSource, { importFallback: true }) && !hasTailwindApplyDirective(options.generatorRawSource) && !options.hasExplicitTailwindV4SourceCss && options.configuredMainCssEntryFilesLength === 0;
652
+ }
653
+ function isWindowsAbsoluteResourcePath(file) {
654
+ return /^[a-z]:[\\/]/i.test(file) || /^[/\\]{2}[^/\\]/.test(file);
655
+ }
656
+ function isPosixAbsoluteResourcePath(file) {
657
+ return file.startsWith("/");
658
+ }
659
+ function resolveWebpackResourcePath(file, base) {
660
+ if (isWindowsAbsoluteResourcePath(file)) return path.win32.resolve(file);
661
+ if (isPosixAbsoluteResourcePath(file)) return path.posix.resolve(file);
662
+ if (base) {
663
+ if (isWindowsAbsoluteResourcePath(base)) return path.win32.resolve(base, file);
664
+ if (isPosixAbsoluteResourcePath(base)) return path.posix.resolve(base, file);
665
+ return path.resolve(base, file);
666
+ }
667
+ }
668
+ function dirnameWebpackResourcePath(file) {
669
+ if (isWindowsAbsoluteResourcePath(file)) return path.win32.dirname(file);
670
+ if (isPosixAbsoluteResourcePath(file)) return path.posix.dirname(file);
671
+ return path.dirname(file);
672
+ }
673
+ function resolveWebpackCssAssetModuleResource(resource, issuer, options) {
674
+ if (!isCssLikeModuleResource(resource, options.cssMatcher, options.appType)) return;
675
+ const normalized = stripResourceQuery(resource);
676
+ if (!normalized) return;
677
+ const absoluteResource = resolveWebpackResourcePath(normalized);
678
+ if (absoluteResource) return absoluteResource;
679
+ const issuerResource = issuer?.resource ? stripResourceQuery(issuer.resource) : void 0;
680
+ const issuerResourcePath = issuerResource ? resolveWebpackResourcePath(issuerResource) : void 0;
681
+ return resolveWebpackResourcePath(normalized, issuerResourcePath ? dirnameWebpackResourcePath(issuerResourcePath) : issuer?.context);
682
+ }
683
+ function isSameWebpackCssSourceScope(options) {
684
+ if (!options.currentSourceFile) return false;
685
+ const candidateKey = resolveWebpackResourcePath(options.candidateSourceFile) ?? path.resolve(options.candidateSourceFile);
686
+ if (candidateKey === (resolveWebpackResourcePath(options.currentSourceFile) ?? path.resolve(options.currentSourceFile))) return true;
687
+ const outputResources = options.resourcesByAsset.get(options.outputFile);
688
+ if (!outputResources) return false;
689
+ return [...outputResources].some((resource) => {
690
+ return (resolveWebpackResourcePath(resource) ?? path.resolve(resource)) === candidateKey;
691
+ });
692
+ }
693
+ function shouldAppendCurrentWebpackAssetUserCss(options) {
694
+ const hasGeneratedAssetUserCss = options.currentAssetLooksGenerated && options.currentAssetHasUserCss;
695
+ return !options.currentAssetHasBundlerGeneratedMarker && !options.shouldPreserveGeneratedWebAssetUserCss && (hasGeneratedAssetUserCss || !options.sourceCssProcessed || options.registeredUserRawSource === void 0 || options.currentAssetHasUserCss) && !(options.sourceCssProcessed && options.currentAssetLooksGenerated && !options.currentAssetHasUserCss);
696
+ }
697
+ function createWebpackCurrentAssetUserRawSource(options) {
698
+ if (!options.shouldAppendCurrentAssetUserCss) return;
699
+ if (options.sourceCssProcessed) return {
700
+ css: options.currentAssetUserCssSource,
701
+ processed: true
702
+ };
703
+ if (!options.currentAssetHasUserCss) return;
704
+ return {
705
+ css: options.currentAssetUserCssSource,
706
+ processed: options.currentAssetLooksGenerated
707
+ };
708
+ }
709
+ function finalizeTracedWebpackCssAsset(css, cssHandlerOptions, options) {
710
+ const traced = options.annotateCss(css);
711
+ if (options.isWebGeneratorTarget || !isCssSourceTraceEnabled(options.compilerOptions)) return traced;
712
+ return finalizeMiniProgramUserCssAssetSource(traced, options.compilerOptions, options.isWebGeneratorTarget, { cssPreflight: shouldInjectWebpackCssTracePreflight(options.compilerOptions.appType, cssHandlerOptions) });
713
+ }
714
+ function finalizeWebpackCssAssetSource(source, compilerOptions, isWebGeneratorTarget, options = {}) {
715
+ const styleOptions = resolveStyleOptionsFromContext(compilerOptions);
716
+ if (isWebGeneratorTarget) {
717
+ if (options.generatedCss === true) return stripTrailingLineWhitespace(stripUnmatchedTailwindSourceMediaCloseFragments(stripTailwindSourceMediaFragments(stripBundlerGeneratedCssMarkers(source))));
718
+ return stripTrailingLineWhitespace(stripUnmatchedTailwindSourceMediaCloseFragments(stripTailwindSourceMediaFragments(removeTailwindV4GeneratorAtRules(removeTailwindSourceDirectives(stripBundlerGeneratedCssMarkers(source), { importFallback: true })))));
719
+ }
720
+ let finalized = removeTailwindSourceDirectives(stripBundlerGeneratedCssMarkers(source), { importFallback: true });
721
+ if (options.generatedCss !== true) return stripMiniProgramCssSpecificityPlaceholders(removeMiniProgramHoverSelectors(finalized, styleOptions.cssRemoveHoverPseudoClass));
722
+ try {
723
+ finalized = pruneMiniProgramGeneratedCss(finalized, { preservePreflight: true });
724
+ } catch {
725
+ finalized = finalizeMiniProgramCss(finalized, {
726
+ cssPreflight: !hasMiniProgramTailwindV4PreflightReset(finalized) ? compilerOptions.cssPreflight : void 0,
727
+ isTailwindcssV4: true,
728
+ tailwindcssV4GradientFallback: styleOptions.tailwindcssV4GradientFallback
729
+ });
730
+ }
731
+ return stripMiniProgramCssSpecificityPlaceholders(removeMiniProgramHoverSelectors(finalized, styleOptions.cssRemoveHoverPseudoClass));
732
+ }
733
+ function collectWebpackJsRuntimeCandidatesFromAssets(options) {
734
+ if (options.isWebGeneratorTarget) return;
735
+ const candidates = /* @__PURE__ */ new Set();
736
+ for (const file of options.jsAssets) {
737
+ const sourceLike = options.getAssetSource(file);
738
+ if (sourceLike === void 0) continue;
739
+ const source = stringifyWebpackSourceLike(sourceLike);
740
+ for (const candidate of collectStrictEscapedRuntimeCandidates(source, MappingChars2String, options.escapeFragments)) if (isRuntimeTransformCandidate(candidate)) candidates.add(candidate);
741
+ }
742
+ return candidates;
743
+ }
744
+ function collectWebpackJsRuntimeTokenSignature(options) {
745
+ if (options.isWebGeneratorTarget) return "";
746
+ const tokens = [];
747
+ for (const file of options.jsAssets) {
748
+ const sourceLike = options.getAssetSource(file);
749
+ if (sourceLike === void 0) continue;
750
+ tokens.push(...collectRuntimeTokenSignatureParts(stringifyWebpackSourceLike(sourceLike)));
751
+ }
752
+ return tokens.sort().join("\n");
753
+ }
754
+ function addRuntimeTransformCandidates(target, candidates) {
755
+ if (!candidates?.size) return;
756
+ for (const candidate of candidates) if (isRuntimeTransformCandidate(candidate)) target.add(candidate);
757
+ }
758
+ function createWebpackCssSourceTraceTokenSources(compilerOptions, webpackSourceCandidates) {
759
+ if (!isCssSourceTraceEnabled(compilerOptions) || !webpackSourceCandidates) return;
760
+ return createCssTokenSourceMap(webpackSourceCandidates.tokenSources, compilerOptions);
761
+ }
762
+ function stringifyOptionalWebpackSourceValue(value) {
763
+ return typeof value === "string" ? value : value?.toString() ?? "";
764
+ }
765
+ function stringifyWebpackSourceLike(source) {
766
+ if (typeof source === "string") return source;
767
+ const value = source.source();
768
+ return typeof value === "string" ? value : value.toString();
769
+ }
770
+ //#endregion
771
+ //#region src/bundlers/webpack/BaseUnifiedPlugin/v5-assets/css-source-resolvers.ts
772
+ function createWebpackCssSourceResolvers(options) {
773
+ const { activeWebpackAssetResourceFiles, appType, compilerOptions, compilation, cssAssetResources, cssHandlerOptionsCache, cssSources, cssUserHandlerOptionsCache, groupedCssEntriesLength, singleCssAssetFile, isWebGeneratorTarget, outputDir, runtimeState } = options;
774
+ const hasConfiguredTailwindV4SourceRoots = () => {
775
+ const tailwindOptions = resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
776
+ return (tailwindOptions?.v4?.cssEntries?.length ?? 0) > 0 || (tailwindOptions?.v4?.cssSources?.length ?? 0) > 0;
777
+ };
778
+ const configuredMainCssEntryFiles = (() => {
779
+ return [...resolveTailwindcssOptions(runtimeState.tailwindRuntime.options)?.v4?.cssEntries ?? []].filter((file) => typeof file === "string" && file.length > 0).map((file) => path.resolve(file));
780
+ })();
781
+ const inferredMainCssFiles = inferWebpackMainCssFiles(compilation.chunks, compilerOptions.cssMatcher, {
782
+ mainSourceFiles: new Set(configuredMainCssEntryFiles),
783
+ resourcesByAsset: cssAssetResources
784
+ });
785
+ const singleConfiguredCssAsset = isWebGeneratorTarget && configuredMainCssEntryFiles.length > 0 && groupedCssEntriesLength === 1 ? singleCssAssetFile : void 0;
786
+ const isMainCssChunk = (file) => compilerOptions.mainCssChunkMatcher(file, appType) || inferredMainCssFiles.has(file) || file === singleConfiguredCssAsset;
787
+ const activeWebpackCssSourceFiles = /* @__PURE__ */ new Set();
788
+ const resolveConfiguredMainCssSourceFile = (file) => {
789
+ if (!isMainCssChunk(file)) return;
790
+ for (const sourceFile of configuredMainCssEntryFiles) if (cssSources.has(sourceFile)) {
791
+ activeWebpackCssSourceFiles.add(sourceFile);
792
+ return sourceFile;
793
+ }
794
+ };
795
+ const resolveWebpackCssSourceFile = (file, rawSource) => {
796
+ const assetResources = cssAssetResources.get(file);
797
+ const activeAssetResource = resolveSingleActiveWebpackCssResource(assetResources, activeWebpackAssetResourceFiles);
798
+ if (cssSources.size === 0) {
799
+ if (activeAssetResource) {
800
+ activeWebpackCssSourceFiles.add(activeAssetResource);
801
+ return activeAssetResource;
802
+ }
803
+ if (assetResources && assetResources.size > 0) return;
804
+ return resolveConfiguredMainCssSourceFile(file);
805
+ }
806
+ const resourceMatches = [...assetResources ?? []].filter((sourceFile) => cssSources.has(sourceFile)).sort();
807
+ if (resourceMatches.length === 1) {
808
+ const sourceFile = resourceMatches[0];
809
+ activeWebpackCssSourceFiles.add(sourceFile);
810
+ return sourceFile;
811
+ }
812
+ const tailwindSourceMatches = resourceMatches.filter((sourceFile) => {
813
+ const sourceCss = cssSources.get(sourceFile)?.css;
814
+ return sourceCss && (hasTailwindRootDirectives(sourceCss, { importFallback: true }) || hasTailwindSourceDirectives(sourceCss, { importFallback: true }) || hasTailwindApplyDirective(sourceCss) || hasTailwindGeneratedCss(sourceCss) || hasTailwindGeneratedCssMarkers(sourceCss));
815
+ });
816
+ if (tailwindSourceMatches.length === 1) {
817
+ const sourceFile = tailwindSourceMatches[0];
818
+ activeWebpackCssSourceFiles.add(sourceFile);
819
+ return sourceFile;
820
+ }
821
+ if (activeAssetResource) {
822
+ activeWebpackCssSourceFiles.add(activeAssetResource);
823
+ return activeAssetResource;
824
+ }
825
+ if (rawSource) {
826
+ const representedTailwindSourceMatches = [...cssSources.entries()].filter(([, source]) => isWebpackCssSourceRepresentedInAsset(rawSource, source.css)).map(([sourceFile]) => ({
827
+ sourceFile,
828
+ score: scoreTailwindV4CssSourceFileMatch(file, sourceFile, {
829
+ outputRoot: outputDir,
830
+ projectRoot: compilerOptions.tailwindcssBasedir,
831
+ cwd: compilerOptions.tailwindcssBasedir
832
+ })
833
+ })).filter((match) => match.score > 0).sort((a, b) => b.score - a.score || a.sourceFile.localeCompare(b.sourceFile));
834
+ const bestScore = representedTailwindSourceMatches[0]?.score ?? 0;
835
+ const bestMatches = representedTailwindSourceMatches.filter((match) => match.score === bestScore);
836
+ if (bestMatches.length === 1) {
837
+ const sourceFile = bestMatches[0].sourceFile;
838
+ activeWebpackCssSourceFiles.add(sourceFile);
839
+ return sourceFile;
840
+ }
841
+ }
842
+ const pathMatches = [...cssSources.keys()].map((sourceFile) => ({
843
+ sourceFile,
844
+ score: scoreTailwindV4CssSourceFileMatch(file, sourceFile, {
845
+ outputRoot: outputDir,
846
+ projectRoot: compilerOptions.tailwindcssBasedir,
847
+ cwd: compilerOptions.tailwindcssBasedir
848
+ })
849
+ })).filter((match) => match.score >= 1e3).sort((a, b) => b.score - a.score || a.sourceFile.localeCompare(b.sourceFile));
850
+ const bestPathScore = pathMatches[0]?.score ?? 0;
851
+ const bestPathMatches = pathMatches.filter((match) => match.score === bestPathScore);
852
+ if (bestPathMatches.length === 1) {
853
+ const sourceFile = bestPathMatches[0].sourceFile;
854
+ activeWebpackCssSourceFiles.add(sourceFile);
855
+ return sourceFile;
856
+ }
857
+ if (assetResources && assetResources.size > 0) return;
858
+ return resolveConfiguredMainCssSourceFile(file);
859
+ };
860
+ const isSameWebpackSourceScope = (outputFile, candidateSourceFile, currentSourceFile) => isSameWebpackCssSourceScope({
861
+ candidateSourceFile,
862
+ currentSourceFile,
863
+ outputFile,
864
+ resourcesByAsset: cssAssetResources
865
+ });
866
+ const getCssHandlerOptions = (file, rawSource) => {
867
+ const majorVersion = runtimeState.tailwindRuntime.majorVersion;
868
+ const isMainChunk = isMainCssChunk(file);
869
+ const sourceFile = resolveWebpackCssSourceFile(file, rawSource);
870
+ const sourceCss = sourceFile ? cssSources.get(sourceFile)?.css : void 0;
871
+ const generatorSourceCss = removeWebpackGeneratorNonTailwindImports(sourceCss);
872
+ const generatorCssSource = createWebpackGeneratorCssSource(sourceFile, generatorSourceCss);
873
+ const cacheKey = [
874
+ majorVersion ?? "unknown",
875
+ isMainChunk ? "1" : "0",
876
+ sourceFile ?? "asset",
877
+ sourceCss === void 0 ? "source:0" : compilerOptions.cache.computeHash(sourceCss),
878
+ generatorSourceCss === sourceCss || generatorSourceCss === void 0 ? "generator-source:0" : compilerOptions.cache.computeHash(generatorSourceCss),
879
+ file
880
+ ].join(":");
881
+ const cached = cssHandlerOptionsCache.get(cacheKey);
882
+ if (cached) return cached;
883
+ const created = {
884
+ isMainChunk,
885
+ postcssOptions: { options: { from: sourceFile ?? file } },
886
+ sourceOptions: {
887
+ outputRoot: outputDir,
888
+ ...generatorCssSource === void 0 ? {} : { cssSources: [generatorCssSource] },
889
+ ...generatorSourceCss === void 0 ? {} : { sourceCss: generatorSourceCss },
890
+ ...sourceFile === void 0 ? {} : { sourceFile }
891
+ },
892
+ ...normalizeStyleHandlerMajorVersion(majorVersion) === void 0 ? {} : { majorVersion: 4 }
893
+ };
894
+ cssHandlerOptionsCache.set(cacheKey, created);
895
+ return created;
896
+ };
897
+ const getCssUserHandlerOptions = (file) => {
898
+ const majorVersion = runtimeState.tailwindRuntime.majorVersion;
899
+ const sourceFile = resolveWebpackCssSourceFile(file);
900
+ const sourceCss = sourceFile ? cssSources.get(sourceFile)?.css : void 0;
901
+ const generatorSourceCss = removeWebpackGeneratorNonTailwindImports(sourceCss);
902
+ const cacheKey = [
903
+ majorVersion ?? "unknown",
904
+ sourceFile ?? "asset",
905
+ sourceCss === void 0 ? "source:0" : compilerOptions.cache.computeHash(sourceCss),
906
+ generatorSourceCss === sourceCss || generatorSourceCss === void 0 ? "generator-source:0" : compilerOptions.cache.computeHash(generatorSourceCss),
907
+ file
908
+ ].join(":");
909
+ const cached = cssUserHandlerOptionsCache.get(cacheKey);
910
+ if (cached) return cached;
911
+ const created = {
912
+ ...getCssHandlerOptions(file),
913
+ isMainChunk: false
914
+ };
915
+ cssUserHandlerOptionsCache.set(cacheKey, created);
916
+ return created;
917
+ };
918
+ return {
919
+ activeWebpackCssSourceFiles,
920
+ configuredMainCssEntryFiles,
921
+ getCssHandlerOptions,
922
+ getCssUserHandlerOptions,
923
+ hasConfiguredTailwindV4SourceRoots,
924
+ isSameWebpackSourceScope,
925
+ resolveWebpackCssSourceFile
926
+ };
927
+ }
928
+ //#endregion
929
+ //#region src/bundlers/webpack/BaseUnifiedPlugin/v5-assets/helpers.ts
930
+ function createChangedByType() {
931
+ return {
932
+ html: /* @__PURE__ */ new Set(),
933
+ js: /* @__PURE__ */ new Set(),
934
+ css: /* @__PURE__ */ new Set(),
935
+ other: /* @__PURE__ */ new Set()
936
+ };
937
+ }
938
+ function createProcessFiles() {
939
+ return {
940
+ html: /* @__PURE__ */ new Set(),
941
+ js: /* @__PURE__ */ new Set(),
942
+ css: /* @__PURE__ */ new Set()
943
+ };
944
+ }
945
+ function markProcessFile(type, file, processFiles) {
946
+ if (type === "html" || type === "js" || type === "css") processFiles[type].add(file);
947
+ }
948
+ function buildWebpackBundleSnapshot(assets, opts, state, compilation) {
949
+ const sourceHashByFile = /* @__PURE__ */ new Map();
950
+ const runtimeAffectingSignatureByFile = /* @__PURE__ */ new Map();
951
+ const runtimeAffectingHashByFile = /* @__PURE__ */ new Map();
952
+ const changedByType = createChangedByType();
953
+ const runtimeAffectingChangedByType = createChangedByType();
954
+ const processFiles = createProcessFiles();
955
+ const entries = [];
956
+ const firstRun = state.iteration === 0 && state.sourceHashByFile.size === 0;
957
+ for (const [file, asset] of Object.entries(assets)) {
958
+ const type = classifyBundleEntry(file, opts);
959
+ if (type !== "html" && type !== "js") continue;
960
+ const source = stringifyWebpackSource(compilation?.getAsset(file)?.source.source() ?? asset.source());
961
+ const hash = opts.cache.computeHash(source);
962
+ sourceHashByFile.set(file, hash);
963
+ const previousHash = state.sourceHashByFile.get(file);
964
+ const changed = previousHash == null || previousHash !== hash;
965
+ const previousRuntimeAffectingHash = state.runtimeAffectingHashByFile.get(file);
966
+ const runtimeAffectingHash = !changed && previousRuntimeAffectingHash != null ? previousRuntimeAffectingHash : (() => {
967
+ const runtimeAffectingSignature = createRuntimeAffectingSourceSignature(source, type);
968
+ runtimeAffectingSignatureByFile.set(file, runtimeAffectingSignature);
969
+ return opts.cache.computeHash(runtimeAffectingSignature);
970
+ })();
971
+ runtimeAffectingHashByFile.set(file, runtimeAffectingHash);
972
+ if (changed) changedByType[type].add(file);
973
+ if (previousRuntimeAffectingHash == null || previousRuntimeAffectingHash !== runtimeAffectingHash) runtimeAffectingChangedByType[type].add(file);
974
+ if (firstRun) markProcessFile(type, file, processFiles);
975
+ else if (type === "html") processFiles.html.add(file);
976
+ else if (changed) processFiles.js.add(file);
977
+ entries.push({
978
+ file,
979
+ output: {
980
+ fileName: file,
981
+ name: void 0,
982
+ names: [],
983
+ needsCodeReference: false,
984
+ originalFileName: null,
985
+ originalFileNames: [],
986
+ source,
987
+ type: "asset"
988
+ },
989
+ source,
990
+ type
991
+ });
992
+ }
993
+ return {
994
+ entries,
995
+ jsEntries: /* @__PURE__ */ new Map(),
996
+ sourceHashByFile,
997
+ runtimeAffectingSignatureByFile,
998
+ runtimeAffectingHashByFile,
999
+ hasOmittedKnownFiles: false,
1000
+ changedByType,
1001
+ runtimeAffectingChangedByType,
1002
+ processFiles,
1003
+ linkedImpactsByEntry: /* @__PURE__ */ new Map()
1004
+ };
1005
+ }
1006
+ function releaseWebpackBundleSnapshotSources(snapshot) {
1007
+ for (const entry of snapshot.entries) {
1008
+ entry.source = "";
1009
+ if (entry.output.type === "asset") entry.output.source = "";
1010
+ else entry.output.code = "";
1011
+ }
1012
+ }
1013
+ function stringifyWebpackSource(source) {
1014
+ if (typeof source === "string") return source;
1015
+ return source?.toString() ?? "";
1016
+ }
1017
+ function createWebpackAssetUpdater(options) {
1018
+ const getCurrentAssetSource = (file) => {
1019
+ const asset = options.compilation.getAsset(file);
1020
+ if (!asset) return;
1021
+ return stringifyWebpackSource(asset.source.source());
1022
+ };
1023
+ const updateAssetIfChanged = (file, source, { compare = true, notifyUpdate = true } = {}) => {
1024
+ if (!compare) {
1025
+ options.compilation.updateAsset(file, typeof source === "string" ? new options.ConcatSource(source) : source);
1026
+ return true;
1027
+ }
1028
+ const nextSource = typeof source === "string" ? source : stringifyWebpackSource(source.source());
1029
+ const previousSource = getCurrentAssetSource(file);
1030
+ if (previousSource === nextSource) {
1031
+ options.debug("asset unchanged, skip update: %s", file);
1032
+ return false;
1033
+ }
1034
+ options.compilation.updateAsset(file, typeof source === "string" ? new options.ConcatSource(source) : source);
1035
+ if (notifyUpdate) options.onUpdate(file, previousSource ?? "", nextSource);
1036
+ return true;
1037
+ };
1038
+ return {
1039
+ getCurrentAssetSource,
1040
+ updateAssetIfChanged
1041
+ };
1042
+ }
1043
+ //#endregion
1044
+ //#region src/bundlers/webpack/BaseUnifiedPlugin/v5-assets/js-module-graph.ts
1045
+ function createWebpackJsAssetModuleGraph(options) {
1046
+ const jsAssets = /* @__PURE__ */ new Map();
1047
+ for (const [file] of options.entries) if (options.compilerOptions.jsMatcher(file) || options.compilerOptions.wxsMatcher(file)) {
1048
+ const absolute = toAbsoluteOutputPath(file, options.outputDir);
1049
+ jsAssets.set(absolute, file);
1050
+ }
1051
+ return {
1052
+ jsAssets,
1053
+ moduleGraphOptions: {
1054
+ resolve(specifier, importer) {
1055
+ return resolveOutputSpecifier(specifier, importer, options.outputDir, (candidate) => jsAssets.has(candidate));
1056
+ },
1057
+ load: (id) => {
1058
+ const assetName = jsAssets.get(id);
1059
+ if (!assetName) return;
1060
+ const asset = options.compilation.getAsset(assetName);
1061
+ if (!asset) return;
1062
+ const source = asset.source.source();
1063
+ return source == null ? "" : String(source);
1064
+ },
1065
+ filter(id) {
1066
+ return jsAssets.has(id);
1067
+ }
1068
+ }
1069
+ };
1070
+ }
1071
+ function applyWebpackLinkedJsResults(options) {
1072
+ if (!options.linked) return;
1073
+ for (const [id, { code }] of Object.entries(options.linked)) {
1074
+ const assetName = options.jsAssets.get(id);
1075
+ if (!assetName) continue;
1076
+ const asset = options.compilation.getAsset(assetName);
1077
+ if (!asset) continue;
1078
+ const previousSource = asset.source.source();
1079
+ const previous = previousSource == null ? "" : String(previousSource);
1080
+ if (previous === code) continue;
1081
+ const source = new options.ConcatSource(code);
1082
+ options.compilation.updateAsset(assetName, source);
1083
+ options.compilerOptions.onUpdate(assetName, previous, code);
1084
+ options.debug("js linked handle: %s", assetName);
1085
+ }
1086
+ }
1087
+ //#endregion
1088
+ //#region src/bundlers/webpack/BaseUnifiedPlugin/v5-assets/source-candidate-cache.ts
1089
+ const WEBPACK_SOURCE_CANDIDATE_SCAN_CACHE_MAX = 2;
1090
+ function trimScanCache(cache) {
1091
+ while (cache.size > WEBPACK_SOURCE_CANDIDATE_SCAN_CACHE_MAX) {
1092
+ const oldestKey = cache.keys().next().value;
1093
+ if (oldestKey === void 0) break;
1094
+ cache.delete(oldestKey);
1095
+ }
1096
+ }
1097
+ function collectWebpackSourceCandidateScanRoots(root, entries, explicit) {
1098
+ const dedupedEntries = dedupeSourceEntries(entries);
1099
+ if (dedupedEntries?.length) return [{
1100
+ entries: dedupedEntries,
1101
+ explicit,
1102
+ root
1103
+ }];
1104
+ if (explicit && dedupedEntries !== void 0) return [];
1105
+ return [{
1106
+ entries: dedupedEntries,
1107
+ root
1108
+ }];
1109
+ }
1110
+ function dedupeSourceEntries(entries) {
1111
+ if (!entries?.length) return entries;
1112
+ const seen = /* @__PURE__ */ new Set();
1113
+ const nextEntries = [];
1114
+ for (const entry of entries) {
1115
+ const key = JSON.stringify({
1116
+ base: path.resolve(entry.base),
1117
+ negated: entry.negated,
1118
+ pattern: entry.pattern
1119
+ });
1120
+ if (seen.has(key)) continue;
1121
+ seen.add(key);
1122
+ nextEntries.push(entry);
1123
+ }
1124
+ return nextEntries;
1125
+ }
1126
+ function createWebpackSourceCandidateCacheRecord(collector, sourceScan, signatureHash) {
1127
+ return {
1128
+ getSourceCandidatesForEntries: (entries, options) => collector.valuesForEntries(entries, options),
1129
+ signatureHash,
1130
+ tokenSources: collector.sourcesForEntries(sourceScan?.entries)
1131
+ };
1132
+ }
1133
+ function compactSnapshot(snapshot) {
1134
+ return {
1135
+ candidatesById: [],
1136
+ cssCandidatesById: void 0,
1137
+ inlineExcludedCandidates: snapshot.inlineExcludedCandidates,
1138
+ inlineIncludedCandidates: snapshot.inlineIncludedCandidates,
1139
+ scanCandidatesById: snapshot.scanCandidatesById,
1140
+ sourceById: void 0,
1141
+ transformCandidatesById: void 0
1142
+ };
1143
+ }
1144
+ function normalizeChangedFiles(changedFiles) {
1145
+ return new Set([...changedFiles ?? []].map((file) => resolveSourceScanPath(file)));
1146
+ }
1147
+ async function resolveScanFileSnapshot(file) {
1148
+ try {
1149
+ const stats = await stat(file);
1150
+ const source = await readFile(file, "utf8");
1151
+ return {
1152
+ meta: {
1153
+ contentHash: md5Hash(source),
1154
+ mtimeMs: stats.mtimeMs,
1155
+ size: stats.size
1156
+ },
1157
+ source
1158
+ };
1159
+ } catch (error) {
1160
+ if ((typeof error === "object" && error !== null && "code" in error ? error.code : void 0) === "ENOENT") return;
1161
+ throw error;
1162
+ }
1163
+ }
1164
+ function isSameFileMeta(left, right) {
1165
+ return left?.contentHash === right?.contentHash && left?.mtimeMs === right?.mtimeMs && left?.size === right?.size;
1166
+ }
1167
+ async function resolveScanFiles(roots, outDir) {
1168
+ const files = /* @__PURE__ */ new Set();
1169
+ await Promise.all(roots.map(async (root) => {
1170
+ const rootFiles = await resolveSourceCandidateScanFiles({
1171
+ entries: root.entries,
1172
+ explicit: root.explicit,
1173
+ filter: isSourceCandidateRequest,
1174
+ outDir,
1175
+ root: root.root
1176
+ });
1177
+ for (const file of rootFiles) files.add(resolveSourceScanPath(file));
1178
+ }));
1179
+ return files;
1180
+ }
1181
+ async function syncChangedScanFiles(collector, cachedScan, scanFiles, changedFiles) {
1182
+ for (const file of cachedScan.files.keys()) {
1183
+ if (scanFiles.has(file)) continue;
1184
+ collector.remove(file);
1185
+ cachedScan.files.delete(file);
1186
+ }
1187
+ await Promise.all([...scanFiles].map(async (file) => {
1188
+ const nextSnapshot = await resolveScanFileSnapshot(file);
1189
+ if (!nextSnapshot) {
1190
+ collector.remove(file);
1191
+ cachedScan.files.delete(file);
1192
+ return;
1193
+ }
1194
+ const previousMeta = cachedScan.files.get(file);
1195
+ if (previousMeta && isSameFileMeta(previousMeta, nextSnapshot.meta) && !changedFiles.has(file)) return;
1196
+ await collector.sync(file, nextSnapshot.source);
1197
+ cachedScan.files.set(file, nextSnapshot.meta);
1198
+ }));
1199
+ }
1200
+ function createWebpackSourceCandidateScanCache() {
1201
+ const scans = /* @__PURE__ */ new Map();
1202
+ let lastHit = false;
1203
+ let lastSignatureHash;
1204
+ async function resolve({ changedFiles, collector, outDir, root, sourceScan, watchMode }) {
1205
+ const explicit = sourceScan?.explicit ?? false;
1206
+ const roots = collectWebpackSourceCandidateScanRoots(root, sourceScan?.entries, explicit);
1207
+ const nextSignatureHash = md5Hash(createSourceCandidateScanSignature({
1208
+ inlineCandidates: sourceScan?.inlineCandidates,
1209
+ outDir,
1210
+ roots,
1211
+ scanAllSources: !explicit
1212
+ }));
1213
+ const scanFiles = await resolveScanFiles(roots, outDir);
1214
+ const cachedScan = watchMode ? scans.get(nextSignatureHash) : void 0;
1215
+ if (cachedScan) {
1216
+ collector.restore(cachedScan.snapshot);
1217
+ collector.syncInline(sourceScan?.inlineCandidates);
1218
+ await syncChangedScanFiles(collector, cachedScan, scanFiles, normalizeChangedFiles(changedFiles));
1219
+ cachedScan.snapshot = compactSnapshot(collector.snapshot());
1220
+ lastHit = true;
1221
+ lastSignatureHash = nextSignatureHash;
1222
+ return createWebpackSourceCandidateCacheRecord(collector, sourceScan, nextSignatureHash);
1223
+ }
1224
+ collector.clearScan();
1225
+ collector.syncInline(sourceScan?.inlineCandidates);
1226
+ const files = /* @__PURE__ */ new Map();
1227
+ await Promise.all([...scanFiles].map(async (file) => {
1228
+ const nextSnapshot = await resolveScanFileSnapshot(file);
1229
+ if (!nextSnapshot) return;
1230
+ await collector.sync(file, nextSnapshot.source);
1231
+ files.set(file, nextSnapshot.meta);
1232
+ }));
1233
+ if (watchMode) {
1234
+ scans.set(nextSignatureHash, {
1235
+ files,
1236
+ snapshot: compactSnapshot(collector.snapshot())
1237
+ });
1238
+ trimScanCache(scans);
1239
+ } else scans.clear();
1240
+ lastHit = false;
1241
+ lastSignatureHash = nextSignatureHash;
1242
+ return createWebpackSourceCandidateCacheRecord(collector, sourceScan, nextSignatureHash);
1243
+ }
1244
+ function getMemoryStats() {
1245
+ const cachedScans = [...scans.values()];
1246
+ return {
1247
+ entries: cachedScans.reduce((count, scan) => count + (scan.snapshot.scanCandidatesById?.length ?? scan.snapshot.candidatesById.length), 0),
1248
+ files: cachedScans.reduce((count, scan) => count + scan.files.size, 0),
1249
+ lastHit,
1250
+ signatureHash: lastSignatureHash,
1251
+ snapshots: scans.size
1252
+ };
1253
+ }
1254
+ return {
1255
+ getMemoryStats,
1256
+ resolve
1257
+ };
1258
+ }
1259
+ //#endregion
1260
+ //#region src/bundlers/webpack/BaseUnifiedPlugin/v5-assets/source-candidate-refresh.ts
1261
+ async function refreshWebpackSourceCandidates(options) {
1262
+ const root = options.compilerOptions.tailwindcssBasedir ?? process.cwd();
1263
+ let sourceScan;
1264
+ try {
1265
+ sourceScan = await resolveViteSourceScanEntries(options.compilerOptions, options.runtimeState.tailwindRuntime, {
1266
+ root,
1267
+ outDir: options.outputDir
1268
+ });
1269
+ } catch (error) {
1270
+ options.debug("webpack source candidate scan skipped: %O", error);
1271
+ return;
1272
+ }
1273
+ if (!sourceScan || !sourceScan.explicit && !sourceScan.entries?.length && !sourceScan.inlineCandidates) return;
1274
+ return options.scanCache.resolve({
1275
+ changedFiles: options.watchChangedFiles,
1276
+ collector: createSourceCandidateStore({ bareArbitraryValues: options.compilerOptions.arbitraryValues?.bareArbitraryValues }),
1277
+ outDir: options.outputDir,
1278
+ root,
1279
+ sourceScan,
1280
+ watchMode: options.watchMode
1281
+ });
1282
+ }
1283
+ //#endregion
1284
+ //#region src/bundlers/webpack/BaseUnifiedPlugin/v5-assets.ts
1285
+ function setupWebpackV5ProcessAssetsHook(options) {
1286
+ const { compiler, options: compilerOptions, appType, runtimeState, getRuntimeRefreshRequirement, refreshRuntimeMetadata, isKnownWebpackProcessedCssAsset, isWebpackProcessedCssAsset, consumeRuntimeRefreshRequirement, isWatchMode, getWatchChangedFiles, runtimeClassSetManager, getWebpackCssSources, getWebpackGeneratedCssSources, pruneWebpackCssSources, prepareWebpackCssSources, debug } = options;
1287
+ const { Compilation, sources } = compiler.webpack;
1288
+ const { ConcatSource } = sources;
1289
+ const isWebGeneratorTarget = compilerOptions.generator?.target === "web";
1290
+ const cssHandlerOptionsCache = /* @__PURE__ */ new Map();
1291
+ const cssUserHandlerOptionsCache = /* @__PURE__ */ new Map();
1292
+ const webpackSourceCandidateScanCache = createWebpackSourceCandidateScanCache();
1293
+ const bundleBuildState = createBundleBuildState();
1294
+ const bundleRuntimeClassSetManager = runtimeClassSetManager ?? createBundleRuntimeClassSetManager();
1295
+ const escapeFragments = createEscapeFragments(MappingChars2String);
1296
+ const processedCssAssetSkipDecisionCache = /* @__PURE__ */ new Map();
1297
+ let webpackWatchRuntimeScanInitialized = false;
1298
+ compiler.hooks.compilation.tap(pluginName, (compilation) => {
1299
+ compilation.hooks.processAssets.tapPromise({
1300
+ name: pluginName,
1301
+ stage: Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE
1302
+ }, async (assets) => {
1303
+ const entries = Object.entries(assets);
1304
+ if (entries.length === 0) return;
1305
+ const groupedEntries = getGroupedEntries(entries, compilerOptions);
1306
+ if (isWebGeneratorTarget && groupedEntries.css.length === 0) return;
1307
+ compilerOptions.onStart();
1308
+ debug("start");
1309
+ await runtimeState.readyPromise;
1310
+ const hmrTimingStartedAt = performance.now();
1311
+ for (const chunk of compilation.chunks) if (chunk.id && chunk.hash) compilerOptions.cache.calcHashValueChanged(chunk.id, chunk.hash);
1312
+ const assetHashByChunk = createAssetHashByChunkMap(compilation.chunks);
1313
+ const { updateAssetIfChanged } = createWebpackAssetUpdater({
1314
+ compilation,
1315
+ ConcatSource,
1316
+ onUpdate: compilerOptions.onUpdate,
1317
+ debug
1318
+ });
1319
+ const compilerOutputPath = compilation.compiler?.outputPath ?? compiler.outputPath;
1320
+ const outputDir = compilerOutputPath ? path.resolve(compilerOutputPath) : compilation.outputOptions?.path ?? process.cwd();
1321
+ const { jsAssets, moduleGraphOptions } = createWebpackJsAssetModuleGraph({
1322
+ compilation,
1323
+ compilerOptions,
1324
+ entries,
1325
+ outputDir
1326
+ });
1327
+ const watchMode = isWatchMode?.() === true;
1328
+ const cssAssetResources = createWebpackCssAssetResourceMap(compilation.chunks, compilation.chunkGraph, compilerOptions.cssMatcher, (resource, issuer) => resolveWebpackCssAssetModuleResource(resource, issuer, {
1329
+ appType,
1330
+ cssMatcher: compilerOptions.cssMatcher
1331
+ }));
1332
+ const watchChangedFiles = new Set([...getWatchChangedFiles?.() ?? []].map((file) => path.resolve(file)));
1333
+ const taskConcurrency = watchMode ? resolveTaskConcurrency(1) : void 0;
1334
+ const activeProcessCacheKeys = /* @__PURE__ */ new Set();
1335
+ const activeProcessHashKeys = /* @__PURE__ */ new Set();
1336
+ const rememberProcessCacheKey = (cacheKey, hashKey = cacheKey) => {
1337
+ activeProcessCacheKeys.add(cacheKey);
1338
+ activeProcessHashKeys.add(hashKey);
1339
+ };
1340
+ const activeWebpackAssetResourceFiles = new Set([...cssAssetResources.values()].flatMap((resources) => [...resources].map((resource) => path.resolve(resource))));
1341
+ const registeredWebpackCssSourceFiles = prepareWebpackCssSources?.(activeWebpackAssetResourceFiles) ?? /* @__PURE__ */ new Set();
1342
+ for (const chunk of compilation.chunks) if (chunk.id) activeProcessHashKeys.add(chunk.id);
1343
+ const cssSources = new Map([...getWebpackCssSources?.() ?? []].map(([file, source]) => [path.resolve(file), source]));
1344
+ const generatedCssSources = new Map([...getWebpackGeneratedCssSources?.() ?? []].map(([file, source]) => [path.resolve(file), source]));
1345
+ const { activeWebpackCssSourceFiles, configuredMainCssEntryFiles, getCssHandlerOptions, getCssUserHandlerOptions, hasConfiguredTailwindV4SourceRoots, isSameWebpackSourceScope, resolveWebpackCssSourceFile } = createWebpackCssSourceResolvers({
1346
+ activeWebpackAssetResourceFiles,
1347
+ appType,
1348
+ compilerOptions,
1349
+ compilation,
1350
+ cssAssetResources,
1351
+ cssHandlerOptionsCache,
1352
+ cssSources,
1353
+ cssUserHandlerOptionsCache,
1354
+ groupedCssEntriesLength: groupedEntries.css.length,
1355
+ singleCssAssetFile: groupedEntries.css[0]?.[0],
1356
+ isWebGeneratorTarget,
1357
+ outputDir,
1358
+ runtimeState
1359
+ });
1360
+ const finalizeCssAssetSource = (source, options = {}) => finalizeWebpackCssAssetSource(source, compilerOptions, isWebGeneratorTarget, options);
1361
+ const webpackSourceCandidates = !isWebGeneratorTarget && groupedEntries.css.length > 0 || cssSources.size > 0 || generatedCssSources.size > 0 || isCssSourceTraceEnabled(compilerOptions) ? await refreshWebpackSourceCandidates({
1362
+ compilerOptions,
1363
+ debug,
1364
+ outputDir,
1365
+ runtimeState,
1366
+ scanCache: webpackSourceCandidateScanCache,
1367
+ watchChangedFiles,
1368
+ watchMode
1369
+ }) : void 0;
1370
+ const webpackSourceCandidateValueSignature = webpackSourceCandidates ? createCandidateSignature(webpackSourceCandidates.getSourceCandidatesForEntries(void 0)) : "source-candidates:0";
1371
+ const cssSourceTraceTokenSources = createWebpackCssSourceTraceTokenSources(compilerOptions, webpackSourceCandidates);
1372
+ const cssSourceTraceSignature = createCssSourceTraceCacheSignature(cssSourceTraceTokenSources, compilerOptions);
1373
+ const annotateCss = (css) => annotateCssSourceTrace(css, {
1374
+ opts: compilerOptions,
1375
+ tokenSources: cssSourceTraceTokenSources
1376
+ });
1377
+ const finalizeTracedCss = (css, cssHandlerOptions) => finalizeTracedWebpackCssAsset(css, cssHandlerOptions, {
1378
+ annotateCss,
1379
+ compilerOptions,
1380
+ isWebGeneratorTarget
1381
+ });
1382
+ const hasRuntimeTransformAssets = Boolean(!isWebGeneratorTarget && ((groupedEntries.html?.length ?? 0) > 0 || (groupedEntries.js?.length ?? 0) > 0));
1383
+ const forceRuntimeRefresh = getRuntimeRefreshRequirement();
1384
+ debug("processAssets ensure runtime set forceRefresh=%s major=%s", forceRuntimeRefresh, runtimeState.tailwindRuntime.majorVersion ?? "unknown");
1385
+ let runtimeSet;
1386
+ let runtimeAffectingSourceHash = "runtime-affecting:0";
1387
+ if (isWebGeneratorTarget && !hasRuntimeTransformAssets && !forceRuntimeRefresh) runtimeSet = getRuntimeClassSetSync(runtimeState.tailwindRuntime);
1388
+ else if (watchMode && !forceRuntimeRefresh) {
1389
+ const baseRuntimeSet = getRuntimeClassSetSync(runtimeState.tailwindRuntime);
1390
+ const snapshot = buildWebpackBundleSnapshot(assets, compilerOptions, bundleBuildState, compilation);
1391
+ if (!webpackWatchRuntimeScanInitialized) for (const entry of snapshot.entries) snapshot.runtimeAffectingChangedByType[entry.type].add(entry.file);
1392
+ runtimeAffectingSourceHash = compilerOptions.cache.computeHash([...groupedEntries.html.map(([file, source]) => `${file}:${compilerOptions.cache.computeHash(source.source().toString())}`), ...groupedEntries.js.map(([file, source]) => `${file}:${compilerOptions.cache.computeHash(source.source().toString())}`)].sort().join("\n\n"));
1393
+ try {
1394
+ runtimeSet = await bundleRuntimeClassSetManager.sync(runtimeState.tailwindRuntime, snapshot, {
1395
+ baseClassSet: baseRuntimeSet,
1396
+ skipInitialFullScanWithBase: false
1397
+ });
1398
+ } catch (error) {
1399
+ debug("webpack incremental runtime set sync failed, fallback to full collect: %O", error);
1400
+ await bundleRuntimeClassSetManager.reset();
1401
+ runtimeSet = getRuntimeClassSetSync(runtimeState.tailwindRuntime);
1402
+ }
1403
+ releaseWebpackBundleSnapshotSources(snapshot);
1404
+ updateBundleBuildState(bundleBuildState, snapshot, /* @__PURE__ */ new Map(), { incremental: true });
1405
+ webpackWatchRuntimeScanInitialized = true;
1406
+ } else {
1407
+ if (forceRuntimeRefresh) {
1408
+ await bundleRuntimeClassSetManager.reset();
1409
+ webpackWatchRuntimeScanInitialized = false;
1410
+ }
1411
+ runtimeSet = await ensureRuntimeClassSet(runtimeState, {
1412
+ forceRefresh: forceRuntimeRefresh,
1413
+ forceCollect: !watchMode || forceRuntimeRefresh,
1414
+ clearCache: forceRuntimeRefresh,
1415
+ allowEmpty: false
1416
+ });
1417
+ }
1418
+ await refreshRuntimeMetadata(forceRuntimeRefresh);
1419
+ consumeRuntimeRefreshRequirement();
1420
+ const webpackSourceCandidateSet = webpackSourceCandidates?.getSourceCandidatesForEntries(void 0);
1421
+ const generatorRuntimeSet = new Set(runtimeSet);
1422
+ addRuntimeTransformCandidates(generatorRuntimeSet, webpackSourceCandidateSet);
1423
+ const transformRuntimeSet = new Set(runtimeSet);
1424
+ if (hasRuntimeTransformAssets) for (const [, originalSource] of groupedEntries.css) for (const candidate of collectGeneratedCssRuntimeCandidates(originalSource.source().toString())) transformRuntimeSet.add(candidate);
1425
+ const transformedJsRuntimeCandidates = /* @__PURE__ */ new Set();
1426
+ let currentJsRuntimeCandidates;
1427
+ let currentJsRuntimeTokenSignature;
1428
+ const getWebpackAssetSource = (file) => {
1429
+ return compilation.getAsset(file)?.source;
1430
+ };
1431
+ const getCurrentJsRuntimeCandidates = () => {
1432
+ if (currentJsRuntimeCandidates) return currentJsRuntimeCandidates;
1433
+ currentJsRuntimeCandidates = collectWebpackJsRuntimeCandidatesFromAssets({
1434
+ escapeFragments,
1435
+ getAssetSource: getWebpackAssetSource,
1436
+ isWebGeneratorTarget,
1437
+ jsAssets: jsAssets.values()
1438
+ });
1439
+ return currentJsRuntimeCandidates;
1440
+ };
1441
+ const getCurrentJsRuntimeTokenSignature = () => {
1442
+ if (currentJsRuntimeTokenSignature !== void 0) return currentJsRuntimeTokenSignature;
1443
+ currentJsRuntimeTokenSignature = collectWebpackJsRuntimeTokenSignature({
1444
+ getAssetSource: getWebpackAssetSource,
1445
+ isWebGeneratorTarget,
1446
+ jsAssets: jsAssets.values()
1447
+ });
1448
+ return currentJsRuntimeTokenSignature;
1449
+ };
1450
+ const rememberTransformedRuntimeCandidates = (source) => {
1451
+ currentJsRuntimeCandidates = void 0;
1452
+ currentJsRuntimeTokenSignature = void 0;
1453
+ const code = stringifyWebpackSourceLike(source);
1454
+ for (const candidate of collectStrictEscapedRuntimeCandidates(code, MappingChars2String, escapeFragments)) if (isRuntimeTransformCandidate(candidate)) transformedJsRuntimeCandidates.add(candidate);
1455
+ };
1456
+ const createRuntimeSetHash = (generatorRuntimeSet) => compilerOptions.cache.computeHash([
1457
+ getRuntimeClassSetSignature(runtimeState.tailwindRuntime),
1458
+ [...runtimeSet].sort().join("\n"),
1459
+ [...transformRuntimeSet].sort().join("\n"),
1460
+ [...generatorRuntimeSet].sort().join("\n"),
1461
+ getCurrentJsRuntimeTokenSignature()
1462
+ ].join("\n\n"));
1463
+ const getGeneratorRuntimeSet = () => {
1464
+ const currentJsCandidates = getCurrentJsRuntimeCandidates();
1465
+ if (transformedJsRuntimeCandidates.size === 0 && (!currentJsCandidates || currentJsCandidates.size === 0)) return generatorRuntimeSet;
1466
+ const nextRuntimeSet = new Set(generatorRuntimeSet);
1467
+ for (const candidate of currentJsCandidates) nextRuntimeSet.add(candidate);
1468
+ for (const candidate of transformedJsRuntimeCandidates) nextRuntimeSet.add(candidate);
1469
+ return nextRuntimeSet;
1470
+ };
1471
+ const defaultTemplateHandlerOptions = { runtimeSet: transformRuntimeSet };
1472
+ debug("get runtimeSet, class count: %d, transform class count: %d", runtimeSet.size, transformRuntimeSet.size);
1473
+ const tasks = [];
1474
+ const htmlTaskFactories = [];
1475
+ const cssTaskFactories = [];
1476
+ const enqueueTask = async (factory, target) => {
1477
+ if (watchMode) {
1478
+ await factory();
1479
+ return;
1480
+ }
1481
+ target.push(factory);
1482
+ };
1483
+ if (!isWebGeneratorTarget && Array.isArray(groupedEntries.html)) for (const element of groupedEntries.html) {
1484
+ const [file, originalSource] = element;
1485
+ let rawSource;
1486
+ const readRawSource = () => {
1487
+ rawSource ?? (rawSource = originalSource.source().toString());
1488
+ return rawSource;
1489
+ };
1490
+ const cacheKey = file;
1491
+ const hashKey = `${file}:asset`;
1492
+ rememberProcessCacheKey(cacheKey, hashKey);
1493
+ const chunkHash = assetHashByChunk.get(file);
1494
+ await enqueueTask(async () => {
1495
+ await processCachedTask({
1496
+ cache: compilerOptions.cache,
1497
+ cacheKey,
1498
+ hashKey,
1499
+ rawSource: chunkHash === void 0 ? readRawSource() : void 0,
1500
+ hash: chunkHash,
1501
+ applyResult(source, { cacheHit }) {
1502
+ updateAssetIfChanged(file, source, {
1503
+ compare: !cacheHit,
1504
+ notifyUpdate: !cacheHit
1505
+ });
1506
+ },
1507
+ onCacheHit() {
1508
+ debug("html cache hit: %s", file);
1509
+ },
1510
+ transform: async () => {
1511
+ const source = new ConcatSource(await compilerOptions.templateHandler(readRawSource(), defaultTemplateHandlerOptions));
1512
+ debug("html handle: %s", file);
1513
+ return { result: source };
1514
+ }
1515
+ });
1516
+ }, htmlTaskFactories);
1517
+ }
1518
+ const jsTaskFactories = [];
1519
+ const enqueueJsTask = async (factory) => {
1520
+ await enqueueTask(factory, jsTaskFactories);
1521
+ };
1522
+ if (!isWebGeneratorTarget && Array.isArray(groupedEntries.js)) for (const [file] of groupedEntries.js) {
1523
+ const cacheKey = getCacheKey(file);
1524
+ const asset = compilation.getAsset(file);
1525
+ if (!asset) continue;
1526
+ const hashKey = `${file}:asset`;
1527
+ rememberProcessCacheKey(cacheKey, hashKey);
1528
+ const absoluteFile = toAbsoluteOutputPath(file, outputDir);
1529
+ const initialSource = asset.source.source();
1530
+ const initialRawSource = typeof initialSource === "string" ? initialSource : initialSource.toString();
1531
+ const chunkHash = assetHashByChunk.get(file);
1532
+ await enqueueJsTask(async () => {
1533
+ await processCachedTask({
1534
+ cache: compilerOptions.cache,
1535
+ cacheKey,
1536
+ hashKey,
1537
+ rawSource: chunkHash === void 0 ? initialRawSource : void 0,
1538
+ hash: chunkHash,
1539
+ applyResult(source, { cacheHit }) {
1540
+ if (updateAssetIfChanged(file, source, {
1541
+ compare: !cacheHit,
1542
+ notifyUpdate: !cacheHit
1543
+ })) rememberTransformedRuntimeCandidates(source);
1544
+ },
1545
+ onCacheHit() {
1546
+ debug("js cache hit: %s", file);
1547
+ },
1548
+ transform: async () => {
1549
+ const currentSourceValue = compilation.getAsset(file)?.source.source();
1550
+ const currentSource = stringifyOptionalWebpackSourceValue(currentSourceValue);
1551
+ const handlerOptions = {
1552
+ tailwindcssMajorVersion: runtimeState.tailwindRuntime.majorVersion,
1553
+ generateMap: false,
1554
+ filename: absoluteFile,
1555
+ moduleGraph: moduleGraphOptions,
1556
+ babelParserOptions: { sourceFilename: absoluteFile }
1557
+ };
1558
+ if (shouldSkipJsTransform(currentSource, {
1559
+ ...handlerOptions,
1560
+ classNameSet: transformRuntimeSet
1561
+ })) return { result: new ConcatSource(currentSource) };
1562
+ const { code, linked } = await compilerOptions.jsHandler(currentSource, transformRuntimeSet, handlerOptions);
1563
+ const source = new ConcatSource(code);
1564
+ debug("js handle: %s", file);
1565
+ applyWebpackLinkedJsResults({
1566
+ ConcatSource,
1567
+ compilation,
1568
+ compilerOptions,
1569
+ debug,
1570
+ jsAssets,
1571
+ linked
1572
+ });
1573
+ return { result: source };
1574
+ }
1575
+ });
1576
+ });
1577
+ }
1578
+ for (const element of groupedEntries.css) {
1579
+ const [file, originalSource] = element;
1580
+ let rawSource;
1581
+ const readRawSource = () => {
1582
+ rawSource ?? (rawSource = originalSource.source().toString());
1583
+ return rawSource;
1584
+ };
1585
+ const chunkHash = assetHashByChunk.get(file);
1586
+ const cssHandlerOptionsForProcessedAsset = getCssHandlerOptions(file);
1587
+ const processedCssAssetMetadata = { isMainCssChunk: cssHandlerOptionsForProcessedAsset.isMainChunk };
1588
+ const processedSourceFile = cssHandlerOptionsForProcessedAsset.sourceOptions?.sourceFile;
1589
+ const processedSourceCss = processedSourceFile ? cssSources.get(path.resolve(processedSourceFile))?.css : void 0;
1590
+ const shouldRegenerateProcessedTailwindV4SourceCss = processedSourceCss !== void 0 && (hasTailwindSourceDirectives(processedSourceCss, { importFallback: true }) || processedSourceCss.includes("@config"));
1591
+ const processedCssAssetKnown = isKnownWebpackProcessedCssAsset?.(file, processedCssAssetMetadata) === true;
1592
+ const processedLoaderGeneratedCss = processedSourceFile ? generatedCssSources.get(path.resolve(processedSourceFile)) : void 0;
1593
+ const processedAssetSourceHash = watchMode && isWebGeneratorTarget && cssHandlerOptionsForProcessedAsset.isMainChunk ? compilerOptions.cache.computeHash(readRawSource()) : chunkHash === void 0 ? processedCssAssetKnown ? "webpack-css-asset:known" : compilerOptions.cache.computeHash(readRawSource()) : "webpack-css-asset:chunk";
1594
+ const processedCssDecisionCacheKey = `${file}:${createRuntimeAwareCssHash(chunkHash, processedAssetSourceHash, `${createRuntimeSetHash(getGeneratorRuntimeSet())}:${runtimeAffectingSourceHash}:${webpackSourceCandidates?.signatureHash ?? "source-candidates:0"}:${webpackSourceCandidateValueSignature}:${cssSourceTraceSignature}`)}`;
1595
+ let currentProcessedRawSource;
1596
+ let hasGeneratedCssMarker = false;
1597
+ let hasTailwindGeneratedAssetCss = false;
1598
+ const readCurrentProcessedRawSource = () => {
1599
+ currentProcessedRawSource ?? (currentProcessedRawSource = readRawSource());
1600
+ return currentProcessedRawSource;
1601
+ };
1602
+ const cachedSkipProcessedCssAsset = processedCssAssetKnown ? processedCssAssetSkipDecisionCache.get(processedCssDecisionCacheKey) : void 0;
1603
+ const shouldRegenerateStaleProcessedWebCssAsset = isWebGeneratorTarget && !processedCssAssetKnown && cachedSkipProcessedCssAsset === void 0 && cssHandlerOptionsForProcessedAsset.isMainChunk && webpackSourceCandidateSet !== void 0 && (hasMissingRuntimeCandidates(processedLoaderGeneratedCss?.classSet, webpackSourceCandidateSet) || hasMissingRuntimeCandidates(resolveGeneratedCssRuntimeCandidates(readCurrentProcessedRawSource(), processedLoaderGeneratedCss?.classSet), webpackSourceCandidateSet));
1604
+ if (cachedSkipProcessedCssAsset !== void 0) {
1605
+ hasGeneratedCssMarker = cachedSkipProcessedCssAsset && cssHandlerOptionsForProcessedAsset.isMainChunk;
1606
+ hasTailwindGeneratedAssetCss = hasGeneratedCssMarker;
1607
+ } else {
1608
+ const source = readCurrentProcessedRawSource();
1609
+ hasGeneratedCssMarker = hasBundlerGeneratedCssMarker(source);
1610
+ hasTailwindGeneratedAssetCss = hasTailwindGeneratedCss(source) || hasTailwindGeneratedCssMarkers(source);
1611
+ }
1612
+ const hasProcessedAssetTailwindDirectives = () => {
1613
+ const source = readCurrentProcessedRawSource();
1614
+ return hasTailwindRootDirectives(source, { importFallback: true }) || hasTailwindSourceDirectives(source, { importFallback: true }) || hasTailwindApplyDirective(source);
1615
+ };
1616
+ const shouldForceConfiguredMainCssGeneration = cssHandlerOptionsForProcessedAsset.isMainChunk && hasConfiguredTailwindV4SourceRoots() && !hasGeneratedCssMarker && (configuredMainCssEntryFiles.length > 0 || shouldRegenerateProcessedTailwindV4SourceCss || hasProcessedAssetTailwindDirectives());
1617
+ const hasProcessedMainAssetUserCss = cachedSkipProcessedCssAsset === void 0 && cssHandlerOptionsForProcessedAsset.isMainChunk && (hasGeneratedCssMarker || hasTailwindGeneratedAssetCss) && createWebpackUserCssSourceAppend([...cssSources.entries()].map(([sourceFile, source]) => ({
1618
+ ...source,
1619
+ file: sourceFile
1620
+ })), readCurrentProcessedRawSource()) !== void 0;
1621
+ const shouldFinalizeProcessedWebCssAsset = isWebGeneratorTarget && !shouldForceConfiguredMainCssGeneration && !shouldRegenerateProcessedTailwindV4SourceCss && hasTailwindSourceDirectives(readCurrentProcessedRawSource(), { importFallback: true });
1622
+ const shouldPreserveFinalWebCssAsset = isWebGeneratorTarget && processedSourceFile === void 0 && !shouldForceConfiguredMainCssGeneration && (hasGeneratedCssMarker || hasTailwindGeneratedAssetCss);
1623
+ const shouldSkipKnownProcessedCssAsset = !shouldForceConfiguredMainCssGeneration && !shouldRegenerateProcessedTailwindV4SourceCss && !shouldRegenerateStaleProcessedWebCssAsset && (processedCssAssetKnown || isWebpackProcessedCssAsset?.(file, readCurrentProcessedRawSource(), processedCssAssetMetadata)) && !hasProcessedMainAssetUserCss && (!cssHandlerOptionsForProcessedAsset.isMainChunk || hasGeneratedCssMarker || hasTailwindGeneratedAssetCss);
1624
+ const shouldSkipProcessedCssAsset = cachedSkipProcessedCssAsset ?? (shouldFinalizeProcessedWebCssAsset || shouldPreserveFinalWebCssAsset || shouldSkipKnownProcessedCssAsset);
1625
+ if (processedCssAssetKnown && cachedSkipProcessedCssAsset === void 0 && !shouldFinalizeProcessedWebCssAsset && !shouldPreserveFinalWebCssAsset) processedCssAssetSkipDecisionCache.set(processedCssDecisionCacheKey, shouldSkipProcessedCssAsset === true);
1626
+ if (shouldSkipProcessedCssAsset) {
1627
+ const hashKey = `${file}:asset`;
1628
+ const sourceHash = processedAssetSourceHash;
1629
+ rememberProcessCacheKey(file, hashKey);
1630
+ await enqueueTask(async () => {
1631
+ await processCachedTask({
1632
+ cache: compilerOptions.cache,
1633
+ cacheKey: file,
1634
+ hashKey,
1635
+ rawSource: chunkHash === void 0 && !processedCssAssetKnown ? readCurrentProcessedRawSource() : void 0,
1636
+ hash: createRuntimeAwareCssHash(chunkHash, sourceHash, `${createRuntimeSetHash(getGeneratorRuntimeSet())}:${runtimeAffectingSourceHash}:${webpackSourceCandidates?.signatureHash ?? "source-candidates:0"}:${webpackSourceCandidateValueSignature}:${cssSourceTraceSignature}`),
1637
+ applyResult(source, { cacheHit }) {
1638
+ updateAssetIfChanged(file, source, {
1639
+ compare: !cacheHit,
1640
+ notifyUpdate: !cacheHit
1641
+ });
1642
+ },
1643
+ onCacheHit() {
1644
+ debug("css webpack-loader-pipeline cache hit: %s", file);
1645
+ },
1646
+ transform: async () => {
1647
+ const source = readCurrentProcessedRawSource();
1648
+ const nextCss = stripTrailingLineWhitespace(finalizeCssAssetSource(hasTailwindGeneratedAssetCss && !hasGeneratedCssMarker ? isWebGeneratorTarget ? source : (await compilerOptions.styleHandler(source, cssHandlerOptionsForProcessedAsset)).css : source, { generatedCss: hasGeneratedCssMarker || hasTailwindGeneratedAssetCss }));
1649
+ debug("css skip webpack-loader-pipeline asset: %s", file);
1650
+ return { result: new ConcatSource(finalizeTracedCss(nextCss, cssHandlerOptionsForProcessedAsset)) };
1651
+ }
1652
+ });
1653
+ }, cssTaskFactories);
1654
+ continue;
1655
+ }
1656
+ const currentRawSource = readRawSource();
1657
+ if (isWebpackCssLoaderRuntimeSource(currentRawSource)) {
1658
+ const hashKey = `${file}:asset`;
1659
+ rememberProcessCacheKey(file, hashKey);
1660
+ await enqueueTask(async () => {
1661
+ await processCachedTask({
1662
+ cache: compilerOptions.cache,
1663
+ cacheKey: file,
1664
+ hashKey,
1665
+ rawSource: currentRawSource,
1666
+ hash: createRuntimeAwareCssHash(chunkHash, compilerOptions.cache.computeHash(currentRawSource), "webpack-css-loader-runtime"),
1667
+ applyResult(source, { cacheHit }) {
1668
+ updateAssetIfChanged(file, source, {
1669
+ compare: !cacheHit,
1670
+ notifyUpdate: !cacheHit
1671
+ });
1672
+ },
1673
+ onCacheHit() {
1674
+ debug("css-loader runtime cache hit: %s", file);
1675
+ },
1676
+ transform: async () => ({ result: new ConcatSource(currentRawSource) })
1677
+ });
1678
+ }, cssTaskFactories);
1679
+ continue;
1680
+ }
1681
+ const cacheKey = file;
1682
+ const hashKey = `${file}:asset`;
1683
+ rememberProcessCacheKey(cacheKey, hashKey);
1684
+ const cssHandlerOptionsForHash = getCssHandlerOptions(file, currentRawSource);
1685
+ const cssChunkHash = watchMode && cssHandlerOptionsForHash.isMainChunk ? void 0 : chunkHash;
1686
+ const cssSourceHash = (() => {
1687
+ const sourceFile = resolveWebpackCssSourceFile(file, currentRawSource);
1688
+ const sourceCss = sourceFile ? cssSources.get(sourceFile)?.css : void 0;
1689
+ const generatorSourceCss = removeWebpackGeneratorNonTailwindImports(sourceCss);
1690
+ if (sourceCss === void 0) return sourceFile === void 0 ? "webpack-css-source:0" : `webpack-css-source:0:${sourceFile}`;
1691
+ return `webpack-css-source:1:${compilerOptions.cache.computeHash(sourceCss)}:${generatorSourceCss === sourceCss || generatorSourceCss === void 0 ? "generator-source:0" : compilerOptions.cache.computeHash(generatorSourceCss)}`;
1692
+ })();
1693
+ const runtimeAwareHash = createRuntimeAwareCssHash(cssChunkHash, compilerOptions.cache.computeHash(currentRawSource), `${createRuntimeSetHash(getGeneratorRuntimeSet())}:${runtimeAffectingSourceHash}:${webpackSourceCandidates?.signatureHash ?? "source-candidates:0"}:${webpackSourceCandidateValueSignature}:${cssSourceTraceSignature}:${cssSourceHash}`);
1694
+ await enqueueTask(async () => {
1695
+ await processCachedTask({
1696
+ cache: compilerOptions.cache,
1697
+ cacheKey,
1698
+ hashKey,
1699
+ rawSource: currentRawSource,
1700
+ hash: runtimeAwareHash,
1701
+ applyResult(source, { cacheHit }) {
1702
+ updateAssetIfChanged(file, source, {
1703
+ compare: !cacheHit,
1704
+ notifyUpdate: !cacheHit
1705
+ });
1706
+ },
1707
+ onCacheHit() {
1708
+ debug("css cache hit: %s", file);
1709
+ },
1710
+ transform: async () => {
1711
+ await runtimeState.readyPromise;
1712
+ const cssHandlerOptions = getCssHandlerOptions(file, currentRawSource);
1713
+ const generatorRawSource = resolveWebpackGeneratorRawSource(currentRawSource, cssHandlerOptions);
1714
+ if (isWebpackCssLoaderRuntimeSource(generatorRawSource)) return { result: new ConcatSource(currentRawSource) };
1715
+ const sourceFile = cssHandlerOptions.sourceOptions?.sourceFile;
1716
+ const loaderGeneratedCss = sourceFile && !isWebGeneratorTarget ? generatedCssSources.get(path.resolve(sourceFile)) : void 0;
1717
+ const sourceCss = sourceFile ? cssSources.get(path.resolve(sourceFile))?.css : void 0;
1718
+ const shouldRegenerateExplicitTailwindV4CssSource = sourceCss !== void 0 && (hasTailwindSourceDirectives(sourceCss, { importFallback: true }) || sourceCss.includes("@config"));
1719
+ if (loaderGeneratedCss && (!shouldRegenerateExplicitTailwindV4CssSource || hasBundlerGeneratedCssMarker(currentRawSource))) {
1720
+ for (const className of loaderGeneratedCss.classSet) {
1721
+ generatorRuntimeSet.add(className);
1722
+ transformRuntimeSet.add(className);
1723
+ }
1724
+ for (const dependency of loaderGeneratedCss.dependencies) compilation.fileDependencies?.add?.(dependency);
1725
+ const currentRawSourceWithoutBundlerMarkers = stripBundlerGeneratedCssMarkers(currentRawSource);
1726
+ const currentAssetHasProcessedUrl = hasProcessedCssAssetUrl(currentRawSourceWithoutBundlerMarkers) && currentRawSourceWithoutBundlerMarkers !== loaderGeneratedCss.css;
1727
+ const currentAssetUserCss = currentAssetHasProcessedUrl ? currentRawSourceWithoutBundlerMarkers : shouldUseWebpackAssetAsGeneratorUserCss(currentRawSourceWithoutBundlerMarkers, loaderGeneratedCss.css, { processed: true }) ? removeGeneratedSelectorCompatCss(currentRawSourceWithoutBundlerMarkers, loaderGeneratedCss.css) : void 0;
1728
+ const css = finalizeTracedCss(finalizeCssAssetSource(currentAssetUserCss === void 0 ? loaderGeneratedCss.css : createWebpackGeneratorUserCssSourceAppend({
1729
+ css: currentAssetHasProcessedUrl ? removeGeneratedSelectorCompatCss(loaderGeneratedCss.css, currentAssetUserCss) : filterExistingCssRules(currentAssetUserCss, loaderGeneratedCss.css),
1730
+ processed: true
1731
+ }, {
1732
+ css: currentAssetUserCss,
1733
+ processed: true
1734
+ }).css, { generatedCss: true }), cssHandlerOptions);
1735
+ debug("css consume webpack loader generation: %s <- %s", file, sourceFile);
1736
+ return { result: new ConcatSource(css) };
1737
+ }
1738
+ const sourceCssProcessed = sourceFile ? cssSources.get(path.resolve(sourceFile))?.processed === true : false;
1739
+ const registeredUserRawSource = createWebpackUserCssSourceAppend([...cssSources.entries()].map(([registeredSourceFile, source]) => ({
1740
+ ...source,
1741
+ file: registeredSourceFile
1742
+ })), generatorRawSource, sourceFile, (registeredSourceFile) => isSameWebpackSourceScope(file, registeredSourceFile, sourceFile));
1743
+ const currentAssetLooksGenerated = hasTailwindGeneratedCss(currentRawSource) || hasTailwindGeneratedCssMarkers(currentRawSource);
1744
+ const currentAssetHasBundlerGeneratedMarker = hasBundlerGeneratedCssMarker(currentRawSource);
1745
+ const currentAssetUserCssSource = currentAssetLooksGenerated ? removeWebpackTailwindGeneratedAssetCss(currentRawSource) : currentRawSource;
1746
+ const currentAssetHasAdditionalUserCss = currentAssetLooksGenerated && (hasAdditionalWebpackAssetUserCssMarkers(currentAssetUserCssSource, generatorRawSource) || currentAssetUserCssSource.trim().length > 0);
1747
+ const shouldPreserveGeneratedWebAssetUserCss = isWebGeneratorTarget && currentAssetLooksGenerated && !currentAssetHasBundlerGeneratedMarker && !currentAssetHasAdditionalUserCss;
1748
+ const hasExplicitSourceCssForCurrentAsset = sourceCss !== void 0 && (hasTailwindRootDirectives(sourceCss, { importFallback: true }) || hasTailwindSourceDirectives(sourceCss, { importFallback: true }) || hasTailwindApplyDirective(sourceCss));
1749
+ const currentAssetHasUserCss = (sourceCssProcessed || hasExplicitSourceCssForCurrentAsset) && currentAssetLooksGenerated && !shouldPreserveGeneratedWebAssetUserCss ? currentAssetHasAdditionalUserCss : shouldUseWebpackAssetAsGeneratorUserCss(currentAssetUserCssSource, generatorRawSource, { processed: sourceCssProcessed || shouldPreserveGeneratedWebAssetUserCss });
1750
+ const userRawSource = createWebpackGeneratorUserCssSourceAppend(createWebpackCurrentAssetUserRawSource({
1751
+ currentAssetHasUserCss,
1752
+ currentAssetLooksGenerated,
1753
+ currentAssetUserCssSource,
1754
+ shouldAppendCurrentAssetUserCss: shouldAppendCurrentWebpackAssetUserCss({
1755
+ currentAssetHasBundlerGeneratedMarker,
1756
+ currentAssetHasUserCss,
1757
+ currentAssetLooksGenerated,
1758
+ registeredUserRawSource,
1759
+ shouldPreserveGeneratedWebAssetUserCss,
1760
+ sourceCssProcessed
1761
+ }),
1762
+ sourceCssProcessed
1763
+ }), registeredUserRawSource);
1764
+ if (isPureLocalCssImportWrapper(currentRawSource)) return { result: new ConcatSource(removeTailwindSourceDirectives(stripBundlerGeneratedCssMarkers(currentRawSource), { importFallback: true })) };
1765
+ const fallbackGeneratorRuntimeSet = getGeneratorRuntimeSet();
1766
+ const hasExplicitTailwindV4SourceCss = sourceCss !== void 0 && (hasTailwindSourceDirectives(sourceCss, { importFallback: true }) || sourceCss.includes("@config"));
1767
+ const shouldForceTailwindV4Generation = cssHandlerOptions.isMainChunk && hasConfiguredTailwindV4SourceRoots() && (configuredMainCssEntryFiles.length > 0 || hasTailwindRootDirectives(generatorRawSource, { importFallback: true }) || hasTailwindSourceDirectives(generatorRawSource, { importFallback: true }) || hasTailwindApplyDirective(generatorRawSource) || hasExplicitTailwindV4SourceCss);
1768
+ const resolvedScopedGeneratorRuntimeSet = await createScopedGeneratorRuntime({
1769
+ cssHandlerOptions,
1770
+ fallbackRuntime: hasExplicitTailwindV4SourceCss ? /* @__PURE__ */ new Set() : fallbackGeneratorRuntimeSet,
1771
+ getSourceCandidatesForEntries: webpackSourceCandidates?.getSourceCandidatesForEntries,
1772
+ majorVersion: runtimeState.tailwindRuntime.majorVersion,
1773
+ outputFile: file,
1774
+ rawSource: sourceFile ? cssSources.get(path.resolve(sourceFile))?.css ?? generatorRawSource : generatorRawSource,
1775
+ shouldExcludeSubpackageSourceCandidates: () => false,
1776
+ sourceFile: sourceFile ?? file,
1777
+ scopedSourceCandidateGetter: webpackSourceCandidates?.getSourceCandidatesForEntries
1778
+ });
1779
+ const scopedGeneratorRuntimeSet = !hasExplicitTailwindV4SourceCss && resolvedScopedGeneratorRuntimeSet !== fallbackGeneratorRuntimeSet ? new Set([...fallbackGeneratorRuntimeSet, ...resolvedScopedGeneratorRuntimeSet]) : resolvedScopedGeneratorRuntimeSet;
1780
+ const generatorCssSources = normalizeWebpackGeneratorCssSources(cssHandlerOptions.sourceOptions?.cssSources);
1781
+ const generatorCssHandlerOptions = generatorCssSources === void 0 ? cssHandlerOptions : {
1782
+ ...cssHandlerOptions,
1783
+ sourceOptions: {
1784
+ ...cssHandlerOptions.sourceOptions,
1785
+ cssSources: generatorCssSources
1786
+ }
1787
+ };
1788
+ const generatorOptions = {
1789
+ opts: compilerOptions,
1790
+ runtimeState,
1791
+ runtime: scopedGeneratorRuntimeSet,
1792
+ rawSource: generatorRawSource,
1793
+ forceGenerator: shouldForceTailwindV4Generation,
1794
+ ...hasUsableWebpackGeneratorCssSources(generatorCssSources) ? { cssSources: generatorCssSources } : {},
1795
+ ...userRawSource === void 0 ? {} : { userRawSource: userRawSource.css },
1796
+ ...userRawSource?.processed === true ? { userRawSourceProcessed: true } : {},
1797
+ file,
1798
+ cssHandlerOptions: generatorCssHandlerOptions,
1799
+ cssUserHandlerOptions: getCssUserHandlerOptions(file),
1800
+ getSourceCandidatesForEntries: webpackSourceCandidates?.getSourceCandidatesForEntries,
1801
+ sourceCandidates: scopedGeneratorRuntimeSet,
1802
+ restoreLocalCssImports: false,
1803
+ styleHandler: compilerOptions.styleHandler,
1804
+ debug
1805
+ };
1806
+ let generated;
1807
+ try {
1808
+ generated = await generateTailwindV4Css({
1809
+ ...generatorOptions,
1810
+ outputFile: file
1811
+ });
1812
+ } catch (error) {
1813
+ if (!shouldFallbackToWebpackUserCssOnGeneratorError({
1814
+ configuredMainCssEntryFilesLength: configuredMainCssEntryFiles.length,
1815
+ generatorRawSource,
1816
+ hasExplicitTailwindV4SourceCss
1817
+ })) throw error;
1818
+ debug("css generator skipped for plain webpack css asset: %s %O", file, error);
1819
+ generated = void 0;
1820
+ }
1821
+ const source = new ConcatSource(finalizeTracedCss(generated ? finalizeCssAssetSource(isWebGeneratorTarget && currentRawSource.includes("tailwindcss v4.") ? createWebpackGeneratorUserCssSourceAppend({
1822
+ css: generated.css,
1823
+ processed: true
1824
+ }, {
1825
+ css: removeWebpackTailwindGeneratedAssetCss(currentRawSource),
1826
+ processed: true
1827
+ })?.css ?? generated.css : generated.css, { generatedCss: true }) : isWebGeneratorTarget ? finalizeCssAssetSource(generatorRawSource, { generatedCss: false }) : finalizeCssAssetSource((await compilerOptions.styleHandler(generatorRawSource, cssHandlerOptions)).css, { generatedCss: false }), cssHandlerOptions));
1828
+ if (generated) {
1829
+ for (const className of generated.classSet) generatorRuntimeSet.add(className);
1830
+ debug("css handle via tailwind v%s engine(%s): %s", runtimeState.tailwindRuntime.majorVersion, generated.target, file);
1831
+ } else debug("css handle: %s", file);
1832
+ return { result: source };
1833
+ }
1834
+ });
1835
+ }, cssTaskFactories);
1836
+ }
1837
+ if (!watchMode) {
1838
+ pushConcurrentTaskFactories(tasks, htmlTaskFactories, taskConcurrency);
1839
+ await Promise.all(tasks);
1840
+ tasks.length = 0;
1841
+ pushConcurrentTaskFactories(tasks, jsTaskFactories, taskConcurrency);
1842
+ await Promise.all(tasks);
1843
+ tasks.length = 0;
1844
+ pushConcurrentTaskFactories(tasks, cssTaskFactories, taskConcurrency);
1845
+ }
1846
+ await Promise.all(tasks);
1847
+ compilerOptions.cache.prune?.({
1848
+ cacheKeys: activeProcessCacheKeys,
1849
+ hashKeys: activeProcessHashKeys
1850
+ });
1851
+ const activeCssFiles = new Set(groupedEntries.css.map(([file]) => file));
1852
+ pruneWebpackCssHandlerOptionCaches(cssHandlerOptionsCache, cssUserHandlerOptionsCache, activeCssFiles);
1853
+ if (activeCssFiles.size > 0) pruneWebpackCssSources?.(new Set([
1854
+ ...registeredWebpackCssSourceFiles,
1855
+ ...activeWebpackCssSourceFiles,
1856
+ ...[...cssAssetResources.values()].flatMap((resources) => [...resources])
1857
+ ]), { watchMode });
1858
+ debug("end");
1859
+ emitHmrTiming("webpack", "processAssets", performance.now() - hmrTimingStartedAt, { memoryDebug: resolveWebpackMemoryDebugStats({
1860
+ activeAssetFiles: entries.length,
1861
+ activeCssFiles: activeCssFiles.size,
1862
+ activeProcessCacheKeys,
1863
+ activeProcessHashKeys,
1864
+ cache: compilerOptions.cache,
1865
+ cssHandlerOptionsCache,
1866
+ cssUserHandlerOptionsCache,
1867
+ phase: "processAssets",
1868
+ sourceCandidateScan: webpackSourceCandidateScanCache.getMemoryStats()
1869
+ }) });
1870
+ compilerOptions.onEnd();
1871
+ });
1872
+ });
1873
+ }
1874
+ //#endregion
1875
+ //#region ../../node_modules/.pnpm/tsdown@0.22.2_oxc-resolver@11.20.0_tsx@4.22.4_typescript@6.0.3_unrun@0.2.37_synckit@0.1_c2142480ddc0e0584f1991298dd762a0/node_modules/tsdown/esm-shims.js
1876
+ const getFilename = () => fileURLToPath(import.meta.url);
1877
+ const getDirname = () => path.dirname(getFilename());
1878
+ const __dirname = /* @__PURE__ */ getDirname();
1879
+ //#endregion
1880
+ //#region src/bundlers/webpack/loaders/runtime-registry.ts
1881
+ const runtimeRegistryHolder = globalThis;
1882
+ const runtimeRegistry = runtimeRegistryHolder.__WEAPP_TW_WEBPACK_LOADER_RUNTIME_REGISTRY__ ?? (runtimeRegistryHolder.__WEAPP_TW_WEBPACK_LOADER_RUNTIME_REGISTRY__ = /* @__PURE__ */ new Map());
1883
+ function setWebpackLoaderRuntime(key, entry) {
1884
+ runtimeRegistry.set(key, entry);
1885
+ }
1886
+ function deleteWebpackLoaderRuntime(key) {
1887
+ runtimeRegistry.delete(key);
1888
+ }
1889
+ //#endregion
1890
+ //#region src/bundlers/webpack/shared/loader-anchors.ts
1891
+ const MPX_STRIP_CONDITIONAL_LOADER = "@mpxjs/webpack-plugin/lib/style-compiler/strip-conditional-loader";
1892
+ const MPX_STYLE_COMPILER_LOADER = "@mpxjs/webpack-plugin/lib/style-compiler/index";
1893
+ const MPX_REWRITE_PRECEDENCE_LOADERS = [MPX_STYLE_COMPILER_LOADER, MPX_STRIP_CONDITIONAL_LOADER];
1894
+ function createFinder(targets) {
1895
+ return (entries) => entries.findIndex((entry) => targets.some((target) => entry?.loader?.includes?.(target)));
1896
+ }
1897
+ function createPrioritizedFinder(targets) {
1898
+ return (entries) => {
1899
+ for (const target of targets) {
1900
+ const idx = entries.findIndex((entry) => entry?.loader?.includes?.(target));
1901
+ if (idx !== -1) return idx;
1902
+ }
1903
+ return -1;
1904
+ };
1905
+ }
1906
+ function createLoaderAnchorFinders(appType) {
1907
+ if (isMpx(appType)) return {
1908
+ findRewriteAnchor: createPrioritizedFinder(MPX_REWRITE_PRECEDENCE_LOADERS),
1909
+ findClassSetAnchor: createFinder([MPX_STYLE_COMPILER_LOADER])
1910
+ };
1911
+ const fallbackFinder = createFinder(["postcss-loader"]);
1912
+ return {
1913
+ findRewriteAnchor: fallbackFinder,
1914
+ findClassSetAnchor: fallbackFinder
1915
+ };
1916
+ }
1917
+ //#endregion
1918
+ //#region src/bundlers/webpack/BaseUnifiedPlugin/v5-loaders.ts
1919
+ function setupWebpackV5Loaders(options) {
1920
+ const { compiler, options: compilerOptions, appType, weappTailwindcssPackageDir, shouldRewriteCssImports, runtimeLoaderPath, registerAutoCssSource, runtimeState, getClassSetInLoader, getRuntimeSetInLoader, markWebpackProcessedCssSource, markWebpackCssSourceModule, registerWebpackGeneratedCss, registerWebpackCssSourceFile, getRuntimeWatchDependencies, runtimeRegistryKey = `weapp-tailwindcss-${Date.now()}-${Math.random().toString(36).slice(2)}`, debug } = options;
1921
+ const isMpxApp = isMpx(appType);
1922
+ const generatorTarget = compilerOptions.generator?.target ?? inferGeneratorTargetFromEnv();
1923
+ const generatorBranch = resolveRuntimeBranch({
1924
+ appType: compilerOptions.appType,
1925
+ generatorTarget,
1926
+ platform: compilerOptions.cssOptions?.platform ?? compilerOptions.platform,
1927
+ tailwindcssMajorVersion: runtimeState.tailwindRuntime.majorVersion,
1928
+ uniAppX: compilerOptions.uniAppX
1929
+ });
1930
+ if (shouldRewriteCssImports && isMpxApp) ensureMpxTailwindcssAliases(compiler, weappTailwindcssPackageDir);
1931
+ const runtimeClassSetLoader = runtimeLoaderPath ?? path.resolve(__dirname, "./weapp-tw-runtime-classset-loader.js");
1932
+ const shouldInjectRuntimeClassSetLoader = !generatorBranch.isWeb;
1933
+ const shouldInjectCssImportRewriteLoader = shouldRewriteCssImports || !generatorBranch.isWeb || runtimeState.tailwindRuntime.majorVersion === 4;
1934
+ const runtimeCssImportRewriteLoader = shouldInjectCssImportRewriteLoader ? path.resolve(__dirname, "./weapp-tw-css-import-rewrite-loader.js") : void 0;
1935
+ const runtimeClassSetLoaderExists = fs.existsSync(runtimeClassSetLoader);
1936
+ const runtimeCssImportRewriteLoaderExists = runtimeCssImportRewriteLoader ? fs.existsSync(runtimeCssImportRewriteLoader) : false;
1937
+ const runtimeLoaderRewriteOptions = shouldInjectCssImportRewriteLoader ? {
1938
+ pkgDir: weappTailwindcssPackageDir,
1939
+ compilerOptions,
1940
+ runtimeState,
1941
+ ...appType === void 0 ? {} : { appType },
1942
+ ...registerAutoCssSource === void 0 ? {} : { registerCssSource: registerAutoCssSource },
1943
+ ...registerWebpackCssSourceFile === void 0 ? {} : { registerCssSourceFile: registerWebpackCssSourceFile },
1944
+ getRuntimeSet: getRuntimeSetInLoader,
1945
+ ...markWebpackProcessedCssSource === void 0 ? {} : { markGeneratedCssSource: markWebpackProcessedCssSource },
1946
+ ...registerWebpackGeneratedCss === void 0 ? {} : { registerGeneratedCss: registerWebpackGeneratedCss }
1947
+ } : void 0;
1948
+ setWebpackLoaderRuntime(runtimeRegistryKey, {
1949
+ classSet: {
1950
+ getClassSet: getClassSetInLoader,
1951
+ getWatchDependencies: getRuntimeWatchDependencies,
1952
+ ...registerWebpackCssSourceFile === void 0 ? {} : { registerCssSourceFile: registerWebpackCssSourceFile }
1953
+ },
1954
+ ...runtimeLoaderRewriteOptions === void 0 ? {} : { cssImportRewrite: runtimeLoaderRewriteOptions }
1955
+ });
1956
+ const cleanupWebpackLoaderRuntime = () => {
1957
+ deleteWebpackLoaderRuntime(runtimeRegistryKey);
1958
+ };
1959
+ compiler.hooks.watchClose?.tap?.(pluginName, cleanupWebpackLoaderRuntime);
1960
+ compiler.hooks.shutdown?.tap?.(pluginName, cleanupWebpackLoaderRuntime);
1961
+ const { findRewriteAnchor, findClassSetAnchor } = createLoaderAnchorFinders(appType);
1962
+ const cssImportRewriteLoaderOptions = runtimeLoaderRewriteOptions ? { tailwindcssImportRewriteRuntimeKey: runtimeRegistryKey } : void 0;
1963
+ if (runtimeCssImportRewriteLoader && shouldRewriteCssImports && cssImportRewriteLoaderOptions && isMpxApp) injectMpxCssRewritePreRules(compiler, runtimeCssImportRewriteLoader, cssImportRewriteLoaderOptions);
1964
+ const createRuntimeClassSetLoaderEntry = () => ({
1965
+ loader: runtimeClassSetLoader,
1966
+ options: { weappTailwindcssRuntimeKey: runtimeRegistryKey },
1967
+ ident: null,
1968
+ type: null
1969
+ });
1970
+ const createCssImportRewriteLoaderEntry = () => {
1971
+ if (!runtimeCssImportRewriteLoader || !cssImportRewriteLoaderOptions) return null;
1972
+ return {
1973
+ loader: runtimeCssImportRewriteLoader,
1974
+ options: cssImportRewriteLoaderOptions,
1975
+ ident: null,
1976
+ type: null
1977
+ };
1978
+ };
1979
+ const { NormalModule } = compiler.webpack;
1980
+ compiler.hooks.compilation.tap(pluginName, (compilation) => {
1981
+ NormalModule.getCompilationHooks(compilation).loader.tap(pluginName, (_loaderContext, module) => {
1982
+ if (!(runtimeClassSetLoaderExists || runtimeCssImportRewriteLoaderExists)) return;
1983
+ patchMpxLoaderResolve(_loaderContext, weappTailwindcssPackageDir, shouldRewriteCssImports && isMpxApp);
1984
+ const loaderEntries = module.loaders || [];
1985
+ let rewriteAnchorIdx = findRewriteAnchor(loaderEntries);
1986
+ const classSetAnchorIdx = findClassSetAnchor(loaderEntries);
1987
+ const isCssModule = isCssLikeModuleResource(module.resource, compilerOptions.cssMatcher, appType);
1988
+ if (isCssModule && typeof module.resource === "string") markWebpackCssSourceModule?.(module.resource);
1989
+ if (process.env["WEAPP_TW_LOADER_DEBUG"] && isCssModule) debug("loader hook css module: %s loaders=%o anchors=%o", module.resource, loaderEntries.map((x) => x.loader), {
1990
+ rewriteAnchorIdx,
1991
+ classSetAnchorIdx
1992
+ });
1993
+ if (process.env["WEAPP_TW_LOADER_DEBUG"] && typeof module.resource === "string" && module.resource.endsWith(".css")) debug("css module seen: %s loaders=%o anchors=%o", module.resource, loaderEntries.map((x) => x.loader), {
1994
+ rewriteAnchorIdx,
1995
+ classSetAnchorIdx
1996
+ });
1997
+ if (rewriteAnchorIdx === -1 && classSetAnchorIdx === -1 && !isCssModule) return;
1998
+ const anchorlessInsert = (entry, position) => {
1999
+ if (position === "after") loaderEntries.push(entry);
2000
+ else loaderEntries.unshift(entry);
2001
+ };
2002
+ if (cssImportRewriteLoaderOptions && runtimeCssImportRewriteLoaderExists && runtimeCssImportRewriteLoader && isCssModule) {
2003
+ const existingIndex = loaderEntries.findIndex((entry) => entry.loader?.includes?.(runtimeCssImportRewriteLoader));
2004
+ const rewriteLoaderEntry = existingIndex !== -1 ? loaderEntries.splice(existingIndex, 1)[0] : createCssImportRewriteLoaderEntry();
2005
+ if (rewriteLoaderEntry) {
2006
+ const anchorIndex = findRewriteAnchor(loaderEntries);
2007
+ if (anchorIndex === -1) anchorlessInsert(rewriteLoaderEntry, "after");
2008
+ else loaderEntries.splice(anchorIndex + 1, 0, rewriteLoaderEntry);
2009
+ rewriteAnchorIdx = findRewriteAnchor(loaderEntries);
2010
+ }
2011
+ }
2012
+ if (shouldInjectRuntimeClassSetLoader && runtimeClassSetLoaderExists && !hasLoaderEntry(loaderEntries, runtimeClassSetLoader)) {
2013
+ const classSetLoaderEntry = createRuntimeClassSetLoaderEntry();
2014
+ const anchorIndex = findClassSetAnchor(loaderEntries);
2015
+ if (anchorIndex === -1) anchorlessInsert(classSetLoaderEntry, "before");
2016
+ else {
2017
+ const insertIndex = anchorIndex === -1 ? rewriteAnchorIdx : anchorIndex;
2018
+ loaderEntries.splice(insertIndex, 0, classSetLoaderEntry);
2019
+ }
2020
+ }
2021
+ });
2022
+ });
2023
+ }
2024
+ //#endregion
2025
+ //#region src/bundlers/webpack/BaseUnifiedPlugin/v5.ts
2026
+ const debug = createDebug();
2027
+ const weappTailwindcssPackageDir = resolvePackageDir("weapp-tailwindcss");
2028
+ const outputIgnoredPredicatePath = Symbol("weapp-tailwindcss.outputIgnoredPredicatePath");
2029
+ function normalizeIgnoredList(ignored) {
2030
+ return (Array.isArray(ignored) ? [...ignored] : [ignored]).filter((item) => typeof item === "string" || item instanceof RegExp || typeof item === "function");
2031
+ }
2032
+ function createOutputIgnoredPredicate(ignoredList, ignoredPath) {
2033
+ const predicate = (file) => {
2034
+ const resolvedFile = path.resolve(file);
2035
+ if (resolvedFile === ignoredPath || resolvedFile.startsWith(`${ignoredPath}${path.sep}`)) return true;
2036
+ const normalizedFile = file.replace(/\\/g, "/");
2037
+ return ignoredList.some((item) => {
2038
+ if (typeof item === "string") {
2039
+ const resolvedItem = path.resolve(item);
2040
+ if (resolvedFile === resolvedItem || resolvedFile.startsWith(`${resolvedItem}${path.sep}`)) return true;
2041
+ return micromatch.isMatch(normalizedFile, item);
2042
+ }
2043
+ if (item instanceof RegExp) return item.test(normalizedFile);
2044
+ return item(file);
2045
+ });
2046
+ };
2047
+ predicate[outputIgnoredPredicatePath] = ignoredPath;
2048
+ return predicate;
2049
+ }
2050
+ function appendIgnoredPath(ignored, ignoredPath) {
2051
+ if (typeof ignored === "function" && ignored[outputIgnoredPredicatePath] === ignoredPath) return ignored;
2052
+ const ignoredList = normalizeIgnoredList(ignored);
2053
+ if (ignoredList.some((item) => typeof item !== "string")) return createOutputIgnoredPredicate(ignoredList, ignoredPath);
2054
+ if (ignoredList.some((item) => typeof item === "string" && path.resolve(item) === ignoredPath)) return ignored;
2055
+ return [...ignoredList, ignoredPath];
2056
+ }
2057
+ function setupWebpackWatchOutputIgnore(compiler) {
2058
+ const appendOutputIgnoredPath = (watchOptions, outputPath) => {
2059
+ const resolvedOutputPath = outputPath || compiler.outputPath || compiler.options?.output?.path;
2060
+ const outputDir = resolvedOutputPath ? path.resolve(resolvedOutputPath) : void 0;
2061
+ if (!outputDir) return watchOptions;
2062
+ if (watchOptions && typeof watchOptions === "object") {
2063
+ const nextIgnored = appendIgnoredPath(watchOptions.ignored, outputDir);
2064
+ if (nextIgnored === void 0) delete watchOptions.ignored;
2065
+ else watchOptions.ignored = nextIgnored;
2066
+ return watchOptions;
2067
+ }
2068
+ return { ignored: appendIgnoredPath(void 0, outputDir) };
2069
+ };
2070
+ const compilerWatchOptions = appendOutputIgnoredPath(compiler.options.watchOptions);
2071
+ if (compilerWatchOptions) compiler.options.watchOptions = compilerWatchOptions;
2072
+ const syncOutputIgnoredPath = () => {
2073
+ const outputPath = compiler.outputPath || compiler.options?.output?.path;
2074
+ const watchOptions = compiler.watching?.watchOptions;
2075
+ if (watchOptions) appendOutputIgnoredPath(watchOptions, outputPath);
2076
+ };
2077
+ compiler.hooks.watchRun?.tap(pluginName, syncOutputIgnoredPath);
2078
+ compiler.hooks.thisCompilation?.tap(pluginName, (compilation) => {
2079
+ const outputPath = compilation.compiler?.outputPath || compilation.outputOptions?.path;
2080
+ const watchOptions = compiler.watching?.watchOptions;
2081
+ if (watchOptions) appendOutputIgnoredPath(watchOptions, outputPath);
2082
+ else {
2083
+ const compilerWatchOptions = appendOutputIgnoredPath(compiler.options.watchOptions, outputPath);
2084
+ if (compilerWatchOptions) compiler.options.watchOptions = compilerWatchOptions;
2085
+ }
2086
+ });
2087
+ }
2088
+ /**
2089
+ * @name WeappTailwindcss
2090
+ * @description webpack5 核心转义插件
2091
+ * @link https://tw.icebreaker.top/docs/intro
2092
+ */
2093
+ var WeappTailwindcss = class {
2094
+ constructor(options = {}) {
2095
+ _defineProperty(this, "options", void 0);
2096
+ _defineProperty(this, "appType", void 0);
2097
+ _defineProperty(this, "hasInitialTailwindCssRoots", void 0);
2098
+ this.hasInitialTailwindCssRoots = hasConfiguredTailwindV4CssRoots(options);
2099
+ this.options = getCompilerContext({
2100
+ ...options,
2101
+ __internalDeferMissingCssEntriesWarning: true
2102
+ });
2103
+ this.appType = this.options.appType;
2104
+ }
2105
+ apply(compiler) {
2106
+ compiler.options = compiler.options || {};
2107
+ const { disabled, onLoad, runtimeLoaderPath, tailwindRuntime, refreshTailwindcssRuntime } = this.options;
2108
+ const initialTailwindRuntime = tailwindRuntime;
2109
+ const refreshTailwindRuntime = refreshTailwindcssRuntime;
2110
+ const disabledOptions = resolvePluginDisabledState(disabled);
2111
+ const shouldRewriteCssImports = this.options.rewriteCssImports === true;
2112
+ const isMpxApp = isMpx(this.appType);
2113
+ if (shouldRewriteCssImports) setupMpxTailwindcssRedirect(weappTailwindcssPackageDir, isMpxApp);
2114
+ if (disabledOptions.plugin) return;
2115
+ if (initialTailwindRuntime.majorVersion !== 4) throw new Error("weapp-tailwindcss/webpack 新生成管线仅支持 Tailwind CSS v4,请升级 tailwindcss 或停留在旧版 weapp-tailwindcss。");
2116
+ setupWebpackWatchOutputIgnore(compiler);
2117
+ const runtimeState = {
2118
+ tailwindRuntime: initialTailwindRuntime,
2119
+ readyPromise: createTailwindRuntimeReadyPromise(initialTailwindRuntime),
2120
+ refreshTailwindcssRuntime: refreshTailwindRuntime
2121
+ };
2122
+ let runtimeSetPrepared = false;
2123
+ let runtimeSetSignature;
2124
+ let runtimeRefreshRequiredForCompilation = false;
2125
+ let watchRunObserved = false;
2126
+ const runtimeWatchDependencyFiles = /* @__PURE__ */ new Set();
2127
+ const runtimeWatchDependencyContexts = /* @__PURE__ */ new Set();
2128
+ const webpackProcessedCssSourceFiles = /* @__PURE__ */ new Set();
2129
+ const webpackCssSources = /* @__PURE__ */ new Map();
2130
+ const webpackGeneratedCssSources = /* @__PURE__ */ new Map();
2131
+ const currentWebpackCssSourceFiles = /* @__PURE__ */ new Set();
2132
+ const currentWebpackCssSourceModules = /* @__PURE__ */ new Set();
2133
+ let runtimeMetadataPrepared = false;
2134
+ const updateRuntimeWatchDependencies = async () => {
2135
+ runtimeWatchDependencyFiles.clear();
2136
+ runtimeWatchDependencyContexts.clear();
2137
+ const tailwindOptions = resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
2138
+ if (tailwindOptions?.config) runtimeWatchDependencyFiles.add(tailwindOptions.config);
2139
+ for (const entry of tailwindOptions?.v4?.cssEntries ?? []) runtimeWatchDependencyFiles.add(entry);
2140
+ for (const source of tailwindOptions?.v4?.cssSources ?? []) {
2141
+ if (source.file) runtimeWatchDependencyFiles.add(source.file);
2142
+ for (const dependency of source.dependencies ?? []) runtimeWatchDependencyFiles.add(dependency);
2143
+ }
2144
+ for (const source of tailwindOptions?.v4?.sources ?? []) if (source?.base) runtimeWatchDependencyContexts.add(source.base);
2145
+ if (typeof runtimeState.tailwindRuntime.collectContentTokens !== "function") return;
2146
+ try {
2147
+ const report = await runtimeState.tailwindRuntime.collectContentTokens();
2148
+ for (const entry of report.entries ?? []) {
2149
+ const file = typeof entry === "object" && entry !== null && "file" in entry ? entry.file : void 0;
2150
+ if (typeof file === "string") runtimeWatchDependencyFiles.add(file);
2151
+ }
2152
+ for (const source of report.sources ?? []) {
2153
+ const base = typeof source === "object" && source !== null && "base" in source ? source.base : void 0;
2154
+ if (typeof base === "string") runtimeWatchDependencyContexts.add(base);
2155
+ }
2156
+ } catch (error) {
2157
+ debug("collect runtime watch dependencies failed: %O", error);
2158
+ }
2159
+ };
2160
+ const ensureRuntimeMetadata = async (force = false) => {
2161
+ if (runtimeMetadataPrepared && !force) return;
2162
+ await updateRuntimeWatchDependencies();
2163
+ runtimeMetadataPrepared = true;
2164
+ };
2165
+ const collectWatchChangedFiles = () => {
2166
+ const compilerLike = compiler;
2167
+ return new Set([...compilerLike.modifiedFiles ?? [], ...compilerLike.removedFiles ?? []]);
2168
+ };
2169
+ const hasRuntimeDependencyChanges = (files) => {
2170
+ for (const file of files) if (isWatchFileInRuntimeDependencies(file, {
2171
+ contexts: runtimeWatchDependencyContexts,
2172
+ files: runtimeWatchDependencyFiles
2173
+ })) return true;
2174
+ return false;
2175
+ };
2176
+ const syncRuntimeRefreshRequirement = (markWatchRun = false) => {
2177
+ if (markWatchRun) watchRunObserved = true;
2178
+ const changedFiles = collectWatchChangedFiles();
2179
+ runtimeRefreshRequiredForCompilation = runtimeRefreshRequiredForCompilation || hasRuntimeDependencyChanges(changedFiles);
2180
+ };
2181
+ const resetRuntimePreparation = () => {
2182
+ runtimeSetPrepared = false;
2183
+ syncRuntimeRefreshRequirement();
2184
+ };
2185
+ const registerAutoCssSource = async (source) => {
2186
+ if (!source.file) return;
2187
+ if (!upsertTailwindV4CssSource(this.options, source)) return;
2188
+ runtimeSetPrepared = false;
2189
+ runtimeMetadataPrepared = false;
2190
+ runtimeRefreshRequiredForCompilation = true;
2191
+ await refreshTailwindRuntimeState(runtimeState, {
2192
+ force: true,
2193
+ clearCache: true
2194
+ });
2195
+ debug("detected tailwindcss v4 css source from webpack css module: %s", source.file);
2196
+ };
2197
+ const markWebpackProcessedCssSource = (file) => {
2198
+ webpackProcessedCssSourceFiles.add(path.resolve(file));
2199
+ };
2200
+ const markWebpackCssSourceModule = (file) => {
2201
+ currentWebpackCssSourceModules.add(path.resolve(file));
2202
+ };
2203
+ const registerWebpackCssSourceFile = (source) => {
2204
+ const file = path.resolve(source.file);
2205
+ const previous = webpackCssSources.get(file);
2206
+ if (source.processed === true && previous?.processed === false) {
2207
+ currentWebpackCssSourceFiles.add(file);
2208
+ return;
2209
+ }
2210
+ webpackCssSources.set(file, {
2211
+ css: typeof source.css === "string" ? normalizeTailwindConfigDirectives(source.css, path.dirname(file)) : source.css,
2212
+ processed: source.processed
2213
+ });
2214
+ currentWebpackCssSourceFiles.add(file);
2215
+ };
2216
+ const registerWebpackGeneratedCss = (source) => {
2217
+ const file = path.resolve(source.file);
2218
+ webpackGeneratedCssSources.set(file, {
2219
+ ...source,
2220
+ file
2221
+ });
2222
+ currentWebpackCssSourceFiles.add(file);
2223
+ };
2224
+ const pruneWebpackCssSources = (activeSourceFiles, _options = {}) => {
2225
+ const tailwindOptions = resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
2226
+ const configuredSourceFiles = /* @__PURE__ */ new Set();
2227
+ for (const entry of tailwindOptions?.v4?.cssEntries ?? []) configuredSourceFiles.add(path.resolve(entry));
2228
+ for (const source of tailwindOptions?.v4?.cssSources ?? []) if (source.file) configuredSourceFiles.add(path.resolve(source.file));
2229
+ for (const file of webpackCssSources.keys()) if (!activeSourceFiles.has(file) && !configuredSourceFiles.has(file)) webpackCssSources.delete(file);
2230
+ for (const file of webpackGeneratedCssSources.keys()) if (!activeSourceFiles.has(file) && !configuredSourceFiles.has(file)) webpackGeneratedCssSources.delete(file);
2231
+ };
2232
+ const prepareWebpackCssSources = (activeAssetResources = /* @__PURE__ */ new Set()) => {
2233
+ const tailwindOptions = resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
2234
+ const configuredSourceFiles = /* @__PURE__ */ new Set();
2235
+ for (const entry of tailwindOptions?.v4?.cssEntries ?? []) configuredSourceFiles.add(path.resolve(entry));
2236
+ for (const source of tailwindOptions?.v4?.cssSources ?? []) if (source.file) configuredSourceFiles.add(path.resolve(source.file));
2237
+ const activeSourceFiles = new Set([
2238
+ ...configuredSourceFiles,
2239
+ ...currentWebpackCssSourceModules,
2240
+ ...activeAssetResources,
2241
+ ...[...currentWebpackCssSourceFiles].filter((file) => currentWebpackCssSourceModules.has(file)),
2242
+ ...[...currentWebpackCssSourceFiles].filter((file) => activeAssetResources.has(file))
2243
+ ]);
2244
+ currentWebpackCssSourceFiles.clear();
2245
+ currentWebpackCssSourceModules.clear();
2246
+ return activeSourceFiles;
2247
+ };
2248
+ const isWebpackProcessedTailwindEntryAsset = (isMainCssChunk) => {
2249
+ if (isMainCssChunk !== true || webpackProcessedCssSourceFiles.size === 0) return false;
2250
+ const tailwindOptions = resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
2251
+ for (const entry of tailwindOptions?.v4?.cssEntries ?? []) if (webpackProcessedCssSourceFiles.has(path.resolve(entry))) return true;
2252
+ for (const source of tailwindOptions?.v4?.cssSources ?? []) if (source.file && webpackProcessedCssSourceFiles.has(path.resolve(source.file))) return true;
2253
+ return false;
2254
+ };
2255
+ compiler.hooks.invalid?.tap?.(pluginName, (fileName) => {
2256
+ if (!fileName) return;
2257
+ runtimeRefreshRequiredForCompilation = runtimeRefreshRequiredForCompilation || hasRuntimeDependencyChanges([path.resolve(fileName)]);
2258
+ });
2259
+ compiler.hooks.watchRun?.tap?.(pluginName, () => syncRuntimeRefreshRequirement(true));
2260
+ if (compiler.hooks.thisCompilation?.tap) compiler.hooks.thisCompilation.tap(pluginName, resetRuntimePreparation);
2261
+ else if (compiler.hooks.compilation?.tap) compiler.hooks.compilation.tap(pluginName, resetRuntimePreparation);
2262
+ async function getClassSetInLoader() {
2263
+ if (runtimeSetPrepared) return;
2264
+ const signature = getRuntimeClassSetSignature(runtimeState.tailwindRuntime);
2265
+ const forceRefresh = runtimeRefreshRequiredForCompilation || signature !== runtimeSetSignature;
2266
+ debug("runtime loader ensure class set forceRefresh=%s watchDirty=%s signatureChanged=%s", forceRefresh, runtimeRefreshRequiredForCompilation, signature !== runtimeSetSignature);
2267
+ runtimeSetPrepared = true;
2268
+ await ensureRuntimeClassSet(runtimeState, {
2269
+ forceRefresh,
2270
+ forceCollect: forceRefresh || !watchRunObserved,
2271
+ clearCache: forceRefresh,
2272
+ allowEmpty: true
2273
+ });
2274
+ await ensureRuntimeMetadata(forceRefresh);
2275
+ runtimeSetSignature = signature;
2276
+ runtimeRefreshRequiredForCompilation = false;
2277
+ }
2278
+ async function getRuntimeSetInLoader() {
2279
+ await getClassSetInLoader();
2280
+ return ensureRuntimeClassSet(runtimeState, { allowEmpty: true });
2281
+ }
2282
+ onLoad();
2283
+ setupWebpackV5Loaders({
2284
+ compiler,
2285
+ options: this.options,
2286
+ appType: this.appType,
2287
+ weappTailwindcssPackageDir,
2288
+ shouldRewriteCssImports,
2289
+ runtimeLoaderPath,
2290
+ registerAutoCssSource,
2291
+ runtimeState,
2292
+ getClassSetInLoader,
2293
+ getRuntimeSetInLoader,
2294
+ markWebpackProcessedCssSource,
2295
+ markWebpackCssSourceModule,
2296
+ registerWebpackCssSourceFile,
2297
+ registerWebpackGeneratedCss,
2298
+ getRuntimeWatchDependencies() {
2299
+ return {
2300
+ files: runtimeWatchDependencyFiles,
2301
+ contexts: runtimeWatchDependencyContexts
2302
+ };
2303
+ },
2304
+ debug
2305
+ });
2306
+ setupWebpackV5ProcessAssetsHook({
2307
+ compiler,
2308
+ options: this.options,
2309
+ appType: this.appType,
2310
+ runtimeState,
2311
+ getRuntimeRefreshRequirement: () => runtimeRefreshRequiredForCompilation,
2312
+ refreshRuntimeMetadata: ensureRuntimeMetadata,
2313
+ isKnownWebpackProcessedCssAsset(file, metadata) {
2314
+ return webpackProcessedCssSourceFiles.has(path.resolve(file)) || isWebpackProcessedTailwindEntryAsset(metadata?.isMainCssChunk);
2315
+ },
2316
+ isWebpackProcessedCssAsset(file, rawSource, metadata) {
2317
+ return webpackProcessedCssSourceFiles.has(path.resolve(file)) || isWebpackProcessedTailwindEntryAsset(metadata?.isMainCssChunk) || hasTailwindGeneratedCss(rawSource) || hasTailwindGeneratedCssMarkers(rawSource) || rawSource.includes("weapp-tailwindcss webpack-generated-css");
2318
+ },
2319
+ consumeRuntimeRefreshRequirement() {
2320
+ runtimeRefreshRequiredForCompilation = false;
2321
+ },
2322
+ isWatchMode: () => watchRunObserved || compiler.options?.watch === true,
2323
+ getWatchChangedFiles: collectWatchChangedFiles,
2324
+ runtimeClassSetManager: this.options.__internalWebpackRuntimeClassSetManager,
2325
+ getWebpackCssSources: () => webpackCssSources,
2326
+ getWebpackGeneratedCssSources: () => webpackGeneratedCssSources,
2327
+ pruneWebpackCssSources,
2328
+ prepareWebpackCssSources,
2329
+ debug
2330
+ });
2331
+ }
2332
+ };
2333
+ //#endregion
2334
+ export { weappTailwindcssPackageDir as n, WeappTailwindcss as t };