https://github.com/remscodes/env-mode
🕶️A tiny, handy and strongly typed library for working with the env mode (NODE_ENV)
https://github.com/remscodes/env-mode
environment javascript typescript
Last synced: 5 months ago
JSON representation
🕶️A tiny, handy and strongly typed library for working with the env mode (NODE_ENV)
- Host: GitHub
- URL: https://github.com/remscodes/env-mode
- Owner: remscodes
- License: mit
- Created: 2024-10-18T20:39:37.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-10-27T14:42:10.000Z (over 1 year ago)
- Last Synced: 2025-11-19T17:15:55.710Z (7 months ago)
- Topics: environment, javascript, typescript
- Language: TypeScript
- Homepage: https://npm.im/@remscodes/env-mode
- Size: 43 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Env Mode
A tiny, handy and strongly typed library for working with the env mode (NODE_ENV)
[](https://github.com/remscodes/env-mode/actions/workflows/npm-ci.yml)
[](https://www.npmjs.org/package/@remscodes/env-mode)
[](https://bundlephobia.com/package/@remscodes/env-mode)
[](LICENSE)
## Installation
```shell
npm install @remscodes/env-mode
```
### Note
This library does not load environment variables from a `.env` files.
It is supposed to be used in addition to any module or framework that load these variables.
## Usage
[//]: # (@formatter:off)
```js
// .env
NODE_ENV=dev
```
[//]: # (@formatter:on)
#### Current value
Get the env mode value.
```ts
import EnvMode from '@remscodes/env-mode';
EnvMode.get(); // "dev"
EnvMode.getOrThrow(); // "dev"
```
#### Conditions
Build conditions based on the env mode.
```ts
import EnvMode from '@remscodes/env-mode';
EnvMode.is('dev'); // true
EnvMode.isNot('dev'); // false
EnvMode.in(['dev', 'prod']); // true
EnvMode.notIn(['dev', 'prod']); // false
```
#### Selection
Select a specific value depending on the env mode.
```ts
import EnvMode from '@remscodes/env-mode';
const color = EnvMode.select({ // "blue"
dev: 'blue',
default: 'red',
});
```
## Typed usage
Create a declaration file and add all your env mode values as follows.
```ts
// global.d.ts
declare global {
namespace NSEnvMode {
interface ModeMap {
dev,
prod,
}
}
}
export {};
```
Include it into your `tsconfig.json`.
```
// tsconfig.json
{
// ...
"include": [
"global.d.ts"
]
}
```
Now your env modes can be autocompleted through methods.
## Configuration
### Throw
By default, if the env mode is empty (`undefined` or `""`), the methods work with this empty value.
You can choose to throw an exception from every methods if env mode is empty.
Example :
[//]: # (@formatter:off)
```js
// .env
NODE_ENV=
```
[//]: # (@formatter:on)
```ts
EnvMode.is('dev'); // false
```
```ts
EnvMode.configure({ throwIfEmpty: true });
EnvMode.is('dev'); // [EnvModeException: "NODE_ENV" is not defined in "globalThis.process.env".]
```
### Key
By default, it works with the `NODE_ENV` key.
You can change it as follows.
Example :
[//]: # (@formatter:off)
```js
// .env
DENO_ENV=dev
```
[//]: # (@formatter:on)
```ts
EnvMode.configure({ key: 'DENO_ENV' });
EnvMode.get(); // "dev"
```
### Source
By default, it works with the `globalThis.process.env` source.
You can change it as follows.
Example :
```ts
// environment.ts
export const myEnvironment = {
NODE_ENV: 'dev',
};
```
```ts
import { myEnvironment } from './environement.ts';
EnvMode.configure({ source: myEnvironment });
EnvMode.get(); // "dev"
```
## License
[MIT](LICENSE) © Rémy Abitbol.