UNPKG

4.61 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const logger_1 = require("./logger");
4let currentThread = undefined;
5async function thread(fn) {
6 currentThread = {};
7 await fn();
8 currentThread = undefined;
9}
10exports.thread = thread;
11function getCurrentThread() {
12 if (currentThread === undefined)
13 throw new Error('CurrentThread is undefined');
14 return currentThread;
15}
16exports.getCurrentThread = getCurrentThread;
17function threadPause(val) {
18 currentThread = undefined;
19 return val;
20}
21exports.threadPause = threadPause;
22function threadContinue(thread, val) {
23 currentThread = thread;
24 return val;
25}
26exports.threadContinue = threadContinue;
27function setDataToCurrentThread(key, val) {
28 const thread = getCurrentThread();
29 thread[key] = val;
30}
31exports.setDataToCurrentThread = setDataToCurrentThread;
32function getDataFromCurrentThread(key) {
33 const thread = getCurrentThread();
34 return thread[key];
35}
36exports.getDataFromCurrentThread = getDataFromCurrentThread;
37const callSymbol = Symbol('Call');
38function getParentId() {
39 const parentId = getDataFromCurrentThread(callSymbol);
40 return parentId;
41}
42function 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}
48function exit(parentId, val) {
49 setDataToCurrentThread(callSymbol, parentId);
50 return val;
51}
52async function foo(_x) {
53 const parentId = enter('foo');
54 1 + 2;
55 if (Math) {
56 throw 1;
57 }
58 exit(parentId);
59}
60async 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}
70thread(async () => {
71 await x();
72});
73//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhyZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1RocmVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFrQztBQUlsQyxJQUFJLGFBQWEsR0FBdUIsU0FBUyxDQUFDO0FBQzNDLEtBQUssVUFBVSxNQUFNLENBQUMsRUFBdUI7SUFDbkQsYUFBYSxHQUFHLEVBQVksQ0FBQztJQUM3QixNQUFNLEVBQUUsRUFBRSxDQUFDO0lBQ1gsYUFBYSxHQUFHLFNBQVMsQ0FBQztBQUMzQixDQUFDO0FBSkQsd0JBSUM7QUFDRCxTQUFnQixnQkFBZ0I7SUFDL0IsSUFBSSxhQUFhLEtBQUssU0FBUztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUMvRSxPQUFPLGFBQWEsQ0FBQztBQUN0QixDQUFDO0FBSEQsNENBR0M7QUFDRCxTQUFnQixXQUFXLENBQUksR0FBTTtJQUNwQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0lBQzFCLE9BQU8sR0FBRyxDQUFDO0FBQ1osQ0FBQztBQUhELGtDQUdDO0FBQ0QsU0FBZ0IsY0FBYyxDQUFJLE1BQWMsRUFBRSxHQUFNO0lBQ3ZELGFBQWEsR0FBRyxNQUFNLENBQUM7SUFDdkIsT0FBTyxHQUFHLENBQUM7QUFDWixDQUFDO0FBSEQsd0NBR0M7QUFDRCxTQUFnQixzQkFBc0IsQ0FBQyxHQUFXLEVBQUUsR0FBWTtJQUMvRCxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxHQUFZLENBQUMsR0FBRyxHQUFZLENBQUM7QUFDckMsQ0FBQztBQUhELHdEQUdDO0FBQ0QsU0FBZ0Isd0JBQXdCLENBQUksR0FBVztJQUN0RCxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2xDLE9BQU8sTUFBTSxDQUFDLEdBQVksQ0FBa0IsQ0FBQztBQUM5QyxDQUFDO0FBSEQsNERBR0M7QUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFbEMsU0FBUyxXQUFXO0lBQ25CLE1BQU0sUUFBUSxHQUFHLHdCQUF3QixDQUFTLFVBQVUsQ0FBQyxDQUFDO0lBQzlELE9BQU8sUUFBUSxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxJQUFZO0lBQzFCLE1BQU0sUUFBUSxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQy9CLE1BQU0sU0FBUyxHQUFHLGVBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5QyxPQUFPLFFBQVEsQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxJQUFJLENBQUksUUFBNEIsRUFBRSxHQUFPO0lBQ3JELHNCQUFzQixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxPQUFPLEdBQUcsQ0FBQztBQUNaLENBQUM7QUFDRCxLQUFLLFVBQVUsR0FBRyxDQUFDLEVBQVU7SUFDNUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDTixJQUFJLElBQUksRUFBRTtRQUNULE1BQU0sQ0FBQyxDQUFDO0tBQ1I7SUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVELEtBQUssVUFBVSxDQUFDO0lBQ2YsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsSUFBSTtRQUNILE1BQU0sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDekI7SUFBQyxPQUFPLENBQUMsRUFBRSxHQUFFO0lBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFDRCxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNYLENBQUMsQ0FBQyxDQUFDIn0=
\No newline at end of file