UNPKG

sinotron

Version:

Simple framework for Typescript Electron projects

50 lines (49 loc) 2.06 kB
import { CliHelper } from '../cli.helper.js'; import { logError, logInfo, logNotice } from '../../utils/log.js'; import { ProcessUtil } from '../../utils/process-util.js'; import Path from 'node:path'; import { FrameworkFactory } from '../setup-command/FrameworkFactory.js'; import { LaunchUtil } from '../../utils/launch-util.js'; import { ask } from '../../utils/ask.js'; 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('ans', '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 ProcessUtil.spawn('npm', cmdArgs); const projectRoot = Path.join(originalCwd, projectName); if (projectName) { process.chdir(projectRoot); await FrameworkFactory.setup(); process.chdir(originalCwd); } if (ctx.options?.vscode === true) { LaunchUtil.vscode(projectRoot); } } catch (e) { logError(e.message); } }); } }