UNPKG

@naturalcycles/nodejs-lib

Version:
112 lines (111 loc) 2.97 kB
"use strict"; 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;