Skip to content

Commit 4533992

Browse files
committed
feat(package): add nestjs module
1 parent 125cc93 commit 4533992

File tree

8 files changed

+168
-0
lines changed

8 files changed

+168
-0
lines changed

packages/nest/package.json

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"name": "@stenodb/nest",
3+
"version": "0.0.0",
4+
"type": "module",
5+
"files": [
6+
"dist"
7+
],
8+
"types": "dist",
9+
"exports": {
10+
".": "./dist/index.js"
11+
},
12+
"scripts": {
13+
"dev": "tsc --watch",
14+
"build": "del-cli dist && tsc",
15+
"prepublishOnly": "pnpm build"
16+
},
17+
"dependencies": {
18+
"@nestjs/common": "^9.3.7",
19+
"@stenodb/node": "workspace:^3.1.0"
20+
},
21+
"devDependencies": {
22+
"@types/node": "18.11.19"
23+
},
24+
"peerDependencies": {
25+
"@nestjs/common": "^9.0.0"
26+
},
27+
"engines": {
28+
"node": ">=14.16"
29+
}
30+
}

packages/nest/src/config.ts

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { ConfigurableModuleBuilder } from '@nestjs/common'
2+
import type { StenoOptions } from './types.js'
3+
4+
export const {
5+
ConfigurableModuleClass,
6+
MODULE_OPTIONS_TOKEN,
7+
OPTIONS_TYPE,
8+
ASYNC_OPTIONS_TYPE
9+
} = new ConfigurableModuleBuilder<StenoOptions>()
10+
.setExtras({ isGlobal: false }, (definition, extras) => ({
11+
...definition,
12+
global: extras.isGlobal
13+
}))
14+
.build()

packages/nest/src/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from './stenodb.module.js'
2+
export * from './stenodb.service.js'

packages/nest/src/stenodb.module.ts

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Module } from '@nestjs/common'
2+
import { ConfigurableModuleClass } from './config.js'
3+
import { StenoService } from './stenodb.service.js'
4+
5+
@Module({
6+
providers: [StenoService],
7+
exports: [StenoService]
8+
})
9+
export class StenoModule extends ConfigurableModuleClass {}

packages/nest/src/stenodb.service.ts

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { Inject, Injectable } from '@nestjs/common'
2+
import { AsyncAdapter, NodeProvider, SyncAdapter } from '@stenodb/node'
3+
import { MODULE_OPTIONS_TOKEN, OPTIONS_TYPE } from './config.js'
4+
import type { Steno } from '@stenodb/node/types'
5+
6+
@Injectable()
7+
export class StenoService {
8+
private readonly provider: NodeProvider
9+
10+
constructor(
11+
@Inject(MODULE_OPTIONS_TOKEN) private readonly options: typeof OPTIONS_TYPE
12+
) {
13+
this.provider = new NodeProvider(options.path)
14+
}
15+
16+
create<T>(
17+
name: string,
18+
entity: Steno.Entity<T>,
19+
initialData?: T
20+
): Steno.NodeProvider<T> {
21+
const adapter = new SyncAdapter(name, entity, initialData)
22+
const db = this.provider.createSync(adapter)
23+
db.read()
24+
return db
25+
}
26+
27+
async createAsync<T>(
28+
name: string,
29+
entity: Steno.Entity<T>,
30+
initialData?: T
31+
): Promise<Steno.NodeProvider<T>> {
32+
const adapter = new AsyncAdapter(name, entity, initialData)
33+
const db = this.provider.createAsync(adapter)
34+
await db.read()
35+
return db
36+
}
37+
}

packages/nest/src/types.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export interface StenoOptions {
2+
path: string
3+
}

packages/nest/tsconfig.json

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"extends": "@crashmax/tsconfig",
3+
"compilerOptions": {
4+
"moduleResolution": "NodeNext",
5+
"outDir": "dist",
6+
"experimentalDecorators": true,
7+
"emitDecoratorMetadata": true
8+
},
9+
"include": [
10+
"src"
11+
]
12+
}

pnpm-lock.yaml

+61
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)