strict-env-conf
v0.5.2
Published
NPM package for easy work with ENV-based configuration
Downloads
5
Maintainers
Readme
strict-env-conf
NPM package for easy work with ENV-based configuration
Usage
Just two examles...
The first idea: if something wrong with your environment variables - your application must crashes on startup, not in arbitrary time when running.
const sec = require('strict-env-conf');
const tpl = {
scopes: {
DB: [
{name: "PASSWORD"}
]
}
};
sec(tpl);
Output:
...
Error: Required env variable DB_PASSWORD is not set
...
The second idea - parsing string values from environment variables to convenient JS-object with several types of properties.
const sec = require('strict-env-conf');
const filters = require('strict-env-conf/src/filters');
const envVars = {
SEC_APP_HOST: 'example.com',
SEC_APP_PORT: '80',
SEC_DB_EXTERNAL_AUTH: 'true',
SEC_DB_PORT: '444',
SEC_LDAP_TEST_USER_EMAIL: 'null',
SEC_LDAP_TEST_USER_ID: '4321',
};
for (let varName in envVars) {
process.env[varName] = envVars[varName];
}
const template = {
prefix: 'SEC_', // env variables app-level prefix for safety
// filters: [str => String(str).trim()] <-- this is by default. Set "filters: []" to avoid this behavior.
scopes: {
APP: [
{name: "HOST", default: "localhost"},
{name: "PORT", default: 3000} // "filters: [Number]" is redundant here, Number is default filter if (typeof default === 'number')
],
DB: [
{name: "EXTERNAL_AUTH", default: false}, // default filter for boolean types works with "0", "1", "true", "false"
{name: "PORT", filters: [Number]}, // no default value here, just the Number filter - the variable is required
{name: "NAME", default: "my-app"}
],
LDAP: [
{name: "TEST_USER_LOGIN", default: undefined}, // if default === undefined - you must check in your application code what conf object have this property
{name: "TEST_USER_EMAIL", default: undefined, filters: [filters.maybeNull]},
{name: "TEST_USER_ID", default: undefined, filters: [Number]},
],
DATA: [
{name: "CATEGORIES", default: "2,1,E", filters: [filters.csv2array]}, // you also can use your own filters. Filter function example: stringValue => 'MY_' + stringValue
],
}
};
const testConf = sec(template);
console.log(JSON.stringify(testConf, null, ' '));
Output:
{
"app": {
"host": "example.com",
"port": 80
},
"db": {
"external_auth": true,
"port": 444,
"name": "my-app"
},
"ldap": {
"test_user_email": null,
"test_user_id": 4321
},
"data": {
"categories": [
"2",
"1",
"E"
]
}
}
Installation
npm i strict-env-conf
License
MIT