weapp-tailwindcss 5.2.6 → 5.2.7

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 (29) hide show
  1. package/dist/bundlers/shared/final-css-cleanup.d.ts +2 -0
  2. package/dist/bundlers/vite/generate-bundle/final-css-assets.d.ts +8 -0
  3. package/dist/bundlers/vite/processed-css-assets/cleanup.d.ts +0 -1
  4. package/dist/bundlers/vite/processed-css-assets/markers-imports.d.ts +1 -0
  5. package/dist/{gulp-CPIE1yPk.cjs → gulp-Bun9iCRE.cjs} +5 -5
  6. package/dist/{gulp-DCItlfoq.js → gulp-BydhuCbr.js} +4 -4
  7. package/dist/gulp.cjs +1 -1
  8. package/dist/gulp.js +1 -1
  9. package/dist/{hmr-timing-Chyd_Yfw.cjs → hmr-timing-D607CWrq.cjs} +1 -1
  10. package/dist/{hmr-timing-BevXxu6p.js → hmr-timing-Gs9P-QtZ.js} +100 -2
  11. package/dist/index.cjs +3 -3
  12. package/dist/index.js +3 -3
  13. package/dist/{pipeline-helpers-Cwv-X4Rj.cjs → pipeline-helpers-BLpoT8fX.cjs} +2 -2
  14. package/dist/rspack.cjs +1 -1
  15. package/dist/rspack.js +1 -1
  16. package/dist/{source-candidate-scan-signature-DG5mQZ8o.cjs → source-candidate-scan-signature-BGDNJE2r.cjs} +1 -1
  17. package/dist/{source-candidate-scan-signature-DLFqYads.js → source-candidate-scan-signature-CdjPWQqv.js} +1 -1
  18. package/dist/{v4-generation-core-Dtmu8Yax.cjs → v4-generation-core-BrkM1vCs.cjs} +110 -0
  19. package/dist/{vite-Bk1YU9L0.js → vite-DM-U-Ins.js} +64 -106
  20. package/dist/{vite-DmN_Y8Uk.cjs → vite-n0mRgEcF.cjs} +65 -107
  21. package/dist/vite.cjs +1 -1
  22. package/dist/vite.js +1 -1
  23. package/dist/weapp-tw-css-import-rewrite-loader.cjs +2 -2
  24. package/dist/{webpack-DvmrFist.cjs → webpack-Bf8yJwTO.cjs} +4 -4
  25. package/dist/{webpack-DtkSnYyR.js → webpack-BlUJf8Ru.js} +3 -3
  26. package/dist/webpack.cjs +1 -1
  27. package/dist/webpack.js +1 -1
  28. package/package.json +1 -1
  29. package/dist/bundlers/vite/processed-css-assets/empty-at-rule.d.ts +0 -1
@@ -0,0 +1,2 @@
1
+ export declare function hasEmptyAtRuleBlockCandidate(css: string): boolean;
2
+ export declare function finalizeMiniProgramCssStructure(css: string): string;
@@ -1,6 +1,14 @@
1
1
  import type { OutputAsset, OutputChunk } from 'rollup';
2
2
  import type { GenerateBundleContext } from './types.js';
3
3
  import type { IStyleHandlerOptions } from '../../../types/index.js';
4
+ export declare function finalizeMiniProgramCssAssetStructures(bundle: Record<string, OutputAsset | OutputChunk>, options: {
5
+ cssMatcher: GenerateBundleContext['opts']['cssMatcher'];
6
+ files?: ReadonlySet<string> | undefined;
7
+ isWebGeneratorTarget: boolean;
8
+ onUpdate: GenerateBundleContext['opts']['onUpdate'];
9
+ recordCssAssetResult: GenerateBundleContext['recordCssAssetResult'];
10
+ debug?: GenerateBundleContext['debug'];
11
+ }): number;
4
12
  export declare function finalizeMiniProgramCssAssets(bundle: Record<string, OutputAsset | OutputChunk>, options: {
5
13
  cssMatcher: GenerateBundleContext['opts']['cssMatcher'];
6
14
  getCssHandlerOptions: (file: string) => IStyleHandlerOptions;
@@ -2,7 +2,6 @@ import type { OutputAsset, OutputBundle } from 'rollup';
2
2
  import type { CollectViteProcessedCssAssetOptions } from './markers-imports.js';
3
3
  export declare function restoreCssImportAtRules(source: string, filtered: string, file?: string): string;
4
4
  export declare function removeCommentOnlyAtRules(css: string): string;
5
- export declare function removeEmptyCssAtRules(css: string): string;
6
5
  export declare function collectImportedBundleCssSources(bundle: OutputBundle, importedStyleFiles: Set<string>): string[];
7
6
  export declare function collectBundleAssetFiles(bundle: OutputBundle): Set<string>;
8
7
  export declare function resolveConfiguredCssEntryRootInjectionTarget(bundle: OutputBundle, options: Pick<CollectViteProcessedCssAssetOptions, 'cssPipelineStrategy' | 'createCssPipelineContext' | 'opts'>, sourceFile: string | undefined, outputFile: string): string | undefined;
@@ -31,6 +31,7 @@ export interface CollectViteProcessedCssAssetOptions {
31
31
  recordCssAssetResult?: CssAssetResultRecorder | undefined;
32
32
  recordViteProcessedCssAssetResult?: CssAssetResultRecorder | undefined;
33
33
  resolveViteProcessedCssOutputFile?: ((file: string) => string | undefined) | undefined;
34
+ onAssetWrite?: ((file: string) => void) | undefined;
34
35
  subpackageRoots?: Set<string> | undefined;
35
36
  transformCss?: ((css: string, file: string) => string) | undefined;
36
37
  debug?: ((format: string, ...args: unknown[]) => void) | undefined;
@@ -1,9 +1,9 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-CVvi-lCc.cjs");
2
2
  const require_generator = require("./generator-BE34PYSC.cjs");
3
3
  const require_options = require("./options-hVsoTfwL.cjs");
4
- const require_v4_generation_core = require("./v4-generation-core-Dtmu8Yax.cjs");
4
+ const require_v4_generation_core = require("./v4-generation-core-BrkM1vCs.cjs");
5
5
  const require_wxml = require("./wxml-DSMNuUaP.cjs");
6
- const require_hmr_timing = require("./hmr-timing-Chyd_Yfw.cjs");
6
+ const require_hmr_timing = require("./hmr-timing-D607CWrq.cjs");
7
7
  const require_context = require("./context-OqD_eBxQ.cjs");
8
8
  const require_tailwindcss = require("./tailwindcss-DcpiKvmJ.cjs");
9
9
  const require_style_options = require("./style-options-B_ppaVIg.cjs");
@@ -261,7 +261,7 @@ function createGulpFileTransforms(context) {
261
261
  const generatedCss = stage === "generate" && generated ? `${require_v4_generation_core.createBundlerGeneratedCssMarker("gulp", file.path)}\n${css}` : css;
262
262
  const outputCss = stage === "generate" ? generatedCss : (0, _weapp_tailwindcss_postcss.rewriteLocalCssImportRequestsForOutput)(generatedCss, { styleOutputExtension });
263
263
  debug("css handle: %s", file.path);
264
- return { result: outputCss };
264
+ return { result: stage === "transform" ? require_v4_generation_core.finalizeMiniProgramCssStructure(outputCss) : outputCss };
265
265
  }
266
266
  });
267
267
  rememberGulpProcessCacheKey(gulpProcessCacheKeys, file.path);
@@ -279,11 +279,11 @@ function createGulpFileTransforms(context) {
279
279
  const cssHandlerOptions = resolveWxssFileHandlerOptions(file, source, options);
280
280
  const handled = await styleHandler(source, cssHandlerOptions);
281
281
  const preflightMode = generatedCssPreflightModeByFile.get(file.path);
282
- writeGulpFileAsset(file, (0, _weapp_tailwindcss_postcss.rewriteLocalCssImportRequestsForOutput)(generatedCss ? require_v4_generation_core.finalizeMiniProgramGeneratorCss(handled.css, "weapp", runtimeState.tailwindRuntime.majorVersion, opts.cssPreflight, {
282
+ writeGulpFileAsset(file, require_v4_generation_core.finalizeMiniProgramCssStructure((0, _weapp_tailwindcss_postcss.rewriteLocalCssImportRequestsForOutput)(generatedCss ? require_v4_generation_core.finalizeMiniProgramGeneratorCss(handled.css, "weapp", runtimeState.tailwindRuntime.majorVersion, opts.cssPreflight, {
283
283
  injectPreflight: preflightMode?.inject ?? cssHandlerOptions.isMainChunk,
284
284
  preservePreflight: preflightMode?.preserve ?? cssHandlerOptions.isMainChunk,
285
285
  styleOptions: cssHandlerOptions
286
- }) : handled.css, { styleOutputExtension }));
286
+ }) : handled.css, { styleOutputExtension })));
287
287
  debug("css adapt: %s", file.path);
288
288
  }, () => resolveGulpTransformTimingDetails("css:adapt"));
289
289
  const transformJs = (options = {}) => createVinylTransform("js", async (file) => {
@@ -1,6 +1,6 @@
1
1
  import { Pt as getTailwindV4IncrementalGenerateCacheStats, Q as hasTailwindRootDirectives, _ as upsertTailwindV4CssSource, et as normalizeTailwindConfigDirectives, g as removeTailwindV4CssSource, h as hasConfiguredTailwindV4CssRoots, nt as normalizeTailwindSourceForGenerator, vt as prependConfigDirective } from "./generator-DYeAa2-5.js";
2
2
  import { l as getRuntimeClassSetSignature, p as resolveSourceScanEntries } from "./tailwindcss-CTpCc_nd.js";
3
- import { $ as createCompilationDependencyChanges, C as createBundlerGeneratedCssMarker, D as annotateCssSourceTrace, E as stripBundlerGeneratedCssMarkers, G as createRuntimeAffectingSourceSignature, H as removeRuntimeCompilationBuildStateFiles, I as rewriteLocalCssImportRequestsForOutput, J as getCompilerShadowRunSnapshot, K as disposeCompilerOwner, L as splitLocalCssImports, M as createRuntimeClassSetManager, O as createCssSourceTraceCacheSignature, Q as recordCompilationDependencyChanges, R as finalizeCompilerShadowRun, V as createRuntimeCompilationBuildState, W as updateRuntimeCompilationBuildState, X as getCompilationScopeDependencyRevision, Y as AssetEmissionPlan, Z as invalidateCompilationScope, et as createSourceCandidateCollector, j as processCachedTask, k as createCssTokenSourceMap, n as emitHmrTiming, q as beginCompilerShadowRun, r as generateTailwindV4Css, w as hasBundlerGeneratedCssMarker, y as finalizeMiniProgramGeneratorCss, z as buildRuntimeCompilationSnapshot } from "./hmr-timing-BevXxu6p.js";
3
+ import { $ as invalidateCompilationScope, A as createCssSourceTraceCacheSignature, B as finalizeCompilerShadowRun, C as createBundlerGeneratedCssMarker, D as finalizeMiniProgramCssStructure, E as stripBundlerGeneratedCssMarkers, J as disposeCompilerOwner, K as updateRuntimeCompilationBuildState, N as processCachedTask, P as createRuntimeClassSetManager, Q as getCompilationScopeDependencyRevision, R as rewriteLocalCssImportRequestsForOutput, U as createRuntimeCompilationBuildState, V as buildRuntimeCompilationSnapshot, W as removeRuntimeCompilationBuildStateFiles, X as getCompilerShadowRunSnapshot, Y as beginCompilerShadowRun, Z as AssetEmissionPlan, et as recordCompilationDependencyChanges, j as createCssTokenSourceMap, k as annotateCssSourceTrace, n as emitHmrTiming, nt as createSourceCandidateCollector, q as createRuntimeAffectingSourceSignature, r as generateTailwindV4Css, tt as createCompilationDependencyChanges, w as hasBundlerGeneratedCssMarker, y as finalizeMiniProgramGeneratorCss, z as splitLocalCssImports } from "./hmr-timing-Gs9P-QtZ.js";
4
4
  import { h as createDebug } from "./wxml-IBzZSaQC.js";
5
5
  import { l as createTailwindRuntimeReadyPromise, n as normalizeStyleHandlerMajorVersion, o as shouldSkipJsTransform, t as getCompilerContext, u as ensureRuntimeClassSet } from "./context-YAvTyPV2.js";
6
6
  import fs from "node:fs";
@@ -252,7 +252,7 @@ function createGulpFileTransforms(context) {
252
252
  const generatedCss = stage === "generate" && generated ? `${createBundlerGeneratedCssMarker("gulp", file.path)}\n${css}` : css;
253
253
  const outputCss = stage === "generate" ? generatedCss : rewriteLocalCssImportRequestsForOutput(generatedCss, { styleOutputExtension });
254
254
  debug("css handle: %s", file.path);
255
- return { result: outputCss };
255
+ return { result: stage === "transform" ? finalizeMiniProgramCssStructure(outputCss) : outputCss };
256
256
  }
257
257
  });
258
258
  rememberGulpProcessCacheKey(gulpProcessCacheKeys, file.path);
@@ -270,11 +270,11 @@ function createGulpFileTransforms(context) {
270
270
  const cssHandlerOptions = resolveWxssFileHandlerOptions(file, source, options);
271
271
  const handled = await styleHandler(source, cssHandlerOptions);
272
272
  const preflightMode = generatedCssPreflightModeByFile.get(file.path);
273
- writeGulpFileAsset(file, rewriteLocalCssImportRequestsForOutput(generatedCss ? finalizeMiniProgramGeneratorCss(handled.css, "weapp", runtimeState.tailwindRuntime.majorVersion, opts.cssPreflight, {
273
+ writeGulpFileAsset(file, finalizeMiniProgramCssStructure(rewriteLocalCssImportRequestsForOutput(generatedCss ? finalizeMiniProgramGeneratorCss(handled.css, "weapp", runtimeState.tailwindRuntime.majorVersion, opts.cssPreflight, {
274
274
  injectPreflight: preflightMode?.inject ?? cssHandlerOptions.isMainChunk,
275
275
  preservePreflight: preflightMode?.preserve ?? cssHandlerOptions.isMainChunk,
276
276
  styleOptions: cssHandlerOptions
277
- }) : handled.css, { styleOutputExtension }));
277
+ }) : handled.css, { styleOutputExtension })));
278
278
  debug("css adapt: %s", file.path);
279
279
  }, () => resolveGulpTransformTimingDetails("css:adapt"));
280
280
  const transformJs = (options = {}) => createVinylTransform("js", async (file) => {
package/dist/gulp.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_gulp = require("./gulp-CPIE1yPk.cjs");
2
+ const require_gulp = require("./gulp-Bun9iCRE.cjs");
3
3
  exports.WeappTailwindcss = require_gulp.createPlugins;
4
4
  exports.createPlugins = require_gulp.createPlugins;
5
5
  exports.weappTailwindcss = require_gulp.createPlugins;
package/dist/gulp.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as createPlugins } from "./gulp-DCItlfoq.js";
1
+ import { t as createPlugins } from "./gulp-BydhuCbr.js";
2
2
  export { createPlugins as WeappTailwindcss, createPlugins, createPlugins as weappTailwindcss };
@@ -1,6 +1,6 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-CVvi-lCc.cjs");
2
2
  const require_generator = require("./generator-BE34PYSC.cjs");
3
- const require_v4_generation_core = require("./v4-generation-core-Dtmu8Yax.cjs");
3
+ const require_v4_generation_core = require("./v4-generation-core-BrkM1vCs.cjs");
4
4
  const require_wxml = require("./wxml-DSMNuUaP.cjs");
5
5
  const require_tailwindcss = require("./tailwindcss-DcpiKvmJ.cjs");
6
6
  let node_process = require("node:process");
@@ -8,7 +8,7 @@ import { existsSync, readFileSync } from "node:fs";
8
8
  import path from "node:path";
9
9
  import process from "node:process";
10
10
  import { extractRawCandidatesWithPositions, extractSourceCandidates, extractValidCandidates, resolveProjectSourceFiles, resolveValidTailwindV4Candidates, splitCandidateTokens } from "@tailwindcss-mangle/engine";
11
- import { cleanLocalCssImportWrapperTailwindDirectives, cleanLocalCssImportWrapperTailwindDirectivesRoot, filterExistingCssRules, isPureLocalCssImportWrapper, isPureLocalCssImportWrapperRoot, normalizeMiniProgramGeneratedCssForPostcss, postcss, removeMatchingLocalCssImports, removeTailwindPostcssPlugins, restoreLocalCssImports, rewriteLocalCssImportRequestsForOutput, splitLocalCssImports, splitLocalCssImportsRoot, transformWebCssCompat } from "@weapp-tailwindcss/postcss";
11
+ import { cleanLocalCssImportWrapperTailwindDirectives, cleanLocalCssImportWrapperTailwindDirectivesRoot, filterExistingCssRules, isPureLocalCssImportWrapper, isPureLocalCssImportWrapperRoot, normalizeMiniProgramGeneratedCssForPostcss, postcss, removeEmptyAtRules, removeMatchingLocalCssImports, removeTailwindPostcssPlugins, restoreLocalCssImports, rewriteLocalCssImportRequestsForOutput, splitLocalCssImports, splitLocalCssImportsRoot, transformWebCssCompat } from "@weapp-tailwindcss/postcss";
12
12
  import { LRUCache } from "lru-cache";
13
13
  import { readFile } from "node:fs/promises";
14
14
  import { Parser } from "htmlparser2";
@@ -2440,6 +2440,104 @@ function annotateCssSourceTrace(css, options) {
2440
2440
  }
2441
2441
  }
2442
2442
  //#endregion
2443
+ //#region src/bundlers/shared/final-css-cleanup.ts
2444
+ function isAtRuleNameCharacter(code) {
2445
+ return code === 45 || code >= 65 && code <= 90 || code >= 97 && code <= 122;
2446
+ }
2447
+ function isCssWhitespace(code) {
2448
+ return code === 9 || code === 10 || code === 12 || code === 13 || code === 32;
2449
+ }
2450
+ function findAtRuleBlockStart(css, start) {
2451
+ let parenthesisDepth = 0;
2452
+ let quote = 0;
2453
+ let squareBracketDepth = 0;
2454
+ for (let index = start; index < css.length; index++) {
2455
+ const code = css.charCodeAt(index);
2456
+ if (quote !== 0) {
2457
+ if (code === 92) index++;
2458
+ else if (code === quote) quote = 0;
2459
+ continue;
2460
+ }
2461
+ if (code === 34 || code === 39) {
2462
+ quote = code;
2463
+ continue;
2464
+ }
2465
+ if (code === 92) {
2466
+ index++;
2467
+ continue;
2468
+ }
2469
+ if (code === 47 && css.charCodeAt(index + 1) === 42) {
2470
+ const commentEnd = css.indexOf("*/", index + 2);
2471
+ if (commentEnd < 0) return -1;
2472
+ index = commentEnd + 1;
2473
+ continue;
2474
+ }
2475
+ if (code === 40) {
2476
+ parenthesisDepth++;
2477
+ continue;
2478
+ }
2479
+ if (code === 41 && parenthesisDepth > 0) {
2480
+ parenthesisDepth--;
2481
+ continue;
2482
+ }
2483
+ if (code === 91) {
2484
+ squareBracketDepth++;
2485
+ continue;
2486
+ }
2487
+ if (code === 93 && squareBracketDepth > 0) {
2488
+ squareBracketDepth--;
2489
+ continue;
2490
+ }
2491
+ if (code === 123 && parenthesisDepth === 0 && squareBracketDepth === 0) return index;
2492
+ if ((code === 59 || code === 125) && parenthesisDepth === 0 && squareBracketDepth === 0) return -1;
2493
+ }
2494
+ return -1;
2495
+ }
2496
+ function isEmptyAtRuleBody(css, blockStart) {
2497
+ for (let index = blockStart + 1; index < css.length; index++) {
2498
+ const code = css.charCodeAt(index);
2499
+ if (isCssWhitespace(code)) continue;
2500
+ if (code === 47 && css.charCodeAt(index + 1) === 42) {
2501
+ const commentEnd = css.indexOf("*/", index + 2);
2502
+ if (commentEnd < 0) return false;
2503
+ index = commentEnd + 1;
2504
+ continue;
2505
+ }
2506
+ return code === 125;
2507
+ }
2508
+ return false;
2509
+ }
2510
+ function hasEmptyAtRuleBlockCandidate(css) {
2511
+ let searchFrom = 0;
2512
+ while (searchFrom < css.length) {
2513
+ const atRuleStart = css.indexOf("@", searchFrom);
2514
+ if (atRuleStart < 0) return false;
2515
+ searchFrom = atRuleStart + 1;
2516
+ if (!isAtRuleNameCharacter(css.charCodeAt(searchFrom))) continue;
2517
+ const blockStart = findAtRuleBlockStart(css, searchFrom + 1);
2518
+ if (blockStart >= 0 && isEmptyAtRuleBody(css, blockStart)) return true;
2519
+ }
2520
+ return false;
2521
+ }
2522
+ /**
2523
+ * 在小程序样式进入最终产物图时递归清理空的块级 at-rule。
2524
+ */
2525
+ function finalizeMiniProgramCssStructure(css) {
2526
+ if (!hasEmptyAtRuleBlockCandidate(css)) return css;
2527
+ try {
2528
+ const root = postcss.parse(css);
2529
+ let removed = 0;
2530
+ let passRemoved = 0;
2531
+ do {
2532
+ passRemoved = removeEmptyAtRules(root);
2533
+ removed += passRemoved;
2534
+ } while (passRemoved > 0);
2535
+ return removed > 0 ? root.toString() : css;
2536
+ } catch {
2537
+ return css;
2538
+ }
2539
+ }
2540
+ //#endregion
2443
2541
  //#region src/bundlers/shared/generated-css-marker.ts
2444
2542
  const BUNDLER_GENERATED_CSS_MARKER_RE = /\/\*!?\s*weapp-tailwindcss (?:gulp|vite|webpack)-generated-css(?:\s*:\s*[^\s*]+)?\s*\*\/\s*/i;
2445
2543
  const BUNDLER_GENERATED_CSS_MARKER_GLOBAL_RE = /\/\*!?\s*weapp-tailwindcss (?:gulp|vite|webpack)-generated-css(?:\s*:\s*[^\s*]+)?\s*\*\/\s*/gi;
@@ -5671,4 +5769,4 @@ function createHmrTimingRecorder(bundler) {
5671
5769
  };
5672
5770
  }
5673
5771
  //#endregion
5674
- export { createCompilationDependencyChanges as $, isCssSourceTraceEnabled as A, createRuntimeCompilationAffectingSignature as B, createBundlerGeneratedCssMarker as C, annotateCssSourceTrace as D, stripBundlerGeneratedCssMarkers as E, isPureLocalCssImportWrapper as F, createRuntimeAffectingSourceSignature as G, removeRuntimeCompilationBuildStateFiles as H, rewriteLocalCssImportRequestsForOutput as I, getCompilerShadowRunSnapshot as J, disposeCompilerOwner as K, splitLocalCssImports as L, createRuntimeClassSetManager as M, collectStrictEscapedRuntimeCandidates as N, createCssSourceTraceCacheSignature as O, createEscapeFragments as P, recordCompilationDependencyChanges as Q, finalizeCompilerShadowRun as R, stripRequestQuery as S, parseBundlerGeneratedCssMarkerBlocks as T, resetRuntimeCompilationBuildState as U, createRuntimeCompilationBuildState as V, updateRuntimeCompilationBuildState as W, getCompilationScopeDependencyRevision as X, AssetEmissionPlan as Y, invalidateCompilationScope as Z, collectFrameworkPostcssOptionsFromLoaderEntries as _, extractMarkedUserLayerComponentsCss as a, hasMiniProgramTailwindV4PreflightReset as b, pushConcurrentTaskFactories as c, normalizeMiniProgramGeneratorCssSource as d, createSourceCandidateCollector as et, normalizeMiniProgramImportShell as f, captureResolvedFrameworkPostcssOptions as g, captureFrameworkPostcssOptions as h, validateCandidatesByGenerator as i, resolveSourceCandidateScanFiles as it, processCachedTask as j, createCssTokenSourceMap as k, resolveTaskConcurrency as l, removeGeneratedSelectorCompatCss as m, emitHmrTiming as n, isSourceCandidateRequest as nt, mergeMarkedUserLayerComponentsCss as o, scoreTailwindV4CssSourceFileMatch as p, beginCompilerShadowRun as q, generateTailwindV4Css as r, extractCandidatesFromSource as rt, collectRawSourceClassSelectors as s, createHmrTimingRecorder as t, createSourceCandidateStore as tt, runWithConcurrency as u, createCssSourceOrderAppend as v, hasBundlerGeneratedCssMarker as w, isSourceStyleRequest as x, finalizeMiniProgramGeneratorCss as y, buildRuntimeCompilationSnapshot as z };
5772
+ export { invalidateCompilationScope as $, createCssSourceTraceCacheSignature as A, finalizeCompilerShadowRun as B, createBundlerGeneratedCssMarker as C, finalizeMiniProgramCssStructure as D, stripBundlerGeneratedCssMarkers as E, collectStrictEscapedRuntimeCandidates as F, resetRuntimeCompilationBuildState as G, createRuntimeCompilationAffectingSignature as H, createEscapeFragments as I, disposeCompilerOwner as J, updateRuntimeCompilationBuildState as K, isPureLocalCssImportWrapper as L, isCssSourceTraceEnabled as M, processCachedTask as N, hasEmptyAtRuleBlockCandidate as O, createRuntimeClassSetManager as P, getCompilationScopeDependencyRevision as Q, rewriteLocalCssImportRequestsForOutput as R, stripRequestQuery as S, parseBundlerGeneratedCssMarkerBlocks as T, createRuntimeCompilationBuildState as U, buildRuntimeCompilationSnapshot as V, removeRuntimeCompilationBuildStateFiles as W, getCompilerShadowRunSnapshot as X, beginCompilerShadowRun as Y, AssetEmissionPlan as Z, collectFrameworkPostcssOptionsFromLoaderEntries as _, extractMarkedUserLayerComponentsCss as a, extractCandidatesFromSource as at, hasMiniProgramTailwindV4PreflightReset as b, pushConcurrentTaskFactories as c, normalizeMiniProgramGeneratorCssSource as d, recordCompilationDependencyChanges as et, normalizeMiniProgramImportShell as f, captureResolvedFrameworkPostcssOptions as g, captureFrameworkPostcssOptions as h, validateCandidatesByGenerator as i, isSourceCandidateRequest as it, createCssTokenSourceMap as j, annotateCssSourceTrace as k, resolveTaskConcurrency as l, removeGeneratedSelectorCompatCss as m, emitHmrTiming as n, createSourceCandidateCollector as nt, mergeMarkedUserLayerComponentsCss as o, resolveSourceCandidateScanFiles as ot, scoreTailwindV4CssSourceFileMatch as p, createRuntimeAffectingSourceSignature as q, generateTailwindV4Css as r, createSourceCandidateStore as rt, collectRawSourceClassSelectors as s, createHmrTimingRecorder as t, createCompilationDependencyChanges as tt, runWithConcurrency as u, createCssSourceOrderAppend as v, hasBundlerGeneratedCssMarker as w, isSourceStyleRequest as x, finalizeMiniProgramGeneratorCss as y, splitLocalCssImports as z };
package/dist/index.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_framework = require("./framework.cjs");
3
3
  const require_generator = require("./generator-BE34PYSC.cjs");
4
- const require_gulp = require("./gulp-CPIE1yPk.cjs");
4
+ const require_gulp = require("./gulp-Bun9iCRE.cjs");
5
5
  const require_postcss = require("./postcss.cjs");
6
- const require_vite = require("./vite-DmN_Y8Uk.cjs");
7
- const require_webpack = require("./webpack-DvmrFist.cjs");
6
+ const require_vite = require("./vite-n0mRgEcF.cjs");
7
+ const require_webpack = require("./webpack-Bf8yJwTO.cjs");
8
8
  require("./webpack.cjs");
9
9
  let _weapp_tailwindcss_postcss = require("@weapp-tailwindcss/postcss");
10
10
  exports.WeappTailwindcss = require_vite.WeappTailwindcss;
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { detectAppType, detectAppTypeFromEnv, detectAppTypeFromPackageJson, isMpxPackage, isRunningInHBuilderX, isTaroPackage, isUniAppPackage, isUniAppVitePackage, isUniAppXManifest, isUniAppXPackage, isWeappVitePackage, resolveImplicitAppTypeFromViteRoot, resolveMpxPlatform, resolvePlatform, resolveTaroPlatform, resolveUniAppXPlatform, resolveUniPlatform, resolveUniPlatformsFromEnv, resolveUniUtsPlatform } from "./framework.js";
2
2
  import { t as createWeappTailwindcssGenerator } from "./generator-DYeAa2-5.js";
3
- import { t as createPlugins } from "./gulp-DCItlfoq.js";
3
+ import { t as createPlugins } from "./gulp-BydhuCbr.js";
4
4
  import weappTailwindcssPostcssPlugin from "./postcss.js";
5
- import { t as WeappTailwindcss } from "./vite-Bk1YU9L0.js";
6
- import { n as weappTailwindcssPackageDir } from "./webpack-DtkSnYyR.js";
5
+ import { t as WeappTailwindcss } from "./vite-DM-U-Ins.js";
6
+ import { n as weappTailwindcssPackageDir } from "./webpack-BlUJf8Ru.js";
7
7
  import "./webpack.js";
8
8
  import { unitConversionComposeRules, unitConversionPresets } from "@weapp-tailwindcss/postcss";
9
9
  export { WeappTailwindcss, createPlugins, createWeappTailwindcssGenerator, detectAppType, detectAppTypeFromEnv, detectAppTypeFromPackageJson, isMpxPackage, isRunningInHBuilderX, isTaroPackage, isUniAppPackage, isUniAppVitePackage, isUniAppXManifest, isUniAppXPackage, isWeappVitePackage, resolveImplicitAppTypeFromViteRoot, resolveMpxPlatform, resolvePlatform, resolveTaroPlatform, resolveUniAppXPlatform, resolveUniPlatform, resolveUniPlatformsFromEnv, resolveUniUtsPlatform, unitConversionComposeRules, unitConversionPresets, weappTailwindcssPackageDir, weappTailwindcssPostcssPlugin };
@@ -1,6 +1,6 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-CVvi-lCc.cjs");
2
2
  const require_generator = require("./generator-BE34PYSC.cjs");
3
- const require_v4_generation_core = require("./v4-generation-core-Dtmu8Yax.cjs");
3
+ const require_v4_generation_core = require("./v4-generation-core-BrkM1vCs.cjs");
4
4
  const require_defaults = require("./defaults.cjs");
5
5
  const require_style_options = require("./style-options-B_ppaVIg.cjs");
6
6
  let node_path = require("node:path");
@@ -517,7 +517,7 @@ function finalizeWebpackCssAssetSource(source, compilerOptions, isWebGeneratorTa
517
517
  function finalizeWebpackCssAssetOutputSource(source, compilerOptions, isWebGeneratorTarget) {
518
518
  if (isWebGeneratorTarget) return source;
519
519
  const styleOptions = require_style_options.resolveStyleOptionsFromContext(compilerOptions);
520
- return (0, _weapp_tailwindcss_postcss.stripMiniProgramCssSpecificityPlaceholders)(require_generator.removeMiniProgramHoverSelectors((0, _weapp_tailwindcss_postcss.dedupeCoveredCssRules)(dedupeMiniProgramPreflightSelectorRules(source)), styleOptions.cssRemoveHoverPseudoClass));
520
+ return require_v4_generation_core.finalizeMiniProgramCssStructure((0, _weapp_tailwindcss_postcss.stripMiniProgramCssSpecificityPlaceholders)(require_generator.removeMiniProgramHoverSelectors((0, _weapp_tailwindcss_postcss.dedupeCoveredCssRules)(dedupeMiniProgramPreflightSelectorRules(source)), styleOptions.cssRemoveHoverPseudoClass)));
521
521
  }
522
522
  function collectWebpackJsRuntimeCandidatesFromAssets(options) {
523
523
  if (options.isWebGeneratorTarget) return;
package/dist/rspack.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_rolldown_runtime = require("./rolldown-runtime-CVvi-lCc.cjs");
3
- const require_webpack = require("./webpack-DvmrFist.cjs");
3
+ const require_webpack = require("./webpack-Bf8yJwTO.cjs");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_rolldown_runtime.__toESM(node_path, 1);
6
6
  //#region src/bundlers/rspack/index.ts
package/dist/rspack.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as weappTailwindcssPackageDir, r as __dirname, t as WeappTailwindcss } from "./webpack-DtkSnYyR.js";
1
+ import { n as weappTailwindcssPackageDir, r as __dirname, t as WeappTailwindcss } from "./webpack-BlUJf8Ru.js";
2
2
  import path from "node:path";
3
3
  //#region src/bundlers/rspack/index.ts
4
4
  const CSS_IMPORT_REWRITE_LOADER_NAME = "weapp-tw-css-import-rewrite-loader";
@@ -3,7 +3,7 @@ const require_framework = require("./framework.cjs");
3
3
  const require_generator = require("./generator-BE34PYSC.cjs");
4
4
  require("./auto-DtU6f3X6.cjs");
5
5
  const require_options = require("./options-hVsoTfwL.cjs");
6
- const require_v4_generation_core = require("./v4-generation-core-Dtmu8Yax.cjs");
6
+ const require_v4_generation_core = require("./v4-generation-core-BrkM1vCs.cjs");
7
7
  let node_path = require("node:path");
8
8
  node_path = require_rolldown_runtime.__toESM(node_path, 1);
9
9
  let node_module = require("node:module");
@@ -2,7 +2,7 @@ import { detectAppType } from "./framework.js";
2
2
  import { At as toPosixPath } from "./generator-DYeAa2-5.js";
3
3
  import { n as hasCssMacroTailwindV4CustomVariantConditionalComments } from "./auto-2dg_uhEJ.js";
4
4
  import { _ as resolveTailwindV4EntriesFromCssCached, i as resolveUniAppXOptions } from "./tailwindcss-CTpCc_nd.js";
5
- import { x as isSourceStyleRequest } from "./hmr-timing-BevXxu6p.js";
5
+ import { x as isSourceStyleRequest } from "./hmr-timing-Gs9P-QtZ.js";
6
6
  import { createRequire } from "node:module";
7
7
  import path from "node:path";
8
8
  import { weappStyleInjector } from "weapp-style-injector/vite";
@@ -2041,6 +2041,104 @@ function annotateCssSourceTrace(css, options) {
2041
2041
  }
2042
2042
  }
2043
2043
  //#endregion
2044
+ //#region src/bundlers/shared/final-css-cleanup.ts
2045
+ function isAtRuleNameCharacter(code) {
2046
+ return code === 45 || code >= 65 && code <= 90 || code >= 97 && code <= 122;
2047
+ }
2048
+ function isCssWhitespace(code) {
2049
+ return code === 9 || code === 10 || code === 12 || code === 13 || code === 32;
2050
+ }
2051
+ function findAtRuleBlockStart(css, start) {
2052
+ let parenthesisDepth = 0;
2053
+ let quote = 0;
2054
+ let squareBracketDepth = 0;
2055
+ for (let index = start; index < css.length; index++) {
2056
+ const code = css.charCodeAt(index);
2057
+ if (quote !== 0) {
2058
+ if (code === 92) index++;
2059
+ else if (code === quote) quote = 0;
2060
+ continue;
2061
+ }
2062
+ if (code === 34 || code === 39) {
2063
+ quote = code;
2064
+ continue;
2065
+ }
2066
+ if (code === 92) {
2067
+ index++;
2068
+ continue;
2069
+ }
2070
+ if (code === 47 && css.charCodeAt(index + 1) === 42) {
2071
+ const commentEnd = css.indexOf("*/", index + 2);
2072
+ if (commentEnd < 0) return -1;
2073
+ index = commentEnd + 1;
2074
+ continue;
2075
+ }
2076
+ if (code === 40) {
2077
+ parenthesisDepth++;
2078
+ continue;
2079
+ }
2080
+ if (code === 41 && parenthesisDepth > 0) {
2081
+ parenthesisDepth--;
2082
+ continue;
2083
+ }
2084
+ if (code === 91) {
2085
+ squareBracketDepth++;
2086
+ continue;
2087
+ }
2088
+ if (code === 93 && squareBracketDepth > 0) {
2089
+ squareBracketDepth--;
2090
+ continue;
2091
+ }
2092
+ if (code === 123 && parenthesisDepth === 0 && squareBracketDepth === 0) return index;
2093
+ if ((code === 59 || code === 125) && parenthesisDepth === 0 && squareBracketDepth === 0) return -1;
2094
+ }
2095
+ return -1;
2096
+ }
2097
+ function isEmptyAtRuleBody(css, blockStart) {
2098
+ for (let index = blockStart + 1; index < css.length; index++) {
2099
+ const code = css.charCodeAt(index);
2100
+ if (isCssWhitespace(code)) continue;
2101
+ if (code === 47 && css.charCodeAt(index + 1) === 42) {
2102
+ const commentEnd = css.indexOf("*/", index + 2);
2103
+ if (commentEnd < 0) return false;
2104
+ index = commentEnd + 1;
2105
+ continue;
2106
+ }
2107
+ return code === 125;
2108
+ }
2109
+ return false;
2110
+ }
2111
+ function hasEmptyAtRuleBlockCandidate(css) {
2112
+ let searchFrom = 0;
2113
+ while (searchFrom < css.length) {
2114
+ const atRuleStart = css.indexOf("@", searchFrom);
2115
+ if (atRuleStart < 0) return false;
2116
+ searchFrom = atRuleStart + 1;
2117
+ if (!isAtRuleNameCharacter(css.charCodeAt(searchFrom))) continue;
2118
+ const blockStart = findAtRuleBlockStart(css, searchFrom + 1);
2119
+ if (blockStart >= 0 && isEmptyAtRuleBody(css, blockStart)) return true;
2120
+ }
2121
+ return false;
2122
+ }
2123
+ /**
2124
+ * 在小程序样式进入最终产物图时递归清理空的块级 at-rule。
2125
+ */
2126
+ function finalizeMiniProgramCssStructure(css) {
2127
+ if (!hasEmptyAtRuleBlockCandidate(css)) return css;
2128
+ try {
2129
+ const root = _weapp_tailwindcss_postcss.postcss.parse(css);
2130
+ let removed = 0;
2131
+ let passRemoved = 0;
2132
+ do {
2133
+ passRemoved = (0, _weapp_tailwindcss_postcss.removeEmptyAtRules)(root);
2134
+ removed += passRemoved;
2135
+ } while (passRemoved > 0);
2136
+ return removed > 0 ? root.toString() : css;
2137
+ } catch {
2138
+ return css;
2139
+ }
2140
+ }
2141
+ //#endregion
2044
2142
  //#region src/bundlers/shared/generated-css-marker.ts
2045
2143
  const BUNDLER_GENERATED_CSS_MARKER_RE = /\/\*!?\s*weapp-tailwindcss (?:gulp|vite|webpack)-generated-css(?:\s*:\s*[^\s*]+)?\s*\*\/\s*/i;
2046
2144
  const BUNDLER_GENERATED_CSS_MARKER_GLOBAL_RE = /\/\*!?\s*weapp-tailwindcss (?:gulp|vite|webpack)-generated-css(?:\s*:\s*[^\s*]+)?\s*\*\/\s*/gi;
@@ -5326,6 +5424,12 @@ Object.defineProperty(exports, "extractMarkedUserLayerComponentsCss", {
5326
5424
  return extractMarkedUserLayerComponentsCss;
5327
5425
  }
5328
5426
  });
5427
+ Object.defineProperty(exports, "finalizeMiniProgramCssStructure", {
5428
+ enumerable: true,
5429
+ get: function() {
5430
+ return finalizeMiniProgramCssStructure;
5431
+ }
5432
+ });
5329
5433
  Object.defineProperty(exports, "finalizeMiniProgramGeneratorCss", {
5330
5434
  enumerable: true,
5331
5435
  get: function() {
@@ -5356,6 +5460,12 @@ Object.defineProperty(exports, "hasBundlerGeneratedCssMarker", {
5356
5460
  return hasBundlerGeneratedCssMarker;
5357
5461
  }
5358
5462
  });
5463
+ Object.defineProperty(exports, "hasEmptyAtRuleBlockCandidate", {
5464
+ enumerable: true,
5465
+ get: function() {
5466
+ return hasEmptyAtRuleBlockCandidate;
5467
+ }
5468
+ });
5359
5469
  Object.defineProperty(exports, "hasMiniProgramTailwindV4PreflightReset", {
5360
5470
  enumerable: true,
5361
5471
  get: function() {
@@ -3,16 +3,16 @@ import { $ as hasTailwindSourceDirectives, B as stripMiniProgramCssSpecificityPl
3
3
  import { t as omitUndefined } from "./object-Bvy6-w9r.js";
4
4
  import { _ as resolveTailwindV4EntriesFromCssCached, a as findTailwindConfig, f as createSourceScanMatcher, h as resolveTailwindV4CssDependencies, i as resolveUniAppXOptions, l as getRuntimeClassSetSignature, m as discoverTailwindV4CssEntries, p as resolveSourceScanEntries, r as isUniAppXEnabled } from "./tailwindcss-CTpCc_nd.js";
5
5
  import "./utils-MVwpU07P.js";
6
- import { $ as createCompilationDependencyChanges, C as createBundlerGeneratedCssMarker, D as annotateCssSourceTrace, E as stripBundlerGeneratedCssMarkers, F as isPureLocalCssImportWrapper, G as createRuntimeAffectingSourceSignature, K as disposeCompilerOwner, M as createRuntimeClassSetManager, O as createCssSourceTraceCacheSignature, Q as recordCompilationDependencyChanges, R as finalizeCompilerShadowRun, S as stripRequestQuery, T as parseBundlerGeneratedCssMarkerBlocks, V as createRuntimeCompilationBuildState, W as updateRuntimeCompilationBuildState, Y as AssetEmissionPlan, a as extractMarkedUserLayerComponentsCss, d as normalizeMiniProgramGeneratorCssSource, et as createSourceCandidateCollector, f as normalizeMiniProgramImportShell, h as captureFrameworkPostcssOptions, i as validateCandidatesByGenerator, j as processCachedTask, k as createCssTokenSourceMap, nt as isSourceCandidateRequest, o as mergeMarkedUserLayerComponentsCss, p as scoreTailwindV4CssSourceFileMatch, q as beginCompilerShadowRun, r as generateTailwindV4Css, rt as extractCandidatesFromSource, t as createHmrTimingRecorder, u as runWithConcurrency, w as hasBundlerGeneratedCssMarker, x as isSourceStyleRequest, z as buildRuntimeCompilationSnapshot } from "./hmr-timing-BevXxu6p.js";
6
+ import { A as createCssSourceTraceCacheSignature, B as finalizeCompilerShadowRun, C as createBundlerGeneratedCssMarker, D as finalizeMiniProgramCssStructure, E as stripBundlerGeneratedCssMarkers, J as disposeCompilerOwner, K as updateRuntimeCompilationBuildState, L as isPureLocalCssImportWrapper, N as processCachedTask, O as hasEmptyAtRuleBlockCandidate, P as createRuntimeClassSetManager, S as stripRequestQuery, T as parseBundlerGeneratedCssMarkerBlocks, U as createRuntimeCompilationBuildState, V as buildRuntimeCompilationSnapshot, Y as beginCompilerShadowRun, Z as AssetEmissionPlan, a as extractMarkedUserLayerComponentsCss, at as extractCandidatesFromSource, d as normalizeMiniProgramGeneratorCssSource, et as recordCompilationDependencyChanges, f as normalizeMiniProgramImportShell, h as captureFrameworkPostcssOptions, i as validateCandidatesByGenerator, it as isSourceCandidateRequest, j as createCssTokenSourceMap, k as annotateCssSourceTrace, nt as createSourceCandidateCollector, o as mergeMarkedUserLayerComponentsCss, p as scoreTailwindV4CssSourceFileMatch, q as createRuntimeAffectingSourceSignature, r as generateTailwindV4Css, t as createHmrTimingRecorder, tt as createCompilationDependencyChanges, u as runWithConcurrency, w as hasBundlerGeneratedCssMarker, x as isSourceStyleRequest } from "./hmr-timing-Gs9P-QtZ.js";
7
7
  import { h as createDebug, m as replaceWxml } from "./wxml-IBzZSaQC.js";
8
8
  import { a as vitePluginName, c as collectRuntimeClassSet, d as refreshTailwindRuntimeState, f as normalizeFrameworkStylePlatform, l as createTailwindRuntimeReadyPromise, n as normalizeStyleHandlerMajorVersion, o as shouldSkipJsTransform, s as toCustomAttributesEntities, t as getCompilerContext } from "./context-YAvTyPV2.js";
9
- import { _ as createBuiltinViteStyleInjectorPlugins, a as createCandidateSignature, c as getSnapshotHash, d as classifyRuntimeEntry, f as resolvePackageDir, g as toAbsoluteOutputPath, h as resolveOutputSpecifier, i as createScopedGeneratorSourceTraceMap, l as hasRuntimeAffectingSourceChanges, m as normalizeOutputPathKey, n as createScopedGeneratorCandidateSignature, o as createJsHashSalt, p as resolvePluginDisabledState, r as createScopedGeneratorRuntime, s as createLinkedImpactSignature, t as createSourceCandidateScanSignature, u as summarizeStringDiff, x as resolveViteFrameworkProfile, y as viteStyleInjectorDelegates } from "./source-candidate-scan-signature-DLFqYads.js";
9
+ import { _ as createBuiltinViteStyleInjectorPlugins, a as createCandidateSignature, c as getSnapshotHash, d as classifyRuntimeEntry, f as resolvePackageDir, g as toAbsoluteOutputPath, h as resolveOutputSpecifier, i as createScopedGeneratorSourceTraceMap, l as hasRuntimeAffectingSourceChanges, m as normalizeOutputPathKey, n as createScopedGeneratorCandidateSignature, o as createJsHashSalt, p as resolvePluginDisabledState, r as createScopedGeneratorRuntime, s as createLinkedImpactSignature, t as createSourceCandidateScanSignature, u as summarizeStringDiff, x as resolveViteFrameworkProfile, y as viteStyleInjectorDelegates } from "./source-candidate-scan-signature-CdjPWQqv.js";
10
10
  import { t as logger$1 } from "./logger-BNzxZbZj.js";
11
11
  import fs, { existsSync, readFileSync, realpathSync } from "node:fs";
12
12
  import path from "node:path";
13
13
  import process$1 from "node:process";
14
14
  import { splitCandidateTokens } from "@tailwindcss-mangle/engine";
15
- import { collectCssImportRequestsRoot, compileCssMacroConditionalComments, containsCssAfterMinify, filterExistingCssRules, isMiniProgramLocalCssImportRequest, mergeCoveredCssRuleDeclarations, mergeMiniProgramPreflightRuleDeclarations, mergeMiniProgramThemeScopeRuleDeclarations, normalizeTailwindcssV4InfinityCalcCss, parseTailwindCssDirectiveRequest, postcss, removeEmptyAtRules, removeTailwindPostcssPlugins, removeTailwindSourceDirectivesRoot, removeUnsupportedMiniProgramCssImportsRoot, resolvePostcssConfig, transformWebCssCompat, transformWebCssSafeSelectors, unwrapUnsupportedCascadeLayers } from "@weapp-tailwindcss/postcss";
15
+ import { collectCssImportRequestsRoot, compileCssMacroConditionalComments, containsCssAfterMinify, filterExistingCssRules, isMiniProgramLocalCssImportRequest, mergeCoveredCssRuleDeclarations, mergeMiniProgramPreflightRuleDeclarations, mergeMiniProgramThemeScopeRuleDeclarations, normalizeTailwindcssV4InfinityCalcCss, parseTailwindCssDirectiveRequest, postcss, removeTailwindPostcssPlugins, removeTailwindSourceDirectivesRoot, removeUnsupportedMiniProgramCssImportsRoot, resolvePostcssConfig, transformWebCssCompat, transformWebCssSafeSelectors, unwrapUnsupportedCascadeLayers } from "@weapp-tailwindcss/postcss";
16
16
  import { LRUCache } from "lru-cache";
17
17
  import { readFile } from "node:fs/promises";
18
18
  import micromatch from "micromatch";
@@ -1331,86 +1331,6 @@ const mix = (del = delimiter) => {
1331
1331
  const posix = /* @__PURE__ */ mix(":");
1332
1332
  const win32 = /* @__PURE__ */ mix(";");
1333
1333
  //#endregion
1334
- //#region src/bundlers/vite/processed-css-assets/empty-at-rule.ts
1335
- function isAtRuleNameCharacter(code) {
1336
- return code === 45 || code >= 65 && code <= 90 || code >= 97 && code <= 122;
1337
- }
1338
- function isCssWhitespace(code) {
1339
- return code === 9 || code === 10 || code === 12 || code === 13 || code === 32;
1340
- }
1341
- function findAtRuleBlockStart(css, start) {
1342
- let parenthesisDepth = 0;
1343
- let quote = 0;
1344
- let squareBracketDepth = 0;
1345
- for (let index = start; index < css.length; index++) {
1346
- const code = css.charCodeAt(index);
1347
- if (quote !== 0) {
1348
- if (code === 92) index++;
1349
- else if (code === quote) quote = 0;
1350
- continue;
1351
- }
1352
- if (code === 34 || code === 39) {
1353
- quote = code;
1354
- continue;
1355
- }
1356
- if (code === 92) {
1357
- index++;
1358
- continue;
1359
- }
1360
- if (code === 47 && css.charCodeAt(index + 1) === 42) {
1361
- const commentEnd = css.indexOf("*/", index + 2);
1362
- if (commentEnd < 0) return -1;
1363
- index = commentEnd + 1;
1364
- continue;
1365
- }
1366
- if (code === 40) {
1367
- parenthesisDepth++;
1368
- continue;
1369
- }
1370
- if (code === 41 && parenthesisDepth > 0) {
1371
- parenthesisDepth--;
1372
- continue;
1373
- }
1374
- if (code === 91) {
1375
- squareBracketDepth++;
1376
- continue;
1377
- }
1378
- if (code === 93 && squareBracketDepth > 0) {
1379
- squareBracketDepth--;
1380
- continue;
1381
- }
1382
- if (code === 123 && parenthesisDepth === 0 && squareBracketDepth === 0) return index;
1383
- if ((code === 59 || code === 125) && parenthesisDepth === 0 && squareBracketDepth === 0) return -1;
1384
- }
1385
- return -1;
1386
- }
1387
- function isEmptyAtRuleBody(css, blockStart) {
1388
- for (let index = blockStart + 1; index < css.length; index++) {
1389
- const code = css.charCodeAt(index);
1390
- if (isCssWhitespace(code)) continue;
1391
- if (code === 47 && css.charCodeAt(index + 1) === 42) {
1392
- const commentEnd = css.indexOf("*/", index + 2);
1393
- if (commentEnd < 0) return false;
1394
- index = commentEnd + 1;
1395
- continue;
1396
- }
1397
- return code === 125;
1398
- }
1399
- return false;
1400
- }
1401
- function hasEmptyAtRuleBlockCandidate(css) {
1402
- let searchFrom = 0;
1403
- while (searchFrom < css.length) {
1404
- const atRuleStart = css.indexOf("@", searchFrom);
1405
- if (atRuleStart < 0) return false;
1406
- searchFrom = atRuleStart + 1;
1407
- if (!isAtRuleNameCharacter(css.charCodeAt(searchFrom))) continue;
1408
- const blockStart = findAtRuleBlockStart(css, searchFrom + 1);
1409
- if (blockStart >= 0 && isEmptyAtRuleBody(css, blockStart)) return true;
1410
- }
1411
- return false;
1412
- }
1413
- //#endregion
1414
1334
  //#region src/bundlers/vite/processed-css-assets/style-files.ts
1415
1335
  const CSS_OUTPUT_FILE_RE = /\.(?:css|wxss|acss|ttss|qss|jxss|tyss)(?:$|[?#])/i;
1416
1336
  function isCssOutputFile(file) {
@@ -1701,21 +1621,6 @@ function removeCommentOnlyAtRules(css) {
1701
1621
  return css;
1702
1622
  }
1703
1623
  }
1704
- function removeEmptyCssAtRules(css) {
1705
- if (!hasEmptyAtRuleBlockCandidate(css)) return css;
1706
- try {
1707
- const root = postcss.parse(css);
1708
- let removed = 0;
1709
- let passRemoved = 0;
1710
- do {
1711
- passRemoved = removeEmptyAtRules(root);
1712
- removed += passRemoved;
1713
- } while (passRemoved > 0);
1714
- return removed > 0 ? root.toString() : css;
1715
- } catch {
1716
- return css;
1717
- }
1718
- }
1719
1624
  function collectImportedBundleCssSources(bundle, importedStyleFiles) {
1720
1625
  if (importedStyleFiles.size === 0) return [];
1721
1626
  const importedFileNames = new Set([...importedStyleFiles].map((file) => posix.posix.basename(file)));
@@ -3036,7 +2941,10 @@ function collectViteProcessedCssAssetResults(bundle, options) {
3036
2941
  const singleMarkerFile = collectSingleViteGeneratedCssMarkerFile(rawSource);
3037
2942
  if (singleMarkerFile && (options.subpackageRoots == null || !isSubpackageOutputFile(file, options.subpackageRoots)) && shouldFilterRootGeneratedCssMarkerForScopedAsset(file, singleMarkerFile, options.resolveViteProcessedCssOutputFile)) nextCss = removeCssCoveredByRootStyleBundleSources(bundle, file, nextCss);
3038
2943
  nextCss = options.transformCss?.(nextCss, file) ?? nextCss;
3039
- if (nextCss !== rawSource) output.source = nextCss;
2944
+ if (nextCss !== rawSource) {
2945
+ output.source = nextCss;
2946
+ options.onAssetWrite?.(file);
2947
+ }
3040
2948
  options.markCssAssetProcessed?.(output, file);
3041
2949
  options.recordCssAssetResult?.(file, nextCss);
3042
2950
  const resolvedOutputFile = resolveViteGeneratedCssMarkerOutputFile(file, singleMarkerFile, existingAssetFiles, options.resolveViteProcessedCssOutputFile);
@@ -3049,6 +2957,7 @@ function collectViteProcessedCssAssetResults(bundle, options) {
3049
2957
  const targetNextCss = appendCss$1(targetRawSource, filterExistingCssRules(targetRawSource, nextCss).trim());
3050
2958
  if (targetNextCss !== targetRawSource) {
3051
2959
  targetAsset.source = targetNextCss;
2960
+ options.onAssetWrite?.(resolvedOutputFile);
3052
2961
  options.markCssAssetProcessed?.(targetAsset, resolvedOutputFile);
3053
2962
  options.recordCssAssetResult?.(resolvedOutputFile, targetNextCss);
3054
2963
  }
@@ -4823,9 +4732,10 @@ function resolveViteCssTransformCachePlan(options) {
4823
4732
  const cssRuntimeSignature = createCssRuntimeSignature(options.runtimeSignature, options.scopedGeneratorCandidateSignature);
4824
4733
  const rememberedCssRuntimeSignature = createRememberedCssRuntimeSignature(cssRuntimeSignature, options.cssRuntimeAffectingHash);
4825
4734
  const tailwindcssMajorVersion = options.tailwindcssMajorVersion ?? "unknown";
4735
+ const cssCacheKey = `${options.outputFile}:css:${cssRuntimeSignature}:${tailwindcssMajorVersion}`;
4826
4736
  return {
4827
- cssCacheKey: options.outputFile,
4828
- cssHashKey: `${options.outputFile}:css:${cssRuntimeSignature}:${tailwindcssMajorVersion}`,
4737
+ cssCacheKey,
4738
+ cssHashKey: cssCacheKey,
4829
4739
  cssRuntimeSignature,
4830
4740
  cssSharedCacheKey: [
4831
4741
  options.cssShareScope,
@@ -4962,6 +4872,31 @@ function readAssetSource$1(output) {
4962
4872
  function shouldFinalizeMiniProgramCssAsset(source) {
4963
4873
  return source.includes(":hover") || source.includes("does-not-exist") || hasMiniProgramCssSpecificityPlaceholders(source);
4964
4874
  }
4875
+ function finalizeMiniProgramCssAssetStructures(bundle, options) {
4876
+ if (options.isWebGeneratorTarget) return 0;
4877
+ const plan = new AssetEmissionPlan();
4878
+ const writeTargets = /* @__PURE__ */ new Map();
4879
+ let updated = 0;
4880
+ for (const [bundleFile, output] of Object.entries(bundle)) {
4881
+ if (output.type !== "asset") continue;
4882
+ const file = output.fileName || bundleFile;
4883
+ if (!options.cssMatcher(file) || options.files && !options.files.has(file)) continue;
4884
+ const rawSource = readAssetSource$1(output);
4885
+ const outputCss = finalizeMiniProgramCssStructure(rawSource);
4886
+ if (outputCss === rawSource) continue;
4887
+ plan.write(file, outputCss);
4888
+ writeTargets.set(file, output);
4889
+ options.recordCssAssetResult?.(file, outputCss);
4890
+ options.onUpdate(file, rawSource, outputCss);
4891
+ options.debug?.("remove final empty mini-program css at-rules: %s bytes=%d", file, outputCss.length);
4892
+ updated++;
4893
+ }
4894
+ applyViteAssetEmissionPlan(plan, {
4895
+ bundle,
4896
+ writeTargets
4897
+ });
4898
+ return updated;
4899
+ }
4965
4900
  async function finalizeMiniProgramCssAssets(bundle, options) {
4966
4901
  if (options.isWebGeneratorTarget) return 0;
4967
4902
  const plan = new AssetEmissionPlan();
@@ -4974,7 +4909,7 @@ async function finalizeMiniProgramCssAssets(bundle, options) {
4974
4909
  const rawSource = readAssetSource$1(output);
4975
4910
  if (rawSource.trim().length === 0) continue;
4976
4911
  if (options.lastCssResultByFile?.has(file)) {
4977
- const outputCss = stripMiniProgramCssSpecificityPlaceholders(removeEmptyCssAtRules(rawSource));
4912
+ const outputCss = stripMiniProgramCssSpecificityPlaceholders(finalizeMiniProgramCssStructure(rawSource));
4978
4913
  if (outputCss !== rawSource) {
4979
4914
  plan.write(file, outputCss);
4980
4915
  writeTargets.set(file, output);
@@ -4986,7 +4921,7 @@ async function finalizeMiniProgramCssAssets(bundle, options) {
4986
4921
  continue;
4987
4922
  }
4988
4923
  if (!shouldFinalizeMiniProgramCssAsset(rawSource)) {
4989
- const structurallyCleanSource = removeEmptyCssAtRules(rawSource);
4924
+ const structurallyCleanSource = finalizeMiniProgramCssStructure(rawSource);
4990
4925
  if (structurallyCleanSource !== rawSource) {
4991
4926
  plan.write(file, structurallyCleanSource);
4992
4927
  writeTargets.set(file, output);
@@ -5008,7 +4943,7 @@ async function finalizeMiniProgramCssAssets(bundle, options) {
5008
4943
  },
5009
4944
  cssPresetEnv: {}
5010
4945
  });
5011
- const outputCss = stripMiniProgramCssSpecificityPlaceholders(removeEmptyCssAtRules(css));
4946
+ const outputCss = stripMiniProgramCssSpecificityPlaceholders(finalizeMiniProgramCssStructure(css));
5012
4947
  if (outputCss === rawSource) continue;
5013
4948
  plan.write(file, outputCss);
5014
4949
  writeTargets.set(file, output);
@@ -7798,11 +7733,16 @@ function createViteCssFinalizerOutputPlugin(context) {
7798
7733
  const rootDir = resolvedConfig?.root ? path.resolve(resolvedConfig.root) : process$1.cwd();
7799
7734
  const outDir = resolvedConfig?.build?.outDir ? path.resolve(rootDir, resolvedConfig.build.outDir) : rootDir;
7800
7735
  const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig, opts.appType) ?? resolveSourceRootFromBundleGraph(resolvedConfig, bundle);
7736
+ const finalCssAssetFiles = /* @__PURE__ */ new Set();
7737
+ const trackFinalCssAssetUpdate = (file, original, generated) => {
7738
+ finalCssAssetFiles.add(file);
7739
+ opts.onUpdate(file, original, generated);
7740
+ };
7801
7741
  restoreFrameworkRootMiniProgramImportShellAssets(bundle, {
7802
7742
  debug,
7803
7743
  isWebGeneratorTarget,
7804
7744
  matchesCss: opts.cssMatcher,
7805
- onUpdate: opts.onUpdate,
7745
+ onUpdate: trackFinalCssAssetUpdate,
7806
7746
  recordCssAssetResult,
7807
7747
  shouldKeep: (file, css) => cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
7808
7748
  ...createCssPipelineContext(file),
@@ -7825,6 +7765,7 @@ function createViteCssFinalizerOutputPlugin(context) {
7825
7765
  markCssAssetProcessed,
7826
7766
  recordCssAssetResult,
7827
7767
  recordViteProcessedCssAssetResult,
7768
+ onAssetWrite: (file) => finalCssAssetFiles.add(file),
7828
7769
  resolveViteProcessedCssOutputFile: (file) => resolveViteCssPipelineOutputFile(file, opts, rootDir, isWebGeneratorTarget, isNativeAppStyleTarget, sourceRoot, resolveMiniProgramStyleOutputExtension({ files: Object.keys(bundle) }), Object.keys(bundle)),
7829
7770
  transformCss: (css, file) => finalizeWebCss(css, {
7830
7771
  ...createCssPipelineContext(file),
@@ -7846,7 +7787,7 @@ function createViteCssFinalizerOutputPlugin(context) {
7846
7787
  file
7847
7788
  }, cssPipelineStrategy),
7848
7789
  debug,
7849
- onUpdate: opts.onUpdate
7790
+ onUpdate: trackFinalCssAssetUpdate
7850
7791
  });
7851
7792
  };
7852
7793
  collectViteProcessedCssAssets();
@@ -7899,6 +7840,14 @@ function createViteCssFinalizerOutputPlugin(context) {
7899
7840
  cssMatcher: opts.cssMatcher,
7900
7841
  debug,
7901
7842
  enabled: cssPipelineStrategy?.shouldNormalizeRootMiniProgramImportShell?.(createCssPipelineContext("")) === true,
7843
+ onUpdate: trackFinalCssAssetUpdate,
7844
+ recordCssAssetResult
7845
+ });
7846
+ finalizeMiniProgramCssAssetStructures(bundle, {
7847
+ cssMatcher: opts.cssMatcher,
7848
+ debug,
7849
+ files: finalCssAssetFiles,
7850
+ isWebGeneratorTarget,
7902
7851
  onUpdate: opts.onUpdate,
7903
7852
  recordCssAssetResult
7904
7853
  });
@@ -7914,6 +7863,7 @@ function createViteCssFinalizerOutputPlugin(context) {
7914
7863
  const writeTargets = /* @__PURE__ */ new Map();
7915
7864
  const writeCssAsset = (file, output, source) => {
7916
7865
  emissionPlan.write(file, source);
7866
+ finalCssAssetFiles.add(file);
7917
7867
  writeTargets.set(file, output);
7918
7868
  };
7919
7869
  await Promise.all(entries.map(async ([bundleFile, output]) => {
@@ -8018,6 +7968,14 @@ function createViteCssFinalizerOutputPlugin(context) {
8018
7968
  cssMatcher: opts.cssMatcher,
8019
7969
  debug,
8020
7970
  enabled: cssPipelineStrategy?.shouldNormalizeRootMiniProgramImportShell?.(createCssPipelineContext("")) === true,
7971
+ onUpdate: trackFinalCssAssetUpdate,
7972
+ recordCssAssetResult
7973
+ });
7974
+ finalizeMiniProgramCssAssetStructures(bundle, {
7975
+ cssMatcher: opts.cssMatcher,
7976
+ debug,
7977
+ files: finalCssAssetFiles,
7978
+ isWebGeneratorTarget,
8021
7979
  onUpdate: opts.onUpdate,
8022
7980
  recordCssAssetResult
8023
7981
  });
@@ -4,13 +4,13 @@ const require_generator = require("./generator-BE34PYSC.cjs");
4
4
  const require_object = require("./object-C_Vr6_S5.cjs");
5
5
  const require_options = require("./options-hVsoTfwL.cjs");
6
6
  require("./utils-CuKLf1Zv.cjs");
7
- const require_v4_generation_core = require("./v4-generation-core-Dtmu8Yax.cjs");
7
+ const require_v4_generation_core = require("./v4-generation-core-BrkM1vCs.cjs");
8
8
  const require_wxml = require("./wxml-DSMNuUaP.cjs");
9
- const require_hmr_timing = require("./hmr-timing-Chyd_Yfw.cjs");
9
+ const require_hmr_timing = require("./hmr-timing-D607CWrq.cjs");
10
10
  const require_context = require("./context-OqD_eBxQ.cjs");
11
11
  const require_tailwindcss = require("./tailwindcss-DcpiKvmJ.cjs");
12
12
  const require_style_options = require("./style-options-B_ppaVIg.cjs");
13
- const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-DG5mQZ8o.cjs");
13
+ const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-BGDNJE2r.cjs");
14
14
  require("./logger-TlKT3xmR.cjs");
15
15
  const require_css_imports = require("./css-imports-DfNC3e6a.cjs");
16
16
  let node_fs = require("node:fs");
@@ -1340,86 +1340,6 @@ const mix = (del = delimiter) => {
1340
1340
  const posix = /* @__PURE__ */ mix(":");
1341
1341
  const win32 = /* @__PURE__ */ mix(";");
1342
1342
  //#endregion
1343
- //#region src/bundlers/vite/processed-css-assets/empty-at-rule.ts
1344
- function isAtRuleNameCharacter(code) {
1345
- return code === 45 || code >= 65 && code <= 90 || code >= 97 && code <= 122;
1346
- }
1347
- function isCssWhitespace(code) {
1348
- return code === 9 || code === 10 || code === 12 || code === 13 || code === 32;
1349
- }
1350
- function findAtRuleBlockStart(css, start) {
1351
- let parenthesisDepth = 0;
1352
- let quote = 0;
1353
- let squareBracketDepth = 0;
1354
- for (let index = start; index < css.length; index++) {
1355
- const code = css.charCodeAt(index);
1356
- if (quote !== 0) {
1357
- if (code === 92) index++;
1358
- else if (code === quote) quote = 0;
1359
- continue;
1360
- }
1361
- if (code === 34 || code === 39) {
1362
- quote = code;
1363
- continue;
1364
- }
1365
- if (code === 92) {
1366
- index++;
1367
- continue;
1368
- }
1369
- if (code === 47 && css.charCodeAt(index + 1) === 42) {
1370
- const commentEnd = css.indexOf("*/", index + 2);
1371
- if (commentEnd < 0) return -1;
1372
- index = commentEnd + 1;
1373
- continue;
1374
- }
1375
- if (code === 40) {
1376
- parenthesisDepth++;
1377
- continue;
1378
- }
1379
- if (code === 41 && parenthesisDepth > 0) {
1380
- parenthesisDepth--;
1381
- continue;
1382
- }
1383
- if (code === 91) {
1384
- squareBracketDepth++;
1385
- continue;
1386
- }
1387
- if (code === 93 && squareBracketDepth > 0) {
1388
- squareBracketDepth--;
1389
- continue;
1390
- }
1391
- if (code === 123 && parenthesisDepth === 0 && squareBracketDepth === 0) return index;
1392
- if ((code === 59 || code === 125) && parenthesisDepth === 0 && squareBracketDepth === 0) return -1;
1393
- }
1394
- return -1;
1395
- }
1396
- function isEmptyAtRuleBody(css, blockStart) {
1397
- for (let index = blockStart + 1; index < css.length; index++) {
1398
- const code = css.charCodeAt(index);
1399
- if (isCssWhitespace(code)) continue;
1400
- if (code === 47 && css.charCodeAt(index + 1) === 42) {
1401
- const commentEnd = css.indexOf("*/", index + 2);
1402
- if (commentEnd < 0) return false;
1403
- index = commentEnd + 1;
1404
- continue;
1405
- }
1406
- return code === 125;
1407
- }
1408
- return false;
1409
- }
1410
- function hasEmptyAtRuleBlockCandidate(css) {
1411
- let searchFrom = 0;
1412
- while (searchFrom < css.length) {
1413
- const atRuleStart = css.indexOf("@", searchFrom);
1414
- if (atRuleStart < 0) return false;
1415
- searchFrom = atRuleStart + 1;
1416
- if (!isAtRuleNameCharacter(css.charCodeAt(searchFrom))) continue;
1417
- const blockStart = findAtRuleBlockStart(css, searchFrom + 1);
1418
- if (blockStart >= 0 && isEmptyAtRuleBody(css, blockStart)) return true;
1419
- }
1420
- return false;
1421
- }
1422
- //#endregion
1423
1343
  //#region src/bundlers/vite/processed-css-assets/style-files.ts
1424
1344
  const CSS_OUTPUT_FILE_RE = /\.(?:css|wxss|acss|ttss|qss|jxss|tyss)(?:$|[?#])/i;
1425
1345
  function isCssOutputFile(file) {
@@ -1695,7 +1615,7 @@ function restoreCssImportAtRules(source, filtered, file) {
1695
1615
  return appendCss$1(missingImports.join("\n"), filtered);
1696
1616
  }
1697
1617
  function removeCommentOnlyAtRules(css) {
1698
- if (!hasEmptyAtRuleBlockCandidate(css)) return css;
1618
+ if (!require_v4_generation_core.hasEmptyAtRuleBlockCandidate(css)) return css;
1699
1619
  try {
1700
1620
  const root = _weapp_tailwindcss_postcss.postcss.parse(css);
1701
1621
  let changed = false;
@@ -1710,21 +1630,6 @@ function removeCommentOnlyAtRules(css) {
1710
1630
  return css;
1711
1631
  }
1712
1632
  }
1713
- function removeEmptyCssAtRules(css) {
1714
- if (!hasEmptyAtRuleBlockCandidate(css)) return css;
1715
- try {
1716
- const root = _weapp_tailwindcss_postcss.postcss.parse(css);
1717
- let removed = 0;
1718
- let passRemoved = 0;
1719
- do {
1720
- passRemoved = (0, _weapp_tailwindcss_postcss.removeEmptyAtRules)(root);
1721
- removed += passRemoved;
1722
- } while (passRemoved > 0);
1723
- return removed > 0 ? root.toString() : css;
1724
- } catch {
1725
- return css;
1726
- }
1727
- }
1728
1633
  function collectImportedBundleCssSources(bundle, importedStyleFiles) {
1729
1634
  if (importedStyleFiles.size === 0) return [];
1730
1635
  const importedFileNames = new Set([...importedStyleFiles].map((file) => posix.posix.basename(file)));
@@ -3045,7 +2950,10 @@ function collectViteProcessedCssAssetResults(bundle, options) {
3045
2950
  const singleMarkerFile = collectSingleViteGeneratedCssMarkerFile(rawSource);
3046
2951
  if (singleMarkerFile && (options.subpackageRoots == null || !isSubpackageOutputFile(file, options.subpackageRoots)) && shouldFilterRootGeneratedCssMarkerForScopedAsset(file, singleMarkerFile, options.resolveViteProcessedCssOutputFile)) nextCss = removeCssCoveredByRootStyleBundleSources(bundle, file, nextCss);
3047
2952
  nextCss = options.transformCss?.(nextCss, file) ?? nextCss;
3048
- if (nextCss !== rawSource) output.source = nextCss;
2953
+ if (nextCss !== rawSource) {
2954
+ output.source = nextCss;
2955
+ options.onAssetWrite?.(file);
2956
+ }
3049
2957
  options.markCssAssetProcessed?.(output, file);
3050
2958
  options.recordCssAssetResult?.(file, nextCss);
3051
2959
  const resolvedOutputFile = resolveViteGeneratedCssMarkerOutputFile(file, singleMarkerFile, existingAssetFiles, options.resolveViteProcessedCssOutputFile);
@@ -3058,6 +2966,7 @@ function collectViteProcessedCssAssetResults(bundle, options) {
3058
2966
  const targetNextCss = appendCss$1(targetRawSource, (0, _weapp_tailwindcss_postcss.filterExistingCssRules)(targetRawSource, nextCss).trim());
3059
2967
  if (targetNextCss !== targetRawSource) {
3060
2968
  targetAsset.source = targetNextCss;
2969
+ options.onAssetWrite?.(resolvedOutputFile);
3061
2970
  options.markCssAssetProcessed?.(targetAsset, resolvedOutputFile);
3062
2971
  options.recordCssAssetResult?.(resolvedOutputFile, targetNextCss);
3063
2972
  }
@@ -4832,9 +4741,10 @@ function resolveViteCssTransformCachePlan(options) {
4832
4741
  const cssRuntimeSignature = createCssRuntimeSignature(options.runtimeSignature, options.scopedGeneratorCandidateSignature);
4833
4742
  const rememberedCssRuntimeSignature = createRememberedCssRuntimeSignature(cssRuntimeSignature, options.cssRuntimeAffectingHash);
4834
4743
  const tailwindcssMajorVersion = options.tailwindcssMajorVersion ?? "unknown";
4744
+ const cssCacheKey = `${options.outputFile}:css:${cssRuntimeSignature}:${tailwindcssMajorVersion}`;
4835
4745
  return {
4836
- cssCacheKey: options.outputFile,
4837
- cssHashKey: `${options.outputFile}:css:${cssRuntimeSignature}:${tailwindcssMajorVersion}`,
4746
+ cssCacheKey,
4747
+ cssHashKey: cssCacheKey,
4838
4748
  cssRuntimeSignature,
4839
4749
  cssSharedCacheKey: [
4840
4750
  options.cssShareScope,
@@ -4971,6 +4881,31 @@ function readAssetSource$1(output) {
4971
4881
  function shouldFinalizeMiniProgramCssAsset(source) {
4972
4882
  return source.includes(":hover") || source.includes("does-not-exist") || (0, _weapp_tailwindcss_postcss.hasMiniProgramCssSpecificityPlaceholders)(source);
4973
4883
  }
4884
+ function finalizeMiniProgramCssAssetStructures(bundle, options) {
4885
+ if (options.isWebGeneratorTarget) return 0;
4886
+ const plan = new require_v4_generation_core.AssetEmissionPlan();
4887
+ const writeTargets = /* @__PURE__ */ new Map();
4888
+ let updated = 0;
4889
+ for (const [bundleFile, output] of Object.entries(bundle)) {
4890
+ if (output.type !== "asset") continue;
4891
+ const file = output.fileName || bundleFile;
4892
+ if (!options.cssMatcher(file) || options.files && !options.files.has(file)) continue;
4893
+ const rawSource = readAssetSource$1(output);
4894
+ const outputCss = require_v4_generation_core.finalizeMiniProgramCssStructure(rawSource);
4895
+ if (outputCss === rawSource) continue;
4896
+ plan.write(file, outputCss);
4897
+ writeTargets.set(file, output);
4898
+ options.recordCssAssetResult?.(file, outputCss);
4899
+ options.onUpdate(file, rawSource, outputCss);
4900
+ options.debug?.("remove final empty mini-program css at-rules: %s bytes=%d", file, outputCss.length);
4901
+ updated++;
4902
+ }
4903
+ applyViteAssetEmissionPlan(plan, {
4904
+ bundle,
4905
+ writeTargets
4906
+ });
4907
+ return updated;
4908
+ }
4974
4909
  async function finalizeMiniProgramCssAssets(bundle, options) {
4975
4910
  if (options.isWebGeneratorTarget) return 0;
4976
4911
  const plan = new require_v4_generation_core.AssetEmissionPlan();
@@ -4983,7 +4918,7 @@ async function finalizeMiniProgramCssAssets(bundle, options) {
4983
4918
  const rawSource = readAssetSource$1(output);
4984
4919
  if (rawSource.trim().length === 0) continue;
4985
4920
  if (options.lastCssResultByFile?.has(file)) {
4986
- const outputCss = (0, _weapp_tailwindcss_postcss.stripMiniProgramCssSpecificityPlaceholders)(removeEmptyCssAtRules(rawSource));
4921
+ const outputCss = (0, _weapp_tailwindcss_postcss.stripMiniProgramCssSpecificityPlaceholders)(require_v4_generation_core.finalizeMiniProgramCssStructure(rawSource));
4987
4922
  if (outputCss !== rawSource) {
4988
4923
  plan.write(file, outputCss);
4989
4924
  writeTargets.set(file, output);
@@ -4995,7 +4930,7 @@ async function finalizeMiniProgramCssAssets(bundle, options) {
4995
4930
  continue;
4996
4931
  }
4997
4932
  if (!shouldFinalizeMiniProgramCssAsset(rawSource)) {
4998
- const structurallyCleanSource = removeEmptyCssAtRules(rawSource);
4933
+ const structurallyCleanSource = require_v4_generation_core.finalizeMiniProgramCssStructure(rawSource);
4999
4934
  if (structurallyCleanSource !== rawSource) {
5000
4935
  plan.write(file, structurallyCleanSource);
5001
4936
  writeTargets.set(file, output);
@@ -5017,7 +4952,7 @@ async function finalizeMiniProgramCssAssets(bundle, options) {
5017
4952
  },
5018
4953
  cssPresetEnv: {}
5019
4954
  });
5020
- const outputCss = (0, _weapp_tailwindcss_postcss.stripMiniProgramCssSpecificityPlaceholders)(removeEmptyCssAtRules(css));
4955
+ const outputCss = (0, _weapp_tailwindcss_postcss.stripMiniProgramCssSpecificityPlaceholders)(require_v4_generation_core.finalizeMiniProgramCssStructure(css));
5021
4956
  if (outputCss === rawSource) continue;
5022
4957
  plan.write(file, outputCss);
5023
4958
  writeTargets.set(file, output);
@@ -7807,11 +7742,16 @@ function createViteCssFinalizerOutputPlugin(context) {
7807
7742
  const rootDir = resolvedConfig?.root ? node_path.default.resolve(resolvedConfig.root) : node_process.default.cwd();
7808
7743
  const outDir = resolvedConfig?.build?.outDir ? node_path.default.resolve(rootDir, resolvedConfig.build.outDir) : rootDir;
7809
7744
  const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig, opts.appType) ?? resolveSourceRootFromBundleGraph(resolvedConfig, bundle);
7745
+ const finalCssAssetFiles = /* @__PURE__ */ new Set();
7746
+ const trackFinalCssAssetUpdate = (file, original, generated) => {
7747
+ finalCssAssetFiles.add(file);
7748
+ opts.onUpdate(file, original, generated);
7749
+ };
7810
7750
  restoreFrameworkRootMiniProgramImportShellAssets(bundle, {
7811
7751
  debug,
7812
7752
  isWebGeneratorTarget,
7813
7753
  matchesCss: opts.cssMatcher,
7814
- onUpdate: opts.onUpdate,
7754
+ onUpdate: trackFinalCssAssetUpdate,
7815
7755
  recordCssAssetResult,
7816
7756
  shouldKeep: (file, css) => cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
7817
7757
  ...createCssPipelineContext(file),
@@ -7834,6 +7774,7 @@ function createViteCssFinalizerOutputPlugin(context) {
7834
7774
  markCssAssetProcessed,
7835
7775
  recordCssAssetResult,
7836
7776
  recordViteProcessedCssAssetResult,
7777
+ onAssetWrite: (file) => finalCssAssetFiles.add(file),
7837
7778
  resolveViteProcessedCssOutputFile: (file) => resolveViteCssPipelineOutputFile(file, opts, rootDir, isWebGeneratorTarget, isNativeAppStyleTarget, sourceRoot, resolveMiniProgramStyleOutputExtension({ files: Object.keys(bundle) }), Object.keys(bundle)),
7838
7779
  transformCss: (css, file) => finalizeWebCss(css, {
7839
7780
  ...createCssPipelineContext(file),
@@ -7855,7 +7796,7 @@ function createViteCssFinalizerOutputPlugin(context) {
7855
7796
  file
7856
7797
  }, cssPipelineStrategy),
7857
7798
  debug,
7858
- onUpdate: opts.onUpdate
7799
+ onUpdate: trackFinalCssAssetUpdate
7859
7800
  });
7860
7801
  };
7861
7802
  collectViteProcessedCssAssets();
@@ -7908,6 +7849,14 @@ function createViteCssFinalizerOutputPlugin(context) {
7908
7849
  cssMatcher: opts.cssMatcher,
7909
7850
  debug,
7910
7851
  enabled: cssPipelineStrategy?.shouldNormalizeRootMiniProgramImportShell?.(createCssPipelineContext("")) === true,
7852
+ onUpdate: trackFinalCssAssetUpdate,
7853
+ recordCssAssetResult
7854
+ });
7855
+ finalizeMiniProgramCssAssetStructures(bundle, {
7856
+ cssMatcher: opts.cssMatcher,
7857
+ debug,
7858
+ files: finalCssAssetFiles,
7859
+ isWebGeneratorTarget,
7911
7860
  onUpdate: opts.onUpdate,
7912
7861
  recordCssAssetResult
7913
7862
  });
@@ -7923,6 +7872,7 @@ function createViteCssFinalizerOutputPlugin(context) {
7923
7872
  const writeTargets = /* @__PURE__ */ new Map();
7924
7873
  const writeCssAsset = (file, output, source) => {
7925
7874
  emissionPlan.write(file, source);
7875
+ finalCssAssetFiles.add(file);
7926
7876
  writeTargets.set(file, output);
7927
7877
  };
7928
7878
  await Promise.all(entries.map(async ([bundleFile, output]) => {
@@ -8027,6 +7977,14 @@ function createViteCssFinalizerOutputPlugin(context) {
8027
7977
  cssMatcher: opts.cssMatcher,
8028
7978
  debug,
8029
7979
  enabled: cssPipelineStrategy?.shouldNormalizeRootMiniProgramImportShell?.(createCssPipelineContext("")) === true,
7980
+ onUpdate: trackFinalCssAssetUpdate,
7981
+ recordCssAssetResult
7982
+ });
7983
+ finalizeMiniProgramCssAssetStructures(bundle, {
7984
+ cssMatcher: opts.cssMatcher,
7985
+ debug,
7986
+ files: finalCssAssetFiles,
7987
+ isWebGeneratorTarget,
8030
7988
  onUpdate: opts.onUpdate,
8031
7989
  recordCssAssetResult
8032
7990
  });
package/dist/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_vite = require("./vite-DmN_Y8Uk.cjs");
2
+ const require_vite = require("./vite-n0mRgEcF.cjs");
3
3
  exports.WeappTailwindcss = require_vite.WeappTailwindcss;
4
4
  exports.weappTailwindcss = require_vite.WeappTailwindcss;
package/dist/vite.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as WeappTailwindcss } from "./vite-Bk1YU9L0.js";
1
+ import { t as WeappTailwindcss } from "./vite-DM-U-Ins.js";
2
2
  export { WeappTailwindcss, WeappTailwindcss as weappTailwindcss };
@@ -5,10 +5,10 @@ Object.defineProperties(exports, {
5
5
  const require_rolldown_runtime = require("./rolldown-runtime-CVvi-lCc.cjs");
6
6
  const require_generator = require("./generator-BE34PYSC.cjs");
7
7
  const require_options = require("./options-hVsoTfwL.cjs");
8
- const require_v4_generation_core = require("./v4-generation-core-Dtmu8Yax.cjs");
8
+ const require_v4_generation_core = require("./v4-generation-core-BrkM1vCs.cjs");
9
9
  const require_style_options = require("./style-options-B_ppaVIg.cjs");
10
10
  const require_css_imports = require("./css-imports-DfNC3e6a.cjs");
11
- const require_pipeline_helpers = require("./pipeline-helpers-Cwv-X4Rj.cjs");
11
+ const require_pipeline_helpers = require("./pipeline-helpers-BLpoT8fX.cjs");
12
12
  const require_runtime_registry = require("./runtime-registry-Y7NrD2WH.cjs");
13
13
  const require_watch_dependencies = require("./watch-dependencies-BZGubvuJ.cjs");
14
14
  let node_path = require("node:path");
@@ -3,14 +3,14 @@ const require_generator = require("./generator-BE34PYSC.cjs");
3
3
  const require_object = require("./object-C_Vr6_S5.cjs");
4
4
  const require_options = require("./options-hVsoTfwL.cjs");
5
5
  const require_utils = require("./utils-CuKLf1Zv.cjs");
6
- const require_v4_generation_core = require("./v4-generation-core-Dtmu8Yax.cjs");
6
+ const require_v4_generation_core = require("./v4-generation-core-BrkM1vCs.cjs");
7
7
  const require_wxml = require("./wxml-DSMNuUaP.cjs");
8
- const require_hmr_timing = require("./hmr-timing-Chyd_Yfw.cjs");
8
+ const require_hmr_timing = require("./hmr-timing-D607CWrq.cjs");
9
9
  const require_context = require("./context-OqD_eBxQ.cjs");
10
10
  const require_tailwindcss = require("./tailwindcss-DcpiKvmJ.cjs");
11
11
  const require_style_options = require("./style-options-B_ppaVIg.cjs");
12
- const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-DG5mQZ8o.cjs");
13
- const require_pipeline_helpers = require("./pipeline-helpers-Cwv-X4Rj.cjs");
12
+ const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-BGDNJE2r.cjs");
13
+ const require_pipeline_helpers = require("./pipeline-helpers-BLpoT8fX.cjs");
14
14
  const require_css_loader_runtime = require("./css-loader-runtime-CSv0lKqV.cjs");
15
15
  const require_runtime_registry = require("./runtime-registry-Y7NrD2WH.cjs");
16
16
  let node_fs = require("node:fs");
@@ -2,11 +2,11 @@ import { $ as hasTailwindSourceDirectives, B as stripMiniProgramCssSpecificityPl
2
2
  import { n as _defineProperty } from "./object-Bvy6-w9r.js";
3
3
  import { _ as resolveTailwindV4EntriesFromCssCached, l as getRuntimeClassSetSignature, p as resolveSourceScanEntries } from "./tailwindcss-CTpCc_nd.js";
4
4
  import { r as getGroupedEntries } from "./utils-MVwpU07P.js";
5
- import { $ as createCompilationDependencyChanges, A as isCssSourceTraceEnabled, B as createRuntimeCompilationAffectingSignature, D as annotateCssSourceTrace, E as stripBundlerGeneratedCssMarkers, F as isPureLocalCssImportWrapper, G as createRuntimeAffectingSourceSignature, K as disposeCompilerOwner, M as createRuntimeClassSetManager, N as collectStrictEscapedRuntimeCandidates, O as createCssSourceTraceCacheSignature, P as createEscapeFragments, Q as recordCompilationDependencyChanges, R as finalizeCompilerShadowRun, S as stripRequestQuery, U as resetRuntimeCompilationBuildState, V as createRuntimeCompilationBuildState, W as updateRuntimeCompilationBuildState, X as getCompilationScopeDependencyRevision, Y as AssetEmissionPlan, _ as collectFrameworkPostcssOptionsFromLoaderEntries, b as hasMiniProgramTailwindV4PreflightReset, c as pushConcurrentTaskFactories, g as captureResolvedFrameworkPostcssOptions, it as resolveSourceCandidateScanFiles, j as processCachedTask, k as createCssTokenSourceMap, l as resolveTaskConcurrency, m as removeGeneratedSelectorCompatCss, n as emitHmrTiming, nt as isSourceCandidateRequest, p as scoreTailwindV4CssSourceFileMatch, q as beginCompilerShadowRun, r as generateTailwindV4Css, s as collectRawSourceClassSelectors, tt as createSourceCandidateStore, v as createCssSourceOrderAppend, w as hasBundlerGeneratedCssMarker, x as isSourceStyleRequest, z as buildRuntimeCompilationSnapshot } from "./hmr-timing-BevXxu6p.js";
5
+ import { A as createCssSourceTraceCacheSignature, B as finalizeCompilerShadowRun, D as finalizeMiniProgramCssStructure, E as stripBundlerGeneratedCssMarkers, F as collectStrictEscapedRuntimeCandidates, G as resetRuntimeCompilationBuildState, H as createRuntimeCompilationAffectingSignature, I as createEscapeFragments, J as disposeCompilerOwner, K as updateRuntimeCompilationBuildState, L as isPureLocalCssImportWrapper, M as isCssSourceTraceEnabled, N as processCachedTask, P as createRuntimeClassSetManager, Q as getCompilationScopeDependencyRevision, S as stripRequestQuery, U as createRuntimeCompilationBuildState, V as buildRuntimeCompilationSnapshot, Y as beginCompilerShadowRun, Z as AssetEmissionPlan, _ as collectFrameworkPostcssOptionsFromLoaderEntries, b as hasMiniProgramTailwindV4PreflightReset, c as pushConcurrentTaskFactories, et as recordCompilationDependencyChanges, g as captureResolvedFrameworkPostcssOptions, it as isSourceCandidateRequest, j as createCssTokenSourceMap, k as annotateCssSourceTrace, l as resolveTaskConcurrency, m as removeGeneratedSelectorCompatCss, n as emitHmrTiming, ot as resolveSourceCandidateScanFiles, p as scoreTailwindV4CssSourceFileMatch, q as createRuntimeAffectingSourceSignature, r as generateTailwindV4Css, rt as createSourceCandidateStore, s as collectRawSourceClassSelectors, tt as createCompilationDependencyChanges, v as createCssSourceOrderAppend, w as hasBundlerGeneratedCssMarker, x as isSourceStyleRequest } from "./hmr-timing-Gs9P-QtZ.js";
6
6
  import { h as createDebug, v as md5Hash } from "./wxml-IBzZSaQC.js";
7
7
  import { d as refreshTailwindRuntimeState, i as pluginName, l as createTailwindRuntimeReadyPromise, n as normalizeStyleHandlerMajorVersion, o as shouldSkipJsTransform, r as resolveStyleOptionsFromContext, t as getCompilerContext, u as ensureRuntimeClassSet } from "./context-YAvTyPV2.js";
8
8
  import { getDefaultCssPreflight } from "./defaults.js";
9
- import { S as resolveWebpackFrameworkProfile, a as createCandidateSignature, b as webpackStyleInjectorDelegates, d as classifyRuntimeEntry, f as resolvePackageDir, g as toAbsoluteOutputPath, h as resolveOutputSpecifier, p as resolvePluginDisabledState, r as createScopedGeneratorRuntime, t as createSourceCandidateScanSignature, v as createBuiltinWebpackStyleInjectorPlugin } from "./source-candidate-scan-signature-DLFqYads.js";
9
+ import { S as resolveWebpackFrameworkProfile, a as createCandidateSignature, b as webpackStyleInjectorDelegates, d as classifyRuntimeEntry, f as resolvePackageDir, g as toAbsoluteOutputPath, h as resolveOutputSpecifier, p as resolvePluginDisabledState, r as createScopedGeneratorRuntime, t as createSourceCandidateScanSignature, v as createBuiltinWebpackStyleInjectorPlugin } from "./source-candidate-scan-signature-CdjPWQqv.js";
10
10
  import Module, { createRequire } from "node:module";
11
11
  import fs from "node:fs";
12
12
  import path from "node:path";
@@ -662,7 +662,7 @@ function finalizeWebpackCssAssetSource(source, compilerOptions, isWebGeneratorTa
662
662
  function finalizeWebpackCssAssetOutputSource(source, compilerOptions, isWebGeneratorTarget) {
663
663
  if (isWebGeneratorTarget) return source;
664
664
  const styleOptions = resolveStyleOptionsFromContext(compilerOptions);
665
- return stripMiniProgramCssSpecificityPlaceholders(removeMiniProgramHoverSelectors(dedupeCoveredCssRules(dedupeMiniProgramPreflightSelectorRules(source)), styleOptions.cssRemoveHoverPseudoClass));
665
+ return finalizeMiniProgramCssStructure(stripMiniProgramCssSpecificityPlaceholders(removeMiniProgramHoverSelectors(dedupeCoveredCssRules(dedupeMiniProgramPreflightSelectorRules(source)), styleOptions.cssRemoveHoverPseudoClass)));
666
666
  }
667
667
  function collectWebpackJsRuntimeCandidatesFromAssets(options) {
668
668
  if (options.isWebGeneratorTarget) return;
package/dist/webpack.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_webpack = require("./webpack-DvmrFist.cjs");
2
+ const require_webpack = require("./webpack-Bf8yJwTO.cjs");
3
3
  exports.WeappTailwindcss = require_webpack.WeappTailwindcss;
4
4
  exports.weappTailwindcss = require_webpack.WeappTailwindcss;
5
5
  exports.weappTailwindcssPackageDir = require_webpack.weappTailwindcssPackageDir;
package/dist/webpack.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as weappTailwindcssPackageDir, t as WeappTailwindcss } from "./webpack-DtkSnYyR.js";
1
+ import { n as weappTailwindcssPackageDir, t as WeappTailwindcss } from "./webpack-BlUJf8Ru.js";
2
2
  export { WeappTailwindcss, WeappTailwindcss as weappTailwindcss, weappTailwindcssPackageDir };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "weapp-tailwindcss",
3
3
  "type": "module",
4
- "version": "5.2.6",
4
+ "version": "5.2.7",
5
5
  "description": "把 tailwindcss 原子化样式思想,带给小程序开发者们! bring tailwindcss to miniprogram developers!",
6
6
  "author": "ice breaker <1324318532@qq.com>",
7
7
  "license": "MIT",
@@ -1 +0,0 @@
1
- export declare function hasEmptyAtRuleBlockCandidate(css: string): boolean;