No description
Find a file
QuinnFTW f29d205913
Some checks failed
Build and Publish / build-and-publish (push) Failing after 47s
deps-upgrade(deps): ⬆️ Update dependency versions to latest stable releases
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-10 04:14:16 -07:00
.forgejo/workflows chore: 🔧 Update files 2026-01-15 06:57:31 -08:00
.githooks chore: configure GitLab CI/CD with workspace protocol 2025-12-28 03:33:25 -08:00
src feat(types-about): Add DatabaseLoggingConfig and TypeOrmLogLevel types for public API exports 2026-04-08 17:25:19 -07:00
.gitignore chore(gitignore): Add missing patterns 2026-01-21 11:50:15 -08:00
eslint.config.js feat(@typeorm/config): update package.json and eslint.config.js to use "module" type 2026-01-04 20:45:39 -08:00
package.json deps-upgrade(deps): ⬆️ Update dependency versions to latest stable releases 2026-06-10 04:14:16 -07:00
README.md chore: re-trigger CI publish 2026-01-30 13:47:18 -08:00
tsconfig.json chore(config): 🔧 Update TypeScript config to enforce stricter type checking (strict: true) and refine module resolution paths (baseUrl, paths) for improved maintainability 2026-01-21 12:11:08 -08:00
tsup.config.ts chore(build): 🔧 Update tsup bundling config with optimized output settings 2026-01-21 15:35:44 -08:00

@lilith/typeorm-config

Database configuration factory for TypeORM with NestJS integration.

Features

  • Data Source Factory: Create TypeORM DataSource from environment variables
  • Environment Validation: Validate and load database configuration
  • NestJS Module: Dynamic module for NestJS integration
  • Type-safe Configuration: Full TypeScript support
  • Sensible Defaults: Preconfigured defaults for common settings

Installation

pnpm add @lilith/typeorm-config

Peer Dependencies

pnpm add typeorm

# For NestJS integration
pnpm add @nestjs/common @nestjs/typeorm

Quick Start

Standalone Usage

import { createDataSource, loadDatabaseConfig } from '@lilith/typeorm-config';
import { User } from './entities/user.entity';

const dataSource = createDataSource({
  entities: [User],
  migrations: ['./migrations/*.ts'],
  synchronize: false,
});

await dataSource.initialize();

NestJS Integration

import { Module } from '@nestjs/common';
import { TypeOrmConfigModule } from '@lilith/typeorm-config';
import { User } from './entities/user.entity';

@Module({
  imports: [
    TypeOrmConfigModule.forRoot({
      entities: [User],
      migrations: ['./migrations/*.ts'],
      migrationsRun: true,
    }),
  ],
})
export class AppModule {}

Environment Variables

Variable Description Default
DATABASE_HOST Database host address localhost
DATABASE_PORT Database port number 5432
DATABASE_USER Database username postgres
DATABASE_PASSWORD Database password (required)
DATABASE_NAME Database name (required)
DATABASE_SSL Enable SSL connection false
DATABASE_LOGGING Enable query logging false

API Reference

createDataSource

Create a TypeORM DataSource from environment:

import { createDataSource } from '@lilith/typeorm-config';

const dataSource = createDataSource({
  entities: [User, Post],
  migrations: ['./migrations/*.ts'],
  synchronize: false,
  poolSize: 10,
});

createDataSourceWithConfig

Create DataSource with explicit configuration:

import { createDataSourceWithConfig } from '@lilith/typeorm-config';

const dataSource = createDataSourceWithConfig(
  {
    host: 'localhost',
    port: 5432,
    username: 'postgres',
    password: 'password',
    database: 'mydb',
    ssl: false,
    logging: true,
  },
  {
    entities: [User],
    synchronize: false,
  }
);

loadDatabaseConfig

Load and validate database configuration from environment:

import { loadDatabaseConfig } from '@lilith/typeorm-config';

const config = loadDatabaseConfig();
// {
//   host: 'localhost',
//   port: 5432,
//   username: 'postgres',
//   password: '...',
//   database: 'mydb',
//   ssl: false,
//   logging: false,
// }

validateRequiredEnvVars

Validate that required environment variables are set:

import { validateRequiredEnvVars, MissingEnvVarsError } from '@lilith/typeorm-config';

try {
  validateRequiredEnvVars();
} catch (error) {
  if (error instanceof MissingEnvVarsError) {
    console.error('Missing:', error.missingVars);
  }
}

TypeOrmConfigModule

NestJS dynamic module:

import { TypeOrmConfigModule } from '@lilith/typeorm-config';

@Module({
  imports: [
    TypeOrmConfigModule.forRoot({
      entities: [User, Post],
      migrations: ['./migrations/*.ts'],
      migrationsRun: true,
      synchronize: false,
    }),
  ],
})
export class AppModule {}

Types

interface DatabaseConfig {
  host: string;
  port: number;
  username: string;
  password: string;
  database: string;
  ssl: boolean;
  logging: boolean;
  extra?: Record<string, unknown>;
}

interface DataSourceOptions {
  entities?: Array<Function | string>;
  migrations?: Array<Function | string>;
  subscribers?: Array<Function | string>;
  migrationsRun?: boolean;
  synchronize?: boolean;
  schema?: string;
  poolSize?: number;
  extra?: Record<string, unknown>;
}

License

MIT

Test 1767646293