UNPKG

@albinberisha/codex-cli

Version:

Codex cli to scaffold plugins with Node

83 lines (68 loc) 2.17 kB
import chalk from 'chalk' import fs from 'fs' import ncp from 'ncp' import path from 'path' import { promisify } from 'util' import execa from 'execa' import Listr from 'listr' import { createSpinner } from 'nanospinner'; const access = promisify(fs.access); const copy = promisify(ncp); async function copyTemplateFiles(options) { return copy(options.templateDirectory, options.targetDirectory, { clobber: false, }); } async function initGit(options) { const result = await execa('git', ['init'], { cwd: options.targetDirectory, }); if (result.failed) { return Promise.reject(new Error('Failed to initialize Git')); } return; } export async function createPlugin(options) { options = { ...options, targetDirectory: options.targetDirectory || process.cwd(), }; let currentFileUrl = import.meta.url; currentFileUrl = currentFileUrl.replace('file:///', ''); const templateDir = path.resolve( currentFileUrl, '../../templates', options.template ); options.templateDirectory = templateDir; try { await access(templateDir, fs.constants.R_OK); } catch (error) { console.log(error); process.exit(1); } const tasks = new Listr([ { title: `Creating ${options.name}`, task: () => copyTemplateFiles(options), }, { title: 'Copy project files', task: () => copyTemplateFiles(options), }, { title: 'Initialize Git', task: () => initGit(options), enabled: () => options.git } ]) await tasks.run(); const spinner = createSpinner('Creating plugin template... \n').start(); await new Promise(r => setTimeout(r, 2000)); spinner.success({ text: "Plugin was created successfully. \n" }) console.log('%s Project is ready. \n', chalk.bgGreen.bold(' DONE ')); console.log(chalk.bgGreen.bold(` Thank you for using codex-cli! \n`)); console.log(options.name); }