From ea58e1d438e446e010cb34475d0a3fee7b27fbee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kh=E1=BA=A3i?= Date: Sat, 13 Apr 2024 18:21:20 +0700 Subject: [PATCH] refactor(config): return type annotations (#7915) * refactor(config): return type annotations * refactor: simplify configGet * test: fix typescript errors --- config/config/src/checkGlobalBinDir.ts | 6 +++--- config/config/src/dirs.ts | 8 ++++---- config/config/src/getOptionsFromRootManifest.ts | 4 ++-- config/config/src/index.ts | 2 +- config/config/src/readLocalConfig.ts | 6 ++++-- .../package-is-installable/src/checkEngine.ts | 2 +- .../package-is-installable/src/checkPlatform.ts | 4 ++-- .../src/getSystemNodeVersion.ts | 2 +- config/parse-overrides/src/index.ts | 17 ++++++++--------- config/pick-registry-for-package/src/index.ts | 2 +- config/plugin-commands-config/src/config.ts | 12 ++++++------ config/plugin-commands-config/src/configGet.ts | 4 ++-- config/plugin-commands-config/src/configList.ts | 2 +- config/plugin-commands-config/src/configSet.ts | 2 +- config/plugin-commands-config/src/get.ts | 2 +- config/plugin-commands-config/src/set.ts | 2 +- .../test/configList.test.ts | 2 +- 17 files changed, 40 insertions(+), 39 deletions(-) diff --git a/config/config/src/checkGlobalBinDir.ts b/config/config/src/checkGlobalBinDir.ts index b10f705c79..27c571ac5e 100644 --- a/config/config/src/checkGlobalBinDir.ts +++ b/config/config/src/checkGlobalBinDir.ts @@ -21,17 +21,17 @@ export async function checkGlobalBinDir ( } } -async function globalBinDirIsInPath (globalBinDir: string, env: Record) { +async function globalBinDirIsInPath (globalBinDir: string, env: Record): Promise { const dirs = env[PATH]?.split(path.delimiter) ?? [] if (dirs.some((dir) => areDirsEqual(globalBinDir, dir))) return true const realGlobalBinDir = await fs.realpath(globalBinDir) return dirs.some((dir) => areDirsEqual(realGlobalBinDir, dir)) } -const areDirsEqual = (dir1: string, dir2: string) => +const areDirsEqual = (dir1: string, dir2: string): boolean => path.relative(dir1, dir2) === '' -function canWriteToDirAndExists (dir: string) { +function canWriteToDirAndExists (dir: string): boolean { try { return canWriteToDir(dir) } catch (err: unknown) { diff --git a/config/config/src/dirs.ts b/config/config/src/dirs.ts index c47a8570b6..039740457c 100644 --- a/config/config/src/dirs.ts +++ b/config/config/src/dirs.ts @@ -6,7 +6,7 @@ export function getCacheDir ( env: NodeJS.ProcessEnv platform: string } -) { +): string { if (opts.env.XDG_CACHE_HOME) { return path.join(opts.env.XDG_CACHE_HOME, 'pnpm') } @@ -27,7 +27,7 @@ export function getStateDir ( env: NodeJS.ProcessEnv platform: string } -) { +): string { if (opts.env.XDG_STATE_HOME) { return path.join(opts.env.XDG_STATE_HOME, 'pnpm') } @@ -45,7 +45,7 @@ export function getDataDir ( env: NodeJS.ProcessEnv platform: string } -) { +): string { if (opts.env.PNPM_HOME) { return opts.env.PNPM_HOME } @@ -69,7 +69,7 @@ export function getConfigDir ( env: NodeJS.ProcessEnv platform: string } -) { +): string { if (opts.env.XDG_CONFIG_HOME) { return path.join(opts.env.XDG_CONFIG_HOME, 'pnpm') } diff --git a/config/config/src/getOptionsFromRootManifest.ts b/config/config/src/getOptionsFromRootManifest.ts index 968990faa4..b9f5171035 100644 --- a/config/config/src/getOptionsFromRootManifest.ts +++ b/config/config/src/getOptionsFromRootManifest.ts @@ -77,7 +77,7 @@ export function getOptionsFromRootManifest (manifestDir: string, manifest: Proje return settings } -function createVersionReferencesReplacer (manifest: ProjectManifest) { +function createVersionReferencesReplacer (manifest: ProjectManifest): (spec: string) => string { const allDeps = { ...manifest.devDependencies, ...manifest.dependencies, @@ -86,7 +86,7 @@ function createVersionReferencesReplacer (manifest: ProjectManifest) { return replaceVersionReferences.bind(null, allDeps) } -function replaceVersionReferences (dep: Record, spec: string) { +function replaceVersionReferences (dep: Record, spec: string): string { if (!(spec[0] === '$')) return spec const dependencyName = spec.slice(1) const newSpec = dep[dependencyName] diff --git a/config/config/src/index.ts b/config/config/src/index.ts index ed73a43c7f..0ab67b1917 100644 --- a/config/config/src/index.ts +++ b/config/config/src/index.ts @@ -579,7 +579,7 @@ export async function getConfig ( return { config: pnpmConfig, warnings } } -function getProcessEnv (env: string) { +function getProcessEnv (env: string): string | undefined { return process.env[env] ?? process.env[env.toUpperCase()] ?? process.env[env.toLowerCase()] diff --git a/config/config/src/readLocalConfig.ts b/config/config/src/readLocalConfig.ts index 3fefd44a59..17fefcac3b 100644 --- a/config/config/src/readLocalConfig.ts +++ b/config/config/src/readLocalConfig.ts @@ -4,10 +4,12 @@ import camelcaseKeys from 'camelcase-keys' import { envReplace } from '@pnpm/config.env-replace' import { readIniFile } from 'read-ini-file' -export async function readLocalConfig (prefix: string) { +export type LocalConfig = Record & { hoist?: boolean } + +export async function readLocalConfig (prefix: string): Promise { try { const ini = await readIniFile(path.join(prefix, '.npmrc')) as Record - const config = camelcaseKeys(ini) as (Record & { hoist?: boolean }) + const config = camelcaseKeys(ini) as LocalConfig if (config.shamefullyFlatten) { config.hoistPattern = '*' // TODO: print a warning diff --git a/config/package-is-installable/src/checkEngine.ts b/config/package-is-installable/src/checkEngine.ts index 792ea4b47c..877254cf4f 100644 --- a/config/package-is-installable/src/checkEngine.ts +++ b/config/package-is-installable/src/checkEngine.ts @@ -18,7 +18,7 @@ export function checkEngine ( packageId: string, wantedEngine: WantedEngine, currentEngine: Engine -) { +): UnsupportedEngineError | null { if (!wantedEngine) return null const unsatisfiedWanted: WantedEngine = {} if (wantedEngine.node && !semver.satisfies(currentEngine.node, wantedEngine.node, { includePrerelease: true })) { diff --git a/config/package-is-installable/src/checkPlatform.ts b/config/package-is-installable/src/checkPlatform.ts index bd26225e3a..125d5445b0 100644 --- a/config/package-is-installable/src/checkPlatform.ts +++ b/config/package-is-installable/src/checkPlatform.ts @@ -19,7 +19,7 @@ export function checkPlatform ( packageId: string, wantedPlatform: WantedPlatform, supportedArchitectures?: SupportedArchitectures -) { +): UnsupportedPlatformError | null { const current = { os: dedupeCurrent(process.platform, supportedArchitectures?.os ?? ['current']), cpu: dedupeCurrent(process.arch, supportedArchitectures?.cpu ?? ['current']), @@ -82,6 +82,6 @@ function checkList (value: string | string[], list: string | string[]): boolean return match || blc === list.length } -function dedupeCurrent (current: string, supported: string[]) { +function dedupeCurrent (current: string, supported: string[]): string[] { return supported.map((supported) => supported === 'current' ? current : supported) } diff --git a/config/package-is-installable/src/getSystemNodeVersion.ts b/config/package-is-installable/src/getSystemNodeVersion.ts index 9a05e9f5fa..4b13f54036 100644 --- a/config/package-is-installable/src/getSystemNodeVersion.ts +++ b/config/package-is-installable/src/getSystemNodeVersion.ts @@ -1,7 +1,7 @@ import mem from 'mem' import * as execa from 'execa' -export function getSystemNodeVersionNonCached () { +export function getSystemNodeVersionNonCached (): string { // @ts-expect-error if (process['pkg'] != null) { return execa.sync('node', ['--version']).stdout.toString() diff --git a/config/parse-overrides/src/index.ts b/config/parse-overrides/src/index.ts index 14df2a7558..371036861d 100644 --- a/config/parse-overrides/src/index.ts +++ b/config/parse-overrides/src/index.ts @@ -4,17 +4,16 @@ import { parseWantedDependency } from '@pnpm/parse-wanted-dependency' const DELIMITER_REGEX = /[^ |@]>/ export interface VersionOverride { - parentPkg?: { - name: string - pref?: string - } - targetPkg: { - name: string - pref?: string - } + parentPkg?: PackageSelector + targetPkg: PackageSelector newPref: string } +export interface PackageSelector { + name: string + pref?: string +} + export function parseOverrides ( overrides: Record ): VersionOverride[] { @@ -38,7 +37,7 @@ export function parseOverrides ( }) } -function parsePkgSelector (selector: string) { +function parsePkgSelector (selector: string): PackageSelector { const wantedDep = parseWantedDependency(selector) if (!wantedDep.alias) { throw new PnpmError('INVALID_SELECTOR', `Cannot parse the "${selector}" selector`) diff --git a/config/pick-registry-for-package/src/index.ts b/config/pick-registry-for-package/src/index.ts index f346c50a0f..1c4441369e 100644 --- a/config/pick-registry-for-package/src/index.ts +++ b/config/pick-registry-for-package/src/index.ts @@ -1,6 +1,6 @@ import { type Registries } from '@pnpm/types' -export function pickRegistryForPackage (registries: Registries, packageName: string, pref?: string) { +export function pickRegistryForPackage (registries: Registries, packageName: string, pref?: string): string { const scope = getScope(packageName, pref) return (scope && registries[scope]) ?? registries.default } diff --git a/config/plugin-commands-config/src/config.ts b/config/plugin-commands-config/src/config.ts index 14e40da244..421615d2bc 100644 --- a/config/plugin-commands-config/src/config.ts +++ b/config/plugin-commands-config/src/config.ts @@ -6,11 +6,11 @@ import { configSet } from './configSet' import { configList } from './configList' import { type ConfigCommandOptions } from './ConfigCommandOptions' -export function rcOptionsTypes () { +export function rcOptionsTypes (): Record { return {} } -export function cliOptionsTypes () { +export function cliOptionsTypes (): Record { return { global: Boolean, location: ['global', 'project'], @@ -20,7 +20,7 @@ export function cliOptionsTypes () { export const commandNames = ['config', 'c'] -export function help () { +export function help (): string { return renderHelp({ description: 'Manage the pnpm configuration files.', descriptionLists: [ @@ -75,7 +75,7 @@ export function help () { }) } -export async function handler (opts: ConfigCommandOptions, params: string[]) { +export async function handler (opts: ConfigCommandOptions, params: string[]): Promise { if (params.length === 0) { throw new PnpmError('CONFIG_NO_SUBCOMMAND', 'Please specify the subcommand', { hint: help(), @@ -99,9 +99,9 @@ export async function handler (opts: ConfigCommandOptions, params: string[]) { key = parts.shift()! value = parts.join('=') } - return configSet(opts, key, value ?? '') + return configSet(opts, key, value ?? '') as Promise } else { - return configSet(opts, params[1], null) + return configSet(opts, params[1], null) as Promise } } case 'get': { diff --git a/config/plugin-commands-config/src/configGet.ts b/config/plugin-commands-config/src/configGet.ts index 78b39ba40d..16f0f9756e 100644 --- a/config/plugin-commands-config/src/configGet.ts +++ b/config/plugin-commands-config/src/configGet.ts @@ -1,6 +1,6 @@ import { type ConfigCommandOptions } from './ConfigCommandOptions' -export function configGet (opts: ConfigCommandOptions, key: string) { +export function configGet (opts: ConfigCommandOptions, key: string): string { const config = opts.rawConfig[key] - return typeof config === 'boolean' ? config.toString() : config + return String(config) } diff --git a/config/plugin-commands-config/src/configList.ts b/config/plugin-commands-config/src/configList.ts index 6b4b011b60..136a82868d 100644 --- a/config/plugin-commands-config/src/configList.ts +++ b/config/plugin-commands-config/src/configList.ts @@ -2,7 +2,7 @@ import { encode } from 'ini' import sortKeys from 'sort-keys' import { type ConfigCommandOptions } from './ConfigCommandOptions' -export async function configList (opts: ConfigCommandOptions) { +export async function configList (opts: ConfigCommandOptions): Promise { const sortedConfig = sortKeys(opts.rawConfig) if (opts.json) { return JSON.stringify(sortedConfig, null, 2) diff --git a/config/plugin-commands-config/src/configSet.ts b/config/plugin-commands-config/src/configSet.ts index f7abab76de..9e28baa022 100644 --- a/config/plugin-commands-config/src/configSet.ts +++ b/config/plugin-commands-config/src/configSet.ts @@ -5,7 +5,7 @@ import { readIniFile } from 'read-ini-file' import { writeIniFile } from 'write-ini-file' import { type ConfigCommandOptions } from './ConfigCommandOptions' -export async function configSet (opts: ConfigCommandOptions, key: string, value: string | null) { +export async function configSet (opts: ConfigCommandOptions, key: string, value: string | null): Promise { const configPath = opts.global ? path.join(opts.configDir, 'rc') : path.join(opts.dir, '.npmrc') if (opts.global && settingShouldFallBackToNpm(key)) { const _runNpm = runNpm.bind(null, opts.npmPath) diff --git a/config/plugin-commands-config/src/get.ts b/config/plugin-commands-config/src/get.ts index 16e30e568a..62347779ad 100644 --- a/config/plugin-commands-config/src/get.ts +++ b/config/plugin-commands-config/src/get.ts @@ -7,6 +7,6 @@ export const help = configCmd.help export const commandNames = ['get'] -export async function handler (opts: ConfigCommandOptions, params: string[]) { +export async function handler (opts: ConfigCommandOptions, params: string[]): Promise { return configCmd.handler(opts, ['get', ...params]) } diff --git a/config/plugin-commands-config/src/set.ts b/config/plugin-commands-config/src/set.ts index ba47a6b494..6b7665fd0e 100644 --- a/config/plugin-commands-config/src/set.ts +++ b/config/plugin-commands-config/src/set.ts @@ -7,6 +7,6 @@ export const help = configCmd.help export const commandNames = ['set'] -export async function handler (opts: ConfigCommandOptions, params: string[]) { +export async function handler (opts: ConfigCommandOptions, params: string[]): Promise { return configCmd.handler(opts, ['set', ...params]) } diff --git a/config/plugin-commands-config/test/configList.test.ts b/config/plugin-commands-config/test/configList.test.ts index 2a7772ccd1..b68cd8cfe5 100644 --- a/config/plugin-commands-config/test/configList.test.ts +++ b/config/plugin-commands-config/test/configList.test.ts @@ -17,7 +17,7 @@ test('config list', async () => { }, }, ['list']) - expect(normalizeNewlines(output)).toEqual(`fetch-retries=2 + expect(normalizeNewlines(output!)).toEqual(`fetch-retries=2 store-dir=~/store `) })