UNPKG

@ideascol/cli-maker

Version:
223 lines (222 loc) 9.14 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.initializeProject = initializeProject; exports.createProjectStructure = createProjectStructure; exports.createGitIgnore = createGitIgnore; exports.generateIndexTs = generateIndexTs; exports.generateGreetExample = generateGreetExample; exports.generateLibIndex = generateLibIndex; exports.generateBinTs = generateBinTs; exports.generateCommandExample = generateCommandExample; exports.createFileWithDirectories = createFileWithDirectories; exports.generateGithubAction = generateGithubAction; exports.createTsConfigFiles = createTsConfigFiles; exports.createBinFile = createBinFile; exports.createReadmeFile = createReadmeFile; exports.createCliTestFile = createCliTestFile; exports.createTestLibFile = createTestLibFile; exports.initializeGit = initializeGit; exports.isFolderEmpty = isFolderEmpty; exports.createNewFolder = createNewFolder; exports.moveToFolder = moveToFolder; const node_child_process_1 = require("node:child_process"); const node_fs_1 = require("node:fs"); const templates = __importStar(require("../templates")); const test_templates = __importStar(require("../test_templates")); async function initializeProject(packageManager = 'npm') { console.log('Generating base project...'); const initCommand = packageManager === 'bun' ? 'bun init' : 'npm init -y'; (0, node_child_process_1.execSync)(initCommand, { stdio: 'inherit' }); } async function createProjectStructure() { console.log('Creating project structure...'); try { (0, node_child_process_1.execSync)('mkdir -p src/commands src/utils src/tests', { stdio: 'inherit' }); (0, node_child_process_1.execSync)('touch src/index.ts', { stdio: 'inherit' }); (0, node_child_process_1.execSync)('mkdir -p dist', { stdio: 'inherit' }); console.log('✅ Project structure created successfully!'); } catch (error) { if (error instanceof Error) { console.error('❌ Error creating project structure:', error.message); } } } async function createGitIgnore() { console.log('Creating .gitignore...'); (0, node_child_process_1.execSync)('echo "node_modules/\ndist/\n*.log" > .gitignore', { stdio: 'inherit' }); } async function generateIndexTs(cliName, cliDescription) { let result = templates.templateIndex; try { await node_fs_1.promises.writeFile('src/index.ts', result); console.log('index.ts has been generated!'); } catch (err) { console.error('Failed to generate index.ts:', err); } } async function generateGreetExample() { try { await createFileWithDirectories('src/lib/greet.ts', templates.templateGreet); console.log('greet.ts has been generated!'); } catch (err) { console.error('Failed to generate greet.ts:', err); } } async function generateLibIndex() { const result = `export { Greet } from './greet';`; try { await createFileWithDirectories('src/lib/index.ts', result); console.log('index.ts has been generated!'); } catch (err) { console.error('Failed to generate index.ts:', err); } } async function generateBinTs(cliName, cliDescription) { let result = templates.template.replace('{{cliName}}', cliName).replace('{{cliDescription}}', cliDescription); try { await node_fs_1.promises.writeFile('src/cli.ts', result); console.log('index.ts has been generated!'); } catch (err) { console.error('Failed to generate index.ts:', err); } } async function generateCommandExample() { try { await node_fs_1.promises.writeFile('src/commands/greetCommand.ts', templates.templateCommand); console.log('greetCommand.ts has been generated!'); } catch (err) { console.error('Failed to generate greetCommand.ts:', err); } } async function createFileWithDirectories(path, data) { const directories = path.substring(0, path.lastIndexOf('/')); await node_fs_1.promises.mkdir(directories, { recursive: true }); await node_fs_1.promises.writeFile(path, data); } async function generateGithubAction(package_manager = 'npm') { try { const template = package_manager === 'bun' ? templates.githubactionBunTemplate : templates.githubactionNpmTemplate; await createFileWithDirectories('.github/workflows/publish.yml', template); console.log('github action has been generated!'); } catch (err) { console.error('Failed to generate github action:', err); } } async function createTsConfigFiles() { try { await node_fs_1.promises.writeFile('tsconfig.base.json', templates.tsconfigBaseTemplate); await node_fs_1.promises.writeFile('tsconfig.json', templates.tsconfigTemplate); await node_fs_1.promises.writeFile('tsconfig.test.json', templates.tsconfigTestTemplate); console.log('tsconfig.base.json, tsconfig.json and tsconfig.test.json have been generated!'); } catch (err) { console.error('Failed to generate tsconfig files:', err); } } async function createBinFile() { try { await createFileWithDirectories('src/bin/cli.ts', templates.templateBin); console.log('bin/cli.ts has been generated!'); } catch (err) { console.error('Failed to generate bin/cli.ts:', err); } } async function createReadmeFile(cliName, cliDescription) { const binName = cliName.split('/').pop() || cliName; const result = templates.templateReadme.replace(/{{cliName}}/g, cliName).replace(/{{cliDescription}}/g, cliDescription).replace(/{{binName}}/g, binName); try { await node_fs_1.promises.writeFile('README.md', result); console.log('README.md has been generated!'); } catch (err) { console.error('Failed to generate README.md:', err); } } async function createCliTestFile(cliName, cliDescription, packageManager = 'npm') { const template = packageManager === 'bun' ? test_templates.testCliBun : test_templates.testCliNpm; const result = template.replace(/{{cliName}}/g, cliName).replace(/{{cliDescription}}/g, cliDescription); try { await createFileWithDirectories('src/tests/cli/cli.test.ts', result); console.log('cli.test.ts has been generated!'); } catch (err) { console.error('Failed to generate cli.test.ts:', err); } } async function createTestLibFile(packageManager = 'npm') { try { const template = packageManager === 'bun' ? test_templates.testLibBun : test_templates.testLibNpm; await createFileWithDirectories('src/tests/lib/lib.test.ts', template); console.log('lib.test.ts has been generated!'); } catch (err) { console.error('Failed to generate lib.test.ts:', err); } } async function initializeGit() { try { console.log('Initializing git repository...'); (0, node_child_process_1.execSync)('git init', { stdio: 'inherit' }); (0, node_child_process_1.execSync)('git add .', { stdio: 'inherit' }); (0, node_child_process_1.execSync)('git commit -m "Initial commit"', { stdio: 'inherit' }); console.log('Git repository initialized and first commit made.'); } catch (err) { console.error('Failed to initialize git:', err); } } function isFolderEmpty() { const files = (0, node_fs_1.readdirSync)('.'); return files.length === 0; } function createNewFolder(name) { const currentDir = process.cwd(); const newFolderPath = `${currentDir}/${name}`; (0, node_fs_1.mkdirSync)(newFolderPath, { recursive: true }); } function moveToFolder(name) { const currentDir = process.cwd(); const newFolderPath = `${currentDir}/${name}`; process.chdir(newFolderPath); }