@sinotron/cli
Version:
Simple framework for Typescript Electron projects
52 lines (51 loc) • 2.09 kB
JavaScript
import { CliHelper } from '../cli.helper.js';
import { logError, logInfo, logNotice } from '../../utils/log.js';
import { FrameworkSetup } from '../setup-command/FrameworkSetup.js';
import { ProgramLaunchHelper } from '../../utils/program-launch-helper.js';
import { _proc } from '@utilis/proc';
import { _join } from '@utilis/fs';
import { ask } from '@utilis/cli';
export class ProjectCommand {
static init(app) {
app.command('project')
.description('Create electron-vite project in the current folder.')
.option('--vscode', 'Launch the project in VSCode')
.argument('[projectName]', 'The project name')
.action(async (...args) => {
const ctx = CliHelper.getContext(args);
let projectName = ctx.arg0?.trim() || '';
if (!projectName) {
const ans = await ask.input('Enter the project name:');
if (!ans?.trim()) {
logNotice('No project name provided. Aborting.');
process.exit(0);
}
projectName = ans?.trim();
}
const cmd = 'npm create electron-vite@latest';
const cmdArgs = ['create', 'electron-vite@latest'];
if (projectName) {
cmdArgs.push(projectName);
}
const originalCwd = process.cwd();
try {
logInfo(`--> Creating electron project using "${cmd}"...`);
await _proc.spawn('npm', cmdArgs, {
silent: false
});
const projectRoot = _join(originalCwd, projectName);
if (projectName) {
process.chdir(projectRoot);
await FrameworkSetup.run();
process.chdir(originalCwd);
}
if (ctx.options?.vscode === true) {
ProgramLaunchHelper.vscode(projectRoot);
}
}
catch (e) {
logError(e.message);
}
});
}
}