@weapp-tailwindcss/postcss 3.3.0 → 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.
- package/dist/compat/mini-program-css/directives.d.ts +5 -0
- package/dist/compat/mini-program-css/index.d.ts +1 -0
- package/dist/index.cjs +119 -34
- package/dist/index.d.ts +1 -1
- package/dist/index.js +119 -35
- package/package.json +4 -4
|
@@ -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,5 +1,6 @@
|
|
|
1
1
|
export { removeUnsupportedAtSupports, removeUnsupportedCascadeLayers, removeUnsupportedMiniProgramAtRules, unwrapUnsupportedCascadeLayers, } from './at-rules.js';
|
|
2
2
|
export { consumeCascadeLayers } from './cascade-layers.js';
|
|
3
|
+
export { repairTrailingUnclosedTailwindSourceMedia } from './directives.js';
|
|
3
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) {
|
|
@@ -2838,13 +2921,14 @@ function hoistTailwindPreflightBase(css) {
|
|
|
2838
2921
|
}
|
|
2839
2922
|
}
|
|
2840
2923
|
function finalizeMiniProgramCss(css, options = {}) {
|
|
2924
|
+
const repairedCss = repairTrailingUnclosedTailwindSourceMedia(css);
|
|
2841
2925
|
let isTailwindcssV4 = options.isTailwindcssV4;
|
|
2842
2926
|
if (isTailwindcssV4 === void 0) try {
|
|
2843
|
-
isTailwindcssV4 = hasTailwindcssV4Signal(
|
|
2927
|
+
isTailwindcssV4 = hasTailwindcssV4Signal(repairedCss);
|
|
2844
2928
|
} catch {
|
|
2845
|
-
isTailwindcssV4 = TAILWIND_V4_BANNER_RE.test(
|
|
2929
|
+
isTailwindcssV4 = TAILWIND_V4_BANNER_RE.test(repairedCss);
|
|
2846
2930
|
}
|
|
2847
|
-
const cleanedCss = removeUnsupportedMiniProgramAtRules(
|
|
2931
|
+
const cleanedCss = removeUnsupportedMiniProgramAtRules(repairedCss);
|
|
2848
2932
|
try {
|
|
2849
2933
|
const root = postcss.default.parse(cleanedCss);
|
|
2850
2934
|
finalizeMiniProgramCssRoot(root, {
|
|
@@ -7764,6 +7848,7 @@ exports.removeUnsupportedCascadeLayers = removeUnsupportedCascadeLayers;
|
|
|
7764
7848
|
exports.removeUnsupportedMiniProgramAtRules = removeUnsupportedMiniProgramAtRules;
|
|
7765
7849
|
exports.removeUnsupportedMiniProgramCssImportsRoot = removeUnsupportedMiniProgramCssImportsRoot;
|
|
7766
7850
|
exports.removeUnsupportedMiniProgramPrefixedAtRule = removeUnsupportedMiniProgramPrefixedAtRule;
|
|
7851
|
+
exports.repairTrailingUnclosedTailwindSourceMedia = repairTrailingUnclosedTailwindSourceMedia;
|
|
7767
7852
|
exports.resolveCssSourceEntries = resolveCssSourceEntries;
|
|
7768
7853
|
exports.resolveFilteredPostcssConfig = resolveFilteredPostcssConfig;
|
|
7769
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, type FinalizeMiniProgramCssOptions, finalizeMiniProgramCssRoot, 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) {
|
|
@@ -2822,13 +2905,14 @@ function hoistTailwindPreflightBase(css) {
|
|
|
2822
2905
|
}
|
|
2823
2906
|
}
|
|
2824
2907
|
function finalizeMiniProgramCss(css, options = {}) {
|
|
2908
|
+
const repairedCss = repairTrailingUnclosedTailwindSourceMedia(css);
|
|
2825
2909
|
let isTailwindcssV4 = options.isTailwindcssV4;
|
|
2826
2910
|
if (isTailwindcssV4 === void 0) try {
|
|
2827
|
-
isTailwindcssV4 = hasTailwindcssV4Signal(
|
|
2911
|
+
isTailwindcssV4 = hasTailwindcssV4Signal(repairedCss);
|
|
2828
2912
|
} catch {
|
|
2829
|
-
isTailwindcssV4 = TAILWIND_V4_BANNER_RE.test(
|
|
2913
|
+
isTailwindcssV4 = TAILWIND_V4_BANNER_RE.test(repairedCss);
|
|
2830
2914
|
}
|
|
2831
|
-
const cleanedCss = removeUnsupportedMiniProgramAtRules(
|
|
2915
|
+
const cleanedCss = removeUnsupportedMiniProgramAtRules(repairedCss);
|
|
2832
2916
|
try {
|
|
2833
2917
|
const root = postcss$1.parse(cleanedCss);
|
|
2834
2918
|
finalizeMiniProgramCssRoot(root, {
|
|
@@ -7651,4 +7735,4 @@ function mergeMiniProgramThemeScopeRuleDeclarations(baseCss, css) {
|
|
|
7651
7735
|
}
|
|
7652
7736
|
}
|
|
7653
7737
|
//#endregion
|
|
7654
|
-
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, 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.3.
|
|
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.
|
|
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.
|
|
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
|
|
94
|
+
"postcss-calc": "link:../postcss-calc",
|
|
95
95
|
"postcss-custom-properties": "^15.0.1"
|
|
96
96
|
},
|
|
97
97
|
"scripts": {
|