whenmap 0.1.1 → 0.2.1
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 +79 -12
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -0
- package/esm/index.min.js +1 -0
- package/esm/whenaiter.js +72 -0
- package/esm/whenaiter.js.map +1 -0
- package/esm/whenaiter.min.js +1 -0
- package/esm/whenmap.js +14 -14
- package/esm/whenmap.js.map +1 -1
- package/esm/whenmap.min.js +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -7,17 +7,17 @@ initalizes the value.
|
|
|
7
7
|
|
|
8
8
|
[CER]: https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/whenDefined
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## WhenMap API
|
|
11
11
|
|
|
12
12
|
```javascript
|
|
13
13
|
import { WhenMap } from 'whenmap'
|
|
14
14
|
|
|
15
|
-
let
|
|
15
|
+
let when_db = new WhenMap()
|
|
16
16
|
|
|
17
|
-
let p_ready =
|
|
17
|
+
let p_ready = when_db.when('example_key')
|
|
18
18
|
p_ready.then(v => console.log('Ready!', {v}))
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
when_db.set('example_key', example_init())
|
|
21
21
|
|
|
22
22
|
async function example_init() {
|
|
23
23
|
// async initialize process
|
|
@@ -25,24 +25,91 @@ async function example_init() {
|
|
|
25
25
|
}
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
may or may not be resolved.
|
|
28
|
+
- `when_db.when(key)` returns a promise for the newly tracked key.
|
|
29
|
+
The promise may or may not be resolved.
|
|
31
30
|
|
|
32
|
-
- `
|
|
31
|
+
- `when_db.ref(key, p)` is a observation hook for newly tracked keys.
|
|
33
32
|
|
|
34
|
-
- `
|
|
33
|
+
- `when_db.get(key)` is an alias for `when_db.when(key)`
|
|
35
34
|
|
|
36
|
-
- `
|
|
35
|
+
- `when_db.set(key, value)` resolves the promise for the specified key, returning `this`.
|
|
36
|
+
|
|
37
|
+
- `when_db.has(key)` returns
|
|
37
38
|
`false` for untracked keys,
|
|
38
39
|
`true` for resolved tracked keys, and
|
|
39
40
|
`1` for unresolved tracked keys.
|
|
40
41
|
|
|
41
|
-
- `
|
|
42
|
+
- `when_db.delete(key)` resolves a tracked key as `undefined` before removing it.
|
|
42
43
|
|
|
43
|
-
- `
|
|
44
|
+
- `when_db.clear()` resolves any outstanding tracked keys as `undefined` before
|
|
44
45
|
clearing all tracked keys.
|
|
45
46
|
|
|
47
|
+
|
|
48
|
+
## aiter_pipe API
|
|
49
|
+
|
|
50
|
+
`aiter_pipe(opt)` returns a connected `[send, recv]` pair where `send` is a
|
|
51
|
+
function and `recv` is an async iterable.
|
|
52
|
+
|
|
53
|
+
- `send(value)` adds value to the internal queue, after awaiting it if a promisable.
|
|
54
|
+
- `opt.on_error(err)` is an optional promise `.catch()` handler.
|
|
55
|
+
- `send.stop()` terminates the async iterable stream from within the `init_arg` closure.
|
|
56
|
+
- `send.ready` is a promise to provide overflow backpressure.
|
|
57
|
+
- `opt.max_size` manages the `send.ready` promise, default of 5
|
|
58
|
+
|
|
59
|
+
- `recv` extends the optional prototype
|
|
60
|
+
- `recv.size` returns the interal queue size
|
|
61
|
+
- `recv` supports async iterable protocol: `for await (let each of when_stream) {}`
|
|
62
|
+
- `recv.next()` returns the next resolved value
|
|
63
|
+
- if `opt.batch`, returns list of all resolved values
|
|
64
|
+
- `recv.return()`
|
|
65
|
+
- `recv.throw()`
|
|
66
|
+
- `recv[Symbol.asyncIterator]()`
|
|
67
|
+
|
|
68
|
+
- an AbortSignal instance is aborted when the stream is stopped.
|
|
69
|
+
- assigned into `recv.signal` and `send.signal`
|
|
70
|
+
|
|
71
|
+
## WhenAiter API
|
|
72
|
+
|
|
73
|
+
`WhenAiter` is a Promise-like wrapper around `aiter_pipe` to transform callback
|
|
74
|
+
events into async iteratable.
|
|
75
|
+
|
|
76
|
+
```javascript
|
|
77
|
+
import { WhenAiter } from 'whenmap'
|
|
78
|
+
|
|
79
|
+
// For streaming events
|
|
80
|
+
let when_stream = new WhenAiter(send => {
|
|
81
|
+
document.body.addEventListener(
|
|
82
|
+
'some_custom_event',
|
|
83
|
+
evt => send(evt.detail),
|
|
84
|
+
{signal: send.signal})
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
for await (let detail of when_stream) {
|
|
88
|
+
console.log('use aiter event stream:', detail)
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`WhenAiter` can also transform a collection promises into an async iteratable.
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
import { WhenAiter } from 'whenmap'
|
|
96
|
+
const sleep = new Promise(done => setTimeout(done, ms, `delay: ${ms}`) )
|
|
97
|
+
// For streaming promises as they are settled
|
|
98
|
+
let misc_promises = [ sleep(100), sleep(20), sleep(50) ]
|
|
99
|
+
|
|
100
|
+
for await (let each of WhenAiter.from(misc_promises)) {
|
|
101
|
+
console.log('stream resolved:', detail)
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
- `new WhenAiter(init_arg, opt)` returns an async iterable.
|
|
106
|
+
- If `init_arg` is iterable, `send()` is called on each item.
|
|
107
|
+
- other `init_arg(send)` is invoked.
|
|
108
|
+
|
|
109
|
+
- `WhenAiter.from(init_arg, opt)` is an alias for `new WhenAiter`
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
46
113
|
## Install
|
|
47
114
|
|
|
48
115
|
```bash
|
package/esm/index.js
ADDED
package/esm/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/esm/index.min.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{WhenMap}from"./whenmap.min.js";export{WhenAiter,aiter_pipe}from"./whenaiter.min.js";
|
package/esm/whenaiter.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
class WhenAiter {
|
|
2
|
+
static from(init_arg, opt) {
|
|
3
|
+
return new this(init_arg, opt)}
|
|
4
|
+
|
|
5
|
+
constructor(init_arg, opt) {
|
|
6
|
+
let [send, recv_aiter] = aiter_pipe.call(this, opt);
|
|
7
|
+
|
|
8
|
+
if(init_arg)
|
|
9
|
+
init_arg?.call ? init_arg(send)
|
|
10
|
+
: Array.from(init_arg, send)
|
|
11
|
+
.reduce((a,b) => a.then(b), send.ready)
|
|
12
|
+
.then(_ => send.stop());
|
|
13
|
+
|
|
14
|
+
return recv_aiter} }
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
function aiter_pipe(opt) {
|
|
18
|
+
const q=[], max_size = opt?.max_size ?? 5;
|
|
19
|
+
const pop_result = opt?.batch ? q => q.splice(0) : q => q.shift();
|
|
20
|
+
let abrt = new AbortController();
|
|
21
|
+
let p_underflow, p_overflow;
|
|
22
|
+
|
|
23
|
+
// Sender function closure
|
|
24
|
+
function send(v) {
|
|
25
|
+
if (v?.then) {
|
|
26
|
+
return v.then(send, opt?.on_error)}
|
|
27
|
+
|
|
28
|
+
q.push(v);
|
|
29
|
+
p_underflow = void p_underflow?.resolve();
|
|
30
|
+
|
|
31
|
+
// update overflow promise state
|
|
32
|
+
if (q.length >= max_size) {
|
|
33
|
+
send.ready = (p_overflow ??= Promise.withResolvers()).promise;} }
|
|
34
|
+
|
|
35
|
+
send.signal = abrt.signal;
|
|
36
|
+
send.ready = Promise.resolve();
|
|
37
|
+
send.stop = async () => {
|
|
38
|
+
abrt = void abrt?.abort();
|
|
39
|
+
p_underflow = void p_underflow?.resolve();
|
|
40
|
+
return { done: true }};
|
|
41
|
+
|
|
42
|
+
// Async Iterable Receiver
|
|
43
|
+
let recv_aiter ={
|
|
44
|
+
__proto__: this
|
|
45
|
+
, get size() {return q.length}
|
|
46
|
+
, signal: abrt.signal
|
|
47
|
+
|
|
48
|
+
, [Symbol.asyncIterator]() {return this}
|
|
49
|
+
, return: send.stop
|
|
50
|
+
, throw: send.stop
|
|
51
|
+
, async next() {
|
|
52
|
+
while (1) {
|
|
53
|
+
let r, len=q.length;
|
|
54
|
+
if (len) {// results are available
|
|
55
|
+
r = pop_result(q);
|
|
56
|
+
|
|
57
|
+
if (len <= max_size) {
|
|
58
|
+
// update overflow promise state
|
|
59
|
+
p_overflow = void p_overflow?.resolve();}
|
|
60
|
+
return { value: r, done: false }}
|
|
61
|
+
|
|
62
|
+
if (undefined === abrt) {// async iterable is done
|
|
63
|
+
return { done: true }}
|
|
64
|
+
|
|
65
|
+
// set underflow promise state
|
|
66
|
+
await (p_underflow ??= Promise.withResolvers()).promise;
|
|
67
|
+
} } };// after underflow resolved, loop to try again
|
|
68
|
+
|
|
69
|
+
return [send, recv_aiter]}
|
|
70
|
+
|
|
71
|
+
export { WhenAiter, aiter_pipe };
|
|
72
|
+
//# sourceMappingURL=whenaiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whenaiter.js","sources":["../code/whenaiter.jsy"],"sourcesContent":["\nexport class WhenAiter ::\n static from(init_arg, opt) ::\n return new this(init_arg, opt)\n\n constructor(init_arg, opt) ::\n let [send, recv_aiter] = aiter_pipe.call(this, opt)\n\n if(init_arg)\n init_arg?.call ? init_arg(send)\n : Array.from(init_arg, send)\n .reduce((a,b) => a.then(b), send.ready)\n .then(_ => send.stop())\n\n return recv_aiter\n\n\nexport function aiter_pipe(opt) ::\n const q=[], max_size = opt?.max_size ?? 5\n const pop_result = opt?.batch ? q => q.splice(0) : q => q.shift()\n let abrt = new AbortController()\n let p_underflow, p_overflow\n\n // Sender function closure\n function send(v) ::\n if v?.then ::\n return v.then(send, opt?.on_error)\n\n q.push(v)\n p_underflow = void p_underflow?.resolve()\n\n // update overflow promise state\n if q.length >= max_size ::\n send.ready = (p_overflow ??= Promise.withResolvers()).promise\n\n send.signal = abrt.signal\n send.ready = Promise.resolve()\n send.stop = async () => ::\n abrt = void abrt?.abort()\n p_underflow = void p_underflow?.resolve()\n return { done: true }\n\n // Async Iterable Receiver\n let recv_aiter = @{}\n __proto__: this\n get size() :: return q.length\n signal: abrt.signal\n\n [Symbol.asyncIterator]() :: return this\n return: send.stop\n throw: send.stop\n async next() ::\n while 1 ::\n let r, len=q.length\n if len :: // results are available\n r = pop_result(q)\n\n if len <= max_size ::\n // update overflow promise state\n p_overflow = void p_overflow?.resolve()\n return { value: r, done: false }\n\n if undefined === abrt :: // async iterable is done\n return { done: true }\n\n // set underflow promise state\n await (p_underflow ??= Promise.withResolvers()).promise\n // after underflow resolved, loop to try again\n\n return [send, recv_aiter]\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class e{static from(e,r){return new this(e,r)}constructor(e,t){let[o,s]=r.call(this,t);return e&&(e?.call?e(o):Array.from(e,o).reduce(((e,r)=>e.then(r)),o.ready).then((e=>o.stop()))),s}}function r(e){const r=[],t=e?.max_size??5,o=e?.batch?e=>e.splice(0):e=>e.shift();let s,n,i=new AbortController;function l(o){if(o?.then)return o.then(l,e?.on_error);r.push(o),s=void s?.resolve(),r.length>=t&&(l.ready=(n??=Promise.withResolvers()).promise)}return l.signal=i.signal,l.ready=Promise.resolve(),l.stop=async()=>(i=void i?.abort(),s=void s?.resolve(),{done:!0}),[l,{__proto__:this,get size(){return r.length},signal:i.signal,[Symbol.asyncIterator](){return this},return:l.stop,throw:l.stop,async next(){for(;;){let e,l=r.length;if(l)return e=o(r),l<=t&&(n=void n?.resolve()),{value:e,done:!1};if(void 0===i)return{done:!0};await(s??=Promise.withResolvers()).promise}}}]}export{e as WhenAiter,r as aiter_pipe};
|
package/esm/whenmap.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
const _when_fns = new WeakMap();
|
|
2
|
-
|
|
1
|
+
const _when_fns = /* #__PURE__ */ new WeakMap();
|
|
2
|
+
function _when_resolve(p, val) {
|
|
3
|
+
let fn = _when_fns.get(p);
|
|
4
|
+
_when_fns.delete(p);
|
|
5
|
+
fn?.(val);}
|
|
3
6
|
|
|
4
7
|
class WhenMap extends Map {
|
|
5
8
|
constructor(entries) {
|
|
6
|
-
super(
|
|
9
|
+
super();
|
|
10
|
+
for (let [k,v] of entries||[])
|
|
11
|
+
this.set(k,v);}
|
|
7
12
|
|
|
8
13
|
has(key) {
|
|
9
14
|
let p = super.get(key);
|
|
@@ -16,30 +21,25 @@ class WhenMap extends Map {
|
|
|
16
21
|
p = new Promise(fn => f=fn);
|
|
17
22
|
_when_fns.set(p, f);
|
|
18
23
|
super.set(key, p);
|
|
19
|
-
this.
|
|
24
|
+
this.ref?.(key, p);}
|
|
20
25
|
return p}
|
|
21
26
|
|
|
27
|
+
// ref(key, p) ::
|
|
28
|
+
|
|
22
29
|
set(key, val) {
|
|
23
|
-
|
|
24
|
-
_pop_when(this.when(key))?.(val);
|
|
30
|
+
_when_resolve(this.when(key),val);
|
|
25
31
|
return this}
|
|
26
32
|
|
|
27
33
|
delete(key) {
|
|
28
34
|
// resolve outstanding promise, if exists
|
|
29
|
-
|
|
35
|
+
_when_resolve(super.get(key));
|
|
30
36
|
return super.delete(key)}
|
|
31
37
|
|
|
32
38
|
clear() {
|
|
33
39
|
// resolve all outstanding promises
|
|
34
40
|
for (let p of this.values()) {
|
|
35
|
-
|
|
41
|
+
_when_resolve(p);}
|
|
36
42
|
super.clear();} }
|
|
37
43
|
|
|
38
|
-
|
|
39
|
-
function _pop_when(p) {
|
|
40
|
-
let f = _when_fns.get(p);
|
|
41
|
-
_when_fns.delete(p);
|
|
42
|
-
return f}
|
|
43
|
-
|
|
44
44
|
export { WhenMap, WhenMap as default };
|
|
45
45
|
//# sourceMappingURL=whenmap.js.map
|
package/esm/whenmap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whenmap.js","sources":["../code/whenmap.jsy"],"sourcesContent":["const _when_fns = new WeakMap()\
|
|
1
|
+
{"version":3,"file":"whenmap.js","sources":["../code/whenmap.jsy"],"sourcesContent":["const _when_fns = /* #__PURE__ */ new WeakMap()\nfunction _when_resolve(p, val) ::\n let fn = _when_fns.get(p)\n _when_fns.delete(p)\n fn?.(val)\n\nexport class WhenMap extends Map ::\n constructor(entries) ::\n super()\n for (let [k,v] of entries||[])\n this.set(k,v)\n\n has(key) ::\n let p = super.get(key)\n return p ? _when_fns.has(p) ? 1 : true : false\n\n get get() :: return this.when\n when(key) ::\n let p = super.get(key), f\n if ! p ::\n p = new Promise(fn => f=fn)\n _when_fns.set(p, f)\n super.set(key, p)\n this.ref?.(key, p)\n return p\n\n // ref(key, p) ::\n\n set(key, val) ::\n _when_resolve(this.when(key),val)\n return this\n\n delete(key) ::\n // resolve outstanding promise, if exists\n _when_resolve(super.get(key))\n return super.delete(key)\n\n clear() ::\n // resolve all outstanding promises\n for let p of this.values() ::\n _when_resolve(p)\n super.clear()\n\nexport default WhenMap\n\n"],"names":[],"mappings":"AAAA,MAAA,SAAA,mBAAiC,IAAA,OAAA;AACjC,SAAA,aAAA,CAAA,CAAA,EAAA,GAAA,EAAA;AACE,EAAA,IAAA,EAAA,GAAA,SAAA,CAAA,GAAA,CAAA,CAAA;AACA,EAAA,SAAA,CAAA,MAAA,CAAA,CAAA;AACA,EAAA,EAAA,GAAA,GAAA,EAAA;;AAEF,MAAA,OAAA,SAAA,GAAA,CAAA;AACE,EAAA,WAAA,CAAA,OAAA,EAAA;AACE,IAAA,KAAA;AACA,IAAA,KAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,OAAA,EAAA,EAAA;AACE,MAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA;;AAEJ,EAAA,GAAA,CAAA,GAAA,EAAA;AACE,IAAA,IAAA,CAAA,GAAA,KAAA,CAAA,GAAA,CAAA,GAAA;AACA,IAAA,OAAA,CAAA,GAAA,SAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,IAAA,GAAA,KAAA;;EAEF,IAAA,GAAA,GAAA,CAAY,OAAA,IAAA,CAAA,IAAA;AACZ,EAAA,IAAA,CAAA,GAAA,EAAA;AACE,IAAA,IAAA,CAAA,GAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA;AACG,IAAA,IAAA,EAAA,CAAA,EAAA;AACD,MAAA,CAAA,GAAA,IAAA,OAAA,CAAA,EAAA,IAAA,CAAA,CAAA,EAAA;AACA,MAAA,SAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA;AACA,MAAA,KAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA;AACA,MAAA,IAAA,CAAA,GAAA,GAAA,GAAA,EAAA,CAAA,EAAA;AACF,IAAA,OAAA,CAAA;;;;AAIF,EAAA,GAAA,CAAA,GAAA,EAAA,GAAA,EAAA;AACE,IAAA,aAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA;AACA,IAAA,OAAA,IAAA;;AAEF,EAAA,MAAA,CAAA,GAAA,EAAA;;AAEE,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA;AACA,IAAA,OAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA;;AAEF,EAAA,KAAA,GAAA;;AAEK,IAAA,KAAA,IAAA,CAAA,IAAA,IAAA,CAAA,MAAA,EAAA,EAAA;AACD,MAAA,aAAA,CAAA,CAAA,EAAA;AACF,IAAA,KAAA,CAAA,KAAA,GAAA,CAAA;;;;"}
|
package/esm/whenmap.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=new WeakMap,
|
|
1
|
+
const e=new WeakMap;function t(t,s){let r=e.get(t);e.delete(t),r?.(s)}class s extends Map{constructor(e){super();for(let[t,s]of e||[])this.set(t,s)}has(t){let s=super.get(t);return!!s&&(!e.has(s)||1)}get get(){return this.when}when(t){let s,r=super.get(t);return r||(r=new Promise((e=>s=e)),e.set(r,s),super.set(t,r),this.ref?.(t,r)),r}set(e,s){return t(this.when(e),s),this}delete(e){return t(super.get(e)),super.delete(e)}clear(){for(let e of this.values())t(e);super.clear()}}export{s as WhenMap,s as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "whenmap",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "BSD-2-Clause",
|
|
6
6
|
"author": "Shane Holloway <shane.holloway@ieee.org>",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
],
|
|
18
18
|
"type": "module",
|
|
19
19
|
"exports": {
|
|
20
|
-
".": "./esm/
|
|
20
|
+
".": "./esm/index.js",
|
|
21
21
|
"./esm": "./esm"
|
|
22
22
|
},
|
|
23
23
|
"imports": {
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@rollup/plugin-terser": "^0.4.4",
|
|
31
|
-
"chai": "^
|
|
32
|
-
"rollup": "^4.
|
|
33
|
-
"rollup-plugin-jsy": "^1.9.
|
|
31
|
+
"chai": "^6.2.2",
|
|
32
|
+
"rollup": "^4.54.0",
|
|
33
|
+
"rollup-plugin-jsy": "^1.9.4"
|
|
34
34
|
},
|
|
35
35
|
"optionalDependencies": {
|
|
36
|
-
"vite": "^
|
|
36
|
+
"vite": "^7.3.0"
|
|
37
37
|
},
|
|
38
38
|
"scripts": {
|
|
39
39
|
"clean": "rm ./esm/* || true",
|