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
JavaScript
;
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