UNPKG

@baseplate-dev/create-project

Version:

CLI starter kit for creating a new Baseplate project

61 lines (60 loc) 2.25 kB
#!/usr/bin/env node import chalk from 'chalk'; import { program } from 'commander'; import fs from 'node:fs/promises'; import path from 'node:path'; import { getLatestCliVersion } from './npm.service.js'; import { generateBaseplateProject } from './project-creator.js'; import { getPackageVersion } from './version.js'; // check if directory contains a package.json file async function checkForPackageJson(directory) { try { const packageJsonPath = path.join(directory, 'package.json'); await fs.access(packageJsonPath); return true; } catch { return false; } } async function runMain() { const version = await getPackageVersion(); if (!version) { throw new Error('Could not determine package version'); } program .description('Create a new Baseplate project') .version(version) .argument('[directory]', 'The directory to initialize the project in', '.'); program.parse(process.argv); const directory = program.processedArgs[0]; const resolvedDirectory = path.resolve(directory); const packageName = path .basename(resolvedDirectory) .toLowerCase() .replaceAll(/[^a-z0-9]+/g, '-'); if (packageName === '-' || !packageName) { throw new Error('Directory must have at least one Latin alphanumeric character.'); } const relativeDirectory = path.relative(process.cwd(), resolvedDirectory); console.info(`Creating a new Baseplate project (${packageName})...`); console.info(`Directory: ${relativeDirectory || '.'}`); console.info(); const hasPackageJson = await checkForPackageJson(resolvedDirectory); if (hasPackageJson) { throw new Error(`The directory ${directory} already contains a package.json file.`); } const cliVersion = await getLatestCliVersion(); await generateBaseplateProject({ packageName, directory: resolvedDirectory, cliVersion, }); } await runMain().catch((err) => { if (err instanceof Error && err.name === 'ExitPromptError') { return; } console.error(chalk.red(`An error occurred while creating the project:\n\n${err instanceof Error ? err.message : String(err)}\n`)); process.exit(1); });