posipaki 0.3.2
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/README.md +19 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/process.d.ts +43 -0
- package/dist/process.js +91 -0
- package/dist/process.js.map +1 -0
- package/dist/util.d.ts +15 -0
- package/dist/util.js +34 -0
- package/dist/util.js.map +1 -0
- package/dist/xfetch.d.ts +12 -0
- package/dist/xfetch.js +72 -0
- package/dist/xfetch.js.map +1 -0
- package/package.json +18 -0
package/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Wat
|
|
2
|
+
|
|
3
|
+
When you want to do some Erlang, but you can only have reactive composable stores instead
|
|
4
|
+
|
|
5
|
+
# Wat?
|
|
6
|
+
|
|
7
|
+
It's like a promise but worse -- you can abort it and have more undebuggable things to figure out.
|
|
8
|
+
|
|
9
|
+
# Do I need vue3 to use it?
|
|
10
|
+
|
|
11
|
+
No.
|
|
12
|
+
|
|
13
|
+
# Is this about Public Key Infrastructure?
|
|
14
|
+
|
|
15
|
+
No.
|
|
16
|
+
|
|
17
|
+
# Are you sure it's not another halfbroken X509 parser?
|
|
18
|
+
|
|
19
|
+
Yes, it's not another halfbroken X509 parser
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,KAAK,EAAkC,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAkC,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export type Message = {
|
|
2
|
+
type: string;
|
|
3
|
+
};
|
|
4
|
+
type ExitMessage = {
|
|
5
|
+
type: 'EXIT';
|
|
6
|
+
pid: Symbol;
|
|
7
|
+
};
|
|
8
|
+
type ProcessGenerator<ProcessState> = Generator<ProcessState | null, void, Message>;
|
|
9
|
+
type Fork<ChildArgs, ChildState> = (fn: ProcessFn<ChildArgs, ChildState>, pname: string) => (args: ChildArgs) => Process<ChildArgs, ChildState>;
|
|
10
|
+
export type ProcessFn<Args, State> = (ctx: ProcessCtx, args: Args) => ProcessGenerator<State>;
|
|
11
|
+
type ProcessMessageCb = (msg: Message | ExitMessage) => void;
|
|
12
|
+
export type ProcessCtx = {
|
|
13
|
+
pname: string;
|
|
14
|
+
fork: Fork<unknown, unknown>;
|
|
15
|
+
send: (msg: Message) => void;
|
|
16
|
+
toParent: ProcessMessageCb;
|
|
17
|
+
};
|
|
18
|
+
type NotifyFn = () => void;
|
|
19
|
+
export declare function spawn<Args, State>(fn: ProcessFn<Args, State>, pname: string, toParent?: ProcessMessageCb): (args: Args) => Process<Args, State>;
|
|
20
|
+
declare class Process<Args, State> {
|
|
21
|
+
pgenerator: ProcessFn<Args, State>;
|
|
22
|
+
pname: string;
|
|
23
|
+
toParent: ProcessMessageCb;
|
|
24
|
+
id: Symbol;
|
|
25
|
+
state: State | null;
|
|
26
|
+
private current;
|
|
27
|
+
private buffer;
|
|
28
|
+
private children;
|
|
29
|
+
private subscribers;
|
|
30
|
+
private exitWaiter;
|
|
31
|
+
constructor(fn: ProcessFn<Args, State>, pname: string, toParent: ProcessMessageCb | undefined);
|
|
32
|
+
start(arg0: Args): void;
|
|
33
|
+
fork<ChildArgs, ChildState>(fn: ProcessFn<ChildArgs, ChildState>, pname: string): (args: ChildArgs) => Process<ChildArgs, ChildState>;
|
|
34
|
+
_tick(ret: IteratorResult<State | null, void> | null): void;
|
|
35
|
+
toAllChildren(msg: Message): void;
|
|
36
|
+
send(msg: Message): void;
|
|
37
|
+
notify(): void;
|
|
38
|
+
get isListenedTo(): boolean;
|
|
39
|
+
subscribe(f: NotifyFn): () => void;
|
|
40
|
+
wait(): Promise<void>;
|
|
41
|
+
fromChild(msg: Message | ExitMessage): void;
|
|
42
|
+
}
|
|
43
|
+
export default Process;
|
package/dist/process.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { watchExit, defer, makeWaiter } from './util.js';
|
|
2
|
+
export function spawn(fn, pname, toParent) {
|
|
3
|
+
return (args) => {
|
|
4
|
+
const process = new Process(fn, pname, toParent);
|
|
5
|
+
process.start(args);
|
|
6
|
+
return process;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
const noop = () => null;
|
|
10
|
+
class Process {
|
|
11
|
+
constructor(fn, pname, toParent) {
|
|
12
|
+
this.pgenerator = fn;
|
|
13
|
+
this.pname = pname;
|
|
14
|
+
this.toParent = toParent || noop;
|
|
15
|
+
this.id = Symbol(pname);
|
|
16
|
+
this.current = null;
|
|
17
|
+
this.state = null;
|
|
18
|
+
this.buffer = [];
|
|
19
|
+
this.children = [];
|
|
20
|
+
this.subscribers = [];
|
|
21
|
+
this.exitWaiter = makeWaiter();
|
|
22
|
+
}
|
|
23
|
+
start(arg0) {
|
|
24
|
+
const ctx = {
|
|
25
|
+
pname: this.pname,
|
|
26
|
+
fork: this.fork.bind(this),
|
|
27
|
+
send: this.send.bind(this),
|
|
28
|
+
toParent: this.toParent,
|
|
29
|
+
};
|
|
30
|
+
const task = watchExit(this)(ctx, arg0);
|
|
31
|
+
this.current = task;
|
|
32
|
+
let ret = task.next();
|
|
33
|
+
this.state = ret.value || null;
|
|
34
|
+
this._tick(task.next());
|
|
35
|
+
}
|
|
36
|
+
fork(fn, pname) {
|
|
37
|
+
return (args) => {
|
|
38
|
+
const child = new Process(fn, pname, this.fromChild.bind(this));
|
|
39
|
+
this.children.push(child);
|
|
40
|
+
child.start(args);
|
|
41
|
+
return child;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
_tick(ret) {
|
|
45
|
+
if (!this.current) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
let msg;
|
|
49
|
+
while (msg = this.buffer.shift()) {
|
|
50
|
+
this._tick(this.current.next(msg));
|
|
51
|
+
}
|
|
52
|
+
this.notify();
|
|
53
|
+
if (ret && ret.done) {
|
|
54
|
+
this.exitWaiter.resolve();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
toAllChildren(msg) {
|
|
58
|
+
this.children.forEach(p => p.send(msg));
|
|
59
|
+
}
|
|
60
|
+
send(msg) {
|
|
61
|
+
this.buffer.push(msg);
|
|
62
|
+
defer(() => this._tick(null));
|
|
63
|
+
}
|
|
64
|
+
notify() {
|
|
65
|
+
this.subscribers.forEach((f) => f());
|
|
66
|
+
}
|
|
67
|
+
get isListenedTo() {
|
|
68
|
+
return this.subscribers.length > 0;
|
|
69
|
+
}
|
|
70
|
+
subscribe(f) {
|
|
71
|
+
this.subscribers.push(f);
|
|
72
|
+
return () => {
|
|
73
|
+
const idx = this.subscribers.indexOf(f);
|
|
74
|
+
if (idx < 0) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.subscribers.splice(idx, 1);
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
wait() {
|
|
81
|
+
return this.exitWaiter.promise;
|
|
82
|
+
}
|
|
83
|
+
fromChild(msg) {
|
|
84
|
+
if (msg.type === 'EXIT') {
|
|
85
|
+
this.children = this.children.filter(p => p.id !== msg.pid);
|
|
86
|
+
}
|
|
87
|
+
this.send(msg);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export default Process;
|
|
91
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"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"}
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type Process from './process';
|
|
2
|
+
import type { ProcessCtx, Message } from './process';
|
|
3
|
+
type ReducerClosure = (msg: Message) => void;
|
|
4
|
+
type ReadyFn = () => boolean;
|
|
5
|
+
type NotifyFn = () => void;
|
|
6
|
+
declare function runDispatch(name: string, fn: ReducerClosure, readyFn?: ReadyFn, debugLevel?: boolean): Generator<null, void, Message>;
|
|
7
|
+
declare function watchExit<Args, State>(process: Process<Args, State>): (ctx: ProcessCtx, arg0: Args) => Generator<State | null, void, Message>;
|
|
8
|
+
type DeferCb = () => void;
|
|
9
|
+
declare function defer(fn: DeferCb): void;
|
|
10
|
+
export type Waiter = {
|
|
11
|
+
promise: Promise<void>;
|
|
12
|
+
resolve: NotifyFn;
|
|
13
|
+
};
|
|
14
|
+
declare function makeWaiter(): Waiter;
|
|
15
|
+
export { runDispatch, watchExit, defer, makeWaiter };
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
function debugLog(level, ...args) {
|
|
2
|
+
if (level) {
|
|
3
|
+
console.log(...args);
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
function* runDispatch(name, fn, readyFn = () => false, debugLevel = false) {
|
|
7
|
+
let msg;
|
|
8
|
+
while (!readyFn()) {
|
|
9
|
+
msg = yield null;
|
|
10
|
+
debugLog(debugLevel, 'msg', name, ' <- ', msg);
|
|
11
|
+
fn(msg);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function watchExit(process) {
|
|
15
|
+
return function* (ctx, arg0) {
|
|
16
|
+
yield* process.pgenerator(ctx, arg0);
|
|
17
|
+
process.toAllChildren({ type: 'STOP' });
|
|
18
|
+
process.toParent({ type: 'EXIT', pid: process.id });
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function defer(fn) {
|
|
22
|
+
const g = globalThis;
|
|
23
|
+
const setDefer = (g.setImmediate || requestIdleCallback);
|
|
24
|
+
setDefer(fn);
|
|
25
|
+
}
|
|
26
|
+
function makeWaiter() {
|
|
27
|
+
let resolve;
|
|
28
|
+
let promise = new Promise(_resolve => {
|
|
29
|
+
resolve = _resolve;
|
|
30
|
+
});
|
|
31
|
+
return { promise, resolve: resolve };
|
|
32
|
+
}
|
|
33
|
+
export { runDispatch, watchExit, defer, makeWaiter };
|
|
34
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +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,CAAC,IAAY,EAAE,EAAmB,EAAE,UAAmB,GAAE,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK;IACxG,IAAI,GAAY,CAAC;IACjB,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;AAED,SAAS,SAAS,CAAc,OAA6B;IAC3D,OAAO,QAAQ,CAAC,EAAE,GAAe,EAAE,IAAU;QAC3C,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,EAAC,CAAC,CAAC;IACrD,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
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ProcessCtx, Message } from './process';
|
|
2
|
+
export type FetchState<T> = {
|
|
3
|
+
code: 'pending' | 'loading' | 'aborted' | 'failed' | 'ok';
|
|
4
|
+
data: T | null;
|
|
5
|
+
text: string | null;
|
|
6
|
+
};
|
|
7
|
+
export type FetchArgs = {
|
|
8
|
+
url: URL;
|
|
9
|
+
};
|
|
10
|
+
type FetchGenerator<T> = Generator<FetchState<T> | null, void, Message>;
|
|
11
|
+
declare function xfetch<Type>({ pname, toParent, send }: ProcessCtx, { url }: FetchArgs): FetchGenerator<Type>;
|
|
12
|
+
export { xfetch };
|
package/dist/xfetch.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { runDispatch } from './util.js';
|
|
11
|
+
function isJsonHelper(res) {
|
|
12
|
+
const ct = res.headers.get('content-type');
|
|
13
|
+
return ct === 'application/json';
|
|
14
|
+
}
|
|
15
|
+
function* xfetch({ pname, toParent, send }, { url }) {
|
|
16
|
+
const state = { code: 'pending', data: null, text: null };
|
|
17
|
+
yield state;
|
|
18
|
+
const controller = new AbortController();
|
|
19
|
+
const signal = controller.signal;
|
|
20
|
+
const toSelf = (msg) => send(msg);
|
|
21
|
+
(function do_request() {
|
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
try {
|
|
24
|
+
toSelf({ type: 'LOADING' });
|
|
25
|
+
const res = yield fetch(url.href, { signal });
|
|
26
|
+
if (isJsonHelper(res)) {
|
|
27
|
+
const data = yield res.json();
|
|
28
|
+
toSelf({ type: 'OK', data });
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const text = yield res.text();
|
|
32
|
+
toSelf({ type: 'OK', text });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
const isAborted = (e instanceof DOMException && e.name === 'AbortError');
|
|
37
|
+
if (isAborted) {
|
|
38
|
+
toSelf({ type: 'ABORTED', pname });
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
//console.log('e', e);
|
|
42
|
+
toSelf({ type: 'ERROR', pname });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
})();
|
|
47
|
+
const isDone = () => !(state.code === 'pending' || state.code === 'loading');
|
|
48
|
+
yield* runDispatch(pname, (msg) => {
|
|
49
|
+
if (msg.type === 'STOP') {
|
|
50
|
+
controller.abort();
|
|
51
|
+
}
|
|
52
|
+
if (msg.type === 'ABORTED') {
|
|
53
|
+
toParent(msg);
|
|
54
|
+
state.code = 'aborted';
|
|
55
|
+
}
|
|
56
|
+
if (msg.type === 'ERROR') {
|
|
57
|
+
toParent(msg);
|
|
58
|
+
state.code = 'failed';
|
|
59
|
+
}
|
|
60
|
+
if (msg.type === 'LOADING') {
|
|
61
|
+
state.code = 'loading';
|
|
62
|
+
}
|
|
63
|
+
if (msg.type === 'OK') {
|
|
64
|
+
toParent(msg);
|
|
65
|
+
state.code = 'ok';
|
|
66
|
+
state.data = msg.data || null;
|
|
67
|
+
state.text = msg.text || null;
|
|
68
|
+
}
|
|
69
|
+
}, isDone, true);
|
|
70
|
+
}
|
|
71
|
+
export { xfetch };
|
|
72
|
+
//# sourceMappingURL=xfetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xfetch.js","sourceRoot":"","sources":["../src/xfetch.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "module",
|
|
3
|
+
"name": "posipaki",
|
|
4
|
+
"version": "0.3.2",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/*js",
|
|
12
|
+
"dist/*map",
|
|
13
|
+
"dist/*d.ts"
|
|
14
|
+
],
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"typescript": "^4.4.3"
|
|
17
|
+
}
|
|
18
|
+
}
|