From 5f6f43499839a69c618f0a5710d3fe187ddf696e Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Tue, 15 Jan 2019 23:54:29 +0100 Subject: [PATCH] BREAKING CHANGE(process.env): treat environment as immutable --- test/test.ts | 18 +++++++++--------- ts/qenv.classes.qenv.ts | 17 ++++------------- 2 files changed, 13 insertions(+), 22 deletions(-) diff --git a/test/test.ts b/test/test.ts index 51ddb06..e4eda69 100644 --- a/test/test.ts +++ b/test/test.ts @@ -4,30 +4,30 @@ import * as qenv from '../ts/index'; process.env['key1'] = 'original'; -let qenvTestObject: qenv.Qenv; +let testQenv: qenv.Qenv; tap.test('should create a new class', async () => { - qenvTestObject = new qenv.Qenv( + testQenv = new qenv.Qenv( path.join(__dirname, 'assets'), path.join(__dirname, 'assets'), false ); - expect(qenvTestObject).to.be.instanceof(qenv.Qenv); + expect(testQenv).to.be.instanceof(qenv.Qenv); }); tap.test('key1 should be not be overwritten since it is already present', async () => { - expect(process.env.key1).to.equal('original'); - expect(qenvTestObject.getEnvVarOnDemand('key1')).to.equal('original'); + expect(testQenv.getEnvVarRequired('key1')).to.equal('original'); + expect(testQenv.getEnvVarOnDemand('key1')).to.equal('original'); }); tap.test('key2 should be read from Yml', async () => { - expect(process.env.key2).to.equal('fromYml'); - expect(qenvTestObject.getEnvVarOnDemand('key2')).to.equal('fromYml'); + expect(testQenv.getEnvVarRequired('key2')).to.equal('fromYml'); + expect(testQenv.getEnvVarOnDemand('key2')).to.equal('fromYml'); }); tap.test('keyValueObjectArray should hold all retrieved values', async () => { - expect(qenvTestObject.keyValueObjectArray[0].value).to.equal('original'); - expect(qenvTestObject.keyValueObjectArray[1].value).to.equal('fromYml'); + expect(testQenv.keyValueObject.key1).to.equal('original'); + expect(testQenv.keyValueObject.key2).to.equal('fromYml'); }); tap.start(); diff --git a/ts/qenv.classes.qenv.ts b/ts/qenv.classes.qenv.ts index 649f23d..52ac7a4 100644 --- a/ts/qenv.classes.qenv.ts +++ b/ts/qenv.classes.qenv.ts @@ -1,11 +1,6 @@ import * as plugins from './qenv.plugins'; plugins.smartlog.defaultLogger.enableConsole(); -export interface IKeyValueObject { - key: string; - value: string; -} - /** * class Qenv * allows to make assertions about the environments while being more flexibel in how to meet them @@ -14,7 +9,7 @@ export class Qenv { public requiredEnvVars: string[] = []; public availableEnvVars: string[] = []; public missingEnvVars: string[] = []; - public keyValueObjectArray: IKeyValueObject[] = []; + public keyValueObject: {[key: string]: any } = {}; public logger: plugins.smartlog.Smartlog; // filePaths @@ -62,7 +57,7 @@ export class Qenv { * @param envVarName */ public getEnvVarRequired(envVarName): string { - return process.env[envVarName]; + return this.keyValueObject[envVarName]; } /** @@ -173,14 +168,10 @@ export class Qenv { const chosenVar = this.getEnvVarOnDemand(requiredEnvVar); if (chosenVar) { this.availableEnvVars.push(requiredEnvVar); - process.env[requiredEnvVar] = chosenVar; - this.keyValueObjectArray.push({ - key: requiredEnvVar, - value: chosenVar - }); + this.keyValueObject[requiredEnvVar] = chosenVar; } } - }; + } /** * gets missing env vars