1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const request_constants_1 = require("../router/request/request-constants");
|
4 | function createContextId() {
|
5 | /**
|
6 | * We are generating random identifier to track asynchronous
|
7 | * execution context. An identifier does not have to be neither unique
|
8 | * nor unpredictable because WeakMap uses objects as keys (reference comparison).
|
9 | * Thus, even though identifier number might be equal, WeakMap would properly
|
10 | * associate asynchronous context with its internal map values using object reference.
|
11 | * Object is automatically removed once request has been processed (closure).
|
12 | */
|
13 | return { id: Math.random() };
|
14 | }
|
15 | exports.createContextId = createContextId;
|
16 | class ContextIdFactory {
|
17 | /**
|
18 | * Generates a context identifier based on the request object.
|
19 | */
|
20 | static create() {
|
21 | return createContextId();
|
22 | }
|
23 | /**
|
24 | * Generates a random identifier to track asynchronous execution context.
|
25 | * @param request request object
|
26 | */
|
27 | static getByRequest(request) {
|
28 | if (!request) {
|
29 | return createContextId();
|
30 | }
|
31 | if (request[request_constants_1.REQUEST_CONTEXT_ID]) {
|
32 | return request[request_constants_1.REQUEST_CONTEXT_ID];
|
33 | }
|
34 | if (request.raw && request.raw[request_constants_1.REQUEST_CONTEXT_ID]) {
|
35 | return request.raw[request_constants_1.REQUEST_CONTEXT_ID];
|
36 | }
|
37 | return createContextId();
|
38 | }
|
39 | }
|
40 | exports.ContextIdFactory = ContextIdFactory;
|