UNPKG

5.26 kBJavaScriptView Raw
1"use strict";
2var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3 if (kind === "m") throw new TypeError("Private method is not writable");
4 if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5 if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6 return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7};
8var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9 if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10 if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11 return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12};
13var _Task_task, _Task_promise, _Task_state, _TaskPromise_task, _TaskPromise_mapFn, _TaskPromise_mappedPromise, _a;
14Object.defineProperty(exports, "__esModule", { value: true });
15exports.TaskPromise = void 0;
16// deno-lint-ignore-file no-explicit-any
17const resolvable_promise_1 = require("@worker-tools/resolvable-promise");
18const ts_functional_pipe_1 = require("ts-functional-pipe");
19const id = (_) => _;
20class Task {
21 constructor(task) {
22 _Task_task.set(this, void 0);
23 _Task_promise.set(this, void 0);
24 _Task_state.set(this, 'idle');
25 __classPrivateFieldSet(this, _Task_task, task, "f");
26 __classPrivateFieldSet(this, _Task_promise, new resolvable_promise_1.ResolvablePromise(), "f");
27 }
28 execute() {
29 if (__classPrivateFieldGet(this, _Task_state, "f") === 'idle') {
30 __classPrivateFieldSet(this, _Task_state, 'pending', "f");
31 __classPrivateFieldGet(this, _Task_promise, "f").resolve(__classPrivateFieldGet(this, _Task_task, "f").call(this));
32 __classPrivateFieldGet(this, _Task_promise, "f").then(() => { __classPrivateFieldSet(this, _Task_state, 'fulfilled', "f"); }, () => { __classPrivateFieldSet(this, _Task_state, 'rejected', "f"); });
33 }
34 }
35 get state() { return __classPrivateFieldGet(this, _Task_state, "f"); }
36 get promise() { return __classPrivateFieldGet(this, _Task_promise, "f"); }
37}
38_Task_task = new WeakMap(), _Task_promise = new WeakMap(), _Task_state = new WeakMap();
39const lock = Symbol('key');
40// TODO: Make own module?
41// TODO: Add abort signal?
42// TODO: use executor instead of task functions?
43// TODO: Remove TT type??
44class TaskPromise {
45 constructor(key, task, mapFn, thisArg) {
46 _TaskPromise_task.set(this, void 0);
47 _TaskPromise_mapFn.set(this, void 0);
48 _TaskPromise_mappedPromise.set(this, void 0);
49 Object.defineProperty(this, _a, {
50 enumerable: true,
51 configurable: true,
52 writable: true,
53 value: 'TaskPromise'
54 });
55 if (key !== lock)
56 throw Error('Illegal constructor');
57 __classPrivateFieldSet(this, _TaskPromise_task, task, "f");
58 __classPrivateFieldSet(this, _TaskPromise_mapFn, mapFn, "f");
59 __classPrivateFieldSet(this, _TaskPromise_mappedPromise, __classPrivateFieldGet(this, _TaskPromise_task, "f").promise.then(mapFn && (x => mapFn.call(thisArg, x, 0, this))), "f");
60 }
61 static from(task) {
62 return new TaskPromise(lock, new Task(task));
63 }
64 get state() {
65 return __classPrivateFieldGet(this, _TaskPromise_task, "f").state;
66 }
67 /**
68 * Starts the execution of the task associated with this task promise.
69 * If you don't want to start the task at this moment, use `.map` instead.
70 */
71 then(onfulfilled, onrejected) {
72 __classPrivateFieldGet(this, _TaskPromise_task, "f").execute();
73 return __classPrivateFieldGet(this, _TaskPromise_mappedPromise, "f").then(onfulfilled, onrejected);
74 }
75 /**
76 * Applies transformations to the resolved value without triggering execution.
77 * Returns another task promise that triggers execution via `.then`
78 */
79 map(mapFn, thisArg) {
80 var _b;
81 // @ts-ignore: types of id function (x => x) not correctly inferred...
82 return new TaskPromise(lock, __classPrivateFieldGet(this, _TaskPromise_task, "f"), (0, ts_functional_pipe_1.pipe)((_b = __classPrivateFieldGet(this, _TaskPromise_mapFn, "f")) !== null && _b !== void 0 ? _b : id, mapFn !== null && mapFn !== void 0 ? mapFn : id), thisArg);
83 }
84 catch(onrejected) {
85 // FIXME: should this also trigger execution?
86 return __classPrivateFieldGet(this, _TaskPromise_mappedPromise, "f").catch(onrejected);
87 }
88 finally(onfinally) {
89 // FIXME: should this also trigger execution?
90 return __classPrivateFieldGet(this, _TaskPromise_mappedPromise, "f").finally(onfinally);
91 }
92}
93exports.TaskPromise = TaskPromise;
94_TaskPromise_task = new WeakMap(), _TaskPromise_mapFn = new WeakMap(), _TaskPromise_mappedPromise = new WeakMap(), _a = Symbol.toStringTag;
95//# sourceMappingURL=task-promise.js.map
\No newline at end of file