@vnodes/nestjs-common 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -0
- package/bin/version.mjs +12 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/interceptors/cache-evict.interceptor.d.ts +13 -0
- package/dist/lib/interceptors/cache-evict.interceptor.d.ts.map +1 -0
- package/dist/lib/interceptors/cache-evict.interceptor.js +25 -0
- package/dist/lib/interceptors/cache-evict.interceptor.js.map +1 -0
- package/dist/lib/interceptors/emit-response.interceptor.d.ts +15 -0
- package/dist/lib/interceptors/emit-response.interceptor.d.ts.map +1 -0
- package/dist/lib/interceptors/emit-response.interceptor.js +35 -0
- package/dist/lib/interceptors/emit-response.interceptor.js.map +1 -0
- package/dist/lib/modules/common.module.d.ts +6 -0
- package/dist/lib/modules/common.module.d.ts.map +1 -0
- package/dist/lib/modules/common.module.js +87 -0
- package/dist/lib/modules/common.module.js.map +1 -0
- package/package.json +67 -0
package/README.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+

|
|
2
|
+

|
|
3
|
+

|
|
4
|
+

|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<img srcset="./assets/favicon.png, https://vnodes.github.io/vnodes/libs/nestjs-common/assets/favicon.png" alt="Logo" width="200" height="200" style="border-radius: 100%"/>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
## @vnodes/nestjs-common
|
|
12
|
+
|
|
13
|
+
@vnodes/nestjs-common
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pnpm add @vnodes/nestjs-common
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 💖 Support My Work
|
|
22
|
+
|
|
23
|
+
If you find my open-source contributions or the **@vnodes/nestjs-common** project helpful, consider supporting my work. Your sponsorship helps me maintain these projects and explore new enterprise patterns.
|
|
24
|
+
|
|
25
|
+
[](https://cash.app/$puqlib)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 🤝 Connect with Me
|
|
30
|
+
|
|
31
|
+
<p align="left">
|
|
32
|
+
<a href="mailto:robert.brightline+vnodes-nestjs-common@gmail.com">
|
|
33
|
+
<img src="https://img.shields.io/badge/Email-D14836?style=for-the-badge&logo=gmail&logoColor=white" />
|
|
34
|
+
</a>
|
|
35
|
+
</p>
|
package/bin/version.mjs
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = dirname(__filename);
|
|
9
|
+
const packageJsonPath = join(__dirname, '..', 'package.json');
|
|
10
|
+
const packageJson = readFileSync(packageJsonPath, { encoding: 'utf-8' });
|
|
11
|
+
const version = JSON.parse(packageJson).version;
|
|
12
|
+
console.log(version);
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,+CAA+C,CAAC;AAC9D,cAAc,iDAAiD,CAAC;AAChE,cAAc,gCAAgC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// @index(['./**/*.ts', '!./**/*.{spec,test}.ts'], f => `export * from '${f.path}.js'`)
|
|
2
|
+
export * from './lib/interceptors/cache-evict.interceptor.js';
|
|
3
|
+
export * from './lib/interceptors/emit-response.interceptor.js';
|
|
4
|
+
export * from './lib/modules/common.module.js';
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// @index(['./**/*.ts', '!./**/*.{spec,test}.ts'], f => `export * from '${f.path}.js'`)\nexport * from './lib/interceptors/cache-evict.interceptor.js';\nexport * from './lib/interceptors/emit-response.interceptor.js';\nexport * from './lib/modules/common.module.js';\n"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,cAAc,gDAAgD;AAC9D,cAAc,kDAAkD;AAChE,cAAc,iCAAiC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** biome-ignore-all lint/style/useImportType: DI */
|
|
2
|
+
import { Cache } from '@vnodes/nestjs/cache-manager';
|
|
3
|
+
import { type CallHandler, type ExecutionContext, type NestInterceptor } from '@vnodes/nestjs/common';
|
|
4
|
+
import { type Observable } from '@vnodes/nestjs/rxjs';
|
|
5
|
+
/**
|
|
6
|
+
* Clear cache when create/update operations happen
|
|
7
|
+
*/
|
|
8
|
+
export declare class CacheEvictInterceptor<T> implements NestInterceptor<T> {
|
|
9
|
+
private cacheManager;
|
|
10
|
+
constructor(cacheManager: Cache);
|
|
11
|
+
intercept(_context: ExecutionContext, next: CallHandler): Observable<T>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=cache-evict.interceptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-evict.interceptor.d.ts","sourceRoot":"","sources":["../../../src/lib/interceptors/cache-evict.interceptor.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAc,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClH,OAAO,EAAE,KAAK,UAAU,EAAO,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,qBACa,qBAAqB,CAAC,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,YAAY;gBAAZ,YAAY,EAAE,KAAK;IAEvC,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC;CAO1E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { _ as _ts_decorate } from "@swc/helpers/_/_ts_decorate";
|
|
2
|
+
import { _ as _ts_metadata } from "@swc/helpers/_/_ts_metadata";
|
|
3
|
+
/** biome-ignore-all lint/style/useImportType: DI */ import { Cache } from '@vnodes/nestjs/cache-manager';
|
|
4
|
+
import { Injectable } from '@vnodes/nestjs/common';
|
|
5
|
+
import { tap } from '@vnodes/nestjs/rxjs';
|
|
6
|
+
export class CacheEvictInterceptor {
|
|
7
|
+
cacheManager;
|
|
8
|
+
constructor(cacheManager){
|
|
9
|
+
this.cacheManager = cacheManager;
|
|
10
|
+
}
|
|
11
|
+
intercept(_context, next) {
|
|
12
|
+
return next.handle().pipe(tap(async ()=>{
|
|
13
|
+
await this.cacheManager.clear();
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
CacheEvictInterceptor = _ts_decorate([
|
|
18
|
+
Injectable(),
|
|
19
|
+
_ts_metadata("design:type", Function),
|
|
20
|
+
_ts_metadata("design:paramtypes", [
|
|
21
|
+
typeof Cache === "undefined" ? Object : Cache
|
|
22
|
+
])
|
|
23
|
+
], CacheEvictInterceptor);
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=cache-evict.interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/interceptors/cache-evict.interceptor.ts"],"sourcesContent":["/** biome-ignore-all lint/style/useImportType: DI */\n\nimport { Cache } from '@vnodes/nestjs/cache-manager';\nimport { type CallHandler, type ExecutionContext, Injectable, type NestInterceptor } from '@vnodes/nestjs/common';\nimport { type Observable, tap } from '@vnodes/nestjs/rxjs';\n\n/**\n * Clear cache when create/update operations happen\n */\n@Injectable()\nexport class CacheEvictInterceptor<T> implements NestInterceptor<T> {\n constructor(private cacheManager: Cache) {}\n\n intercept(_context: ExecutionContext, next: CallHandler): Observable<T> {\n return next.handle().pipe(\n tap(async () => {\n await this.cacheManager.clear();\n }),\n );\n }\n}\n"],"names":["Cache","Injectable","tap","CacheEvictInterceptor","cacheManager","intercept","_context","next","handle","pipe","clear"],"mappings":";;AAAA,kDAAkD,GAElD,SAASA,KAAK,QAAQ,+BAA+B;AACrD,SAAkDC,UAAU,QAA8B,wBAAwB;AAClH,SAA0BC,GAAG,QAAQ,sBAAsB;AAM3D,OAAO,MAAMC;;IACT,YAAY,AAAQC,YAAmB,CAAE;aAArBA,eAAAA;IAAsB;IAE1CC,UAAUC,QAA0B,EAAEC,IAAiB,EAAiB;QACpE,OAAOA,KAAKC,MAAM,GAAGC,IAAI,CACrBP,IAAI;YACA,MAAM,IAAI,CAACE,YAAY,CAACM,KAAK;QACjC;IAER;AACJ"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** biome-ignore-all lint/style/useImportType: DI */
|
|
2
|
+
import { type CallHandler, type ExecutionContext, type NestInterceptor } from '@vnodes/nestjs/common';
|
|
3
|
+
import { Reflector } from '@vnodes/nestjs/core';
|
|
4
|
+
import { EventEmitter2 } from '@vnodes/nestjs/event-emitter';
|
|
5
|
+
import { type Observable } from '@vnodes/nestjs/rxjs';
|
|
6
|
+
/**
|
|
7
|
+
* Emit response if the method has EmitResponse decorator
|
|
8
|
+
*/
|
|
9
|
+
export declare class EmitResponseInterceptor<T> implements NestInterceptor<T> {
|
|
10
|
+
private readonly reflector;
|
|
11
|
+
private readonly emitter;
|
|
12
|
+
constructor(reflector: Reflector, emitter: EventEmitter2);
|
|
13
|
+
intercept(context: ExecutionContext, next: CallHandler): Observable<T>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=emit-response.interceptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-response.interceptor.d.ts","sourceRoot":"","sources":["../../../src/lib/interceptors/emit-response.interceptor.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAGpD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAc,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAO,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,qBACa,uBAAuB,CAAC,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IAE7D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,aAAa;IAG3C,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC;CAYzE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { _ as _ts_decorate } from "@swc/helpers/_/_ts_decorate";
|
|
2
|
+
import { _ as _ts_metadata } from "@swc/helpers/_/_ts_metadata";
|
|
3
|
+
/** biome-ignore-all lint/style/useImportType: DI */ import { getOperationName, getResourceName, isEmitResponse } from '@vnodes/metadata';
|
|
4
|
+
import { Injectable } from '@vnodes/nestjs/common';
|
|
5
|
+
import { Reflector } from '@vnodes/nestjs/core';
|
|
6
|
+
import { EventEmitter2 } from '@vnodes/nestjs/event-emitter';
|
|
7
|
+
import { tap } from '@vnodes/nestjs/rxjs';
|
|
8
|
+
export class EmitResponseInterceptor {
|
|
9
|
+
reflector;
|
|
10
|
+
emitter;
|
|
11
|
+
constructor(reflector, emitter){
|
|
12
|
+
this.reflector = reflector;
|
|
13
|
+
this.emitter = emitter;
|
|
14
|
+
}
|
|
15
|
+
intercept(context, next) {
|
|
16
|
+
return next.handle().pipe(tap(async (data)=>{
|
|
17
|
+
if (isEmitResponse(this.reflector, context)) {
|
|
18
|
+
const resourceName = getResourceName(this.reflector, context);
|
|
19
|
+
const operationName = getOperationName(this.reflector, context);
|
|
20
|
+
const eventName = `${resourceName}.${operationName}`;
|
|
21
|
+
this.emitter.emit(eventName, data);
|
|
22
|
+
}
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
EmitResponseInterceptor = _ts_decorate([
|
|
27
|
+
Injectable(),
|
|
28
|
+
_ts_metadata("design:type", Function),
|
|
29
|
+
_ts_metadata("design:paramtypes", [
|
|
30
|
+
typeof Reflector === "undefined" ? Object : Reflector,
|
|
31
|
+
typeof EventEmitter2 === "undefined" ? Object : EventEmitter2
|
|
32
|
+
])
|
|
33
|
+
], EmitResponseInterceptor);
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=emit-response.interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/interceptors/emit-response.interceptor.ts"],"sourcesContent":["/** biome-ignore-all lint/style/useImportType: DI */\n\nimport { getOperationName, getResourceName, isEmitResponse } from '@vnodes/metadata';\nimport { type CallHandler, type ExecutionContext, Injectable, type NestInterceptor } from '@vnodes/nestjs/common';\nimport { Reflector } from '@vnodes/nestjs/core';\nimport { EventEmitter2 } from '@vnodes/nestjs/event-emitter';\nimport { type Observable, tap } from '@vnodes/nestjs/rxjs';\n\n/**\n * Emit response if the method has EmitResponse decorator\n */\n@Injectable()\nexport class EmitResponseInterceptor<T> implements NestInterceptor<T> {\n constructor(\n private readonly reflector: Reflector,\n private readonly emitter: EventEmitter2,\n ) {}\n\n intercept(context: ExecutionContext, next: CallHandler): Observable<T> {\n return next.handle().pipe(\n tap(async (data) => {\n if (isEmitResponse(this.reflector, context)) {\n const resourceName = getResourceName(this.reflector, context);\n const operationName = getOperationName(this.reflector, context);\n const eventName = `${resourceName}.${operationName}`;\n this.emitter.emit(eventName, data);\n }\n }),\n );\n }\n}\n"],"names":["getOperationName","getResourceName","isEmitResponse","Injectable","Reflector","EventEmitter2","tap","EmitResponseInterceptor","reflector","emitter","intercept","context","next","handle","pipe","data","resourceName","operationName","eventName","emit"],"mappings":";;AAAA,kDAAkD,GAElD,SAASA,gBAAgB,EAAEC,eAAe,EAAEC,cAAc,QAAQ,mBAAmB;AACrF,SAAkDC,UAAU,QAA8B,wBAAwB;AAClH,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,aAAa,QAAQ,+BAA+B;AAC7D,SAA0BC,GAAG,QAAQ,sBAAsB;AAM3D,OAAO,MAAMC;;;IACT,YACI,AAAiBC,SAAoB,EACrC,AAAiBC,OAAsB,CACzC;aAFmBD,YAAAA;aACAC,UAAAA;IAClB;IAEHC,UAAUC,OAAyB,EAAEC,IAAiB,EAAiB;QACnE,OAAOA,KAAKC,MAAM,GAAGC,IAAI,CACrBR,IAAI,OAAOS;YACP,IAAIb,eAAe,IAAI,CAACM,SAAS,EAAEG,UAAU;gBACzC,MAAMK,eAAef,gBAAgB,IAAI,CAACO,SAAS,EAAEG;gBACrD,MAAMM,gBAAgBjB,iBAAiB,IAAI,CAACQ,SAAS,EAAEG;gBACvD,MAAMO,YAAY,GAAGF,aAAa,CAAC,EAAEC,eAAe;gBACpD,IAAI,CAACR,OAAO,CAACU,IAAI,CAACD,WAAWH;YACjC;QACJ;IAER;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.module.d.ts","sourceRoot":"","sources":["../../../src/lib/modules/common.module.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,qBAqDa,YAAY;CAAG"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { _ as _ts_decorate } from "@swc/helpers/_/_ts_decorate";
|
|
2
|
+
import { Env } from '@vnodes/env';
|
|
3
|
+
import { CacheInterceptor, CacheModule } from '@vnodes/nestjs/cache-manager';
|
|
4
|
+
import { Global, Module } from '@vnodes/nestjs/common';
|
|
5
|
+
import { ConfigModule, ConfigService } from '@vnodes/nestjs/config';
|
|
6
|
+
import { APP_GUARD, APP_INTERCEPTOR, DiscoveryModule } from '@vnodes/nestjs/core';
|
|
7
|
+
import { EventEmitterModule } from '@vnodes/nestjs/event-emitter';
|
|
8
|
+
import { ScheduleModule } from '@vnodes/nestjs/schedule';
|
|
9
|
+
import { ThrottlerGuard, ThrottlerModule } from '@vnodes/nestjs/throttler';
|
|
10
|
+
import { CacheEvictInterceptor } from '../interceptors/cache-evict.interceptor.js';
|
|
11
|
+
import { EmitResponseInterceptor } from '../interceptors/emit-response.interceptor.js';
|
|
12
|
+
export class CommonModule {
|
|
13
|
+
}
|
|
14
|
+
CommonModule = _ts_decorate([
|
|
15
|
+
Global(),
|
|
16
|
+
Module({
|
|
17
|
+
imports: [
|
|
18
|
+
DiscoveryModule,
|
|
19
|
+
ConfigModule.forRoot({
|
|
20
|
+
isGlobal: true,
|
|
21
|
+
cache: true,
|
|
22
|
+
expandVariables: true
|
|
23
|
+
}),
|
|
24
|
+
EventEmitterModule.forRoot({
|
|
25
|
+
delimiter: '.',
|
|
26
|
+
global: true
|
|
27
|
+
}),
|
|
28
|
+
ScheduleModule.forRoot(),
|
|
29
|
+
CacheModule.registerAsync({
|
|
30
|
+
isGlobal: true,
|
|
31
|
+
imports: [
|
|
32
|
+
ConfigModule
|
|
33
|
+
],
|
|
34
|
+
inject: [
|
|
35
|
+
ConfigService
|
|
36
|
+
],
|
|
37
|
+
useFactory (config) {
|
|
38
|
+
return {
|
|
39
|
+
ttl: config.get(Env.CACHE_TTL, 30_000)
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}),
|
|
43
|
+
ThrottlerModule.forRootAsync({
|
|
44
|
+
imports: [
|
|
45
|
+
ConfigModule
|
|
46
|
+
],
|
|
47
|
+
inject: [
|
|
48
|
+
ConfigService
|
|
49
|
+
],
|
|
50
|
+
useFactory: (config)=>[
|
|
51
|
+
{
|
|
52
|
+
ttl: config.get(Env.THROTTLE_TTL, 60_000),
|
|
53
|
+
limit: config.get(Env.THROTTLE_LIMIT, 200)
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
})
|
|
57
|
+
],
|
|
58
|
+
providers: [
|
|
59
|
+
{
|
|
60
|
+
provide: APP_INTERCEPTOR,
|
|
61
|
+
useClass: CacheInterceptor
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
provide: APP_INTERCEPTOR,
|
|
65
|
+
useClass: CacheEvictInterceptor
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
provide: APP_INTERCEPTOR,
|
|
69
|
+
useClass: EmitResponseInterceptor
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
provide: APP_GUARD,
|
|
73
|
+
useClass: ThrottlerGuard
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
exports: [
|
|
77
|
+
ConfigModule,
|
|
78
|
+
EventEmitterModule,
|
|
79
|
+
ScheduleModule,
|
|
80
|
+
CacheModule,
|
|
81
|
+
ThrottlerModule,
|
|
82
|
+
DiscoveryModule
|
|
83
|
+
]
|
|
84
|
+
})
|
|
85
|
+
], CommonModule);
|
|
86
|
+
|
|
87
|
+
//# sourceMappingURL=common.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/modules/common.module.ts"],"sourcesContent":["import { Env } from '@vnodes/env';\nimport { CacheInterceptor, CacheModule } from '@vnodes/nestjs/cache-manager';\nimport { Global, Module } from '@vnodes/nestjs/common';\nimport { ConfigModule, ConfigService } from '@vnodes/nestjs/config';\nimport { APP_GUARD, APP_INTERCEPTOR, DiscoveryModule } from '@vnodes/nestjs/core';\nimport { EventEmitterModule } from '@vnodes/nestjs/event-emitter';\nimport { ScheduleModule } from '@vnodes/nestjs/schedule';\nimport { ThrottlerGuard, ThrottlerModule } from '@vnodes/nestjs/throttler';\nimport { CacheEvictInterceptor } from '../interceptors/cache-evict.interceptor.js';\nimport { EmitResponseInterceptor } from '../interceptors/emit-response.interceptor.js';\n\n/**\n * Common module that provies all common modules and app interceptors, piples, and guards\n */\n@Global()\n@Module({\n imports: [\n DiscoveryModule,\n ConfigModule.forRoot({\n isGlobal: true,\n cache: true,\n expandVariables: true,\n }),\n EventEmitterModule.forRoot({ delimiter: '.', global: true }),\n ScheduleModule.forRoot(),\n CacheModule.registerAsync({\n isGlobal: true,\n imports: [ConfigModule],\n inject: [ConfigService],\n useFactory(config: ConfigService) {\n return {\n ttl: config.get<number>(Env.CACHE_TTL, 30_000),\n };\n },\n }),\n ThrottlerModule.forRootAsync({\n imports: [ConfigModule],\n inject: [ConfigService],\n useFactory: (config: ConfigService) => [\n {\n ttl: config.get<number>(Env.THROTTLE_TTL, 60_000),\n limit: config.get<number>(Env.THROTTLE_LIMIT, 200),\n },\n ],\n }),\n ],\n providers: [\n {\n provide: APP_INTERCEPTOR,\n useClass: CacheInterceptor,\n },\n\n {\n provide: APP_INTERCEPTOR,\n useClass: CacheEvictInterceptor,\n },\n {\n provide: APP_INTERCEPTOR,\n useClass: EmitResponseInterceptor,\n },\n {\n provide: APP_GUARD,\n useClass: ThrottlerGuard,\n },\n ],\n exports: [ConfigModule, EventEmitterModule, ScheduleModule, CacheModule, ThrottlerModule, DiscoveryModule],\n})\nexport class CommonModule {}\n"],"names":["Env","CacheInterceptor","CacheModule","Global","Module","ConfigModule","ConfigService","APP_GUARD","APP_INTERCEPTOR","DiscoveryModule","EventEmitterModule","ScheduleModule","ThrottlerGuard","ThrottlerModule","CacheEvictInterceptor","EmitResponseInterceptor","CommonModule","imports","forRoot","isGlobal","cache","expandVariables","delimiter","global","registerAsync","inject","useFactory","config","ttl","get","CACHE_TTL","forRootAsync","THROTTLE_TTL","limit","THROTTLE_LIMIT","providers","provide","useClass","exports"],"mappings":";AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,gBAAgB,EAAEC,WAAW,QAAQ,+BAA+B;AAC7E,SAASC,MAAM,EAAEC,MAAM,QAAQ,wBAAwB;AACvD,SAASC,YAAY,EAAEC,aAAa,QAAQ,wBAAwB;AACpE,SAASC,SAAS,EAAEC,eAAe,EAAEC,eAAe,QAAQ,sBAAsB;AAClF,SAASC,kBAAkB,QAAQ,+BAA+B;AAClE,SAASC,cAAc,QAAQ,0BAA0B;AACzD,SAASC,cAAc,EAAEC,eAAe,QAAQ,2BAA2B;AAC3E,SAASC,qBAAqB,QAAQ,6CAA6C;AACnF,SAASC,uBAAuB,QAAQ,+CAA+C;AA0DvF,OAAO,MAAMC;AAAc;;;;QAnDvBC,SAAS;YACLR;YACAJ,aAAaa,OAAO,CAAC;gBACjBC,UAAU;gBACVC,OAAO;gBACPC,iBAAiB;YACrB;YACAX,mBAAmBQ,OAAO,CAAC;gBAAEI,WAAW;gBAAKC,QAAQ;YAAK;YAC1DZ,eAAeO,OAAO;YACtBhB,YAAYsB,aAAa,CAAC;gBACtBL,UAAU;gBACVF,SAAS;oBAACZ;iBAAa;gBACvBoB,QAAQ;oBAACnB;iBAAc;gBACvBoB,YAAWC,MAAqB;oBAC5B,OAAO;wBACHC,KAAKD,OAAOE,GAAG,CAAS7B,IAAI8B,SAAS,EAAE;oBAC3C;gBACJ;YACJ;YACAjB,gBAAgBkB,YAAY,CAAC;gBACzBd,SAAS;oBAACZ;iBAAa;gBACvBoB,QAAQ;oBAACnB;iBAAc;gBACvBoB,YAAY,CAACC,SAA0B;wBACnC;4BACIC,KAAKD,OAAOE,GAAG,CAAS7B,IAAIgC,YAAY,EAAE;4BAC1CC,OAAON,OAAOE,GAAG,CAAS7B,IAAIkC,cAAc,EAAE;wBAClD;qBACH;YACL;SACH;QACDC,WAAW;YACP;gBACIC,SAAS5B;gBACT6B,UAAUpC;YACd;YAEA;gBACImC,SAAS5B;gBACT6B,UAAUvB;YACd;YACA;gBACIsB,SAAS5B;gBACT6B,UAAUtB;YACd;YACA;gBACIqB,SAAS7B;gBACT8B,UAAUzB;YACd;SACH;QACD0B,SAAS;YAACjC;YAAcK;YAAoBC;YAAgBT;YAAaW;YAAiBJ;SAAgB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vnodes/nestjs-common",
|
|
3
|
+
"version": "0.0.23",
|
|
4
|
+
"description": "@vnodes/nestjs-common",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"nestjs-common"
|
|
7
|
+
],
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "Robert Brightline",
|
|
10
|
+
"email": "robert.brightline+vnodes-nestjs-common@gmail.com",
|
|
11
|
+
"url": "https://vnodes.github.io/vnodes"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://vnodes.github.io/vnodes/libs/nestjs-common",
|
|
14
|
+
"icon": "https://vnodes.github.io/vnodes/libs/nestjs-common/assets/favicon.png",
|
|
15
|
+
"funding": [
|
|
16
|
+
"https://cash.app/$puqlib"
|
|
17
|
+
],
|
|
18
|
+
"bin": {
|
|
19
|
+
"version": "./bin/version.mjs"
|
|
20
|
+
},
|
|
21
|
+
"type": "module",
|
|
22
|
+
"main": "./dist/index.js",
|
|
23
|
+
"module": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
"./package.json": "./package.json",
|
|
27
|
+
".": {
|
|
28
|
+
"@vnodes/source": "./src/index.ts",
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"import": "./dist/index.js",
|
|
31
|
+
"default": "./dist/index.js"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist",
|
|
36
|
+
"bin",
|
|
37
|
+
"!**/*.tsbuildinfo"
|
|
38
|
+
],
|
|
39
|
+
"nx": {
|
|
40
|
+
"sourceRoot": "libs/nestjs-common/src",
|
|
41
|
+
"targets": {
|
|
42
|
+
"build": {},
|
|
43
|
+
"doc": {},
|
|
44
|
+
"lint": {}
|
|
45
|
+
},
|
|
46
|
+
"tags": [
|
|
47
|
+
"lib"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@swc/helpers": "~0.5.18"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@vnodes/env": "0.0.23",
|
|
55
|
+
"@vnodes/metadata": "0.0.23",
|
|
56
|
+
"@vnodes/nestjs": "0.0.23"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"@vnodes/env": "0.0.23",
|
|
60
|
+
"@vnodes/metadata": "0.0.23",
|
|
61
|
+
"@vnodes/nestjs": "0.0.23"
|
|
62
|
+
},
|
|
63
|
+
"publishConfig": {
|
|
64
|
+
"access": "public",
|
|
65
|
+
"tag": "latest"
|
|
66
|
+
}
|
|
67
|
+
}
|