From 615fed7360a2fe887e9d869093253f2ac710f3bb Mon Sep 17 00:00:00 2001 From: Miro Yovchev <2827783+myovchev@users.noreply.github.com> Date: Tue, 4 Aug 2026 13:56:01 +0300 Subject: [PATCH 1/6] Fix styles wtih BOM ignored by browsers, leading to UI behavior change --- CHANGELOG.md | 6 ++++++ .../asset/lib/webpack/apos/webpack.scss.js | 5 +++++ .../asset/lib/webpack/src/webpack.scss.js | 11 ++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82a72fbd8e..ea78a22008 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## UNRELEASED + +### Fixes + +* Fixed incorrect sizing and spacing across the admin UI. A byte order mark preserved by PostCSS 8.5.24 invalidated the stylesheet rule setting `line-height` and `box-sizing` for `.apos-` elements. Sass is now compiled with `charset: false`, so the marker is never emitted. + ## 3.67.3 (2025-03-31) ### Fixes diff --git a/modules/@apostrophecms/asset/lib/webpack/apos/webpack.scss.js b/modules/@apostrophecms/asset/lib/webpack/apos/webpack.scss.js index 38e1da68bd..54d4d72431 100644 --- a/modules/@apostrophecms/asset/lib/webpack/apos/webpack.scss.js +++ b/modules/@apostrophecms/asset/lib/webpack/apos/webpack.scss.js @@ -45,6 +45,11 @@ module.exports = (options, apos) => { { loader: 'sass-loader', options: { + sassOptions: { + // Without this Sass emits a BOM, which postcss 8.5.24+ keeps. + // A BOM in the middle of a stylesheet kills the rule after it. + charset: false + }, sourceMap: false, // "use" rules must come first or sass throws an error additionalData: ` diff --git a/modules/@apostrophecms/asset/lib/webpack/src/webpack.scss.js b/modules/@apostrophecms/asset/lib/webpack/src/webpack.scss.js index 5ff73b758f..90b7513fc8 100644 --- a/modules/@apostrophecms/asset/lib/webpack/src/webpack.scss.js +++ b/modules/@apostrophecms/asset/lib/webpack/src/webpack.scss.js @@ -30,7 +30,16 @@ module.exports = (options, apos, srcBuildNames) => { } }, // Parses SASS imports - 'sass-loader' + { + loader: 'sass-loader', + options: { + sassOptions: { + // Without this Sass emits a BOM, which postcss 8.5.24+ keeps. + // A BOM in the middle of a stylesheet kills the rule after it. + charset: false + } + } + } ], // https://stackoverflow.com/a/60482491/389684 sideEffects: true From 5ab45dfe92e0d4581ef7b068b8283be80ca9e994 Mon Sep 17 00:00:00 2001 From: Miro Yovchev <2827783+myovchev@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:04:02 +0300 Subject: [PATCH 2/6] Fix package resolution --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a6d2a9400d..ccdc812081 100644 --- a/package.json +++ b/package.json @@ -154,7 +154,7 @@ "nyc": "^15.1.0", "replace-in-file": "^6.1.0", "stylelint": "^14.6.1", - "stylelint-declaration-strict-value": "^1.8.0", + "stylelint-declaration-strict-value": "~1.10.11", "stylelint-order": "^5.0.0", "vue-eslint-parser": "^7.1.1" }, From 9ee8a8d5eeda87c449799f775e784799c47fa6f0 Mon Sep 17 00:00:00 2001 From: Miro Yovchev <2827783+myovchev@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:15:51 +0300 Subject: [PATCH 3/6] Drop node18 support --- .github/workflows/main.yml | 2 +- CHANGELOG.md | 4 ++++ package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c00fd12ea6..490dc6d2ba 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [18, 20] + node-version: [20, 22] mongodb-version: [4.4, 5.0, 6.0, 7.0] # Steps represent a sequence of tasks that will be executed as part of the job diff --git a/CHANGELOG.md b/CHANGELOG.md index ea78a22008..1a99862843 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## UNRELEASED +### Changes + +* Dropped support for Node.js 18, which reached end of life on 2025-04-30. Node.js 20 or later is now required. The `cheerio` dependency now pulls in `undici` 7, which does not run on Node.js 18. + ### Fixes * Fixed incorrect sizing and spacing across the admin UI. A byte order mark preserved by PostCSS 8.5.24 invalidated the stylesheet rule setting `line-height` and `box-sizing` for `.apos-` elements. Sass is now compiled with `charset: false`, so the marker is never emitted. diff --git a/package.json b/package.json index ccdc812081..1c8aaabc97 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "url": "git@github.com:apostrophecms/apostrophe.git" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.18.1" }, "keywords": [ "apostrophe", From d44dae31a356474ab9d1a0c84570ce304822b1b6 Mon Sep 17 00:00:00 2001 From: Miro Yovchev <2827783+myovchev@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:16:20 +0300 Subject: [PATCH 4/6] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a99862843..e32b65c347 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ ### Changes -* Dropped support for Node.js 18, which reached end of life on 2025-04-30. Node.js 20 or later is now required. The `cheerio` dependency now pulls in `undici` 7, which does not run on Node.js 18. +* Dropped support for Node.js 18, which reached end of life on 2025-04-30. Node.js 20.18.1 or later is now required, as expected by the `cheerio` and `undici` dependencies. ### Fixes From 6aff3c94e31c7ff69af51ec573ed2445ec3063a3 Mon Sep 17 00:00:00 2001 From: Miro Yovchev <2827783+myovchev@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:28:44 +0300 Subject: [PATCH 5/6] Fix outdated fixture --- test/workspaces-project/app.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/test/workspaces-project/app.js b/test/workspaces-project/app.js index 1574c016fe..72a8e10b8e 100644 --- a/test/workspaces-project/app.js +++ b/test/workspaces-project/app.js @@ -1,16 +1,13 @@ module.exports = { root: module, shortName: 'workspaces-project', + baseUrl: 'http://localhost:3000', modules: { '@apostrophecms/express': { options: { address: '127.0.0.1' } }, - '@apostrophecms/sitemap': { - options: { - baseUrl: 'http://localhost:3000' - } - } + '@apostrophecms/sitemap': {} } }; From ed0647c288865dd5c89bde194f20270d13021218 Mon Sep 17 00:00:00 2001 From: Miro Yovchev <2827783+myovchev@users.noreply.github.com> Date: Thu, 6 Aug 2026 09:29:12 +0300 Subject: [PATCH 6/6] Drop node 20 support --- .github/workflows/main.yml | 2 +- CHANGELOG.md | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 490dc6d2ba..7b8294d6bf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [20, 22] + node-version: [22] mongodb-version: [4.4, 5.0, 6.0, 7.0] # Steps represent a sequence of tasks that will be executed as part of the job diff --git a/CHANGELOG.md b/CHANGELOG.md index e32b65c347..bbe484981b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ ### Changes -* Dropped support for Node.js 18, which reached end of life on 2025-04-30. Node.js 20.18.1 or later is now required, as expected by the `cheerio` and `undici` dependencies. +* Dropped support for Node.js 18 and Node.js 20. ### Fixes diff --git a/package.json b/package.json index 1c8aaabc97..1a8f69c810 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "url": "git@github.com:apostrophecms/apostrophe.git" }, "engines": { - "node": ">=20.18.1" + "node": ">=22.0.0" }, "keywords": [ "apostrophe",