From b9d7d2687cddd2be40a73851d6447901d658724f Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Fri, 7 Aug 2026 18:12:57 +0200 Subject: [PATCH 1/3] chore: remove `replace-in-file` from the list of deps --- lib/prepare_release.js | 17 ++++++++++++----- package-lock.json | 33 --------------------------------- package.json | 1 - 3 files changed, 12 insertions(+), 39 deletions(-) diff --git a/lib/prepare_release.js b/lib/prepare_release.js index 62083743..0e9ac20f 100644 --- a/lib/prepare_release.js +++ b/lib/prepare_release.js @@ -2,7 +2,6 @@ import path from 'node:path'; import { promises as fs, existsSync, readFileSync } from 'node:fs'; import semver from 'semver'; -import { replaceInFile } from 'replace-in-file'; import { forceRunAsync, runAsync, runSync } from './run.js'; import { writeJson, readJson } from './file.js'; @@ -518,10 +517,18 @@ export default class ReleasePreparation extends Session { async updateREPLACEMEs() { const { newVersion } = this; - await replaceInFile({ - files: 'doc/api/*.md', - from: /REPLACEME/g, - to: `v${newVersion}` + await Array.fromAsync(fs.glob('doc/api/*.md'), async(file) => { + let fd; + try { + fd = await fs.open(file, 'r+'); + const fileContent = await fd.readFile('utf-8'); + if (fileContent.includes('REPLACEME')) { + await fd.truncate(0); + await fd.writeFile(fileContent.replaceAll('REPLACEME', `v${newVersion}`)); + } + } finally { + await fd?.close(); + } }); } diff --git a/package-lock.json b/package-lock.json index abc7c6e2..d7e09396 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,6 @@ "lodash", "log-symbols", "ora", - "replace-in-file", "semver", "smol-toml", "undici", @@ -51,7 +50,6 @@ "lodash": "^4.17.21", "log-symbols": "^7.0.0", "ora": "^9.0.0", - "replace-in-file": "^8.3.0", "semver": "^7.7.1", "smol-toml": "^1.7.0", "undici": "^8.3.0", @@ -8576,37 +8574,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/replace-in-file": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-8.4.0.tgz", - "integrity": "sha512-D28k8jy2LtUGbCzCnR3znajaTWIjJ/Uee3UdodzcHRxE7zn6NmYW/dcSqyivnsYU3W+MxdX6SbF28NvJ0GRoLA==", - "inBundle": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.6.2", - "glob": "^13.0.0", - "yargs": "^18.0.0" - }, - "bin": { - "replace-in-file": "bin/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/replace-in-file/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", diff --git a/package.json b/package.json index efc6a82a..4fa21223 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,6 @@ "lodash": "^4.17.21", "log-symbols": "^7.0.0", "ora": "^9.0.0", - "replace-in-file": "^8.3.0", "semver": "^7.7.1", "smol-toml": "^1.7.0", "undici": "^8.3.0", From 49560c3d2425b7f37d0d002079399b825d05f83f Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Fri, 7 Aug 2026 18:24:01 +0200 Subject: [PATCH 2/3] fixup! chore: remove `replace-in-file` from the list of deps --- lib/prepare_release.js | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/lib/prepare_release.js b/lib/prepare_release.js index 0e9ac20f..e75700dd 100644 --- a/lib/prepare_release.js +++ b/lib/prepare_release.js @@ -517,19 +517,23 @@ export default class ReleasePreparation extends Session { async updateREPLACEMEs() { const { newVersion } = this; - await Array.fromAsync(fs.glob('doc/api/*.md'), async(file) => { - let fd; - try { - fd = await fs.open(file, 'r+'); - const fileContent = await fd.readFile('utf-8'); - if (fileContent.includes('REPLACEME')) { - await fd.truncate(0); - await fd.writeFile(fileContent.replaceAll('REPLACEME', `v${newVersion}`)); + const promises = []; + for await (const file of fs.glob('doc/api/*.md')) { + promises.push(fs.open(file, 'r+').then(async fd => { + try { + const fileContent = await fd.readFile('utf-8'); + if (fileContent.includes('REPLACEME')) { + await fd.truncate(0); + await fd.writeFile(fileContent.replaceAll('REPLACEME', `v${newVersion}`)); + } + // eslint-disable-next-line promise/always-return + } finally { + // TODO: replace with `using` syntax when dropping support for Node.js 22 + await fd.close(); } - } finally { - await fd?.close(); - } - }); + })); + } + await Promise.all(promises); } async updateMainChangelog() { From a9ffde4a42a2e391fe512137923a4f0d7f55654c Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Fri, 7 Aug 2026 18:38:13 +0200 Subject: [PATCH 3/3] fixup! chore: remove `replace-in-file` from the list of deps --- lib/prepare_release.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/prepare_release.js b/lib/prepare_release.js index e75700dd..2dff11d0 100644 --- a/lib/prepare_release.js +++ b/lib/prepare_release.js @@ -523,8 +523,9 @@ export default class ReleasePreparation extends Session { try { const fileContent = await fd.readFile('utf-8'); if (fileContent.includes('REPLACEME')) { - await fd.truncate(0); - await fd.writeFile(fileContent.replaceAll('REPLACEME', `v${newVersion}`)); + const { bytesWritten } = + await fd.write(fileContent.replaceAll('REPLACEME', `v${newVersion}`), 0, 'utf-8'); + await fd.truncate(bytesWritten); } // eslint-disable-next-line promise/always-return } finally {