budibase/packages/cli/dist/utils.js

127 lines
4.7 KiB
JavaScript

"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());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.stringifyToDotEnv = exports.capitaliseFirstLetter = exports.moveDirectory = exports.checkSlashesInUrl = exports.progressBar = exports.parseEnv = exports.logErrorToFile = exports.info = exports.success = exports.error = exports.getSubHelpDescription = exports.getHelpDescription = exports.httpCall = exports.downloadFile = void 0;
const chalk_1 = __importDefault(require("chalk"));
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const path_2 = require("path");
const node_fetch_1 = __importDefault(require("node-fetch"));
const progress = require("cli-progress");
function downloadFile(url, filePath) {
return new Promise((resolve, reject) => {
filePath = path_1.default.resolve(filePath);
(0, node_fetch_1.default)(url, {
method: "GET",
})
.then(response => {
const writer = fs_1.default.createWriteStream(filePath);
if (response.body) {
response.body.pipe(writer);
response.body.on("end", resolve);
response.body.on("error", reject);
}
else {
throw new Error(`Unable to retrieve docker-compose file - ${response.status}`);
}
})
.catch(err => {
throw err;
});
});
}
exports.downloadFile = downloadFile;
function httpCall(url, method) {
return __awaiter(this, void 0, void 0, function* () {
const response = yield (0, node_fetch_1.default)(url, {
method,
});
return response.body;
});
}
exports.httpCall = httpCall;
function getHelpDescription(str) {
return chalk_1.default.cyan(str);
}
exports.getHelpDescription = getHelpDescription;
function getSubHelpDescription(str) {
return chalk_1.default.green(str);
}
exports.getSubHelpDescription = getSubHelpDescription;
function error(err) {
process.exitCode = -1;
return chalk_1.default.red(`Error - ${err}`);
}
exports.error = error;
function success(str) {
return chalk_1.default.green(str);
}
exports.success = success;
function info(str) {
return chalk_1.default.cyan(str);
}
exports.info = info;
function logErrorToFile(file, error) {
fs_1.default.writeFileSync(path_1.default.resolve(`./${file}`), `Budibase Error\n${error}`);
}
exports.logErrorToFile = logErrorToFile;
function parseEnv(env) {
const lines = env.toString().split("\n");
let result = {};
for (const line of lines) {
const match = line.match(/^([^=:#]+?)[=:](.*)/);
if (match) {
result[match[1].trim()] = match[2].trim();
}
}
return result;
}
exports.parseEnv = parseEnv;
function progressBar(total) {
const bar = new progress.SingleBar({}, progress.Presets.shades_classic);
bar.start(total, 0);
return bar;
}
exports.progressBar = progressBar;
function checkSlashesInUrl(url) {
return url.replace(/(https?:\/\/)|(\/)+/g, "$1$2");
}
exports.checkSlashesInUrl = checkSlashesInUrl;
function moveDirectory(oldPath, newPath) {
const files = fs_1.default.readdirSync(oldPath);
// check any file exists already
for (let file of files) {
if (fs_1.default.existsSync((0, path_2.join)(newPath, file))) {
throw new Error("Unable to remove top level directory - some skeleton files already exist.");
}
}
for (let file of files) {
fs_1.default.renameSync((0, path_2.join)(oldPath, file), (0, path_2.join)(newPath, file));
}
fs_1.default.rmdirSync(oldPath);
}
exports.moveDirectory = moveDirectory;
function capitaliseFirstLetter(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
exports.capitaliseFirstLetter = capitaliseFirstLetter;
function stringifyToDotEnv(json) {
let str = "";
for (let [key, value] of Object.entries(json)) {
str += `${key}=${value}\n`;
}
return str;
}
exports.stringifyToDotEnv = stringifyToDotEnv;