posipaki 0.5.2 → 0.5.4
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 +3 -3
- package/dist/util.js.map +1 -1
- package/dist/xfetch.d.ts +7 -2
- package/dist/xfetch.js.map +1 -1
- package/package.json +1 -1
- package/src/process.ts +6 -6
- package/src/util.ts +4 -4
- package/src/xfetch.ts +10 -4
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
1
|
import type Process from './process';
|
|
2
2
|
import type { ProcessCtx, Message } from './process';
|
|
3
|
-
type ReducerClosure = (msg:
|
|
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,3 +1,5 @@
|
|
|
1
|
+
import { ExitMessage } from './util.js';
|
|
2
|
+
import type Process from './process';
|
|
1
3
|
import type { ProcessCtx } from './process';
|
|
2
4
|
export type FetchState<T> = {
|
|
3
5
|
code: 'pending' | 'loading' | 'aborted' | 'failed' | 'ok';
|
|
@@ -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
package/src/process.ts
CHANGED
|
@@ -5,7 +5,7 @@ export interface Message {
|
|
|
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,7 @@ 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 children: Array<Process<unknown, unknown, Message,
|
|
42
|
+
private children: Array<Process<unknown, unknown, Message, Message>>;
|
|
43
43
|
private subscribers: Array<NotifyFn>;
|
|
44
44
|
private exitWaiter: Waiter;
|
|
45
45
|
|
|
@@ -73,13 +73,13 @@ class Process<Args, State, InMessage extends Message, OutMessage extends ExitMes
|
|
|
73
73
|
this._tick(task.next());
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
fork<ChildArgs, ChildState, ChildIM extends Message, ChildOM extends
|
|
76
|
+
fork<ChildArgs, ChildState, ChildIM extends Message, ChildOM extends Message> (fn : ProcessFn<ChildArgs, ChildState, ChildIM, ChildOM>, pname : string) {
|
|
77
77
|
return (args: ChildArgs): Process<ChildArgs, ChildState, ChildIM, ChildOM> => {
|
|
78
78
|
// not enough typescript power in this one
|
|
79
79
|
const fromChild = this.fromChild.bind(this) as unknown;
|
|
80
80
|
const child = new Process<ChildArgs, ChildState, ChildIM, ChildOM>(fn, pname, fromChild as ProcessMessageCb<ChildOM>);
|
|
81
81
|
// we don't keep track of what is happening down there
|
|
82
|
-
this.children.push(child as unknown as Process<unknown, unknown, Message,
|
|
82
|
+
this.children.push(child as unknown as Process<unknown, unknown, Message, Message>);
|
|
83
83
|
child.start(args);
|
|
84
84
|
return child;
|
|
85
85
|
}
|
package/src/util.ts
CHANGED
|
@@ -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' });
|
package/src/xfetch.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { runDispatch } from './util.js';
|
|
1
|
+
import { ExitMessage, runDispatch } from './util.js';
|
|
2
|
+
import type Process from './process';
|
|
2
3
|
import type { ProcessCtx, Message } from './process';
|
|
3
4
|
|
|
4
5
|
function isJsonHelper(res : Response) {
|
|
@@ -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
|
}
|