@forestadmin/forest-cloud
Version:
Utility to bootstrap and publish forest admin cloud projects customization
92 lines • 7.82 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const adm_zip_1 = __importDefault(require("adm-zip"));
const fs = __importStar(require("fs"));
const fsP = __importStar(require("fs/promises"));
const environment_variables_1 = require("./environment-variables");
const generate_datasource_config_file_1 = __importDefault(require("./generate-datasource-config-file"));
const http_server_1 = __importDefault(require("./http-server"));
const update_typings_1 = require("./update-typings");
const errors_1 = require("../errors");
async function tryToClearBootstrap(paths) {
try {
await Promise.all([
fsP.rm(paths.zip, { force: true }),
fsP.rm(paths.extracted, { force: true, recursive: true }),
fsP.rm(paths.folder, { force: false, recursive: true }),
]);
}
catch (e) {
return `\nPlease remove "${paths.folderName}" folder and re-run bootstrap command.`;
}
}
async function generateDotEnv(vars, paths) {
const envTemplate = await fsP.readFile(paths.dotEnvTemplate, 'utf-8');
let replaced = envTemplate.replace('<FOREST_ENV_SECRET_TO_REPLACE>', vars.FOREST_ENV_SECRET);
replaced = replaced.replace('<TOKEN_PATH_TO_REPLACE>', paths.home);
// For forest developers. We store in the .env what is non default
Object.keys(environment_variables_1.defaultEnvs)
.filter(variableKey => vars[variableKey] && vars[variableKey] !== environment_variables_1.defaultEnvs[variableKey])
.forEach(variableKey => {
replaced += `\n${variableKey}=${vars[variableKey]}`;
});
await fsP.writeFile(paths.env, `${replaced}\n`);
}
async function bootstrap(vars, httpServer, paths) {
if (fs.existsSync(paths.folder)) {
throw new errors_1.BusinessError(`You have already a "${paths.folderName}" folder`);
}
try {
await http_server_1.default.downloadCloudCustomizerTemplate(paths.zip);
const zip = new adm_zip_1.default(paths.zip);
zip.extractAllTo(paths.tmp, false);
await Promise.all([
fsP.rename(paths.extracted, paths.folder),
fsP.rm(paths.zip, { force: true }),
]);
// create the .env file if it does not exist
// we do not overwrite it because it may contain sensitive data
if (!fs.existsSync(paths.env))
await generateDotEnv(vars, paths);
await fsP.writeFile(paths.index, await fsP.readFile(paths.indexTemplate));
// Check that the user has the datasource connection options file
if (!fs.existsSync(paths.localDatasourcesPath)) {
await (0, generate_datasource_config_file_1.default)(paths.localDatasourcesPath);
}
const datasources = await httpServer.getDatasources();
await (0, update_typings_1.updateTypings)(datasources, paths);
}
catch (e) {
const error = e;
const potentialErrorMessage = await tryToClearBootstrap(paths);
throw new errors_1.BusinessError(`Bootstrap failed: ${error.message}. ${potentialErrorMessage || ''}${error.stack}`);
}
}
exports.default = bootstrap;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0RBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixpREFBbUM7QUFHbkMsbUVBQXNEO0FBQ3RELHdHQUE2RTtBQUM3RSxnRUFBdUM7QUFDdkMscURBQWlEO0FBQ2pELHNDQUEwQztBQUcxQyxLQUFLLFVBQVUsbUJBQW1CLENBQUMsS0FBMkI7SUFDNUQsSUFBSTtRQUNGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDbEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDekQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDeEQsQ0FBQyxDQUFDO0tBQ0o7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sb0JBQW9CLEtBQUssQ0FBQyxVQUFVLHdDQUF3QyxDQUFDO0tBQ3JGO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxjQUFjLENBQUMsSUFBMEIsRUFBRSxLQUEyQjtJQUNuRixNQUFNLFdBQVcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RSxJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lB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