From 3a2456fc849fbd3f16a16a30a2c275e423e9d36f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Lenon?= Date: Wed, 1 Dec 2021 10:45:31 -0300 Subject: [PATCH 1/2] fix: Resolve env file in runtime --- index.ts | 1 + package-lock.json | 82 +++++++++++++++++++++++++++++-------- package.json | 7 +++- src/DotEnvResolver.ts | 20 --------- src/Env.ts | 2 - src/utils/global.ts | 3 ++ src/utils/resolveEnvFile.ts | 27 ++++++++++++ tests/env.spec.ts | 12 ++++++ 8 files changed, 113 insertions(+), 41 deletions(-) delete mode 100644 src/DotEnvResolver.ts create mode 100644 src/utils/resolveEnvFile.ts diff --git a/index.ts b/index.ts index 2e59717..a2ecd44 100644 --- a/index.ts +++ b/index.ts @@ -1 +1,2 @@ export * from './src/Env' +export * from './src/utils/resolveEnvFile' diff --git a/package-lock.json b/package-lock.json index dd2883f..3fd5c4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,20 @@ { "name": "@secjs/env", - "version": "1.2.3", + "version": "1.2.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@secjs/env", - "version": "1.2.3", + "version": "1.2.6", "license": "MIT", "dependencies": { "dotenv": "10.0.0" }, "devDependencies": { + "@secjs/exceptions": "^1.0.4", "@secjs/logger": "1.2.1", + "@secjs/utils": "^1.5.2", "@types/debug": "4.1.7", "@types/jest": "27.0.1", "@types/supertest": "2.0.11", @@ -38,7 +40,8 @@ "ts-loader": "9.2.3", "ts-node": "10.0.0", "tsconfig-paths": "3.9.0", - "typescript": "4.3.5" + "typescript": "4.3.5", + "uuid": "^8.3.2" } }, "node_modules/@babel/code-frame": { @@ -1253,6 +1256,12 @@ "node": ">= 8" } }, + "node_modules/@secjs/exceptions": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@secjs/exceptions/-/exceptions-1.0.4.tgz", + "integrity": "sha512-prj8eNUOqJtrEdUFX58gqvo1RsuKZJI6pJnUr/molkDEerhWEF4lAuR8gliQo+cA+LASAvCeJXDkTWR/xbodMQ==", + "dev": true + }, "node_modules/@secjs/logger": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@secjs/logger/-/logger-1.2.1.tgz", @@ -1296,6 +1305,15 @@ } } }, + "node_modules/@secjs/utils": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@secjs/utils/-/utils-1.5.2.tgz", + "integrity": "sha512-rsOZKhvIH2HGM3azku09WNTixl0IfSQZQTfMfSwYqdoMyKnppVdO1tUwsj/SYkgikpM792y1ofrNwMrmK2WWBw==", + "dev": true, + "dependencies": { + "mime-types": "2.1.34" + } + }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -6832,21 +6850,21 @@ } }, "node_modules/mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "dependencies": { - "mime-db": "1.49.0" + "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" @@ -8675,6 +8693,15 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -9992,6 +10019,12 @@ "fastq": "^1.6.0" } }, + "@secjs/exceptions": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@secjs/exceptions/-/exceptions-1.0.4.tgz", + "integrity": "sha512-prj8eNUOqJtrEdUFX58gqvo1RsuKZJI6pJnUr/molkDEerhWEF4lAuR8gliQo+cA+LASAvCeJXDkTWR/xbodMQ==", + "dev": true + }, "@secjs/logger": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@secjs/logger/-/logger-1.2.1.tgz", @@ -10023,6 +10056,15 @@ } } }, + "@secjs/utils": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@secjs/utils/-/utils-1.5.2.tgz", + "integrity": "sha512-rsOZKhvIH2HGM3azku09WNTixl0IfSQZQTfMfSwYqdoMyKnppVdO1tUwsj/SYkgikpM792y1ofrNwMrmK2WWBw==", + "dev": true, + "requires": { + "mime-types": "2.1.34" + } + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -14290,18 +14332,18 @@ "dev": true }, "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { - "mime-db": "1.49.0" + "mime-db": "1.51.0" } }, "mimic-fn": { @@ -15629,6 +15671,12 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", diff --git a/package.json b/package.json index 2988a7b..4ee5764 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@secjs/env", - "version": "1.2.5", + "version": "1.2.6", "license": "MIT", "author": "João Lenon", "repository": "https://github.com/SecJS/Env.git", @@ -23,7 +23,9 @@ "dotenv": "10.0.0" }, "devDependencies": { + "@secjs/exceptions": "^1.0.4", "@secjs/logger": "1.2.1", + "@secjs/utils": "^1.5.2", "@types/debug": "4.1.7", "@types/jest": "27.0.1", "@types/supertest": "2.0.11", @@ -49,7 +51,8 @@ "ts-loader": "9.2.3", "ts-node": "10.0.0", "tsconfig-paths": "3.9.0", - "typescript": "4.3.5" + "typescript": "4.3.5", + "uuid": "^8.3.2" }, "lint-staged": { "*.js": [ diff --git a/src/DotEnvResolver.ts b/src/DotEnvResolver.ts deleted file mode 100644 index 0c5344e..0000000 --- a/src/DotEnvResolver.ts +++ /dev/null @@ -1,20 +0,0 @@ -import * as dotenv from 'dotenv' - -import logger from './utils/logger' - -import { resolve } from 'path' - -const environment = process.env.NODE_ENV -const configurations = { path: resolve(process.cwd(), '.env') } - -if (environment) { - configurations.path = resolve(process.cwd(), `.env.${environment}`) - - logger.debug(`Environment variables set using .env.${environment}`) -} - -const result = dotenv.config(configurations) - -if (result.error) { - logger.debug('Any environment variable file found!') -} diff --git a/src/Env.ts b/src/Env.ts index 788580d..2dd692e 100644 --- a/src/Env.ts +++ b/src/Env.ts @@ -1,5 +1,3 @@ -import './DotEnvResolver' - import logger from './utils/logger' export interface IEnv { diff --git a/src/utils/global.ts b/src/utils/global.ts index 3d2a3ab..db5de1d 100644 --- a/src/utils/global.ts +++ b/src/utils/global.ts @@ -1,4 +1,7 @@ import { Env, IEnv } from '../Env' +import { resolveEnvFile } from './resolveEnvFile' + +resolveEnvFile() export {} diff --git a/src/utils/resolveEnvFile.ts b/src/utils/resolveEnvFile.ts new file mode 100644 index 0000000..afe32f4 --- /dev/null +++ b/src/utils/resolveEnvFile.ts @@ -0,0 +1,27 @@ +import * as dotenv from 'dotenv' + +import logger from './logger' +import { Path } from '@secjs/utils' + +export function resolveEnvFile() { + const environment = process.env.NODE_ENV + const configurations = { path: Path.noBuild().pwd('.env') } + + if (environment) { + configurations.path = Path.noBuild().pwd(`.env.${environment}`) + + logger.debug(`Environment variables set using .env.${environment} file`) + } + + const result = dotenv.config(configurations) + + if (result.error) { + logger.debug('Any environment variable file found!') + + return + } + + if (result.parsed) { + Object.keys(result.parsed).forEach(k => (process.env[k] = result.parsed[k])) + } +} diff --git a/tests/env.spec.ts b/tests/env.spec.ts index 76d342f..b2aa63e 100644 --- a/tests/env.spec.ts +++ b/tests/env.spec.ts @@ -1,4 +1,5 @@ import { Env } from '../src/Env' +import { resolveEnvFile } from '../src/utils/resolveEnvFile' describe('\n Env 🔁', () => { let DB_USERNAME = '' @@ -11,6 +12,7 @@ describe('\n Env 🔁', () => { process.env.DB_USERNAME = 'user' process.env.DB_PASSWORD = 'pass' process.env.OBJECT = '{"joao":"joao"}' + process.env.DB_SYNC = 'true' DB_USERNAME = process.env.DB_USERNAME DB_PASSWORD = process.env.DB_PASSWORD @@ -48,4 +50,14 @@ describe('\n Env 🔁', () => { expect(DB_DEBUG).toBe(false) expect(OBJECT.joao).toBe('joao') }) + + it('should resolve the .env.testing file and subscribe all envs from process.env that are in this file', () => { + process.env.NODE_ENV = 'testing' + + resolveEnvFile() + + const DB_SYNC = Env('DB_SYNC', '') + + expect(DB_SYNC).toBe('false') + }) }) From a4abdcb5b987c687931c341da6081f0a2bc86e83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Lenon?= Date: Wed, 1 Dec 2021 11:18:19 -0300 Subject: [PATCH 2/2] fix: Resolve env file in runtime --- .env.testing | 1 + .gitignore | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .env.testing diff --git a/.env.testing b/.env.testing new file mode 100644 index 0000000..23e95e4 --- /dev/null +++ b/.env.testing @@ -0,0 +1 @@ +DB_SYNC="false" diff --git a/.gitignore b/.gitignore index 673cbc8..8258ac2 100644 --- a/.gitignore +++ b/.gitignore @@ -118,7 +118,7 @@ out # dotenv environment variables file .env -.env.testing +#.env.testing .env.production # Build files