@forestadmin/forest-cloud
Version:
Utility to bootstrap and publish forest admin cloud projects customization
102 lines • 8.27 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 () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__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 });
exports.default = bootstrap;
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, 'utf-8'));
// 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}`);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVDQSw0QkF3Q0M7QUE1RUQsc0RBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixpREFBbUM7QUFFbkMsbUVBQXNEO0FBQ3RELHdHQUE2RTtBQUM3RSxnRUFBdUM7QUFDdkMscURBQWlEO0FBQ2pELHNDQUEwQztBQUUxQyxLQUFLLFVBQVUsbUJBQW1CLENBQUMsS0FBMkI7SUFDNUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNsQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN6RCxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN4RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sb0JBQW9CLEtBQUssQ0FBQyxVQUFVLHdDQUF3QyxDQUFDO0lBQ3RGLENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxJQUEwQixFQUFFLEtBQTJCO0lBQ25GLE1BQU0sV0FBVyxHQUFHLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENB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