@nest-boot/request-context 7.7.6 → 8.0.0-beta.1
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 -57
- package/dist/create-request-context.decorator.js +3 -59
- package/dist/create-request-context.decorator.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +7 -23
- package/dist/index.js.map +1 -1
- package/dist/repl.d.ts +0 -41
- package/dist/repl.js +23 -100
- package/dist/repl.js.map +1 -1
- package/dist/request-context.constants.d.ts +0 -22
- package/dist/request-context.constants.js +2 -27
- package/dist/request-context.constants.js.map +1 -1
- package/dist/request-context.d.ts +0 -296
- package/dist/request-context.interceptor.d.ts +0 -33
- package/dist/request-context.interceptor.js +11 -49
- package/dist/request-context.interceptor.js.map +1 -1
- package/dist/request-context.js +12 -265
- package/dist/request-context.js.map +1 -1
- package/dist/request-context.middleware.d.ts +0 -27
- package/dist/request-context.middleware.js +11 -41
- package/dist/request-context.middleware.js.map +1 -1
- package/dist/request-context.module.d.ts +1 -42
- package/dist/request-context.module.js +18 -60
- package/dist/request-context.module.js.map +1 -1
- package/package.json +33 -21
- package/dist/request-context.interceptor.spec.d.ts +0 -1
- package/dist/request-context.interceptor.spec.js +0 -247
- package/dist/request-context.interceptor.spec.js.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nest-boot/request-context",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.0-beta.1",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/nest-boot/nest-boot.git",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
},
|
|
15
15
|
"homepage": "",
|
|
16
16
|
"license": "MIT",
|
|
17
|
-
"main": "dist/index.js",
|
|
18
|
-
"types": "dist/index.d.ts",
|
|
17
|
+
"main": "./dist/index.js",
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
19
|
"directories": {
|
|
20
20
|
"lib": "dist"
|
|
21
21
|
},
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
"dist"
|
|
24
24
|
],
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@nestjs/common": "^
|
|
27
|
-
"@nestjs/core": "^
|
|
26
|
+
"@nestjs/common": "^12.0.1",
|
|
27
|
+
"@nestjs/core": "^12.0.1",
|
|
28
28
|
"@types/express": "^5.0.3",
|
|
29
|
-
"@types/
|
|
30
|
-
"@
|
|
29
|
+
"@types/node": "^26.0.0",
|
|
30
|
+
"@vitest/coverage-v8": "^4.1.11",
|
|
31
31
|
"eslint": "^9.39.3",
|
|
32
32
|
"express": "^5.1.0",
|
|
33
|
-
"jest": "^29.7.0",
|
|
34
33
|
"reflect-metadata": "^0.2.2",
|
|
35
34
|
"rxjs": "^7.8.2",
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"@nest-boot/
|
|
40
|
-
"@nest-boot/
|
|
41
|
-
"@nest-boot/
|
|
35
|
+
"typescript": "^6.0.3",
|
|
36
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
37
|
+
"vitest": "^4.1.11",
|
|
38
|
+
"@nest-boot/eslint-config": "^8.0.0-beta.1",
|
|
39
|
+
"@nest-boot/eslint-plugin": "^8.0.0-beta.1",
|
|
40
|
+
"@nest-boot/middleware": "^8.0.0-beta.1",
|
|
41
|
+
"@nest-boot/tsconfig": "^8.0.0-beta.1"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
|
-
"@
|
|
45
|
-
"@nestjs/
|
|
46
|
-
"@nestjs/core": "^11.0.0",
|
|
44
|
+
"@nestjs/common": "^12.0.0",
|
|
45
|
+
"@nestjs/core": "^12.0.0",
|
|
47
46
|
"express": "^5.0.0",
|
|
48
47
|
"reflect-metadata": "^0.2.2",
|
|
49
|
-
"rxjs": "^7.0.0"
|
|
48
|
+
"rxjs": "^7.0.0",
|
|
49
|
+
"@nest-boot/middleware": "^8.0.0-beta.1"
|
|
50
50
|
},
|
|
51
51
|
"publishConfig": {
|
|
52
52
|
"access": "public"
|
|
@@ -57,14 +57,26 @@
|
|
|
57
57
|
"eslint --fix"
|
|
58
58
|
]
|
|
59
59
|
},
|
|
60
|
-
"
|
|
61
|
-
|
|
60
|
+
"type": "module",
|
|
61
|
+
"engines": {
|
|
62
|
+
"node": ">=26.0.0"
|
|
63
|
+
},
|
|
64
|
+
"exports": {
|
|
65
|
+
".": {
|
|
66
|
+
"types": "./dist/index.d.ts",
|
|
67
|
+
"import": "./dist/index.js"
|
|
68
|
+
},
|
|
69
|
+
"./package.json": "./package.json"
|
|
62
70
|
},
|
|
63
71
|
"scripts": {
|
|
64
72
|
"build": "tsc -p tsconfig.build.json",
|
|
65
73
|
"clean": "rm -rf .nx && rm -rf node_modules && rm -rf dist",
|
|
66
74
|
"dev": "tsc -w -p tsconfig.build.json",
|
|
67
75
|
"lint": "eslint \"{src,test}/**/*.ts\"",
|
|
68
|
-
"lint:fix": "eslint \"{src,test}/**/*.ts\" --fix"
|
|
76
|
+
"lint:fix": "eslint \"{src,test}/**/*.ts\" --fix",
|
|
77
|
+
"test": "vitest run",
|
|
78
|
+
"test:cov": "vitest run --coverage",
|
|
79
|
+
"test:watch": "vitest",
|
|
80
|
+
"test:debug": "vitest --inspect-brk --no-file-parallelism"
|
|
69
81
|
}
|
|
70
82
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const rxjs_1 = require("rxjs");
|
|
4
|
-
const request_context_1 = require("./request-context");
|
|
5
|
-
const request_context_interceptor_1 = require("./request-context.interceptor");
|
|
6
|
-
describe("RequestContextInterceptor", () => {
|
|
7
|
-
const interceptor = new request_context_interceptor_1.RequestContextInterceptor();
|
|
8
|
-
it("reuses an active request context", async () => {
|
|
9
|
-
const id = "active-context";
|
|
10
|
-
await request_context_1.RequestContext.run(new request_context_1.RequestContext({ id, type: "test" }), async () => {
|
|
11
|
-
const result = await (0, rxjs_1.lastValueFrom)(interceptor.intercept(createExecutionContext("ignored"), {
|
|
12
|
-
handle: () => (0, rxjs_1.of)(request_context_1.RequestContext.id),
|
|
13
|
-
}));
|
|
14
|
-
expect(result).toBe(id);
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
it("keeps the request lifecycle active through delayed emissions", async () => {
|
|
18
|
-
const id = "delayed-emission";
|
|
19
|
-
let lifecycleActive = false;
|
|
20
|
-
request_context_1.RequestContext.registerMiddleware("interceptor-delayed-emission-test", async (context, next) => {
|
|
21
|
-
if (context.id !== id) {
|
|
22
|
-
return await next();
|
|
23
|
-
}
|
|
24
|
-
lifecycleActive = true;
|
|
25
|
-
try {
|
|
26
|
-
return await next();
|
|
27
|
-
}
|
|
28
|
-
finally {
|
|
29
|
-
lifecycleActive = false;
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
const result = await (0, rxjs_1.lastValueFrom)(interceptor.intercept(createExecutionContext(id), createCallHandler(new rxjs_1.Observable((subscriber) => {
|
|
33
|
-
setImmediate(() => {
|
|
34
|
-
subscriber.next({
|
|
35
|
-
id: request_context_1.RequestContext.id,
|
|
36
|
-
lifecycleActive,
|
|
37
|
-
});
|
|
38
|
-
subscriber.complete();
|
|
39
|
-
});
|
|
40
|
-
}))));
|
|
41
|
-
expect(result).toEqual({ id, lifecycleActive: true });
|
|
42
|
-
expect(lifecycleActive).toBe(false);
|
|
43
|
-
});
|
|
44
|
-
it("forwards request lifecycle rejection", async () => {
|
|
45
|
-
const id = "lifecycle-rejection";
|
|
46
|
-
const expected = new Error("request lifecycle failed");
|
|
47
|
-
request_context_1.RequestContext.registerMiddleware("interceptor-lifecycle-rejection-test", async (context, next) => {
|
|
48
|
-
const result = await next();
|
|
49
|
-
if (context.id === id) {
|
|
50
|
-
throw expected;
|
|
51
|
-
}
|
|
52
|
-
return result;
|
|
53
|
-
});
|
|
54
|
-
await expect((0, rxjs_1.lastValueFrom)(interceptor.intercept(createExecutionContext(id), createCallHandler((0, rxjs_1.of)("value"))))).rejects.toBe(expected);
|
|
55
|
-
});
|
|
56
|
-
it("forwards source errors after finishing the request lifecycle", async () => {
|
|
57
|
-
const id = "source-error";
|
|
58
|
-
const expected = new Error("source failed");
|
|
59
|
-
let lifecycleFinished = false;
|
|
60
|
-
request_context_1.RequestContext.registerMiddleware("interceptor-source-error-test", async (context, next) => {
|
|
61
|
-
try {
|
|
62
|
-
return await next();
|
|
63
|
-
}
|
|
64
|
-
finally {
|
|
65
|
-
if (context.id === id) {
|
|
66
|
-
lifecycleFinished = true;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
await expect((0, rxjs_1.lastValueFrom)(interceptor.intercept(createExecutionContext(id), createCallHandler(new rxjs_1.Observable((subscriber) => {
|
|
71
|
-
setImmediate(() => {
|
|
72
|
-
subscriber.error(expected);
|
|
73
|
-
});
|
|
74
|
-
}))))).rejects.toBe(expected);
|
|
75
|
-
expect(lifecycleFinished).toBe(true);
|
|
76
|
-
});
|
|
77
|
-
it("unsubscribes the source and finishes the lifecycle on teardown", async () => {
|
|
78
|
-
const id = "subscription-teardown";
|
|
79
|
-
let lifecycleFinished = false;
|
|
80
|
-
let sourceTornDown = false;
|
|
81
|
-
let markSourceSubscribed;
|
|
82
|
-
let markLifecycleFinished;
|
|
83
|
-
const sourceSubscribed = new Promise((resolve) => {
|
|
84
|
-
markSourceSubscribed = resolve;
|
|
85
|
-
});
|
|
86
|
-
const lifecycleFinalized = new Promise((resolve) => {
|
|
87
|
-
markLifecycleFinished = resolve;
|
|
88
|
-
});
|
|
89
|
-
request_context_1.RequestContext.registerMiddleware("interceptor-subscription-teardown-test", async (context, next) => {
|
|
90
|
-
try {
|
|
91
|
-
return await next();
|
|
92
|
-
}
|
|
93
|
-
finally {
|
|
94
|
-
if (context.id === id) {
|
|
95
|
-
lifecycleFinished = true;
|
|
96
|
-
markLifecycleFinished();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
const subscription = interceptor
|
|
101
|
-
.intercept(createExecutionContext(id), createCallHandler(new rxjs_1.Observable(() => {
|
|
102
|
-
markSourceSubscribed();
|
|
103
|
-
return () => {
|
|
104
|
-
sourceTornDown = true;
|
|
105
|
-
};
|
|
106
|
-
})))
|
|
107
|
-
.subscribe();
|
|
108
|
-
await sourceSubscribed;
|
|
109
|
-
await new Promise((resolve) => setImmediate(resolve));
|
|
110
|
-
try {
|
|
111
|
-
expect(lifecycleFinished).toBe(false);
|
|
112
|
-
}
|
|
113
|
-
finally {
|
|
114
|
-
subscription.unsubscribe();
|
|
115
|
-
}
|
|
116
|
-
await lifecycleFinalized;
|
|
117
|
-
expect(sourceTornDown).toBe(true);
|
|
118
|
-
expect(lifecycleFinished).toBe(true);
|
|
119
|
-
});
|
|
120
|
-
it("stops a synchronous source when the downstream subscriber closes", async () => {
|
|
121
|
-
const id = "synchronous-teardown";
|
|
122
|
-
let lifecycleFinished = false;
|
|
123
|
-
let produced = 0;
|
|
124
|
-
let markLifecycleFinished;
|
|
125
|
-
const lifecycleFinalized = new Promise((resolve) => {
|
|
126
|
-
markLifecycleFinished = resolve;
|
|
127
|
-
});
|
|
128
|
-
request_context_1.RequestContext.registerMiddleware("interceptor-synchronous-teardown-test", async (context, next) => {
|
|
129
|
-
try {
|
|
130
|
-
return await next();
|
|
131
|
-
}
|
|
132
|
-
finally {
|
|
133
|
-
if (context.id === id) {
|
|
134
|
-
lifecycleFinished = true;
|
|
135
|
-
markLifecycleFinished();
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
const result = await (0, rxjs_1.lastValueFrom)(interceptor
|
|
140
|
-
.intercept(createExecutionContext(id), createCallHandler(new rxjs_1.Observable((subscriber) => {
|
|
141
|
-
for (const value of [1, 2, 3]) {
|
|
142
|
-
if (subscriber.closed) {
|
|
143
|
-
break;
|
|
144
|
-
}
|
|
145
|
-
produced++;
|
|
146
|
-
subscriber.next(value);
|
|
147
|
-
}
|
|
148
|
-
subscriber.complete();
|
|
149
|
-
})))
|
|
150
|
-
.pipe((0, rxjs_1.take)(1)));
|
|
151
|
-
await lifecycleFinalized;
|
|
152
|
-
expect(result).toBe(1);
|
|
153
|
-
expect(produced).toBe(1);
|
|
154
|
-
expect(lifecycleFinished).toBe(true);
|
|
155
|
-
});
|
|
156
|
-
it("finishes the lifecycle when source teardown throws", async () => {
|
|
157
|
-
const id = "throwing-teardown";
|
|
158
|
-
const expected = new Error("source teardown failed");
|
|
159
|
-
let lifecycleFinished = false;
|
|
160
|
-
request_context_1.RequestContext.registerMiddleware("interceptor-throwing-teardown-test", async (context, next) => {
|
|
161
|
-
try {
|
|
162
|
-
return await next();
|
|
163
|
-
}
|
|
164
|
-
finally {
|
|
165
|
-
if (context.id === id) {
|
|
166
|
-
lifecycleFinished = true;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
const subscription = interceptor
|
|
171
|
-
.intercept(createExecutionContext(id), createCallHandler(new rxjs_1.Observable(() => {
|
|
172
|
-
return () => {
|
|
173
|
-
throw expected;
|
|
174
|
-
};
|
|
175
|
-
})))
|
|
176
|
-
.subscribe();
|
|
177
|
-
await new Promise((resolve) => setImmediate(resolve));
|
|
178
|
-
expect(() => {
|
|
179
|
-
subscription.unsubscribe();
|
|
180
|
-
}).toThrow("source teardown failed");
|
|
181
|
-
await new Promise((resolve) => setImmediate(resolve));
|
|
182
|
-
expect(lifecycleFinished).toBe(true);
|
|
183
|
-
});
|
|
184
|
-
it("does not start the handler after cancellation during lifecycle startup", async () => {
|
|
185
|
-
const id = "cancelled-startup";
|
|
186
|
-
let continueLifecycle;
|
|
187
|
-
let markMiddlewareEntered;
|
|
188
|
-
let markMiddlewareFinished;
|
|
189
|
-
const lifecycleBarrier = new Promise((resolve) => {
|
|
190
|
-
continueLifecycle = resolve;
|
|
191
|
-
});
|
|
192
|
-
const middlewareEntered = new Promise((resolve) => {
|
|
193
|
-
markMiddlewareEntered = resolve;
|
|
194
|
-
});
|
|
195
|
-
const middlewareFinished = new Promise((resolve) => {
|
|
196
|
-
markMiddlewareFinished = resolve;
|
|
197
|
-
});
|
|
198
|
-
request_context_1.RequestContext.registerMiddleware("interceptor-cancelled-startup-test", async (context, next) => {
|
|
199
|
-
if (context.id !== id) {
|
|
200
|
-
return await next();
|
|
201
|
-
}
|
|
202
|
-
markMiddlewareEntered();
|
|
203
|
-
try {
|
|
204
|
-
await lifecycleBarrier;
|
|
205
|
-
return await next();
|
|
206
|
-
}
|
|
207
|
-
finally {
|
|
208
|
-
markMiddlewareFinished();
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
const handle = jest.fn(() => (0, rxjs_1.of)("value"));
|
|
212
|
-
const handler = { handle };
|
|
213
|
-
const subscription = interceptor
|
|
214
|
-
.intercept(createExecutionContext(id), handler)
|
|
215
|
-
.subscribe();
|
|
216
|
-
await middlewareEntered;
|
|
217
|
-
subscription.unsubscribe();
|
|
218
|
-
continueLifecycle();
|
|
219
|
-
await middlewareFinished;
|
|
220
|
-
expect(handle).not.toHaveBeenCalled();
|
|
221
|
-
});
|
|
222
|
-
it("forwards a synchronous handler error", async () => {
|
|
223
|
-
const expected = new Error("handler failed synchronously");
|
|
224
|
-
await expect((0, rxjs_1.lastValueFrom)(interceptor.intercept(createExecutionContext("handler-error"), {
|
|
225
|
-
handle: () => {
|
|
226
|
-
throw expected;
|
|
227
|
-
},
|
|
228
|
-
}))).rejects.toBe(expected);
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
function createCallHandler(observable) {
|
|
232
|
-
return {
|
|
233
|
-
handle: () => observable,
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
function createExecutionContext(id) {
|
|
237
|
-
const request = {
|
|
238
|
-
get: (name) => (name === "x-request-id" ? id : undefined),
|
|
239
|
-
};
|
|
240
|
-
return {
|
|
241
|
-
getType: () => "http",
|
|
242
|
-
switchToHttp: () => ({
|
|
243
|
-
getRequest: () => request,
|
|
244
|
-
}),
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
//# sourceMappingURL=request-context.interceptor.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-context.interceptor.spec.js","sourceRoot":"","sources":["../src/request-context.interceptor.spec.ts"],"names":[],"mappings":"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"}
|