Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | 1x 1x 1x 16x 16x 16x 16x 14x 16x 16x 2x 14x 16x 16x 6x 10x 10x 10x 16x 7x 1x 7x 1x 2x 7x 2x 1x | const { spawn } = require('child_process') const semver = require('semver') const { OPTIONS } = require('./constants') /** * Get the version of an engine * @param {string} name - The name of the engine to get version for * @returns {Promise<string>} - The version of the engine */ async function getEngineVersion (name) { const spawned = spawn(name, ['--version'], { shell: true }) return new Promise((resolve) => { let result = '' spawned.stdout.on('data', (data) => { result += data.toString() }) spawned.on('close', (code) => { if (code !== 0) { resolve('none') } else { resolve(result.trim()) } }) }) } /** * Checks that the given engine is installed and satisfies version (throws if not) * @param {string} name - The name of the engine to check * @param {string} version - The version to check against * @returns {Promise<[string, string, string]>} - The [name, version, installed] installed and checked successfully */ async function checkEngineVersion (name, version) { const installed = await getEngineVersion(name) if (!semver.satisfies(installed, version)) { throw new Error(`check-installed engine failed for ${name}: installed ${installed}, expected ${version}`) } return [name, version, installed] } /** * Checks engines in `package.json` are installed * @param {object} json - The `package.json` JSON object * @param {Partial<typeof import('./constants').OPTIONS>} options - Options for the CLI * @returns {Promise<void>} - Resolves when all engines are checked (throws on check fail) */ async function checkEngines (json = {}, options = {}) { const { showSuccess, showEngines } = { ...OPTIONS, ...options } // Check engines const engines = await Promise.all( Object.entries(json.engines || {}) .map(([name, version]) => checkEngineVersion(name, version)) ) if (showSuccess) { console.log('check-installed engines successful') } if (showEngines) { for (const [name, version, installed] of engines) { console.log(`${name}: ${installed} (${version})`) } } if (showSuccess || showEngines) { console.log('') } } module.exports = { checkEngines } |