jetup
Version:
Jetup: JavaScript Project Setup! Jetting-up your next JS project in seconds with one command, using fully modular, customizable presets, instantly ready to code!.
116 lines • 4.98 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.JetupApp = void 0;
const figlet = require("figlet");
const fs_1 = require("fs");
const commander_1 = require("commander");
const framework_1 = require("./framework");
const presets_1 = require("./presets");
const packageJson = require("../package.json");
const utils_1 = require("./utils");
const cwd_1 = require("./utils/cwd");
class JetupApp {
constructor() {
this._moduleRegistry = new framework_1.ModuleRegistry();
this._configModule = new framework_1.ConfigModule();
this._logger = new framework_1.LoggerModule();
this._program = new commander_1.Command();
this._footer = `\nPlease give Jetup a star, and visit our website!:\n ${packageJson.repository.url.replace('.git', '').replace('git+', '')}\n ${packageJson.homepage}`;
this._presets = [new presets_1.TsPresets()];
}
async init() {
this._program
.name(packageJson.name.charAt(0).toUpperCase() + packageJson.name.substring(1))
.description(packageJson.description)
.version(packageJson.version);
this._program
.addArgument(new commander_1.Argument('[location]', 'Project location (default: current directory)').default('.'))
.addArgument(new commander_1.Argument('[preset]', 'Jetup preset to use (default: "ts")').default('ts'))
.addOption(new commander_1.Option('--preset <presetName>', 'Override preset to use'))
.addOption(new commander_1.Option('-c, --config <path>', 'Path to config file').env('JETUP_CONFIG'))
.action(this._parseArgument.bind(this));
this._program.addHelpText('after', `
Example call:
$ npx jetup`);
this._program.addHelpText('afterAll', this._footer);
try {
this._program.parse(process.argv);
this._options = this._program.opts();
}
catch (err) {
this._logger.start('');
this._logger.error(`Failed to parse CLI input: ${err.message}`);
process.exitCode = 1;
process.exit();
}
this._configModule.setRegistry(this._moduleRegistry);
this._logger.setRegistry(this._moduleRegistry);
}
async run() {
console.log(figlet.textSync('jetup'));
console.log();
try {
await this._runHandler();
}
catch (err) {
this._logger.error(`An error occurred: ${err.message}`);
process.exitCode = 1;
process.exit();
}
finally {
this._printFooter();
}
}
_parseArgument(location, selectedPresetName, options) {
if (options.config)
this._configModule.setConfigFile(options.config);
this._parsePreset(selectedPresetName, options);
this._parseLocation(location);
}
_parsePreset(selectedPresetName, options) {
if (selectedPresetName && options.preset && selectedPresetName !== options.preset) {
this._logger.warn(`Both positional preset "${selectedPresetName}" and --preset "${options.preset}" provided. Using --preset.`);
}
const presetName = options.preset || selectedPresetName || 'ts';
const preset = this._presets.find(p => p.name === presetName);
if (!preset)
throw new Error(`Preset "${presetName}" not found`);
this._selectedPreset = preset;
}
_parseLocation(location) {
const projectLocation = location || '.';
if (projectLocation === '.')
return;
const cwdValue = (0, utils_1.cwd)(projectLocation);
if (!(0, utils_1.isFolderExists)(cwdValue))
(0, fs_1.mkdirSync)(cwdValue);
cwd_1.CWD.setValue(projectLocation);
for (const module of this._selectedPreset.modules) {
module.setCWD(projectLocation);
}
}
async _runHandler() {
this._logger.start(`starting ${packageJson.name}`);
this._logger.end(`Jetting-Up "${this._selectedPreset.name}" preset with following modules: [${this._selectedPreset.modules.map(t => t.name).join(',')}]`);
for (const module of this._selectedPreset.modules) {
this._logger.start(`setting up "${module.name}" module...`);
module.setRegistry(this._moduleRegistry);
if (!(await module.isInstalled())) {
await module.installDeps();
await module.setup();
this._logger.end(`setup "${module.name}" module completed!`);
}
else {
this._logger.end(`module "${module.name}" already installed...`);
}
}
this._logger.start(``);
this._logger.end(`Jetting-Up "${this._selectedPreset.name}" preset completed!`);
}
_printFooter() {
console.log(this._footer);
console.log('');
}
}
exports.JetupApp = JetupApp;
//# sourceMappingURL=app.js.map