UNPKG

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
"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