diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 25f71186d..1385b9541 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -32,7 +32,7 @@ jobs: - name: setup node uses: actions/setup-node@v4 with: - node-version: 22 + node-version: 24 cache: 'npm' - run: npm ci --ignore-scripts diff --git a/.github/workflows/deploy-preset-env.yml b/.github/workflows/deploy-preset-env.yml index e405ae1e4..772463d36 100644 --- a/.github/workflows/deploy-preset-env.yml +++ b/.github/workflows/deploy-preset-env.yml @@ -22,7 +22,7 @@ jobs: fetch-depth: 1 - uses: actions/setup-node@v4 with: - node-version: 22 + node-version: 24 - name: npm ci run: | diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index a25b1ef95..063e0c558 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -19,7 +19,7 @@ jobs: fetch-depth: 1 - uses: actions/setup-node@v4 with: - node-version: 22 + node-version: 24 - name: npm ci run: | diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f27c9ac62..34869035c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,20 +15,20 @@ jobs: runs-on: ${{ matrix.os }} strategy: fail-fast: false - # Test node 18/20/22 on ubuntu - # Test node 22 on macos/windows - # Enable annotations only for node 22 + ubuntu + # Test node 18/20/22/24 on ubuntu + # Test node 24 on macos/windows + # Enable annotations only for node 24 + ubuntu matrix: os: [ubuntu-latest] - node: [18, 20, 22] + node: [18, 20, 22, 24] include: - os: macos-latest - node: 22 + node: 24 - os: windows-latest - node: 22 + node: 24 - os: ubuntu-latest is_base_os_version: true - - node: 22 + - node: 24 is_base_node_version: true steps: - uses: actions/checkout@v4 diff --git a/.nvmrc b/.nvmrc index dc0bb0f43..2db9b1297 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22.12.0 +v24.0.1 diff --git a/cli/csstools-cli/.nvmrc b/cli/csstools-cli/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/cli/csstools-cli/.nvmrc +++ b/cli/csstools-cli/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/e2e-package-managers/yarn/.nvmrc b/e2e-package-managers/yarn/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/e2e-package-managers/yarn/.nvmrc +++ b/e2e-package-managers/yarn/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/e2e/.nvmrc b/e2e/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/e2e/.nvmrc +++ b/e2e/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/e2e/browserslist/package-json/.nvmrc b/e2e/browserslist/package-json/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/e2e/browserslist/package-json/.nvmrc +++ b/e2e/browserslist/package-json/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/e2e/interop/custom-media--design-tokens--global-data/.nvmrc b/e2e/interop/custom-media--design-tokens--global-data/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/e2e/interop/custom-media--design-tokens--global-data/.nvmrc +++ b/e2e/interop/custom-media--design-tokens--global-data/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/e2e/postcss-cli/commonjs/.nvmrc b/e2e/postcss-cli/commonjs/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/e2e/postcss-cli/commonjs/.nvmrc +++ b/e2e/postcss-cli/commonjs/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/e2e/postcss-cli/esm/.nvmrc b/e2e/postcss-cli/esm/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/e2e/postcss-cli/esm/.nvmrc +++ b/e2e/postcss-cli/esm/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/e2e/typescript/commonjs/.nvmrc b/e2e/typescript/commonjs/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/e2e/typescript/commonjs/.nvmrc +++ b/e2e/typescript/commonjs/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/e2e/typescript/esm/.nvmrc b/e2e/typescript/esm/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/e2e/typescript/esm/.nvmrc +++ b/e2e/typescript/esm/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/e2e/webpack/bundle-through/.nvmrc b/e2e/webpack/bundle-through/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/e2e/webpack/bundle-through/.nvmrc +++ b/e2e/webpack/bundle-through/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/e2e/webpack/postcss-loader/.nvmrc b/e2e/webpack/postcss-loader/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/e2e/webpack/postcss-loader/.nvmrc +++ b/e2e/webpack/postcss-loader/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/experimental/css-has-pseudo/.nvmrc b/experimental/css-has-pseudo/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/experimental/css-has-pseudo/.nvmrc +++ b/experimental/css-has-pseudo/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/experimental/postcss-gradient-stop-increments/.nvmrc b/experimental/postcss-gradient-stop-increments/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/experimental/postcss-gradient-stop-increments/.nvmrc +++ b/experimental/postcss-gradient-stop-increments/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/experimental/postcss-nesting/.nvmrc b/experimental/postcss-nesting/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/experimental/postcss-nesting/.nvmrc +++ b/experimental/postcss-nesting/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/package.json b/package.json index ef2f10636..f2a6f3f3a 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,6 @@ "knip": "knip" }, "volta": { - "node": "22.12.0" + "node": "24.0.1" } } diff --git a/packages/base-cli/.nvmrc b/packages/base-cli/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/packages/base-cli/.nvmrc +++ b/packages/base-cli/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/packages/cascade-layer-name-parser/.nvmrc b/packages/cascade-layer-name-parser/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/packages/cascade-layer-name-parser/.nvmrc +++ b/packages/cascade-layer-name-parser/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/packages/color-helpers/.nvmrc b/packages/color-helpers/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/packages/color-helpers/.nvmrc +++ b/packages/color-helpers/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/packages/css-calc/.nvmrc b/packages/css-calc/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/packages/css-calc/.nvmrc +++ b/packages/css-calc/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/packages/css-color-parser/.nvmrc b/packages/css-color-parser/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/packages/css-color-parser/.nvmrc +++ b/packages/css-color-parser/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/packages/css-parser-algorithms/.nvmrc b/packages/css-parser-algorithms/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/packages/css-parser-algorithms/.nvmrc +++ b/packages/css-parser-algorithms/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/packages/css-tokenizer/.nvmrc b/packages/css-tokenizer/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/packages/css-tokenizer/.nvmrc +++ b/packages/css-tokenizer/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/packages/generate-test-cases/.nvmrc b/packages/generate-test-cases/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/packages/generate-test-cases/.nvmrc +++ b/packages/generate-test-cases/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/packages/media-query-list-parser/.nvmrc b/packages/media-query-list-parser/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/packages/media-query-list-parser/.nvmrc +++ b/packages/media-query-list-parser/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/packages/postcss-tape/CHANGELOG.md b/packages/postcss-tape/CHANGELOG.md index 4c0314e4b..5afa4fd53 100644 --- a/packages/postcss-tape/CHANGELOG.md +++ b/packages/postcss-tape/CHANGELOG.md @@ -1,5 +1,9 @@ # Changes to PostCSS Tape +### Unreleased (patch) + +- Add support for Node 24 + ### 6.0.0 _February 12, 2025_ diff --git a/packages/postcss-tape/dist/index.cjs b/packages/postcss-tape/dist/index.cjs index e61942995..35b9f7d4a 100644 --- a/packages/postcss-tape/dist/index.cjs +++ b/packages/postcss-tape/dist/index.cjs @@ -1,3 +1,3 @@ /* node:coverage disable */ -"use strict";var e=require("node:assert/strict"),s=require("node:fs/promises"),t=require("node:fs"),n=require("node:path"),o=require("postcss"),r=require("postcss-8.4"),i=require("node:test"),a=require("node:url");const noopPlugin=()=>({postcssPlugin:"noop-plugin",Once(){}});async function fileContentsOrEmptyString(e){try{return await s.readFile(e,"utf8")}catch{return""}}function reduceInformationInCssSyntaxError(e){process.env.DEBUG||(delete e.source,e.input&&delete e.input.source,delete e.postcssNode)}noopPlugin.postcss=!0;const c={postcssPlugin:"declaration-cloner",Declaration(e){"to-clone"===e.prop&&e.cloneBefore({prop:"cloned"})}},p={postcssPlugin:"rule-cloner",prepare(){const e=new WeakSet;return{postcssPlugin:"rule-cloner",RuleExit(s){e.has(s)||"to-clone"===s.selector&&(e.add(s),s.cloneBefore({selector:"cloned"}))}}}},l={postcssPlugin:"at-rule-cloner",prepare(){const e=new WeakSet;return{postcssPlugin:"at-rule-cloner",AtRuleExit(s){if(!e.has(s))return"to-clone"===s.params?(e.add(s),void s.cloneBefore({params:"cloned"})):"to-clone"===s.name?(e.add(s),void s.cloneBefore({name:"cloned"})):void 0}}}};class PackageDescriptionError extends Error{constructor(e,s){super(e),this.name="PackageDescriptionError",this.stack=`${this.name}: ${this.message}\n at "${s}" (${a.pathToFileURL(n.resolve("package.json")).href}:1:1)`}}class OutcomeError extends Error{constructor(e,s){super(e),this.name="OutcomeError",this.stack=`${this.name}: ${this.message}\n at ${a.pathToFileURL(n.resolve(s)).href}:1:1`}}exports.atRuleClonerPlugin=l,exports.declarationClonerPlugin=c,exports.postcssTape=function postcssTape(a,c){return async p=>{c=c??{},await i("`postcss` flag is set on exported plugin creator",(()=>{e.equal(a.postcss,!0)})),await i("exported plugin creator is a function",(()=>{e.equal(typeof a,"function")})),await i("`postcssPlugin` is set on a plugin instance",(()=>{const s=a();e.ok(s.postcssPlugin),e.equal(typeof s.postcssPlugin,"string")})),await i("package.json",(async t=>{const n=await s.readFile("./package.json","utf-8"),o=JSON.parse(n);await t.test('includes "postcss-plugin" keyword',(()=>{e.ok(Array.isArray(o.keywords)&&o.keywords?.includes("postcss-plugin"),new PackageDescriptionError('Missing "postcss-plugin" keyword in package.json',"keywords"))})),await t.test('name starts with "postcss-"',{skip:c?.skipPackageNameCheck},(()=>{let s="string"==typeof o.name?o.name:"";if(s.startsWith("@")){const e=s.split("/");s=e.slice(1).join("/")}e.ok(s.startsWith("postcss-"),new PackageDescriptionError(`package name "${s}" does not start with "postcss-"`,"name"))})),await t.test("`postcss` is a peer dependency and not a direct dependency",{skip:"postcssTapeSelfTest"in a},(()=>{e.ok(Object.keys(Object(o.peerDependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must be listed in "peerDependencies"',"peerDependencies")),e.ok(!Object.keys(Object(o.dependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must not be listed in "dependencies"',"dependencies"))}))}));const l=a().postcssPlugin;await i(l,(async i=>{for(const c in p)await i.test(c,(async i=>{const l=p[c];l.before&&await l.before();const u=n.join(".","test",...c.split(":")[0].split(n.posix.sep)),d=n.join(".","test",...c.replace(/:/g,".").split(n.posix.sep)),g="css";let w=`${u}.${g}`,m=`${d}.expect.${g}`,f=`${d}.result.${g}`;l.source&&(w=n.join(".","test",l.source)),l.expect&&(m=n.join(".","test",l.expect)),l.result&&(f=n.join(".","test",l.result));const k=l.plugins??[a(l.options)],h=await fileContentsOrEmptyString(w),y=await fileContentsOrEmptyString(m);let E;try{E=await o(k).process(h,{from:w,to:f,map:{inline:!1,annotation:!1}})}catch(e){if(!(e instanceof Error))throw e;if(reduceInformationInCssSyntaxError(e),l.exception&&l.exception.test(e.message))return;throw e}e.ok(!l.exception,new OutcomeError(`expected an exception matching "${l.exception}"`,w));const x=E.css.toString();{const e=[s.writeFile(f,x,"utf8")];process.env.REWRITE_EXPECTS&&e.push(s.writeFile(m,x,"utf8")),await Promise.all(e)}y||e.ok(t.existsSync(m),new OutcomeError(`Missing expect file: "${m}"`,w)),await i.test("has expected output",(()=>{e.deepEqual(x,y),e.deepEqual(E.warnings().length,l.warnings??0,`Unexpected number warnings:\n${E.warnings().toString()}`)})),await i.test("sourcemaps",(()=>{e.ok(!E.map.toJSON().sources.includes(""),'Sourcemap is broken. This is most likely a newly created PostCSS AST Node without a value for "source". See: https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#24-set-nodesource-for-new-nodes')})),l.after&&await l.after(),await i.test("output is parsable with PostCSS",(async()=>{const s=await fileContentsOrEmptyString(f),t=await o([noopPlugin()]).process(s,{from:f,to:f,map:{inline:!1,annotation:!1}});e.deepEqual(t.warnings(),[],"Unexpected warnings on second pass")})),await i.test("The oldest and current PostCSS version produce the same result",{skip:o([noopPlugin()]).version===r([noopPlugin()]).version},(async()=>{const s=await r(k).process(h,{from:w,to:f,map:{inline:!1,annotation:!1}});e.deepEqual(s.css.toString(),x)}))}))}))}},exports.ruleClonerPlugin=p; +"use strict";var e=require("node:assert/strict"),s=require("node:fs/promises"),t=require("node:fs"),n=require("node:path"),o=require("postcss"),r=require("postcss-8.4"),i=require("node:test"),a=require("node:url");const noopPlugin=()=>({postcssPlugin:"noop-plugin",Once(){}});async function fileContentsOrEmptyString(e){try{return await s.readFile(e,"utf8")}catch{return""}}function reduceInformationInCssSyntaxError(e){process.env.DEBUG||(delete e.source,e.input&&delete e.input.source,delete e.postcssNode)}noopPlugin.postcss=!0;const c={postcssPlugin:"declaration-cloner",Declaration(e){"to-clone"===e.prop&&e.cloneBefore({prop:"cloned"})}},p={postcssPlugin:"rule-cloner",prepare(){const e=new WeakSet;return{postcssPlugin:"rule-cloner",RuleExit(s){e.has(s)||"to-clone"===s.selector&&(e.add(s),s.cloneBefore({selector:"cloned"}))}}}},l={postcssPlugin:"at-rule-cloner",prepare(){const e=new WeakSet;return{postcssPlugin:"at-rule-cloner",AtRuleExit(s){if(!e.has(s))return"to-clone"===s.params?(e.add(s),void s.cloneBefore({params:"cloned"})):"to-clone"===s.name?(e.add(s),void s.cloneBefore({name:"cloned"})):void 0}}}};class PackageDescriptionError extends Error{constructor(e,s){super(e),this.name="PackageDescriptionError",this.stack=`${this.name}: ${this.message}\n at "${s}" (${a.pathToFileURL(n.resolve("package.json")).href}:1:1)`}}class OutcomeError extends Error{constructor(e,s){super(e),this.name="OutcomeError",this.stack=`${this.name}: ${this.message}\n at ${a.pathToFileURL(n.resolve(s)).href}:1:1`}}exports.atRuleClonerPlugin=l,exports.declarationClonerPlugin=c,exports.postcssTape=function postcssTape(a,c){return async p=>{c=c??{},await i("`postcss` flag is set on exported plugin creator",(()=>{e.equal(a.postcss,!0)})),await i("exported plugin creator is a function",(()=>{e.equal(typeof a,"function")})),await i("`postcssPlugin` is set on a plugin instance",(()=>{const s=a();e.ok(s.postcssPlugin),e.equal(typeof s.postcssPlugin,"string")})),await i("package.json",(async t=>{const n=await s.readFile("./package.json","utf-8"),o=JSON.parse(n);await t.test('includes "postcss-plugin" keyword',(()=>{e.ok(Array.isArray(o.keywords)&&o.keywords?.includes("postcss-plugin"),new PackageDescriptionError('Missing "postcss-plugin" keyword in package.json',"keywords"))})),await t.test('name starts with "postcss-"',{skip:c?.skipPackageNameCheck},(()=>{let s="string"==typeof o.name?o.name:"";if(s.startsWith("@")){const e=s.split("/");s=e.slice(1).join("/")}e.ok(s.startsWith("postcss-"),new PackageDescriptionError(`package name "${s}" does not start with "postcss-"`,"name"))})),await t.test("`postcss` is a peer dependency and not a direct dependency",{skip:"postcssTapeSelfTest"in a},(()=>{e.ok(Object.keys(Object(o.peerDependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must be listed in "peerDependencies"',"peerDependencies")),e.ok(!Object.keys(Object(o.dependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must not be listed in "dependencies"',"dependencies"))}))}));const l=a().postcssPlugin;await i(l,(async i=>{for(const c in p)await i.test(c,(async i=>{const l=p[c];l.before&&await l.before();const u=n.join(".","test",...c.split(":")[0].split(n.posix.sep)),d=n.join(".","test",...c.replace(/:/g,".").split(n.posix.sep)),g="css";let w=`${u}.${g}`,m=`${d}.expect.${g}`,f=`${d}.result.${g}`;l.source&&(w=n.join(".","test",l.source)),l.expect&&(m=n.join(".","test",l.expect)),l.result&&(f=n.join(".","test",l.result));const k=l.plugins??[a(l.options)],h=await fileContentsOrEmptyString(w),y=await fileContentsOrEmptyString(m);let E,x=null;const P=o([noopPlugin()]).version===r([noopPlugin()]).version;try{E=await o(k).process(h,{from:w,to:f,map:{inline:!1,annotation:!1}});try{x=P?null:await r(k).process(h,{from:w,to:f,map:{inline:!1,annotation:!1}})}catch{}}catch(e){if(!(e instanceof Error))throw e;if(reduceInformationInCssSyntaxError(e),l.exception&&l.exception.test(e.message))return;throw e}e.ok(!l.exception,new OutcomeError(`expected an exception matching "${l.exception}"`,w));const S=E.css.toString();{const e=[s.writeFile(f,S,"utf8")];process.env.REWRITE_EXPECTS&&e.push(s.writeFile(m,S,"utf8")),await Promise.all(e)}y||e.ok(t.existsSync(m),new OutcomeError(`Missing expect file: "${m}"`,w)),l.after&&await l.after();const $=await fileContentsOrEmptyString(f);let q=null;try{q=await o([noopPlugin()]).process($,{from:f,to:f,map:{inline:!1,annotation:!1}})}catch{}await i.test("has expected output",(()=>{e.deepEqual(S,y),e.deepEqual(E.warnings().length,l.warnings??0,`Unexpected number warnings:\n${E.warnings().toString()}`)})),await i.test("sourcemaps",(()=>{e.ok(!E.map.toJSON().sources.includes(""),'Sourcemap is broken. This is most likely a newly created PostCSS AST Node without a value for "source". See: https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#24-set-nodesource-for-new-nodes')})),await i.test("output is parsable with PostCSS",(()=>{e.deepEqual(q?.warnings(),[],"Unexpected warnings on second pass")})),await i.test("The oldest and current PostCSS version produce the same result",{skip:P},(()=>{e.deepEqual(x?.css?.toString(),S)}))}))}))}},exports.ruleClonerPlugin=p; /* node:coverage enable */ diff --git a/packages/postcss-tape/dist/index.mjs b/packages/postcss-tape/dist/index.mjs index b046d0df5..79a645d83 100644 --- a/packages/postcss-tape/dist/index.mjs +++ b/packages/postcss-tape/dist/index.mjs @@ -1,3 +1,3 @@ /* node:coverage disable */ -import e from"node:assert/strict";import s from"node:fs/promises";import t from"node:fs";import o from"node:path";import n from"postcss";import r from"postcss-8.4";import i from"node:test";import a from"node:url";const noopPlugin=()=>({postcssPlugin:"noop-plugin",Once(){}});async function fileContentsOrEmptyString(e){try{return await s.readFile(e,"utf8")}catch{return""}}function reduceInformationInCssSyntaxError(e){process.env.DEBUG||(delete e.source,e.input&&delete e.input.source,delete e.postcssNode)}function postcssTape(a,c){return async p=>{c=c??{},await i("`postcss` flag is set on exported plugin creator",(()=>{e.equal(a.postcss,!0)})),await i("exported plugin creator is a function",(()=>{e.equal(typeof a,"function")})),await i("`postcssPlugin` is set on a plugin instance",(()=>{const s=a();e.ok(s.postcssPlugin),e.equal(typeof s.postcssPlugin,"string")})),await i("package.json",(async t=>{const o=await s.readFile("./package.json","utf-8"),n=JSON.parse(o);await t.test('includes "postcss-plugin" keyword',(()=>{e.ok(Array.isArray(n.keywords)&&n.keywords?.includes("postcss-plugin"),new PackageDescriptionError('Missing "postcss-plugin" keyword in package.json',"keywords"))})),await t.test('name starts with "postcss-"',{skip:c?.skipPackageNameCheck},(()=>{let s="string"==typeof n.name?n.name:"";if(s.startsWith("@")){const e=s.split("/");s=e.slice(1).join("/")}e.ok(s.startsWith("postcss-"),new PackageDescriptionError(`package name "${s}" does not start with "postcss-"`,"name"))})),await t.test("`postcss` is a peer dependency and not a direct dependency",{skip:"postcssTapeSelfTest"in a},(()=>{e.ok(Object.keys(Object(n.peerDependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must be listed in "peerDependencies"',"peerDependencies")),e.ok(!Object.keys(Object(n.dependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must not be listed in "dependencies"',"dependencies"))}))}));const l=a().postcssPlugin;await i(l,(async i=>{for(const c in p)await i.test(c,(async i=>{const l=p[c];l.before&&await l.before();const u=o.join(".","test",...c.split(":")[0].split(o.posix.sep)),d=o.join(".","test",...c.replace(/:/g,".").split(o.posix.sep)),m="css";let g=`${u}.${m}`,w=`${d}.expect.${m}`,f=`${d}.result.${m}`;l.source&&(g=o.join(".","test",l.source)),l.expect&&(w=o.join(".","test",l.expect)),l.result&&(f=o.join(".","test",l.result));const k=l.plugins??[a(l.options)],h=await fileContentsOrEmptyString(g),y=await fileContentsOrEmptyString(w);let E;try{E=await n(k).process(h,{from:g,to:f,map:{inline:!1,annotation:!1}})}catch(e){if(!(e instanceof Error))throw e;if(reduceInformationInCssSyntaxError(e),l.exception&&l.exception.test(e.message))return;throw e}e.ok(!l.exception,new OutcomeError(`expected an exception matching "${l.exception}"`,g));const x=E.css.toString();{const e=[s.writeFile(f,x,"utf8")];process.env.REWRITE_EXPECTS&&e.push(s.writeFile(w,x,"utf8")),await Promise.all(e)}y||e.ok(t.existsSync(w),new OutcomeError(`Missing expect file: "${w}"`,g)),await i.test("has expected output",(()=>{e.deepEqual(x,y),e.deepEqual(E.warnings().length,l.warnings??0,`Unexpected number warnings:\n${E.warnings().toString()}`)})),await i.test("sourcemaps",(()=>{e.ok(!E.map.toJSON().sources.includes(""),'Sourcemap is broken. This is most likely a newly created PostCSS AST Node without a value for "source". See: https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#24-set-nodesource-for-new-nodes')})),l.after&&await l.after(),await i.test("output is parsable with PostCSS",(async()=>{const s=await fileContentsOrEmptyString(f),t=await n([noopPlugin()]).process(s,{from:f,to:f,map:{inline:!1,annotation:!1}});e.deepEqual(t.warnings(),[],"Unexpected warnings on second pass")})),await i.test("The oldest and current PostCSS version produce the same result",{skip:n([noopPlugin()]).version===r([noopPlugin()]).version},(async()=>{const s=await r(k).process(h,{from:g,to:f,map:{inline:!1,annotation:!1}});e.deepEqual(s.css.toString(),x)}))}))}))}}noopPlugin.postcss=!0;const c={postcssPlugin:"declaration-cloner",Declaration(e){"to-clone"===e.prop&&e.cloneBefore({prop:"cloned"})}},p={postcssPlugin:"rule-cloner",prepare(){const e=new WeakSet;return{postcssPlugin:"rule-cloner",RuleExit(s){e.has(s)||"to-clone"===s.selector&&(e.add(s),s.cloneBefore({selector:"cloned"}))}}}},l={postcssPlugin:"at-rule-cloner",prepare(){const e=new WeakSet;return{postcssPlugin:"at-rule-cloner",AtRuleExit(s){if(!e.has(s))return"to-clone"===s.params?(e.add(s),void s.cloneBefore({params:"cloned"})):"to-clone"===s.name?(e.add(s),void s.cloneBefore({name:"cloned"})):void 0}}}};class PackageDescriptionError extends Error{constructor(e,s){super(e),this.name="PackageDescriptionError",this.stack=`${this.name}: ${this.message}\n at "${s}" (${a.pathToFileURL(o.resolve("package.json")).href}:1:1)`}}class OutcomeError extends Error{constructor(e,s){super(e),this.name="OutcomeError",this.stack=`${this.name}: ${this.message}\n at ${a.pathToFileURL(o.resolve(s)).href}:1:1`}}export{l as atRuleClonerPlugin,c as declarationClonerPlugin,postcssTape,p as ruleClonerPlugin}; +import e from"node:assert/strict";import t from"node:fs/promises";import s from"node:fs";import o from"node:path";import n from"postcss";import r from"postcss-8.4";import i from"node:test";import a from"node:url";const noopPlugin=()=>({postcssPlugin:"noop-plugin",Once(){}});async function fileContentsOrEmptyString(e){try{return await t.readFile(e,"utf8")}catch{return""}}function reduceInformationInCssSyntaxError(e){process.env.DEBUG||(delete e.source,e.input&&delete e.input.source,delete e.postcssNode)}function postcssTape(a,c){return async p=>{c=c??{},await i("`postcss` flag is set on exported plugin creator",(()=>{e.equal(a.postcss,!0)})),await i("exported plugin creator is a function",(()=>{e.equal(typeof a,"function")})),await i("`postcssPlugin` is set on a plugin instance",(()=>{const t=a();e.ok(t.postcssPlugin),e.equal(typeof t.postcssPlugin,"string")})),await i("package.json",(async s=>{const o=await t.readFile("./package.json","utf-8"),n=JSON.parse(o);await s.test('includes "postcss-plugin" keyword',(()=>{e.ok(Array.isArray(n.keywords)&&n.keywords?.includes("postcss-plugin"),new PackageDescriptionError('Missing "postcss-plugin" keyword in package.json',"keywords"))})),await s.test('name starts with "postcss-"',{skip:c?.skipPackageNameCheck},(()=>{let t="string"==typeof n.name?n.name:"";if(t.startsWith("@")){const e=t.split("/");t=e.slice(1).join("/")}e.ok(t.startsWith("postcss-"),new PackageDescriptionError(`package name "${t}" does not start with "postcss-"`,"name"))})),await s.test("`postcss` is a peer dependency and not a direct dependency",{skip:"postcssTapeSelfTest"in a},(()=>{e.ok(Object.keys(Object(n.peerDependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must be listed in "peerDependencies"',"peerDependencies")),e.ok(!Object.keys(Object(n.dependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must not be listed in "dependencies"',"dependencies"))}))}));const l=a().postcssPlugin;await i(l,(async i=>{for(const c in p)await i.test(c,(async i=>{const l=p[c];l.before&&await l.before();const u=o.join(".","test",...c.split(":")[0].split(o.posix.sep)),d=o.join(".","test",...c.replace(/:/g,".").split(o.posix.sep)),m="css";let g=`${u}.${m}`,w=`${d}.expect.${m}`,f=`${d}.result.${m}`;l.source&&(g=o.join(".","test",l.source)),l.expect&&(w=o.join(".","test",l.expect)),l.result&&(f=o.join(".","test",l.result));const k=l.plugins??[a(l.options)],h=await fileContentsOrEmptyString(g),y=await fileContentsOrEmptyString(w);let E,x=null;const S=n([noopPlugin()]).version===r([noopPlugin()]).version;try{E=await n(k).process(h,{from:g,to:f,map:{inline:!1,annotation:!1}});try{x=S?null:await r(k).process(h,{from:g,to:f,map:{inline:!1,annotation:!1}})}catch{}}catch(e){if(!(e instanceof Error))throw e;if(reduceInformationInCssSyntaxError(e),l.exception&&l.exception.test(e.message))return;throw e}e.ok(!l.exception,new OutcomeError(`expected an exception matching "${l.exception}"`,g));const P=E.css.toString();{const e=[t.writeFile(f,P,"utf8")];process.env.REWRITE_EXPECTS&&e.push(t.writeFile(w,P,"utf8")),await Promise.all(e)}y||e.ok(s.existsSync(w),new OutcomeError(`Missing expect file: "${w}"`,g)),l.after&&await l.after();const $=await fileContentsOrEmptyString(f);let O=null;try{O=await n([noopPlugin()]).process($,{from:f,to:f,map:{inline:!1,annotation:!1}})}catch{}await i.test("has expected output",(()=>{e.deepEqual(P,y),e.deepEqual(E.warnings().length,l.warnings??0,`Unexpected number warnings:\n${E.warnings().toString()}`)})),await i.test("sourcemaps",(()=>{e.ok(!E.map.toJSON().sources.includes(""),'Sourcemap is broken. This is most likely a newly created PostCSS AST Node without a value for "source". See: https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#24-set-nodesource-for-new-nodes')})),await i.test("output is parsable with PostCSS",(()=>{e.deepEqual(O?.warnings(),[],"Unexpected warnings on second pass")})),await i.test("The oldest and current PostCSS version produce the same result",{skip:S},(()=>{e.deepEqual(x?.css?.toString(),P)}))}))}))}}noopPlugin.postcss=!0;const c={postcssPlugin:"declaration-cloner",Declaration(e){"to-clone"===e.prop&&e.cloneBefore({prop:"cloned"})}},p={postcssPlugin:"rule-cloner",prepare(){const e=new WeakSet;return{postcssPlugin:"rule-cloner",RuleExit(t){e.has(t)||"to-clone"===t.selector&&(e.add(t),t.cloneBefore({selector:"cloned"}))}}}},l={postcssPlugin:"at-rule-cloner",prepare(){const e=new WeakSet;return{postcssPlugin:"at-rule-cloner",AtRuleExit(t){if(!e.has(t))return"to-clone"===t.params?(e.add(t),void t.cloneBefore({params:"cloned"})):"to-clone"===t.name?(e.add(t),void t.cloneBefore({name:"cloned"})):void 0}}}};class PackageDescriptionError extends Error{constructor(e,t){super(e),this.name="PackageDescriptionError",this.stack=`${this.name}: ${this.message}\n at "${t}" (${a.pathToFileURL(o.resolve("package.json")).href}:1:1)`}}class OutcomeError extends Error{constructor(e,t){super(e),this.name="OutcomeError",this.stack=`${this.name}: ${this.message}\n at ${a.pathToFileURL(o.resolve(t)).href}:1:1`}}export{l as atRuleClonerPlugin,c as declarationClonerPlugin,postcssTape,p as ruleClonerPlugin}; /* node:coverage enable */ diff --git a/packages/postcss-tape/src/index.ts b/packages/postcss-tape/src/index.ts index 8b9275f60..633f12d66 100644 --- a/packages/postcss-tape/src/index.ts +++ b/packages/postcss-tape/src/index.ts @@ -39,7 +39,7 @@ import url from 'node:url'; import { fileContentsOrEmptyString } from './file-contents-or-empty-string'; import { reduceInformationInCssSyntaxError } from './reduce-css-syntax-error'; -import type { AcceptedPlugin as AcceptedPluginOldestPostCSS } from 'postcss-8.4'; +import type { AcceptedPlugin as AcceptedPluginOldestPostCSS, Result as ResultOldestPostCSS } from 'postcss-8.4'; import type { AtRule, Declaration, Rule } from 'postcss'; import type { PluginCreator, Plugin, Result } from 'postcss'; import type { TestCaseOptions } from './test-case-options'; @@ -176,6 +176,9 @@ export function postcssTape(pluginCreator: PluginCreator, runOptions?: const expected = await fileContentsOrEmptyString(expectFilePath); let result: Result; + let resultFromOldestPostCSS: ResultOldestPostCSS | null = null; + + const olderVersionAndCurrentVersionAreTheSame = postcss([noopPlugin()]).version === postcssOldestSupported([noopPlugin() as AcceptedPluginOldestPostCSS]).version; try { result = await postcss(plugins).process(input, { @@ -186,6 +189,17 @@ export function postcssTape(pluginCreator: PluginCreator, runOptions?: annotation: false, }, }); + + try { + resultFromOldestPostCSS = olderVersionAndCurrentVersionAreTheSame ? null : await postcssOldestSupported(plugins as Array).process(input, { + from: testFilePath, + to: resultFilePath, + map: { + inline: false, + annotation: false, + }, + }); + } catch { /* empty */ } } catch (err) { if (!(err instanceof Error)) { throw err; @@ -228,27 +242,15 @@ export function postcssTape(pluginCreator: PluginCreator, runOptions?: ); } - await t2.test('has expected output', () => { - assert.deepEqual(resultString, expected); - - // Assert that warnings have the expected amount. - assert.deepEqual(result.warnings().length, testCaseOptions.warnings ?? 0, `Unexpected number warnings:\n${result.warnings().toString()}`); - }); - - // Assert result sourcemaps with recent PostCSS. - await t2.test('sourcemaps', () => { - assert.ok(!result.map.toJSON().sources.includes(''), 'Sourcemap is broken. This is most likely a newly created PostCSS AST Node without a value for "source". See: https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#24-set-nodesource-for-new-nodes'); - }); - // Run "after" when initial postcss run has completely. if (testCaseOptions.after) { await testCaseOptions.after(); } - // Assert that the result can be passed back to PostCSS and still parses. - await t2.test('output is parsable with PostCSS', async () => { - const resultContents = await fileContentsOrEmptyString(resultFilePath); - const secondPassResult = await postcss([noopPlugin()]).process(resultContents, { + const resultContents = await fileContentsOrEmptyString(resultFilePath); + let secondPassResult: Result | null = null; + try { + secondPassResult = await postcss([noopPlugin()]).process(resultContents, { from: resultFilePath, to: resultFilePath, map: { @@ -256,24 +258,30 @@ export function postcssTape(pluginCreator: PluginCreator, runOptions?: annotation: false, }, }); + } catch { /* empty */ } + + await t2.test('has expected output', () => { + assert.deepEqual(resultString, expected); + + // Assert that warnings have the expected amount. + assert.deepEqual(result.warnings().length, testCaseOptions.warnings ?? 0, `Unexpected number warnings:\n${result.warnings().toString()}`); + }); + + // Assert result sourcemaps with recent PostCSS. + await t2.test('sourcemaps', () => { + assert.ok(!result.map.toJSON().sources.includes(''), 'Sourcemap is broken. This is most likely a newly created PostCSS AST Node without a value for "source". See: https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#24-set-nodesource-for-new-nodes'); + }); - assert.deepEqual(secondPassResult.warnings(), [], 'Unexpected warnings on second pass'); + // Assert that the result can be passed back to PostCSS and still parses. + await t2.test('output is parsable with PostCSS', () => { + assert.deepEqual(secondPassResult?.warnings(), [], 'Unexpected warnings on second pass'); }); await t2.test( 'The oldest and current PostCSS version produce the same result', - { skip: postcss([noopPlugin()]).version === postcssOldestSupported([noopPlugin() as AcceptedPluginOldestPostCSS]).version }, - async () => { - const resultFromOldestPostCSS = await postcssOldestSupported(plugins as Array).process(input, { - from: testFilePath, - to: resultFilePath, - map: { - inline: false, - annotation: false, - }, - }); - - assert.deepEqual(resultFromOldestPostCSS.css.toString(), resultString); + { skip: olderVersionAndCurrentVersionAreTheSame }, + () => { + assert.deepEqual(resultFromOldestPostCSS?.css?.toString(), resultString); }, ); }); diff --git a/packages/selector-resolve-nested/.nvmrc b/packages/selector-resolve-nested/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/packages/selector-resolve-nested/.nvmrc +++ b/packages/selector-resolve-nested/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/packages/selector-specificity/.nvmrc b/packages/selector-specificity/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/packages/selector-specificity/.nvmrc +++ b/packages/selector-specificity/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/packages/utilities/.nvmrc b/packages/utilities/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/packages/utilities/.nvmrc +++ b/packages/utilities/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugin-packs/postcss-bundler/.nvmrc b/plugin-packs/postcss-bundler/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugin-packs/postcss-bundler/.nvmrc +++ b/plugin-packs/postcss-bundler/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugin-packs/postcss-bundler/test/_tape.mjs b/plugin-packs/postcss-bundler/test/_tape.mjs index 0675113d9..faffb94f2 100644 --- a/plugin-packs/postcss-bundler/test/_tape.mjs +++ b/plugin-packs/postcss-bundler/test/_tape.mjs @@ -45,12 +45,12 @@ const testCases = { ;(await fs.readdir('./test/css-import-tests', { withFileTypes: true, recursive: true })).filter(dirent => { return dirent.isFile() && dirent.name === 'style.css'; }).sort().forEach(dirent => { - const key = path.join(path.relative('./test', dirent.path), 'style'); + const key = path.join(path.relative('./test', dirent.parentPath), 'style'); testCases[key] = { - message: `passes 'css-import-tests' case : ${path.relative('./test/css-import-tests', dirent.path).split(path.sep).join(' - ')}`, + message: `passes 'css-import-tests' case : ${path.relative('./test/css-import-tests', dirent.parentPath).split(path.sep).join(' - ')}`, }; - switch (dirent.path.split(path.sep).join(path.posix.sep)) { + switch (dirent.parentPath.split(path.sep).join(path.posix.sep)) { case 'test/css-import-tests/002-sub-features/004-at-supports/007': testCases[key].warnings = 1; break; @@ -79,7 +79,7 @@ const testCases = { break; } - switch (dirent.path.split(path.sep).join(path.posix.sep)) { + switch (dirent.parentPath.split(path.sep).join(path.posix.sep)) { case 'test/css-import-tests/003-should-fail/001-core-features/before-other-styles/001': testCases[key].exception = /At-rule without name/; break; diff --git a/plugin-packs/postcss-preset-env/.nvmrc b/plugin-packs/postcss-preset-env/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugin-packs/postcss-preset-env/.nvmrc +++ b/plugin-packs/postcss-preset-env/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/css-blank-pseudo/.nvmrc b/plugins/css-blank-pseudo/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/css-blank-pseudo/.nvmrc +++ b/plugins/css-blank-pseudo/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/css-has-pseudo/.nvmrc b/plugins/css-has-pseudo/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/css-has-pseudo/.nvmrc +++ b/plugins/css-has-pseudo/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/css-prefers-color-scheme/.nvmrc b/plugins/css-prefers-color-scheme/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/css-prefers-color-scheme/.nvmrc +++ b/plugins/css-prefers-color-scheme/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-attribute-case-insensitive/.nvmrc b/plugins/postcss-attribute-case-insensitive/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-attribute-case-insensitive/.nvmrc +++ b/plugins/postcss-attribute-case-insensitive/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-base-plugin/.nvmrc b/plugins/postcss-base-plugin/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-base-plugin/.nvmrc +++ b/plugins/postcss-base-plugin/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-browser-comments/.nvmrc b/plugins/postcss-browser-comments/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-browser-comments/.nvmrc +++ b/plugins/postcss-browser-comments/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-cascade-layers/.nvmrc b/plugins/postcss-cascade-layers/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-cascade-layers/.nvmrc +++ b/plugins/postcss-cascade-layers/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-color-function/.nvmrc b/plugins/postcss-color-function/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-color-function/.nvmrc +++ b/plugins/postcss-color-function/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-color-functional-notation/.nvmrc b/plugins/postcss-color-functional-notation/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-color-functional-notation/.nvmrc +++ b/plugins/postcss-color-functional-notation/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-color-hex-alpha/.nvmrc b/plugins/postcss-color-hex-alpha/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-color-hex-alpha/.nvmrc +++ b/plugins/postcss-color-hex-alpha/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-color-mix-function/.nvmrc b/plugins/postcss-color-mix-function/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-color-mix-function/.nvmrc +++ b/plugins/postcss-color-mix-function/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-color-rebeccapurple/.nvmrc b/plugins/postcss-color-rebeccapurple/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-color-rebeccapurple/.nvmrc +++ b/plugins/postcss-color-rebeccapurple/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-conditional-values/.nvmrc b/plugins/postcss-conditional-values/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-conditional-values/.nvmrc +++ b/plugins/postcss-conditional-values/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-content-alt-text/.nvmrc b/plugins/postcss-content-alt-text/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-content-alt-text/.nvmrc +++ b/plugins/postcss-content-alt-text/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-contrast-color-function/.nvmrc b/plugins/postcss-contrast-color-function/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-contrast-color-function/.nvmrc +++ b/plugins/postcss-contrast-color-function/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-custom-media/.nvmrc b/plugins/postcss-custom-media/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-custom-media/.nvmrc +++ b/plugins/postcss-custom-media/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-custom-properties/.nvmrc b/plugins/postcss-custom-properties/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-custom-properties/.nvmrc +++ b/plugins/postcss-custom-properties/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-custom-selectors/.nvmrc b/plugins/postcss-custom-selectors/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-custom-selectors/.nvmrc +++ b/plugins/postcss-custom-selectors/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-debug-logger/.nvmrc b/plugins/postcss-debug-logger/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-debug-logger/.nvmrc +++ b/plugins/postcss-debug-logger/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-design-tokens/.nvmrc b/plugins/postcss-design-tokens/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-design-tokens/.nvmrc +++ b/plugins/postcss-design-tokens/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-dir-pseudo-class/.nvmrc b/plugins/postcss-dir-pseudo-class/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-dir-pseudo-class/.nvmrc +++ b/plugins/postcss-dir-pseudo-class/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-double-position-gradients/.nvmrc b/plugins/postcss-double-position-gradients/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-double-position-gradients/.nvmrc +++ b/plugins/postcss-double-position-gradients/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-env-function/.nvmrc b/plugins/postcss-env-function/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-env-function/.nvmrc +++ b/plugins/postcss-env-function/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-exponential-functions/.nvmrc b/plugins/postcss-exponential-functions/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-exponential-functions/.nvmrc +++ b/plugins/postcss-exponential-functions/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-extract/.nvmrc b/plugins/postcss-extract/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-extract/.nvmrc +++ b/plugins/postcss-extract/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-focus-visible/.nvmrc b/plugins/postcss-focus-visible/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-focus-visible/.nvmrc +++ b/plugins/postcss-focus-visible/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-focus-within/.nvmrc b/plugins/postcss-focus-within/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-focus-within/.nvmrc +++ b/plugins/postcss-focus-within/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-font-format-keywords/.nvmrc b/plugins/postcss-font-format-keywords/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-font-format-keywords/.nvmrc +++ b/plugins/postcss-font-format-keywords/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-gamut-mapping/.nvmrc b/plugins/postcss-gamut-mapping/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-gamut-mapping/.nvmrc +++ b/plugins/postcss-gamut-mapping/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-gap-properties/.nvmrc b/plugins/postcss-gap-properties/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-gap-properties/.nvmrc +++ b/plugins/postcss-gap-properties/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-global-data/.nvmrc b/plugins/postcss-global-data/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-global-data/.nvmrc +++ b/plugins/postcss-global-data/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-gradients-interpolation-method/.nvmrc b/plugins/postcss-gradients-interpolation-method/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-gradients-interpolation-method/.nvmrc +++ b/plugins/postcss-gradients-interpolation-method/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-hwb-function/.nvmrc b/plugins/postcss-hwb-function/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-hwb-function/.nvmrc +++ b/plugins/postcss-hwb-function/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-ic-unit/.nvmrc b/plugins/postcss-ic-unit/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-ic-unit/.nvmrc +++ b/plugins/postcss-ic-unit/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-image-set-function/.nvmrc b/plugins/postcss-image-set-function/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-image-set-function/.nvmrc +++ b/plugins/postcss-image-set-function/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-initial/.nvmrc b/plugins/postcss-initial/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-initial/.nvmrc +++ b/plugins/postcss-initial/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-is-pseudo-class/.nvmrc b/plugins/postcss-is-pseudo-class/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-is-pseudo-class/.nvmrc +++ b/plugins/postcss-is-pseudo-class/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-lab-function/.nvmrc b/plugins/postcss-lab-function/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-lab-function/.nvmrc +++ b/plugins/postcss-lab-function/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-light-dark-function/.nvmrc b/plugins/postcss-light-dark-function/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-light-dark-function/.nvmrc +++ b/plugins/postcss-light-dark-function/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-logical-float-and-clear/.nvmrc b/plugins/postcss-logical-float-and-clear/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-logical-float-and-clear/.nvmrc +++ b/plugins/postcss-logical-float-and-clear/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-logical-overflow/.nvmrc b/plugins/postcss-logical-overflow/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-logical-overflow/.nvmrc +++ b/plugins/postcss-logical-overflow/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-logical-overscroll-behavior/.nvmrc b/plugins/postcss-logical-overscroll-behavior/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-logical-overscroll-behavior/.nvmrc +++ b/plugins/postcss-logical-overscroll-behavior/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-logical-resize/.nvmrc b/plugins/postcss-logical-resize/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-logical-resize/.nvmrc +++ b/plugins/postcss-logical-resize/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-logical-viewport-units/.nvmrc b/plugins/postcss-logical-viewport-units/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-logical-viewport-units/.nvmrc +++ b/plugins/postcss-logical-viewport-units/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-logical/.nvmrc b/plugins/postcss-logical/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-logical/.nvmrc +++ b/plugins/postcss-logical/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-media-minmax/.nvmrc b/plugins/postcss-media-minmax/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-media-minmax/.nvmrc +++ b/plugins/postcss-media-minmax/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-media-queries-aspect-ratio-number-values/.nvmrc b/plugins/postcss-media-queries-aspect-ratio-number-values/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-media-queries-aspect-ratio-number-values/.nvmrc +++ b/plugins/postcss-media-queries-aspect-ratio-number-values/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-minify/.nvmrc b/plugins/postcss-minify/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-minify/.nvmrc +++ b/plugins/postcss-minify/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-nested-calc/.nvmrc b/plugins/postcss-nested-calc/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-nested-calc/.nvmrc +++ b/plugins/postcss-nested-calc/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-nesting/.nvmrc b/plugins/postcss-nesting/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-nesting/.nvmrc +++ b/plugins/postcss-nesting/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-normalize-display-values/.nvmrc b/plugins/postcss-normalize-display-values/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-normalize-display-values/.nvmrc +++ b/plugins/postcss-normalize-display-values/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-oklab-function/.nvmrc b/plugins/postcss-oklab-function/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-oklab-function/.nvmrc +++ b/plugins/postcss-oklab-function/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-overflow-shorthand/.nvmrc b/plugins/postcss-overflow-shorthand/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-overflow-shorthand/.nvmrc +++ b/plugins/postcss-overflow-shorthand/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-place/.nvmrc b/plugins/postcss-place/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-place/.nvmrc +++ b/plugins/postcss-place/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-progressive-custom-properties/.nvmrc b/plugins/postcss-progressive-custom-properties/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-progressive-custom-properties/.nvmrc +++ b/plugins/postcss-progressive-custom-properties/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-pseudo-class-any-link/.nvmrc b/plugins/postcss-pseudo-class-any-link/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-pseudo-class-any-link/.nvmrc +++ b/plugins/postcss-pseudo-class-any-link/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-random-function/.nvmrc b/plugins/postcss-random-function/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-random-function/.nvmrc +++ b/plugins/postcss-random-function/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-rebase-url/.nvmrc b/plugins/postcss-rebase-url/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-rebase-url/.nvmrc +++ b/plugins/postcss-rebase-url/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-rewrite-url/.nvmrc b/plugins/postcss-rewrite-url/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-rewrite-url/.nvmrc +++ b/plugins/postcss-rewrite-url/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-scope-pseudo-class/.nvmrc b/plugins/postcss-scope-pseudo-class/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-scope-pseudo-class/.nvmrc +++ b/plugins/postcss-scope-pseudo-class/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-selector-not/.nvmrc b/plugins/postcss-selector-not/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-selector-not/.nvmrc +++ b/plugins/postcss-selector-not/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-sign-functions/.nvmrc b/plugins/postcss-sign-functions/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-sign-functions/.nvmrc +++ b/plugins/postcss-sign-functions/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-slow-plugins/.nvmrc b/plugins/postcss-slow-plugins/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-slow-plugins/.nvmrc +++ b/plugins/postcss-slow-plugins/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-stepped-value-functions/.nvmrc b/plugins/postcss-stepped-value-functions/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-stepped-value-functions/.nvmrc +++ b/plugins/postcss-stepped-value-functions/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-text-decoration-shorthand/.nvmrc b/plugins/postcss-text-decoration-shorthand/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-text-decoration-shorthand/.nvmrc +++ b/plugins/postcss-text-decoration-shorthand/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-todo-or-die/.nvmrc b/plugins/postcss-todo-or-die/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-todo-or-die/.nvmrc +++ b/plugins/postcss-todo-or-die/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-trigonometric-functions/.nvmrc b/plugins/postcss-trigonometric-functions/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-trigonometric-functions/.nvmrc +++ b/plugins/postcss-trigonometric-functions/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/plugins/postcss-unset-value/.nvmrc b/plugins/postcss-unset-value/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/plugins/postcss-unset-value/.nvmrc +++ b/plugins/postcss-unset-value/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1 diff --git a/sites/postcss-preset-env/.nvmrc b/sites/postcss-preset-env/.nvmrc index bb8c76c68..2db9b1297 100644 --- a/sites/postcss-preset-env/.nvmrc +++ b/sites/postcss-preset-env/.nvmrc @@ -1 +1 @@ -v22.11.0 +v24.0.1