zura-stack-native
Version:
A comprehensive React Native CLI project generator with production-ready setup
71 lines (59 loc) ⢠2.25 kB
JavaScript
const { execSync } = require('child_process');
const chalk = require('chalk');
const which = require('which');
const semver = require('semver');
async function checkRequirements(infoOnly = false) {
const requirements = [
{ name: 'Node.js', minVersion: '16.0.0', command: 'node --version' },
{ name: 'npm', minVersion: '8.0.0', command: 'npm --version' },
{ name: 'React Native CLI', minVersion: '19.0.0', command: 'npx @react-native-community/cli --version' }
];
const results = [];
let allPassed = true;
for (const req of requirements) {
try {
const version = execSync(req.command, { encoding: 'utf8' }).trim();
const cleanVersion = version.replace(/^v/, '');
const isValid = semver.gte(cleanVersion, req.minVersion);
results.push({
name: req.name,
version: cleanVersion,
required: req.minVersion,
valid: isValid
});
if (!isValid) {
allPassed = false;
}
} catch (error) {
results.push({
name: req.name,
version: 'Not installed',
required: req.minVersion,
valid: false
});
allPassed = false;
}
}
// Display results
console.log(chalk.blue('\nš System Requirements Check:\n'));
results.forEach(result => {
const status = result.valid ? chalk.green('ā
') : chalk.red('ā');
const versionText = result.valid
? chalk.green(result.version)
: chalk.red(result.version);
console.log(`${status} ${result.name}: ${versionText} (required: ${result.required})`);
});
if (!infoOnly && !allPassed) {
console.log(chalk.red('\nā Some requirements are not met. Please install/update the missing dependencies.'));
console.log(chalk.yellow('\nš” Installation commands:'));
console.log(chalk.gray('⢠Node.js: https://nodejs.org/'));
console.log(chalk.gray('⢠npm: comes with Node.js'));
console.log(chalk.gray('⢠React Native CLI: npm install -g @react-native-community/cli@19.0.0'));
throw new Error('System requirements not met');
}
if (infoOnly) {
console.log(chalk.green('\nā
All requirements are met!'));
}
return { allPassed, results };
}
module.exports = { checkRequirements };