postcss-minify-params 9.0.4 → 9.0.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "postcss-minify-params",
3
- "version": "9.0.4",
3
+ "version": "9.0.5",
4
4
  "description": "Minify at-rule params with PostCSS",
5
5
  "exports": {
6
6
  ".": {
@@ -41,8 +41,8 @@
41
41
  },
42
42
  "homepage": "https://github.com/cssnano/cssnano",
43
43
  "dependencies": {
44
- "browserslist": "^4.29.1",
45
- "cssnano-utils": "^8.0.0"
44
+ "browserslist": "^4.29.2",
45
+ "cssnano-utils": "^8.0.1"
46
46
  },
47
47
  "engines": {
48
48
  "node": "^22.22.3 || ^24.15.0 || >=26.0"
package/src/lib/media.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  significantIndex,
4
4
  TokenType,
5
5
  tokenEnd,
6
- } from './token-utils.js';
6
+ } from './tokenUtils.js';
7
7
 
8
8
  /** @import cssnanoUtils from 'cssnano-utils' */
9
9
  /** @typedef {Exclude<ReturnType<typeof cssnanoUtils.balancedTokens>, undefined>['tokens']} Tokens */
@@ -12,6 +12,22 @@ const tokenEnd = /** @type {typeof cssnanoUtils.tokenEnd} */ (
12
12
 
13
13
  export { TokenType, decoded, tokenEnd };
14
14
 
15
+ /**
16
+ * Reports whether a value ends in a backslash that begins an escape
17
+ * sequence, as opposed to a backslash that is itself escaped.
18
+ * @param {string} value
19
+ * @return {boolean}
20
+ */
21
+ export function endsWithEscapingBackslash(value) {
22
+ if (!value.endsWith('\\')) return false;
23
+
24
+ let backslashes = 0;
25
+ for (let i = value.length - 1; i >= 0 && value[i] === '\\'; i--) {
26
+ backslashes++;
27
+ }
28
+ return backslashes % 2 === 1;
29
+ }
30
+
15
31
  export const openingTypes = new Set([
16
32
  TokenType.Function,
17
33
  TokenType.OpenParen,
@@ -5,9 +5,14 @@ import {
5
5
  minifyWhitespace,
6
6
  parentIndexes,
7
7
  } from './whitespace.js';
8
- import { serializeSegments, tokenEnd } from './token-utils.js';
8
+ import {
9
+ endsWithEscapingBackslash,
10
+ serializeSegments,
11
+ tokenEnd,
12
+ TokenType,
13
+ } from './tokenUtils.js';
9
14
 
10
- const { balancedTokens } = cssnanoUtils;
15
+ const { balancedTokens, tokens: tokenizeValue } = cssnanoUtils;
11
16
 
12
17
  /**
13
18
  * @param {boolean} legacy
@@ -39,7 +44,7 @@ export default function transform(legacy, rule) {
39
44
  if (mediaIsUnconditional) {
40
45
  rule.params = '';
41
46
  if (rule.raws.params?.raw) rule.raws.params = { raw: '', value: '' };
42
- rule.raws.afterName = '';
47
+ updateAfterName(rule);
43
48
  return;
44
49
  }
45
50
  minifyWhitespace(structure, parents, changes);
@@ -59,5 +64,39 @@ export default function transform(legacy, rule) {
59
64
  rule.raws.params = { raw: rule.params, value: rule.params };
60
65
  }
61
66
 
62
- if (!rule.params.length) rule.raws.afterName = '';
67
+ updateAfterName(rule);
68
+ }
69
+
70
+ /**
71
+ * Strip whitespace after @media or @supports when parameters begin with (.
72
+ *
73
+ * @param {import('postcss').AtRule} rule
74
+ * @return {void}
75
+ */
76
+ function updateAfterName(rule) {
77
+ if (!rule.params.length) {
78
+ rule.raws.afterName = '';
79
+ } else if (
80
+ rule.params.startsWith('(') &&
81
+ !endsWithEscapingBackslash(rule.name)
82
+ ) {
83
+ rule.raws.afterName = stripWhitespacePreservingComments(
84
+ rule.raws.afterName
85
+ );
86
+ }
87
+ }
88
+
89
+ /**
90
+ * @param {string | undefined} raw
91
+ * @return {string}
92
+ */
93
+ function stripWhitespacePreservingComments(raw) {
94
+ if (!raw?.includes('/*')) return '';
95
+ let result = '';
96
+ for (const [type, tokenRaw] of tokenizeValue(raw)) {
97
+ if (type !== TokenType.Whitespace) {
98
+ result += tokenRaw;
99
+ }
100
+ }
101
+ return result;
63
102
  }
@@ -12,7 +12,7 @@ import {
12
12
  TokenType,
13
13
  tokenEnd,
14
14
  whitespaceInsensitiveFunctions,
15
- } from './token-utils.js';
15
+ } from './tokenUtils.js';
16
16
 
17
17
  const { numeric } = cssnanoUtils;
18
18
  /** @typedef {Exclude<ReturnType<typeof cssnanoUtils.balancedTokens>, undefined>['tokens']} Tokens */
@@ -5,6 +5,13 @@ declare const tokenEnd: typeof cssnanoUtils.tokenEnd;
5
5
  export type Tokens = Exclude<ReturnType<typeof cssnanoUtils.balancedTokens>, undefined>['tokens'];
6
6
  /** @typedef {Exclude<ReturnType<typeof cssnanoUtils.balancedTokens>, undefined>['tokens']} Tokens */
7
7
  export { TokenType, decoded, tokenEnd };
8
+ /**
9
+ * Reports whether a value ends in a backslash that begins an escape
10
+ * sequence, as opposed to a backslash that is itself escaped.
11
+ * @param {string} value
12
+ * @return {boolean}
13
+ */
14
+ export declare function endsWithEscapingBackslash(value: string): boolean;
8
15
  export declare const openingTypes: Set<import("@csstools/css-tokenizer").TokenType>;
9
16
  export declare const closingTypes: Set<import("@csstools/css-tokenizer").TokenType>;
10
17
  export declare const calcProductEndTypes: Set<import("@csstools/css-tokenizer").TokenType>;
@@ -1 +1 @@
1
- {"version":3,"file":"token-utils.d.ts","sourceRoot":"","sources":["../../src/lib/token-utils.js"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,QAAA,MAAQ,SAAS,oDAAiB,CAAC;AACnC,QAAA,MAAM,OAAO,EAAc,OAAO,YAAY,CAAC,OAE9C,CAAC;AACF,QAAA,MAAM,QAAQ,EAAc,OAAO,YAAY,CAAC,QAE/C,CAAC;AAEE,YAAwF,MAAM,GAApF,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAQ;AAAlG,qGAAqG;AAErG,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAExC,eAAO,MAAM,YAAY,kDAKvB,CAAC;AACH,eAAO,MAAM,YAAY,kDAIvB,CAAC;AACH,eAAO,MAAM,mBAAmB,kDAM9B,CAAC;AACH,eAAO,MAAM,qBAAqB,kDAOhC,CAAC;AACH,eAAO,MAAM,aAAa,aAA6B,CAAC;AACxD,eAAO,MAAM,8BAA8B,aAAwB,CAAC;AACpE,eAAO,MAAM,mBAAmB,aAO9B,CAAC;AA+BH;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAJrB,MAIqB,EAAE,KAAK,EAH5B,MAG4B,GAF3B,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAcvC;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,KAAK,EAD1B,MAC0B,EAAE,KAAK,EADX,MACW,EAAE,IAAI,EADK,MACL,GAD2B,MAAM,CAWnF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAL7B,MAK6B,EAAE,QAAQ,EAJvC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAA,GAAG,EAAC,MAAM,CAAA;CAAC,EAIc,EAAE,KAAK,EAH9C;IAAC,KAAK,EAAC,MAAM,CAAC;IAAA,GAAG,EAAC,MAAM,CAAC;IAAA,IAAI,EAAC,MAAM,CAAA;CAAC,EAGS,GAF7C,MAAM,EAAE,CA+CnB"}
1
+ {"version":3,"file":"token-utils.d.ts","sourceRoot":"","sources":["../../src/lib/token-utils.js"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,QAAA,MAAQ,SAAS,oDAAiB,CAAC;AACnC,QAAA,MAAM,OAAO,EAAc,OAAO,YAAY,CAAC,OAE9C,CAAC;AACF,QAAA,MAAM,QAAQ,EAAc,OAAO,YAAY,CAAC,QAE/C,CAAC;AAEE,YAAwF,MAAM,GAApF,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAQ;AAAlG,qGAAqG;AAErG,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAExC;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAHpC,MAGoC,GAFnC,OAAO,CAUlB;AAED,eAAO,MAAM,YAAY,kDAKvB,CAAC;AACH,eAAO,MAAM,YAAY,kDAIvB,CAAC;AACH,eAAO,MAAM,mBAAmB,kDAM9B,CAAC;AACH,eAAO,MAAM,qBAAqB,kDAOhC,CAAC;AACH,eAAO,MAAM,aAAa,aAA6B,CAAC;AACxD,eAAO,MAAM,8BAA8B,aAAwB,CAAC;AACpE,eAAO,MAAM,mBAAmB,aAO9B,CAAC;AA+BH;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAJrB,MAIqB,EAAE,KAAK,EAH5B,MAG4B,GAF3B,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAcvC;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,KAAK,EAD1B,MAC0B,EAAE,KAAK,EADX,MACW,EAAE,IAAI,EADK,MACL,GAD2B,MAAM,CAWnF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAL7B,MAK6B,EAAE,QAAQ,EAJvC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAA,GAAG,EAAC,MAAM,CAAA;CAAC,EAIc,EAAE,KAAK,EAH9C;IAAC,KAAK,EAAC,MAAM,CAAC;IAAA,GAAG,EAAC,MAAM,CAAC;IAAA,IAAI,EAAC,MAAM,CAAA;CAAC,EAGS,GAF7C,MAAM,EAAE,CA+CnB"}
@@ -0,0 +1,44 @@
1
+ import cssnanoUtils from 'cssnano-utils';
2
+ declare const TokenType: typeof import("@csstools/css-tokenizer").TokenType;
3
+ declare const decoded: typeof cssnanoUtils.decoded;
4
+ declare const tokenEnd: typeof cssnanoUtils.tokenEnd;
5
+ export type Tokens = Exclude<ReturnType<typeof cssnanoUtils.balancedTokens>, undefined>['tokens'];
6
+ /** @typedef {Exclude<ReturnType<typeof cssnanoUtils.balancedTokens>, undefined>['tokens']} Tokens */
7
+ export { TokenType, decoded, tokenEnd };
8
+ /**
9
+ * Reports whether a value ends in a backslash that begins an escape
10
+ * sequence, as opposed to a backslash that is itself escaped.
11
+ * @param {string} value
12
+ * @return {boolean}
13
+ */
14
+ export declare function endsWithEscapingBackslash(value: string): boolean;
15
+ export declare const openingTypes: Set<import("@csstools/css-tokenizer").TokenType>;
16
+ export declare const closingTypes: Set<import("@csstools/css-tokenizer").TokenType>;
17
+ export declare const calcProductEndTypes: Set<import("@csstools/css-tokenizer").TokenType>;
18
+ export declare const calcProductStartTypes: Set<import("@csstools/css-tokenizer").TokenType>;
19
+ export declare const mathFunctions: Set<string>;
20
+ export declare const whitespaceInsensitiveFunctions: Set<string>;
21
+ export declare const aspectRatioFeatures: Set<string>;
22
+ /**
23
+ * @param {string} left
24
+ * @param {string} right
25
+ * @return {[string, string] | undefined}
26
+ */
27
+ export declare function aspectRatio(left: string, right: string): [string, string] | undefined;
28
+ /** @param {Tokens} input @param {number} index @param {number} step @return {number} */
29
+ export declare function significantIndex(input: Tokens, index: number, step: number): number;
30
+ /**
31
+ * @param {string} source
32
+ * @param {{start:number,end:number}[]} segments
33
+ * @param {{start:number,end:number,text:string}[]} edits
34
+ * @return {string[]}
35
+ */
36
+ export declare function serializeSegments(source: string, segments: {
37
+ start: number;
38
+ end: number;
39
+ }[], edits: {
40
+ start: number;
41
+ end: number;
42
+ text: string;
43
+ }[]): string[];
44
+ //# sourceMappingURL=tokenUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenUtils.d.ts","sourceRoot":"","sources":["../../src/lib/tokenUtils.js"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,QAAA,MAAQ,SAAS,oDAAiB,CAAC;AACnC,QAAA,MAAM,OAAO,EAAc,OAAO,YAAY,CAAC,OAE9C,CAAC;AACF,QAAA,MAAM,QAAQ,EAAc,OAAO,YAAY,CAAC,QAE/C,CAAC;AAEE,YAAwF,MAAM,GAApF,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAQ;AAAlG,qGAAqG;AAErG,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAExC;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAHpC,MAGoC,GAFnC,OAAO,CAUlB;AAED,eAAO,MAAM,YAAY,kDAKvB,CAAC;AACH,eAAO,MAAM,YAAY,kDAIvB,CAAC;AACH,eAAO,MAAM,mBAAmB,kDAM9B,CAAC;AACH,eAAO,MAAM,qBAAqB,kDAOhC,CAAC;AACH,eAAO,MAAM,aAAa,aAA6B,CAAC;AACxD,eAAO,MAAM,8BAA8B,aAAwB,CAAC;AACpE,eAAO,MAAM,mBAAmB,aAO9B,CAAC;AA+BH;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAJrB,MAIqB,EAAE,KAAK,EAH5B,MAG4B,GAF3B,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAcvC;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,KAAK,EAD1B,MAC0B,EAAE,KAAK,EADX,MACW,EAAE,IAAI,EADK,MACL,GAD2B,MAAM,CAWnF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAL7B,MAK6B,EAAE,QAAQ,EAJvC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAA,GAAG,EAAC,MAAM,CAAA;CAAC,EAIc,EAAE,KAAK,EAH9C;IAAC,KAAK,EAAC,MAAM,CAAC;IAAA,GAAG,EAAC,MAAM,CAAC;IAAA,IAAI,EAAC,MAAM,CAAA;CAAC,EAGS,GAF7C,MAAM,EAAE,CA+CnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/lib/transform.js"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,MAAM,EAJ7B,OAI6B,EAAE,IAAI,EAHnC,OAAO,SAAS,EAAE,MAGiB,GAFlC,IAAI,CAgDf"}
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/lib/transform.js"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,MAAM,EAJ7B,OAI6B,EAAE,IAAI,EAHnC,OAAO,SAAS,EAAE,MAGiB,GAFlC,IAAI,CAgDf"}