whenmap 0.1.0 → 0.2.0
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 +65 -11
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -0
- package/esm/index.min.js +1 -0
- package/esm/whenaiter.js +74 -0
- package/esm/whenaiter.js.map +1 -0
- package/esm/whenaiter.min.js +1 -0
- package/esm/whenmap.js +6 -1
- 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,78 @@ async function example_init() {
|
|
|
25
25
|
}
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
- `whenmap.when(key)` returns a promise for the key. The promise
|
|
28
|
+
- `when_db.when(key)` returns a promise for the key. The promise
|
|
30
29
|
may or may not be resolved.
|
|
31
30
|
|
|
32
|
-
- `
|
|
31
|
+
- `when_db.get(key)` is an alias for `when_db.when(key)`
|
|
33
32
|
|
|
34
|
-
- `
|
|
33
|
+
- `when_db.set(key, value)` resolves the promise for the specified key, returning `this`.
|
|
35
34
|
|
|
36
|
-
- `
|
|
35
|
+
- `when_db.has(key)` returns
|
|
37
36
|
`false` for untracked keys,
|
|
38
37
|
`true` for resolved tracked keys, and
|
|
39
38
|
`1` for unresolved tracked keys.
|
|
40
39
|
|
|
41
|
-
- `
|
|
40
|
+
- `when_db.delete(key)` resolves a tracked key as `undefined` before removing it.
|
|
42
41
|
|
|
43
|
-
- `
|
|
42
|
+
- `when_db.clear()` resolves any outstanding tracked keys as `undefined` before
|
|
44
43
|
clearing all tracked keys.
|
|
45
44
|
|
|
45
|
+
|
|
46
|
+
## WhenAiter API
|
|
47
|
+
|
|
48
|
+
```javascript
|
|
49
|
+
import { WhenAiter } from 'whenmap'
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
// For streaming promises as they are settled
|
|
53
|
+
let misc_promises = [ 100, 20, 50 ].map(ms =>
|
|
54
|
+
new Promise(done =>
|
|
55
|
+
setTimeout(done, ms, `delay: ${ms}`) ))
|
|
56
|
+
|
|
57
|
+
for await (let each of WhenAiter.from(misc_promises)) {
|
|
58
|
+
console.log('stream resolved:', detail)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
// For streaming events
|
|
63
|
+
let when_stream = new WhenAiter(send => {
|
|
64
|
+
document.body.addEventListener(
|
|
65
|
+
'some_custom_event',
|
|
66
|
+
evt => send(evt.detail),
|
|
67
|
+
{signal: send.signal})
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
for await (let detail of when_stream) {
|
|
71
|
+
console.log('use aiter event stream:', detail)
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
- `new WhenMap(init_arg, opt)` returns an async iterable.
|
|
76
|
+
- If `init_arg` is iterable, `send()` is called on each item.
|
|
77
|
+
- other `init_arg(send)` is invoked.
|
|
78
|
+
|
|
79
|
+
- `WhenMap.from(init_arg, opt)` is an alias for `new WhenMap`
|
|
80
|
+
|
|
81
|
+
- `aiter_pipe(opt, recv_self)` returns a connected `[send, recv]` pair
|
|
82
|
+
- `send(value)` adds value to the internal queue, after awaiting it if a promisable.
|
|
83
|
+
- `opt.on_error(err)` is an optional promise `.catch()` handler.
|
|
84
|
+
- `send.stop()` terminates the async iterable stream from within the `init_arg` closure.
|
|
85
|
+
- `send.ready` is a promise to provide overflow backpressure.
|
|
86
|
+
- `opt.max_size` manages the `send.ready` promise
|
|
87
|
+
|
|
88
|
+
- `recv` extends the `recv_self` prototype
|
|
89
|
+
- `recv.size` returns the interal queue size
|
|
90
|
+
- `recv` supports async iterable protocol: `for await (let each of when_stream) {}`
|
|
91
|
+
- `recv.next()`
|
|
92
|
+
- `recv.return()`
|
|
93
|
+
- `recv.throw()`
|
|
94
|
+
- `recv[Symbol.asyncIterator]()`
|
|
95
|
+
|
|
96
|
+
- an AbortSignal instance is aborted when the stream is stopped.
|
|
97
|
+
- assigned into `recv.signal` and `send.signal`
|
|
98
|
+
|
|
99
|
+
|
|
46
100
|
## Install
|
|
47
101
|
|
|
48
102
|
```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,74 @@
|
|
|
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_self] = aiter_pipe(opt, this);
|
|
7
|
+
if (init_arg?.[Symbol.iterator]) {
|
|
8
|
+
_send_all(init_arg, send, recv_self);}
|
|
9
|
+
else init_arg?.(send);
|
|
10
|
+
return recv_self} }
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
function aiter_pipe(opt, recv_self) {
|
|
15
|
+
const q=[], max_size = opt?.max_size ?? 5;
|
|
16
|
+
let abrt = new AbortController();
|
|
17
|
+
let p_underflow, p_overflow;
|
|
18
|
+
|
|
19
|
+
// Sender function closure
|
|
20
|
+
function send(v) {
|
|
21
|
+
if (v?.then) {
|
|
22
|
+
return v.then(send, opt?.on_error)}
|
|
23
|
+
|
|
24
|
+
q.push(v);
|
|
25
|
+
p_underflow = void p_underflow?.resolve();}
|
|
26
|
+
|
|
27
|
+
send.signal = abrt.signal;
|
|
28
|
+
send.ready = Promise.resolve(true);
|
|
29
|
+
send.stop = async () => {
|
|
30
|
+
abrt = void abrt?.abort();
|
|
31
|
+
p_underflow = void p_underflow?.resolve();
|
|
32
|
+
return { done: true }};
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
// Async Iterable Receiver
|
|
36
|
+
recv_self ={
|
|
37
|
+
__proto__: recv_self
|
|
38
|
+
, get size() {return q.length}
|
|
39
|
+
, signal: abrt.signal
|
|
40
|
+
|
|
41
|
+
, [Symbol.asyncIterator]() {return this}
|
|
42
|
+
, return: send.stop, throw: send.stop,
|
|
43
|
+
async next() {
|
|
44
|
+
while (1) {
|
|
45
|
+
if (q.length) {
|
|
46
|
+
return { value: q.shift(), done: false }}
|
|
47
|
+
|
|
48
|
+
if (undefined === abrt) {
|
|
49
|
+
return { done: true }}
|
|
50
|
+
else if (q.length < max_size) {
|
|
51
|
+
p_overflow = void p_overflow?.resolve(true);}
|
|
52
|
+
else if (! p_overflow) {
|
|
53
|
+
send.ready = (p_overflow = Promise.withResolvers()).promise;}
|
|
54
|
+
|
|
55
|
+
await (p_underflow ??= Promise.withResolvers()).promise;} } };
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
return [send, recv_self]}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
async function _send_all(iterable, send, aiter) {
|
|
62
|
+
let l=[];
|
|
63
|
+
for (let v of iterable) {
|
|
64
|
+
v = send(v);
|
|
65
|
+
if (v) {l.push(v);} }
|
|
66
|
+
|
|
67
|
+
// join on all promises
|
|
68
|
+
while (l.length) {await l.pop();}
|
|
69
|
+
|
|
70
|
+
// mark complete
|
|
71
|
+
await aiter.return();}
|
|
72
|
+
|
|
73
|
+
export { WhenAiter, aiter_pipe };
|
|
74
|
+
//# 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_self] = aiter_pipe(opt, this)\n if init_arg?.[Symbol.iterator] ::\n _send_all(init_arg, send, recv_self)\n else init_arg?.(send)\n return recv_self\n\n\n\nexport function aiter_pipe(opt, recv_self) ::\n const q=[], max_size = opt?.max_size ?? 5\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 send.signal = abrt.signal\n send.ready = Promise.resolve(true)\n send.stop = async () => ::\n abrt = void abrt?.abort()\n p_underflow = void p_underflow?.resolve()\n return { done: true }\n\n\n // Async Iterable Receiver\n recv_self = @{}\n __proto__: recv_self\n get size() :: return q.length\n signal: abrt.signal\n\n [Symbol.asyncIterator]() :: return this\n return: send.stop, throw: send.stop,\n async next() ::\n while 1 ::\n if q.length ::\n return { value: q.shift(), done: false }\n\n if undefined === abrt ::\n return { done: true }\n else if q.length < max_size ::\n p_overflow = void p_overflow?.resolve(true)\n else if ! p_overflow ::\n send.ready = (p_overflow = Promise.withResolvers()).promise\n\n await (p_underflow ??= Promise.withResolvers()).promise\n\n\n return [send, recv_self]\n\n\nasync function _send_all(iterable, send, aiter) ::\n let l=[]\n for let v of iterable ::\n v = send(v)\n if v :: l.push(v)\n\n // join on all promises\n while l.length :: await l.pop()\n\n // mark complete\n await aiter.return()\n\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,n]=r(t,this);return e?.[Symbol.iterator]?async function(e,r,t){let o=[];for(let t of e)t=r(t),t&&o.push(t);for(;o.length;)await o.pop();await t.return()}(e,o,n):e?.(o),n}}function r(e,r){const t=[],o=e?.max_size??5;let n,s,i=new AbortController;function l(r){if(r?.then)return r.then(l,e?.on_error);t.push(r),n=void n?.resolve()}return l.signal=i.signal,l.ready=Promise.resolve(!0),l.stop=async()=>(i=void i?.abort(),n=void n?.resolve(),{done:!0}),r={__proto__:r,get size(){return t.length},signal:i.signal,[Symbol.asyncIterator](){return this},return:l.stop,throw:l.stop,async next(){for(;;){if(t.length)return{value:t.shift(),done:!1};if(void 0===i)return{done:!0};t.length<o?s=void s?.resolve(!0):s||(l.ready=(s=Promise.withResolvers()).promise),await(n??=Promise.withResolvers()).promise}}},[l,r]}export{e as WhenAiter,r as aiter_pipe};
|
package/esm/whenmap.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
const _when_fns = new WeakMap();
|
|
2
|
+
const _as_when_tuples = ([k,v]) => [k, Promise.resolve(v)];
|
|
2
3
|
|
|
3
4
|
class WhenMap extends Map {
|
|
5
|
+
constructor(entries) {
|
|
6
|
+
super(entries &&= Array.from(entries, _as_when_tuples)); }
|
|
7
|
+
|
|
4
8
|
has(key) {
|
|
5
9
|
let p = super.get(key);
|
|
6
10
|
return p ? _when_fns.has(p) ? 1 : true : false}
|
|
@@ -11,7 +15,8 @@ class WhenMap extends Map {
|
|
|
11
15
|
if (! p) {
|
|
12
16
|
p = new Promise(fn => f=fn);
|
|
13
17
|
_when_fns.set(p, f);
|
|
14
|
-
super.set(key, p);
|
|
18
|
+
super.set(key, p);
|
|
19
|
+
this.on_ref?.(key, p);}
|
|
15
20
|
return p}
|
|
16
21
|
|
|
17
22
|
set(key, val) {
|
package/esm/whenmap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whenmap.js","sources":["../code/whenmap.jsy"],"sourcesContent":["const _when_fns = new WeakMap()\n\nexport class WhenMap extends Map ::\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 return p\n\n set(key, val) ::\n // resolve promise\n _pop_when(this.when(key))?.(val)\n return this\n\n delete(key) ::\n // resolve outstanding promise, if exists\n _pop_when(super.get(key))?.()\n return super.delete(key)\n\n clear() ::\n // resolve all outstanding promises\n for let p of this.values() ::\n _pop_when(p)?.()\n super.clear()\n\nexport default WhenMap\n\n\nfunction _pop_when(p) ::\n let f = _when_fns.get(p)\n _when_fns.delete(p)\n return f\n\n"],"names":[],"mappings":"AAAA,MAAA,SAAA,GAAA,IAAA,OAAA;;AAEA,MAAA,OAAA,SAAA,GAAA,CAAA;AACE,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,
|
|
1
|
+
{"version":3,"file":"whenmap.js","sources":["../code/whenmap.jsy"],"sourcesContent":["const _when_fns = new WeakMap()\nconst _as_when_tuples = ([k,v]) => [k, Promise.resolve(v)]\n\nexport class WhenMap extends Map ::\n constructor(entries) ::\n super @ entries &&= Array.from(entries, _as_when_tuples)\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.on_ref?.(key, p)\n return p\n\n set(key, val) ::\n // resolve promise\n _pop_when(this.when(key))?.(val)\n return this\n\n delete(key) ::\n // resolve outstanding promise, if exists\n _pop_when(super.get(key))?.()\n return super.delete(key)\n\n clear() ::\n // resolve all outstanding promises\n for let p of this.values() ::\n _pop_when(p)?.()\n super.clear()\n\nexport default WhenMap\n\n\nfunction _pop_when(p) ::\n let f = _when_fns.get(p)\n _when_fns.delete(p)\n return f\n\n"],"names":[],"mappings":"AAAA,MAAA,SAAA,GAAA,IAAA,OAAA;AACA,MAAA,eAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,OAAA,CAAA,OAAA,CAAA,CAAA,CAAA;;AAEA,MAAA,OAAA,SAAA,GAAA,CAAA;AACE,EAAA,WAAA,CAAA,OAAA,EAAA;IACE,KAAA,CAAO,OAAA,KAAA,KAAA,CAAA,IAAA,CAAA,OAAA,EAAA,eAAA,CAAA,EAAA;;AAET,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,MAAA,GAAA,GAAA,EAAA,CAAA,EAAA;AACF,IAAA,OAAA,CAAA;;AAEF,EAAA,GAAA,CAAA,GAAA,EAAA,GAAA,EAAA;;AAEE,IAAA,SAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAA;AACA,IAAA,OAAA,IAAA;;AAEF,EAAA,MAAA,CAAA,GAAA,EAAA;;AAEE,IAAA,SAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,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,SAAA,CAAA,CAAA,CAAA,KAAA;AACF,IAAA,KAAA,CAAA,KAAA,GAAA,CAAA;;;AAKJ,SAAA,SAAA,CAAA,CAAA,EAAA;AACE,EAAA,IAAA,CAAA,GAAA,SAAA,CAAA,GAAA,CAAA,CAAA;AACA,EAAA,SAAA,CAAA,MAAA,CAAA,CAAA;AACA,EAAA,OAAA,CAAA;;;;"}
|
package/esm/whenmap.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=new WeakMap;class
|
|
1
|
+
const e=new WeakMap,t=([e,t])=>[e,Promise.resolve(t)];class r extends Map{constructor(e){super(e&&=Array.from(e,t))}has(t){let r=super.get(t);return!!r&&(!e.has(r)||1)}get get(){return this.when}when(t){let r,s=super.get(t);return s||(s=new Promise((e=>r=e)),e.set(s,r),super.set(t,s),this.on_ref?.(t,s)),s}set(e,t){return s(this.when(e))?.(t),this}delete(e){return s(super.get(e))?.(),super.delete(e)}clear(){for(let e of this.values())s(e)?.();super.clear()}}function s(t){let r=e.get(t);return e.delete(t),r}export{r as WhenMap,r as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "whenmap",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
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": {
|
|
@@ -29,17 +29,17 @@
|
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@rollup/plugin-terser": "^0.4.4",
|
|
31
31
|
"chai": "^5.2.0",
|
|
32
|
-
"rollup": "^4.
|
|
33
|
-
"rollup-plugin-jsy": "^1.9.
|
|
32
|
+
"rollup": "^4.44.0",
|
|
33
|
+
"rollup-plugin-jsy": "^1.9.4"
|
|
34
34
|
},
|
|
35
35
|
"optionalDependencies": {
|
|
36
|
-
"vite": "^6.
|
|
36
|
+
"vite": "^6.3.5"
|
|
37
37
|
},
|
|
38
38
|
"scripts": {
|
|
39
39
|
"clean": "rm ./esm/* || true",
|
|
40
40
|
"build": "rollup --config",
|
|
41
41
|
"watch": "rollup --config --watch",
|
|
42
|
-
"pretest": "test -f esm/
|
|
42
|
+
"pretest": "test -f esm/whenmap.js || npm -s run build",
|
|
43
43
|
"vite": "vite",
|
|
44
44
|
"serve": "vite",
|
|
45
45
|
"test": "npm -s run test:one",
|