diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a15760b5a..2771ece37 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,7 +14,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 + uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 with: version: 11 - name: Install Node.js @@ -38,7 +38,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 + uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 with: version: 11 - name: Install Node.js ${{ matrix.node-version }} @@ -66,7 +66,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 + uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 with: version: 3 env: @@ -88,7 +88,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 + uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 with: version: 10 - name: Install Node.js LTS diff --git a/CHANGELOG.md b/CHANGELOG.md index d502ec656..aa7eb91a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.14 + +- Fixed custom syntax regression (by @43081j). + ## 8.5.13 - Fixed `postcss-scss` commend regression. diff --git a/lib/processor.js b/lib/processor.js index bb07d537d..eabcd9f12 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.13' + this.version = '8.5.14' this.plugins = this.normalize(plugins) } diff --git a/lib/stringifier.js b/lib/stringifier.js index 72a3f9319..b1aa835d8 100644 --- a/lib/stringifier.js +++ b/lib/stringifier.js @@ -85,23 +85,15 @@ class Stringifier { } block(node, start) { - let raws = node.raws - let between = - typeof raws.between !== 'undefined' - ? raws.between - : this.raw(node, 'between', 'beforeOpen') + let between = this.raw(node, 'between', 'beforeOpen') this.builder(escapeHTMLInCSS(start + between) + '{', node, 'start') let after if (node.nodes && node.nodes.length) { this.body(node) - after = - typeof raws.after !== 'undefined' ? raws.after : this.raw(node, 'after') + after = this.raw(node, 'after') } else { - after = - typeof raws.after !== 'undefined' - ? raws.after - : this.raw(node, 'after', 'emptyBody') + after = this.raw(node, 'after', 'emptyBody') } if (after) this.builder(escapeHTMLInCSS(after)) @@ -120,34 +112,21 @@ class Stringifier { let isDocument = node.type === 'document' for (let i = 0; i < nodes.length; i++) { let child = nodes[i] - let before = child.raws.before - if (typeof before === 'undefined') { - before = this.raw(child, 'before') - } + let before = this.raw(child, 'before') if (before) this.builder(isDocument ? before : escapeHTMLInCSS(before)) this.stringify(child, last !== i || semicolon) } } comment(node) { - let raws = node.raws - let left = - typeof raws.left !== 'undefined' - ? raws.left - : this.raw(node, 'left', 'commentLeft') - let right = - typeof raws.right !== 'undefined' - ? raws.right - : this.raw(node, 'right', 'commentRight') + let left = this.raw(node, 'left', 'commentLeft') + let right = this.raw(node, 'right', 'commentRight') this.builder(escapeHTMLInCSS('/*' + left + node.text + right + '*/'), node) } decl(node, semicolon) { let raws = node.raws - let between = - typeof raws.between !== 'undefined' - ? raws.between - : this.raw(node, 'between', 'colon') + let between = this.raw(node, 'between', 'colon') let string = node.prop + between + this.rawValue(node, 'value') diff --git a/package.json b/package.json index 564aa23fa..f4203f432 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.13", + "version": "8.5.14", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", @@ -101,9 +101,9 @@ "actions-up": "^1.14.1", "c8": "^11.0.0", "check-dts": "^0.9.0", - "clean-publish": "^6.0.5", + "clean-publish": "^7.0.1", "concat-with-sourcemaps": "^1.1.0", - "eslint": "^10.2.1", + "eslint": "^10.3.0", "multiocular": "^0.8.3", "nanodelay": "^1.0.8", "nanospy": "^1.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba1cb0694..4bd549f65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,7 +20,7 @@ importers: devDependencies: '@logux/eslint-config': specifier: ^57.1.0 - version: 57.1.0(@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3) + version: 57.1.0(@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0)(typescript@5.9.3) '@logux/oxc-configs': specifier: ^0.4.0 version: 0.4.0(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3) @@ -40,14 +40,14 @@ importers: specifier: ^0.9.0 version: 0.9.0(typescript@5.9.3) clean-publish: - specifier: ^6.0.5 - version: 6.0.5 + specifier: ^7.0.1 + version: 7.0.1 concat-with-sourcemaps: specifier: ^1.1.0 version: 1.1.0 eslint: - specifier: ^10.2.1 - version: 10.2.1 + specifier: ^10.3.0 + version: 10.3.0 multiocular: specifier: ^0.8.3 version: 0.8.3 @@ -967,9 +967,9 @@ packages: peerDependencies: typescript: '>=4.0.0' - clean-publish@6.0.5: - resolution: {integrity: sha512-Iqm/EDPQFLY0I8kktg61Nt8V/5fiXYNkNR5UsHcLKmj4vp7a0a7EGZmNEbN2Hg77frQlHNljT/MruK5Wr/Rtog==} - engines: {node: '>= 20.0.0'} + clean-publish@7.0.1: + resolution: {integrity: sha512-Fr4c1dg6kEG4juBo2IMbft0w8inX0QTsbkRWIy5R0jZGWswQIpgOW0yfqV7bmyxn1F1eQtm9VBy5VDyB3go8WQ==} + engines: {node: '>= 22.0.0'} hasBin: true cliui@8.0.1: @@ -1132,8 +1132,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.2.1: - resolution: {integrity: sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==} + eslint@10.3.0: + resolution: {integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1846,9 +1846,9 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.2.1)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0)': dependencies: - eslint: 10.2.1 + eslint: 10.3.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -1930,16 +1930,16 @@ snapshots: dependencies: nanoevents: 9.1.0 - '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3)': + '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0)(typescript@5.9.3)': dependencies: '@eslint/eslintrc': 3.3.5 - eslint: 10.2.1 - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1) - eslint-plugin-n: 17.24.0(eslint@10.2.1)(typescript@5.9.3) - eslint-plugin-perfectionist: 5.9.0(eslint@10.2.1)(typescript@5.9.3) + eslint: 10.3.0 + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0) + eslint-plugin-n: 17.24.0(eslint@10.3.0)(typescript@5.9.3) + eslint-plugin-perfectionist: 5.9.0(eslint@10.3.0)(typescript@5.9.3) eslint-plugin-prefer-let: 4.2.2 globals: 17.5.0 - typescript-eslint: 8.59.1(eslint@10.2.1)(typescript@5.9.3) + typescript-eslint: 8.59.1(eslint@10.3.0)(typescript@5.9.3) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-node @@ -2171,15 +2171,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.1(eslint@10.3.0)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.59.1 - '@typescript-eslint/type-utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.1 - eslint: 10.2.1 + eslint: 10.3.0 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -2187,14 +2187,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.1(eslint@10.2.1)(typescript@5.9.3)': + '@typescript-eslint/parser@8.59.1(eslint@10.3.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.59.1 '@typescript-eslint/types': 8.59.1 '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.1 debug: 4.4.3 - eslint: 10.2.1 + eslint: 10.3.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2217,13 +2217,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.59.1(eslint@10.2.1)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.59.1(eslint@10.3.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.59.1 '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) debug: 4.4.3 - eslint: 10.2.1 + eslint: 10.3.0 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -2246,13 +2246,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3)': + '@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) '@typescript-eslint/scope-manager': 8.59.1 '@typescript-eslint/types': 8.59.1 '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) - eslint: 10.2.1 + eslint: 10.3.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2406,7 +2406,7 @@ snapshots: typescript: 5.9.3 vfile-location: 5.0.3 - clean-publish@6.0.5: + clean-publish@7.0.1: dependencies: lilconfig: 3.1.3 picomatch: 4.0.4 @@ -2515,9 +2515,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.2.1): + eslint-compat-utils@0.5.1(eslint@10.3.0): dependencies: - eslint: 10.2.1 + eslint: 10.3.0 semver: 7.7.4 eslint-import-context@0.1.9(unrs-resolver@1.11.1): @@ -2527,20 +2527,20 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-plugin-es-x@7.8.0(eslint@10.2.1): + eslint-plugin-es-x@7.8.0(eslint@10.3.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) '@eslint-community/regexpp': 4.12.2 - eslint: 10.2.1 - eslint-compat-utils: 0.5.1(eslint@10.2.1) + eslint: 10.3.0 + eslint-compat-utils: 0.5.1(eslint@10.3.0) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1): + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0): dependencies: '@package-json/types': 0.0.12 '@typescript-eslint/types': 8.59.1 comment-parser: 1.4.6 debug: 4.4.3 - eslint: 10.2.1 + eslint: 10.3.0 eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.2.5 @@ -2548,16 +2548,16 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.24.0(eslint@10.2.1)(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@10.3.0)(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) enhanced-resolve: 5.21.0 - eslint: 10.2.1 - eslint-plugin-es-x: 7.8.0(eslint@10.2.1) + eslint: 10.3.0 + eslint-plugin-es-x: 7.8.0(eslint@10.3.0) get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 @@ -2567,10 +2567,10 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@5.9.0(eslint@10.2.1)(typescript@5.9.3): + eslint-plugin-perfectionist@5.9.0(eslint@10.3.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) - eslint: 10.2.1 + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) + eslint: 10.3.0 natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color @@ -2593,9 +2593,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.2.1: + eslint@10.3.0: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.5.5 @@ -3085,13 +3085,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.59.1(eslint@10.2.1)(typescript@5.9.3): + typescript-eslint@8.59.1(eslint@10.3.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3) - '@typescript-eslint/parser': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.1(eslint@10.3.0)(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) - eslint: 10.2.1 + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) + eslint: 10.3.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color diff --git a/test/stringifier.test.js b/test/stringifier.test.js index c0afd658a..4414cd46e 100755 --- a/test/stringifier.test.js +++ b/test/stringifier.test.js @@ -320,4 +320,39 @@ test('does not escape Document raws', () => { is(document.toString(), 'a {}b {}') }) +test('always calls raw to retrieve raws', () => { + class CustomStringifier extends Stringifier { + raw(node, own, detect) { + return `\nRAW(${node.type}, ${own}, ${detect})\n` + } + } + let root = new Root() + let rootRule = new Rule({ selector: 'a' }) + let decl = new Declaration({ prop: 'color', value: 'black' }) + decl.raws.before = 'BEFORE' + decl.raws.between = 'BETWEEN' + decl.raws.after = 'AFTER' + root.append(rootRule) + rootRule.append(decl) + + let stringify = (node, builder) => { + let customStringifier = new CustomStringifier(builder) + customStringifier.stringify(node) + } + let result = root.toString(stringify) + is(result, [ + '', + 'RAW(rule, before, undefined)', + 'a', + 'RAW(rule, between, beforeOpen)', + '{', + 'RAW(decl, before, undefined)', + 'color', + 'RAW(decl, between, colon)', + 'black;', + 'RAW(rule, after, undefined)', + '}' + ].join('\n')) +}) + test.run()