UNPKG

1.56 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const request_constants_1 = require("../router/request/request-constants");
4function 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}
15exports.createContextId = createContextId;
16class 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}
40exports.ContextIdFactory = ContextIdFactory;