Skip to content

Commit c2a2388

Browse files
committed
feat(nestjs-mikro-orm-request-context): init
1 parent 3663a7d commit c2a2388

File tree

8 files changed

+145
-0
lines changed

8 files changed

+145
-0
lines changed

.pnp.cjs

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{
2+
"name": "@atls/nestjs-mikro-orm-request-context",
3+
"version": "0.0.0",
4+
"license": "BSD-3-Clause",
5+
"type": "module",
6+
"exports": {
7+
"./package.json": "./package.json",
8+
".": "./src/index.ts"
9+
},
10+
"main": "src/index.ts",
11+
"files": [
12+
"dist"
13+
],
14+
"scripts": {
15+
"build": "yarn library build",
16+
"prepack": "yarn run build",
17+
"postpack": "rm -rf dist"
18+
},
19+
"devDependencies": {
20+
"@mikro-orm/core": "5.7.12",
21+
"@nestjs/common": "10.0.5",
22+
"@nestjs/core": "10.0.5",
23+
"reflect-metadata": "0.2.2",
24+
"rxjs": "7.8.1"
25+
},
26+
"peerDependencies": {
27+
"@mikro-orm/core": "^5",
28+
"@nestjs/common": "^10",
29+
"@nestjs/core": "^10",
30+
"reflect-metadata": "^0.2",
31+
"rxjs": "^7"
32+
},
33+
"publishConfig": {
34+
"exports": {
35+
"./package.json": "./package.json",
36+
".": {
37+
"import": "./dist/index.js",
38+
"types": "./dist/index.d.ts",
39+
"default": "./dist/index.js"
40+
}
41+
},
42+
"main": "dist/index.js",
43+
"typings": "dist/index.d.ts"
44+
}
45+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from './interceptors/index.js'
2+
export * from './module/index.js'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './mikro-orm-request-context.interceptor.js'
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import type { NestInterceptor } from '@nestjs/common'
2+
import type { ExecutionContext } from '@nestjs/common'
3+
import type { CallHandler } from '@nestjs/common'
4+
5+
import { RequestContext } from '@mikro-orm/core'
6+
import { MikroORM } from '@mikro-orm/core'
7+
import { Injectable } from '@nestjs/common'
8+
import { Observable } from 'rxjs'
9+
10+
@Injectable()
11+
export class MikroORMRequestContextInterceptor implements NestInterceptor {
12+
constructor(private readonly orm: MikroORM) {}
13+
14+
intercept(_: ExecutionContext, next: CallHandler): Observable<any> {
15+
return new Observable((subscriber) => {
16+
RequestContext.createAsync(
17+
this.orm.em,
18+
async () =>
19+
new Promise<void>((resolve) => {
20+
next.handle().subscribe(
21+
(result) => {
22+
subscriber.next(result)
23+
subscriber.complete()
24+
resolve()
25+
},
26+
(error) => {
27+
subscriber.error(error)
28+
resolve()
29+
}
30+
)
31+
})
32+
)
33+
})
34+
}
35+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './mikro-orm-request-context.module.js'
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import type { DynamicModule } from '@nestjs/common'
2+
3+
import { MikroORM } from '@mikro-orm/core'
4+
import { Module } from '@nestjs/common'
5+
import { APP_INTERCEPTOR } from '@nestjs/core'
6+
7+
import { MikroORMRequestContextInterceptor } from '../interceptors/index.js'
8+
9+
@Module({})
10+
export class MikroORMRequestContextModule {
11+
static forInterceptor(options = {}): DynamicModule {
12+
return {
13+
...options,
14+
module: MikroORMRequestContextModule,
15+
providers: [
16+
{
17+
provide: APP_INTERCEPTOR,
18+
useFactory: (orm: MikroORM) => new MikroORMRequestContextInterceptor(orm),
19+
inject: [MikroORM],
20+
},
21+
],
22+
}
23+
}
24+
}

yarn.lock

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -873,6 +873,24 @@ __metadata:
873873
languageName: unknown
874874
linkType: soft
875875

876+
"@atls/nestjs-mikro-orm-request-context@workspace:packages/nestjs-mikro-orm-request-context":
877+
version: 0.0.0-use.local
878+
resolution: "@atls/nestjs-mikro-orm-request-context@workspace:packages/nestjs-mikro-orm-request-context"
879+
dependencies:
880+
"@mikro-orm/core": "npm:5.7.12"
881+
"@nestjs/common": "npm:10.0.5"
882+
"@nestjs/core": "npm:10.0.5"
883+
reflect-metadata: "npm:0.2.2"
884+
rxjs: "npm:7.8.1"
885+
peerDependencies:
886+
"@mikro-orm/core": ^5
887+
"@nestjs/common": ^10
888+
"@nestjs/core": ^10
889+
reflect-metadata: ^0.2
890+
rxjs: ^7
891+
languageName: unknown
892+
linkType: soft
893+
876894
"@atls/nestjs-proto-types@workspace:*, @atls/nestjs-proto-types@workspace:packages/nestjs-proto-types":
877895
version: 0.0.0-use.local
878896
resolution: "@atls/nestjs-proto-types@workspace:packages/nestjs-proto-types"

0 commit comments

Comments
 (0)