Skip to content

Commit

Permalink
Add ability to require string array of env vars & throwing the requir…
Browse files Browse the repository at this point in the history
…ed vars
  • Loading branch information
jazmon committed Feb 17, 2018
1 parent 3101f67 commit 8b482e8
Show file tree
Hide file tree
Showing 3 changed files with 141 additions and 1 deletion.
48 changes: 48 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ A micro-module to ensure your Node process env has all the necessary variables t
* Make some config keys optional
* Default values for keys
* Nested objects in config
* Multiple configuration files supported

## Example usage

Expand Down Expand Up @@ -46,3 +47,50 @@ if (missingConfigVars.length > 0) {

// ... app logic
```

### Directly throw if an error

```javascript
import { throwMissingConfigVars } from '@jazmon/require-env-vars';
import config from './config';
// You can pass multiple config files
import fooConfig from './config/foo';

try {
throwMissingConfigVars(config, fooConfig);
} catch (err) {
console.error(err);
process.exit(2);
}
```

## Example usage to require strings

Or you can use the `requireEnvVars` which will take an array of strings as input to check env against:

```javascript
import { requireEnvVars } from '@jazmon/require-env-vars';

const missingEnvVars = requireEnvVars(['API_KEY', 'API_URL']);

if (missingEnvVars.length > 0) {
throw new Error(
`Required configuration variables are missing! ${JSON.stringify(
missingEnvVars,
)}`,
);
process.exit(2);
}
```

### Directly throw if an error for string array

```javascript
import { throwMissingEnvVars } from '@jazmon/require-env-vars';
try {
throwMissingEnvVars(['API_KEY', 'API_URL']);
} catch (err) {
console.error(err);
process.exit(2);
}
```
63 changes: 62 additions & 1 deletion src/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
import { requireConfigKeys, requireConfigVars, Config } from './index';
import {
requireConfigKeys,
requireConfigVars,
Config,
requireEnvVars,
throwMissingConfigVars,
throwMissingEnvVars,
} from './index';

let originalEnv: NodeJS.ProcessEnv;

Expand Down Expand Up @@ -147,3 +154,57 @@ describe('requireConfigVars', () => {
expect(missingEnvVars).toContain('BAR');
});
});

describe('throwMissingConfigVars', () => {
it('should throw if some variables are not in env', () => {
process.env = {
FOO: 'foo',
BAR: 'bar',
};
const config: Config = {
FOO: process.env.FOO as string,
FOO2: process.env.FOO2 as string,
NESTED: {
BAR: process.env.BAR as string,
BAR2: process.env.BAR2 as string,
},
BAZ: 'baz',
};
const testFn = () => {
throwMissingConfigVars(config);
};
expect(testFn).toThrowError();
});
});

describe('requireEnvVars', () => {
it('should require env vars', () => {
process.env = {
FOO: 'foo',
};
const config: Config = {
FOO: process.env.FOO,
BAR: process.env.BAR,
};
const missingEnvVars = requireEnvVars(['FOO', 'BAR']);
expect(missingEnvVars).toHaveLength(1);
expect(missingEnvVars).toContain('BAR');
});
});

describe('throwMissingEnvVars', () => {
it('should throw required env vars', () => {
process.env = {
FOO: 'foo',
};
const config: Config = {
FOO: process.env.FOO,
BAR: process.env.BAR,
};

const testFn = () => {
throwMissingEnvVars(['FOO', 'BAR']);
};
expect(testFn).toThrowError();
});
});
31 changes: 31 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,35 @@ export const requireConfigVars = (...configs: Config[]): string[] => {
);
};

export const throwMissingConfigVars = (...configs: Config[]) => {
const missingConfigVars = requireConfigVars(...configs);
if (missingConfigVars.length > 0) {
throw new Error(
`Rerquired environment variables are not defined! ${JSON.stringify(
missingConfigVars,
)}`,
);
}
};

export const requireEnvVars = (envVars: string[]) => {
const missingEnvVars: string[] = [];
envVars.forEach(envVar => {
if (process.env[envVar] === undefined) {
missingEnvVars.push(envVar);
}
});
return missingEnvVars;
};

export const throwMissingEnvVars = (envVars: string[]) => {
const missingEnvVars = requireEnvVars(envVars);
if (missingEnvVars.length > 0)
throw new Error(
`Required enviroment variables are not defined! ${JSON.stringify(
missingEnvVars,
)}`,
);
};

export default requireConfigVars;

0 comments on commit 8b482e8

Please sign in to comment.