@vitra-ai/nestjs-core
Core utilities for NestJS applications including configuration management with Zod validation and Sequelize database integration.
Features
- 🔧 Type-safe Configuration: Zod-validated environment configuration with TypeScript types
- 🗄️ Database Integration: Sequelize configuration and utilities
- 📦 Zero Config: Works out of the box with sensible defaults
- 🚀 Production Ready: Battle-tested utilities for enterprise applications
Installation
npm install @vitra-ai/nestjs-core
yarn add @vitra-ai/nestjs-core
bun add @vitra-ai/nestjs-core
Peer Dependencies
npm install @nestjs/common @nestjs/core @nestjs/config @nestjs/sequelize zod pg sequelize sequelize-typescript
Usage
Configuration Module
The ZodConfigModule provides type-safe configuration management with Zod validation.
import { Module } from '@nestjs/common';
import { ZodConfigModule } from '@vitra-ai/nestjs-core';
import { z } from 'zod';
const EnvSchema = z.object({
NODE_ENV: z.enum(['development', 'production', 'test']),
PORT: z.coerce.number().default(3000),
DATABASE_URL: z.string(),
});
@Module({
imports: [
ZodConfigModule.forRoot(EnvSchema, {
isGlobal: true,
envFilePath: ['.env', '.env.local'],
}),
],
})
export class AppModule {}
Typed Config Service
Access your configuration with full type safety:
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@vitra-ai/nestjs-core';
import { z } from 'zod';
const EnvSchema = z.object({
PORT: z.coerce.number(),
DATABASE_URL: z.string(),
});
type EnvType = z.infer<typeof EnvSchema>;
@Injectable()
export class AppService {
constructor(private config: ConfigService<EnvType>) {}
getPort() {
return this.config.get('PORT');
}
getDatabaseUrl() {
return this.config.get('DATABASE_URL');
}
getOptionalValue() {
return this.config.optional('SOME_OPTIONAL_KEY');
}
getWithDefault() {
return this.config.getOr('TIMEOUT', 5000);
}
}
Database Integration
Use the SequelizeOptions provider for database configuration:
import { Module } from '@nestjs/common';
import { SequelizeModule } from '@nestjs/sequelize';
import {
ZodConfigModule,
SequelizeOptions,
DATABASE_ENV_CONFIG
} from '@vitra-ai/nestjs-core';
@Module({
imports: [
ZodConfigModule.forRoot(DATABASE_ENV_CONFIG, {
isGlobal: true,
}),
SequelizeModule.forRootAsync({
useClass: SequelizeOptions,
imports: [ZodConfigModule.forRoot(DATABASE_ENV_CONFIG)],
}),
],
})
export class AppModule {}
Environment Variables
The DATABASE_ENV_CONFIG expects these environment variables:
DB_DIALECT=postgres
DB_USER=myuser
DB_PASSWORD=mypassword
DB_HOST=localhost
DB_PORT=5432
DB_NAME=mydb
DB_LOGGING_ENABLED=false
API Reference
ZodConfigModule
forRoot<T>(schema: ZodObject<T>, options?: ConfigModuleOptions) - Initialize the config module with Zod validation
ConfigService<S>
get<K>(key: K): S[K] - Get a required config value (throws if missing)
optional<K>(key: K): S[K] | undefined - Get an optional config value
getOr<K>(key: K, fallback: S[K]): S[K] - Get a value with a fallback
SequelizeOptions
Database configuration provider implementing SequelizeOptionsFactory.
DATABASE_ENV_CONFIG
Pre-configured Zod schema for database environment variables.
License
MIT