From c30112da7e91b6d1aac79d0145a8fa176ff3fab3 Mon Sep 17 00:00:00 2001 From: Florian Imdahl Date: Sun, 30 Nov 2025 21:32:58 +0100 Subject: [PATCH 1/9] feat: Replace cosmiconfig with lilconfig --- packages/auto-merge/package.json | 2 +- packages/auto-merge/src/cli.ts | 4 ++-- packages/jszip-cli/package.json | 2 +- packages/jszip-cli/src/JSZipCLI.ts | 9 ++++----- yarn.lock | 11 +++++++++-- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/packages/auto-merge/package.json b/packages/auto-merge/package.json index 313e7fe71..cf8d0692c 100644 --- a/packages/auto-merge/package.json +++ b/packages/auto-merge/package.json @@ -3,7 +3,7 @@ "bin": "dist/cli.js", "dependencies": { "commander": "14.0.2", - "cosmiconfig": "9.0.0", + "lilconfig": "3.1.3", "logdown": "3.3.1" }, "description": "Automatically merge (and optionally approve) all GitHub PRs which match a specific pattern.", diff --git a/packages/auto-merge/src/cli.ts b/packages/auto-merge/src/cli.ts index 10a870721..8e235679b 100644 --- a/packages/auto-merge/src/cli.ts +++ b/packages/auto-merge/src/cli.ts @@ -4,7 +4,7 @@ import fs from 'node:fs'; import path from 'node:path'; import readline from 'node:readline'; import {program as commander} from 'commander'; -import {cosmiconfigSync} from 'cosmiconfig'; +import {lilconfigSync} from 'lilconfig'; import logdown from 'logdown'; import {AutoMerge} from './AutoMerge.js'; @@ -41,7 +41,7 @@ commander .parse(process.argv); const commanderOptions = commander.opts(); -const configExplorer = cosmiconfigSync('automerge'); +const configExplorer = lilconfigSync('automerge'); const configResult = commanderOptions.config ? configExplorer.load(commanderOptions.config) : configExplorer.search(); if (!configResult || configResult.isEmpty) { diff --git a/packages/jszip-cli/package.json b/packages/jszip-cli/package.json index f6d3ddc92..777653dfb 100644 --- a/packages/jszip-cli/package.json +++ b/packages/jszip-cli/package.json @@ -3,9 +3,9 @@ "bin": "dist/cli.js", "dependencies": { "commander": "14.0.2", - "cosmiconfig": "9.0.0", "glob": "11.1.0", "jszip": "3.10.1", + "lilconfig": "3.1.3", "logdown": "3.3.1", "progress": "2.0.3" }, diff --git a/packages/jszip-cli/src/JSZipCLI.ts b/packages/jszip-cli/src/JSZipCLI.ts index b16af2e9b..1486f6384 100644 --- a/packages/jszip-cli/src/JSZipCLI.ts +++ b/packages/jszip-cli/src/JSZipCLI.ts @@ -1,5 +1,4 @@ -import {cosmiconfigSync} from 'cosmiconfig'; -import type {CosmiconfigResult} from 'cosmiconfig'; +import {lilconfigSync, LilconfigResult, SyncSearcher} from 'lilconfig'; import logdown from 'logdown'; import {BuildService} from './BuildService.js'; @@ -19,7 +18,7 @@ const defaultOptions: Required = { export class JSZipCLI { private readonly buildService: BuildService; - private readonly configExplorer: ReturnType; + private readonly configExplorer: SyncSearcher; private readonly configFile?: string; private readonly extractService: ExtractService; private readonly logger: logdown.Logger; @@ -32,7 +31,7 @@ export class JSZipCLI { logger: console, markdown: false, }); - this.configExplorer = cosmiconfigSync('jszip'); + this.configExplorer = lilconfigSync('jszip'); this.options = {...defaultOptions, ...this.terminalOptions}; this.logger.state.isEnabled = this.options.verbose; @@ -117,7 +116,7 @@ export class JSZipCLI { return; } - let configResult: CosmiconfigResult = null; + let configResult: LilconfigResult = null; if (typeof this.options.configFile === 'string') { try { diff --git a/yarn.lock b/yarn.lock index 2ae5a994e..9df4d2c3a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -902,8 +902,8 @@ __metadata: resolution: "@ffflorian/auto-merge@workspace:packages/auto-merge" dependencies: commander: "npm:14.0.2" - cosmiconfig: "npm:9.0.0" http-status-codes: "npm:2.3.0" + lilconfig: "npm:3.1.3" logdown: "npm:3.3.1" nock: "npm:14.0.10" rimraf: "npm:6.1.0" @@ -1008,10 +1008,10 @@ __metadata: dependencies: "@types/progress": "npm:2.0.7" commander: "npm:14.0.2" - cosmiconfig: "npm:9.0.0" cross-env: "npm:10.1.0" glob: "npm:11.1.0" jszip: "npm:3.10.1" + lilconfig: "npm:3.1.3" logdown: "npm:3.3.1" progress: "npm:2.0.3" rimraf: "npm:6.1.0" @@ -9134,6 +9134,13 @@ __metadata: languageName: node linkType: hard +"lilconfig@npm:3.1.3": + version: 3.1.3 + resolution: "lilconfig@npm:3.1.3" + checksum: 10c0/f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc + languageName: node + linkType: hard + "lines-and-columns@npm:2.0.3": version: 2.0.3 resolution: "lines-and-columns@npm:2.0.3" From 98a902401e91de21f522d505700777e86ab445f6 Mon Sep 17 00:00:00 2001 From: Florian Imdahl Date: Sun, 30 Nov 2025 21:36:23 +0100 Subject: [PATCH 2/9] refactor: Use async/await in CLIs --- packages/auto-merge/src/AutoMerge.ts | 7 +++---- packages/auto-merge/src/cli.ts | 4 ++-- packages/crates-updater/src/cli.ts | 4 ++-- packages/electron-icon-generator/src/cli.ts | 4 ++-- packages/electron-info/src/cli.ts | 4 ++-- packages/gh-open/src/cli.ts | 4 ++-- packages/https-proxy/src/cli.ts | 4 ++-- packages/my-timezone/src/cli.ts | 4 ++-- packages/ntpclient/src/cli.ts | 4 ++-- packages/publish-flat/src/cli-copy.ts | 4 ++-- packages/publish-flat/src/cli.ts | 4 ++-- packages/scrabble-cheater/src/cli.ts | 4 ++-- packages/which-os/src/cli.ts | 4 ++-- 13 files changed, 27 insertions(+), 28 deletions(-) diff --git a/packages/auto-merge/src/AutoMerge.ts b/packages/auto-merge/src/AutoMerge.ts index ee6c6e24c..7dfa8b9eb 100644 --- a/packages/auto-merge/src/AutoMerge.ts +++ b/packages/auto-merge/src/AutoMerge.ts @@ -1,19 +1,18 @@ -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import logdown from 'logdown'; import type {AutoMergeConfig, ActionResult, GitHubPullRequest, Repository, RepositoryResult} from './types/index.js'; interface PackageJson { - bin: Record; + name: string; version: string; } const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {bin, version: toolVersion}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); -const toolName = Object.keys(bin)[0]; +const {name: toolName, version: toolVersion}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); export class AutoMerge { private readonly baseHeaders: Record; diff --git a/packages/auto-merge/src/cli.ts b/packages/auto-merge/src/cli.ts index 8e235679b..df9ba13fd 100644 --- a/packages/auto-merge/src/cli.ts +++ b/packages/auto-merge/src/cli.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import readline from 'node:readline'; import {program as commander} from 'commander'; @@ -27,7 +27,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {description, name, version}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +const {description, name, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); commander .name(name.replace(/^@[^/]+\//, '')) diff --git a/packages/crates-updater/src/cli.ts b/packages/crates-updater/src/cli.ts index 370b17a27..d2aac5fb8 100644 --- a/packages/crates-updater/src/cli.ts +++ b/packages/crates-updater/src/cli.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import {program as commander} from 'commander'; @@ -15,7 +15,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {bin, description, version}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +const {bin, description, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); commander .name(Object.keys(bin)[0]) diff --git a/packages/electron-icon-generator/src/cli.ts b/packages/electron-icon-generator/src/cli.ts index 62ddb174a..76278580a 100644 --- a/packages/electron-icon-generator/src/cli.ts +++ b/packages/electron-icon-generator/src/cli.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import {program as commander} from 'commander'; @@ -15,7 +15,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {description, name, version}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +const {description, name, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); commander .name(name.replace(/^@[^/]+\//, '')) diff --git a/packages/electron-info/src/cli.ts b/packages/electron-info/src/cli.ts index 3796f21bd..8fc315ea7 100644 --- a/packages/electron-info/src/cli.ts +++ b/packages/electron-info/src/cli.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import {program as commander} from 'commander'; @@ -15,7 +15,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {description, name, version}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +const {description, name, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); let matchedCommand = false; diff --git a/packages/gh-open/src/cli.ts b/packages/gh-open/src/cli.ts index a6aa50c2a..5d753b389 100644 --- a/packages/gh-open/src/cli.ts +++ b/packages/gh-open/src/cli.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node +import fs from 'node:fs/promises'; import path from 'node:path'; -import fs from 'node:fs'; import {program as commander} from 'commander'; import {findUp} from 'find-up'; import open from 'open'; @@ -16,7 +16,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {description, name, version}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +const {description, name, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); commander .name(name.replace(/^@[^/]+\//, '')) diff --git a/packages/https-proxy/src/cli.ts b/packages/https-proxy/src/cli.ts index 397e4c11c..108bf43c5 100644 --- a/packages/https-proxy/src/cli.ts +++ b/packages/https-proxy/src/cli.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import {program as commander} from 'commander'; @@ -15,7 +15,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {description, name, version}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +const {description, name, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); commander .name(name.replace(/^@[^/]+\//, '')) diff --git a/packages/my-timezone/src/cli.ts b/packages/my-timezone/src/cli.ts index 6bf0feece..eb18b9ef1 100644 --- a/packages/my-timezone/src/cli.ts +++ b/packages/my-timezone/src/cli.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import {program as commander} from 'commander'; @@ -15,7 +15,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {description, name, version}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +const {description, name, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); commander .name(name) diff --git a/packages/ntpclient/src/cli.ts b/packages/ntpclient/src/cli.ts index 44e151ea9..4963cddfe 100644 --- a/packages/ntpclient/src/cli.ts +++ b/packages/ntpclient/src/cli.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import {program as commander} from 'commander'; @@ -15,7 +15,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {description, name, version}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +const {description, name, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); commander .name(name) diff --git a/packages/publish-flat/src/cli-copy.ts b/packages/publish-flat/src/cli-copy.ts index ee05a8da9..6762bd6b7 100644 --- a/packages/publish-flat/src/cli-copy.ts +++ b/packages/publish-flat/src/cli-copy.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import {program as commander} from 'commander'; @@ -14,7 +14,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {bin, version}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +const {bin, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); const name = Object.keys(bin)[1]; commander diff --git a/packages/publish-flat/src/cli.ts b/packages/publish-flat/src/cli.ts index 16f245c40..6eea204d2 100644 --- a/packages/publish-flat/src/cli.ts +++ b/packages/publish-flat/src/cli.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import {program as commander} from 'commander'; @@ -14,7 +14,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {bin, description, version}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +const {bin, description, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); commander .name(Object.keys(bin)[0]) diff --git a/packages/scrabble-cheater/src/cli.ts b/packages/scrabble-cheater/src/cli.ts index f4d8c150c..2902e6520 100644 --- a/packages/scrabble-cheater/src/cli.ts +++ b/packages/scrabble-cheater/src/cli.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import {program as commander} from 'commander'; @@ -15,7 +15,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {description, name, version}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +const {description, name, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); commander .name(name) diff --git a/packages/which-os/src/cli.ts b/packages/which-os/src/cli.ts index ece788bfd..d0a43e267 100644 --- a/packages/which-os/src/cli.ts +++ b/packages/which-os/src/cli.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node import {inspect} from 'node:util'; -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import {program as commander} from 'commander'; @@ -16,7 +16,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {description, name, version}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +const {description, name, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); const capitalize = (name: string): string => `${name.charAt(0).toUpperCase()}${name.slice(1)}`; From f0c5c8f703e9e114e37063e2bf3b7bbe65e99e3e Mon Sep 17 00:00:00 2001 From: Florian Imdahl Date: Sun, 30 Nov 2025 21:38:58 +0100 Subject: [PATCH 3/9] refactor: Get toolName from package.json bin entry --- packages/crates-updater/src/cli.ts | 3 ++- packages/mastodon-bot-yearprogress/src/cli.ts | 3 ++- packages/publish-flat/src/cli-copy.ts | 6 +++--- packages/publish-flat/src/cli.ts | 3 ++- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/crates-updater/src/cli.ts b/packages/crates-updater/src/cli.ts index d2aac5fb8..067ec0f91 100644 --- a/packages/crates-updater/src/cli.ts +++ b/packages/crates-updater/src/cli.ts @@ -16,9 +16,10 @@ const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); const {bin, description, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); +const [toolName] = Object.keys(bin); commander - .name(Object.keys(bin)[0]) + .name(toolName) .description(description) .arguments('') .arguments('[packageVersion]') diff --git a/packages/mastodon-bot-yearprogress/src/cli.ts b/packages/mastodon-bot-yearprogress/src/cli.ts index 20967bc2d..968a168ab 100644 --- a/packages/mastodon-bot-yearprogress/src/cli.ts +++ b/packages/mastodon-bot-yearprogress/src/cli.ts @@ -19,9 +19,10 @@ const packageJsonPath = path.join(__dirname, '../package.json'); const packageJson = fs.readFileSync(packageJsonPath, 'utf-8'); const {bin, description, version} = JSON.parse(packageJson); +const [toolName] = Object.keys(bin); commander - .name(Object.keys(bin)[0]) + .name(toolName) .version(version) .description(description) .option('-s, --server ', 'Specify a Mastodon server (e.g. https://mastodon.social)') diff --git a/packages/publish-flat/src/cli-copy.ts b/packages/publish-flat/src/cli-copy.ts index 6762bd6b7..cff0a38b6 100644 --- a/packages/publish-flat/src/cli-copy.ts +++ b/packages/publish-flat/src/cli-copy.ts @@ -15,12 +15,12 @@ const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); const {bin, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); -const name = Object.keys(bin)[1]; +const toolName = Object.keys(bin)[1]; commander - .name(name) + .name(toolName) .version(version) - .description(`Copy entries from one JSON file to the other (example: "${name} version")`) + .description(`Copy entries from one JSON file to the other (example: "${toolName} version")`) .option('-i, --input ', 'Set the input JSON file', './package.json') .option('-o, --output ', 'Set the output JSON file', '../package.json') .parse(process.argv); diff --git a/packages/publish-flat/src/cli.ts b/packages/publish-flat/src/cli.ts index 6eea204d2..6561ecc9e 100644 --- a/packages/publish-flat/src/cli.ts +++ b/packages/publish-flat/src/cli.ts @@ -15,9 +15,10 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); const {bin, description, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); +const [toolName] = Object.keys(bin); commander - .name(Object.keys(bin)[0]) + .name(toolName) .version(version) .description(description) .option('-y, --yarn', 'Use yarn for publishing (default: false)') From 8333d8bc5ae2f0c1b80155218ed7a7e8a44021e0 Mon Sep 17 00:00:00 2001 From: Florian Imdahl Date: Sun, 30 Nov 2025 21:40:22 +0100 Subject: [PATCH 4/9] refactor: Use async lilconfig --- packages/auto-merge/src/cli.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/auto-merge/src/cli.ts b/packages/auto-merge/src/cli.ts index df9ba13fd..1746a6647 100644 --- a/packages/auto-merge/src/cli.ts +++ b/packages/auto-merge/src/cli.ts @@ -4,7 +4,7 @@ import fs from 'node:fs/promises'; import path from 'node:path'; import readline from 'node:readline'; import {program as commander} from 'commander'; -import {lilconfigSync} from 'lilconfig'; +import {lilconfig} from 'lilconfig'; import logdown from 'logdown'; import {AutoMerge} from './AutoMerge.js'; @@ -41,8 +41,10 @@ commander .parse(process.argv); const commanderOptions = commander.opts(); -const configExplorer = lilconfigSync('automerge'); -const configResult = commanderOptions.config ? configExplorer.load(commanderOptions.config) : configExplorer.search(); +const configExplorer = lilconfig('automerge'); +const configResult = commanderOptions.config + ? await configExplorer.load(commanderOptions.config) + : await configExplorer.search(); if (!configResult || configResult.isEmpty) { logger.error('No valid configuration file found.'); From 5f406ecf95f7d56407aba9cda8c8a10896c3d4f2 Mon Sep 17 00:00:00 2001 From: Florian Imdahl Date: Sun, 30 Nov 2025 21:43:06 +0100 Subject: [PATCH 5/9] fix: Update engine requirements --- packages/api-client/README.md | 6 +++--- packages/api-client/package.json | 2 +- packages/auto-merge/README.md | 4 ++-- packages/auto-merge/package.json | 3 ++- packages/crates-updater/README.md | 4 ++-- packages/crates-updater/package.json | 2 +- packages/double-linked-list/README.md | 4 ++-- packages/double-linked-list/package.json | 2 +- packages/electron-icon-generator/README.md | 4 ++-- packages/electron-icon-generator/package.json | 2 +- packages/electron-info/README.md | 4 ++-- packages/electron-info/package.json | 2 +- packages/exposure-keys/package.json | 2 +- packages/gh-open/README.md | 4 ++-- packages/gh-open/package.json | 2 +- packages/https-proxy/README.md | 4 ++-- packages/https-proxy/package.json | 2 +- packages/jszip-cli/package.json | 2 +- packages/mastodon-bot-yearprogress/README.md | 2 +- packages/mastodon-bot-yearprogress/package.json | 2 +- packages/mock-udp/README.md | 4 ++-- packages/mock-udp/package.json | 2 +- packages/my-timezone/README.md | 4 ++-- packages/my-timezone/package.json | 2 +- packages/ntfy/README.md | 4 ++-- packages/ntfy/package.json | 2 +- packages/ntpclient/README.md | 4 ++-- packages/ntpclient/package.json | 2 +- packages/pixelflut/README.md | 4 ++-- packages/publish-flat/README.md | 4 ++-- packages/quick-sort/README.md | 4 ++-- packages/scrabble-cheater/README.md | 4 ++-- packages/scrabble-cheater/package.json | 2 +- packages/which-os/README.md | 4 ++-- packages/which-os/package.json | 2 +- packages/windows-shortcut-maker/README.md | 4 ++-- packages/windows-shortcut-maker/package.json | 2 +- 37 files changed, 57 insertions(+), 56 deletions(-) diff --git a/packages/api-client/README.md b/packages/api-client/README.md index 43225faf4..be686da21 100644 --- a/packages/api-client/README.md +++ b/packages/api-client/README.md @@ -4,14 +4,14 @@ Simple API client using fetch ([Node.js](https://nodejs.org/api/globals.html#fet ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation ℹ️ This is a pure [ESM](https://nodejs.org/api/esm.html#introduction) module. -Run `yarn global add @ffflorian/api-client` or `npm i -g @ffflorian/api-client`. +Run `yarn add @ffflorian/api-client` or `npm i @ffflorian/api-client`. ## Usage diff --git a/packages/api-client/package.json b/packages/api-client/package.json index e7aa70c09..1786bd2c8 100644 --- a/packages/api-client/package.json +++ b/packages/api-client/package.json @@ -6,7 +6,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/auto-merge/README.md b/packages/auto-merge/README.md index c44cbe1ae..4ec954f94 100644 --- a/packages/auto-merge/README.md +++ b/packages/auto-merge/README.md @@ -4,8 +4,8 @@ Automatically merge (and optionally approve) all GitHub PRs which match a specif ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/auto-merge/package.json b/packages/auto-merge/package.json index cf8d0692c..7273f43b0 100644 --- a/packages/auto-merge/package.json +++ b/packages/auto-merge/package.json @@ -16,13 +16,14 @@ "vitest": "4.0.6" }, "engines": { - "node": ">= 18.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ "dist" ], "keywords": [ + "auto-merge", "cli", "typescript" ], diff --git a/packages/crates-updater/README.md b/packages/crates-updater/README.md index 30aa89d80..884958729 100644 --- a/packages/crates-updater/README.md +++ b/packages/crates-updater/README.md @@ -4,8 +4,8 @@ Check your [Rust packages](https://crates.io) for updates. ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/crates-updater/package.json b/packages/crates-updater/package.json index 383729fbe..378f8d4f7 100644 --- a/packages/crates-updater/package.json +++ b/packages/crates-updater/package.json @@ -16,7 +16,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/double-linked-list/README.md b/packages/double-linked-list/README.md index c74c6fd4d..6e0947912 100644 --- a/packages/double-linked-list/README.md +++ b/packages/double-linked-list/README.md @@ -12,8 +12,8 @@ A linked list in which every element knows about its predecessor and its success ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/double-linked-list/package.json b/packages/double-linked-list/package.json index 0e1bd8eef..454f24be4 100644 --- a/packages/double-linked-list/package.json +++ b/packages/double-linked-list/package.json @@ -8,7 +8,7 @@ "vitest": "4.0.6" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/electron-icon-generator/README.md b/packages/electron-icon-generator/README.md index 9881668ab..b7689d563 100644 --- a/packages/electron-icon-generator/README.md +++ b/packages/electron-icon-generator/README.md @@ -4,8 +4,8 @@ Based on https://github.com/jaretburkett/electron-icon-maker. ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/electron-icon-generator/package.json b/packages/electron-icon-generator/package.json index 53e3b7aab..62a619b46 100644 --- a/packages/electron-icon-generator/package.json +++ b/packages/electron-icon-generator/package.json @@ -14,7 +14,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/electron-info/README.md b/packages/electron-info/README.md index 8f01c52c9..284cef988 100644 --- a/packages/electron-info/README.md +++ b/packages/electron-info/README.md @@ -6,8 +6,8 @@ Get useful data about Electron releases. Uses [electron-releases](https://github ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/electron-info/package.json b/packages/electron-info/package.json index 9679ac635..ec51b0ab3 100644 --- a/packages/electron-info/package.json +++ b/packages/electron-info/package.json @@ -20,7 +20,7 @@ "vitest": "4.0.6" }, "engines": { - "node": ">= 18.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/exposure-keys/package.json b/packages/exposure-keys/package.json index c64f713c4..931fe7a03 100644 --- a/packages/exposure-keys/package.json +++ b/packages/exposure-keys/package.json @@ -12,7 +12,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "files": [ "dist", diff --git a/packages/gh-open/README.md b/packages/gh-open/README.md index 17ab06139..a9b7bc88e 100644 --- a/packages/gh-open/README.md +++ b/packages/gh-open/README.md @@ -4,8 +4,8 @@ Open a GitHub repository in your browser. ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/gh-open/package.json b/packages/gh-open/package.json index 1a87089e8..f7b3fea78 100644 --- a/packages/gh-open/package.json +++ b/packages/gh-open/package.json @@ -17,7 +17,7 @@ "vitest": "4.0.6" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/https-proxy/README.md b/packages/https-proxy/README.md index 45fcb4d1c..a4223a7fa 100644 --- a/packages/https-proxy/README.md +++ b/packages/https-proxy/README.md @@ -4,8 +4,8 @@ A simple HTTPS proxy for Node.js with authentication support. ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/https-proxy/package.json b/packages/https-proxy/package.json index e4b00c38d..dea1216e5 100644 --- a/packages/https-proxy/package.json +++ b/packages/https-proxy/package.json @@ -17,7 +17,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/jszip-cli/package.json b/packages/jszip-cli/package.json index 777653dfb..83011169d 100644 --- a/packages/jszip-cli/package.json +++ b/packages/jszip-cli/package.json @@ -19,7 +19,7 @@ "vitest": "4.0.6" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "files": [ "dist" diff --git a/packages/mastodon-bot-yearprogress/README.md b/packages/mastodon-bot-yearprogress/README.md index 4c466539c..e545df91a 100644 --- a/packages/mastodon-bot-yearprogress/README.md +++ b/packages/mastodon-bot-yearprogress/README.md @@ -11,7 +11,7 @@ Currently deployed to [@year_progress@botsin.space](https://botsin.space/@year_p ## Prerequisites - [Node.js](https://nodejs.org) >= 18.0 -- [yarn](https://classic.yarnpkg.com) +- [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/mastodon-bot-yearprogress/package.json b/packages/mastodon-bot-yearprogress/package.json index fef3b25ee..d7eaed70a 100644 --- a/packages/mastodon-bot-yearprogress/package.json +++ b/packages/mastodon-bot-yearprogress/package.json @@ -15,7 +15,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "files": [ "dist" diff --git a/packages/mock-udp/README.md b/packages/mock-udp/README.md index a7f646f9e..706e87751 100644 --- a/packages/mock-udp/README.md +++ b/packages/mock-udp/README.md @@ -4,8 +4,8 @@ Mock dgram udp requests. Based on [node-mock-udp](https://github.com/mattrobenol ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/mock-udp/package.json b/packages/mock-udp/package.json index bbba3c8e9..43b5af6a7 100644 --- a/packages/mock-udp/package.json +++ b/packages/mock-udp/package.json @@ -7,7 +7,7 @@ "vitest": "4.0.6" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/my-timezone/README.md b/packages/my-timezone/README.md index f57c85202..11b06234a 100644 --- a/packages/my-timezone/README.md +++ b/packages/my-timezone/README.md @@ -4,8 +4,8 @@ Get the exact time based on your location by calculating the time difference in ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/my-timezone/package.json b/packages/my-timezone/package.json index b5d9d7a2c..8d3731e59 100644 --- a/packages/my-timezone/package.json +++ b/packages/my-timezone/package.json @@ -14,7 +14,7 @@ "vitest": "4.0.6" }, "engines": { - "node": ">= 18.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/ntfy/README.md b/packages/ntfy/README.md index ad575fe17..819bde202 100644 --- a/packages/ntfy/README.md +++ b/packages/ntfy/README.md @@ -4,8 +4,8 @@ Send notifications over [ntfy.sh](https://ntfy.sh). ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/ntfy/package.json b/packages/ntfy/package.json index c7fa817be..b75e9b1ed 100644 --- a/packages/ntfy/package.json +++ b/packages/ntfy/package.json @@ -6,7 +6,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/ntpclient/README.md b/packages/ntpclient/README.md index 59a90ce9b..68759a958 100644 --- a/packages/ntpclient/README.md +++ b/packages/ntpclient/README.md @@ -4,8 +4,8 @@ TypeScript implementation of the NTP Client Protocol. Based on [node-ntp-client] ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/ntpclient/package.json b/packages/ntpclient/package.json index c77ad4262..369000829 100644 --- a/packages/ntpclient/package.json +++ b/packages/ntpclient/package.json @@ -12,7 +12,7 @@ "vitest": "4.0.6" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/pixelflut/README.md b/packages/pixelflut/README.md index 6f767cc9d..8954e7b5d 100644 --- a/packages/pixelflut/README.md +++ b/packages/pixelflut/README.md @@ -2,8 +2,8 @@ ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/publish-flat/README.md b/packages/publish-flat/README.md index 3526ed07b..4d87e7d2a 100644 --- a/packages/publish-flat/README.md +++ b/packages/publish-flat/README.md @@ -4,8 +4,8 @@ Publish your project flattened. No more `dist` in `require('project/dist/Options ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/quick-sort/README.md b/packages/quick-sort/README.md index e68368ebe..367f3f435 100644 --- a/packages/quick-sort/README.md +++ b/packages/quick-sort/README.md @@ -4,8 +4,8 @@ A TypeScript QuickSort implementation. ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Usage diff --git a/packages/scrabble-cheater/README.md b/packages/scrabble-cheater/README.md index 16be0efc9..ca197feb6 100644 --- a/packages/scrabble-cheater/README.md +++ b/packages/scrabble-cheater/README.md @@ -6,8 +6,8 @@ Of course you shouldn't be using this and I'm not responsible if people call you ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- [yarn](https://yarnpkg.com) ## Setup diff --git a/packages/scrabble-cheater/package.json b/packages/scrabble-cheater/package.json index 001338249..1b5860edf 100644 --- a/packages/scrabble-cheater/package.json +++ b/packages/scrabble-cheater/package.json @@ -13,7 +13,7 @@ "vitest": "4.0.6" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/which-os/README.md b/packages/which-os/README.md index c15327bd6..b2cb71f84 100644 --- a/packages/which-os/README.md +++ b/packages/which-os/README.md @@ -4,8 +4,8 @@ Get informations about your OS. ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/which-os/package.json b/packages/which-os/package.json index 47b086135..702d01992 100644 --- a/packages/which-os/package.json +++ b/packages/which-os/package.json @@ -11,7 +11,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/windows-shortcut-maker/README.md b/packages/windows-shortcut-maker/README.md index d64c47289..7c80110d3 100644 --- a/packages/windows-shortcut-maker/README.md +++ b/packages/windows-shortcut-maker/README.md @@ -15,8 +15,8 @@ This module uses a Windows VBScript file to get native access to the operational ## Prerequisites -- [Node.js](https://nodejs.org) >= 14 -- npm (preinstalled) or [yarn](https://classic.yarnpkg.com) +- [Node.js](https://nodejs.org) +- npm (preinstalled) or [yarn](https://yarnpkg.com) ## Installation diff --git a/packages/windows-shortcut-maker/package.json b/packages/windows-shortcut-maker/package.json index 631c51d89..b033d050c 100644 --- a/packages/windows-shortcut-maker/package.json +++ b/packages/windows-shortcut-maker/package.json @@ -9,7 +9,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "exports": "./dist/index.js", "files": [ From 798097196078b7d42450004d0b324bc424335ae6 Mon Sep 17 00:00:00 2001 From: Florian Imdahl Date: Sun, 30 Nov 2025 21:48:14 +0100 Subject: [PATCH 6/9] refactor(electron-info): Move interfaces into its own file --- .../electron-info/src/ElectronInfo.test.ts | 3 +- packages/electron-info/src/ElectronInfo.ts | 55 +------------------ packages/electron-info/src/FileService.ts | 2 +- packages/electron-info/src/HTTPService.ts | 4 +- packages/electron-info/src/cli.ts | 3 +- packages/electron-info/src/index.ts | 1 + packages/electron-info/src/interfaces.ts | 55 +++++++++++++++++++ 7 files changed, 63 insertions(+), 60 deletions(-) create mode 100644 packages/electron-info/src/interfaces.ts diff --git a/packages/electron-info/src/ElectronInfo.test.ts b/packages/electron-info/src/ElectronInfo.test.ts index 2c0b944d9..5cbc2b422 100644 --- a/packages/electron-info/src/ElectronInfo.test.ts +++ b/packages/electron-info/src/ElectronInfo.test.ts @@ -5,7 +5,8 @@ import {expect, describe, test, beforeEach, beforeAll, afterAll, afterEach} from import {StatusCodes as HTTP_STATUS} from 'http-status-codes'; import nock from 'nock'; -import {ElectronInfo, RawReleaseInfo} from './ElectronInfo.js'; +import {ElectronInfo} from './ElectronInfo.js'; +import type {RawReleaseInfo} from './interfaces.js'; const __dirname = import.meta.dirname; const tempDir = path.resolve(__dirname, '.temp'); diff --git a/packages/electron-info/src/ElectronInfo.ts b/packages/electron-info/src/ElectronInfo.ts index 3e115744e..135f1fa51 100644 --- a/packages/electron-info/src/ElectronInfo.ts +++ b/packages/electron-info/src/ElectronInfo.ts @@ -5,60 +5,7 @@ import logdown from 'logdown'; import semver from 'semver'; import {FileService} from './FileService.js'; - -export interface RawDeps { - chrome: string; - modules: string; - node: string; - openssl: string; - uv: string; - v8: string; - zlib: string; -} - -export interface RawReleaseInfo { - deps?: RawDeps; - name: string; - node_id: string; - npm_dist_tags: string[]; - npm_package_name?: string; - prerelease: boolean; - published_at: string; - tag_name: string; - total_downloads: number; - version: string; -} - -export interface Options { - /** Enable debug logging. Default: `false`. */ - debug?: boolean; - /** If Electron prereleases should be included. Default: `true`. */ - electronPrereleases?: boolean; - /** Force downloading the latest release file. Default: `false`. */ - forceUpdate?: boolean; - /** - * Include only the latest release. Alias for `limit=1`. Ignores `limit`. - * Default: `false`. - */ - latest?: boolean; - /** - * Limit output of releases. Everything below 1 will be treated as no limit. - * Default: 0. - */ - limit?: number; - /** - * Can be a URL or a local path. Default: - * https://raw.githubusercontent.com/electron/releases/master/lite.json. - */ - releasesUrl?: string; - /** - * Use a custom temporary directory. If not defined, the system's temporary - * directory will be used. - */ - tempDirectory?: string; - /** Use a custom HTTP timeout in milliseconds. Default is `2000`. */ - timeout?: number; -} +import type {Options, RawDeps, RawReleaseInfo} from './interfaces.js'; const defaultOptions: Required = { debug: false, diff --git a/packages/electron-info/src/FileService.ts b/packages/electron-info/src/FileService.ts index c928c1ee5..a81aef151 100644 --- a/packages/electron-info/src/FileService.ts +++ b/packages/electron-info/src/FileService.ts @@ -5,8 +5,8 @@ import URL from 'node:url'; import {isAfter as isAfterDate, sub as subtractDate} from 'date-fns'; import logdown from 'logdown'; -import type {Options, RawReleaseInfo} from './ElectronInfo.js'; import {HTTPService} from './HTTPService.js'; +import type {Options, RawReleaseInfo} from './interfaces.js'; export class FileService { private readonly httpService: HTTPService; diff --git a/packages/electron-info/src/HTTPService.ts b/packages/electron-info/src/HTTPService.ts index 31f89437b..c6d492b89 100644 --- a/packages/electron-info/src/HTTPService.ts +++ b/packages/electron-info/src/HTTPService.ts @@ -2,9 +2,7 @@ import fs from 'node:fs/promises'; import {inspect} from 'node:util'; import logdown from 'logdown'; -import type {Options, RawReleaseInfo} from './ElectronInfo.js'; - -export type HTTPOptions = Pick; +import type {HTTPOptions, RawReleaseInfo} from './interfaces.js'; export class HTTPService { private readonly logger: logdown.Logger; diff --git a/packages/electron-info/src/cli.ts b/packages/electron-info/src/cli.ts index 8fc315ea7..fadb6bc8a 100644 --- a/packages/electron-info/src/cli.ts +++ b/packages/electron-info/src/cli.ts @@ -4,7 +4,8 @@ import fs from 'node:fs/promises'; import path from 'node:path'; import {program as commander} from 'commander'; -import {ElectronInfo, RawDeps, SupportedDependencies} from './ElectronInfo.js'; +import {ElectronInfo, SupportedDependencies} from './ElectronInfo.js'; +import type {RawDeps} from './interfaces.js'; interface PackageJson { description: string; diff --git a/packages/electron-info/src/index.ts b/packages/electron-info/src/index.ts index c652fbde5..ac0312696 100644 --- a/packages/electron-info/src/index.ts +++ b/packages/electron-info/src/index.ts @@ -1 +1,2 @@ export * from './ElectronInfo.js'; +export * from './interfaces.js'; diff --git a/packages/electron-info/src/interfaces.ts b/packages/electron-info/src/interfaces.ts new file mode 100644 index 000000000..61322bdda --- /dev/null +++ b/packages/electron-info/src/interfaces.ts @@ -0,0 +1,55 @@ +export interface RawDeps { + chrome: string; + modules: string; + node: string; + openssl: string; + uv: string; + v8: string; + zlib: string; +} + +export interface RawReleaseInfo { + deps?: RawDeps; + name: string; + node_id: string; + npm_dist_tags: string[]; + npm_package_name?: string; + prerelease: boolean; + published_at: string; + tag_name: string; + total_downloads: number; + version: string; +} + +export interface Options { + /** Enable debug logging. Default: `false`. */ + debug?: boolean; + /** If Electron prereleases should be included. Default: `true`. */ + electronPrereleases?: boolean; + /** Force downloading the latest release file. Default: `false`. */ + forceUpdate?: boolean; + /** + * Include only the latest release. Alias for `limit=1`. Ignores `limit`. + * Default: `false`. + */ + latest?: boolean; + /** + * Limit output of releases. Everything below 1 will be treated as no limit. + * Default: 0. + */ + limit?: number; + /** + * Can be a URL or a local path. Default: + * https://raw.githubusercontent.com/electron/releases/master/lite.json. + */ + releasesUrl?: string; + /** + * Use a custom temporary directory. If not defined, the system's temporary + * directory will be used. + */ + tempDirectory?: string; + /** Use a custom HTTP timeout in milliseconds. Default is `2000`. */ + timeout?: number; +} + +export type HTTPOptions = Pick; From 60bc4f3b0ab3dc1cf239717e68772263640fd893 Mon Sep 17 00:00:00 2001 From: Florian Imdahl Date: Sun, 30 Nov 2025 22:28:09 +0100 Subject: [PATCH 7/9] feat: Back to cosmiconfig --- packages/auto-merge/package.json | 2 +- packages/auto-merge/src/cli.ts | 4 +-- packages/jszip-cli/package.json | 2 +- packages/jszip-cli/src/JSZipCLI.test.ts | 5 +++- packages/jszip-cli/src/JSZipCLI.ts | 35 +++++++++++-------------- 5 files changed, 23 insertions(+), 25 deletions(-) diff --git a/packages/auto-merge/package.json b/packages/auto-merge/package.json index 7273f43b0..9f4ead3e1 100644 --- a/packages/auto-merge/package.json +++ b/packages/auto-merge/package.json @@ -3,7 +3,7 @@ "bin": "dist/cli.js", "dependencies": { "commander": "14.0.2", - "lilconfig": "3.1.3", + "cosmiconfig": "9.0.0", "logdown": "3.3.1" }, "description": "Automatically merge (and optionally approve) all GitHub PRs which match a specific pattern.", diff --git a/packages/auto-merge/src/cli.ts b/packages/auto-merge/src/cli.ts index 1746a6647..c8c020bf9 100644 --- a/packages/auto-merge/src/cli.ts +++ b/packages/auto-merge/src/cli.ts @@ -4,7 +4,7 @@ import fs from 'node:fs/promises'; import path from 'node:path'; import readline from 'node:readline'; import {program as commander} from 'commander'; -import {lilconfig} from 'lilconfig'; +import {cosmiconfig} from 'cosmiconfig'; import logdown from 'logdown'; import {AutoMerge} from './AutoMerge.js'; @@ -41,7 +41,7 @@ commander .parse(process.argv); const commanderOptions = commander.opts(); -const configExplorer = lilconfig('automerge'); +const configExplorer = cosmiconfig('automerge'); const configResult = commanderOptions.config ? await configExplorer.load(commanderOptions.config) : await configExplorer.search(); diff --git a/packages/jszip-cli/package.json b/packages/jszip-cli/package.json index 83011169d..62f82de81 100644 --- a/packages/jszip-cli/package.json +++ b/packages/jszip-cli/package.json @@ -5,7 +5,7 @@ "commander": "14.0.2", "glob": "11.1.0", "jszip": "3.10.1", - "lilconfig": "3.1.3", + "cosmiconfig": "9.0.0", "logdown": "3.3.1", "progress": "2.0.3" }, diff --git a/packages/jszip-cli/src/JSZipCLI.test.ts b/packages/jszip-cli/src/JSZipCLI.test.ts index 90b162f5f..d44bba66f 100644 --- a/packages/jszip-cli/src/JSZipCLI.test.ts +++ b/packages/jszip-cli/src/JSZipCLI.test.ts @@ -1,6 +1,6 @@ import * as fs from 'node:fs/promises'; import * as path from 'node:path'; -import {expect, describe, test, vi, beforeAll, afterAll} from 'vitest'; +import {expect, describe, test, vi, beforeAll, afterAll, afterEach} from 'vitest'; import {ConfigFileOptions, JSZipCLI, TerminalOptions} from './index.js'; const tempDir = path.resolve(__dirname, '.temp'); @@ -40,6 +40,8 @@ describe('JSZipCLI', () => { }); afterAll(() => fs.rm(tempDir, {force: true, recursive: true})); + afterEach(() => fs.rm(configFilePath)); + test('can read from a configuration file', async () => { const builtOptions = await buildOptions(); @@ -75,6 +77,7 @@ describe('JSZipCLI', () => { }); test('sets verbose logging correctly', async () => { + await buildOptions(); const jsZipCLI = new JSZipCLI({verbose: false}); expect(jsZipCLI['logger'].state.isEnabled).toBe(false); }); diff --git a/packages/jszip-cli/src/JSZipCLI.ts b/packages/jszip-cli/src/JSZipCLI.ts index 1486f6384..84e81badc 100644 --- a/packages/jszip-cli/src/JSZipCLI.ts +++ b/packages/jszip-cli/src/JSZipCLI.ts @@ -1,4 +1,4 @@ -import {lilconfigSync, LilconfigResult, SyncSearcher} from 'lilconfig'; +import {cosmiconfigSync, type CosmiconfigResult} from 'cosmiconfig'; import logdown from 'logdown'; import {BuildService} from './BuildService.js'; @@ -18,26 +18,27 @@ const defaultOptions: Required = { export class JSZipCLI { private readonly buildService: BuildService; - private readonly configExplorer: SyncSearcher; + private readonly configExplorer: ReturnType; private readonly configFile?: string; private readonly extractService: ExtractService; private readonly logger: logdown.Logger; - private options: Required & Partial; - private readonly terminalOptions?: TerminalOptions; + private readonly options: Required & Partial; constructor(options?: TerminalOptions) { - this.terminalOptions = options; this.logger = logdown('jszip-cli/index', { logger: console, markdown: false, }); - this.configExplorer = lilconfigSync('jszip'); + this.configExplorer = cosmiconfigSync('jszip'); - this.options = {...defaultOptions, ...this.terminalOptions}; - this.logger.state.isEnabled = this.options.verbose; - this.logger.info('Merged options', this.options); + this.options = {...defaultOptions, ...options}; + + if (this.options.configFile) { + const configFileData = this.checkConfigFile(); + this.options = {...defaultOptions, ...configFileData, ...options}; + } - this.checkConfigFile(); + this.logger.state.isEnabled = this.options.verbose; this.logger.info('Loaded options', this.options); @@ -110,13 +111,8 @@ export class JSZipCLI { return this.buildService.save(); } - private checkConfigFile(): void { - if (!this.options.configFile) { - this.logger.info('Not using any configuration file.'); - return; - } - - let configResult: LilconfigResult = null; + private checkConfigFile(): ConfigFileOptions | void { + let configResult: CosmiconfigResult = null; if (typeof this.options.configFile === 'string') { try { @@ -133,7 +129,7 @@ export class JSZipCLI { } if (!configResult || configResult.isEmpty) { - this.logger.info('Not using any configuration file.'); + this.logger.info('Configuration file not found or empty.'); return; } @@ -141,7 +137,6 @@ export class JSZipCLI { this.logger.info(`Using configuration file ${configResult.filepath}`); - this.options = {...defaultOptions, ...configFileData, ...this.terminalOptions}; - this.logger.state.isEnabled = this.options.verbose; + return configFileData; } } From 807bde213837bab41372a180b4850d6688ad5444 Mon Sep 17 00:00:00 2001 From: Florian Imdahl Date: Sun, 30 Nov 2025 22:29:23 +0100 Subject: [PATCH 8/9] update yarn lockfile --- packages/jszip-cli/package.json | 2 +- yarn.lock | 11 ++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/packages/jszip-cli/package.json b/packages/jszip-cli/package.json index 62f82de81..286a95e25 100644 --- a/packages/jszip-cli/package.json +++ b/packages/jszip-cli/package.json @@ -3,9 +3,9 @@ "bin": "dist/cli.js", "dependencies": { "commander": "14.0.2", + "cosmiconfig": "9.0.0", "glob": "11.1.0", "jszip": "3.10.1", - "cosmiconfig": "9.0.0", "logdown": "3.3.1", "progress": "2.0.3" }, diff --git a/yarn.lock b/yarn.lock index 9df4d2c3a..2ae5a994e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -902,8 +902,8 @@ __metadata: resolution: "@ffflorian/auto-merge@workspace:packages/auto-merge" dependencies: commander: "npm:14.0.2" + cosmiconfig: "npm:9.0.0" http-status-codes: "npm:2.3.0" - lilconfig: "npm:3.1.3" logdown: "npm:3.3.1" nock: "npm:14.0.10" rimraf: "npm:6.1.0" @@ -1008,10 +1008,10 @@ __metadata: dependencies: "@types/progress": "npm:2.0.7" commander: "npm:14.0.2" + cosmiconfig: "npm:9.0.0" cross-env: "npm:10.1.0" glob: "npm:11.1.0" jszip: "npm:3.10.1" - lilconfig: "npm:3.1.3" logdown: "npm:3.3.1" progress: "npm:2.0.3" rimraf: "npm:6.1.0" @@ -9134,13 +9134,6 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:3.1.3": - version: 3.1.3 - resolution: "lilconfig@npm:3.1.3" - checksum: 10c0/f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc - languageName: node - linkType: hard - "lines-and-columns@npm:2.0.3": version: 2.0.3 resolution: "lines-and-columns@npm:2.0.3" From 3c1ad40fbd76412388e35789f7f41e7a9ad08ba4 Mon Sep 17 00:00:00 2001 From: Florian Imdahl Date: Sun, 18 Jan 2026 20:14:55 +0100 Subject: [PATCH 9/9] update Node versions --- packages/crates-updater/package.json | 2 +- packages/electron-icon-generator/package.json | 2 +- packages/gh-open/package.json | 2 +- packages/https-proxy/package.json | 2 +- packages/ntpclient/package.json | 2 +- packages/publish-flat/package.json | 3 +++ packages/publish-flat/src/copyJson.ts | 8 ++++---- packages/scrabble-cheater/package.json | 2 +- packages/which-os/package.json | 2 +- 9 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/crates-updater/package.json b/packages/crates-updater/package.json index 0a8422d55..6ffa31e99 100644 --- a/packages/crates-updater/package.json +++ b/packages/crates-updater/package.json @@ -16,7 +16,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/electron-icon-generator/package.json b/packages/electron-icon-generator/package.json index 4446e18aa..a4080e116 100644 --- a/packages/electron-icon-generator/package.json +++ b/packages/electron-icon-generator/package.json @@ -14,7 +14,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/gh-open/package.json b/packages/gh-open/package.json index 75d08e0f7..466c3540f 100644 --- a/packages/gh-open/package.json +++ b/packages/gh-open/package.json @@ -17,7 +17,7 @@ "vitest": "4.0.16" }, "engines": { - "node": ">= 18" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/https-proxy/package.json b/packages/https-proxy/package.json index 373093c84..98bc99429 100644 --- a/packages/https-proxy/package.json +++ b/packages/https-proxy/package.json @@ -17,7 +17,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/ntpclient/package.json b/packages/ntpclient/package.json index c1e6f668e..f5c1641dc 100644 --- a/packages/ntpclient/package.json +++ b/packages/ntpclient/package.json @@ -12,7 +12,7 @@ "vitest": "4.0.16" }, "engines": { - "node": ">= 18" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/publish-flat/package.json b/packages/publish-flat/package.json index b198329f5..b3b2d58b5 100644 --- a/packages/publish-flat/package.json +++ b/packages/publish-flat/package.json @@ -18,6 +18,9 @@ "tsx": "4.21.0", "typescript": "5.9.3" }, + "engines": { + "node": ">= 21" + }, "files": [ "dist" ], diff --git a/packages/publish-flat/src/copyJson.ts b/packages/publish-flat/src/copyJson.ts index 56fd9b260..a6ec3b8b7 100644 --- a/packages/publish-flat/src/copyJson.ts +++ b/packages/publish-flat/src/copyJson.ts @@ -9,8 +9,8 @@ async function checkFile(filePath: string): Promise { } } -export interface packageJson { - [key: string]: string | packageJson; +export interface PackageJson { + [key: string]: string | PackageJson; } export async function copyJson(inputFile: string, outputFile: string, values: string[]): Promise { @@ -23,7 +23,7 @@ export async function copyJson(inputFile: string, outputFile: string, values: st await checkFile(inputResolved); - const originalJSON: packageJson = JSON.parse(await fs.readFile(inputResolved, 'utf-8')); + const originalJSON: PackageJson = JSON.parse(await fs.readFile(inputResolved, 'utf-8')); let newJSONRaw = await fs.readFile(outputResolved, 'utf-8'); let spaces = 2; @@ -38,7 +38,7 @@ export async function copyJson(inputFile: string, outputFile: string, values: st } } - const newJSON: packageJson = JSON.parse(newJSONRaw); + const newJSON: PackageJson = JSON.parse(newJSONRaw); for (const value of values) { if (value in originalJSON) { diff --git a/packages/scrabble-cheater/package.json b/packages/scrabble-cheater/package.json index bc29ec11f..c74df84a7 100644 --- a/packages/scrabble-cheater/package.json +++ b/packages/scrabble-cheater/package.json @@ -13,7 +13,7 @@ "vitest": "4.0.16" }, "engines": { - "node": ">= 18" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/which-os/package.json b/packages/which-os/package.json index 6d1ce5907..b219fddf7 100644 --- a/packages/which-os/package.json +++ b/packages/which-os/package.json @@ -11,7 +11,7 @@ "typescript": "5.9.3" }, "engines": { - "node": ">= 18" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [