A NestJS module for integrating Drizzle ORM with official PlanetScale driver
npm install @knaadh/nestjs-drizzle-planetscale
A NestJS module for integrating Drizzle ORM with official PlanetScale driver
- Table of Contents
- Installation
- Usage
- Configuration
- Documentation
- License
| Package Version | drizzle-orm Version |
| --------------- | ------------------- |
| 1.3.x | ≥0.3.0 |
| ≤1.2.x | <0.3.0 |
``bash`
npm install @knaadh/nestjs-drizzle-planetscale drizzle-orm @planetscale/database
Import the DrizzlePlanetScaleModule module and pass an options object to initialize it. You can pass options object using the usual methods for custom providers as shown below:
`typescript
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import * as schema from '../db/schema';
import { DrizzlePlanetScaleModule } from '@knaadh/nestjs-drizzle-planetscale';
@Module({
imports: [
// Method #1: Pass options object
DrizzlePlanetScaleModule.register({
tag: 'DB_DEV',
planetscale: {
config: {
username: 'PLANETSCALE_USERNAME',
password: 'PLANETSCALE_PASSWORD',
host: 'PLANETSCALE_HOST',
},
},
config: { schema: { ...schema } },
}),
// Method #2: useFactory()
DrizzlePlanetScaleModule.registerAsync({
tag: 'DB_PROD',
useFactory() {
return {
planetscale: {
config: {
username: 'PLANETSCALE_USERNAME',
password: 'PLANETSCALE_PASSWORD',
host: 'PLANETSCALE_HOST',
},
},
config: { schema: { ...schema } },
};
},
}),
// Method #3: useClass()
DrizzlePlanetScaleModule.registerAsync({
tag: 'DB_STAGING',
useClass: DBConfigService,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
`
`typescript`
export class DBConfigService {
create = () => {
return {
planetscale: {
config: {
username: 'PLANETSCALE_USERNAME',
password: 'PLANETSCALE_PASSWORD',
host: 'PLANETSCALE_HOST',
},
},
config: { schema: { ...schema } },
};
};
}
You can inject the Drizzle instances using their respective tag specified in the configurations
`typescript`
import { Inject, Injectable } from '@nestjs/common';
import * as schema from '../db/schema';
import { PlanetScaleDatabase } from 'drizzle-orm/planetscale-serverless';
@Injectable()
export class AppService {
constructor(@Inject('DB_DEV') private drizzleDev: PlanetScaleDatabase
async getData() {
const books = await this.drizzleDev.query.books.findMany();
const authors = await this.drizzleProd.query.authors.findMany();
return {
books: books,
authors: authors,
};
}
}
A DrizzlePlanetScaleModule option object has the following interface:
`typescript`
export interface DrizzlePlanetScaleConfig {
planetscale: {
config: Config;
};
config?: DrizzleConfig
}
- planetscale.config: PlanetScale configconfig:` DrizzleORM configuration
- (optional)
- NX
- DrizzleORM
- PlanetScale
This package is MIT licensed.