@weapp-tailwindcss/postcss 3.2.12 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,10 @@
1
1
  import postcss from 'postcss';
2
2
  export declare const TAILWIND_V4_BANNER_RE: RegExp;
3
+ /**
4
+ * 严格移除文件末尾残留的 Tailwind source media 开始标记。
5
+ * 仅处理可确认属于 Tailwind 的尾部残片,其它非法 CSS 保持原样。
6
+ */
7
+ export declare function repairTrailingUnclosedTailwindSourceMedia(css: string): string;
3
8
  export declare function hasTailwindcssV4Signal(css: string): boolean;
4
9
  export declare function unwrapTailwindSourceMedia(root: postcss.Root): void;
5
10
  export declare function removeTailwindGenerationDirectives(root: postcss.Root): void;
@@ -1,6 +1,8 @@
1
1
  import type { FinalizeMiniProgramCssOptions } from './finalize-options.js';
2
+ import postcss from 'postcss';
2
3
  export type { FinalizeMiniProgramCssOptions } from './finalize-options.js';
3
4
  export { insertHoistedRules } from './hoist.js';
4
5
  export { collectPreflightRules } from './preflight.js';
6
+ export declare function finalizeMiniProgramCssRoot(root: postcss.Root, options?: FinalizeMiniProgramCssOptions): void;
5
7
  export declare function hoistTailwindPreflightBase(css: string): string;
6
8
  export declare function finalizeMiniProgramCss(css: string, options?: FinalizeMiniProgramCssOptions): string;
@@ -1,5 +1,6 @@
1
1
  export { removeUnsupportedAtSupports, removeUnsupportedCascadeLayers, removeUnsupportedMiniProgramAtRules, unwrapUnsupportedCascadeLayers, } from './at-rules.js';
2
2
  export { consumeCascadeLayers } from './cascade-layers.js';
3
- export { finalizeMiniProgramCss, type FinalizeMiniProgramCssOptions, hoistTailwindPreflightBase, } from './finalize.js';
3
+ export { repairTrailingUnclosedTailwindSourceMedia } from './directives.js';
4
+ export { finalizeMiniProgramCss, type FinalizeMiniProgramCssOptions, finalizeMiniProgramCssRoot, hoistTailwindPreflightBase, } from './finalize.js';
4
5
  export { normalizeMiniProgramGeneratedCssForPostcss, pruneMiniProgramGeneratedCss, type PruneMiniProgramGeneratedCssOptions, } from './prune-generated.js';
5
6
  export { hasMiniProgramCssSpecificityPlaceholders, removeEmptyAtRules, stripMiniProgramCssSpecificityPlaceholders, } from './root-cleanups.js';
package/dist/index.cjs CHANGED
@@ -2484,6 +2484,120 @@ function unwrapUnsupportedCascadeLayers(css) {
2484
2484
  }
2485
2485
  }
2486
2486
  //#endregion
2487
+ //#region src/compat/mini-program-css/directives.ts
2488
+ const TAILWIND_V4_BANNER_RE = /\/\*!\s*tailwindcss v4\./;
2489
+ const GENERATOR_PLACEHOLDER_COMMENT_RE = /^\s*(?:!\s*)?weapp-tailwindcss generator-placeholder\s*$/i;
2490
+ function isCssWhitespace(code) {
2491
+ return code === 9 || code === 10 || code === 12 || code === 13 || code === 32;
2492
+ }
2493
+ function skipCssWhitespace(css, start) {
2494
+ let index = start;
2495
+ while (index < css.length && isCssWhitespace(css.charCodeAt(index))) index++;
2496
+ return index;
2497
+ }
2498
+ function findClosingParenthesis(css, openingIndex) {
2499
+ let depth = 0;
2500
+ let quote = 0;
2501
+ for (let index = openingIndex; index < css.length; index++) {
2502
+ const code = css.charCodeAt(index);
2503
+ if (quote !== 0) {
2504
+ if (code === 92) index++;
2505
+ else if (code === quote) quote = 0;
2506
+ continue;
2507
+ }
2508
+ if (code === 34 || code === 39) {
2509
+ quote = code;
2510
+ continue;
2511
+ }
2512
+ if (code === 92) {
2513
+ index++;
2514
+ continue;
2515
+ }
2516
+ if (code === 47 && css.charCodeAt(index + 1) === 42) {
2517
+ const commentEnd = css.indexOf("*/", index + 2);
2518
+ if (commentEnd < 0) return -1;
2519
+ index = commentEnd + 1;
2520
+ continue;
2521
+ }
2522
+ if (code === 40) {
2523
+ depth++;
2524
+ continue;
2525
+ }
2526
+ if (code === 41) {
2527
+ depth--;
2528
+ if (depth === 0) return index;
2529
+ }
2530
+ }
2531
+ return -1;
2532
+ }
2533
+ function isCssCodePosition(css, position) {
2534
+ let quote = 0;
2535
+ for (let index = 0; index < position; index++) {
2536
+ const code = css.charCodeAt(index);
2537
+ if (quote !== 0) {
2538
+ if (code === 92) index++;
2539
+ else if (code === quote) quote = 0;
2540
+ continue;
2541
+ }
2542
+ if (code === 34 || code === 39) {
2543
+ quote = code;
2544
+ continue;
2545
+ }
2546
+ if (code === 47 && css.charCodeAt(index + 1) === 42) {
2547
+ const commentEnd = css.indexOf("*/", index + 2);
2548
+ if (commentEnd < 0 || commentEnd >= position) return false;
2549
+ index = commentEnd + 1;
2550
+ }
2551
+ }
2552
+ return quote === 0;
2553
+ }
2554
+ /**
2555
+ * 严格移除文件末尾残留的 Tailwind source media 开始标记。
2556
+ * 仅处理可确认属于 Tailwind 的尾部残片,其它非法 CSS 保持原样。
2557
+ */
2558
+ function repairTrailingUnclosedTailwindSourceMedia(css) {
2559
+ const sourceMediaPattern = /(?:^|\r?\n)[\t\f ]*@media\s+source\(/g;
2560
+ for (let match = sourceMediaPattern.exec(css); match !== null; match = sourceMediaPattern.exec(css)) {
2561
+ const prefixLength = match[0].startsWith("\n") ? 1 : match[0].startsWith("\r\n") ? 2 : 0;
2562
+ const start = match.index + prefixLength;
2563
+ if (!isCssCodePosition(css, start)) continue;
2564
+ const closingIndex = findClosingParenthesis(css, start + match[0].length - prefixLength - 1);
2565
+ if (closingIndex < 0) continue;
2566
+ const blockStart = skipCssWhitespace(css, closingIndex + 1);
2567
+ if (css.charCodeAt(blockStart) !== 123) continue;
2568
+ if (skipCssWhitespace(css, blockStart + 1) !== css.length) continue;
2569
+ return css.slice(0, match.index);
2570
+ }
2571
+ return css;
2572
+ }
2573
+ function hasTailwindcssV4Signal(css) {
2574
+ if (TAILWIND_V4_BANNER_RE.test(css)) return true;
2575
+ const root = postcss.default.parse(css);
2576
+ let hasProperty = false;
2577
+ root.walkAtRules("property", (atRule) => {
2578
+ if (atRule.params.trim().startsWith("--tw-")) {
2579
+ hasProperty = true;
2580
+ return false;
2581
+ }
2582
+ });
2583
+ return hasProperty;
2584
+ }
2585
+ function unwrapTailwindSourceMedia(root) {
2586
+ root.walkAtRules("media", (atRule) => {
2587
+ if (!atRule.params.startsWith("source(")) return;
2588
+ if (atRule.nodes && atRule.nodes.length > 0) atRule.replaceWith(...atRule.nodes);
2589
+ else atRule.remove();
2590
+ });
2591
+ }
2592
+ function removeTailwindGenerationDirectives(root) {
2593
+ root.walkComments((comment) => {
2594
+ if (GENERATOR_PLACEHOLDER_COMMENT_RE.test(comment.text)) comment.remove();
2595
+ });
2596
+ root.walkAtRules((atRule) => {
2597
+ if (atRule.name === "config" || atRule.name === "source" || atRule.name === "tailwind" || atRule.name === "reference" || atRule.name === "plugin") atRule.remove();
2598
+ });
2599
+ }
2600
+ //#endregion
2487
2601
  //#region src/compat/mini-program-prefixes.ts
2488
2602
  const PRESERVED_WEBKIT_DECLARATION_PROPS = /* @__PURE__ */ new Set([
2489
2603
  "-webkit-box-orient",
@@ -2574,37 +2688,6 @@ function removeUnsupportedMiniProgramPrefixedAtRule(atRule) {
2574
2688
  if (atRule.name.toLowerCase() === "-webkit-keyframes") atRule.remove();
2575
2689
  }
2576
2690
  //#endregion
2577
- //#region src/compat/mini-program-css/directives.ts
2578
- const TAILWIND_V4_BANNER_RE = /\/\*!\s*tailwindcss v4\./;
2579
- const GENERATOR_PLACEHOLDER_COMMENT_RE = /^\s*(?:!\s*)?weapp-tailwindcss generator-placeholder\s*$/i;
2580
- function hasTailwindcssV4Signal(css) {
2581
- if (TAILWIND_V4_BANNER_RE.test(css)) return true;
2582
- const root = postcss.default.parse(css);
2583
- let hasProperty = false;
2584
- root.walkAtRules("property", (atRule) => {
2585
- if (atRule.params.trim().startsWith("--tw-")) {
2586
- hasProperty = true;
2587
- return false;
2588
- }
2589
- });
2590
- return hasProperty;
2591
- }
2592
- function unwrapTailwindSourceMedia(root) {
2593
- root.walkAtRules("media", (atRule) => {
2594
- if (!atRule.params.startsWith("source(")) return;
2595
- if (atRule.nodes && atRule.nodes.length > 0) atRule.replaceWith(...atRule.nodes);
2596
- else atRule.remove();
2597
- });
2598
- }
2599
- function removeTailwindGenerationDirectives(root) {
2600
- root.walkComments((comment) => {
2601
- if (GENERATOR_PLACEHOLDER_COMMENT_RE.test(comment.text)) comment.remove();
2602
- });
2603
- root.walkAtRules((atRule) => {
2604
- if (atRule.name === "config" || atRule.name === "source" || atRule.name === "tailwind" || atRule.name === "reference" || atRule.name === "plugin") atRule.remove();
2605
- });
2606
- }
2607
- //#endregion
2608
2691
  //#region src/compat/mini-program-css/hoist.ts
2609
2692
  const HOIST_ANCHOR_COMMENT = "__weapp_tailwindcss_base_anchor__";
2610
2693
  function getTopDirectiveTail(root) {
@@ -2789,6 +2872,9 @@ function finalizeMiniProgramCssRoot(root, options = {}) {
2789
2872
  root.walkAtRules("property", (atRule) => {
2790
2873
  atRule.remove();
2791
2874
  });
2875
+ root.walkAtRules("supports", (atRule) => {
2876
+ atRule.remove();
2877
+ });
2792
2878
  removeSpecificityPlaceholders(root);
2793
2879
  removeRootSpecificityPlaceholders(root);
2794
2880
  removeUnsupportedBrowserSelectors(root);
@@ -2835,13 +2921,14 @@ function hoistTailwindPreflightBase(css) {
2835
2921
  }
2836
2922
  }
2837
2923
  function finalizeMiniProgramCss(css, options = {}) {
2924
+ const repairedCss = repairTrailingUnclosedTailwindSourceMedia(css);
2838
2925
  let isTailwindcssV4 = options.isTailwindcssV4;
2839
2926
  if (isTailwindcssV4 === void 0) try {
2840
- isTailwindcssV4 = hasTailwindcssV4Signal(css);
2927
+ isTailwindcssV4 = hasTailwindcssV4Signal(repairedCss);
2841
2928
  } catch {
2842
- isTailwindcssV4 = TAILWIND_V4_BANNER_RE.test(css);
2929
+ isTailwindcssV4 = TAILWIND_V4_BANNER_RE.test(repairedCss);
2843
2930
  }
2844
- const cleanedCss = removeUnsupportedMiniProgramAtRules(css);
2931
+ const cleanedCss = removeUnsupportedMiniProgramAtRules(repairedCss);
2845
2932
  try {
2846
2933
  const root = postcss.default.parse(cleanedCss);
2847
2934
  finalizeMiniProgramCssRoot(root, {
@@ -7700,6 +7787,7 @@ exports.filterApplyOnlyGeneratedCss = filterApplyOnlyGeneratedCss;
7700
7787
  exports.filterApplyOnlyGeneratedCssRoot = filterApplyOnlyGeneratedCssRoot;
7701
7788
  exports.filterExistingCssRules = filterExistingCssRules;
7702
7789
  exports.finalizeMiniProgramCss = finalizeMiniProgramCss;
7790
+ exports.finalizeMiniProgramCssRoot = finalizeMiniProgramCssRoot;
7703
7791
  exports.getPostcssPluginName = getPostcssPluginName;
7704
7792
  exports.hasCssMacroStyleOptions = hasCssMacroStyleOptions;
7705
7793
  exports.hasCssMacroTailwindV4CustomVariantConditionalComments = hasCssMacroTailwindV4CustomVariantConditionalComments;
@@ -7760,6 +7848,7 @@ exports.removeUnsupportedCascadeLayers = removeUnsupportedCascadeLayers;
7760
7848
  exports.removeUnsupportedMiniProgramAtRules = removeUnsupportedMiniProgramAtRules;
7761
7849
  exports.removeUnsupportedMiniProgramCssImportsRoot = removeUnsupportedMiniProgramCssImportsRoot;
7762
7850
  exports.removeUnsupportedMiniProgramPrefixedAtRule = removeUnsupportedMiniProgramPrefixedAtRule;
7851
+ exports.repairTrailingUnclosedTailwindSourceMedia = repairTrailingUnclosedTailwindSourceMedia;
7763
7852
  exports.resolveCssSourceEntries = resolveCssSourceEntries;
7764
7853
  exports.resolveFilteredPostcssConfig = resolveFilteredPostcssConfig;
7765
7854
  exports.resolvePostcssConfig = resolvePostcssConfig;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { type PostcssAppType, type PostcssStyleBranch, type PostcssStyleBranchProfile, resolvePostcssStyleBranch, type ResolvePostcssStyleBranchOptions, resolvePostcssStyleBranchProfile, } from './branches/index.js';
2
2
  export { type DynamicColorMixAlphaProtection, type DynamicColorMixAlphaProtectionOptions, type ModernColorValueNormalization, normalizeModernColorValue, protectDynamicColorMixAlpha, protectDynamicVarFallbacks, } from './compat/color-mix.js';
3
3
  export { transformLynxCssCompat } from './compat/lynx-css.js';
4
- export { consumeCascadeLayers, finalizeMiniProgramCss, hasMiniProgramCssSpecificityPlaceholders, hoistTailwindPreflightBase, normalizeMiniProgramGeneratedCssForPostcss, pruneMiniProgramGeneratedCss, removeEmptyAtRules, removeUnsupportedAtSupports, removeUnsupportedCascadeLayers, removeUnsupportedMiniProgramAtRules, stripMiniProgramCssSpecificityPlaceholders, unwrapUnsupportedCascadeLayers, } from './compat/mini-program-css/index.js';
4
+ export { consumeCascadeLayers, finalizeMiniProgramCss, type FinalizeMiniProgramCssOptions, finalizeMiniProgramCssRoot, hasMiniProgramCssSpecificityPlaceholders, hoistTailwindPreflightBase, normalizeMiniProgramGeneratedCssForPostcss, pruneMiniProgramGeneratedCss, removeEmptyAtRules, removeUnsupportedAtSupports, removeUnsupportedCascadeLayers, removeUnsupportedMiniProgramAtRules, repairTrailingUnclosedTailwindSourceMedia, stripMiniProgramCssSpecificityPlaceholders, unwrapUnsupportedCascadeLayers, } from './compat/mini-program-css/index.js';
5
5
  export { normalizeMiniProgramPrefixedDeclaration, removeUnsupportedMiniProgramPrefixedAtRule, } from './compat/mini-program-prefixes.js';
6
6
  export { convertTailwindcssRpxDeclarationsToRem, convertTailwindcssRpxDeclarationToRem, convertTailwindcssRpxValueToRem, normalizeTailwindcssRpxDeclaration, normalizeTailwindcssRpxDeclarations, normalizeTailwindcssWebRpxDeclarations, type TailwindcssRpxToRemOptions, } from './compat/tailwindcss-rpx.js';
7
7
  export { normalizeTailwindcssV4InfinityCalcCss } from './compat/tailwindcss-v4.js';
package/dist/index.js CHANGED
@@ -2468,6 +2468,120 @@ function unwrapUnsupportedCascadeLayers(css) {
2468
2468
  }
2469
2469
  }
2470
2470
  //#endregion
2471
+ //#region src/compat/mini-program-css/directives.ts
2472
+ const TAILWIND_V4_BANNER_RE = /\/\*!\s*tailwindcss v4\./;
2473
+ const GENERATOR_PLACEHOLDER_COMMENT_RE = /^\s*(?:!\s*)?weapp-tailwindcss generator-placeholder\s*$/i;
2474
+ function isCssWhitespace(code) {
2475
+ return code === 9 || code === 10 || code === 12 || code === 13 || code === 32;
2476
+ }
2477
+ function skipCssWhitespace(css, start) {
2478
+ let index = start;
2479
+ while (index < css.length && isCssWhitespace(css.charCodeAt(index))) index++;
2480
+ return index;
2481
+ }
2482
+ function findClosingParenthesis(css, openingIndex) {
2483
+ let depth = 0;
2484
+ let quote = 0;
2485
+ for (let index = openingIndex; index < css.length; index++) {
2486
+ const code = css.charCodeAt(index);
2487
+ if (quote !== 0) {
2488
+ if (code === 92) index++;
2489
+ else if (code === quote) quote = 0;
2490
+ continue;
2491
+ }
2492
+ if (code === 34 || code === 39) {
2493
+ quote = code;
2494
+ continue;
2495
+ }
2496
+ if (code === 92) {
2497
+ index++;
2498
+ continue;
2499
+ }
2500
+ if (code === 47 && css.charCodeAt(index + 1) === 42) {
2501
+ const commentEnd = css.indexOf("*/", index + 2);
2502
+ if (commentEnd < 0) return -1;
2503
+ index = commentEnd + 1;
2504
+ continue;
2505
+ }
2506
+ if (code === 40) {
2507
+ depth++;
2508
+ continue;
2509
+ }
2510
+ if (code === 41) {
2511
+ depth--;
2512
+ if (depth === 0) return index;
2513
+ }
2514
+ }
2515
+ return -1;
2516
+ }
2517
+ function isCssCodePosition(css, position) {
2518
+ let quote = 0;
2519
+ for (let index = 0; index < position; index++) {
2520
+ const code = css.charCodeAt(index);
2521
+ if (quote !== 0) {
2522
+ if (code === 92) index++;
2523
+ else if (code === quote) quote = 0;
2524
+ continue;
2525
+ }
2526
+ if (code === 34 || code === 39) {
2527
+ quote = code;
2528
+ continue;
2529
+ }
2530
+ if (code === 47 && css.charCodeAt(index + 1) === 42) {
2531
+ const commentEnd = css.indexOf("*/", index + 2);
2532
+ if (commentEnd < 0 || commentEnd >= position) return false;
2533
+ index = commentEnd + 1;
2534
+ }
2535
+ }
2536
+ return quote === 0;
2537
+ }
2538
+ /**
2539
+ * 严格移除文件末尾残留的 Tailwind source media 开始标记。
2540
+ * 仅处理可确认属于 Tailwind 的尾部残片,其它非法 CSS 保持原样。
2541
+ */
2542
+ function repairTrailingUnclosedTailwindSourceMedia(css) {
2543
+ const sourceMediaPattern = /(?:^|\r?\n)[\t\f ]*@media\s+source\(/g;
2544
+ for (let match = sourceMediaPattern.exec(css); match !== null; match = sourceMediaPattern.exec(css)) {
2545
+ const prefixLength = match[0].startsWith("\n") ? 1 : match[0].startsWith("\r\n") ? 2 : 0;
2546
+ const start = match.index + prefixLength;
2547
+ if (!isCssCodePosition(css, start)) continue;
2548
+ const closingIndex = findClosingParenthesis(css, start + match[0].length - prefixLength - 1);
2549
+ if (closingIndex < 0) continue;
2550
+ const blockStart = skipCssWhitespace(css, closingIndex + 1);
2551
+ if (css.charCodeAt(blockStart) !== 123) continue;
2552
+ if (skipCssWhitespace(css, blockStart + 1) !== css.length) continue;
2553
+ return css.slice(0, match.index);
2554
+ }
2555
+ return css;
2556
+ }
2557
+ function hasTailwindcssV4Signal(css) {
2558
+ if (TAILWIND_V4_BANNER_RE.test(css)) return true;
2559
+ const root = postcss$1.parse(css);
2560
+ let hasProperty = false;
2561
+ root.walkAtRules("property", (atRule) => {
2562
+ if (atRule.params.trim().startsWith("--tw-")) {
2563
+ hasProperty = true;
2564
+ return false;
2565
+ }
2566
+ });
2567
+ return hasProperty;
2568
+ }
2569
+ function unwrapTailwindSourceMedia(root) {
2570
+ root.walkAtRules("media", (atRule) => {
2571
+ if (!atRule.params.startsWith("source(")) return;
2572
+ if (atRule.nodes && atRule.nodes.length > 0) atRule.replaceWith(...atRule.nodes);
2573
+ else atRule.remove();
2574
+ });
2575
+ }
2576
+ function removeTailwindGenerationDirectives(root) {
2577
+ root.walkComments((comment) => {
2578
+ if (GENERATOR_PLACEHOLDER_COMMENT_RE.test(comment.text)) comment.remove();
2579
+ });
2580
+ root.walkAtRules((atRule) => {
2581
+ if (atRule.name === "config" || atRule.name === "source" || atRule.name === "tailwind" || atRule.name === "reference" || atRule.name === "plugin") atRule.remove();
2582
+ });
2583
+ }
2584
+ //#endregion
2471
2585
  //#region src/compat/mini-program-prefixes.ts
2472
2586
  const PRESERVED_WEBKIT_DECLARATION_PROPS = /* @__PURE__ */ new Set([
2473
2587
  "-webkit-box-orient",
@@ -2558,37 +2672,6 @@ function removeUnsupportedMiniProgramPrefixedAtRule(atRule) {
2558
2672
  if (atRule.name.toLowerCase() === "-webkit-keyframes") atRule.remove();
2559
2673
  }
2560
2674
  //#endregion
2561
- //#region src/compat/mini-program-css/directives.ts
2562
- const TAILWIND_V4_BANNER_RE = /\/\*!\s*tailwindcss v4\./;
2563
- const GENERATOR_PLACEHOLDER_COMMENT_RE = /^\s*(?:!\s*)?weapp-tailwindcss generator-placeholder\s*$/i;
2564
- function hasTailwindcssV4Signal(css) {
2565
- if (TAILWIND_V4_BANNER_RE.test(css)) return true;
2566
- const root = postcss$1.parse(css);
2567
- let hasProperty = false;
2568
- root.walkAtRules("property", (atRule) => {
2569
- if (atRule.params.trim().startsWith("--tw-")) {
2570
- hasProperty = true;
2571
- return false;
2572
- }
2573
- });
2574
- return hasProperty;
2575
- }
2576
- function unwrapTailwindSourceMedia(root) {
2577
- root.walkAtRules("media", (atRule) => {
2578
- if (!atRule.params.startsWith("source(")) return;
2579
- if (atRule.nodes && atRule.nodes.length > 0) atRule.replaceWith(...atRule.nodes);
2580
- else atRule.remove();
2581
- });
2582
- }
2583
- function removeTailwindGenerationDirectives(root) {
2584
- root.walkComments((comment) => {
2585
- if (GENERATOR_PLACEHOLDER_COMMENT_RE.test(comment.text)) comment.remove();
2586
- });
2587
- root.walkAtRules((atRule) => {
2588
- if (atRule.name === "config" || atRule.name === "source" || atRule.name === "tailwind" || atRule.name === "reference" || atRule.name === "plugin") atRule.remove();
2589
- });
2590
- }
2591
- //#endregion
2592
2675
  //#region src/compat/mini-program-css/hoist.ts
2593
2676
  const HOIST_ANCHOR_COMMENT = "__weapp_tailwindcss_base_anchor__";
2594
2677
  function getTopDirectiveTail(root) {
@@ -2773,6 +2856,9 @@ function finalizeMiniProgramCssRoot(root, options = {}) {
2773
2856
  root.walkAtRules("property", (atRule) => {
2774
2857
  atRule.remove();
2775
2858
  });
2859
+ root.walkAtRules("supports", (atRule) => {
2860
+ atRule.remove();
2861
+ });
2776
2862
  removeSpecificityPlaceholders(root);
2777
2863
  removeRootSpecificityPlaceholders(root);
2778
2864
  removeUnsupportedBrowserSelectors(root);
@@ -2819,13 +2905,14 @@ function hoistTailwindPreflightBase(css) {
2819
2905
  }
2820
2906
  }
2821
2907
  function finalizeMiniProgramCss(css, options = {}) {
2908
+ const repairedCss = repairTrailingUnclosedTailwindSourceMedia(css);
2822
2909
  let isTailwindcssV4 = options.isTailwindcssV4;
2823
2910
  if (isTailwindcssV4 === void 0) try {
2824
- isTailwindcssV4 = hasTailwindcssV4Signal(css);
2911
+ isTailwindcssV4 = hasTailwindcssV4Signal(repairedCss);
2825
2912
  } catch {
2826
- isTailwindcssV4 = TAILWIND_V4_BANNER_RE.test(css);
2913
+ isTailwindcssV4 = TAILWIND_V4_BANNER_RE.test(repairedCss);
2827
2914
  }
2828
- const cleanedCss = removeUnsupportedMiniProgramAtRules(css);
2915
+ const cleanedCss = removeUnsupportedMiniProgramAtRules(repairedCss);
2829
2916
  try {
2830
2917
  const root = postcss$1.parse(cleanedCss);
2831
2918
  finalizeMiniProgramCssRoot(root, {
@@ -7648,4 +7735,4 @@ function mergeMiniProgramThemeScopeRuleDeclarations(baseCss, css) {
7648
7735
  }
7649
7736
  }
7650
7737
  //#endregion
7651
- export { CSS_MACRO_POSTCSS_PLUGIN_NAME, CSS_MACRO_STYLE_OPTIONS_MARKER, FULL_SOURCE_SCAN_EXTENSIONS, FULL_SOURCE_SCAN_EXTENSION_RE, FULL_SOURCE_SCAN_PATTERN, UNI_APP_X_IMPORTANT_APPLY_MARKER, analyzeTailwindCssDirectives, cleanLocalCssImportWrapperTailwindDirectives, cleanLocalCssImportWrapperTailwindDirectivesRoot, collectApplyOnlyCssSelectors, collectApplyOnlyCssSelectorsRoot, collectCssImportRequestsRoot, collectCssInlineSourceCandidates, compileCssMacroConditionalComments, consumeCascadeLayers, containsCssAfterMinify, convertTailwindcssRpxDeclarationToRem, convertTailwindcssRpxDeclarationsToRem, convertTailwindcssRpxValueToRem, createCssSourceOrderAppend, createFallbackPlaceholderReplacer, createInjectPreflight, createPostcssStyleTargetProfile, createSourceScanPattern, createStyleHandler, createStylePipeline, createTailwindSourceEntryMatcher, createWeappTailwindcssPostcssPlugin, creator as cssMacroPostcssPlugin, dedupeCoveredCssRules, expandInlineSourceCandidatePattern, expandTailwindSourceEntries, filterApplyOnlyGeneratedCss, filterApplyOnlyGeneratedCssRoot, filterExistingCssRules, finalizeMiniProgramCss, getPostcssPluginName, hasCssMacroStyleOptions, hasCssMacroTailwindV4CustomVariantConditionalComments, hasCssMacroTailwindV4Directive, hasCssMacroTailwindV4InternalAtRules, hasCssMacroTailwindV4Source, hasMiniProgramCssSpecificityPlaceholders, hoistTailwindPreflightBase, internalCssSelectorReplacer, isFileExcludedByTailwindSourceEntries, isFileMatchedByTailwindSourceEntries, isLocalCssImportRequest, isMiniProgramLocalCssImportRequest, isPureLocalCssImportWrapper, isPureLocalCssImportWrapperRoot, isTailwindCssGenerationDirective, isTailwindCssImportAtRule, isTailwindCssImportRequest, isTailwindCssPackageJsonImportRequest, isWeappTailwindcssImportRequest, mergeCoveredCssRuleDeclarations, mergeMiniProgramPreflightRuleDeclarations, mergeMiniProgramThemeScopeRuleDeclarations, normalizeLegacyContentEntries, normalizeMiniProgramGeneratedCssForPostcss, normalizeMiniProgramPrefixedDeclaration, normalizeModernColorValue, normalizeOutputImportRequest, normalizeTailwindCssImportRequest, normalizeTailwindcssRpxDeclaration, normalizeTailwindcssRpxDeclarations, normalizeTailwindcssV4InfinityCalcCss, normalizeTailwindcssWebRpxDeclarations, normalizeUniAppXImportantApplyForSass, normalizeWebCssCompatOptions, parseConfigParam, parseSourceFileParam, parseTailwindCssConfigRequest, parseTailwindCssDirectiveRequest, postcss, postcssHtmlTransform, prefixLocalCssImportsWithWebpackIgnoreRoot, protectDynamicColorMixAlpha, protectDynamicVarFallbacks, pruneMiniProgramGeneratedCss, removeEmptyAtRules, removeMatchingLocalCssImports, removeMatchingLocalCssImportsRoot, removeTailwindPostcssPlugins, removeTailwindSourceDirectivesRoot, removeUnsupportedAtSupports, removeUnsupportedCascadeLayers, removeUnsupportedMiniProgramAtRules, removeUnsupportedMiniProgramCssImportsRoot, removeUnsupportedMiniProgramPrefixedAtRule, resolveCssSourceEntries, resolveFilteredPostcssConfig, resolvePostcssConfig, resolvePostcssFrameworkProfile, resolvePostcssFrameworkStrategy, resolvePostcssStyleBranch, resolvePostcssStyleBranchProfile, resolvePostcssStyleTarget, resolveSourceScanPath, resolveTailwindSourceEntry, restoreLocalCssImports, restoreUniAppXImportantApplyMarker, rewriteLocalCssImportRequestsForOutput, rewriteLocalCssImportRequestsForOutputRoot, selectorContainsPseudoClass, splitLocalCssImports, splitLocalCssImportsRoot, stripMiniProgramCssSpecificityPlaceholders, toPosixPath, transformCssMacroCss, transformCssMacroTailwindV4Source, transformLynxCssCompat, transformWebCssCompat, transformWebCssSafeSelectors, unitConversionComposeRules, unitConversionPresets, unwrapUnsupportedCascadeLayers, withCssMacroStyleOptions };
7738
+ export { CSS_MACRO_POSTCSS_PLUGIN_NAME, CSS_MACRO_STYLE_OPTIONS_MARKER, FULL_SOURCE_SCAN_EXTENSIONS, FULL_SOURCE_SCAN_EXTENSION_RE, FULL_SOURCE_SCAN_PATTERN, UNI_APP_X_IMPORTANT_APPLY_MARKER, analyzeTailwindCssDirectives, cleanLocalCssImportWrapperTailwindDirectives, cleanLocalCssImportWrapperTailwindDirectivesRoot, collectApplyOnlyCssSelectors, collectApplyOnlyCssSelectorsRoot, collectCssImportRequestsRoot, collectCssInlineSourceCandidates, compileCssMacroConditionalComments, consumeCascadeLayers, containsCssAfterMinify, convertTailwindcssRpxDeclarationToRem, convertTailwindcssRpxDeclarationsToRem, convertTailwindcssRpxValueToRem, createCssSourceOrderAppend, createFallbackPlaceholderReplacer, createInjectPreflight, createPostcssStyleTargetProfile, createSourceScanPattern, createStyleHandler, createStylePipeline, createTailwindSourceEntryMatcher, createWeappTailwindcssPostcssPlugin, creator as cssMacroPostcssPlugin, dedupeCoveredCssRules, expandInlineSourceCandidatePattern, expandTailwindSourceEntries, filterApplyOnlyGeneratedCss, filterApplyOnlyGeneratedCssRoot, filterExistingCssRules, finalizeMiniProgramCss, finalizeMiniProgramCssRoot, getPostcssPluginName, hasCssMacroStyleOptions, hasCssMacroTailwindV4CustomVariantConditionalComments, hasCssMacroTailwindV4Directive, hasCssMacroTailwindV4InternalAtRules, hasCssMacroTailwindV4Source, hasMiniProgramCssSpecificityPlaceholders, hoistTailwindPreflightBase, internalCssSelectorReplacer, isFileExcludedByTailwindSourceEntries, isFileMatchedByTailwindSourceEntries, isLocalCssImportRequest, isMiniProgramLocalCssImportRequest, isPureLocalCssImportWrapper, isPureLocalCssImportWrapperRoot, isTailwindCssGenerationDirective, isTailwindCssImportAtRule, isTailwindCssImportRequest, isTailwindCssPackageJsonImportRequest, isWeappTailwindcssImportRequest, mergeCoveredCssRuleDeclarations, mergeMiniProgramPreflightRuleDeclarations, mergeMiniProgramThemeScopeRuleDeclarations, normalizeLegacyContentEntries, normalizeMiniProgramGeneratedCssForPostcss, normalizeMiniProgramPrefixedDeclaration, normalizeModernColorValue, normalizeOutputImportRequest, normalizeTailwindCssImportRequest, normalizeTailwindcssRpxDeclaration, normalizeTailwindcssRpxDeclarations, normalizeTailwindcssV4InfinityCalcCss, normalizeTailwindcssWebRpxDeclarations, normalizeUniAppXImportantApplyForSass, normalizeWebCssCompatOptions, parseConfigParam, parseSourceFileParam, parseTailwindCssConfigRequest, parseTailwindCssDirectiveRequest, postcss, postcssHtmlTransform, prefixLocalCssImportsWithWebpackIgnoreRoot, protectDynamicColorMixAlpha, protectDynamicVarFallbacks, pruneMiniProgramGeneratedCss, removeEmptyAtRules, removeMatchingLocalCssImports, removeMatchingLocalCssImportsRoot, removeTailwindPostcssPlugins, removeTailwindSourceDirectivesRoot, removeUnsupportedAtSupports, removeUnsupportedCascadeLayers, removeUnsupportedMiniProgramAtRules, removeUnsupportedMiniProgramCssImportsRoot, removeUnsupportedMiniProgramPrefixedAtRule, repairTrailingUnclosedTailwindSourceMedia, resolveCssSourceEntries, resolveFilteredPostcssConfig, resolvePostcssConfig, resolvePostcssFrameworkProfile, resolvePostcssFrameworkStrategy, resolvePostcssStyleBranch, resolvePostcssStyleBranchProfile, resolvePostcssStyleTarget, resolveSourceScanPath, resolveTailwindSourceEntry, restoreLocalCssImports, restoreUniAppXImportantApplyMarker, rewriteLocalCssImportRequestsForOutput, rewriteLocalCssImportRequestsForOutputRoot, selectorContainsPseudoClass, splitLocalCssImports, splitLocalCssImportsRoot, stripMiniProgramCssSpecificityPlaceholders, toPosixPath, transformCssMacroCss, transformCssMacroTailwindV4Source, transformLynxCssCompat, transformWebCssCompat, transformWebCssSafeSelectors, unitConversionComposeRules, unitConversionPresets, unwrapUnsupportedCascadeLayers, withCssMacroStyleOptions };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@weapp-tailwindcss/postcss",
3
3
  "type": "module",
4
- "version": "3.2.12",
4
+ "version": "3.3.1",
5
5
  "description": "PostCSS transforms that bring Tailwind CSS compatibility to every platform. 将 Tailwind CSS 兼容能力带到全端的 PostCSS 转换工具。",
6
6
  "author": "ice breaker <1324318532@qq.com>",
7
7
  "license": "MIT",
@@ -66,7 +66,7 @@
66
66
  "node": "^20.19.0 || >=22.12.0"
67
67
  },
68
68
  "dependencies": {
69
- "@csstools/css-color-parser": "^4.2.1",
69
+ "@csstools/css-color-parser": "^4.2.2",
70
70
  "@csstools/css-parser-algorithms": "^4.0.0",
71
71
  "@csstools/css-tokenizer": "^4.0.0",
72
72
  "@tailwindcss-mangle/engine": "0.2.0",
@@ -74,7 +74,7 @@
74
74
  "@weapp-tailwindcss/postcss-calc": "1.0.5",
75
75
  "@weapp-tailwindcss/shared": "2.0.3",
76
76
  "autoprefixer": "^10.5.4",
77
- "es-toolkit": "^1.51.0",
77
+ "es-toolkit": "^1.52.0",
78
78
  "lru-cache": "11.5.2",
79
79
  "micromatch": "^4.0.8",
80
80
  "postcss": "^8.5.26",
@@ -91,7 +91,7 @@
91
91
  "devDependencies": {
92
92
  "@csstools/postcss-is-pseudo-class": "^6.0.0",
93
93
  "fast-check": "^4.9.0",
94
- "postcss-calc": "link:packages/postcss-calc",
94
+ "postcss-calc": "link:../postcss-calc",
95
95
  "postcss-custom-properties": "^15.0.1"
96
96
  },
97
97
  "scripts": {