Skip to content

Commit 3311be7

Browse files
Merge pull request #48 from recursivefunk/jra/merge-secrets
feat: merge secrets
2 parents 3d7ad54 + 8178c89 commit 3311be7

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "good-env",
3-
"version": "7.3.0",
3+
"version": "7.4.0",
44
"description": "Better environment variable handling for Twelve-Factor node apps",
55
"main": "src/index.js",
66
"scripts": {

src/index.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@ const isFunction = x => is(x) === '[object Function]';
1313
const parse = (items, converter) => items.map(t => converter(t, 10));
1414
const mapNums = items => parse(items, parseInt);
1515
const validType = item => ['number', 'boolean', 'string'].includes(item);
16+
let store = { ...process.env };
1617

1718
module.exports = Object
1819
.create({
20+
async _mergeSecrets_ ({ fetcherFunc }) {
21+
const secret = await fetcherFunc();
22+
store = { ...store, ...secret };
23+
return this;
24+
},
1925
/**
2026
* @description Fetches an IP address from the environment. If the value found under the specified key is not a valid IPv4
2127
* or IPv6 IP and there's no default value, null is returned. If a default value is provided and it is a valid IPv4 or IPv6
@@ -123,8 +129,8 @@ module.exports = Object
123129
}
124130

125131
keys.some(key => {
126-
if (ok(process.env[key])) {
127-
value = process.env[key];
132+
if (ok(store[key])) {
133+
value = store[key];
128134
return true;
129135
}
130136
return false;
@@ -172,7 +178,7 @@ module.exports = Object
172178
* @param {(string|string[])} keys - A unique key or array of keys
173179
*
174180
*/
175-
ok: (...keys) => keys.every(key => ok(process.env[key])),
181+
ok: (...keys) => keys.every(key => ok(store[key])),
176182

177183
/**
178184
* @description This method ensures 1 to many environment variables either
@@ -262,7 +268,7 @@ module.exports = Object
262268
getBool (key, defaultVal) {
263269
let value;
264270

265-
value = process.env[key];
271+
value = store[key];
266272

267273
if (ok(value)) {
268274
value = value.toLowerCase().trim();

test/test.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,23 @@ require('dotenv').config({ path: 'test/test.env' });
55
const test = require('tape');
66
const env = require('../src/index');
77

8+
test('it merges secrets', async (t) => {
9+
const fetcherFunc = () => {
10+
return new Promise((resolve) => {
11+
setTimeout(() => {
12+
resolve({
13+
FOOB: 'bar',
14+
BARZ: 'baz'
15+
});
16+
}, 10);
17+
});
18+
};
19+
const env2 = await env._mergeSecrets_({ fetcherFunc });
20+
t.equals(env2.get('FOOB'), 'bar');
21+
t.equals(env2.get('BARZ'), 'baz');
22+
t.end();
23+
});
24+
825
test('it gets an IP address', (t) => {
926
const ip = env.getIP('VALID_IP');
1027
t.equals(ip, '192.168.1.60');

0 commit comments

Comments
 (0)