@e280/stz 0.1.3 → 0.2.0-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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@e280/stz",
3
- "version": "0.1.3",
3
+ "version": "0.2.0-1",
4
4
  "description": "everyday ts fns for everything",
5
5
  "license": "MIT",
6
6
  "author": "Chase Moskal <chasemoskal@gmail.com>",
package/s/map-g.ts CHANGED
@@ -31,6 +31,34 @@ export class MapG<K, V> extends Map<K, V> {
31
31
  }
32
32
  }
33
33
 
34
+ /** extended weak map with handy methods like `require` and `guarantee` */
35
+ export class WeakMapG<K extends WeakKey, V> extends WeakMap<K, V> {
36
+ static require<K extends WeakKey, V>(map: WeakMap<K, V>, key: K) {
37
+ if (map.has(key))
38
+ return map.get(key)!
39
+ else
40
+ throw new Error(`required key not found`)
41
+ }
42
+
43
+ static guarantee<K extends WeakKey, V>(map: WeakMap<K, V>, key: K, make: () => V) {
44
+ if (map.has(key))
45
+ return map.get(key)!
46
+ else {
47
+ const value = make()
48
+ map.set(key, value)
49
+ return value
50
+ }
51
+ }
52
+
53
+ require(key: K) {
54
+ return WeakMapG.require(this, key)
55
+ }
56
+
57
+ guarantee(key: K, make: () => V) {
58
+ return WeakMapG.guarantee(this, key, make)
59
+ }
60
+ }
61
+
34
62
  export type Identifiable<Id = any> = {id: Id}
35
63
 
36
64
  /** js map but for things that have an `id` field */
package/s/pubsub.ts CHANGED
@@ -6,14 +6,20 @@ export type Listener<A extends any[]> = (...a: A) => (void | Promise<void>)
6
6
  export interface Xub<A extends any[] = []> {
7
7
 
8
8
  /** publish to all subscribed listeners. */
9
- pub(...a: A): Promise<void>
9
+ publish(...a: A): Promise<void>
10
10
 
11
11
  /** subscribe a listener function. */
12
- sub(fn: Listener<A>): () => void
12
+ subscribe(fn: Listener<A>): () => void
13
+
14
+ /** publish to all subscribed listeners, with pubsub facilities. */
15
+ pub: Pub<A>
16
+
17
+ /** subscribe a listener function, with pubsub facilities. */
18
+ sub: Sub<A>
13
19
 
14
20
  /**
15
21
  * subscribe a listener function.
16
- * @alias sub
22
+ * @alias subscribe
17
23
  */
18
24
  on(fn: Listener<A>): () => void
19
25
 
@@ -34,16 +40,25 @@ export interface Pub<A extends any[] = []> extends Xub<A> {
34
40
  (...a: A): Promise<void>
35
41
  }
36
42
 
43
+ /** make pubsub facilities */
37
44
  export function xub<A extends any[] = []>() {
38
45
  const set = new Set<Listener<A>>()
39
46
 
40
- function sub(fn: Listener<A>) {
47
+ async function publish(...a: A) {
48
+ await Promise.all([...set].map(fn => fn(...a)))
49
+ }
50
+
51
+ function subscribe(fn: Listener<A>) {
41
52
  set.add(fn)
42
53
  return () => { set.delete(fn) }
43
54
  }
44
55
 
45
56
  async function pub(...a: A) {
46
- await Promise.all([...set].map(fn => fn(...a)))
57
+ return publish(...a)
58
+ }
59
+
60
+ function sub(fn: Listener<A>) {
61
+ return subscribe(fn)
47
62
  }
48
63
 
49
64
  async function next() {
@@ -59,34 +74,32 @@ export function xub<A extends any[] = []>() {
59
74
  set.clear()
60
75
  }
61
76
 
62
- sub.pub = pub
63
- sub.sub = sub
64
- sub.on = sub
65
- sub.next = next
66
- sub.clear = clear
67
-
68
- pub.pub = pub
69
- pub.sub = sub
70
- pub.on = sub
71
- pub.next = next
72
- pub.clear = clear
73
-
74
- return [pub, sub] as [Pub<A>, Sub<A>]
77
+ const x = {
78
+ pub,
79
+ sub,
80
+ publish,
81
+ subscribe,
82
+ on: subscribe,
83
+ next,
84
+ clear,
85
+ } as Xub<A>
86
+
87
+ Object.assign(sub, x)
88
+ Object.assign(pub, x)
89
+ return x
75
90
  }
76
91
 
77
- /** create a subscriber fn that can be published to */
92
+ /** create a subscriber fn that also has pubsub facilities */
78
93
  export function sub<A extends any[] = []>(listener?: Listener<A>): Sub<A> {
79
- const fn = xub<A>()[1]
80
- if (listener)
81
- fn.sub(listener)
82
- return fn
94
+ const x = xub<A>()
95
+ if (listener) x.sub(listener)
96
+ return x.sub
83
97
  }
84
98
 
85
- /** create a publisher fn that can be subscribed to */
99
+ /** create a publisher fn that also has pubsub facilities */
86
100
  export function pub<A extends any[] = []>(listener?: Listener<A>): Pub<A> {
87
- const fn = xub<A>()[0]
88
- if (listener)
89
- fn.sub(listener)
90
- return fn
101
+ const x = xub<A>()
102
+ if (listener) x.sub(listener)
103
+ return x.pub
91
104
  }
92
105
 
package/x/map-g.d.ts CHANGED
@@ -6,6 +6,13 @@ export declare class MapG<K, V> extends Map<K, V> {
6
6
  require(key: K): NonNullable<V>;
7
7
  guarantee(key: K, make: () => V): V;
8
8
  }
9
+ /** extended weak map with handy methods like `require` and `guarantee` */
10
+ export declare class WeakMapG<K extends WeakKey, V> extends WeakMap<K, V> {
11
+ static require<K extends WeakKey, V>(map: WeakMap<K, V>, key: K): NonNullable<V>;
12
+ static guarantee<K extends WeakKey, V>(map: WeakMap<K, V>, key: K, make: () => V): V;
13
+ require(key: K): NonNullable<V>;
14
+ guarantee(key: K, make: () => V): V;
15
+ }
9
16
  export type Identifiable<Id = any> = {
10
17
  id: Id;
11
18
  };
package/x/map-g.js CHANGED
@@ -25,6 +25,30 @@ export class MapG extends Map {
25
25
  return MapG.guarantee(this, key, make);
26
26
  }
27
27
  }
28
+ /** extended weak map with handy methods like `require` and `guarantee` */
29
+ export class WeakMapG extends WeakMap {
30
+ static require(map, key) {
31
+ if (map.has(key))
32
+ return map.get(key);
33
+ else
34
+ throw new Error(`required key not found`);
35
+ }
36
+ static guarantee(map, key, make) {
37
+ if (map.has(key))
38
+ return map.get(key);
39
+ else {
40
+ const value = make();
41
+ map.set(key, value);
42
+ return value;
43
+ }
44
+ }
45
+ require(key) {
46
+ return WeakMapG.require(this, key);
47
+ }
48
+ guarantee(key, make) {
49
+ return WeakMapG.guarantee(this, key, make);
50
+ }
51
+ }
28
52
  /** js map but for things that have an `id` field */
29
53
  export class PoolG extends MapG {
30
54
  got(value) {
package/x/map-g.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"map-g.js","sourceRoot":"","sources":["../s/map-g.ts"],"names":[],"mappings":"AACA,wEAAwE;AACxE,MAAM,OAAO,IAAW,SAAQ,GAAS;IACxC,MAAM,CAAC,OAAO,CAAO,GAAc,EAAE,GAAM;QAC1C,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;;YAEpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,CAAC,SAAS,CAAO,GAAc,EAAE,GAAM,EAAE,IAAa;QAC3D,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;aAChB,CAAC;YACL,MAAM,KAAK,GAAG,IAAI,EAAE,CAAA;YACpB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACnB,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;IAED,KAAK;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,GAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,SAAS,CAAC,GAAM,EAAE,IAAa;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;CACD;AAID,oDAAoD;AACpD,MAAM,OAAO,KAA8B,SAAQ,IAAgB;IAClE,GAAG,CAAC,KAAQ;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IAED,GAAG,CAAC,KAAQ;QACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACzB,OAAO,KAAK,CAAA;IACb,CAAC;IAED,MAAM,CAAC,KAAQ;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC;CACD"}
1
+ {"version":3,"file":"map-g.js","sourceRoot":"","sources":["../s/map-g.ts"],"names":[],"mappings":"AACA,wEAAwE;AACxE,MAAM,OAAO,IAAW,SAAQ,GAAS;IACxC,MAAM,CAAC,OAAO,CAAO,GAAc,EAAE,GAAM;QAC1C,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;;YAEpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,CAAC,SAAS,CAAO,GAAc,EAAE,GAAM,EAAE,IAAa;QAC3D,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;aAChB,CAAC;YACL,MAAM,KAAK,GAAG,IAAI,EAAE,CAAA;YACpB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACnB,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;IAED,KAAK;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,GAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,SAAS,CAAC,GAAM,EAAE,IAAa;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;CACD;AAED,0EAA0E;AAC1E,MAAM,OAAO,QAA+B,SAAQ,OAAa;IAChE,MAAM,CAAC,OAAO,CAAuB,GAAkB,EAAE,GAAM;QAC9D,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;;YAEpB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,CAAC,SAAS,CAAuB,GAAkB,EAAE,GAAM,EAAE,IAAa;QAC/E,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;aAChB,CAAC;YACL,MAAM,KAAK,GAAG,IAAI,EAAE,CAAA;YACpB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACnB,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;IAED,OAAO,CAAC,GAAM;QACb,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACnC,CAAC;IAED,SAAS,CAAC,GAAM,EAAE,IAAa;QAC9B,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC;CACD;AAID,oDAAoD;AACpD,MAAM,OAAO,KAA8B,SAAQ,IAAgB;IAClE,GAAG,CAAC,KAAQ;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IAED,GAAG,CAAC,KAAQ;QACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACzB,OAAO,KAAK,CAAA;IACb,CAAC;IAED,MAAM,CAAC,KAAQ;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC;CACD"}
package/x/pubsub.d.ts CHANGED
@@ -1,12 +1,16 @@
1
1
  export type Listener<A extends any[]> = (...a: A) => (void | Promise<void>);
2
2
  export interface Xub<A extends any[] = []> {
3
3
  /** publish to all subscribed listeners. */
4
- pub(...a: A): Promise<void>;
4
+ publish(...a: A): Promise<void>;
5
5
  /** subscribe a listener function. */
6
- sub(fn: Listener<A>): () => void;
6
+ subscribe(fn: Listener<A>): () => void;
7
+ /** publish to all subscribed listeners, with pubsub facilities. */
8
+ pub: Pub<A>;
9
+ /** subscribe a listener function, with pubsub facilities. */
10
+ sub: Sub<A>;
7
11
  /**
8
12
  * subscribe a listener function.
9
- * @alias sub
13
+ * @alias subscribe
10
14
  */
11
15
  on(fn: Listener<A>): () => void;
12
16
  /** wait for the next published value */
@@ -22,8 +26,9 @@ export interface Sub<A extends any[] = []> extends Xub<A> {
22
26
  export interface Pub<A extends any[] = []> extends Xub<A> {
23
27
  (...a: A): Promise<void>;
24
28
  }
25
- export declare function xub<A extends any[] = []>(): [Pub<A>, Sub<A>];
26
- /** create a subscriber fn that can be published to */
29
+ /** make pubsub facilities */
30
+ export declare function xub<A extends any[] = []>(): Xub<A>;
31
+ /** create a subscriber fn that also has pubsub facilities */
27
32
  export declare function sub<A extends any[] = []>(listener?: Listener<A>): Sub<A>;
28
- /** create a publisher fn that can be subscribed to */
33
+ /** create a publisher fn that also has pubsub facilities */
29
34
  export declare function pub<A extends any[] = []>(listener?: Listener<A>): Pub<A>;
package/x/pubsub.js CHANGED
@@ -1,12 +1,19 @@
1
1
  import { defer } from "./defer.js";
2
+ /** make pubsub facilities */
2
3
  export function xub() {
3
4
  const set = new Set();
4
- function sub(fn) {
5
+ async function publish(...a) {
6
+ await Promise.all([...set].map(fn => fn(...a)));
7
+ }
8
+ function subscribe(fn) {
5
9
  set.add(fn);
6
10
  return () => { set.delete(fn); };
7
11
  }
8
12
  async function pub(...a) {
9
- await Promise.all([...set].map(fn => fn(...a)));
13
+ return publish(...a);
14
+ }
15
+ function sub(fn) {
16
+ return subscribe(fn);
10
17
  }
11
18
  async function next() {
12
19
  const { promise, resolve } = defer();
@@ -19,30 +26,31 @@ export function xub() {
19
26
  function clear() {
20
27
  set.clear();
21
28
  }
22
- sub.pub = pub;
23
- sub.sub = sub;
24
- sub.on = sub;
25
- sub.next = next;
26
- sub.clear = clear;
27
- pub.pub = pub;
28
- pub.sub = sub;
29
- pub.on = sub;
30
- pub.next = next;
31
- pub.clear = clear;
32
- return [pub, sub];
29
+ const x = {
30
+ pub,
31
+ sub,
32
+ publish,
33
+ subscribe,
34
+ on: subscribe,
35
+ next,
36
+ clear,
37
+ };
38
+ Object.assign(sub, x);
39
+ Object.assign(pub, x);
40
+ return x;
33
41
  }
34
- /** create a subscriber fn that can be published to */
42
+ /** create a subscriber fn that also has pubsub facilities */
35
43
  export function sub(listener) {
36
- const fn = xub()[1];
44
+ const x = xub();
37
45
  if (listener)
38
- fn.sub(listener);
39
- return fn;
46
+ x.sub(listener);
47
+ return x.sub;
40
48
  }
41
- /** create a publisher fn that can be subscribed to */
49
+ /** create a publisher fn that also has pubsub facilities */
42
50
  export function pub(listener) {
43
- const fn = xub()[0];
51
+ const x = xub();
44
52
  if (listener)
45
- fn.sub(listener);
46
- return fn;
53
+ x.sub(listener);
54
+ return x.pub;
47
55
  }
48
56
  //# sourceMappingURL=pubsub.js.map
package/x/pubsub.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../s/pubsub.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAmChC,MAAM,UAAU,GAAG;IAClB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAe,CAAA;IAElC,SAAS,GAAG,CAAC,EAAe;QAC3B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACX,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,UAAU,GAAG,CAAC,GAAG,CAAI;QACzB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,KAAK,UAAU,IAAI;QAClB,MAAM,EAAC,OAAO,EAAE,OAAO,EAAC,GAAG,KAAK,EAAK,CAAA;QACrC,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;YAChC,OAAO,CAAC,CAAC,CAAC,CAAA;YACV,WAAW,EAAE,CAAA;QACd,CAAC,CAAC,CAAA;QACF,OAAO,OAAO,CAAA;IACf,CAAC;IAED,SAAS,KAAK;QACb,GAAG,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;IAED,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,GAAG,CAAC,EAAE,GAAG,GAAG,CAAA;IACZ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;IACf,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IAEjB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,GAAG,CAAC,EAAE,GAAG,GAAG,CAAA;IACZ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;IACf,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IAEjB,OAAO,CAAC,GAAG,EAAE,GAAG,CAAqB,CAAA;AACtC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,GAAG,CAAuB,QAAsB;IAC/D,MAAM,EAAE,GAAG,GAAG,EAAK,CAAC,CAAC,CAAC,CAAA;IACtB,IAAI,QAAQ;QACX,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACjB,OAAO,EAAE,CAAA;AACV,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,GAAG,CAAuB,QAAsB;IAC/D,MAAM,EAAE,GAAG,GAAG,EAAK,CAAC,CAAC,CAAC,CAAA;IACtB,IAAI,QAAQ;QACX,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACjB,OAAO,EAAE,CAAA;AACV,CAAC"}
1
+ {"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../s/pubsub.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAyChC,6BAA6B;AAC7B,MAAM,UAAU,GAAG;IAClB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAe,CAAA;IAElC,KAAK,UAAU,OAAO,CAAC,GAAG,CAAI;QAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,SAAS,SAAS,CAAC,EAAe;QACjC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACX,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,UAAU,GAAG,CAAC,GAAG,CAAI;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;IACrB,CAAC;IAED,SAAS,GAAG,CAAC,EAAe;QAC3B,OAAO,SAAS,CAAC,EAAE,CAAC,CAAA;IACrB,CAAC;IAED,KAAK,UAAU,IAAI;QAClB,MAAM,EAAC,OAAO,EAAE,OAAO,EAAC,GAAG,KAAK,EAAK,CAAA;QACrC,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;YAChC,OAAO,CAAC,CAAC,CAAC,CAAA;YACV,WAAW,EAAE,CAAA;QACd,CAAC,CAAC,CAAA;QACF,OAAO,OAAO,CAAA;IACf,CAAC;IAED,SAAS,KAAK;QACb,GAAG,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;IAED,MAAM,CAAC,GAAG;QACT,GAAG;QACH,GAAG;QACH,OAAO;QACP,SAAS;QACT,EAAE,EAAE,SAAS;QACb,IAAI;QACJ,KAAK;KACK,CAAA;IAEX,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACrB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACrB,OAAO,CAAC,CAAA;AACT,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,GAAG,CAAuB,QAAsB;IAC/D,MAAM,CAAC,GAAG,GAAG,EAAK,CAAA;IAClB,IAAI,QAAQ;QAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC7B,OAAO,CAAC,CAAC,GAAG,CAAA;AACb,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,GAAG,CAAuB,QAAsB;IAC/D,MAAM,CAAC,GAAG,GAAG,EAAK,CAAA;IAClB,IAAI,QAAQ;QAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC7B,OAAO,CAAC,CAAC,GAAG,CAAA;AACb,CAAC"}