Environment Variables
Maps environment variables to a configuration object.
Installation
$ npm install env-to-object
Usage
var env = ;
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': <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;{var v = ;if v !== vreturn 'invalid value. Value must be an integer. Value: `' + str + '`.' ;return v * 6;}processenv 'CUSTOM_TYPE' = '5';var out = ;/*{'custom': 30}*/
Types
string
(default) Coerce an environment variable value to a string
.
var map ='STR':'keypath': 'str''type': 'string';processenv 'STR' = 'beep';var out = ;/*{'str': 'beep'}*/processenv 'STR' = '1234';var out = ;/*{'str': '1234'}*/
===
number
Coerce an environment variable value to a number
.
var map ='NUM':'keypath': 'num''type': 'number';processenv 'NUM' = '3.14';var out = ;/*{'num': 3.14}*/processenv 'NUM' = 'bop';var out = ;// => throws
===
integer
Coerce an environment variable value to an integer
.
var map ='INT':'keypath': 'int''type': 'integer';processenv 'INT' = '2';var out = ;/*{'int': 2}*/processenv 'INT' = 'beep';var out = ;// => 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;processenv 'INT' = '1';var out = ;/*{'int': 1}*/processenv 'INT' = '2';var out = ;// => 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';processenv 'BOOL' = 'TRUE';var out = ;/*{'bool': true}*/processenv 'BOOL' = 'beep';var out = ;// => throws
To restrict the set of allowed values, set the strict
option to true
.
var map ='BOOL':'keypath': 'bool''type': 'boolean''strict': true;processenv 'BOOL' = 'false';var out = ;/*{'bool': false}*/processenv 'BOOL' = 'TRUE';var out = ;// => 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';processenv 'OBJ' = '{"beep":"boop"}';var out = ;/*{'obj': {'beep': 'boop'}}*/processenv 'OBJ' = '[1,2,3,"4",null]';var out = ;/*{'obj': [ 1, 2, 3, '4', null ]}*/processenv 'OBJ' = '{"beep:"boop"}';var out = ;// => throws
===
date
Coerce an environment variable to a Date
object.
var map ='DATE':'keypath': 'date''type': 'date';processenv 'DATE' = '2015-10-17';var out = ;/*{'date': <Date>}*/processenv 'DATE' = 'beep';var out = ;// => throws
===
regexp
Parse an environment variable as a RegExp
.
var map ='REGEXP':'keypath': 're''type': 'regexp';processenv 'RE' = '/\\w+/';var out = ;/*{'re': /\w+/}*/processenv 'RE' = 'beep';var out = ;// => 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 = ;// returns {}
Examples
var env = ;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";processenv 'DEFAULT' = 'beep';processenv 'STR' = 'boop';processenv 'NUM' = '1234.5';processenv 'BOOL' = 'true';processenv 'ARR' = '[1,2,3,4]';processenv 'NESTED' = '{"hello":"world"}';processenv 'DATE' = '2015-10-18T07:00:01.000Z';processenv 'REGEX' = '/\\w+/';processenv 'INT' = '1234';var out = ;/*{'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.