From 7d20ffd91c71efbe59b36cc3eeff987c6ef6b2ba Mon Sep 17 00:00:00 2001 From: Victoria Ledsom Date: Mon, 8 Apr 2019 15:28:07 +0100 Subject: [PATCH 1/4] Add dayjs and create gitinore for node modules --- .gitignore | 1 + package-lock.json | 13 +++++++++++++ package.json | 4 +++- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 package-lock.json 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/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", From d66d83cffe1fdda492b30e0d7712c248617240a6 Mon Sep 17 00:00:00 2001 From: Victoria Ledsom Date: Mon, 8 Apr 2019 15:28:53 +0100 Subject: [PATCH 2/4] Add date function to check date vadility --- lib/getenv.js | 9 ++++++++- test/getenv.js | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/lib/getenv.js b/lib/getenv.js index 716a816..1edfe14 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 value + } + throw new Error('GetEnv.NoDate: ' + value + ' is not a valid date.'); + }, }; function converter(type) { diff --git a/test/getenv.js b/test/getenv.js index e15843c..ac5eb33 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: '2019-04-08T12:51:21.137Z' + }, + { + varName: 'TEST_GETENV_DATE_VALID2', + expected: 'Sun Mar 10 2019 12:51:21 GMT+0000 (GMT)' + }]; + + data.forEach(function(item) { + var dateVar = getenv.date(item.varName); + assert.strictEqual(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() { From 2c6135e066ee7051b0a0f9a39aa37383b5a1331c Mon Sep 17 00:00:00 2001 From: Victoria Ledsom Date: Tue, 9 Apr 2019 16:29:38 +0100 Subject: [PATCH 3/4] Return value as a date object --- lib/getenv.js | 2 +- test/getenv.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/getenv.js b/lib/getenv.js index 1edfe14..b56d093 100644 --- a/lib/getenv.js +++ b/lib/getenv.js @@ -73,7 +73,7 @@ var convert = { url: url.parse, date: function(value) { if (dayjs(value).isValid()) { - return value + return new Date(value); } throw new Error('GetEnv.NoDate: ' + value + ' is not a valid date.'); }, diff --git a/test/getenv.js b/test/getenv.js index ac5eb33..2a44a8d 100644 --- a/test/getenv.js +++ b/test/getenv.js @@ -263,16 +263,16 @@ tests['getenv.boolish() invalid input'] = function() { tests['getenv.date() valid input'] = function() { var data = [{ varName: 'TEST_GETENV_DATE_VALID1', - expected: '2019-04-08T12:51:21.137Z' + expected: new Date('2019-04-08T12:51:21.137Z') }, { varName: 'TEST_GETENV_DATE_VALID2', - expected: 'Sun Mar 10 2019 12:51:21 GMT+0000 (GMT)' + expected: new Date('Sun Mar 10 2019 12:51:21 GMT+0000 (GMT)') }]; data.forEach(function(item) { var dateVar = getenv.date(item.varName); - assert.strictEqual(dateVar, item.expected); + assert.deepEqual(dateVar, item.expected); }); }; From 79fe420f5357f8fe0be7d8d02b7db2829c578e8b Mon Sep 17 00:00:00 2001 From: Victoria Ledsom Date: Tue, 9 Apr 2019 16:30:56 +0100 Subject: [PATCH 4/4] Update README --- README.md | 4 ++++ 1 file changed, 4 insertions(+) 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`: