weapp-tailwindcss 5.0.11 → 5.0.12

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 (57) hide show
  1. package/dist/{bundle-state-CXzPknlT.mjs → bundle-state-BxMNKjBV.mjs} +2 -34
  2. package/dist/{bundle-state-BwtEqxvU.js → bundle-state-DU2ATDhw.js} +1 -39
  3. package/dist/bundlers/gulp/vinyl-transform.d.ts +1 -1
  4. package/dist/bundlers/shared/hmr-timing.d.ts +1 -0
  5. package/dist/bundlers/vite/generate-bundle/css-output.d.ts +2 -1
  6. package/dist/bundlers/vite/generate-bundle/remembered-css.d.ts +1 -1
  7. package/dist/bundlers/vite/generate-bundle/types.d.ts +5 -0
  8. package/dist/bundlers/vite/generate-bundle.d.ts +1 -1
  9. package/dist/bundlers/vite/source-candidates.d.ts +6 -0
  10. package/dist/bundlers/vite/weapp-vite-config.d.ts +1 -0
  11. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/helpers.d.ts +10 -8
  12. package/dist/cache/index.d.ts +4 -0
  13. package/dist/cli.js +7 -0
  14. package/dist/cli.mjs +7 -0
  15. package/dist/core.d.ts +7 -0
  16. package/dist/core.js +8 -5
  17. package/dist/core.mjs +8 -5
  18. package/dist/{generator-ChgOWNOj.js → generator-Cb1Zp3Al.js} +1 -1
  19. package/dist/{generator-h2XRiJ9-.mjs → generator-mvNFUvns.mjs} +1 -1
  20. package/dist/generator.js +2 -2
  21. package/dist/generator.mjs +2 -2
  22. package/dist/{gulp-Be88jhoY.mjs → gulp-BfZpaYSQ.mjs} +97 -11
  23. package/dist/{gulp-CHtZF-oT.js → gulp-CxGZU0-v.js} +97 -11
  24. package/dist/gulp.js +1 -1
  25. package/dist/gulp.mjs +1 -1
  26. package/dist/{hmr-timing-BkivBZvN.js → hmr-timing-DFR51wgo.js} +61 -9
  27. package/dist/{hmr-timing-Ct5w4hdM.mjs → hmr-timing-DNjF8bWA.mjs} +49 -10
  28. package/dist/index.js +4 -4
  29. package/dist/index.mjs +4 -4
  30. package/dist/postcss.js +9 -10
  31. package/dist/postcss.mjs +7 -5
  32. package/dist/{precheck-CY9oaH49.js → precheck-30zNPRlI.js} +13 -3
  33. package/dist/{precheck-BpHxsWRd.mjs → precheck-CsFr1q2l.mjs} +14 -4
  34. package/dist/presets.js +2 -2
  35. package/dist/presets.mjs +2 -2
  36. package/dist/tailwindcss/source-scan.d.ts +1 -0
  37. package/dist/tailwindcss/v3-engine/generator.d.ts +17 -0
  38. package/dist/tailwindcss/v3-engine/index.d.ts +1 -1
  39. package/dist/tailwindcss/v3-engine/types.d.ts +1 -0
  40. package/dist/tailwindcss/v4-engine/generator.d.ts +19 -0
  41. package/dist/tailwindcss/v4-engine/index.d.ts +1 -1
  42. package/dist/{tailwindcss-Bfy2egdX.mjs → tailwindcss-CK84uGBp.mjs} +1 -1
  43. package/dist/{tailwindcss-DbbAKAZP.js → tailwindcss-Clpkz1oR.js} +1 -1
  44. package/dist/{transform-Cd634UZV.js → transform-CaVEBOuR.js} +1 -1
  45. package/dist/{transform-r5evL6Hn.mjs → transform-Cju08-aJ.mjs} +1 -1
  46. package/dist/{v3-engine-D0yA9ZkF.js → v3-engine-CQE5JJNZ.js} +142 -29
  47. package/dist/{v3-engine-CFkP6dWF.mjs → v3-engine-DKBaKWGL.mjs} +131 -30
  48. package/dist/{vite-j9cB2Ff1.js → vite-BBGOjh9e.js} +289 -43
  49. package/dist/{vite-Bd8qf9dK.mjs → vite-CS5DE-HD.mjs} +288 -42
  50. package/dist/vite.js +1 -1
  51. package/dist/vite.mjs +1 -1
  52. package/dist/weapp-tw-css-import-rewrite-loader.js +130 -31
  53. package/dist/{webpack-CJAOcYEO.js → webpack-DIWrcpRo.js} +93 -12
  54. package/dist/{webpack-DPdrcC2X.mjs → webpack-SPcri_D8.mjs} +92 -11
  55. package/dist/webpack.js +1 -1
  56. package/dist/webpack.mjs +1 -1
  57. package/package.json +3 -3
@@ -1,13 +1,14 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_v3_engine = require("./v3-engine-D0yA9ZkF.js");
3
- const require_generator = require("./generator-ChgOWNOj.js");
4
- const require_precheck = require("./precheck-CY9oaH49.js");
2
+ const require_v3_engine = require("./v3-engine-CQE5JJNZ.js");
3
+ const require_generator = require("./generator-Cb1Zp3Al.js");
4
+ const require_precheck = require("./precheck-30zNPRlI.js");
5
5
  const require_utils = require("./utils-Dolmt8EO.js");
6
- const require_tailwindcss = require("./tailwindcss-DbbAKAZP.js");
7
- const require_hmr_timing = require("./hmr-timing-BkivBZvN.js");
8
- const require_bundle_state = require("./bundle-state-BwtEqxvU.js");
6
+ const require_tailwindcss = require("./tailwindcss-Clpkz1oR.js");
7
+ const require_hmr_timing = require("./hmr-timing-DFR51wgo.js");
8
+ const require_bundle_state = require("./bundle-state-DU2ATDhw.js");
9
9
  require("./logger-TlKT3xmR.js");
10
10
  let _weapp_tailwindcss_postcss = require("@weapp-tailwindcss/postcss");
11
+ let lru_cache = require("lru-cache");
11
12
  let tailwindcss_patch = require("tailwindcss-patch");
12
13
  let node_fs = require("node:fs");
13
14
  node_fs = require_chunk.__toESM(node_fs);
@@ -480,7 +481,7 @@ function resolveUniAppXStyleIsolationEnabled(root) {
480
481
  //#region src/uni-app-x/vite.ts
481
482
  let transformUVuePromise;
482
483
  function loadTransformUVue() {
483
- transformUVuePromise ?? (transformUVuePromise = Promise.resolve().then(() => require("./transform-Cd634UZV.js")).then((mod) => mod.transformUVue));
484
+ transformUVuePromise ?? (transformUVuePromise = Promise.resolve().then(() => require("./transform-CaVEBOuR.js")).then((mod) => mod.transformUVue));
484
485
  return transformUVuePromise;
485
486
  }
486
487
  const preprocessorLangs = new Set([
@@ -795,12 +796,24 @@ function resolveReplayCssOutputFile(rootDir, file) {
795
796
  if (normalizedFile.length === 0 || normalizedFile === "." || normalizedFile === ".." || normalizedFile.startsWith("../")) return require_bundle_state.normalizeOutputPathKey(node_path.default.basename(file));
796
797
  return normalizedFile;
797
798
  }
799
+ function normalizeViteSourceRoot(rootDir, sourceRoot) {
800
+ if (typeof sourceRoot !== "string" || sourceRoot.trim().length === 0) return;
801
+ return require_bundle_state.normalizeOutputPathKey(node_path.default.isAbsolute(sourceRoot) ? node_path.default.relative(rootDir, sourceRoot) : sourceRoot).replace(/\/+$/, "");
802
+ }
803
+ function resolveReplayCssOutputFileFromSourceRoot(rootDir, file, sourceRoot) {
804
+ const outputFile = resolveReplayCssOutputFile(rootDir, file);
805
+ const normalizedSourceRoot = normalizeViteSourceRoot(rootDir, sourceRoot);
806
+ if (!normalizedSourceRoot) return outputFile;
807
+ if (outputFile === normalizedSourceRoot) return node_path.default.posix.basename(outputFile);
808
+ if (outputFile.startsWith(`${normalizedSourceRoot}/`)) return outputFile.slice(normalizedSourceRoot.length + 1);
809
+ return outputFile;
810
+ }
798
811
  function resolveViteCssOutputFile(file, opts, isWebGeneratorTarget, preserveCssExtension = false) {
799
812
  if (isWebGeneratorTarget || preserveCssExtension || opts.cssMatcher(file) || !SOURCE_STYLE_OUTPUT_EXT_RE.test(file) || !require_bundle_state.isCSSRequest(file)) return file;
800
813
  return file.replace(SOURCE_STYLE_OUTPUT_EXT_RE, ".wxss");
801
814
  }
802
- function resolveViteCssPipelineOutputFile(file, _opts, rootDir, isWebGeneratorTarget = false, preserveCssExtension = false) {
803
- const normalizedFile = resolveReplayCssOutputFile(rootDir, file);
815
+ function resolveViteCssPipelineOutputFile(file, _opts, rootDir, isWebGeneratorTarget = false, preserveCssExtension = false, sourceRoot) {
816
+ const normalizedFile = resolveReplayCssOutputFileFromSourceRoot(rootDir, file, sourceRoot);
804
817
  if (isWebGeneratorTarget || preserveCssExtension || MINI_PROGRAM_STYLE_OUTPUT_EXT_RE.test(normalizedFile) || !CSS_SOURCE_OUTPUT_EXT_RE.test(normalizedFile) || !require_bundle_state.isCSSRequest(normalizedFile)) return normalizedFile;
805
818
  return normalizedFile.replace(CSS_SOURCE_OUTPUT_EXT_RE, ".wxss");
806
819
  }
@@ -1271,10 +1284,10 @@ function mergeRememberedCssSources(sources, outputFile) {
1271
1284
  sourceFile: sources[0]?.sourceFile ?? outputFile
1272
1285
  };
1273
1286
  }
1274
- function collectRememberedCssReplayGroups(sources, opts, rootDir, isWebGeneratorTarget, preserveCssExtension) {
1287
+ function collectRememberedCssReplayGroups(sources, opts, rootDir, isWebGeneratorTarget, preserveCssExtension, sourceRoot) {
1275
1288
  const groups = /* @__PURE__ */ new Map();
1276
1289
  for (const [key, remembered] of sources ?? []) {
1277
- const outputKey = require_bundle_state.normalizeOutputPathKey(resolveViteCssPipelineOutputFile(remembered.outputFile, opts, rootDir, isWebGeneratorTarget, preserveCssExtension));
1290
+ const outputKey = require_bundle_state.normalizeOutputPathKey(resolveViteCssPipelineOutputFile(remembered.outputFile, opts, rootDir, isWebGeneratorTarget, preserveCssExtension, sourceRoot));
1278
1291
  const group = groups.get(outputKey) ?? [];
1279
1292
  group.push({
1280
1293
  key,
@@ -1992,13 +2005,31 @@ function collectImportedBundleCssSources(bundle, importedStyleFiles) {
1992
2005
  }
1993
2006
  return importedSources;
1994
2007
  }
2008
+ function collectBundleAssetFiles(bundle) {
2009
+ const files = /* @__PURE__ */ new Set();
2010
+ for (const [bundleFile, output] of Object.entries(bundle)) {
2011
+ if (output.type !== "asset") continue;
2012
+ files.add(require_bundle_state.normalizeOutputPathKey(getAssetFile(bundleFile, output)));
2013
+ }
2014
+ return files;
2015
+ }
2016
+ function isCoveredViteGeneratedSourceAsset(file, existingAssetFiles, resolveViteProcessedCssOutputFile) {
2017
+ const resolvedOutputFile = require_bundle_state.normalizeOutputPathKey(resolveViteProcessedCssOutputFile?.(file) ?? file);
2018
+ return resolvedOutputFile !== require_bundle_state.normalizeOutputPathKey(file) && existingAssetFiles.has(resolvedOutputFile);
2019
+ }
1995
2020
  function collectViteProcessedCssAssetResults(bundle, options) {
1996
2021
  let collected = 0;
2022
+ const existingAssetFiles = collectBundleAssetFiles(bundle);
1997
2023
  for (const [bundleFile, output] of Object.entries(bundle)) {
1998
2024
  if (output.type !== "asset") continue;
1999
2025
  const file = getAssetFile(bundleFile, output);
2000
2026
  if (!isCssOutputFile(file) || !options.isViteProcessedCssAsset?.(output, file)) continue;
2001
2027
  const rawSource = readAssetSource(output);
2028
+ if (isCoveredViteGeneratedSourceAsset(file, existingAssetFiles, options.resolveViteProcessedCssOutputFile)) {
2029
+ delete bundle[bundleFile];
2030
+ options.debug?.("skip covered vite-generated source css asset: %s", file);
2031
+ continue;
2032
+ }
2002
2033
  const nextCss = resolveViteProcessedCssAssetSource(file, rawSource, options.resolveViteProcessedCssOutputFile);
2003
2034
  if (nextCss !== rawSource) output.source = nextCss;
2004
2035
  options.markCssAssetProcessed?.(output, file);
@@ -2104,7 +2135,19 @@ function resolveUniAppXNativeCssHandlerOptions(opts) {
2104
2135
  };
2105
2136
  }
2106
2137
  //#endregion
2138
+ //#region src/bundlers/vite/weapp-vite-config.ts
2139
+ function resolveWeappViteSourceRoot(config) {
2140
+ const srcRoot = config?.weapp?.srcRoot;
2141
+ return typeof srcRoot === "string" && srcRoot.trim().length > 0 ? srcRoot : void 0;
2142
+ }
2143
+ //#endregion
2107
2144
  //#region src/bundlers/vite/generate-bundle.ts
2145
+ const VITE_LAST_CSS_RESULT_CACHE_MAX = 64;
2146
+ function resolveViteCssTaskConcurrency(useIncrementalMode) {
2147
+ const configured = Number.parseInt(node_process.default.env["WEAPP_TW_VITE_CSS_CONCURRENCY"] ?? "", 10);
2148
+ if (Number.isFinite(configured) && configured > 0) return configured;
2149
+ return useIncrementalMode ? 1 : 2;
2150
+ }
2108
2151
  function addSiblingCssFile(files, file) {
2109
2152
  if (file.endsWith(".wxml")) files.add(file.replace(/\.wxml$/, ".wxss"));
2110
2153
  else if (file.endsWith(".js")) files.add(file.replace(/\.js$/, ".wxss"));
@@ -2115,6 +2158,90 @@ function collectRuntimeLinkedCssFiles(snapshot) {
2115
2158
  for (const file of snapshot.runtimeAffectingChangedByType.js) addSiblingCssFile(files, file);
2116
2159
  return files;
2117
2160
  }
2161
+ function normalizeViteCssCacheKey(file) {
2162
+ return require_bundle_state.normalizeOutputPathKey(file);
2163
+ }
2164
+ function rememberLastCssResult(resultByFile, sourceHashByFile, file, css, sourceHash) {
2165
+ const key = normalizeViteCssCacheKey(file);
2166
+ resultByFile.delete(key);
2167
+ sourceHashByFile.delete(key);
2168
+ resultByFile.set(key, css);
2169
+ sourceHashByFile.set(key, sourceHash);
2170
+ while (resultByFile.size > VITE_LAST_CSS_RESULT_CACHE_MAX) {
2171
+ const oldestKey = resultByFile.keys().next().value;
2172
+ if (typeof oldestKey !== "string") break;
2173
+ resultByFile.delete(oldestKey);
2174
+ sourceHashByFile.delete(oldestKey);
2175
+ }
2176
+ }
2177
+ function getLastCssResult(resultByFile, ...files) {
2178
+ for (const file of files) {
2179
+ if (!file) continue;
2180
+ const key = normalizeViteCssCacheKey(file);
2181
+ const css = resultByFile.get(key);
2182
+ if (css == null) continue;
2183
+ resultByFile.delete(key);
2184
+ resultByFile.set(key, css);
2185
+ return css;
2186
+ }
2187
+ }
2188
+ function getLastCssSourceHash(sourceHashByFile, file) {
2189
+ return sourceHashByFile.get(normalizeViteCssCacheKey(file));
2190
+ }
2191
+ function pruneLastCssResults(resultByFile, sourceHashByFile, activeFiles) {
2192
+ for (const key of resultByFile.keys()) {
2193
+ if (activeFiles.has(key)) continue;
2194
+ resultByFile.delete(key);
2195
+ sourceHashByFile.delete(key);
2196
+ }
2197
+ }
2198
+ function toMb(bytes) {
2199
+ return Math.round(bytes / 1024 / 1024);
2200
+ }
2201
+ function summarizeStringMapCache(map) {
2202
+ let bytes = 0;
2203
+ for (const value of map.values()) bytes += value.length;
2204
+ return {
2205
+ bytes,
2206
+ mb: toMb(bytes),
2207
+ size: map.size
2208
+ };
2209
+ }
2210
+ function resolveViteMemoryDebugStats(context) {
2211
+ if (node_process.default.env["WEAPP_TW_HMR_MEMORY_DEBUG"] !== "1") return;
2212
+ const memory = node_process.default.memoryUsage();
2213
+ return {
2214
+ phase: context.phase,
2215
+ mode: context.useIncrementalMode ? "incremental" : "full",
2216
+ process: {
2217
+ rssMb: toMb(memory.rss),
2218
+ heapTotalMb: toMb(memory.heapTotal),
2219
+ heapUsedMb: toMb(memory.heapUsed),
2220
+ externalMb: toMb(memory.external),
2221
+ arrayBuffersMb: toMb(memory.arrayBuffers)
2222
+ },
2223
+ runtime: {
2224
+ sourceCandidates: context.sourceCandidatesSize,
2225
+ runtime: context.runtimeSize,
2226
+ transformRuntime: context.transformRuntimeSize,
2227
+ generatorRuntime: context.generatorRuntimeSize
2228
+ },
2229
+ processCache: {
2230
+ instance: context.cache.instance.size,
2231
+ hashMap: context.cache.hashMap.size,
2232
+ activeCacheKeys: context.activeProcessCacheKeys.size,
2233
+ activeHashKeys: context.activeProcessHashKeys.size
2234
+ },
2235
+ viteCss: {
2236
+ ...context.getViteCssCacheStats?.(),
2237
+ lastCssResultByFile: summarizeStringMapCache(context.lastCssResultByFile)
2238
+ },
2239
+ tailwind: {
2240
+ v3: require_v3_engine.getTailwindV3IncrementalGenerateCacheStats(),
2241
+ v4: require_v3_engine.getTailwindV4IncrementalGenerateCacheStats()
2242
+ }
2243
+ };
2244
+ }
2118
2245
  async function createScopedGeneratorCandidateSignature(rawSource, sourceFile, fallbackSignature, getSourceCandidatesForEntries, options = {}) {
2119
2246
  if (!getSourceCandidatesForEntries || !rawSource.includes("@source")) return fallbackSignature;
2120
2247
  const resolved = await require_v3_engine.resolveTailwindV4EntriesFromCssCached(rawSource, node_path.default.dirname(node_path.default.resolve(sourceFile.replace(/[?#].*$/, ""))));
@@ -2125,6 +2252,7 @@ async function createScopedGeneratorCandidateSignature(rawSource, sourceFile, fa
2125
2252
  function createGenerateBundleHook(context) {
2126
2253
  const state = require_bundle_state.createBundleBuildState();
2127
2254
  const lastCssResultByFile = /* @__PURE__ */ new Map();
2255
+ const lastCssSourceHashByFile = /* @__PURE__ */ new Map();
2128
2256
  let currentOutDir;
2129
2257
  let currentSubpackageRoots;
2130
2258
  const cssHandlerOptions = createCssHandlerOptionsCache({
@@ -2136,7 +2264,7 @@ function createGenerateBundleHook(context) {
2136
2264
  });
2137
2265
  return async function generateBundle(_opt, bundle) {
2138
2266
  const addWatchFile = (id) => this.addWatchFile?.(id);
2139
- const { opts, runtimeState, ensureBundleRuntimeClassSet, debug, getResolvedConfig, markCssAssetProcessed, isCssAssetProcessed, isViteProcessedCssAsset, recordCssAssetResult, recordViteProcessedCssAssetResult, getViteProcessedCssAssetResults, getViteProcessedCssAssetResult, getSourceCandidates, getSourceCandidatesForEntries, getSourceCandidateSourcesForEntries, waitForSourceCandidateSyncs, rememberCssSource, refreshRememberedCssSource, getRememberedCssSources, getRememberedCssSignature, setRememberedCssSignature, getKnownSfcSource, recordGeneratorCandidates, hmrTimingRecorder } = context;
2267
+ const { opts, runtimeState, ensureBundleRuntimeClassSet, debug, getResolvedConfig, markCssAssetProcessed, isCssAssetProcessed, isViteProcessedCssAsset, recordCssAssetResult, recordViteProcessedCssAssetResult, getViteProcessedCssAssetResults, getViteProcessedCssAssetResult, getSourceCandidates, getSourceCandidatesForEntries, getSourceCandidateSourcesForEntries, waitForSourceCandidateSyncs, rememberCssSource, refreshRememberedCssSource, getRememberedCssSources, getRememberedCssSignature, setRememberedCssSignature, getKnownSfcSource, recordGeneratorCandidates, pruneViteCssCaches, getViteCssCacheStats, hmrTimingRecorder } = context;
2140
2268
  const getBundlerSfcSource = (sourceFile) => {
2141
2269
  const code = this.getModuleInfo?.(sourceFile)?.code;
2142
2270
  return typeof code === "string" && hasSfcStyleSources(code) ? code : void 0;
@@ -2154,6 +2282,7 @@ function createGenerateBundleHook(context) {
2154
2282
  const shouldGenerateWebCssByGenerator = isWebGeneratorTarget && runtimeState.twPatcher.majorVersion === 3;
2155
2283
  const { getCssHandlerOptions, getCssUserHandlerOptions } = cssHandlerOptions;
2156
2284
  const rootDir = resolvedConfig?.root ? node_path.default.resolve(resolvedConfig.root) : node_process.default.cwd();
2285
+ const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig);
2157
2286
  const outDir = resolvedConfig?.build?.outDir ? node_path.default.resolve(rootDir, resolvedConfig.build.outDir) : rootDir;
2158
2287
  await runtimeState.readyPromise;
2159
2288
  debug("start");
@@ -2165,7 +2294,7 @@ function createGenerateBundleHook(context) {
2165
2294
  markCssAssetProcessed,
2166
2295
  recordCssAssetResult,
2167
2296
  recordViteProcessedCssAssetResult,
2168
- resolveViteProcessedCssOutputFile: (file) => resolveViteCssPipelineOutputFile(file, opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension),
2297
+ resolveViteProcessedCssOutputFile: (file) => resolveViteCssPipelineOutputFile(file, opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot),
2169
2298
  debug
2170
2299
  });
2171
2300
  const hmrTimingStartedAt = performance.now();
@@ -2198,6 +2327,7 @@ function createGenerateBundleHook(context) {
2198
2327
  const debugCssDiff = node_process.default.env["WEAPP_TW_VITE_DEBUG_CSS_DIFF"] === "1";
2199
2328
  const disableV3OxideSourceRuntime = node_process.default.env["WEAPP_TW_VITE_DISABLE_V3_OXIDE_RUNTIME"] === "1";
2200
2329
  const bundleFiles = Object.keys(bundle);
2330
+ const activeViteCssCacheFiles = new Set(bundleFiles.map(normalizeViteCssCacheKey));
2201
2331
  const subpackageRoots = collectMiniProgramSubpackageRoots(bundle);
2202
2332
  if (subpackageRoots) currentSubpackageRoots = subpackageRoots;
2203
2333
  const isMainPackageStyleOutputFile = (file) => currentSubpackageRoots != null && !isSubpackageOutputFile(file, currentSubpackageRoots);
@@ -2321,7 +2451,14 @@ function createGenerateBundleHook(context) {
2321
2451
  });
2322
2452
  const linkedByEntry = useIncrementalMode ? /* @__PURE__ */ new Map() : void 0;
2323
2453
  const sharedCssResultCache = /* @__PURE__ */ new Map();
2454
+ const activeProcessCacheKeys = /* @__PURE__ */ new Set();
2455
+ const activeProcessHashKeys = /* @__PURE__ */ new Set();
2456
+ const rememberProcessCacheKey = (cacheKey, hashKey = cacheKey) => {
2457
+ activeProcessCacheKeys.add(cacheKey);
2458
+ activeProcessHashKeys.add(hashKey);
2459
+ };
2324
2460
  const tasks = [];
2461
+ const cssTaskFactories = [];
2325
2462
  const jsTaskFactories = [];
2326
2463
  for (const entry of snapshot.entries) {
2327
2464
  const { file, output: originalSource, source: originalEntrySource, type } = entry;
@@ -2333,10 +2470,13 @@ function createGenerateBundleHook(context) {
2333
2470
  }
2334
2471
  if (!processFiles.html.has(file)) continue;
2335
2472
  const rawSource = originalEntrySource;
2473
+ const cacheKey = file;
2474
+ const hashKey = `${file}:html:${runtimeSignature}`;
2475
+ rememberProcessCacheKey(cacheKey, hashKey);
2336
2476
  tasks.push(timeTask("html", () => require_hmr_timing.processCachedTask({
2337
2477
  cache,
2338
- cacheKey: file,
2339
- hashKey: `${file}:html:${runtimeSignature}`,
2478
+ cacheKey,
2479
+ hashKey,
2340
2480
  hash: getSnapshotHash(snapshot.sourceHashByFile, file, rawSource),
2341
2481
  applyResult(source) {
2342
2482
  originalSource.source = source;
@@ -2375,6 +2515,7 @@ function createGenerateBundleHook(context) {
2375
2515
  metrics.css.total++;
2376
2516
  const rawSource = normalizeRelativeCssConfigDirectives(originalEntrySource, file, outDir, opts);
2377
2517
  const outputFile = resolveViteCssOutputFile(file, opts, isWebGeneratorTarget, shouldPreserveAppCssExtension);
2518
+ activeViteCssCacheFiles.add(normalizeViteCssCacheKey(outputFile));
2378
2519
  if (outputFile !== file && !canProcessViteSourceStyleAsCss(rawSource, file)) {
2379
2520
  delete bundle[file];
2380
2521
  debug("css skip raw source style asset: %s -> %s", file, outputFile);
@@ -2459,8 +2600,10 @@ function createGenerateBundleHook(context) {
2459
2600
  const cssRuntimeSignature = createCssRuntimeSignature(runtimeSignature, scopedGeneratorCandidateSignature);
2460
2601
  const rememberedCssRuntimeSignature = createRememberedCssRuntimeSignature(cssRuntimeSignature, cssRuntimeAffectingHash);
2461
2602
  const cssSharedCacheKey = `${cssShareScope}:${cssRuntimeSignature}:${runtimeState.twPatcher.majorVersion ?? "unknown"}:${cssHandlerOptions.isMainChunk ? "1" : "0"}:${cssRuntimeAffectingSignature}:${sourceTraceSignature}`;
2603
+ const cssCacheKey = file;
2604
+ const cssHashKey = `${file}:css:${cssRuntimeSignature}:${runtimeState.twPatcher.majorVersion ?? "unknown"}`;
2462
2605
  if (!shouldTrackGeneratorRuntime) {
2463
- const lastCss = lastCssResultByFile.get(outputFile) ?? lastCssResultByFile.get(file);
2606
+ const lastCss = getLastCssResult(lastCssResultByFile, outputFile, file);
2464
2607
  if (lastCss != null) {
2465
2608
  applyCssResult(lastCss);
2466
2609
  markCssAssetProcessed?.(originalSource, outputFile);
@@ -2469,14 +2612,15 @@ function createGenerateBundleHook(context) {
2469
2612
  continue;
2470
2613
  }
2471
2614
  }
2472
- tasks.push(timeTask("css", () => require_hmr_timing.processCachedTask({
2615
+ rememberProcessCacheKey(cssCacheKey, cssHashKey);
2616
+ cssTaskFactories.push(() => timeTask("css", () => require_hmr_timing.processCachedTask({
2473
2617
  cache,
2474
- cacheKey: file,
2475
- hashKey: `${file}:css:${cssRuntimeSignature}:${runtimeState.twPatcher.majorVersion ?? "unknown"}`,
2618
+ cacheKey: cssCacheKey,
2619
+ hashKey: cssHashKey,
2476
2620
  hash: `${cssRuntimeAffectingHash}:${scopedGeneratorCandidateSignature}:${sourceTraceSignature}`,
2477
2621
  applyResult(source) {
2478
2622
  applyCssResult(source);
2479
- lastCssResultByFile.set(outputFile, source);
2623
+ rememberLastCssResult(lastCssResultByFile, lastCssSourceHashByFile, outputFile, source, cssRuntimeAffectingHash);
2480
2624
  markCssAssetProcessed?.(originalSource, outputFile);
2481
2625
  if (rememberedCssSources.length <= 1) rememberCssSource?.({
2482
2626
  outputFile,
@@ -2513,7 +2657,7 @@ function createGenerateBundleHook(context) {
2513
2657
  getSourceCandidatesForEntries: scopedSourceCandidateGetter,
2514
2658
  styleHandler,
2515
2659
  debug,
2516
- previousCss: !vitePipelineCssAsset && useIncrementalMode && !hasRuntimeAffectingChanges && !snapshot.changedByType.css.has(file) ? lastCssResultByFile.get(outputFile) ?? lastCssResultByFile.get(file) : void 0
2660
+ previousCss: !vitePipelineCssAsset && useIncrementalMode && !hasRuntimeAffectingChanges && !snapshot.changedByType.css.has(file) ? getLastCssResult(lastCssResultByFile, outputFile, file) : void 0
2517
2661
  });
2518
2662
  if (generated) {
2519
2663
  const tracedCss = annotateCss(generated.css);
@@ -2574,10 +2718,12 @@ function createGenerateBundleHook(context) {
2574
2718
  jsTaskFactories.push(async () => {
2575
2719
  await timeTask("js", async () => {
2576
2720
  const hashSalt = createJsHashSalt(runtimeSignature, useIncrementalMode ? createLinkedImpactSignature(file, snapshot.linkedImpactsByEntry, snapshot.sourceHashByFile) : void 0);
2721
+ const hashKey = `${file}:js`;
2722
+ rememberProcessCacheKey(file, hashKey);
2577
2723
  await require_hmr_timing.processCachedTask({
2578
2724
  cache,
2579
2725
  cacheKey: file,
2580
- hashKey: `${file}:js`,
2726
+ hashKey,
2581
2727
  hash: `${getSnapshotHash(snapshot.sourceHashByFile, file, initialRawSource)}:${hashSalt}`,
2582
2728
  applyResult(source) {
2583
2729
  originalSource.code = source;
@@ -2616,9 +2762,11 @@ function createGenerateBundleHook(context) {
2616
2762
  collectLinkedFileNames(linked, getJsEntry, linkedSet);
2617
2763
  baseApplyLinkedUpdates(linked);
2618
2764
  };
2765
+ const uniAppXJsHashKey = `${file}:js`;
2766
+ rememberProcessCacheKey(file, uniAppXJsHashKey);
2619
2767
  const factory = createUniAppXAssetTask(file, originalSource, outDir, {
2620
2768
  cache,
2621
- hashKey: `${file}:js`,
2769
+ hashKey: uniAppXJsHashKey,
2622
2770
  hashSalt: createJsHashSalt(runtimeSignature, [UNI_APP_X_STYLE_PLACEHOLDER_VERSION, useIncrementalMode ? createLinkedImpactSignature(file, snapshot.linkedImpactsByEntry, snapshot.sourceHashByFile) : void 0].filter(Boolean).join(":")),
2623
2771
  createHandlerOptions,
2624
2772
  debug,
@@ -2660,7 +2808,7 @@ function createGenerateBundleHook(context) {
2660
2808
  }
2661
2809
  }
2662
2810
  if (useIncrementalMode || isNativeAppStyleTarget) {
2663
- const rememberedReplayGroups = collectRememberedCssReplayGroups(getRememberedCssSources?.(), opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension);
2811
+ const rememberedReplayGroups = collectRememberedCssReplayGroups(getRememberedCssSources?.(), opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot);
2664
2812
  for (const [outputFile, rememberedGroup] of rememberedReplayGroups) {
2665
2813
  const refreshedRememberedGroup = await Promise.all(rememberedGroup.map(async (item) => ({
2666
2814
  key: item.key,
@@ -2669,6 +2817,8 @@ function createGenerateBundleHook(context) {
2669
2817
  const rememberedCssSource = mergeRememberedCssSources(refreshedRememberedGroup.map((item) => item.remembered), outputFile);
2670
2818
  if (!rememberedCssSource) continue;
2671
2819
  const { rawSource, sourceFile } = rememberedCssSource;
2820
+ activeViteCssCacheFiles.add(normalizeViteCssCacheKey(outputFile));
2821
+ activeViteCssCacheFiles.add(normalizeViteCssCacheKey(sourceFile));
2672
2822
  const outputCssHandlerOptions = getCssHandlerOptions(outputFile);
2673
2823
  const cssHandlerOptions = {
2674
2824
  ...getCssHandlerOptions(sourceFile),
@@ -2682,11 +2832,14 @@ function createGenerateBundleHook(context) {
2682
2832
  tokenSources: sourceTraceTokenSources
2683
2833
  });
2684
2834
  const scopedGeneratorRuntime = createScopedGeneratorRuntime(outputFile, cssHandlerOptions, generatorRuntime);
2685
- const rememberedCssRuntimeSignature = createRememberedCssRuntimeSignature(createCssRuntimeSignature(createCandidateSignature(scopedGeneratorRuntime), await createScopedGeneratorCandidateSignature(rawSource, sourceFile, createCandidateSignature(scopedGeneratorRuntime), scopedSourceCandidateGetter, { includeFallbackSignature: cssHandlerOptions.isMainChunk })), cache.computeHash(require_bundle_state.createRuntimeAffectingSourceSignature(rawSource, "css")));
2835
+ const cssRuntimeSignature = createCssRuntimeSignature(createCandidateSignature(scopedGeneratorRuntime), await createScopedGeneratorCandidateSignature(rawSource, sourceFile, createCandidateSignature(scopedGeneratorRuntime), scopedSourceCandidateGetter, { includeFallbackSignature: cssHandlerOptions.isMainChunk }));
2836
+ const cssRuntimeAffectingHash = cache.computeHash(require_bundle_state.createRuntimeAffectingSourceSignature(rawSource, "css"));
2837
+ const rememberedCssRuntimeSignature = createRememberedCssRuntimeSignature(cssRuntimeSignature, cssRuntimeAffectingHash);
2838
+ const previousCss = useIncrementalMode && getLastCssSourceHash(lastCssSourceHashByFile, outputFile) === cssRuntimeAffectingHash ? getLastCssResult(lastCssResultByFile, outputFile) : void 0;
2686
2839
  const rememberedKeys = refreshedRememberedGroup.map((item) => item.key);
2687
2840
  const allRememberedSignaturesFresh = rememberedKeys.length > 0 && rememberedKeys.every((key) => getRememberedCssSignature?.(key) === rememberedCssRuntimeSignature);
2688
2841
  if (bundleFiles.includes(outputFile) || bundleFiles.includes(sourceFile) || allRememberedSignaturesFresh) continue;
2689
- tasks.push(timeTask("css.replay", async () => {
2842
+ cssTaskFactories.push(() => timeTask("css.replay", async () => {
2690
2843
  const start = performance.now();
2691
2844
  const generated = await require_hmr_timing.generateCssByGenerator({
2692
2845
  opts,
@@ -2698,9 +2851,11 @@ function createGenerateBundleHook(context) {
2698
2851
  cssUserHandlerOptions: getCssUserHandlerOptions(sourceFile),
2699
2852
  getSourceCandidatesForEntries: scopedSourceCandidateGetter,
2700
2853
  styleHandler,
2701
- debug
2854
+ debug,
2855
+ previousCss
2702
2856
  });
2703
2857
  const css = annotateCss(generated?.css ?? (await styleHandler(rawSource, cssHandlerOptions)).css);
2858
+ rememberLastCssResult(lastCssResultByFile, lastCssSourceHashByFile, outputFile, css, cssRuntimeAffectingHash);
2704
2859
  for (const key of rememberedKeys) setRememberedCssSignature?.(key, rememberedCssRuntimeSignature);
2705
2860
  if (generated) {
2706
2861
  registerGeneratorDependencies$1({ addWatchFile }, generated.dependencies);
@@ -2721,7 +2876,11 @@ function createGenerateBundleHook(context) {
2721
2876
  }));
2722
2877
  }
2723
2878
  }
2724
- require_bundle_state.pushConcurrentTaskFactories(tasks, jsTaskFactories);
2879
+ require_hmr_timing.pushConcurrentTaskFactories(tasks, jsTaskFactories);
2880
+ if (cssTaskFactories.length > 0) {
2881
+ const cssConcurrency = resolveViteCssTaskConcurrency(useIncrementalMode);
2882
+ tasks.push(require_hmr_timing.runWithConcurrency(cssTaskFactories, cssConcurrency).then(() => void 0));
2883
+ }
2725
2884
  const tasksStart = performance.now();
2726
2885
  await Promise.all(tasks);
2727
2886
  recordTimingDetail("tasks", tasksStart);
@@ -2776,7 +2935,7 @@ function createGenerateBundleHook(context) {
2776
2935
  markCssAssetProcessed,
2777
2936
  recordCssAssetResult,
2778
2937
  recordViteProcessedCssAssetResult,
2779
- resolveViteProcessedCssOutputFile: (file) => resolveViteCssPipelineOutputFile(file, opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension),
2938
+ resolveViteProcessedCssOutputFile: (file) => resolveViteCssPipelineOutputFile(file, opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot),
2780
2939
  debug
2781
2940
  });
2782
2941
  return injectViteProcessedCssIntoMainCssAssets(bundle, {
@@ -2796,10 +2955,34 @@ function createGenerateBundleHook(context) {
2796
2955
  const stateUpdateStart = performance.now();
2797
2956
  require_bundle_state.updateBundleBuildState(state, snapshot, useIncrementalMode ? linkedByEntry ?? /* @__PURE__ */ new Map() : /* @__PURE__ */ new Map(), { incremental: useIncrementalMode });
2798
2957
  state.generatorCandidateSignature = generatorCandidateSignature;
2958
+ if (useIncrementalMode && !snapshot.hasOmittedKnownFiles) cache.prune?.({
2959
+ cacheKeys: activeProcessCacheKeys,
2960
+ hashKeys: activeProcessHashKeys
2961
+ });
2962
+ pruneLastCssResults(lastCssResultByFile, lastCssSourceHashByFile, activeViteCssCacheFiles);
2963
+ pruneViteCssCaches?.({
2964
+ activeFiles: activeViteCssCacheFiles,
2965
+ activeKnownSfcFiles: new Set([...snapshot.sourceHashByFile.keys(), ...snapshot.entries.map((entry) => entry.file)])
2966
+ });
2799
2967
  recordTimingDetail("state.update", stateUpdateStart);
2800
2968
  debug("metrics iteration=%d runtime=%sms html(total=%d transform=%d hit=%d rate=%s elapsed=%sms) js(total=%d transform=%d hit=%d rate=%s elapsed=%sms) css(total=%d transform=%d hit=%d rate=%s elapsed=%sms)", useIncrementalMode ? state.iteration : 0, formatMs(metrics.runtimeSet), metrics.html.total, metrics.html.transformed, metrics.html.cacheHits, formatCacheHitRate(metrics.html), formatMs(metrics.html.elapsed), metrics.js.total, metrics.js.transformed, metrics.js.cacheHits, formatCacheHitRate(metrics.js), formatMs(metrics.js.elapsed), metrics.css.total, metrics.css.transformed, metrics.css.cacheHits, formatCacheHitRate(metrics.css), formatMs(metrics.css.elapsed));
2801
2969
  if (hmrTimingRecorder) {
2802
- hmrTimingRecorder.record("generateBundle", performance.now() - hmrTimingStartedAt, timingDetails);
2970
+ hmrTimingRecorder.record("generateBundle", performance.now() - hmrTimingStartedAt, {
2971
+ ...timingDetails,
2972
+ memoryDebug: resolveViteMemoryDebugStats({
2973
+ activeProcessCacheKeys,
2974
+ activeProcessHashKeys,
2975
+ cache,
2976
+ generatorRuntimeSize: generatorRuntime.size,
2977
+ getViteCssCacheStats,
2978
+ lastCssResultByFile,
2979
+ phase: "generateBundle",
2980
+ runtimeSize: runtime.size,
2981
+ sourceCandidatesSize: sourceCandidates.size,
2982
+ transformRuntimeSize: transformRuntime.size,
2983
+ useIncrementalMode
2984
+ })
2985
+ });
2803
2986
  hmrTimingRecorder.emitTotal();
2804
2987
  }
2805
2988
  onEnd();
@@ -2863,6 +3046,7 @@ function createViteCssFinalizerOutputPlugin(context) {
2863
3046
  const isNativeAppStyleTarget = uniUtsPlatform.isApp || isHarmonyAppStyleTarget;
2864
3047
  if (resolvedConfig?.command !== "build" && !isNativeAppStyleTarget) return;
2865
3048
  const rootDir = resolvedConfig?.root ? node_path.default.resolve(resolvedConfig.root) : node_process.default.cwd();
3049
+ const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig);
2866
3050
  const sourceTraceTokenSources = getSourceCandidateSourcesForEntries ? require_hmr_timing.createCssTokenSourceMap(getSourceCandidateSourcesForEntries(void 0), opts) : void 0;
2867
3051
  const annotateCss = (css) => require_hmr_timing.annotateCssSourceTrace(css, {
2868
3052
  opts,
@@ -2875,7 +3059,7 @@ function createViteCssFinalizerOutputPlugin(context) {
2875
3059
  markCssAssetProcessed,
2876
3060
  recordCssAssetResult,
2877
3061
  recordViteProcessedCssAssetResult,
2878
- resolveViteProcessedCssOutputFile: (file) => resolveViteCssPipelineOutputFile(file, opts, rootDir, isWebGeneratorTarget, isNativeAppStyleTarget),
3062
+ resolveViteProcessedCssOutputFile: (file) => resolveViteCssPipelineOutputFile(file, opts, rootDir, isWebGeneratorTarget, isNativeAppStyleTarget, sourceRoot),
2879
3063
  debug
2880
3064
  });
2881
3065
  };
@@ -3429,7 +3613,10 @@ function resolveImplicitTailwindcssBasedirFromViteRoot(root) {
3429
3613
  const debug = require_v3_engine.createDebug();
3430
3614
  const weappTailwindcssPackageDir = require_bundle_state.resolvePackageDir("weapp-tailwindcss");
3431
3615
  const weappTailwindcssDirPosix = require_bundle_state.slash(weappTailwindcssPackageDir);
3432
- const sourceCandidateScanSnapshotCache = /* @__PURE__ */ new Map();
3616
+ const SOURCE_CANDIDATE_SCAN_CACHE_MAX = 8;
3617
+ const sourceCandidateScanSnapshotCache = new lru_cache.LRUCache({ max: SOURCE_CANDIDATE_SCAN_CACHE_MAX });
3618
+ const VITE_REMEMBERED_CSS_CACHE_MAX = 96;
3619
+ const VITE_KNOWN_SFC_SOURCE_CACHE_MAX = 128;
3433
3620
  const SFC_STYLE_BLOCK_RE = /<style\b[^>]*>([\s\S]*?)<\/style>/gi;
3434
3621
  const SFC_COMPONENT_FILE_RE = /\.(?:vue|uvue|nvue|svelte|mpx)$/i;
3435
3622
  function normalizeSignaturePath(value) {
@@ -3474,6 +3661,21 @@ function normalizeCssSourceIdentity(sourceFile) {
3474
3661
  if (query.type === "style") return `${normalizedFile}?type=style&index=${query.index ?? 0}`;
3475
3662
  return require_bundle_state.normalizeOutputPathKey(require_bundle_state.stripRequestQuery(cleanSourceFile));
3476
3663
  }
3664
+ function touchMapEntry(map, key, value) {
3665
+ map.delete(key);
3666
+ map.set(key, value);
3667
+ }
3668
+ function pruneMapToMaxSize(map, maxSize, onDelete) {
3669
+ while (map.size > maxSize) {
3670
+ const key = map.keys().next().value;
3671
+ if (key === void 0) break;
3672
+ map.delete(key);
3673
+ onDelete?.(key);
3674
+ }
3675
+ }
3676
+ function normalizeVitePersistentCacheKey(file) {
3677
+ return require_bundle_state.normalizeOutputPathKey(file);
3678
+ }
3477
3679
  /**
3478
3680
  * @name WeappTailwindcss
3479
3681
  * @description uni-app vite / uni-app-x 版本插件
@@ -3570,7 +3772,7 @@ function WeappTailwindcss(options = {}) {
3570
3772
  bareArbitraryValues: opts.arbitraryValues?.bareArbitraryValues,
3571
3773
  extractor: sourceCandidateExtractor
3572
3774
  });
3573
- const sourceCandidateScanCache = /* @__PURE__ */ new Map();
3775
+ const sourceCandidateScanCache = new lru_cache.LRUCache({ max: SOURCE_CANDIDATE_SCAN_CACHE_MAX });
3574
3776
  let sourceScanEntries;
3575
3777
  let sourceScanMatcher;
3576
3778
  let sourceScanDependencies = /* @__PURE__ */ new Set();
@@ -3766,12 +3968,16 @@ function WeappTailwindcss(options = {}) {
3766
3968
  const file = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
3767
3969
  if (!SFC_COMPONENT_FILE_RE.test(file)) return;
3768
3970
  if (!hasSfcStyleBlocks(code)) return;
3769
- knownSfcSources.set(normalizeKnownSfcSourceKey(file), code);
3971
+ touchMapEntry(knownSfcSources, normalizeKnownSfcSourceKey(file), code);
3972
+ pruneMapToMaxSize(knownSfcSources, VITE_KNOWN_SFC_SOURCE_CACHE_MAX);
3770
3973
  };
3771
3974
  const getKnownSfcSource = (file) => {
3772
3975
  const scanSource = sourceCandidateCollector.source(file);
3773
3976
  if (scanSource && hasSfcStyleBlocks(scanSource)) return scanSource;
3774
- return knownSfcSources.get(normalizeKnownSfcSourceKey(file));
3977
+ const key = normalizeKnownSfcSourceKey(file);
3978
+ const source = knownSfcSources.get(key);
3979
+ if (source != null) touchMapEntry(knownSfcSources, key, source);
3980
+ return source;
3775
3981
  };
3776
3982
  const rememberCssSource = (entry, cssRuntimeSignature) => {
3777
3983
  const outputKey = require_bundle_state.normalizeOutputPathKey(entry.outputFile);
@@ -3779,10 +3985,10 @@ function WeappTailwindcss(options = {}) {
3779
3985
  const previousOutputEntry = rememberedCssSources.get(outputKey);
3780
3986
  const key = previousOutputEntry != null && normalizeCssSourceIdentity(previousOutputEntry.sourceFile) !== normalizedSourceFile ? `${outputKey}\0${normalizedSourceFile}` : outputKey;
3781
3987
  const previous = rememberedCssSources.get(key);
3782
- rememberedCssSources.set(key, entry);
3988
+ touchMapEntry(rememberedCssSources, key, entry);
3783
3989
  for (const [rememberedKey, remembered] of rememberedCssSources) {
3784
3990
  if (rememberedKey === key || normalizeCssSourceIdentity(remembered.sourceFile) !== normalizedSourceFile) continue;
3785
- rememberedCssSources.set(rememberedKey, {
3991
+ touchMapEntry(rememberedCssSources, rememberedKey, {
3786
3992
  ...remembered,
3787
3993
  rawSource: entry.rawSource,
3788
3994
  sourceFile: entry.sourceFile
@@ -3791,6 +3997,9 @@ function WeappTailwindcss(options = {}) {
3791
3997
  }
3792
3998
  if (cssRuntimeSignature) rememberedCssSignatureByFile.set(key, cssRuntimeSignature);
3793
3999
  else if (previous?.rawSource !== entry.rawSource || previous?.sourceFile !== entry.sourceFile) rememberedCssSignatureByFile.delete(key);
4000
+ pruneMapToMaxSize(rememberedCssSources, VITE_REMEMBERED_CSS_CACHE_MAX, (rememberedKey) => {
4001
+ rememberedCssSignatureByFile.delete(String(rememberedKey));
4002
+ });
3794
4003
  };
3795
4004
  const refreshRememberedCssSourceEntry = (rememberedKey, remembered, sourceFile, rawSource) => {
3796
4005
  if (remembered.rawSource === rawSource && remembered.sourceFile === sourceFile) return remembered;
@@ -3799,7 +4008,7 @@ function WeappTailwindcss(options = {}) {
3799
4008
  rawSource,
3800
4009
  sourceFile
3801
4010
  };
3802
- rememberedCssSources.set(rememberedKey, nextRemembered);
4011
+ touchMapEntry(rememberedCssSources, rememberedKey, nextRemembered);
3803
4012
  rememberedCssSignatureByFile.delete(rememberedKey);
3804
4013
  return nextRemembered;
3805
4014
  };
@@ -3880,19 +4089,53 @@ function WeappTailwindcss(options = {}) {
3880
4089
  rememberedCssSignatureByFile.set(require_bundle_state.normalizeOutputPathKey(file), cssRuntimeSignature);
3881
4090
  };
3882
4091
  const recordCssAssetResult = (file, css) => {
3883
- viteGeneratedCssByFile.set(file, css);
4092
+ touchMapEntry(viteGeneratedCssByFile, normalizeVitePersistentCacheKey(file), css);
3884
4093
  };
3885
4094
  const recordViteProcessedCssAssetResult = (file, css, options = {}) => {
3886
- const key = require_bundle_state.normalizeOutputPathKey(file);
4095
+ const key = normalizeVitePersistentCacheKey(file);
3887
4096
  const previous = viteProcessedCssAssetResults.get(key);
3888
- viteProcessedCssAssetResults.set(key, {
4097
+ touchMapEntry(viteProcessedCssAssetResults, key, {
3889
4098
  css,
3890
4099
  injectIntoMain: options.injectIntoMain ?? previous?.injectIntoMain,
3891
4100
  outputFile: options.outputFile ?? previous?.outputFile
3892
4101
  });
3893
4102
  };
3894
4103
  const getViteProcessedCssAssetResults = () => viteProcessedCssAssetResults.entries();
3895
- const getViteProcessedCssAssetResult = (file) => viteProcessedCssAssetResults.get(require_bundle_state.normalizeOutputPathKey(file));
4104
+ const getViteProcessedCssAssetResult = (file) => viteProcessedCssAssetResults.get(normalizeVitePersistentCacheKey(file));
4105
+ const getViteCssCacheStats = () => ({
4106
+ viteGeneratedCssByFile: viteGeneratedCssByFile.size,
4107
+ viteProcessedCssAssetResults: viteProcessedCssAssetResults.size,
4108
+ rememberedCssSources: rememberedCssSources.size,
4109
+ rememberedCssSignatureByFile: rememberedCssSignatureByFile.size,
4110
+ knownSfcSources: knownSfcSources.size,
4111
+ sourceCandidateScanCache: sourceCandidateScanCache.size,
4112
+ pendingSourceCandidateSyncs: pendingSourceCandidateSyncs.size,
4113
+ pendingSourceCandidateSyncByFile: pendingSourceCandidateSyncByFile.size
4114
+ });
4115
+ const pruneViteCssCaches = (options) => {
4116
+ const activeFiles = new Set([...options.activeFiles].map(normalizeVitePersistentCacheKey));
4117
+ for (const key of viteGeneratedCssByFile.keys()) if (!activeFiles.has(key)) viteGeneratedCssByFile.delete(key);
4118
+ for (const [key, record] of viteProcessedCssAssetResults) {
4119
+ const outputKey = typeof record.outputFile === "string" ? normalizeVitePersistentCacheKey(record.outputFile) : void 0;
4120
+ if (!activeFiles.has(key) && (outputKey == null || !activeFiles.has(outputKey))) viteProcessedCssAssetResults.delete(key);
4121
+ }
4122
+ for (const [key, remembered] of rememberedCssSources) {
4123
+ const outputKey = normalizeVitePersistentCacheKey(remembered.outputFile);
4124
+ const sourceKey = normalizeVitePersistentCacheKey(remembered.sourceFile);
4125
+ if (!activeFiles.has(key) && !activeFiles.has(outputKey) && !activeFiles.has(sourceKey)) {
4126
+ rememberedCssSources.delete(key);
4127
+ rememberedCssSignatureByFile.delete(key);
4128
+ }
4129
+ }
4130
+ if (options.activeKnownSfcFiles) {
4131
+ const activeKnownSfcFiles = new Set([...options.activeKnownSfcFiles].map((file) => normalizeKnownSfcSourceKey(file)).filter((file) => SFC_COMPONENT_FILE_RE.test(file)));
4132
+ for (const key of knownSfcSources.keys()) if (!activeKnownSfcFiles.has(key)) knownSfcSources.delete(key);
4133
+ }
4134
+ pruneMapToMaxSize(rememberedCssSources, VITE_REMEMBERED_CSS_CACHE_MAX, (rememberedKey) => {
4135
+ rememberedCssSignatureByFile.delete(String(rememberedKey));
4136
+ });
4137
+ pruneMapToMaxSize(knownSfcSources, VITE_KNOWN_SFC_SOURCE_CACHE_MAX);
4138
+ };
3896
4139
  const normalizeViteProcessedCssFile = (file) => node_path.default.resolve((0, _weapp_tailwindcss_shared.cleanUrl)(file));
3897
4140
  const markViteProcessedCssSource = (file) => {
3898
4141
  viteProcessedCssSourceFiles.add(normalizeViteProcessedCssFile(file));
@@ -4002,7 +4245,8 @@ function WeappTailwindcss(options = {}) {
4002
4245
  const rootDir = resolvedConfig?.root ? node_path.default.resolve(resolvedConfig.root) : node_process.default.cwd();
4003
4246
  const isHarmonyAppStyleTarget = isHarmonyAppBuildTarget();
4004
4247
  const isNativeAppStyleTarget = require_utils.resolveUniUtsPlatform().isApp || isHarmonyAppStyleTarget;
4005
- const outputFile = resolveViteCssPipelineOutputFile(file, opts, rootDir, generatorOptions.target === "web", isNativeAppStyleTarget);
4248
+ const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig);
4249
+ const outputFile = resolveViteCssPipelineOutputFile(file, opts, rootDir, generatorOptions.target === "web", isNativeAppStyleTarget, sourceRoot);
4006
4250
  const runtime = getRecordedGeneratorCandidates() ?? getSourceCandidates() ?? await ensureRuntimeClassSet();
4007
4251
  const outputCssHandlerOptions = transformCssHandlerOptions.getCssHandlerOptions(outputFile);
4008
4252
  const cssHandlerOptions = {
@@ -4093,6 +4337,8 @@ function WeappTailwindcss(options = {}) {
4093
4337
  setRememberedCssSignature,
4094
4338
  getKnownSfcSource,
4095
4339
  recordGeneratorCandidates,
4340
+ pruneViteCssCaches,
4341
+ getViteCssCacheStats,
4096
4342
  hmrTimingRecorder
4097
4343
  });
4098
4344
  const cssFinalizerOutputPlugin = createViteCssFinalizerOutputPlugin({