@nestjs-steroids/environment

⚙️ Extremely simple environment module

Showing:

Popularity

Downloads/wk

118

GitHub Stars

12

Maintenance

Last Commit

1yr ago

Contributors

0

Package

Dependencies

0

Size (min+gzip)

1.2KB

License

MIT

Type Definitions

Built-In

Tree-Shakeable

No?

Categories

Readme

Environment

Extremely simple environment module (config loader) for your NestJS application

Installation

npm install @nestjs-steroids/environment

Usage

First of all, let's define our application environment

AppEnvironment

import { IsEnum, IsNumber, Max, Min } from 'class-validator';
import { Transform } from 'class-transformer';
import { Env } from '@nestjs-steroids/environment';

enum NodeEnv {
  Development = 'development',
  Production = 'production'
}

export class AppEnvironment {
  /**
   * Env decorator mark environment variable that we want to assign
   * (Tip) Without name env Env decorator makes auto UPPER_SNAKE_CASE conversion (e.g. isTest -> IS_TEST)
   */
  @Env('PORT')
  /**
   * Transform is useful for all sorts of transformations or parsing complex values
   * For example: @Transform(value => value.toLowerCase() === 'true')
   */
  @Transform(parseInt)
  /**
   * Also, you could use class-validator operators for validation of the correctness of environment variables
   */
  @IsNumber()
  @Min(0)
  @Max(65535)
  port: number;

  @Env('NODE_ENV')
  @IsEnum(NodeEnv)
  nodeEnvironment: NodeEnv
}

AppModule

Then, register EnvironmentModule in your application

import { Module } from '@nestjs/common';
import { EnvironmentModule } from '@nestjs-steroids/environment';
import { AppEnvironment } from './app-environment';

@Module({
  imports: [
    EnvironmentModule.forRoot({
      isGlobal: true,
      loadEnvFile: true,
      useClass: AppEnvironment,
    }),
  ],
})
export class AppModule {}

AppService

Let's use our application environment in services

import { Injectable } from '@nestjs/common';
import { AppEnvironment } from './app-environment';

@Injectable()
export class AppService {
  constructor(private readonly appEnvironment: AppEnvironment) {}

  getNodeEnvironment(): string {
    return `Application environment is: ${this.appEnvironment.nodeEnvironment}`;
  }
}

Advanced usage

Sometimes we need access to our environments without creation NestJS application (e.g. ORM config, etc.). So we can create an AppEnvironment using getEnvironment factory method and use it like class with static properties.

import { getEnvironment } from '@nestjs-steroids/environment';
export const appEnv = getEnvironment<AppEnvironment>(AppEnvironment)

// Usage
appEnv.nodeEnvironment

Also, we can reuse this instance in EnvironmentModule

import { Module } from '@nestjs/common';
import { EnvironmentModule } from '@nestjs-steroids/environment';
import { appEnv, AppEnvironment } from './app-environment';

@Module({
  imports: [
    EnvironmentModule.forRoot({
      isGlobal: true,
      loadEnvFile: true,
      useClass: AppEnvironment, // Class that we want to provide
      useValue: appEnv, // Class than we want to provide
    }),
  ],
})
export class AppModule {}

License

MIT

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100