env-to-object
v1.1.0
Published
Maps environment variables to a configuration object.
Downloads
33
Maintainers
Readme
Environment Variables
Maps environment variables to a configuration object.
Installation
$ npm install env-to-object
Usage
var env = require( 'env-to-object' );
env( map[, options] )
Maps environment variables to a configuration object
.
var map = {
'NODE_ENV': {
'keypath': 'env',
'type': 'string'
},
'PORT': {
'keypath': 'server.port',
'type': 'number'
},
'SSL': {
'keypath': 'server.ssl',
'type': 'boolean'
},
'LOGLEVEL': {
'keypath': 'logger.level',
'type': 'string'
}
};
var out = env( map );
/*
{
'env': <string>,
'server': {
'port': <number>,
'ssl': <boolean>
},
'logger': {
'level': <string>
}
}
*/
An environment variable mapping must include a keypath
, which is a dot-delimited object
path. By default, this module parses an environment variable value as a string
. The following types are supported:
The function
accepts the following options
:
parsers: an
object
containing environment variable parsers. Eachkey
should correspond to a definedtype
, and eachvalue
should be afunction
which accepts an environment variable value and any associatedoptions
.var map = { 'CUSTOM_TYPE': { 'keypath': 'custom', 'type': 'custom', ... // => options } }; var parsers = { 'custom': custom }; function custom( str, opts ) { var v = parseInt( str, 10 ); if ( v !== v ) { return new TypeError( 'invalid value. Value must be an integer. Value: `' + str + '`.' ); } return v * 6; } process.env[ 'CUSTOM_TYPE' ] = '5'; var out = env( map, parsers ); /* { 'custom': 30 } */
Types
string
(default) Coerce an environment variable value to a string
.
var map = {
'STR': {
'keypath': 'str',
'type': 'string'
}
};
process.env[ 'STR' ] = 'beep';
var out = env( map );
/*
{
'str': 'beep'
}
*/
process.env[ 'STR' ] = '1234';
var out = env( map );
/*
{
'str': '1234'
}
*/
===
number
Coerce an environment variable value to a number
.
var map = {
'NUM': {
'keypath': 'num',
'type': 'number'
}
};
process.env[ 'NUM' ] = '3.14';
var out = env( map );
/*
{
'num': 3.14
}
*/
process.env[ 'NUM' ] = 'bop';
var out = env( map );
// => throws
===
integer
Coerce an environment variable value to an integer
.
var map = {
'INT': {
'keypath': 'int',
'type': 'integer'
}
};
process.env[ 'INT' ] = '2';
var out = env( map );
/*
{
'int': 2
}
*/
process.env[ 'INT' ] = 'beep';
var out = env( map );
// => throws
The integer
type has the following options
:
radix: an
integer
on the interval[2,36]
.var map = { 'INT': { 'keypath': 'int', 'type': 'integer', 'radix': 2 } }; process.env[ 'INT' ] = '1'; var out = env( map ); /* { 'int': 1 } */ process.env[ 'INT' ] = '2'; var out = env( map ); // => throws
===
boolean
Coerce an environment variable value to a boolean
. The boolean
type supports the following options:
- strict:
boolean
indicating whether to accept only'true'
and'false'
as acceptableboolean
strings. Default:false
.
In non-strict mode, the following values are supported:
TRUE
,True
,true
,T
,t
FALSE
,False
,false
,F
,f
var map = {
'BOOL': {
'keypath': 'bool',
'type': 'boolean'
}
};
process.env[ 'BOOL' ] = 'TRUE';
var out = env( map );
/*
{
'bool': true
}
*/
process.env[ 'BOOL' ] = 'beep';
var out = env( map );
// => throws
To restrict the set of allowed values, set the strict
option to true
.
var map = {
'BOOL': {
'keypath': 'bool',
'type': 'boolean',
'strict': true
}
};
process.env[ 'BOOL' ] = 'false';
var out = env( map );
/*
{
'bool': false
}
*/
process.env[ 'BOOL' ] = 'TRUE';
var out = env( map );
// => throws
===
object
Parse an environment variable value as a JSON object
. Note that a value must be valid JSON.
var map = {
'OBJ': {
'keypath': 'obj',
'type': 'object'
}
};
process.env[ 'OBJ' ] = '{"beep":"boop"}';
var out = env( map );
/*
{
'obj': {
'beep': 'boop'
}
}
*/
process.env[ 'OBJ' ] = '[1,2,3,"4",null]';
var out = env( map );
/*
{
'obj': [ 1, 2, 3, '4', null ]
}
*/
process.env[ 'OBJ' ] = '{"beep:"boop"}';
var out = env( map );
// => throws
===
date
Coerce an environment variable to a Date
object.
var map = {
'DATE': {
'keypath': 'date',
'type': 'date'
}
};
process.env[ 'DATE' ] = '2015-10-17';
var out = env( map );
/*
{
'date': <Date>
}
*/
process.env[ 'DATE' ] = 'beep';
var out = env( map );
// => throws
===
regexp
Parse an environment variable as a RegExp
.
var map = {
'REGEXP': {
'keypath': 're',
'type': 'regexp'
}
};
process.env[ 'RE' ] = '/\\w+/';
var out = env( map );
/*
{
're': /\w+/
}
*/
process.env[ 'RE' ] = 'beep';
var out = env( map );
// => throws
Notes
If an environment variable does not exist, the corresponding configuration
keypath
will not exist in the outputobject
.var map = { 'UNSET_ENV_VAR': { 'keypath': 'a.b.c' } }; var out = env( map ); // returns {}
Examples
var env = require( 'env-to-object' );
var map = {
'DEFAULT': {
'keypath': 'default'
},
'STR': {
'keypath': 'str',
'type': 'string'
},
'NUM': {
'keypath': 'num',
'type': 'number'
},
'BOOL': {
'keypath': 'bool',
'type': 'boolean',
'strict': true
},
'ARR': {
'keypath': 'arr',
'type': 'object'
},
'NESTED': {
'keypath': 'a.b.c.d',
'type': 'object'
},
"DATE": {
"keypath": "date",
"type": "date"
},
"REGEX": {
"keypath": "re",
"type": "regexp"
},
"INT": {
"keypath": "int",
"type": "integer"
}
};
process.env[ 'DEFAULT' ] = 'beep';
process.env[ 'STR' ] = 'boop';
process.env[ 'NUM' ] = '1234.5';
process.env[ 'BOOL' ] = 'true';
process.env[ 'ARR' ] = '[1,2,3,4]';
process.env[ 'NESTED' ] = '{"hello":"world"}';
process.env[ 'DATE' ] = '2015-10-18T07:00:01.000Z';
process.env[ 'REGEX'] = '/\\w+/';
process.env[ 'INT' ] = '1234';
var out = env( map );
/*
{
'default': 'beep',
'str': 'boop',
'num': 1234.5,
'bool': true,
'arr': [1,2,3,4],
'a': {
'b': {
'c': {
'd': {
'hello': 'world'
}
}
}
},
'date': <date>,
're': /\w+/,
'int': 1234
}
*/
To run the example code from the top-level application directory,
$ node ./examples/index.js
or, alternatively,
$ DEFAULT=boop STR=beep NUM='5432.1' BOOL='false' ARR='[4,3,2,1]' NESTED='{"world":"hello"}' DATE='2015-10-19T06:59:59.000Z' REGEX='/\\.+/' node ./examples/index.js
Tests
Unit
Unit tests use the Mocha test framework with Chai assertions. To run the tests, execute the following command in the top-level application directory:
$ make test
All new feature development should have corresponding unit tests to validate correct functionality.
Test Coverage
This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:
$ make test-cov
Istanbul creates a ./reports/coverage
directory. To access an HTML version of the report,
$ make view-cov
License
Copyright
Copyright © 2015. Athan Reines.