From d2a4efbbf745d46168e4f279b8519475290a0909 Mon Sep 17 00:00:00 2001 From: ehmicky Date: Sun, 30 Oct 2022 21:18:41 +0100 Subject: [PATCH] Improve package.json load --- src/config/normalize/lib/error.js | 6 ++---- src/config/plugin/lib/error.js | 12 +++++------- src/config/plugin/main.js | 2 ++ src/error/main.js | 4 ++-- src/runners/common/error.js | 6 ++---- src/runners/node/config/version.js | 23 ++++++----------------- src/utils/package.js | 13 ++++++++++--- 7 files changed, 29 insertions(+), 37 deletions(-) diff --git a/src/config/normalize/lib/error.js b/src/config/normalize/lib/error.js index 55adc29f..2b248c48 100644 --- a/src/config/normalize/lib/error.js +++ b/src/config/normalize/lib/error.js @@ -1,13 +1,11 @@ import modernErrors from 'modern-errors' import modernErrorsBugs from 'modern-errors-bugs' -import { packageJson } from '../../../utils/package.js' +import { bugs } from '../../../utils/package.js' export const AnyError = modernErrors([modernErrorsBugs]) -export const UnknownError = AnyError.subclass('UnknownError', { - bugs: packageJson.bugs.url, -}) +export const UnknownError = AnyError.subclass('UnknownError', { bugs }) // Invalid `inputs` export const InputError = AnyError.subclass('InputError') diff --git a/src/config/plugin/lib/error.js b/src/config/plugin/lib/error.js index 90d4e4ac..5b00e246 100644 --- a/src/config/plugin/lib/error.js +++ b/src/config/plugin/lib/error.js @@ -1,13 +1,11 @@ import modernErrors from 'modern-errors' import modernErrorsBugs from 'modern-errors-bugs' -import { packageJson } from '../../../utils/package.js' +import { bugs } from '../../../utils/package.js' export const AnyError = modernErrors([modernErrorsBugs]) -export const UnknownError = AnyError.subclass('UnknownError', { - bugs: packageJson.bugs.url, -}) +export const UnknownError = AnyError.subclass('UnknownError', { bugs }) // Error from the library's user, who defines available plugin types export const UserError = AnyError.subclass('UserError') @@ -20,8 +18,8 @@ export const ConsumerError = AnyError.subclass('ConsumerError') // When `options.bugs` is defined, user errors report it. // When `plugin.bugs` is defined, plugin errors report it. -export const addErrorBugs = function (error, bugs) { - return typeof bugs === 'string' && bugs !== '' - ? new AnyError('', { cause: error, bugs }) +export const addErrorBugs = function (error, bugsOpt) { + return typeof bugsOpt === 'string' && bugsOpt !== '' + ? new AnyError('', { cause: error, bugs: bugsOpt }) : error } diff --git a/src/config/plugin/main.js b/src/config/plugin/main.js index d00192d0..ef92d28d 100644 --- a/src/config/plugin/main.js +++ b/src/config/plugin/main.js @@ -5,6 +5,7 @@ import { normalizeReporters } from '../../report/config/main.js' import { REPORTER_PLUGIN_TYPE } from '../../report/reporters/plugin/main.js' import { RUNNER_PLUGIN_TYPE } from '../../runners/plugin/main.js' import { cleanObject } from '../../utils/clean.js' +import { bugs } from '../../utils/package.js' import { PREFIX } from '../normalize/main.js' import { getPlugins } from './lib/main.js' @@ -50,6 +51,7 @@ const normalizePluginConfigs = async function ({ context, cwd, prefix: PREFIX, + bugs, }) const pluginInfosA = pluginInfos.map(normalizePluginInfo) return { [name]: pluginInfosA } diff --git a/src/error/main.js b/src/error/main.js index 8f466c6d..926702c8 100644 --- a/src/error/main.js +++ b/src/error/main.js @@ -3,7 +3,7 @@ import modernErrorsBugs from 'modern-errors-bugs' import modernErrorsCli from 'modern-errors-cli' import modernErrorsStack from 'modern-errors-stack' -import { packageJson } from '../utils/package.js' +import { bugs } from '../utils/package.js' export const AnyError = modernErrors([ modernErrorsBugs, @@ -12,7 +12,7 @@ export const AnyError = modernErrors([ ]) export const UnknownError = AnyError.subclass('UnknownError', { - bugs: packageJson.bugs.url, + bugs, cli: { exitCode: 1, header: 'red bold', icon: 'cross' }, }) diff --git a/src/runners/common/error.js b/src/runners/common/error.js index 00d9592e..cb10a3fa 100644 --- a/src/runners/common/error.js +++ b/src/runners/common/error.js @@ -2,13 +2,11 @@ import modernErrors from 'modern-errors' import modernErrorsBugs from 'modern-errors-bugs' import modernErrorsSerialize from 'modern-errors-serialize' -import { packageJson } from '../../utils/package.js' +import { bugs } from '../../utils/package.js' export const AnyError = modernErrors([modernErrorsBugs, modernErrorsSerialize]) -export const UnknownError = AnyError.subclass('UnknownError', { - bugs: packageJson.bugs.url, -}) +export const UnknownError = AnyError.subclass('UnknownError', { bugs }) // Could not JSON-stringify IPC payload export const IpcSerializationError = AnyError.subclass('IpcSerializationError') diff --git a/src/runners/node/config/version.js b/src/runners/node/config/version.js index 16f7ac3c..ab6fa28d 100644 --- a/src/runners/node/config/version.js +++ b/src/runners/node/config/version.js @@ -1,22 +1,18 @@ -import { dirname } from 'path' import { version as currentNodeVersion } from 'process' -import { fileURLToPath } from 'url' -import { readPackageUp } from 'read-pkg-up' import semver from 'semver' import { normalizeNumberString } from '../../../config/normalize/transform.js' +import { nodeVersion } from '../../../utils/package.js' import { AnyError } from '../../common/error.js' -// Normalize and validate the Node.js version +// Normalize and validate the Node.js version. +// We can only allow Node versions that are valid with the runner's code. const transformVersion = async function (version) { - const [versionInfo, allowedVersions] = await Promise.all([ - normalizeVersion(version), - getAllowedVersions(), - ]) + const versionInfo = await normalizeVersion(version) - if (!semver.satisfies(versionInfo.version, allowedVersions)) { - throw new Error(`must be ${allowedVersions}`) + if (!semver.satisfies(versionInfo.version, nodeVersion)) { + throw new Error(`must be ${nodeVersion}`) } return versionInfo.version @@ -38,13 +34,6 @@ const normalizeVersion = async function (version) { } } -// We can only allow Node versions that are valid with the runner's code -const getAllowedVersions = async function () { - const cwd = dirname(fileURLToPath(import.meta.url)) - const { packageJson } = await readPackageUp({ cwd }) - return packageJson.engines.node -} - export const versionRule = { name: 'version', schema: { diff --git a/src/utils/package.js b/src/utils/package.js index a52f1569..00a1837b 100644 --- a/src/utils/package.js +++ b/src/utils/package.js @@ -1,6 +1,13 @@ import { createRequire } from 'module' // TODO: replace with a JSON import after dropping support for Node <16.14.0 -export const packageJson = createRequire(import.meta.url)( - '../../../package.json', -) +const { + bugs: { url }, + engines: { node }, +} = createRequire(import.meta.url)('../../../package.json') + +// Bugs URL +export const bugs = url + +// Node.js version +export const nodeVersion = node