UNPKG

@sharksv/hyper

Version:

A CLI to bootstrap new projects!

118 lines (117 loc) 4.86 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const Listr = require("listr"); const execa = require("execa"); const Args_1 = require("../Args"); const Print_1 = require("../Modules/Print"); const path_1 = require("path"); const fs_1 = require("fs"); const fs_extra_1 = require("fs-extra"); const LicenseList_json_1 = require("./Json/LicenseList.json"); function Init(options) { return __awaiter(this, void 0, void 0, function* () { const { install } = Args_1.default.flags; const currentDir = process.cwd(); // prettier-ignore const { aName, projTemplate, gitInit, fstCommit, pkgManager, confirm } = options; let overWriteFiles = false; const Tasks = new Listr([ { title: 'Copy project files', task: () => { const copyFiles = (template, overWrite) => { const templateDir = (0, path_1.join)(__dirname, '../../Templates', template); (0, fs_extra_1.copy)(templateDir, currentDir, { overwrite: overWrite || false, preserveTimestamps: false }); }; const Jumpstart = () => copyFiles('Jumpstart', overWriteFiles); switch (projTemplate) { case 'Node': case 'Rust': case 'Static': Jumpstart(); copyFiles(projTemplate, overWriteFiles); break; default: Jumpstart(); } } }, { title: 'Setting up License', task: () => { const targetPath = (0, path_1.join)(currentDir, 'LICENSE'); const licenseContent = LicenseList_json_1.MIT.licenseTxt .replace('<year>', `${new Date().getFullYear()}`) .replace('<copyright holders>', `${aName}`); (0, fs_1.writeFile)(targetPath, licenseContent, 'utf8', (err) => { if (err) { Promise.reject(new Error('Could not write a license file')); } }); } }, { title: 'Initialize git', task: () => execa.command('git init'), skip: () => !gitInit }, { title: 'Commit files', task: () => { execa.command('git add .'); execa.command('git commit -m "Initial-commit"'); }, skip: () => !fstCommit }, { title: 'Install dependencies', task: () => { switch (pkgManager) { case 'Npm': execa.command('npm install'); break; case 'Yarn': execa.command('yarn install'); break; case 'Cargo': execa.command('cargo build'); break; default: Promise.reject(); } }, skip: () => !install } ], { exitOnError: false }); switch (confirm) { case 'yes': Tasks.run(); break; case 'overwrite': overWriteFiles = true; Tasks.run(); break; case 'change': (0, Print_1.default)('Error', "Couldn't change project dir (Coming soon!)"); break; case 'abort': (0, Print_1.default)('Warning', 'Aborting project initialization...'); process.exit(0); } }); } exports.default = Init;