@knaadh/nestjs-drizzle-pg
TypeScript icon, indicating that this package has built-in type declarations

1.2.0 • Public • Published

Nest Logo

A NestJS module for integrating Drizzle ORM with Node-Postgres driver

Nrwl Nx

Table of Contents

Installation

npm install @knaadh/nestjs-drizzle-pg drizzle-orm pg

Usage

Import the DrizzlePGModule module and pass an options object to initialize it. You can pass options object using the usual methods for custom providers as shown below:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import * as schema from '../db/schema';
import { DrizzlePGModule } from '@knaadh/nestjs-drizzle-pg';

@Module({
  imports: [
    // Method #1: Pass options object
    DrizzlePGModule.register({
      tag: 'DB_DEV',
      pg: {
        connection: 'client',
        config: {
          connectionString: 'postgres://postgres:@127.0.0.1:5432/drizzleDB',
        },
      },
      config: { schema: { ...schema } },
    }),

    // Method #2: useFactory()
    DrizzlePGModule.registerAsync({
      tag: 'DB_PROD',
      useFactory() {
        return {
          pg: {
            connection: 'client',
            config: {
              connectionString: 'postgres://postgres:@127.0.0.1:5432/drizzleDB',
            },
          },
          config: { schema: { ...schema } },
        };
      },
    }),

    // Method #3: useClass()
    DrizzlePGModule.registerAsync({
      tag: 'DB_STAGING',
      useClass: DBConfigService,
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
export class DBConfigService {
  create = () => {
    return {
      pg: {
        connection: 'client' as const,
        config: {
          connectionString: 'postgres://postgres:@127.0.0.1:5432/drizzleDB',
        },
      },
      config: { schema: { ...schema } },
    };
  };
}

You can inject the Drizzle instances using their respective tag specified in the configurations

import { Inject, Injectable } from '@nestjs/common';
import * as schema from '../db/schema';
import { NodePgDatabase } from 'drizzle-orm/node-postgres';
@Injectable()
export class AppService {
  constructor(
    @Inject('DB_DEV') private drizzleDev: NodePgDatabase<typeof schema>,
    @Inject('DB_PROD') private drizzleProd: NodePgDatabase<typeof schema>
  ) {}
  async getData() {
    const books = await this.drizzleDev.query.books.findMany();
    const authors = await this.drizzleProd.query.authors.findMany();
    return {
      books: books,
      authors: authors,
    };
  }
}

Configuration

A DrizzlePGModule option object has the following interface:

export interface DrizzlePGConfig {
  pg: {
    connection: 'client' | 'pool';
    config: ClientConfig | PoolConfig;
  };
  config?: DrizzleConfig<any> | undefined;
}
  • pg.connection: single client connection or a pool as mentioned here
  • (optional) postgres.config: pass client config or pool config according to the connection
  • (optional) config: DrizzleORM configuration

Documentation

License

This package is MIT licensed.

Package Sidebar

Install

npm i @knaadh/nestjs-drizzle-pg

Weekly Downloads

996

Version

1.2.0

License

MIT

Unpacked Size

16.3 kB

Total Files

20

Last publish

Collaborators

  • mithleshjs