posipaki 0.5.2 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/process.d.ts +4 -4
- package/dist/process.js.map +1 -1
- package/dist/util.d.ts +5 -5
- package/dist/util.js.map +1 -1
- package/dist/xfetch.d.ts +8 -3
- package/dist/xfetch.js.map +1 -1
- package/package.json +9 -3
- package/src/index.ts +2 -2
- package/src/process.ts +33 -12
- package/src/util.ts +38 -11
- package/src/xfetch.ts +11 -5
package/dist/process.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export interface Message {
|
|
|
3
3
|
type: string;
|
|
4
4
|
}
|
|
5
5
|
type ProcessGenerator<ProcessState, InMessage> = Generator<ProcessState | null, void, InMessage>;
|
|
6
|
-
type Fork = <ChildArgs, ChildState, InMessage extends Message, OutMessage extends
|
|
6
|
+
type Fork = <ChildArgs, ChildState, InMessage extends Message, OutMessage extends Message>(fn: ProcessFn<ChildArgs, ChildState, InMessage, OutMessage>, pname: string) => (args: ChildArgs) => Process<ChildArgs, ChildState, InMessage, OutMessage>;
|
|
7
7
|
export type ProcessFn<Args, State, InMessage, OutMessage> = (ctx: ProcessCtx<InMessage, OutMessage>, args: Args) => ProcessGenerator<State, InMessage>;
|
|
8
8
|
type ProcessMessageCb<M> = (msg: M) => void;
|
|
9
9
|
export type ProcessCtx<IM, OM> = {
|
|
@@ -13,8 +13,8 @@ export type ProcessCtx<IM, OM> = {
|
|
|
13
13
|
toParent: ProcessMessageCb<OM>;
|
|
14
14
|
};
|
|
15
15
|
type NotifyFn = () => void;
|
|
16
|
-
export declare function spawn<Args, State, InMessage extends Message = Message, OutMessage extends
|
|
17
|
-
declare class Process<Args, State, InMessage extends Message, OutMessage extends
|
|
16
|
+
export declare function spawn<Args, State, InMessage extends Message = Message, OutMessage extends Message = ExitMessage>(fn: ProcessFn<Args, State, InMessage, OutMessage>, pname: string, toParent?: ProcessMessageCb<OutMessage>): (args: Args) => Process<Args, State, InMessage, OutMessage>;
|
|
17
|
+
declare class Process<Args, State, InMessage extends Message, OutMessage extends Message> {
|
|
18
18
|
pgenerator: ProcessFn<Args, State, InMessage, OutMessage>;
|
|
19
19
|
pname: string;
|
|
20
20
|
toParent: ProcessMessageCb<OutMessage>;
|
|
@@ -27,7 +27,7 @@ declare class Process<Args, State, InMessage extends Message, OutMessage extends
|
|
|
27
27
|
private exitWaiter;
|
|
28
28
|
constructor(fn: ProcessFn<Args, State, InMessage, OutMessage>, pname: string, toParent: ProcessMessageCb<OutMessage> | undefined);
|
|
29
29
|
start(arg0: Args): void;
|
|
30
|
-
fork<ChildArgs, ChildState, ChildIM extends Message, ChildOM extends
|
|
30
|
+
fork<ChildArgs, ChildState, ChildIM extends Message, ChildOM extends Message>(fn: ProcessFn<ChildArgs, ChildState, ChildIM, ChildOM>, pname: string): (args: ChildArgs) => Process<ChildArgs, ChildState, ChildIM, ChildOM>;
|
|
31
31
|
_tick(ret: IteratorResult<State | null, void> | null): void;
|
|
32
32
|
toAllChildren(msg: Message): void;
|
|
33
33
|
send(msg: InMessage): void;
|
package/dist/process.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,SAAS,EAAU,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAI7E,CAAC;AAmBF,MAAM,UAAU,KAAK,
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"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"}
|
package/dist/util.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import type Process from './process';
|
|
2
|
-
import type { ProcessCtx, Message } from './process';
|
|
3
|
-
type ReducerClosure = (msg:
|
|
1
|
+
import type Process from './process.js';
|
|
2
|
+
import type { ProcessCtx, Message } from './process.js';
|
|
3
|
+
type ReducerClosure<M> = (msg: M) => void;
|
|
4
4
|
type ReadyFn = () => boolean;
|
|
5
5
|
type NotifyFn = () => void;
|
|
6
|
-
declare function runDispatch(name: string, fn: ReducerClosure
|
|
6
|
+
declare function runDispatch<M>(name: string, fn: ReducerClosure<M>, readyFn?: ReadyFn, debugLevel?: boolean): Generator<null, void, M>;
|
|
7
7
|
export type ExitMessage = {
|
|
8
8
|
type: 'EXIT';
|
|
9
9
|
pid: Symbol;
|
|
10
10
|
};
|
|
11
|
-
declare function watchExit<Args, State, InMessage extends Message, OutMessage extends ExitMessage>(process: Process<Args, State, InMessage, OutMessage>): (ctx: ProcessCtx<InMessage, OutMessage>, arg0: Args) => Generator<State | null, void, InMessage>;
|
|
11
|
+
declare function watchExit<Args, State, InMessage extends Message, OutMessage extends (Message | ExitMessage)>(process: Process<Args, State, InMessage, OutMessage>): (ctx: ProcessCtx<InMessage, OutMessage>, arg0: Args) => Generator<State | null, void, InMessage>;
|
|
12
12
|
type DeferCb = () => void;
|
|
13
13
|
declare function defer(fn: DeferCb): void;
|
|
14
14
|
export type Waiter = {
|
package/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA,SAAS,QAAQ,CAAC,KAAc,EAAE,GAAG,IAAoB;IACvD,IAAI,KAAK,EAAE;QACT,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;KACtB;AACH,CAAC;AAMD,QAAQ,CAAC,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA,SAAS,QAAQ,CAAC,KAAc,EAAE,GAAG,IAAoB;IACvD,IAAI,KAAK,EAAE;QACT,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;KACtB;AACH,CAAC;AAMD,QAAQ,CAAC,CAAC,WAAW,CAAI,IAAY,EAAE,EAAsB,EAAE,UAAmB,GAAE,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK;IAC9G,IAAI,GAAM,CAAC;IACX,OAAM,CAAC,OAAO,EAAE,EAAE;QAChB,GAAG,GAAG,MAAM,IAAI,CAAC;QACjB,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/C,EAAE,CAAC,GAAG,CAAC,CAAC;KACT;AACH,CAAC;AAOD,SAAS,SAAS,CAAqF,OAAoD;IACzJ,OAAO,QAAQ,CAAC,EAAE,GAAsC,EAAE,IAAU;QAClE,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,EAAe,CAAC,CAAC;IACnE,CAAC,CAAA;AACH,CAAC;AAQD,SAAS,KAAK,CAAC,EAAW;IACxB,MAAM,CAAC,GAAG,UAA0B,CAAC;IACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,mBAAmB,CAAU,CAAC;IAClE,QAAQ,CAAC,EAAE,CAAC,CAAC;AACf,CAAC;AAKD,SAAS,UAAU;IACjB,IAAI,OAAgB,CAAC;IACrB,IAAI,OAAO,GAAG,IAAI,OAAO,CAAO,QAAQ,CAAC,EAAE;QACzC,OAAO,GAAG,QAAQ,CAAC;IACrB,CAAC,CAAC,CAAC;IACH,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,OAAmB,EAAC,CAAC;AACjD,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/xfetch.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ExitMessage } from './util.js';
|
|
2
|
+
import type Process from './process.js';
|
|
3
|
+
import type { ProcessCtx } from './process.js';
|
|
2
4
|
export type FetchState<T> = {
|
|
3
5
|
code: 'pending' | 'loading' | 'aborted' | 'failed' | 'ok';
|
|
4
6
|
data: T | null;
|
|
@@ -16,10 +18,13 @@ type FetchArgsSend<T> = {
|
|
|
16
18
|
};
|
|
17
19
|
export type FetchArgs<T> = FetchArgsGet | FetchArgsSend<T>;
|
|
18
20
|
export type FetchMessage<T> = {
|
|
19
|
-
type:
|
|
21
|
+
type: 'OK';
|
|
20
22
|
data?: T | null;
|
|
21
23
|
text?: string | null;
|
|
22
|
-
}
|
|
24
|
+
} | {
|
|
25
|
+
type: 'ERROR' | 'LOADING' | 'ABORTED' | 'STOP';
|
|
26
|
+
} | ExitMessage;
|
|
23
27
|
type FetchGenerator<T, M> = Generator<FetchState<T> | null, void, M>;
|
|
28
|
+
export type FetchProcess<D> = Process<FetchArgs<D>, FetchState<D>, FetchMessage<D>, FetchMessage<D>>;
|
|
24
29
|
declare function xfetch<Type>({ pname, toParent, send }: ProcessCtx<FetchMessage<Type>, FetchMessage<Type>>, { method, url, body }: FetchArgs<Type>): FetchGenerator<Type, FetchMessage<Type>>;
|
|
25
30
|
export { xfetch };
|
package/dist/xfetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xfetch.js","sourceRoot":"","sources":["../src/xfetch.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"xfetch.js","sourceRoot":"","sources":["../src/xfetch.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "posipaki",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.5",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"build": "tsc"
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"test": "jest"
|
|
9
10
|
},
|
|
10
11
|
"files": [
|
|
11
12
|
"dist/*js",
|
|
@@ -14,6 +15,11 @@
|
|
|
14
15
|
"src/*ts"
|
|
15
16
|
],
|
|
16
17
|
"devDependencies": {
|
|
17
|
-
"
|
|
18
|
+
"@babel/parser": "^7.22.5",
|
|
19
|
+
"@babel/types": "^7.22.5",
|
|
20
|
+
"@types/jest": "^29.5.2",
|
|
21
|
+
"jest": "^29.5.0",
|
|
22
|
+
"ts-jest": "^29.1.0",
|
|
23
|
+
"typescript": "^5.1.3"
|
|
18
24
|
}
|
|
19
25
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Process, { spawn, Message, ProcessCtx, ProcessFn } from './process
|
|
2
|
-
import { ExitMessage, runDispatch } from './util
|
|
1
|
+
import Process, { spawn, Message, ProcessCtx, ProcessFn } from './process';
|
|
2
|
+
import { ExitMessage, runDispatch } from './util';
|
|
3
3
|
|
|
4
4
|
export { Process, spawn, runDispatch, Message, ExitMessage, ProcessCtx, ProcessFn }
|
package/src/process.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ExitMessage, watchExit, Waiter, defer, makeWaiter } from './util
|
|
1
|
+
import { ExitMessage, watchExit, Waiter, defer, DeferredCall, makeWaiter } from './util';
|
|
2
2
|
|
|
3
3
|
export interface Message {
|
|
4
4
|
type: string;
|
|
5
5
|
};
|
|
6
6
|
|
|
7
7
|
type ProcessGenerator<ProcessState, InMessage> = Generator<ProcessState | null, void, InMessage>;
|
|
8
|
-
type Fork = <ChildArgs, ChildState, InMessage extends Message, OutMessage extends
|
|
8
|
+
type Fork = <ChildArgs, ChildState, InMessage extends Message, OutMessage extends Message>(fn : ProcessFn<ChildArgs, ChildState, InMessage, OutMessage>, pname : string) => (args: ChildArgs) => Process<ChildArgs, ChildState, InMessage, OutMessage>;
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
export type ProcessFn<Args, State, InMessage, OutMessage> = (ctx: ProcessCtx<InMessage, OutMessage>, args: Args) => ProcessGenerator<State, InMessage>;
|
|
@@ -21,7 +21,7 @@ export type ProcessCtx<IM, OM> = {
|
|
|
21
21
|
type NotifyFn = () => void;
|
|
22
22
|
type UnsubscibeFn = () => void;
|
|
23
23
|
|
|
24
|
-
export function spawn<Args, State, InMessage extends Message=Message, OutMessage extends
|
|
24
|
+
export function spawn<Args, State, InMessage extends Message=Message, OutMessage extends Message=ExitMessage>(fn: ProcessFn<Args, State, InMessage, OutMessage>, pname: string, toParent?: ProcessMessageCb<OutMessage>) {
|
|
25
25
|
return (args: Args): Process<Args, State, InMessage, OutMessage> => {
|
|
26
26
|
const process = new Process<Args, State, InMessage, OutMessage>(fn, pname, toParent);
|
|
27
27
|
process.start(args);
|
|
@@ -30,7 +30,7 @@ export function spawn<Args, State, InMessage extends Message=Message, OutMessage
|
|
|
30
30
|
}
|
|
31
31
|
const noop = ()=> null;
|
|
32
32
|
|
|
33
|
-
class Process<Args, State, InMessage extends Message, OutMessage extends
|
|
33
|
+
class Process<Args, State, InMessage extends Message, OutMessage extends Message> {
|
|
34
34
|
pgenerator: ProcessFn<Args, State, InMessage, OutMessage>;
|
|
35
35
|
pname: string;
|
|
36
36
|
toParent: ProcessMessageCb<OutMessage>;
|
|
@@ -39,7 +39,8 @@ class Process<Args, State, InMessage extends Message, OutMessage extends ExitMes
|
|
|
39
39
|
|
|
40
40
|
private current: ProcessGenerator<State, InMessage> | null;
|
|
41
41
|
private buffer: Array<InMessage>;
|
|
42
|
-
private
|
|
42
|
+
private nextTick: DeferredCall | null;
|
|
43
|
+
private children: Array<Process<unknown, unknown, Message, Message>>;
|
|
43
44
|
private subscribers: Array<NotifyFn>;
|
|
44
45
|
private exitWaiter: Waiter;
|
|
45
46
|
|
|
@@ -53,6 +54,7 @@ class Process<Args, State, InMessage extends Message, OutMessage extends ExitMes
|
|
|
53
54
|
this.current = null;
|
|
54
55
|
this.state = null;
|
|
55
56
|
this.buffer = [];
|
|
57
|
+
this.nextTick = null;
|
|
56
58
|
|
|
57
59
|
this.children = [];
|
|
58
60
|
this.subscribers = [];
|
|
@@ -70,31 +72,38 @@ class Process<Args, State, InMessage extends Message, OutMessage extends ExitMes
|
|
|
70
72
|
this.current = task;
|
|
71
73
|
let ret = task.next();
|
|
72
74
|
this.state = ret.value || null;
|
|
73
|
-
this.
|
|
75
|
+
this._eatResult(task.next());
|
|
74
76
|
}
|
|
75
77
|
|
|
76
|
-
fork<ChildArgs, ChildState, ChildIM extends Message, ChildOM extends
|
|
78
|
+
fork<ChildArgs, ChildState, ChildIM extends Message, ChildOM extends Message> (fn : ProcessFn<ChildArgs, ChildState, ChildIM, ChildOM>, pname : string) {
|
|
77
79
|
return (args: ChildArgs): Process<ChildArgs, ChildState, ChildIM, ChildOM> => {
|
|
78
80
|
// not enough typescript power in this one
|
|
79
81
|
const fromChild = this.fromChild.bind(this) as unknown;
|
|
80
82
|
const child = new Process<ChildArgs, ChildState, ChildIM, ChildOM>(fn, pname, fromChild as ProcessMessageCb<ChildOM>);
|
|
81
83
|
// we don't keep track of what is happening down there
|
|
82
|
-
this.children.push(child as unknown as Process<unknown, unknown, Message,
|
|
84
|
+
this.children.push(child as unknown as Process<unknown, unknown, Message, Message>);
|
|
83
85
|
child.start(args);
|
|
84
86
|
return child;
|
|
85
87
|
}
|
|
86
88
|
}
|
|
87
89
|
|
|
88
|
-
_tick (
|
|
90
|
+
_tick () {
|
|
89
91
|
if (!this.current) {
|
|
90
92
|
return;
|
|
91
93
|
}
|
|
92
|
-
|
|
93
94
|
let msg: InMessage | undefined;
|
|
95
|
+
let ret: IteratorResult<State | null, void> | null = null;
|
|
94
96
|
while(msg = this.buffer.shift()) {
|
|
95
|
-
this.
|
|
97
|
+
ret = this.current.next(msg);
|
|
98
|
+
if (ret.done) {
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
96
101
|
}
|
|
97
102
|
this.notify();
|
|
103
|
+
this._eatResult(ret);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
_eatResult(ret: IteratorResult<State | null, void> | null) {
|
|
98
107
|
if (ret && ret.done) {
|
|
99
108
|
this.exitWaiter.resolve();
|
|
100
109
|
}
|
|
@@ -106,7 +115,19 @@ class Process<Args, State, InMessage extends Message, OutMessage extends ExitMes
|
|
|
106
115
|
|
|
107
116
|
send(msg: InMessage) {
|
|
108
117
|
this.buffer.push(msg);
|
|
109
|
-
|
|
118
|
+
this._scheduleTick();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
tick() {
|
|
122
|
+
this.nextTick?.flush();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
_scheduleTick() {
|
|
126
|
+
this.nextTick?.cancel();
|
|
127
|
+
this.nextTick = defer(()=> {
|
|
128
|
+
this.nextTick = null;
|
|
129
|
+
this._tick()
|
|
130
|
+
});
|
|
110
131
|
}
|
|
111
132
|
|
|
112
133
|
notify() {
|
package/src/util.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type Process from './process';
|
|
2
|
-
import type { ProcessCtx, Message } from './process';
|
|
1
|
+
import type Process from './process.js';
|
|
2
|
+
import type { ProcessCtx, Message } from './process.js';
|
|
3
3
|
|
|
4
4
|
function debugLog(level: boolean, ...args: Array<unknown>) {
|
|
5
5
|
if (level) {
|
|
@@ -7,12 +7,12 @@ function debugLog(level: boolean, ...args: Array<unknown>) {
|
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
type ReducerClosure = (msg:
|
|
10
|
+
type ReducerClosure<M> = (msg: M) => void;
|
|
11
11
|
type ReadyFn = () => boolean;
|
|
12
12
|
type NotifyFn = () => void;
|
|
13
13
|
|
|
14
|
-
function* runDispatch(name: string, fn : ReducerClosure
|
|
15
|
-
let msg:
|
|
14
|
+
function* runDispatch<M>(name: string, fn : ReducerClosure<M>, readyFn: ReadyFn = ()=> false, debugLevel = false) : Generator<null, void, M> {
|
|
15
|
+
let msg: M;
|
|
16
16
|
while(!readyFn()) {
|
|
17
17
|
msg = yield null;
|
|
18
18
|
debugLog(debugLevel, 'msg', name, ' <- ', msg);
|
|
@@ -25,7 +25,7 @@ export type ExitMessage = {
|
|
|
25
25
|
pid: Symbol;
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
-
function watchExit<Args, State, InMessage extends Message, OutMessage extends ExitMessage>(process: Process<Args, State, InMessage, OutMessage>) {
|
|
28
|
+
function watchExit<Args, State, InMessage extends Message, OutMessage extends (Message | ExitMessage)>(process: Process<Args, State, InMessage, OutMessage>) {
|
|
29
29
|
return function* (ctx: ProcessCtx<InMessage, OutMessage>, arg0: Args) {
|
|
30
30
|
yield* process.pgenerator(ctx, arg0);
|
|
31
31
|
process.toAllChildren({ type: 'STOP' });
|
|
@@ -34,15 +34,42 @@ function watchExit<Args, State, InMessage extends Message, OutMessage extends Ex
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
type DeferCb = () => void;
|
|
37
|
-
type Defer = (fn: DeferCb) =>
|
|
37
|
+
type Defer = (fn: DeferCb) => unknown;
|
|
38
|
+
type Cancel = (taskId: any)=> void;
|
|
38
39
|
type WindowGlobal = {
|
|
39
|
-
setImmediate?: Defer
|
|
40
|
+
setImmediate?: Defer,
|
|
41
|
+
clearImmediate?: Cancel,
|
|
42
|
+
requestIdleCallback?: Defer,
|
|
43
|
+
cancelIdleCallback?: Cancel,
|
|
44
|
+
setTimeout: Defer,
|
|
45
|
+
clearTimeout: Cancel,
|
|
40
46
|
};
|
|
41
47
|
|
|
42
|
-
|
|
48
|
+
export type DeferredCall = {
|
|
49
|
+
cancel: ()=> void,
|
|
50
|
+
flush: () => void,
|
|
51
|
+
};
|
|
52
|
+
function defer(fn: DeferCb) : DeferredCall {
|
|
43
53
|
const g = globalThis as WindowGlobal;
|
|
44
|
-
|
|
45
|
-
|
|
54
|
+
function schedule(deferFn: Defer, cancelFn: Cancel) {
|
|
55
|
+
const taskId = deferFn(fn);
|
|
56
|
+
return ()=> cancelFn(taskId);
|
|
57
|
+
}
|
|
58
|
+
let cancel : ()=> void;
|
|
59
|
+
if (g.setImmediate && g.clearImmediate) {
|
|
60
|
+
cancel = schedule(g.setImmediate, g.clearImmediate);
|
|
61
|
+
} else if (g.requestIdleCallback && g.cancelIdleCallback) {
|
|
62
|
+
cancel = schedule(g.requestIdleCallback, g.cancelIdleCallback);
|
|
63
|
+
} else {
|
|
64
|
+
cancel = schedule((f) => setTimeout(f, 0), clearTimeout);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function flush() {
|
|
68
|
+
cancel();
|
|
69
|
+
fn();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return { flush, cancel };
|
|
46
73
|
}
|
|
47
74
|
export type Waiter = {
|
|
48
75
|
promise: Promise<void>;
|
package/src/xfetch.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { runDispatch } from './util.js';
|
|
2
|
-
import type
|
|
1
|
+
import { ExitMessage, runDispatch } from './util.js';
|
|
2
|
+
import type Process from './process.js';
|
|
3
|
+
import type { ProcessCtx, Message } from './process.js';
|
|
3
4
|
|
|
4
5
|
function isJsonHelper(res : Response) {
|
|
5
6
|
const ct = res.headers.get('content-type');
|
|
@@ -24,13 +25,18 @@ type FetchArgsSend<T> = {
|
|
|
24
25
|
export type FetchArgs<T> = FetchArgsGet | FetchArgsSend<T>;
|
|
25
26
|
|
|
26
27
|
export type FetchMessage<T> = {
|
|
27
|
-
type:
|
|
28
|
+
type: 'OK',
|
|
28
29
|
data?: T | null,
|
|
29
30
|
text?: string | null,
|
|
30
|
-
}
|
|
31
|
+
}
|
|
32
|
+
| { type: 'ERROR' | 'LOADING' | 'ABORTED' | 'STOP' }
|
|
33
|
+
| ExitMessage;
|
|
31
34
|
|
|
32
35
|
type FetchGenerator<T, M> = Generator<FetchState<T> | null, void, M>;
|
|
33
36
|
|
|
37
|
+
export type FetchProcess<D> = Process<FetchArgs<D>, FetchState<D>, FetchMessage<D>, FetchMessage<D>>;
|
|
38
|
+
|
|
39
|
+
|
|
34
40
|
function* xfetch<Type>({ pname, toParent, send } : ProcessCtx<FetchMessage<Type>, FetchMessage<Type>>, { method='GET', url, body } : FetchArgs<Type>) : FetchGenerator<Type, FetchMessage<Type>> {
|
|
35
41
|
const state: FetchState<Type> = { code: 'pending', data: null, text: null };
|
|
36
42
|
yield state;
|
|
@@ -69,7 +75,7 @@ function* xfetch<Type>({ pname, toParent, send } : ProcessCtx<FetchMessage<Type>
|
|
|
69
75
|
|
|
70
76
|
const isDone = ()=> !(state.code === 'pending' || state.code === 'loading')
|
|
71
77
|
|
|
72
|
-
yield* runDispatch(pname, (msg : FetchMessage<Type>)=> {
|
|
78
|
+
yield* runDispatch<FetchMessage<Type>>(pname, (msg : FetchMessage<Type>)=> {
|
|
73
79
|
if (msg.type === 'STOP') {
|
|
74
80
|
controller.abort();
|
|
75
81
|
}
|