sinotron
Version:
Simple framework for Typescript Electron projects
50 lines (49 loc) • 2.06 kB
JavaScript
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);
}
});
}
}