1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const logger_1 = require("./logger");
|
4 | let currentThread = undefined;
|
5 | async function thread(fn) {
|
6 | currentThread = {};
|
7 | await fn();
|
8 | currentThread = undefined;
|
9 | }
|
10 | exports.thread = thread;
|
11 | function getCurrentThread() {
|
12 | if (currentThread === undefined)
|
13 | throw new Error('CurrentThread is undefined');
|
14 | return currentThread;
|
15 | }
|
16 | exports.getCurrentThread = getCurrentThread;
|
17 | function threadPause(val) {
|
18 | currentThread = undefined;
|
19 | return val;
|
20 | }
|
21 | exports.threadPause = threadPause;
|
22 | function threadContinue(thread, val) {
|
23 | currentThread = thread;
|
24 | return val;
|
25 | }
|
26 | exports.threadContinue = threadContinue;
|
27 | function setDataToCurrentThread(key, val) {
|
28 | const thread = getCurrentThread();
|
29 | thread[key] = val;
|
30 | }
|
31 | exports.setDataToCurrentThread = setDataToCurrentThread;
|
32 | function getDataFromCurrentThread(key) {
|
33 | const thread = getCurrentThread();
|
34 | return thread[key];
|
35 | }
|
36 | exports.getDataFromCurrentThread = getDataFromCurrentThread;
|
37 | const callSymbol = Symbol('Call');
|
38 | function getParentId() {
|
39 | const parentId = getDataFromCurrentThread(callSymbol);
|
40 | return parentId;
|
41 | }
|
42 | function enter(name) {
|
43 | const parentId = getParentId();
|
44 | const currentId = logger_1.logger.trace('call', { name, timestamp: Date.now() });
|
45 | setDataToCurrentThread(callSymbol, currentId);
|
46 | return parentId;
|
47 | }
|
48 | function exit(parentId, val) {
|
49 | setDataToCurrentThread(callSymbol, parentId);
|
50 | return val;
|
51 | }
|
52 | async function foo(_x) {
|
53 | const parentId = enter('foo');
|
54 | 1 + 2;
|
55 | if (Math) {
|
56 | throw 1;
|
57 | }
|
58 | exit(parentId);
|
59 | }
|
60 | async function x() {
|
61 | const thread = getCurrentThread();
|
62 | const parentId = enter('x');
|
63 | try {
|
64 | const y = threadContinue(thread, await threadPause(foo(1)));
|
65 | return exit(parentId, y);
|
66 | }
|
67 | catch (e) { }
|
68 | return exit(parentId, 123);
|
69 | }
|
70 | thread(async () => {
|
71 | await x();
|
72 | });
|
73 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhyZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1RocmVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFrQztBQUlsQyxJQUFJLGFBQWEsR0FBdUIsU0FBUyxDQUFDO0FBQzNDLEtBQUssVUFBVSxNQUFNLENBQUMsRUFBdUI7SUFDbkQsYUFBYSxHQUFHLEVBQVksQ0FBQztJQUM3QixNQUFNLEVBQUUsRUFBRSxDQUFDO0lBQ1gsYUFBYSxHQUFHLFNBQVMsQ0FBQztBQUMzQixDQUFDO0FBSkQsd0JBSUM7QUFDRCxTQUFnQixnQkFBZ0I7SUFDL0IsSUFBSSxhQUFhLEtBQUssU0FBUztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUMvRSxPQUFPLGFBQWEsQ0FBQztBQUN0QixDQUFDO0FBSEQsNENBR0M7QUFDRCxTQUFnQixXQUFXLENBQUksR0FBTTtJQUNwQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0lBQzFCLE9BQU8sR0FBRyxDQUFDO0FBQ1osQ0FBQztBQUhELGtDQUdDO0FBQ0QsU0FBZ0IsY0FBYyxDQUFJLE1BQWMsRUFBRSxHQUFNO0lBQ3ZELGFBQWEsR0FBRyxNQUFNLENBQUM7SUFDdkIsT0FBTyxHQUFHLENBQUM7QUFDWixDQUFDO0FBSEQsd0NBR0M7QUFDRCxTQUFnQixzQkFBc0IsQ0FBQyxHQUFXLEVBQUUsR0FBWTtJQUMvRCxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxHQUFZLENBQUMsR0FBRyxHQUFZLENBQUM7QUFDckMsQ0FBQztBQUhELHdEQUdDO0FBQ0QsU0FBZ0Isd0JBQXdCLENBQUksR0FBVztJQUN0RCxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2xDLE9BQU8sTUFBTSxDQUFDLEdBQVksQ0FBa0IsQ0FBQztBQUM5QyxDQUFDO0FBSEQsNERBR0M7QUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFbEMsU0FBUyxXQUFXO0lBQ25CLE1BQU0sUUFBUSxHQUFHLHdCQUF3QixDQUFTLFVBQVUsQ0FBQyxDQUFDO0lBQzlELE9BQU8sUUFBUSxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxJQUFZO0lBQzFCLE1BQU0sUUFBUSxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQy9CLE1BQU0sU0FBUyxHQUFHLGVBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5QyxPQUFPLFFBQVEsQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxJQUFJLENBQUksUUFBNEIsRUFBRSxHQUFPO0lBQ3JELHNCQUFzQixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxPQUFPLEdBQUcsQ0FBQztBQUNaLENBQUM7QUFDRCxLQUFLLFVBQVUsR0FBRyxDQUFDLEVBQVU7SUFDNUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDTixJQUFJLElBQUksRUFBRTtRQUNULE1BQU0sQ0FBQyxDQUFDO0tBQ1I7SUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVELEtBQUssVUFBVSxDQUFDO0lBQ2YsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsSUFBSTtRQUNILE1BQU0sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDekI7SUFBQyxPQUFPLENBQUMsRUFBRSxHQUFFO0lBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFDRCxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNYLENBQUMsQ0FBQyxDQUFDIn0= |
\ | No newline at end of file |