Repository URL to install this package:
|
Version:
7.0.7 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @private
* @fileoverview loads .env files for the env
* @borrows https://github.com/motdotla/dotenv
*/
const fs_1 = require("fs");
const path_1 = require("path");
const di_1 = require("@skava/di");
/**
* @private
* @description parses a string or buffer into an object
* @param src - source to be parsed
* @returns keys and values from src
*/
function parse(src) {
const obj = {};
// convert Buffers before splitting into lines and processing
src
.toString()
.split('\n')
.forEach(line => {
// matching "KEY' and 'VAL' in 'KEY=VAL'
const keyValueArr = line.match(/^\s*([\w\.\-]+)\s*=\s*(.*)?\s*$/);
// matched?
if (keyValueArr !== null) {
const key = keyValueArr[1];
// default undefined or missing values to empty string
let value = keyValueArr[2] || '';
// expand newlines in quoted values
const len = value ? value.length : 0;
if (len > 0 &&
value.charAt(0) === '"' &&
value.charAt(len - 1) === '"') {
value = value.replace(/\\n/gm, '\n');
}
// remove any surrounding quotes and extra spaces
value = value.replace(/(^['"]|['"]$)/g, '').trim();
obj[key] = value;
}
});
return obj;
}
exports.parse = parse;
/**
* @private
* @param [options=undefined]
* @return path to .env file
*/
function getOptions(options) {
let path = '.env';
let encoding = 'utf8';
if (options !== undefined) {
if (options.path) {
path = options.path;
}
if (options.encoding) {
encoding = options.encoding;
}
}
return { path, encoding };
}
process.env.DOT_ENV = process.env.DOT_ENV || '\n';
/**
* @private
* @description main entry point into dotenv. Allows configuration before loading .env
*
* @return {Object} parsed object or error
*/
function config(options) {
const { path, encoding } = getOptions(options);
try {
// specifying an encoding returns a string instead of a buffer
const content = fs_1.readFileSync(path, { encoding });
const parsedObj = parse(content);
Object.keys(parsedObj).forEach(key => {
const value = parsedObj[key];
// if (hasOwnProp(process.env, key)) {
process.env[key] = value;
process.env.DOT_ENV += `${key}=${value}\n`;
// process.env.DOT_ENV[key] = value
// process.env.DOT_ENV.push([key, value])
});
return { parsed: parsedObj };
}
catch (parseError) {
return { error: parseError };
}
}
/**
* @private
* @param envFileResolutionOrder
*/
function loadEnv(envFileResolutionOrder) {
// Find the first env file path match.
const envFilePath = envFileResolutionOrder.find(fs_1.existsSync);
// console.log({ envFilePath })
// If we found an env file match the register it.
if (envFilePath) {
const message = `==> Registering environment variables from: ${envFilePath}`;
// const colored = colors.bgBlue.white(message)
// console.log(colored)
console.log(message);
config({ path: envFilePath });
}
}
exports.loadEnv = loadEnv;
/**
* @private
* @see loadEnv
*
* @example @name env.data/LiquidAss
*/
function registerEnvFile(envFile = '.env', DEPLOYMENT = process.env.DEPLOYMENT) {
// This is the order in which we will try to resolve an environment configuration
// file.
const envFileResolutionOrder = [
// Is there an environment config file at the app root?
// This always takes preference.
// e.g. /projects/react-universally/.env
// resolve(appRootDir, envFile),
// Is there an environment config file at the app root for our target
// environment name?
// e.g. /projects/react-universally/.env.staging
];
// const APP_ROOT_PATH = process.env.APP_ROOT_PATH
const APP_ROOT_PATH = di_1.config.get('appRootDir');
if (DEPLOYMENT) {
const DEPLOYMENT_DOT_ENV = path_1.resolve(APP_ROOT_PATH, `${envFile}.${DEPLOYMENT}`);
// console.log(DEPLOYMENT_DOT_ENV)
// envFileResolutionOrder.push(DEPLOYMENT_DOT_ENV)
envFileResolutionOrder.unshift(DEPLOYMENT_DOT_ENV);
envFileResolutionOrder.unshift(`${DEPLOYMENT_DOT_ENV}/.env`);
}
// console.log({ envFileResolutionOrder })
loadEnv(envFileResolutionOrder);
}
exports.registerEnvFile = registerEnvFile;
/**
* @todo autofix here?
* @alias fromQueryStringToObj
*/
function loadFromDotEnvString(DOT_ENV = process.env.DOT_ENV) {
const obj = {};
// could .reduce
DOT_ENV.split('\n')
.filter(String)
.map(string => string.split('='))
.forEach(([key, value]) => (obj[key] = value));
return obj;
}
exports.loadFromDotEnvString = loadFromDotEnvString;
//# sourceMappingURL=registerDotEnv.js.map