UNPKG

dotencr

Version:

Encrypt and decrypt individual lines inside a .env file. Supports multiple encryption keys. Keys and dotenv files can be read text file or read from the environment.

167 lines 5.62 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const path_1 = __importDefault(require("path")); const glob_1 = __importDefault(require("glob")); const lodash_1 = __importDefault(require("lodash")); const fs_1 = __importDefault(require("fs")); const fixParsedPath = (parsedPath) => { if (parsedPath.base === ".") { parsedPath.base = ""; parsedPath.name = ""; parsedPath.ext = ""; } else if (parsedPath.base === "..") { parsedPath.base = ""; parsedPath.name = ""; parsedPath.ext = ""; parsedPath.dir = ".."; parsedPath.root = ""; } if (parsedPath.dir === ".") { parsedPath.dir = ""; parsedPath.root = ""; } return parsedPath; }; const handleDestPathSpecifiedAsFolder = (src, _dest, defaultFileName, ext) => { const res = {}; if (lodash_1.default.isEmpty(src.base)) { res.name = defaultFileName; } else { res.name = src.base; } if (!lodash_1.default.isEmpty(ext)) { res.ext = ext; } return res; }; const handleDestPathSpecifiedAsFile = (src, dest, defaultFileName, ext) => { const res = {}; res.dir = dest.dir; if (lodash_1.default.isEmpty(dest.base)) { res.name = lodash_1.default.isEmpty(src.base) ? defaultFileName : src.base; res.ext = ext; return res; } if (lodash_1.default.isEmpty(ext)) { res.base = dest.base; return res; } if (lodash_1.default.isEmpty(dest.ext)) { res.name = dest.name; res.ext = ext; return res; } res.name = dest.base; if (dest.ext !== ext) { res.ext = ext; } return res; }; /** * Create a new path using the destination folder and original file name. * * @param filePath - original file path * @param destinationPath - destination folder * @returns path using the destination folder and original file name */ exports.replaceFilePath = (filePath, destinationPath, ext) => { let src = path_1.default.parse(filePath); let dest = path_1.default.parse(destinationPath); const DEFAULT_FILE_NAME = "defaultFileName"; let res = {}; src = fixParsedPath(src); dest = fixParsedPath(dest); if (destinationPath.endsWith("/")) { res.dir = dest.dir === dest.root ? `${dest.dir}${dest.base}` : `${dest.dir}${path_1.default.sep}${dest.base}`; // res = { ...res, handleDestPathSpecifiedAsFolder(src, dest, DEFAULT_FILE_NAME, ext) }; res = Object.assign(Object.assign({}, res), handleDestPathSpecifiedAsFolder(src, dest, DEFAULT_FILE_NAME, ext)); } else { res = handleDestPathSpecifiedAsFile(src, dest, DEFAULT_FILE_NAME, ext); } // pathObject.root is ignored if pathObject.dir is provided // pathObject.ext and pathObject.name are ignored if pathObject.base exists const pathResult = path_1.default.format(res); const pathResolved = path_1.default.normalize(pathResult); return pathResolved; }; // replaceFilePath("/foo", "/"); /** * Create the backup file path. The new file name includes the extension of ".bak" * * @param filePath - original file path * @param destinationPath - destination folder * @returns path using the destination folder and original file name plus ".bak" */ exports.createBackupFilePath = (filePath, destinationPath) => { return exports.replaceFilePath(filePath, destinationPath, ".bak"); }; // createBackupFilePath("/sub1/sub2/foo.foo.foo", "/bart/simpson/foo.foo.foo"); // createBackupFilePath("/", "/"); /** * Search for files using the specified pattern * * @param filePatterns The double-star character ** is supported by default * @returns array of files found including paths * @see https://www.npmjs.com/package/glob */ exports.fileGlob = (filePatterns) => { let files = []; filePatterns.forEach((f) => { const g = glob_1.default.sync(f, { absolute: true, dot: true, nodir: true, ignore: ["**/.DS_Store"], }); files = lodash_1.default.union(files, g).sort(); }); return files; }; /** * Recursively sort an object by the property keys names. * * @param obj * @returns sorted object */ exports.sortObjectByKeys = (obj) => { let pairs = lodash_1.default.toPairsIn(obj).sort((a, b) => a[0].localeCompare(b[0])); // Recursively sort objects. Ignore arrays for (let i = 0; i < pairs.length; i++) { if (lodash_1.default.isObject(pairs[i][1]) && !lodash_1.default.isArray(pairs[i][1])) { pairs[i][1] = exports.sortObjectByKeys(pairs[i][1]); } } const sortedObject = lodash_1.default.fromPairs(pairs); return sortedObject; }; exports.loadBufferFromFile = (bufferOrFilePath) => { // Expand if statement to make it easier to read code coverage let text; if (bufferOrFilePath instanceof Buffer) { text = bufferOrFilePath.toString(); } else { text = fs_1.default.readFileSync(bufferOrFilePath, "utf8"); } return text; }; exports.loadObjectFromFile = (objectOrFilePath) => { // Expand if statement to make it easier to read code coverage let obj; if (typeof objectOrFilePath === "string") { obj = JSON.parse(fs_1.default.readFileSync(objectOrFilePath, "utf8")); } else { obj = objectOrFilePath; } return obj; }; //# sourceMappingURL=util.js.map