@actdim/utico 1.2.5 → 1.2.6
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 +73 -3
- package/dist/utils.d.ts +3 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.es.js +60 -57
- package/dist/utils.es.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1403,9 +1403,9 @@ cache.size; // 2
|
|
|
1403
1403
|
|
|
1404
1404
|
| Function | Description |
|
|
1405
1405
|
|----------|-------------|
|
|
1406
|
-
| `delay(ms)` | Returns a `Promise` that resolves after `ms` milliseconds |
|
|
1407
|
-
| `delayError(ms, errFactory?)` | Returns a `Promise` that rejects after `ms` milliseconds |
|
|
1408
|
-
| `withTimeout(promise, ms)` | Races `promise` against a timeout rejection |
|
|
1406
|
+
| `delay(ms, abortSignal?)` | Returns a `Promise` that resolves after `ms` milliseconds; rejects early if `abortSignal` is aborted |
|
|
1407
|
+
| `delayError(ms, errFactory?, abortSignal?)` | Returns a `Promise` that rejects after `ms` milliseconds; rejects early if `abortSignal` is aborted |
|
|
1408
|
+
| `withTimeout(promise, ms, abortSignal?)` | Races `promise` against a timeout rejection; rejects early if `abortSignal` is aborted |
|
|
1409
1409
|
| `lazy(factory)` | Wraps a factory in a once-evaluated lazy initializer |
|
|
1410
1410
|
| `memoEffect(getValue, callback, comparator?)` | Calls `callback` only when the value from `getValue` changes |
|
|
1411
1411
|
| `searchTree(nodes, predicate, childSelector)` | Depth-first search over a tree structure |
|
|
@@ -1421,6 +1421,9 @@ import { delay, withTimeout, lazy, memoEffect, searchTree } from '@actdim/utico/
|
|
|
1421
1421
|
|
|
1422
1422
|
await delay(500);
|
|
1423
1423
|
|
|
1424
|
+
const ac = new AbortController();
|
|
1425
|
+
await delay(500, ac.signal); // rejects if ac.abort() is called
|
|
1426
|
+
|
|
1424
1427
|
const result = await withTimeout(fetch('/api'), 3000);
|
|
1425
1428
|
|
|
1426
1429
|
const getInstance = lazy(() => new ExpensiveClass());
|
|
@@ -1557,6 +1560,73 @@ See [dateTimeDataFormat](#datetimedataformat--datetime-serialisation) for full t
|
|
|
1557
1560
|
|
|
1558
1561
|
---
|
|
1559
1562
|
|
|
1563
|
+
## Changelog
|
|
1564
|
+
|
|
1565
|
+
### 1.2.5
|
|
1566
|
+
- `typeCore`: core type additions and refinements
|
|
1567
|
+
|
|
1568
|
+
### 1.2.4
|
|
1569
|
+
- `typeCore`: `KeyPath` fixes and improvements
|
|
1570
|
+
- Added `tests/typeCore.test.ts`
|
|
1571
|
+
|
|
1572
|
+
### 1.2.3
|
|
1573
|
+
- `typeCore`: `KeyPath` further improved
|
|
1574
|
+
- `typeUtils`: `isPlainObject` fix
|
|
1575
|
+
|
|
1576
|
+
### 1.2.2
|
|
1577
|
+
- `arrayExtensions`: fixes; `src/array.ts` merged in and removed
|
|
1578
|
+
- Minor cleanup across `memoryCache`, `dataStore`, `storeContracts`, `stringCore`, `typeUtils`
|
|
1579
|
+
|
|
1580
|
+
### 1.2.0
|
|
1581
|
+
- `typeCore`: new utility types
|
|
1582
|
+
|
|
1583
|
+
### 1.1.8
|
|
1584
|
+
- `AsyncMutex` renamed to `AsyncLock` (`src/asyncLock.ts`); old module removed
|
|
1585
|
+
|
|
1586
|
+
### 1.1.6
|
|
1587
|
+
- `dateTimeDataFormat`: overhaul with new parsing/serialization logic
|
|
1588
|
+
- `i18n`: added `euCulture` and `invariantCulture`
|
|
1589
|
+
|
|
1590
|
+
### 1.1.5
|
|
1591
|
+
- `dateTimeDataFormat`: migrated from `moment` to `Luxon`
|
|
1592
|
+
- Added `tests/dateTimeDataFormat.test.ts`, `tests/watchable.test.ts`
|
|
1593
|
+
|
|
1594
|
+
### 1.1.3
|
|
1595
|
+
- `decorators`: new `@nonEnumerable` decorator (`src/decorators.ts`)
|
|
1596
|
+
- Store fixes (`dataStore`, `persistentStore`, `storeDb`)
|
|
1597
|
+
- Added tests: `asyncMutex`, `metadata`, `persistentCache`, `stringCore`, `structEvent`, `typeUtils`
|
|
1598
|
+
|
|
1599
|
+
### 1.1.2
|
|
1600
|
+
- Breaking API changes across `cache` and `store` modules
|
|
1601
|
+
|
|
1602
|
+
### 1.1.0 – 1.1.1
|
|
1603
|
+
- `typeCore`, `utils`: internal refactoring
|
|
1604
|
+
|
|
1605
|
+
### 1.0.6
|
|
1606
|
+
- `utils`: added `removePrefix`, `removeSuffix`
|
|
1607
|
+
|
|
1608
|
+
### 1.0.5
|
|
1609
|
+
- `utils`: added `lazy`
|
|
1610
|
+
|
|
1611
|
+
### 1.0.4
|
|
1612
|
+
- `utils`: `delayError` updated
|
|
1613
|
+
|
|
1614
|
+
### 1.0.0
|
|
1615
|
+
- Stable release; switched to `pnpm` and `Vitest`
|
|
1616
|
+
- `cacheContracts` introduced as a separate module
|
|
1617
|
+
|
|
1618
|
+
### 0.9.7
|
|
1619
|
+
- New store layer: `dataStore`, `persistentStore`, `storeContracts`, `storeDb`
|
|
1620
|
+
- Migrated test runner from Jest to Vitest
|
|
1621
|
+
|
|
1622
|
+
### 0.9.1
|
|
1623
|
+
- `utils`: added `memoEffect`; first `utils` tests
|
|
1624
|
+
|
|
1625
|
+
### 0.9.0
|
|
1626
|
+
- Initial public release: `persistentCache`, `memoryCache`, `typeCore`, `typeUtils`, `stringCore`, `metadata`, `structEvent`, `watchable`, `asyncMutex`, `dateTimeDataFormat`
|
|
1627
|
+
|
|
1628
|
+
---
|
|
1629
|
+
|
|
1560
1630
|
## License
|
|
1561
1631
|
|
|
1562
1632
|
Proprietary — © Pavel Borodaev
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export declare const normalize: (v: number) => number;
|
|
2
2
|
export declare const buildFuncArgCacheKey: (...args: any[]) => string;
|
|
3
|
-
export declare const delay: (ms: number) => Promise<void>;
|
|
4
|
-
export declare const delayError: (ms: number, errFactory?: () => Error) => Promise<never>;
|
|
5
|
-
export declare function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T>;
|
|
3
|
+
export declare const delay: (ms: number, abortSignal?: AbortSignal) => Promise<void>;
|
|
4
|
+
export declare const delayError: (ms: number, errFactory?: () => Error, abortSignal?: AbortSignal) => Promise<never>;
|
|
5
|
+
export declare function withTimeout<T>(promise: Promise<T>, ms: number, abortSignal?: AbortSignal): Promise<T>;
|
|
6
6
|
export declare function searchTree<T>(treeNodes: T[], predicate: (item: T) => boolean, childSelector: (item: T) => T[]): any;
|
|
7
7
|
export declare const suppressConsole: (action: () => void) => {
|
|
8
8
|
method: keyof Console;
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,WAAiC,CAAC;AAGrE,eAAO,MAAM,oBAAoB,YAEZ,GAAG,EAAE,WAiBtB,CAAC;AAEL,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,WAAiC,CAAC;AAGrE,eAAO,MAAM,oBAAoB,YAEZ,GAAG,EAAE,WAiBtB,CAAC;AAEL,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,EAAE,cAAc,WAAW,kBAY1D,CAAC;AAGF,eAAO,MAAM,UAAU,GAAU,IAAI,MAAM,EAAE,aAAa,MAAM,KAAK,EAAE,cAAc,WAAW,KAAG,OAAO,CAAC,KAAK,CAG/G,CAAC;AAEF,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAErG;AAQD,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,OAc7G;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,IAAI;YAGlC,MAAM,OAAO;UACf,GAAG,EAAE;GAoBlB,CAAC;AAEF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAapE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAapE;AAKD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EACpC,QAAQ,EAAE,MAAM,IAAI,EACpB,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,EAC9B,UAAU,GAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,KAAK,OAA2B,iBAchE;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAWjD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,QAQtE"}
|
package/dist/utils.es.js
CHANGED
|
@@ -1,44 +1,47 @@
|
|
|
1
|
-
import { v4 as
|
|
2
|
-
const
|
|
1
|
+
import { v4 as f } from "uuid";
|
|
2
|
+
const m = (e) => !e || !isFinite(e) ? 0 : e, d = /* @__PURE__ */ (() => {
|
|
3
3
|
const e = /* @__PURE__ */ new WeakMap();
|
|
4
|
-
return (...
|
|
5
|
-
const
|
|
6
|
-
for (const o of
|
|
4
|
+
return (...n) => {
|
|
5
|
+
const t = [];
|
|
6
|
+
for (const o of n) {
|
|
7
7
|
let r;
|
|
8
|
-
typeof o == "number" || typeof o == "string" || typeof o == "boolean" || o == null ? r = "" + o : (r = e.get(o), r || (r =
|
|
8
|
+
typeof o == "number" || typeof o == "string" || typeof o == "boolean" || o == null ? r = "" + o : (r = e.get(o), r || (r = f(), e.set(o, r))), t.push(r);
|
|
9
9
|
}
|
|
10
|
-
return `"${
|
|
10
|
+
return `"${t.join("/")}"`;
|
|
11
11
|
};
|
|
12
|
-
})(),
|
|
13
|
-
(n
|
|
14
|
-
()
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
);
|
|
21
|
-
|
|
22
|
-
|
|
12
|
+
})(), u = (e, n) => new Promise((t, o) => {
|
|
13
|
+
if (n?.aborted) {
|
|
14
|
+
o(n.reason);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const r = setTimeout(t, e);
|
|
18
|
+
n?.addEventListener("abort", () => {
|
|
19
|
+
clearTimeout(r), o(n.reason);
|
|
20
|
+
}, { once: !0 });
|
|
21
|
+
}), c = async (e, n, t) => {
|
|
22
|
+
throw await u(e, t), n ? n() : new Error("Timeout exceeded");
|
|
23
|
+
};
|
|
24
|
+
function p(e, n, t) {
|
|
25
|
+
return Promise.race([c(n, void 0, t), e]);
|
|
23
26
|
}
|
|
24
|
-
function l(e,
|
|
27
|
+
function l(e, n, t) {
|
|
25
28
|
if (e)
|
|
26
29
|
for (const o of e) {
|
|
27
|
-
if (
|
|
30
|
+
if (n(o))
|
|
28
31
|
return o;
|
|
29
|
-
const r = l(
|
|
32
|
+
const r = l(t(o), n, t);
|
|
30
33
|
if (r)
|
|
31
34
|
return r;
|
|
32
35
|
}
|
|
33
36
|
}
|
|
34
37
|
const y = (e) => {
|
|
35
|
-
const
|
|
38
|
+
const n = {}, t = [], o = [
|
|
36
39
|
"log"
|
|
37
40
|
/*, "debug", "warn", "info"*/
|
|
38
41
|
];
|
|
39
42
|
for (const r of o)
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
n[r] = console[r], console[r] = function(...i) {
|
|
44
|
+
t.push({
|
|
42
45
|
method: r,
|
|
43
46
|
args: i
|
|
44
47
|
});
|
|
@@ -47,65 +50,65 @@ const y = (e) => {
|
|
|
47
50
|
e();
|
|
48
51
|
} finally {
|
|
49
52
|
for (const r of o)
|
|
50
|
-
console[r] =
|
|
53
|
+
console[r] = n[r];
|
|
51
54
|
}
|
|
52
|
-
return
|
|
55
|
+
return t;
|
|
53
56
|
};
|
|
54
|
-
function h(e,
|
|
55
|
-
let
|
|
56
|
-
for (;
|
|
57
|
-
|
|
58
|
-
for (const o of
|
|
57
|
+
function h(e, n) {
|
|
58
|
+
let t = !0;
|
|
59
|
+
for (; t; ) {
|
|
60
|
+
t = !1;
|
|
61
|
+
for (const o of n)
|
|
59
62
|
if (o && e.startsWith(o)) {
|
|
60
|
-
e = e.slice(o.length),
|
|
63
|
+
e = e.slice(o.length), t = !0;
|
|
61
64
|
break;
|
|
62
65
|
}
|
|
63
66
|
}
|
|
64
67
|
return e;
|
|
65
68
|
}
|
|
66
|
-
function k(e,
|
|
67
|
-
let
|
|
68
|
-
for (;
|
|
69
|
-
|
|
70
|
-
for (const o of
|
|
69
|
+
function k(e, n) {
|
|
70
|
+
let t = !0;
|
|
71
|
+
for (; t; ) {
|
|
72
|
+
t = !1;
|
|
73
|
+
for (const o of n)
|
|
71
74
|
if (o && e.endsWith(o)) {
|
|
72
|
-
e = e.slice(0, -o.length),
|
|
75
|
+
e = e.slice(0, -o.length), t = !0;
|
|
73
76
|
break;
|
|
74
77
|
}
|
|
75
78
|
}
|
|
76
79
|
return e;
|
|
77
80
|
}
|
|
78
|
-
function
|
|
81
|
+
function v(e, n, t = (o, r) => o === r) {
|
|
79
82
|
let o, r = !1, i;
|
|
80
83
|
return () => {
|
|
81
|
-
const
|
|
82
|
-
return (!r || !
|
|
84
|
+
const s = e();
|
|
85
|
+
return (!r || !t(s, o)) && (o = s, r = !0, i = n(s)), i;
|
|
83
86
|
};
|
|
84
87
|
}
|
|
85
|
-
function
|
|
86
|
-
let
|
|
87
|
-
return () => (
|
|
88
|
+
function w(e) {
|
|
89
|
+
let n, t = !1;
|
|
90
|
+
return () => (t || (n = e(), t = !0), n);
|
|
88
91
|
}
|
|
89
|
-
function
|
|
90
|
-
let
|
|
91
|
-
for (const o of
|
|
92
|
-
|
|
92
|
+
function b(e, n) {
|
|
93
|
+
let t = {};
|
|
94
|
+
for (const o of n)
|
|
95
|
+
t[o] = {
|
|
93
96
|
enumerable: !1
|
|
94
97
|
};
|
|
95
|
-
Object.defineProperties(e,
|
|
98
|
+
Object.defineProperties(e, t);
|
|
96
99
|
}
|
|
97
100
|
export {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
101
|
+
d as buildFuncArgCacheKey,
|
|
102
|
+
u as delay,
|
|
103
|
+
c as delayError,
|
|
104
|
+
w as lazy,
|
|
105
|
+
b as makeNonEnumerable,
|
|
106
|
+
v as memoEffect,
|
|
107
|
+
m as normalize,
|
|
105
108
|
h as removePrefix,
|
|
106
109
|
k as removeSuffix,
|
|
107
110
|
l as searchTree,
|
|
108
111
|
y as suppressConsole,
|
|
109
|
-
|
|
112
|
+
p as withTimeout
|
|
110
113
|
};
|
|
111
114
|
//# sourceMappingURL=utils.es.js.map
|
package/dist/utils.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.es.js","sources":["D:/Src/my/actdim/public/utico/src/utils.ts"],"sourcesContent":null,"names":["normalize","v","buildFuncArgCacheKey","weakMap","args","keys","arg","key","uuid","delay","ms","
|
|
1
|
+
{"version":3,"file":"utils.es.js","sources":["D:/Src/my/actdim/public/utico/src/utils.ts"],"sourcesContent":null,"names":["normalize","v","buildFuncArgCacheKey","weakMap","args","keys","arg","key","uuid","delay","ms","abortSignal","resolve","reject","id","delayError","errFactory","withTimeout","promise","searchTree","treeNodes","predicate","childSelector","treeNode","node","suppressConsole","action","origConsole","result","removePrefix","str","prefixes","removed","prefix","removeSuffix","suffixes","suffix","memoEffect","getValue","callback","comparator","a","b","val","initialized","retVal","next","lazy","factory","instance","makeNonEnumerable","obj","propertyNames","propertyDescriptorMap","propertyName"],"mappings":";AAaO,MAAMA,IAAY,CAACC,MAAe,CAACA,KAAK,CAAC,SAASA,CAAC,IAAI,IAAIA,GAGrDC,IAAwB,uBAAM;AACvC,QAAMC,wBAAc,QAAA;AACpB,SAAO,IAAIC,MAAgB;AACvB,UAAMC,IAAiB,CAAA;AACvB,eAAWC,KAAOF,GAAM;AACpB,UAAIG;AACJ,MAAI,OAAOD,KAAQ,YAAY,OAAOA,KAAQ,YAAY,OAAOA,KAAQ,aAAaA,KAAO,OACzFC,IAAM,KAAKD,KAEXC,IAAMJ,EAAQ,IAAIG,CAAG,GAChBC,MACDA,IAAMC,EAAA,GACNL,EAAQ,IAAIG,GAAKC,CAAG,KAG5BF,EAAK,KAAKE,CAAG;AAAA,IACjB;AACA,WAAO,IAAIF,EAAK,KAAK,GAAG,CAAC;AAAA,EAC7B;AACJ,GAAA,GAEaI,IAAQ,CAACC,GAAYC,MACvB,IAAI,QAAc,CAACC,GAASC,MAAW;AAC1C,MAAIF,GAAa,SAAS;AACtB,IAAAE,EAAOF,EAAY,MAAM;AACzB;AAAA,EACJ;AACA,QAAMG,IAAK,WAAWF,GAASF,CAAE;AACjC,EAAAC,GAAa,iBAAiB,SAAS,MAAM;AACzC,iBAAaG,CAAE,GACfD,EAAOF,EAAY,MAAM;AAAA,EAC7B,GAAG,EAAE,MAAM,IAAM;AACrB,CAAC,GAIQI,IAAa,OAAOL,GAAYM,GAA0BL,MAA8C;AACjH,cAAMF,EAAMC,GAAIC,CAAW,GACrBK,IAAaA,EAAA,IAAe,IAAI,MAAM,kBAAkB;AAClE;AAEO,SAASC,EAAeC,GAAqBR,GAAYC,GAAuC;AACnG,SAAO,QAAQ,KAAK,CAACI,EAAWL,GAAI,QAAWC,CAAW,GAAGO,CAAO,CAAC;AACzE;AAQO,SAASC,EAAcC,GAAgBC,GAAiCC,GAAiC;AAC5G,MAAKF;AAGL,eAAWG,KAAYH,GAAW;AAC9B,UAAIC,EAAUE,CAAQ;AAClB,eAAOA;AAEX,YAAMC,IAAOL,EAAWG,EAAcC,CAAQ,GAAGF,GAAWC,CAAa;AACzE,UAAIE;AACA,eAAOA;AAAA,IAEf;AAEJ;AAEO,MAAMC,IAAkB,CAACC,MAAuB;AACnD,QAAMC,IAAmB,CAAA,GACnBC,IAGA,CAAA,GACAvB,IAA0B;AAAA,IAAC;AAAA;AAAA,EAAA;AACjC,aAAWE,KAAOF;AACd,IAAAsB,EAAYpB,CAAG,IAAI,QAAQA,CAAG,GAC9B,QAAQA,CAAG,IAAI,YAAaH,GAAa;AACrC,MAAAwB,EAAO,KAAK;AAAA,QACR,QAAQrB;AAAA,QACR,MAAAH;AAAA,MAAA,CACH;AAAA,IACL;AAEJ,MAAI;AACA,IAAAsB,EAAA;AAAA,EACJ,UAAA;AACI,eAAWnB,KAAOF;AACd,cAAQE,CAAG,IAAIoB,EAAYpB,CAAG;AAAA,EAEtC;AACA,SAAOqB;AACX;AAEO,SAASC,EAAaC,GAAaC,GAA4B;AAClE,MAAIC,IAAU;AACd,SAAOA,KAAS;AACZ,IAAAA,IAAU;AACV,eAAWC,KAAUF;AACjB,UAAIE,KAAUH,EAAI,WAAWG,CAAM,GAAG;AAClC,QAAAH,IAAMA,EAAI,MAAMG,EAAO,MAAM,GAC7BD,IAAU;AACV;AAAA,MACJ;AAAA,EAER;AACA,SAAOF;AACX;AAEO,SAASI,EAAaJ,GAAaK,GAA4B;AAClE,MAAIH,IAAU;AACd,SAAOA,KAAS;AACZ,IAAAA,IAAU;AACV,eAAWI,KAAUD;AACjB,UAAIC,KAAUN,EAAI,SAASM,CAAM,GAAG;AAChC,QAAAN,IAAMA,EAAI,MAAM,GAAG,CAACM,EAAO,MAAM,GACjCJ,IAAU;AACV;AAAA,MACJ;AAAA,EAER;AACA,SAAOF;AACX;AAKO,SAASO,EACZC,GACAC,GACAC,IAA4C,CAACC,GAAGC,MAAMD,MAAMC,GAC9D;AACE,MAAIC,GACAC,IAAc,IACdC;AACJ,SAAO,MAAM;AACT,UAAMC,IAAOR,EAAA;AACb,YAAI,CAACM,KAAe,CAACJ,EAAWM,GAAMH,CAAI,OACtCA,IAAMG,GACNF,IAAc,IACdC,IAASN,EAASO,CAAI,IAEnBD;AAAA,EACX;AACJ;AAEO,SAASE,EAAQC,GAA2B;AAC/C,MAAIC,GACAL,IAAc;AAElB,SAAO,OACEA,MACDK,IAAWD,EAAA,GACXJ,IAAc,KAEXK;AAEf;AAEO,SAASC,EAAqBC,GAAQC,GAA4B;AACrE,MAAIC,IAA+C,CAAA;AACnD,aAAWC,KAAgBF;AACvB,IAAAC,EAAsBC,CAAY,IAAI;AAAA,MAClC,YAAY;AAAA,IAAA;AAGpB,SAAO,iBAAiBH,GAAKE,CAAqB;AACtD;"}
|