@naturalcycles/nodejs-lib
Version:
Standard library for Node.js
112 lines (111 loc) • 2.97 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.objectToGithubActionsEnv = exports.objectToShellExport = exports.json2env = void 0;
const fs = require("fs-extra");
const colors_1 = require("../colors");
const JSON2ENV_OPT_DEF = {
saveEnvFile: true,
bashEnv: true,
githubEnv: true,
fail: true,
};
function json2env(opt) {
const { jsonPath, prefix, saveEnvFile, bashEnv, githubEnv, fail, debug, silent } = {
...JSON2ENV_OPT_DEF,
...opt,
};
if (!fs.pathExistsSync(jsonPath)) {
if (fail) {
throw new Error(`Path doesn't exist: ${jsonPath}`);
}
if (!silent) {
console.log(`json2env input file doesn't exist, skipping without error (${jsonPath})`);
}
if (bashEnv) {
appendBashEnv('');
}
return;
}
// read file
const json = fs.readJsonSync(jsonPath);
const exportStr = objectToShellExport(json, prefix);
const githubStr = objectToGithubActionsEnv(json, prefix);
if (debug) {
console.log(json, exportStr, githubStr);
}
if (saveEnvFile) {
const shPath = `${jsonPath}.sh`;
fs.writeFileSync(shPath, exportStr);
if (!silent) {
console.log(`json2env created ${(0, colors_1.dimGrey)(shPath)}:`);
console.log(exportStr);
}
}
if (bashEnv) {
appendBashEnv(exportStr);
}
if (githubEnv) {
appendGithubEnv(githubStr);
}
}
exports.json2env = json2env;
function appendBashEnv(exportStr) {
const { BASH_ENV } = process.env;
if (BASH_ENV) {
fs.appendFileSync(BASH_ENV, exportStr + '\n');
console.log(`BASH_ENV file appended (${(0, colors_1.dimGrey)(BASH_ENV)})`);
}
}
function appendGithubEnv(exportStr) {
const { GITHUB_ENV } = process.env;
if (GITHUB_ENV) {
fs.appendFileSync(GITHUB_ENV, exportStr + '\n');
console.log(`GITHUB_ENV file appended (${(0, colors_1.dimGrey)(GITHUB_ENV)})`);
}
}
/**
* Turns Object with keys/values into a *.sh script that exports all keys as values.
*
* @example
* { a: 'b', b: 'c'}
*
* will turn into:
*
* export a="b"
* export b="c"
*/
function objectToShellExport(o, prefix = '') {
return Object.keys(o)
.map(k => {
const v = o[k];
if (v) {
return `export ${prefix}${k}="${v}"`;
}
})
.filter(Boolean)
.join('\n');
}
exports.objectToShellExport = objectToShellExport;
/**
* Turns Object with keys/values into a file of key-value pairs
*
* @example
* { a: 'b', b: 'c'}
*
* will turn into:
*
* a=b
* b=c
*/
function objectToGithubActionsEnv(o, prefix = '') {
return Object.keys(o)
.map(k => {
const v = o[k];
if (v) {
return `${prefix}${k}=${v}`;
}
})
.filter(Boolean)
.join('\n');
}
exports.objectToGithubActionsEnv = objectToGithubActionsEnv;
;