budibase/packages/cli/src/utils.js

91 lines
2.0 KiB
JavaScript
Raw Normal View History

const chalk = require("chalk")
2021-02-26 14:30:24 +01:00
const fs = require("fs")
const axios = require("axios")
2021-02-26 14:33:31 +01:00
const path = require("path")
const progress = require("cli-progress")
const { join } = require("path")
2021-02-26 14:30:24 +01:00
2021-02-26 14:33:31 +01:00
exports.downloadFile = async (url, filePath) => {
filePath = path.resolve(filePath)
const writer = fs.createWriteStream(filePath)
2021-02-26 14:30:24 +01:00
const response = await axios({
url,
method: "GET",
2021-02-26 18:09:20 +01:00
responseType: "stream",
2021-02-26 14:30:24 +01:00
})
response.data.pipe(writer)
return new Promise((resolve, reject) => {
writer.on("finish", resolve)
writer.on("error", reject)
})
}
2021-05-04 12:32:22 +02:00
exports.getHelpDescription = string => {
return chalk.cyan(string)
}
2021-05-04 12:32:22 +02:00
exports.getSubHelpDescription = string => {
return chalk.green(string)
}
2021-05-04 12:32:22 +02:00
exports.error = error => {
return chalk.red(`Error - ${error}`)
}
2021-05-04 12:32:22 +02:00
exports.success = success => {
return chalk.green(success)
}
2021-05-04 12:32:22 +02:00
exports.info = info => {
return chalk.cyan(info)
}
exports.logErrorToFile = (file, error) => {
2021-03-29 18:40:17 +02:00
fs.writeFileSync(path.resolve(`./${file}`), `Budibase Error\n${error}`)
}
2021-05-04 12:32:22 +02:00
exports.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.progressBar = total => {
const bar = new progress.SingleBar({}, progress.Presets.shades_classic)
bar.start(total, 0)
return bar
}
exports.checkSlashesInUrl = url => {
return url.replace(/(https?:\/\/)|(\/)+/g, "$1$2")
}
exports.moveDirectory = (oldPath, newPath) => {
const files = fs.readdirSync(oldPath)
// check any file exists already
for (let file of files) {
2022-09-14 11:58:01 +02:00
if (fs.existsSync(join(newPath, file))) {
throw new Error(
"Unable to remove top level directory - some skeleton files already exist."
)
}
}
for (let file of files) {
fs.renameSync(join(oldPath, file), join(newPath, file))
}
fs.rmdirSync(oldPath)
}
exports.capitaliseFirstLetter = str => {
return str.charAt(0).toUpperCase() + str.slice(1)
}