UNPKG

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