UNPKG

@department-of-veterans-affairs/generator-vets-website

Version:

Generate a React app for vets-website

88 lines (76 loc) 2.28 kB
import chalk from 'chalk'; /** * Generate a UUID v4 * @returns {string} A UUID v4 string */ export function uuidv4() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { const r = (Math.random() * 16) | 0; const v = c == 'x' ? r : (r & 0x3) | 0x8; return v.toString(16); }); } /** * Check Node.js compatibility and exit if not compatible * Now requires Node 22+ after the ESM migration */ export function checkNodeCompatibility() { const nodeVersion = process.version; const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0], 10); if (majorVersion < 22) { console.error( `${chalk.red('Error:')} Node.js ${nodeVersion} is not supported by this generator.`, ); console.error( `${chalk.yellow('Required version:')} Node.js 22.0.0 or higher (use 'nvm use' to switch)`, ); console.error(`${chalk.cyan('Please switch to Node.js 22+ and try again.')}`); console.error( `${chalk.gray('Note: This generator was upgraded to ESM and requires Node 22+')}`, ); process.exit(1); } } /** * Convert a boolean-like value to an actual boolean * @param {*} boolLike - Value to convert to boolean * @returns {boolean} */ export function makeBool(boolLike) { if (typeof boolLike === 'boolean') { return boolLike; } if (typeof boolLike === 'string') { switch (boolLike.toUpperCase()) { case 'N': case 'FALSE': return false; default: return true; } } return true; } /** * Calculate the subFolder path based on folder depth * This is used in SCSS imports to create correct relative paths to platform files * * Examples: * - "my-app" → "" (no subfolders) * - "edu-benefits/0993" → "../" (one subfolder) * - "a/b/c" → "../../" (two subfolders) * * @param {string} folderName - The folder name (e.g., "edu-benefits/0993") * @returns {string} The subfolder path (e.g., "../") */ export function calculateSubFolder(folderName) { if (!folderName) { return ''; } const normalized = folderName.replace(/^\/+|\/+$/g, ''); const subfolders = Array.from(normalized).filter((c) => c === '/').length; if (subfolders > 0) { return `${new Array(subfolders).fill('..').join('/')}/`; } return ''; }