Skip to content

Commit

Permalink
Improve require validation
Browse files Browse the repository at this point in the history
  • Loading branch information
ehmicky committed Feb 6, 2022
1 parent 9224da0 commit d548ea1
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 29 deletions.
18 changes: 16 additions & 2 deletions src/runners/node/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,14 @@ import { fileURLToPath } from 'url'
import { readPackageUp } from 'read-pkg-up'
import semver from 'semver'

import { normalizeNumberString } from '../../config/normalize/transform.js'
import { validateNumberString } from '../../config/normalize/validate/simple.js'
import {
normalizeNumberString,
normalizeOptionalArray,
} from '../../config/normalize/transform.js'
import {
validateNumberString,
validateDefinedString,
} from '../../config/normalize/validate/simple.js'
import { wrapError } from '../../error/wrap.js'

// Normalize and validate the Node.js version
Expand Down Expand Up @@ -51,4 +57,12 @@ export const config = [
validate: validateNumberString,
transform: transformVersion,
},
{
name: 'require',
transform: normalizeOptionalArray,
},
{
name: 'require.*',
validate: validateDefinedString,
},
]
31 changes: 4 additions & 27 deletions src/runners/node/handler/start/require_config.js
Original file line number Diff line number Diff line change
@@ -1,32 +1,9 @@
import { inspect } from 'util'

import { UserError } from '../../../../error/main.js'
import { wrapError } from '../../../../error/wrap.js'
import { ConfigError } from '../../../common/error.js'

// Use the `require` config
export const useRequireConfig = async function (requireConfig) {
const requireConfigA = normalizeRequireConfig(requireConfig)
await Promise.all(requireConfigA.map(useRequiredModule))
}

const normalizeRequireConfig = function (requireConfig = []) {
if (typeof requireConfig === 'string') {
return [requireConfig]
}

if (!Array.isArray(requireConfig) || !requireConfig.every(isString)) {
throw new UserError(
`Configuration property "runnerConfig.node.require" must be an array of strings: ${inspect(
requireConfig,
)}`,
)
}

return requireConfig
}

const isString = function (value) {
return typeof value === 'string'
await Promise.all(requireConfig.map(useRequiredModule))
}

const useRequiredModule = async function (requiredModule) {
Expand All @@ -35,8 +12,8 @@ const useRequiredModule = async function (requiredModule) {
} catch (error) {
throw wrapError(
error,
`Configuration property "runnerConfig.node.require" with value "${requiredModule}" could not be imported\n\n`,
UserError,
`Configuration property "runnerConfig.node.require" with value "${requiredModule}" could not be imported.\n`,
ConfigError,
)
}
}

0 comments on commit d548ea1

Please sign in to comment.