From b40e4bd454ed9bcb749ad53760994656ac71edf3 Mon Sep 17 00:00:00 2001 From: Jeff Dickey <216188+jdxcode@users.noreply.github.com> Date: Sat, 27 Jan 2018 23:31:45 -0800 Subject: [PATCH] feat: remove undefined/nulls from env --- package.json | 1 + src/env.ts | 19 ++++++++++++++++--- test/env.test.ts | 8 +++++++- tslint.json | 2 +- yarn.lock | 7 +++++++ 5 files changed, 32 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e58d81a..4137efa 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "devDependencies": { "@dxcli/dev": "^2.0.4", + "@dxcli/tslint": "^0.0.23", "@types/sinon": "^4.1.3", "chai": "^4.1.2", "chalk": "^2.3.0", diff --git a/src/env.ts b/src/env.ts index b421fd3..8f15c9c 100644 --- a/src/env.ts +++ b/src/env.ts @@ -1,11 +1,24 @@ +import * as _ from 'lodash' + import {Env, EnvOptions} from './types' -export default (env: {[k: string]: string | undefined}, opts: EnvOptions = {}) => ({ +export default (env: {[k: string]: string | null | undefined}, opts: EnvOptions = {}) => ({ run(ctx) { + // normalize to undefined + const normalizedEnv = _.mapValues(env, v => v === null ? undefined : v) + + // store previous env for finally ctx.envs = ctx.envs || [] ctx.envs.push(process.env) - if (opts.clear) process.env = {...env} - else process.env = {...process.env, ...env} + + if (opts.clear) { + process.env = {...normalizedEnv} + } else { + process.env = {...process.env, ...normalizedEnv} + Object.entries(normalizedEnv) + .filter(([, v]) => v === undefined) + .forEach(([k]) => { delete process.env[k] }) + } }, finally(ctx) { const env = ctx.envs.pop() diff --git a/test/env.test.ts b/test/env.test.ts index 9b3fe3d..cd7981e 100644 --- a/test/env.test.ts +++ b/test/env.test.ts @@ -30,6 +30,12 @@ describe('env', () => { fancy .env({PREDEFINED: undefined}) .end('can set things to be undefined', () => { - expect(process.env.PREDEFINED).to.equal(undefined) + expect(process.env).to.not.have.property('PREDEFINED') + }) + + fancy + .env({PREDEFINED: null}) + .end('can set things to be null', () => { + expect(process.env).to.not.have.property('PREDEFINED') }) }) diff --git a/tslint.json b/tslint.json index 675addf..3a427ce 100644 --- a/tslint.json +++ b/tslint.json @@ -1,3 +1,3 @@ { - "extends": "@dxcli/dev-tslint" + "extends": "@dxcli/tslint" } diff --git a/yarn.lock b/yarn.lock index 10e6e3c..5a1b406 100644 --- a/yarn.lock +++ b/yarn.lock @@ -159,6 +159,13 @@ ts-node "^4.1.0" typescript "^2.6.2" +"@dxcli/tslint@^0.0.23": + version "0.0.23" + resolved "https://registry.yarnpkg.com/@dxcli/tslint/-/tslint-0.0.23.tgz#c9877ec9927bb958c1a71edac3263007ce64b22d" + dependencies: + tslint "^5.9.1" + tslint-xo "^0.5.0" + "@marionebl/sander@^0.6.0": version "0.6.1" resolved "https://registry.yarnpkg.com/@marionebl/sander/-/sander-0.6.1.tgz#1958965874f24bc51be48875feb50d642fc41f7b"