@digipolis/start-ui
Version:
87 lines (75 loc) • 2.5 kB
JavaScript
import './globals.js';
import fs from 'fs';
import chalk from 'chalk';
import inquirer from 'inquirer';
import program from 'commander';
import generators from './generators/index.js';
import options from './config/options.js';
import { questions } from './config/questions.js';
import { mapBranding } from './utils/branding.js';
import { errorLog, fancyLog } from './utils/log.js';
import debug from './utils/debug.js';
const rawdata = fs.readFileSync(`${__basedir}/package.json`);
const { version } = JSON.parse(rawdata);
const { log } = console;
const pjson = { version };
// Run commander with generator options
options();
function finishInstallation(config) {
if (config.backend) {
log(chalk.white.bold(`
✅ ${chalk.green.bold('Done!')} Now run ${chalk.cyan.bold('npm start')} in both your backend and frontend directory.
`));
} else {
log(chalk.white.bold(`
✅ ${chalk.green.bold('Done!')} Now run ${chalk.cyan.bold('npm start')} in your frontend directory.
`));
}
}
async function askQuestions() {
let config = await inquirer.prompt(questions);
const { frontend, backend } = config;
if (config.backend && generators[backend].getQuestions) {
const backendConfig = await inquirer.prompt(generators[backend].getQuestions());
config = { ...config, ...backendConfig };
}
if (config.frontend && generators[frontend].getQuestions) {
const frontendConfig = await inquirer.prompt(generators[frontend].getQuestions());
config = { ...config, ...frontendConfig };
}
return config;
}
/**
* Go!
* First check if the starter app was intended to run on its own.
*/
async function run() {
fancyLog('cyan.bold', `Welcome to the Digipolis starter kit! (v${pjson.version})`, '=');
if (program.setup) {
const config = await askQuestions();
config.name = program.name;
if (program.debug) {
debug.enable();
}
const { frontend, backend } = config;
if (frontend) await generators[frontend].start(config);
if (backend) await generators[backend].start(config);
finishInstallation(config);
} else {
program.branding = await mapBranding(program.branding);
const config = program;
if (program.debug) {
debug.enable();
}
const { frontend, backend } = config;
if (frontend) await generators[frontend].start(config);
if (backend) await generators[backend].start(config);
finishInstallation(config);
}
}
try {
run();
} catch (error) {
errorLog(error);
}