UNPKG

@boostercloud/cli

Version:

CLI of the Booster Framework, the next level of abstraction for cloud-native applications

88 lines (87 loc) 3.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateConfigFiles = generateConfigFiles; exports.installDependencies = installDependencies; exports.generateRootDirectory = generateRootDirectory; exports.initializeGit = initializeGit; exports.projectDir = projectDir; const fs = require("fs-extra"); const execa_1 = require("execa"); const Mustache = require("mustache"); const path = require("path"); const tsConfig = require("../templates/project/tsconfig-json"); const tsConfigEsLint = require("../templates/project/tsconfig.eslint-json"); const esLintIgnore = require("../templates/project/eslintignore"); const esLintRc = require("../templates/project/eslintrc-js"); const gitIgnore = require("../templates/project/gitignore"); const packageJson = require("../templates/project/package-json"); const configTs = require("../templates/project/config-ts"); const indexTs = require("../templates/project/index-ts"); const prettierRc = require("../templates/project/prettierrc-yaml"); const mochaRc = require("../templates/project/mocharc-yml"); const errors_1 = require("../common/errors"); const package_manager_1 = require("./package-manager"); const effect_1 = require("@boostercloud/framework-types/dist/effect"); const live_impl_1 = require("./package-manager/live.impl"); async function generateConfigFiles(config) { await Promise.all(filesToGenerate.map(renderToFile(config))); } async function installDependencies(config) { const effect = installDependenciesEff(config); return (0, effect_1.unsafeRunEffect)((0, effect_1.pipe)(effect, (0, effect_1.mapError)((e) => e.error)), { layer: live_impl_1.LivePackageManager, onError: (0, errors_1.guardError)('Could not install dependencies'), }); } const installDependenciesEff = (config) => (0, effect_1.gen)(function* ($) { const { setProjectRoot, installAllDependencies } = yield* $(package_manager_1.PackageManagerService); yield* $(setProjectRoot(projectDir(config))); yield* $(installAllDependencies()); }); async function generateRootDirectory(config) { const srcDir = path.join(projectDir(config), 'src'); const dirs = [ [srcDir, 'commands'], [srcDir, 'common'], [srcDir, 'config'], [srcDir, 'entities'], [srcDir, 'events'], [srcDir, 'event-handlers'], [srcDir, 'read-models'], [srcDir, 'scheduled-commands'], ]; await Promise.all(dirs.map(createDirectory)); } async function initializeGit(config) { try { await (0, execa_1.command)('git init && git add -A && git commit -m "Initial commit"', { cwd: projectDir(config), shell: true }); } catch (e) { throw (0, errors_1.wrapExecError)(e, 'Could not initialize git repository'); } } function renderToFile(templateData) { return async ([filepath, template]) => { const rendered = Mustache.render(template, templateData); const renderPath = path.join(process.cwd(), templateData.projectName, ...filepath); return fs.outputFile(renderPath, rendered); }; } function projectDir(config) { return path.join(process.cwd(), config.projectName); } async function createDirectory(paths) { return fs.mkdirs(path.join(...paths)); } const filesToGenerate = [ [['.eslintignore'], esLintIgnore.template], [['.eslintrc.js'], esLintRc.template], [['.gitignore'], gitIgnore.template], [['package.json'], packageJson.template], [['tsconfig.json'], tsConfig.template], [['tsconfig.eslint.json'], tsConfigEsLint.template], [['.prettierrc.yaml'], prettierRc.template], [['src', 'config', 'config.ts'], configTs.template], [['src', 'index.ts'], indexTs.template], [['.mocharc.yml'], mochaRc.template], ];