UNPKG

@boostercloud/cli

Version:

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

90 lines (89 loc) 4.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DEPLOYMENT_SANDBOX = void 0; exports.createDeploymentSandbox = createDeploymentSandbox; exports.cleanDeploymentSandbox = cleanDeploymentSandbox; exports.compileProjectAndLoadConfig = compileProjectAndLoadConfig; exports.compileProject = compileProject; exports.cleanProject = cleanProject; const path = require("path"); const errors_1 = require("../common/errors"); const project_checker_1 = require("./project-checker"); const environment_1 = require("./environment"); const sandbox_1 = require("../common/sandbox"); 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"); exports.DEPLOYMENT_SANDBOX = path.join(process.cwd(), '.deploy'); async function createDeploymentSandbox() { const config = await compileProjectAndLoadConfig(process.cwd()); const sandboxRelativePath = (0, sandbox_1.createSandboxProject)(exports.DEPLOYMENT_SANDBOX, config.assets); const effect = (0, effect_1.gen)(function* ($) { const { setProjectRoot, installProductionDependencies } = yield* $(package_manager_1.PackageManagerService); yield* $(setProjectRoot(sandboxRelativePath)); yield* $(installProductionDependencies()); }); await (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 production dependencies'), }); return sandboxRelativePath; } async function cleanDeploymentSandbox() { (0, sandbox_1.removeSandboxProject)(exports.DEPLOYMENT_SANDBOX); } async function compileProjectAndLoadConfig(userProjectPath) { await (0, project_checker_1.checkItIsABoosterProject)(userProjectPath); await compileProject(userProjectPath); return readProjectConfig(userProjectPath); } async function compileProject(projectPath) { const effect = compileProjectEff(projectPath); return await (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)('Project contains compilation errors'), }); } const compileProjectEff = (projectPath) => (0, effect_1.gen)(function* ($) { const { setProjectRoot, build } = yield* $(package_manager_1.PackageManagerService); yield* $(setProjectRoot(projectPath)); yield* $(cleanProjectEff(projectPath)); return yield* $(build([])); }); async function cleanProject(projectPath) { const effect = cleanProjectEff(projectPath); 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 clean project'), }); } const cleanProjectEff = (projectPath) => (0, effect_1.gen)(function* ($) { const { setProjectRoot, runScript } = yield* $(package_manager_1.PackageManagerService); yield* $(setProjectRoot(projectPath)); yield* $(runScript('clean', [])); }); function readProjectConfig(userProjectPath) { const userProject = loadUserProject(userProjectPath); return new Promise((resolve) => { userProject.Booster.configureCurrentEnv((config) => { checkEnvironmentWasConfigured(userProject); resolve(config); }); }); } function loadUserProject(userProjectPath) { const projectIndexJSPath = path.resolve(path.join(userProjectPath, 'dist', 'index.js')); return require(projectIndexJSPath); } function checkEnvironmentWasConfigured(userProject) { if (userProject.Booster.configuredEnvironments.size == 0) { throw new Error("You haven't configured any environment. Please make sure you have at least one environment configured by calling 'Booster.configure' method (normally done inside the folder 'src/config')"); } const currentEnv = (0, environment_1.currentEnvironment)(); if (!currentEnv) { throw new Error("You haven't provided any environment. Please make sure you are using option '-e' with a valid environment name"); } if (!userProject.Booster.configuredEnvironments.has(currentEnv)) { throw new Error(`The environment '${currentEnv}' does not match any of the environments you used to configure your Booster project, which are: '${Array.from(userProject.Booster.configuredEnvironments).join(', ')}'`); } }