diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/README.md b/README.md index 1a73631..1385d4f 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,10 @@ Return as boolean. Allows true/false/1/0 as valid values. Split value of the environment variable at each comma and return the resulting array where each value has been typecast according to the `type` parameter. An array can be provided as `fallback`. +### env.date(name, [fallback]) + +Return as date object. Will validate that what is given is a valid date format. + ### env.multi({spec}) Return a list of environment variables based on a `spec`: diff --git a/lib/getenv.js b/lib/getenv.js index 716a816..b56d093 100644 --- a/lib/getenv.js +++ b/lib/getenv.js @@ -1,5 +1,6 @@ var util = require("util"); var url = require("url"); +var dayjs = require("dayjs"); var fallbacksDisabled = false; var throwError = true; @@ -69,7 +70,13 @@ var convert = { return (value === '1'); } }, - url: url.parse + url: url.parse, + date: function(value) { + if (dayjs(value).isValid()) { + return new Date(value); + } + throw new Error('GetEnv.NoDate: ' + value + ' is not a valid date.'); + }, }; function converter(type) { diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e63b884 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13 @@ +{ + "name": "getenv", + "version": "0.7.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "dayjs": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.12.tgz", + "integrity": "sha512-7keChCzzjU68sYJpk7kEI1Q9qbJyscyiW0STwEhqDFt+2js9pA/BSzmYE4PRxcMMoUMxNeY0TEMZHqV/JBR4OA==" + } + } +} diff --git a/package.json b/package.json index 7828746..b584013 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,9 @@ "engines": { "node": "*" }, - "dependencies": {}, + "dependencies": { + "dayjs": "^1.8.12" + }, "devDependencies": {}, "keywords": [ "env", diff --git a/test/getenv.js b/test/getenv.js index e15843c..2a44a8d 100644 --- a/test/getenv.js +++ b/test/getenv.js @@ -34,6 +34,10 @@ process.env.TEST_GETENV_BOOL_ARRAY = 'true, false, true'; process.env.TEST_GETENV_BOOL_ARRAY_INVALID1 = 'true, 1, true'; process.env.TEST_GETENV_BOOL_ARRAY_INVALID2 = 'true, 1.2, true'; process.env.TEST_GETENV_BOOL_ARRAY_INVALID3 = 'true, abc, true'; +process.env.TEST_GETENV_DATE_VALID1 = '2019-04-08T12:51:21.137Z'; +process.env.TEST_GETENV_DATE_VALID2 = 'Sun Mar 10 2019 12:51:21 GMT+0000 (GMT)' +process.env.TEST_GETENV_DATE_INVALID1 = '10 2019 12:51:21 GMT+0000 (GMT)' +process.env.TEST_GETENV_DATE_INVALID2 = '201-04-08T12:51:21.137Z'; process.env.TEST_GETENV_URL_1 = 'tcp://localhost:80'; process.env.TEST_GETENV_URL_2 = 'tcp://localhost:2993'; @@ -256,6 +260,35 @@ tests['getenv.boolish() invalid input'] = function() { }); }; +tests['getenv.date() valid input'] = function() { + var data = [{ + varName: 'TEST_GETENV_DATE_VALID1', + expected: new Date('2019-04-08T12:51:21.137Z') + }, + { + varName: 'TEST_GETENV_DATE_VALID2', + expected: new Date('Sun Mar 10 2019 12:51:21 GMT+0000 (GMT)') + }]; + + data.forEach(function(item) { + var dateVar = getenv.date(item.varName); + assert.deepEqual(dateVar, item.expected); + }); +}; + + +tests['getenv.date() invalid input'] = function() { + var data = [ + { varName: 'TEST_GETENV_DATE_INVALID1', varName: 'TEST_GETENV_DATE_INVALID2' } + ]; + + data.forEach(function(item) { + assert.throws(function() { + var dateVar = getenv.date(item.varName); + }); + }); +}; + tests['getenv.bool() nonexistent variable'] = function() { assert.throws(function() {