@ideascol/cli-maker
Version:
A simple library to help create CLIs
68 lines (67 loc) ⢠2.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addScriptsToPackageJson = addScriptsToPackageJson;
exports.validateProjectDirectory = validateProjectDirectory;
exports.installDependencies = installDependencies;
const node_child_process_1 = require("node:child_process");
const node_fs_1 = require("node:fs");
async function addScriptsToPackageJson(scripts, name, description, author, email) {
const packageJsonPath = './package.json';
try {
const data = await node_fs_1.promises.readFile(packageJsonPath, 'utf8');
const packageJson = JSON.parse(data);
packageJson.scripts = {
...packageJson.scripts,
...scripts
};
packageJson.name = name;
packageJson.description = description;
packageJson.version = "0.0.1";
packageJson.author = `${author} <${email}>`;
const binName = name.split('/').pop() || name;
packageJson.bin = {
[binName]: "dist/bin/cli.js"
};
packageJson.main = "dist/index.js";
packageJson.types = "dist/index.d.ts";
packageJson.license = "MIT";
packageJson.files = [
"dist/**/*",
"!src/tests/**/*"
];
packageJson.engines = {
node: ">=20.15.1"
};
packageJson.publishConfig = {
access: "public"
};
const updatedPackageJson = JSON.stringify(packageJson, null, 2);
await node_fs_1.promises.writeFile(packageJsonPath, updatedPackageJson, 'utf8');
console.log('package.json updated successfully.');
}
catch (err) {
console.error('Error updating package.json:', err);
}
}
async function validateProjectDirectory(name) {
try {
await node_fs_1.promises.access(name);
console.log(`\nā Error: The folder "${name}" already exists.`);
console.log('Please choose a different name or delete the existing folder.\n');
return false;
}
catch {
return true;
}
}
async function installDependencies(package_manager = 'npm', projectName) {
const installCmd = package_manager === 'bun' ? 'bun add' : 'npm install';
const devFlag = package_manager === 'bun' ? '--dev' : '--save-dev';
console.log('Installing TypeScript and @types/node...');
(0, node_child_process_1.execSync)(`${installCmd} ${devFlag} typescript @types/node`, { stdio: 'inherit' });
console.log('Installing @ideascol/cli-maker...');
(0, node_child_process_1.execSync)(`${installCmd} @ideascol/cli-maker`, { stdio: 'inherit' });
(0, node_child_process_1.execSync)(`${package_manager} run start`, { stdio: 'inherit' });
console.log('\nš Success! Your CLI project has been created.');
console.log(`\nNext steps:\n cd ${projectName.split('/')[1] || projectName}\n ${package_manager} start\n\nEnjoy building your CLI! š\n`);
}