@nest-boot/request-context 7.4.2 → 7.5.0
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/dist/create-request-context.decorator.d.ts +1 -3
- package/dist/create-request-context.decorator.js.map +1 -1
- package/dist/request-context.d.ts +11 -22
- package/dist/request-context.js +9 -19
- package/dist/request-context.js.map +1 -1
- package/dist/request-context.module.d.ts +5 -1
- package/dist/request-context.module.js +5 -1
- package/dist/request-context.module.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +22 -12
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { RequestContext } from "./request-context";
|
|
2
2
|
/**
|
|
3
3
|
* Helper type that extracts the argument types of a method.
|
|
4
|
-
* @internal
|
|
5
4
|
*/
|
|
6
|
-
type MethodArgs<T, M extends keyof T> = T[M] extends (...args: infer A) => any ? A : never;
|
|
5
|
+
export type MethodArgs<T, M extends keyof T> = T[M] extends (...args: infer A) => any ? A : never;
|
|
7
6
|
/**
|
|
8
7
|
* Method decorator that wraps the method execution in a new request context.
|
|
9
8
|
*
|
|
@@ -58,4 +57,3 @@ type MethodArgs<T, M extends keyof T> = T[M] extends (...args: infer A) => any ?
|
|
|
58
57
|
* ```
|
|
59
58
|
*/
|
|
60
59
|
export declare function CreateRequestContext<T extends object, P extends keyof T>(fn: (instance: T, ...args: MethodArgs<T, P>) => RequestContext): (_target: T, _propertyKey: P, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
61
|
-
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-request-context.decorator.js","sourceRoot":"","sources":["../src/create-request-context.decorator.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"create-request-context.decorator.js","sourceRoot":"","sources":["../src/create-request-context.decorator.ts"],"names":[],"mappings":";;AAgEA,oDAeC;AA/ED,uDAAmD;AAWnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,SAAgB,oBAAoB,CAClC,EAA8D;IAE9D,OAAO,CAAC,OAAU,EAAE,YAAe,EAAE,UAA8B,EAAE,EAAE;QACrE,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC;YAElC,UAAU,CAAC,KAAK,GAAG,UAAmB,GAAG,IAAsB;gBAC7D,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;gBAC9B,OAAO,gCAAc,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACnE,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -8,7 +8,7 @@ import { type Type } from "@nestjs/common";
|
|
|
8
8
|
* @param next - Function to call the next middleware in the chain
|
|
9
9
|
* @returns A promise resolving to the result of the middleware chain
|
|
10
10
|
*/
|
|
11
|
-
type
|
|
11
|
+
export type RequestContextMiddlewareType = <T>(ctx: RequestContext, next: () => Promise<T>) => Promise<T>;
|
|
12
12
|
/**
|
|
13
13
|
* Options for creating a new RequestContext instance.
|
|
14
14
|
*/
|
|
@@ -85,28 +85,18 @@ export declare class RequestContext {
|
|
|
85
85
|
* Values not found in this context will be looked up in the parent.
|
|
86
86
|
*/
|
|
87
87
|
readonly parent?: RequestContext;
|
|
88
|
-
/** @internal */
|
|
88
|
+
/** Internal storage map for context values. @internal */
|
|
89
89
|
private readonly container;
|
|
90
|
-
/** @internal */
|
|
90
|
+
/** Async local storage backing the request context. @internal */
|
|
91
91
|
private static readonly storage;
|
|
92
|
-
/** @internal */
|
|
92
|
+
/** Registered middleware map keyed by name. @internal */
|
|
93
93
|
private static readonly middlewares;
|
|
94
|
-
/** @internal */
|
|
94
|
+
/** Dependency graph for middleware ordering. @internal */
|
|
95
95
|
private static readonly middlewareDependencies;
|
|
96
|
-
/** @internal */
|
|
96
|
+
/** Topologically-sorted middleware execution stack. @internal */
|
|
97
97
|
private static middlewaresStack;
|
|
98
|
-
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* @param options - Configuration options for the context
|
|
102
|
-
*
|
|
103
|
-
* @example
|
|
104
|
-
* ```typescript
|
|
105
|
-
* const ctx = new RequestContext({
|
|
106
|
-
* id: 'custom-id',
|
|
107
|
-
* type: 'http',
|
|
108
|
-
* });
|
|
109
|
-
* ```
|
|
98
|
+
/** Creates a new RequestContext instance.
|
|
99
|
+
* @param options - Options for creating the request context (id, type, parent)
|
|
110
100
|
*/
|
|
111
101
|
constructor(options: RequestContextCreateOptions);
|
|
112
102
|
/**
|
|
@@ -318,10 +308,9 @@ export declare class RequestContext {
|
|
|
318
308
|
* );
|
|
319
309
|
* ```
|
|
320
310
|
*/
|
|
321
|
-
static registerMiddleware(name: string, middleware:
|
|
322
|
-
/** @internal */
|
|
311
|
+
static registerMiddleware(name: string, middleware: RequestContextMiddlewareType, dependencies?: string[]): void;
|
|
312
|
+
/** Resolves middleware dependencies via topological sort. @internal */
|
|
323
313
|
private static resolveDependencies;
|
|
324
|
-
/** @internal */
|
|
314
|
+
/** Rebuilds the middleware execution stack after registration changes. @internal */
|
|
325
315
|
private static generateMiddlewaresStack;
|
|
326
316
|
}
|
|
327
|
-
export {};
|
package/dist/request-context.js
CHANGED
|
@@ -46,21 +46,11 @@ const crypto_1 = require("crypto");
|
|
|
46
46
|
* ```
|
|
47
47
|
*/
|
|
48
48
|
class RequestContext {
|
|
49
|
-
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* @param options - Configuration options for the context
|
|
53
|
-
*
|
|
54
|
-
* @example
|
|
55
|
-
* ```typescript
|
|
56
|
-
* const ctx = new RequestContext({
|
|
57
|
-
* id: 'custom-id',
|
|
58
|
-
* type: 'http',
|
|
59
|
-
* });
|
|
60
|
-
* ```
|
|
49
|
+
/** Creates a new RequestContext instance.
|
|
50
|
+
* @param options - Options for creating the request context (id, type, parent)
|
|
61
51
|
*/
|
|
62
52
|
constructor(options) {
|
|
63
|
-
/** @internal */
|
|
53
|
+
/** Internal storage map for context values. @internal */
|
|
64
54
|
this.container = new Map();
|
|
65
55
|
this.id = options.id ?? (0, crypto_1.randomUUID)();
|
|
66
56
|
this.type = options.type;
|
|
@@ -334,7 +324,7 @@ class RequestContext {
|
|
|
334
324
|
this.middlewareDependencies.set(name, dependencies ?? []);
|
|
335
325
|
this.generateMiddlewaresStack();
|
|
336
326
|
}
|
|
337
|
-
/** @internal */
|
|
327
|
+
/** Resolves middleware dependencies via topological sort. @internal */
|
|
338
328
|
static resolveDependencies(name, resolved, seen) {
|
|
339
329
|
if (seen.has(name)) {
|
|
340
330
|
throw new Error(`Circular dependency detected: ${name}`);
|
|
@@ -348,7 +338,7 @@ class RequestContext {
|
|
|
348
338
|
}
|
|
349
339
|
resolved.add(name);
|
|
350
340
|
}
|
|
351
|
-
/** @internal */
|
|
341
|
+
/** Rebuilds the middleware execution stack after registration changes. @internal */
|
|
352
342
|
static generateMiddlewaresStack() {
|
|
353
343
|
const resolved = new Set();
|
|
354
344
|
const seen = new Set();
|
|
@@ -363,12 +353,12 @@ class RequestContext {
|
|
|
363
353
|
}
|
|
364
354
|
}
|
|
365
355
|
exports.RequestContext = RequestContext;
|
|
366
|
-
/** @internal */
|
|
356
|
+
/** Async local storage backing the request context. @internal */
|
|
367
357
|
RequestContext.storage = new async_hooks_1.AsyncLocalStorage();
|
|
368
|
-
/** @internal */
|
|
358
|
+
/** Registered middleware map keyed by name. @internal */
|
|
369
359
|
RequestContext.middlewares = new Map();
|
|
370
|
-
/** @internal */
|
|
360
|
+
/** Dependency graph for middleware ordering. @internal */
|
|
371
361
|
RequestContext.middlewareDependencies = new Map();
|
|
372
|
-
/** @internal */
|
|
362
|
+
/** Topologically-sorted middleware execution stack. @internal */
|
|
373
363
|
RequestContext.middlewaresStack = [];
|
|
374
364
|
//# sourceMappingURL=request-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-context.js","sourceRoot":"","sources":["../src/request-context.ts"],"names":[],"mappings":";;;AACA,6CAAgD;AAChD,mCAAoC;AAsCpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAa,cAAc;IAoCzB
|
|
1
|
+
{"version":3,"file":"request-context.js","sourceRoot":"","sources":["../src/request-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,10 @@ import { RequestContextMiddleware } from "./request-context.middleware";
|
|
|
39
39
|
export declare class RequestContextModule {
|
|
40
40
|
private readonly middlewareManager;
|
|
41
41
|
private readonly requestContextMiddleware;
|
|
42
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* Creates a new RequestContextModule instance.
|
|
44
|
+
* @param middlewareManager - Middleware manager for registering the context middleware
|
|
45
|
+
* @param requestContextMiddleware - The request context middleware instance
|
|
46
|
+
*/
|
|
43
47
|
constructor(middlewareManager: MiddlewareManager, requestContextMiddleware: RequestContextMiddleware);
|
|
44
48
|
}
|
|
@@ -52,7 +52,11 @@ const request_context_middleware_1 = require("./request-context.middleware");
|
|
|
52
52
|
* ```
|
|
53
53
|
*/
|
|
54
54
|
let RequestContextModule = class RequestContextModule {
|
|
55
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* Creates a new RequestContextModule instance.
|
|
57
|
+
* @param middlewareManager - Middleware manager for registering the context middleware
|
|
58
|
+
* @param requestContextMiddleware - The request context middleware instance
|
|
59
|
+
*/
|
|
56
60
|
constructor(middlewareManager, requestContextMiddleware) {
|
|
57
61
|
this.middlewareManager = middlewareManager;
|
|
58
62
|
this.requestContextMiddleware = requestContextMiddleware;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-context.module.js","sourceRoot":"","sources":["../src/request-context.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAA4E;AAC5E,2CAAgD;AAChD,uCAA+C;AAE/C,+EAA0E;AAC1E,6EAAwE;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAaI,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B
|
|
1
|
+
{"version":3,"file":"request-context.module.js","sourceRoot":"","sources":["../src/request-context.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAA4E;AAC5E,2CAAgD;AAChD,uCAA+C;AAE/C,+EAA0E;AAC1E,6EAAwE;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAaI,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B;;;;OAIG;IACH,YACmB,iBAAoC,EACpC,wBAAkD;QADlD,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,6BAAwB,GAAxB,wBAAwB,CAA0B;QAEnE,IAAI,CAAC,iBAAiB;aACnB,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC;aACpC,0BAA0B,EAAE;aAC5B,SAAS,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;CACF,CAAA;AAfY,oDAAoB;+BAApB,oBAAoB;IAZhC,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,6BAAgB,CAAC;QAC3B,SAAS,EAAE;YACT,qDAAwB;YACxB;gBACE,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE,uDAAyB;aACpC;SACF;QACD,OAAO,EAAE,CAAC,qDAAwB,CAAC;KACpC,CAAC;qCAQsC,8BAAiB;QACV,qDAAwB;GAR1D,oBAAoB,CAehC"}
|