@baseplate-dev/create-project
Version:
CLI starter kit for creating a new Baseplate project
61 lines (60 loc) • 2.25 kB
JavaScript
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);
});