44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
const expectedNodeMajor = 24
|
|
const expectedPnpmVersion = '10.33.0'
|
|
|
|
const actualNodeVersion = process.versions.node
|
|
const actualNodeMajor = Number.parseInt(
|
|
actualNodeVersion.split('.')[0] ?? '',
|
|
10,
|
|
)
|
|
const packageManager = process.env.npm_config_user_agent ?? ''
|
|
const requirePackageManager = process.argv.includes('--require-package-manager')
|
|
const pnpmMatch = /(?:^|\s)pnpm\/([^\s]+)/u.exec(packageManager)
|
|
|
|
const failures = []
|
|
if (actualNodeMajor !== expectedNodeMajor) {
|
|
failures.push(
|
|
`Node.js ${expectedNodeMajor}.x is required; current runtime is ${actualNodeVersion}.`,
|
|
)
|
|
}
|
|
if (requirePackageManager && !pnpmMatch) {
|
|
failures.push(
|
|
`pnpm ${expectedPnpmVersion} is required; no pnpm user agent was detected.`,
|
|
)
|
|
} else if (
|
|
pnpmMatch?.[1] !== undefined &&
|
|
pnpmMatch[1] !== expectedPnpmVersion
|
|
) {
|
|
failures.push(
|
|
`pnpm ${expectedPnpmVersion} is required; current package manager is pnpm ${pnpmMatch[1]}.`,
|
|
)
|
|
}
|
|
|
|
if (failures.length > 0) {
|
|
console.error('DevRunbook runtime preflight failed:')
|
|
for (const failure of failures) console.error(`- ${failure}`)
|
|
console.error(
|
|
'Use the versions declared in .nvmrc, .node-version and package.json before installing or verifying.',
|
|
)
|
|
process.exit(1)
|
|
}
|
|
|
|
console.log(
|
|
`DevRunbook runtime preflight passed: Node.js ${actualNodeVersion}${pnpmMatch ? `, pnpm ${pnpmMatch[1]}` : ''}.`,
|
|
)
|