diff --git a/packages/api-client/README.md b/packages/api-client/README.md index 8f787dc1e..b257ab4d9 100644 --- a/packages/api-client/README.md +++ b/packages/api-client/README.md @@ -11,7 +11,7 @@ A simple API client using fetch ([Node.js](https://nodejs.org/api/globals.html#f ℹ️ 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 f8fb894f4..d268fbcc2 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/package.json b/packages/auto-merge/package.json index 5e2040e44..55cc2f64e 100644 --- a/packages/auto-merge/package.json +++ b/packages/auto-merge/package.json @@ -16,13 +16,14 @@ "vitest": "4.0.16" }, "engines": { - "node": ">= 18.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ "dist" ], "keywords": [ + "auto-merge", "cli", "typescript" ], diff --git a/packages/auto-merge/src/AutoMerge.ts b/packages/auto-merge/src/AutoMerge.ts index 106f379f8..71a8caa8f 100644 --- a/packages/auto-merge/src/AutoMerge.ts +++ b/packages/auto-merge/src/AutoMerge.ts @@ -1,4 +1,4 @@ -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import logdown from 'logdown'; @@ -12,7 +12,7 @@ interface PackageJson { const __dirname = import.meta.dirname; const packageJsonPath = path.join(__dirname, '../package.json'); -const {name: toolName, version: toolVersion}: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); +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 10a870721..c8c020bf9 100644 --- a/packages/auto-merge/src/cli.ts +++ b/packages/auto-merge/src/cli.ts @@ -1,10 +1,10 @@ #!/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'; -import {cosmiconfigSync} from 'cosmiconfig'; +import {cosmiconfig} from 'cosmiconfig'; import logdown from 'logdown'; import {AutoMerge} from './AutoMerge.js'; @@ -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(/^@[^/]+\//, '')) @@ -41,8 +41,10 @@ commander .parse(process.argv); const commanderOptions = commander.opts(); -const configExplorer = cosmiconfigSync('automerge'); -const configResult = commanderOptions.config ? configExplorer.load(commanderOptions.config) : configExplorer.search(); +const configExplorer = cosmiconfig('automerge'); +const configResult = commanderOptions.config + ? await configExplorer.load(commanderOptions.config) + : await configExplorer.search(); if (!configResult || configResult.isEmpty) { logger.error('No valid configuration file found.'); diff --git a/packages/crates-updater/package.json b/packages/crates-updater/package.json index 4e70793fe..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.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/crates-updater/src/cli.ts b/packages/crates-updater/src/cli.ts index 370b17a27..067ec0f91 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,10 +15,11 @@ 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')); +const [toolName] = Object.keys(bin); commander - .name(Object.keys(bin)[0]) + .name(toolName) .description(description) .arguments('') .arguments('[packageVersion]') diff --git a/packages/double-linked-list/package.json b/packages/double-linked-list/package.json index 67a4c5dde..0546a3250 100644 --- a/packages/double-linked-list/package.json +++ b/packages/double-linked-list/package.json @@ -8,7 +8,7 @@ "vitest": "4.0.16" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/electron-icon-generator/package.json b/packages/electron-icon-generator/package.json index cd6ee0462..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.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ 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/package.json b/packages/electron-info/package.json index 03de5f0b7..01d065646 100644 --- a/packages/electron-info/package.json +++ b/packages/electron-info/package.json @@ -20,7 +20,7 @@ "vitest": "4.0.16" }, "engines": { - "node": ">= 18.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ 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 3796f21bd..fadb6bc8a 100644 --- a/packages/electron-info/src/cli.ts +++ b/packages/electron-info/src/cli.ts @@ -1,10 +1,11 @@ #!/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'; -import {ElectronInfo, RawDeps, SupportedDependencies} from './ElectronInfo.js'; +import {ElectronInfo, SupportedDependencies} from './ElectronInfo.js'; +import type {RawDeps} from './interfaces.js'; interface PackageJson { description: string; @@ -15,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')); let matchedCommand = false; 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; diff --git a/packages/exposure-keys/package.json b/packages/exposure-keys/package.json index 0ececc74c..c91ddff23 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/package.json b/packages/gh-open/package.json index c4cb915cf..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.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ 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/package.json b/packages/https-proxy/package.json index bc024c083..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.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ 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/jszip-cli/package.json b/packages/jszip-cli/package.json index 58caf9d0b..8260d13cc 100644 --- a/packages/jszip-cli/package.json +++ b/packages/jszip-cli/package.json @@ -19,7 +19,7 @@ "vitest": "4.0.16" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "files": [ "dist" 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 b16af2e9b..84e81badc 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 {cosmiconfigSync, type CosmiconfigResult} from 'cosmiconfig'; import logdown from 'logdown'; import {BuildService} from './BuildService.js'; @@ -23,22 +22,23 @@ export class JSZipCLI { 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 = 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); @@ -111,12 +111,7 @@ export class JSZipCLI { return this.buildService.save(); } - private checkConfigFile(): void { - if (!this.options.configFile) { - this.logger.info('Not using any configuration file.'); - return; - } - + private checkConfigFile(): ConfigFileOptions | void { let configResult: CosmiconfigResult = null; if (typeof this.options.configFile === 'string') { @@ -134,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; } @@ -142,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; } } diff --git a/packages/mastodon-bot-yearprogress/package.json b/packages/mastodon-bot-yearprogress/package.json index 79d6f48a8..386fd2a7b 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/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/mock-udp/package.json b/packages/mock-udp/package.json index 5fc290cd2..b27702de1 100644 --- a/packages/mock-udp/package.json +++ b/packages/mock-udp/package.json @@ -7,7 +7,7 @@ "vitest": "4.0.16" }, "engines": { - "node": ">= 18.0" + "node": ">= 18" }, "exports": "./dist/index.js", "files": [ diff --git a/packages/my-timezone/package.json b/packages/my-timezone/package.json index bbd9548f9..ec1eb542e 100644 --- a/packages/my-timezone/package.json +++ b/packages/my-timezone/package.json @@ -14,7 +14,7 @@ "vitest": "4.0.16" }, "engines": { - "node": ">= 18.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ 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/ntfy/package.json b/packages/ntfy/package.json index f4ad7f670..35ecbfca1 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/package.json b/packages/ntpclient/package.json index 81d05c514..f5c1641dc 100644 --- a/packages/ntpclient/package.json +++ b/packages/ntpclient/package.json @@ -12,7 +12,7 @@ "vitest": "4.0.16" }, "engines": { - "node": ">= 18.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ 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/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/cli-copy.ts b/packages/publish-flat/src/cli-copy.ts index ee05a8da9..cff0a38b6 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,13 +14,13 @@ 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 name = Object.keys(bin)[1]; +const {bin, version}: PackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); +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 16f245c40..6561ecc9e 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,10 +14,11 @@ 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')); +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)') 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 ece9fd1b6..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.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ 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/package.json b/packages/which-os/package.json index e82247274..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.0" + "node": ">= 21" }, "exports": "./dist/index.js", "files": [ 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)}`; diff --git a/packages/windows-shortcut-maker/package.json b/packages/windows-shortcut-maker/package.json index 77df68804..4032bbbca 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": [