@actdim/utico 1.2.5 → 1.2.7

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.
Files changed (59) hide show
  1. package/README.md +73 -3
  2. package/dist/arrayExtensions.es.js +64 -38
  3. package/dist/arrayExtensions.es.js.map +1 -1
  4. package/dist/asyncLock.es.js +45 -30
  5. package/dist/asyncLock.es.js.map +1 -1
  6. package/dist/cache/cacheContracts.es.js +8 -4
  7. package/dist/cache/cacheContracts.es.js.map +1 -1
  8. package/dist/cache/memoryCache.es.js +28 -13
  9. package/dist/cache/memoryCache.es.js.map +1 -1
  10. package/dist/cache/persistentCache.es.js +174 -97
  11. package/dist/cache/persistentCache.es.js.map +1 -1
  12. package/dist/dataFormats.es.js +4 -4
  13. package/dist/dataFormats.es.js.map +1 -1
  14. package/dist/dateTimeDataFormat.es.js +211 -130
  15. package/dist/dateTimeDataFormat.es.js.map +1 -1
  16. package/dist/decorators.es.js +15 -11
  17. package/dist/decorators.es.js.map +1 -1
  18. package/dist/gfx/canvasUtils.es.js +197 -114
  19. package/dist/gfx/canvasUtils.es.js.map +1 -1
  20. package/dist/gfx/color.es.js +134 -68
  21. package/dist/gfx/color.es.js.map +1 -1
  22. package/dist/i18n/cultures.es.js +8 -8
  23. package/dist/i18n/cultures.es.js.map +1 -1
  24. package/dist/i18n/enUsCulture.es.js +2 -2
  25. package/dist/i18n/enUsCulture.es.js.map +1 -1
  26. package/dist/i18n/euCulture.es.js +2 -2
  27. package/dist/i18n/euCulture.es.js.map +1 -1
  28. package/dist/i18n/invariantCulture.es.js +2 -2
  29. package/dist/i18n/invariantCulture.es.js.map +1 -1
  30. package/dist/index.es.js.map +1 -1
  31. package/dist/math.es.js +14 -8
  32. package/dist/math.es.js.map +1 -1
  33. package/dist/metadata.es.js +53 -25
  34. package/dist/metadata.es.js.map +1 -1
  35. package/dist/patterns.es.js +5 -3
  36. package/dist/patterns.es.js.map +1 -1
  37. package/dist/store/dataStore.es.js +241 -157
  38. package/dist/store/dataStore.es.js.map +1 -1
  39. package/dist/store/persistentStore.es.js +23 -17
  40. package/dist/store/persistentStore.es.js.map +1 -1
  41. package/dist/store/storeContracts.es.js +7 -3
  42. package/dist/store/storeContracts.es.js.map +1 -1
  43. package/dist/store/storeDb.es.js +87 -50
  44. package/dist/store/storeDb.es.js.map +1 -1
  45. package/dist/stringCore.es.js +60 -22
  46. package/dist/stringCore.es.js.map +1 -1
  47. package/dist/structEvent.es.js +30 -17
  48. package/dist/structEvent.es.js.map +1 -1
  49. package/dist/typeCore.es.js +25 -11
  50. package/dist/typeCore.es.js.map +1 -1
  51. package/dist/typeUtils.es.js +292 -182
  52. package/dist/typeUtils.es.js.map +1 -1
  53. package/dist/utils.d.ts +3 -3
  54. package/dist/utils.d.ts.map +1 -1
  55. package/dist/utils.es.js +138 -81
  56. package/dist/utils.es.js.map +1 -1
  57. package/dist/watchable.es.js +50 -27
  58. package/dist/watchable.es.js.map +1 -1
  59. package/package.json +2 -2
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
@@ -1,56 +1,82 @@
1
- Array.prototype.unfold = function(n) {
2
- return this.reduce((t, r) => (Array.prototype.push.apply(t, n(r)), t), []);
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ Array.prototype.unfold = function(callback) {
4
+ return this.reduce((res, element) => {
5
+ Array.prototype.push.apply(res, callback(element));
6
+ return res;
7
+ }, []);
3
8
  };
4
- Array.prototype.max = function(n, t) {
5
- return this.length == 0 ? t : this.reduce((r, o) => {
6
- const i = n(o);
7
- return r === void 0 || i > r ? i : r;
9
+ Array.prototype.max = function(selector, defaultValue) {
10
+ if (this.length == 0) {
11
+ return defaultValue;
12
+ }
13
+ return this.reduce((best, el) => {
14
+ const v = selector(el);
15
+ return best === void 0 || v > best ? v : best;
8
16
  }, void 0);
9
17
  };
10
- Array.prototype.min = function(n, t) {
11
- return this.length == 0 ? t : this.reduce((r, o) => {
12
- const i = n(o);
13
- return r === void 0 || i < r ? i : r;
18
+ Array.prototype.min = function(selector, defaultValue) {
19
+ if (this.length == 0) {
20
+ return defaultValue;
21
+ }
22
+ return this.reduce((best, el) => {
23
+ const v = selector(el);
24
+ return best === void 0 || v < best ? v : best;
14
25
  }, void 0);
15
26
  };
16
- Array.prototype.orderBy = function(n) {
17
- return this.slice(0).sort((t, r) => {
18
- const o = n(t), i = n(r);
19
- return o === i ? 0 : o > i ? 1 : -1;
27
+ Array.prototype.orderBy = function(selector) {
28
+ return this.slice(0).sort((a, b) => {
29
+ const va = selector(a), vb = selector(b);
30
+ return va === vb ? 0 : va > vb ? 1 : -1;
20
31
  });
21
32
  };
22
- Array.prototype.orderByDesc = function(n) {
23
- return this.slice(0).sort((t, r) => {
24
- const o = n(t), i = n(r);
25
- return o === i ? 0 : o > i ? -1 : 1;
33
+ Array.prototype.orderByDesc = function(selector) {
34
+ return this.slice(0).sort((a, b) => {
35
+ const va = selector(a), vb = selector(b);
36
+ return va === vb ? 0 : va > vb ? -1 : 1;
26
37
  });
27
38
  };
28
- Array.prototype.groupBy = function(n) {
29
- return this.reduce((t, r) => {
30
- const o = n(r);
31
- return (t[o] = t[o] || []).push(r), t;
39
+ Array.prototype.groupBy = function(selector) {
40
+ return this.reduce((result, item) => {
41
+ const value = selector(item);
42
+ (result[value] = result[value] || []).push(item);
43
+ return result;
32
44
  }, {});
33
45
  };
34
- Array.prototype.distinct = function(n) {
35
- if (!n)
46
+ Array.prototype.distinct = function(selector) {
47
+ if (!selector) {
36
48
  return [...new Set(this)];
37
- const t = /* @__PURE__ */ new Set();
38
- return this.filter(function(r) {
39
- const o = n(r);
40
- return t.has(o) ? !1 : (t.add(o), !0);
49
+ }
50
+ const seen = /* @__PURE__ */ new Set();
51
+ return this.filter(function(element) {
52
+ const key = selector(element);
53
+ if (seen.has(key)) return false;
54
+ seen.add(key);
55
+ return true;
41
56
  });
42
57
  };
43
- Array.prototype.copy = function(n, t = 0, r = 0, o) {
44
- return y(n, this, t, r, o);
58
+ Array.prototype.copy = function(src, srcIndex = 0, dstIndex = 0, length) {
59
+ return copyArray(src, this, srcIndex, dstIndex, length);
45
60
  };
46
- Array.prototype.copyTo = function(n, t = 0, r = 0, o) {
47
- return y(this, n, t, r, o);
61
+ Array.prototype.copyTo = function(dst, srcIndex = 0, dstIndex = 0, length) {
62
+ return copyArray(this, dst, srcIndex, dstIndex, length);
48
63
  };
49
- function y(n, t, r = 0, o = 0, i) {
50
- r < 0 && (r = 0), o < 0 && (o = 0), i == null && (i = n.length - r);
51
- let e = o;
52
- for (let u = r; u < r + i; u++)
53
- t[e] = n[u], e++;
54
- return t;
64
+ function copyArray(src, dst, srcIndex = 0, dstIndex = 0, length) {
65
+ if (srcIndex < 0) {
66
+ srcIndex = 0;
67
+ }
68
+ if (dstIndex < 0) {
69
+ dstIndex = 0;
70
+ }
71
+ if (length == void 0) {
72
+ length = src.length - srcIndex;
73
+ }
74
+ let j = dstIndex;
75
+ for (let i = srcIndex; i < srcIndex + length; i++) {
76
+ dst[j] = src[i];
77
+ j++;
78
+ }
79
+ return dst;
55
80
  }
81
+ __name(copyArray, "copyArray");
56
82
  //# sourceMappingURL=arrayExtensions.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"arrayExtensions.es.js","sources":["D:/Src/my/actdim/public/utico/src/arrayExtensions.ts"],"sourcesContent":null,"names":["callback","res","element","selector","defaultValue","best","el","v","a","b","va","vb","result","item","value","seen","key","src","srcIndex","dstIndex","length","copyArray","dst","j","i"],"mappings":"AAmBA,MAAM,UAAU,SAAS,SAAUA,GAA0C;AACzE,SAAO,KAAK,OAAO,CAACC,GAAKC,OACrB,MAAM,UAAU,KAAK,MAAMD,GAAKD,EAASE,CAAO,CAAC,GAC1CD,IACR,CAAA,CAAE;AACT;AAEA,MAAM,UAAU,MAAM,SAAUE,GAAiCC,GAAyB;AACtF,SAAI,KAAK,UAAU,IACRA,IAEJ,KAAK,OAAO,CAACC,GAAWC,MAAY;AACvC,UAAMC,IAAIJ,EAASG,CAAE;AACrB,WAAOD,MAAS,UAAaE,IAAIF,IAAOE,IAAIF;AAAA,EAChD,GAAG,MAAS;AAChB;AAEA,MAAM,UAAU,MAAM,SAAUF,GAAiCC,GAAyB;AACtF,SAAI,KAAK,UAAU,IACRA,IAEJ,KAAK,OAAO,CAACC,GAAWC,MAAY;AACvC,UAAMC,IAAIJ,EAASG,CAAE;AACrB,WAAOD,MAAS,UAAaE,IAAIF,IAAOE,IAAIF;AAAA,EAChD,GAAG,MAAS;AAChB;AAEA,MAAM,UAAU,UAAU,SAAUF,GAAwC;AACxE,SAAO,KAAK,MAAM,CAAC,EAAE,KAAK,CAACK,GAAGC,MAAM;AAChC,UAAMC,IAAKP,EAASK,CAAC,GAAGG,IAAKR,EAASM,CAAC;AACvC,WAAOC,MAAOC,IAAK,IAAID,IAAKC,IAAK,IAAI;AAAA,EACzC,CAAC;AACL;AAEA,MAAM,UAAU,cAAc,SAAUR,GAAwC;AAC5E,SAAO,KAAK,MAAM,CAAC,EAAE,KAAK,CAACK,GAAGC,MAAM;AAChC,UAAMC,IAAKP,EAASK,CAAC,GAAGG,IAAKR,EAASM,CAAC;AACvC,WAAOC,MAAOC,IAAK,IAAID,IAAKC,IAAK,KAAK;AAAA,EAC1C,CAAC;AACL;AAEA,MAAM,UAAU,UAAU,SAAUR,GAA8D;AAC9F,SAAO,KAAK,OAAO,CAACS,GAAQC,MAAS;AACjC,UAAMC,IAAQX,EAASU,CAAI;AAC3B,YAACD,EAAOE,CAAK,IAAIF,EAAOE,CAAK,KAAK,CAAA,GAAI,KAAKD,CAAI,GACxCD;AAAA,EACX,GAAG,CAAA,CAAE;AACT;AAGA,MAAM,UAAU,WAAW,SAAUT,GAAyC;AAC1E,MAAI,CAACA;AACD,WAAO,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC;AAE5B,QAAMY,wBAAW,IAAA;AACjB,SAAO,KAAK,OAAO,SAAUb,GAAS;AAClC,UAAMc,IAAMb,EAASD,CAAO;AAC5B,WAAIa,EAAK,IAAIC,CAAG,IAAU,MAC1BD,EAAK,IAAIC,CAAG,GACL;AAAA,EACX,CAAC;AACL;AAGA,MAAM,UAAU,OAAO,SAAUC,GAAYC,IAAW,GAAGC,IAAW,GAAGC,GAAiB;AACtF,SAAOC,EAAUJ,GAAK,MAAMC,GAAUC,GAAUC,CAAM;AAC1D;AAEA,MAAM,UAAU,SAAS,SAAUE,GAAYJ,IAAW,GAAGC,IAAW,GAAGC,GAAiB;AACxF,SAAOC,EAAU,MAAMC,GAAKJ,GAAUC,GAAUC,CAAM;AAC1D;AAEA,SAASC,EAAUJ,GAAYK,GAAYJ,IAAW,GAAGC,IAAW,GAAGC,GAAiB;AACpF,EAAIF,IAAW,MACXA,IAAW,IAEXC,IAAW,MACXA,IAAW,IAEXC,KAAU,SACVA,IAASH,EAAI,SAASC;AAE1B,MAAIK,IAAIJ;AACR,WAASK,IAAIN,GAAUM,IAAIN,IAAWE,GAAQI;AAC1C,IAAAF,EAAIC,CAAC,IAAIN,EAAIO,CAAC,GACdD;AAEJ,SAAOD;AACX;"}
1
+ {"version":3,"file":"arrayExtensions.es.js","sources":["D:/Src/my/actdim/public/utico/src/arrayExtensions.ts"],"sourcesContent":["\r\ninterface Array<T> {\r\n find(callback: (element: T, index: number, array: Array<T>) => boolean): T; // aka firstOrDefault\r\n unfold<TItem>(callback: (element: T) => Array<TItem>): Array<TItem>; // aka selectMany\r\n max<TItem>(selector: (element: T) => TItem, defaultValue?: any): TItem;\r\n min<TItem>(selector: (element: T) => TItem, defaultValue?: any): TItem;\r\n orderBy<TItem>(selector: (element: T) => TItem): Array<T>;\r\n groupBy(selector: (element: T) => string): { [key: string]: Array<T> };\r\n // groupBy(key: string): { [key: string]: Array<T> };\t\r\n orderByDesc<TItem>(selector: (element: T) => TItem): Array<T>;\r\n distinct(): Array<T>; // unique\r\n distinct<TItem>(selector: (element: T) => TItem): Array<T>; // distinctBy/uniqueBy\r\n // TODO: pushMany aka addRange\r\n /** NOTE: there is no native array copy method (all existing methods rely on spread) */\r\n copy(src: any[], srcIndex?: number, dstIndex?: number, length?: number): this; // copyFrom\r\n copyTo(dst: any[], srcIndex?: number, dstIndex?: number, length?: number): this;\r\n}\r\n\r\n\r\nArray.prototype.unfold = function (callback: (element: any) => any[]): any[] {\r\n return this.reduce((res, element) => {\r\n Array.prototype.push.apply(res, callback(element));\r\n return res;\r\n }, []);\r\n};\r\n\r\nArray.prototype.max = function (selector: (element: any) => any, defaultValue?: any): any {\r\n if (this.length == 0) {\r\n return defaultValue;\r\n }\r\n return this.reduce((best: any, el: any) => {\r\n const v = selector(el);\r\n return best === undefined || v > best ? v : best;\r\n }, undefined);\r\n};\r\n\r\nArray.prototype.min = function (selector: (element: any) => any, defaultValue?: any): any {\r\n if (this.length == 0) {\r\n return defaultValue;\r\n }\r\n return this.reduce((best: any, el: any) => {\r\n const v = selector(el);\r\n return best === undefined || v < best ? v : best;\r\n }, undefined);\r\n};\r\n\r\nArray.prototype.orderBy = function (selector: (element: any) => any): any[] {\r\n return this.slice(0).sort((a, b) => {\r\n const va = selector(a), vb = selector(b);\r\n return va === vb ? 0 : va > vb ? 1 : -1;\r\n });\r\n};\r\n\r\nArray.prototype.orderByDesc = function (selector: (element: any) => any): any[] {\r\n return this.slice(0).sort((a, b) => {\r\n const va = selector(a), vb = selector(b);\r\n return va === vb ? 0 : va > vb ? -1 : 1;\r\n });\r\n};\r\n\r\nArray.prototype.groupBy = function (selector: (element: any) => string): { [key: string]: any[] } {\r\n return this.reduce((result, item) => {\r\n const value = selector(item);\r\n (result[value] = result[value] || []).push(item);\r\n return result;\r\n }, {});\r\n};\r\n\r\n// distinctBy/uniqueBy\r\nArray.prototype.distinct = function (selector?: (element: any) => any): any[] {\r\n if (!selector) {\r\n return [...new Set(this)];\r\n }\r\n const seen = new Set();\r\n return this.filter(function (element) {\r\n const key = selector(element);\r\n if (seen.has(key)) return false;\r\n seen.add(key);\r\n return true;\r\n });\r\n};\r\n\r\n// copyFrom\r\nArray.prototype.copy = function (src: any[], srcIndex = 0, dstIndex = 0, length?: number) {\r\n return copyArray(src, this, srcIndex, dstIndex, length);\r\n}\r\n\r\nArray.prototype.copyTo = function (dst: any[], srcIndex = 0, dstIndex = 0, length?: number) {\r\n return copyArray(this, dst, srcIndex, dstIndex, length);\r\n}\r\n\r\nfunction copyArray(src: any[], dst: any[], srcIndex = 0, dstIndex = 0, length?: number) {\r\n if (srcIndex < 0) {\r\n srcIndex = 0;\r\n }\r\n if (dstIndex < 0) {\r\n dstIndex = 0;\r\n }\r\n if (length == undefined) {\r\n length = src.length - srcIndex;\r\n }\r\n let j = dstIndex;\r\n for (let i = srcIndex; i < srcIndex + length; i++) {\r\n dst[j] = src[i];\r\n j++;\r\n }\r\n return dst;\r\n}"],"names":[],"mappings":";;AAmBA,MAAM,UAAU,SAAS,SAAU,UAA0C;AACzE,SAAO,KAAK,OAAO,CAAC,KAAK,YAAY;AACjC,UAAM,UAAU,KAAK,MAAM,KAAK,SAAS,OAAO,CAAC;AACjD,WAAO;AAAA,EACX,GAAG,CAAA,CAAE;AACT;AAEA,MAAM,UAAU,MAAM,SAAU,UAAiC,cAAyB;AACtF,MAAI,KAAK,UAAU,GAAG;AAClB,WAAO;AAAA,EACX;AACA,SAAO,KAAK,OAAO,CAAC,MAAW,OAAY;AACvC,UAAM,IAAI,SAAS,EAAE;AACrB,WAAO,SAAS,UAAa,IAAI,OAAO,IAAI;AAAA,EAChD,GAAG,MAAS;AAChB;AAEA,MAAM,UAAU,MAAM,SAAU,UAAiC,cAAyB;AACtF,MAAI,KAAK,UAAU,GAAG;AAClB,WAAO;AAAA,EACX;AACA,SAAO,KAAK,OAAO,CAAC,MAAW,OAAY;AACvC,UAAM,IAAI,SAAS,EAAE;AACrB,WAAO,SAAS,UAAa,IAAI,OAAO,IAAI;AAAA,EAChD,GAAG,MAAS;AAChB;AAEA,MAAM,UAAU,UAAU,SAAU,UAAwC;AACxE,SAAO,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM;AAChC,UAAM,KAAK,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC;AACvC,WAAO,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI;AAAA,EACzC,CAAC;AACL;AAEA,MAAM,UAAU,cAAc,SAAU,UAAwC;AAC5E,SAAO,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM;AAChC,UAAM,KAAK,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC;AACvC,WAAO,OAAO,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA,EAC1C,CAAC;AACL;AAEA,MAAM,UAAU,UAAU,SAAU,UAA8D;AAC9F,SAAO,KAAK,OAAO,CAAC,QAAQ,SAAS;AACjC,UAAM,QAAQ,SAAS,IAAI;AAC3B,KAAC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,CAAA,GAAI,KAAK,IAAI;AAC/C,WAAO;AAAA,EACX,GAAG,CAAA,CAAE;AACT;AAGA,MAAM,UAAU,WAAW,SAAU,UAAyC;AAC1E,MAAI,CAAC,UAAU;AACX,WAAO,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC;AAAA,EAC5B;AACA,QAAM,2BAAW,IAAA;AACjB,SAAO,KAAK,OAAO,SAAU,SAAS;AAClC,UAAM,MAAM,SAAS,OAAO;AAC5B,QAAI,KAAK,IAAI,GAAG,EAAG,QAAO;AAC1B,SAAK,IAAI,GAAG;AACZ,WAAO;AAAA,EACX,CAAC;AACL;AAGA,MAAM,UAAU,OAAO,SAAU,KAAY,WAAW,GAAG,WAAW,GAAG,QAAiB;AACtF,SAAO,UAAU,KAAK,MAAM,UAAU,UAAU,MAAM;AAC1D;AAEA,MAAM,UAAU,SAAS,SAAU,KAAY,WAAW,GAAG,WAAW,GAAG,QAAiB;AACxF,SAAO,UAAU,MAAM,KAAK,UAAU,UAAU,MAAM;AAC1D;AAEA,SAAS,UAAU,KAAY,KAAY,WAAW,GAAG,WAAW,GAAG,QAAiB;AACpF,MAAI,WAAW,GAAG;AACd,eAAW;AAAA,EACf;AACA,MAAI,WAAW,GAAG;AACd,eAAW;AAAA,EACf;AACA,MAAI,UAAU,QAAW;AACrB,aAAS,IAAI,SAAS;AAAA,EAC1B;AACA,MAAI,IAAI;AACR,WAAS,IAAI,UAAU,IAAI,WAAW,QAAQ,KAAK;AAC/C,QAAI,CAAC,IAAI,IAAI,CAAC;AACd;AAAA,EACJ;AACA,SAAO;AACX;AAhBS;"}
@@ -1,48 +1,63 @@
1
- let i = 5e3;
2
- class n {
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ let defaultLockTimeout = 1e3 * 5;
4
+ const _AsyncLock = class _AsyncLock {
3
5
  queue = Promise.resolve();
4
- locked = !1;
5
- async lock(e = i) {
6
- let t = () => {
7
- }, s;
8
- const r = this.queue;
9
- this.queue = this.queue.then(() => new Promise(t)), this.locked = !0;
10
- const c = new Promise((o, l) => {
11
- t = o, e && (s = setTimeout(() => {
12
- l(new Error("Lock timeout"));
13
- }, e));
6
+ locked = false;
7
+ async lock(timeoutMs = defaultLockTimeout) {
8
+ let begin = /* @__PURE__ */ __name(() => {
9
+ }, "begin");
10
+ let timer;
11
+ const previous = this.queue;
12
+ this.queue = this.queue.then(() => new Promise(begin));
13
+ this.locked = true;
14
+ const lockPromise = new Promise((resolve, reject) => {
15
+ begin = resolve;
16
+ if (timeoutMs) {
17
+ timer = setTimeout(() => {
18
+ reject(new Error("Lock timeout"));
19
+ }, timeoutMs);
20
+ }
14
21
  });
15
22
  try {
16
- const o = await c;
17
- return clearTimeout(s), () => {
18
- this.locked = !1, o();
23
+ const unlock = await lockPromise;
24
+ clearTimeout(timer);
25
+ return () => {
26
+ this.locked = false;
27
+ unlock();
19
28
  };
20
- } catch (o) {
21
- throw this.queue = r, this.locked = !1, o;
29
+ } catch (err) {
30
+ this.queue = previous;
31
+ this.locked = false;
32
+ throw err;
22
33
  }
23
34
  }
24
35
  tryLock() {
25
36
  if (this.locked) return null;
26
- this.locked = !0;
27
- let e;
28
- const t = new Promise((s) => {
29
- e = s;
37
+ this.locked = true;
38
+ let resolve;
39
+ const promise = new Promise((res) => {
40
+ resolve = res;
30
41
  });
31
- return this.queue = this.queue.then(() => t), () => {
32
- this.locked = !1, e();
42
+ this.queue = this.queue.then(() => promise);
43
+ return () => {
44
+ this.locked = false;
45
+ resolve();
33
46
  };
34
47
  }
35
- async dispatch(e, t = i) {
36
- const s = await this.lock(t);
48
+ async dispatch(fn, timeoutMs = defaultLockTimeout) {
49
+ const unlock = await this.lock(timeoutMs);
37
50
  try {
38
- return await e();
51
+ return await fn();
39
52
  } finally {
40
- s();
53
+ unlock();
41
54
  }
42
55
  }
43
- }
56
+ };
57
+ __name(_AsyncLock, "AsyncLock");
58
+ let AsyncLock = _AsyncLock;
44
59
  export {
45
- n as AsyncLock,
46
- i as defaultLockTimeout
60
+ AsyncLock,
61
+ defaultLockTimeout
47
62
  };
48
63
  //# sourceMappingURL=asyncLock.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"asyncLock.es.js","sources":["D:/Src/my/actdim/public/utico/src/asyncLock.ts"],"sourcesContent":null,"names":["defaultLockTimeout","AsyncLock","timeoutMs","begin","timer","previous","lockPromise","resolve","reject","unlock","err","promise","res","fn"],"mappings":"AAOO,IAAIA,IAAqB;AAEhC,MAAMC,EAAU;AAAA,EACJ,QAAQ,QAAQ,QAAA;AAAA,EAEhB,SAAS;AAAA,EAEjB,MAAM,KAAKC,IAAYF,GAAyC;AAC5D,QAAIG,IAAsC,MAAM;AAAA,IAAE,GAC9CC;AAEJ,UAAMC,IAAW,KAAK;AACtB,SAAK,QAAQ,KAAK,MAAM,KAAK,MAAM,IAAI,QAAQF,CAAK,CAAC,GACrD,KAAK,SAAS;AAEd,UAAMG,IAAc,IAAI,QAAoB,CAACC,GAASC,MAAW;AAC7D,MAAAL,IAAQI,GAEJL,MACAE,IAAQ,WAAW,MAAM;AACrB,QAAAI,EAAO,IAAI,MAAM,cAAc,CAAC;AAAA,MACpC,GAAGN,CAAS;AAAA,IAEpB,CAAC;AAED,QAAI;AACA,YAAMO,IAAS,MAAMH;AACrB,0BAAaF,CAAK,GACX,MAAM;AACT,aAAK,SAAS,IACdK,EAAA;AAAA,MACJ;AAAA,IACJ,SAASC,GAAK;AACV,iBAAK,QAAQL,GACb,KAAK,SAAS,IACRK;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,UAA+B;AAC3B,QAAI,KAAK,OAAQ,QAAO;AAExB,SAAK,SAAS;AACd,QAAIH;AACJ,UAAMI,IAAU,IAAI,QAAc,CAAAC,MAAO;AAAE,MAAAL,IAAUK;AAAA,IAAK,CAAC;AAC3D,gBAAK,QAAQ,KAAK,MAAM,KAAK,MAAMD,CAAO,GACnC,MAAM;AACT,WAAK,SAAS,IACdJ,EAAA;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,SAAYM,GAAiBX,IAAYF,GAAgC;AAC3E,UAAMS,IAAS,MAAM,KAAK,KAAKP,CAAS;AACxC,QAAI;AACA,aAAO,MAAMW,EAAA;AAAA,IACjB,UAAA;AACI,MAAAJ,EAAA;AAAA,IACJ;AAAA,EACJ;AACJ;"}
1
+ {"version":3,"file":"asyncLock.es.js","sources":["D:/Src/my/actdim/public/utico/src/asyncLock.ts"],"sourcesContent":["import { Executor } from './typeCore';\n/**\n * Example:\n * const lock = new AsyncLock();\n * await lock.dispatch(async () => {...});\n */\n\nexport let defaultLockTimeout = 1000 * 5; // 5 seconds\n\nclass AsyncLock {\n private queue = Promise.resolve();\n\n private locked = false;\n\n async lock(timeoutMs = defaultLockTimeout): Promise<() => void> {\n let begin: (unlock: () => void) => void = () => { };\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const previous = this.queue;\n this.queue = this.queue.then(() => new Promise(begin));\n this.locked = true;\n\n const lockPromise = new Promise<() => void>((resolve, reject) => {\n begin = resolve;\n\n if (timeoutMs) {\n timer = setTimeout(() => {\n reject(new Error(\"Lock timeout\"));\n }, timeoutMs);\n }\n });\n\n try {\n const unlock = await lockPromise;\n clearTimeout(timer);\n return () => {\n this.locked = false;\n unlock();\n };\n } catch (err) {\n this.queue = previous;\n this.locked = false;\n throw err;\n }\n }\n\n tryLock(): (() => void) | null {\n if (this.locked) return null;\n\n this.locked = true;\n let resolve!: () => void;\n const promise = new Promise<void>(res => { resolve = res; });\n this.queue = this.queue.then(() => promise);\n return () => {\n this.locked = false;\n resolve();\n };\n }\n\n async dispatch<T>(fn: Executor<T>, timeoutMs = defaultLockTimeout): Promise<T> {\n const unlock = await this.lock(timeoutMs);\n try {\n return await fn();\n } finally {\n unlock();\n }\n }\n}\n\n\nexport {\n AsyncLock\n};\n"],"names":[],"mappings":";;AAOO,IAAI,qBAAqB,MAAO;AAEvC,MAAM,aAAN,MAAM,WAAU;AAAA,EACJ,QAAQ,QAAQ,QAAA;AAAA,EAEhB,SAAS;AAAA,EAEjB,MAAM,KAAK,YAAY,oBAAyC;AAC5D,QAAI,QAAsC,6BAAM;AAAA,IAAE,GAAR;AAC1C,QAAI;AAEJ,UAAM,WAAW,KAAK;AACtB,SAAK,QAAQ,KAAK,MAAM,KAAK,MAAM,IAAI,QAAQ,KAAK,CAAC;AACrD,SAAK,SAAS;AAEd,UAAM,cAAc,IAAI,QAAoB,CAAC,SAAS,WAAW;AAC7D,cAAQ;AAER,UAAI,WAAW;AACX,gBAAQ,WAAW,MAAM;AACrB,iBAAO,IAAI,MAAM,cAAc,CAAC;AAAA,QACpC,GAAG,SAAS;AAAA,MAChB;AAAA,IACJ,CAAC;AAED,QAAI;AACA,YAAM,SAAS,MAAM;AACrB,mBAAa,KAAK;AAClB,aAAO,MAAM;AACT,aAAK,SAAS;AACd,eAAA;AAAA,MACJ;AAAA,IACJ,SAAS,KAAK;AACV,WAAK,QAAQ;AACb,WAAK,SAAS;AACd,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,UAA+B;AAC3B,QAAI,KAAK,OAAQ,QAAO;AAExB,SAAK,SAAS;AACd,QAAI;AACJ,UAAM,UAAU,IAAI,QAAc,CAAA,QAAO;AAAE,gBAAU;AAAA,IAAK,CAAC;AAC3D,SAAK,QAAQ,KAAK,MAAM,KAAK,MAAM,OAAO;AAC1C,WAAO,MAAM;AACT,WAAK,SAAS;AACd,cAAA;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,SAAY,IAAiB,YAAY,oBAAgC;AAC3E,UAAM,SAAS,MAAM,KAAK,KAAK,SAAS;AACxC,QAAI;AACA,aAAO,MAAM,GAAA;AAAA,IACjB,UAAA;AACI,aAAA;AAAA,IACJ;AAAA,EACJ;AACJ;AA1DgB;AAAhB,IAAM,YAAN;"}
@@ -1,13 +1,17 @@
1
- import { MetadataRecord as e } from "../store/storeContracts.es.js";
2
- class i extends e {
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { MetadataRecord } from "../store/storeContracts.es.js";
4
+ const _CacheMetadataRecord = class _CacheMetadataRecord extends MetadataRecord {
3
5
  accessedAt;
4
6
  // lastAccessed/lastAccessTime
5
7
  slidingExpiration;
6
8
  absoluteExpiration;
7
9
  expiresAt;
8
10
  // expiryTime
9
- }
11
+ };
12
+ __name(_CacheMetadataRecord, "CacheMetadataRecord");
13
+ let CacheMetadataRecord = _CacheMetadataRecord;
10
14
  export {
11
- i as CacheMetadataRecord
15
+ CacheMetadataRecord
12
16
  };
13
17
  //# sourceMappingURL=cacheContracts.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cacheContracts.es.js","sources":["D:/Src/my/actdim/public/utico/src/cache/cacheContracts.ts"],"sourcesContent":null,"names":["CacheMetadataRecord","MetadataRecord"],"mappings":";AAGO,MAAMA,UAA4BC,EAAe;AAAA,EACpD;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AACJ;"}
1
+ {"version":3,"file":"cacheContracts.es.js","sources":["D:/Src/my/actdim/public/utico/src/cache/cacheContracts.ts"],"sourcesContent":["import { DataRecord, MetadataRecord, StoreItem } from \"@/store/storeContracts\";\r\n\r\n// CacheMetadataEntry\r\nexport class CacheMetadataRecord extends MetadataRecord {\r\n accessedAt?: number; // lastAccessed/lastAccessTime\r\n slidingExpiration?: number;\r\n absoluteExpiration?: number;\r\n expiresAt?: number; // expiryTime\r\n}\r\n\r\nexport interface IPersistentCache<T extends CacheMetadataRecord = CacheMetadataRecord> {\r\n\r\n open(): Promise<void>;\r\n\r\n getKeys(): Promise<string[]>;\r\n\r\n contains(key: string): Promise<boolean>;\r\n\r\n delete(key: string): Promise<void>;\r\n\r\n bulkDelete(keys: string[]): Promise<void>;\r\n\r\n clear(): Promise<void>;\r\n\r\n get<TValue = any>(key: string): Promise<StoreItem<T, TValue>>;\r\n\r\n set<TValue = any>(metadataRecord: T, value: TValue): Promise<string>;\r\n\r\n getOrSet<TValue = any>(metadataRecord: T, factory: (metadataRecord: T) => TValue): Promise<StoreItem<T, TValue>>\r\n\r\n bulkGet<TValue = any>(keys: string[]): Promise<StoreItem<T, TValue>[]>;\r\n\r\n bulkSet<TValue = any>(metadataRecords: T[], dataRecords: DataRecord<TValue>[]): Promise<string[]>;\r\n}"],"names":[],"mappings":";;;AAGO,MAAM,uBAAN,MAAM,6BAA4B,eAAe;AAAA,EACpD;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AACJ;AALwD;AAAjD,IAAM,sBAAN;"}
@@ -1,4 +1,6 @@
1
- class i {
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ const _MemoryCache = class _MemoryCache {
2
4
  map;
3
5
  constructor() {
4
6
  this.map = /* @__PURE__ */ new Map();
@@ -9,17 +11,21 @@ class i {
9
11
  getKeys() {
10
12
  return this.keys;
11
13
  }
12
- get(t) {
13
- return this.map.get(t);
14
+ get(key) {
15
+ return this.map.get(key);
14
16
  }
15
- contains(t) {
16
- return this.map.has(t);
17
+ contains(key) {
18
+ return this.map.has(key);
17
19
  }
18
- remove(t) {
19
- this.map.delete(t);
20
+ remove(key) {
21
+ this.map.delete(key);
20
22
  }
21
- set(t, e) {
22
- e instanceof Function ? this.map.set(t, e()) : this.map.set(t, e);
23
+ set(key, valueOrValueFactory) {
24
+ if (valueOrValueFactory instanceof Function) {
25
+ this.map.set(key, valueOrValueFactory());
26
+ } else {
27
+ this.map.set(key, valueOrValueFactory);
28
+ }
23
29
  }
24
30
  get values() {
25
31
  return this.getValues();
@@ -27,8 +33,15 @@ class i {
27
33
  getValues() {
28
34
  return this.map.values();
29
35
  }
30
- getOrSet(t, e) {
31
- return this.contains(t) || (e instanceof Function ? this.map.set(t, e()) : this.map.set(t, e)), this.get(t);
36
+ getOrSet(key, valueOrValueFactory) {
37
+ if (!this.contains(key)) {
38
+ if (valueOrValueFactory instanceof Function) {
39
+ this.map.set(key, valueOrValueFactory());
40
+ } else {
41
+ this.map.set(key, valueOrValueFactory);
42
+ }
43
+ }
44
+ return this.get(key);
32
45
  }
33
46
  clear() {
34
47
  this.map.clear();
@@ -42,8 +55,10 @@ class i {
42
55
  get entries() {
43
56
  return this.map.entries();
44
57
  }
45
- }
58
+ };
59
+ __name(_MemoryCache, "MemoryCache");
60
+ let MemoryCache = _MemoryCache;
46
61
  export {
47
- i as MemoryCache
62
+ MemoryCache
48
63
  };
49
64
  //# sourceMappingURL=memoryCache.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memoryCache.es.js","sources":["D:/Src/my/actdim/public/utico/src/cache/memoryCache.ts"],"sourcesContent":null,"names":["MemoryCache","key","valueOrValueFactory"],"mappings":"AAeO,MAAMA,EAA8D;AAAA,EAC/D;AAAA,EAER,cAAc;AACV,SAAK,0BAAU,IAAA;AAAA,EACnB;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,IAAI,KAAA;AAAA,EACpB;AAAA,EAEA,UAAU;AACN,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAIC,GAAW;AACX,WAAO,KAAK,IAAI,IAAIA,CAAG;AAAA,EAC3B;AAAA,EAEA,SAASA,GAAW;AAChB,WAAO,KAAK,IAAI,IAAIA,CAAG;AAAA,EAC3B;AAAA,EAEA,OAAOA,GAAW;AACd,SAAK,IAAI,OAAOA,CAAG;AAAA,EACvB;AAAA,EAEA,IAAIA,GAAWC,GAA8C;AACzD,IAAIA,aAA+B,WAC/B,KAAK,IAAI,IAAID,GAAKC,EAAA,CAAqB,IAEvC,KAAK,IAAI,IAAID,GAAKC,CAAmB;AAAA,EAE7C;AAAA,EAEA,IAAI,SAAS;AACT,WAAO,KAAK,UAAA;AAAA,EAChB;AAAA,EAEA,YAAY;AACR,WAAO,KAAK,IAAI,OAAA;AAAA,EACpB;AAAA,EAEA,SAASD,GAAWC,GAA8C;AAC9D,WAAK,KAAK,SAASD,CAAG,MAEdC,aAA+B,WAE/B,KAAK,IAAI,IAAID,GAAKC,EAAA,CAAqB,IAEvC,KAAK,IAAI,IAAID,GAAKC,CAAmB,IAGtC,KAAK,IAAID,CAAG;AAAA,EACvB;AAAA,EAEA,QAAQ;AACJ,SAAK,IAAI,MAAA;AAAA,EACb;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,IAAI;AAAA,EACpB;AAAA,EAEA,aAAa;AACT,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,IAAI,QAAA;AAAA,EACpB;AACJ;"}
1
+ {"version":3,"file":"memoryCache.es.js","sources":["D:/Src/my/actdim/public/utico/src/cache/memoryCache.ts"],"sourcesContent":["export type IMemoryCache<TKey = any, TValue = any> = {\r\n get keys(): Iterable<TKey>;\r\n getKeys: () => Iterable<TKey>;\r\n get: (key: TKey) => TValue;\r\n contains: (key: TKey) => boolean;\r\n remove: (key: TKey) => void;\r\n set: (key: TKey, valueOrValueFactory: TValue | (() => TValue)) => void;\r\n get values(): Iterable<TValue>;\r\n getValues: () => Iterable<TValue>;\r\n getOrSet: (key: TKey, valueOrValueFactory: TValue | (() => TValue)) => TValue;\r\n clear: () => void;\r\n get entries(): Iterable<[TKey, TValue]>;\r\n getEntries: () => Iterable<[TKey, TValue]>;\r\n};\r\n\r\nexport class MemoryCache<TKey = any, TValue = any> implements IMemoryCache {\r\n private map: Map<TKey, TValue>;\r\n\r\n constructor() {\r\n this.map = new Map<TKey, TValue>();\r\n }\r\n\r\n get keys() {\r\n return this.map.keys();\r\n }\r\n\r\n getKeys() {\r\n return this.keys;\r\n }\r\n\r\n get(key: TKey) {\r\n return this.map.get(key);\r\n }\r\n\r\n contains(key: TKey) {\r\n return this.map.has(key);\r\n }\r\n\r\n remove(key: TKey) {\r\n this.map.delete(key);\r\n }\r\n\r\n set(key: TKey, valueOrValueFactory: TValue | (() => TValue)) {\r\n if (valueOrValueFactory instanceof Function) {\r\n this.map.set(key, valueOrValueFactory());\r\n } else {\r\n this.map.set(key, valueOrValueFactory);\r\n }\r\n }\r\n\r\n get values() {\r\n return this.getValues();\r\n }\r\n\r\n getValues() {\r\n return this.map.values();\r\n }\r\n\r\n getOrSet(key: TKey, valueOrValueFactory: TValue | (() => TValue)) {\r\n if (!this.contains(key)) {\r\n // this.set(key, valueOrValueFactory);\r\n if (valueOrValueFactory instanceof Function) {\r\n // typeof valueOrValueFactory === \"function\"\r\n this.map.set(key, valueOrValueFactory());\r\n } else {\r\n this.map.set(key, valueOrValueFactory);\r\n }\r\n }\r\n return this.get(key);\r\n }\r\n\r\n clear() {\r\n this.map.clear();\r\n }\r\n\r\n get size() {\r\n return this.map.size;\r\n }\r\n\r\n getEntries() {\r\n return this.entries;\r\n }\r\n\r\n get entries() {\r\n return this.map.entries();\r\n }\r\n}"],"names":[],"mappings":";;AAeO,MAAM,eAAN,MAAM,aAA8D;AAAA,EAC/D;AAAA,EAER,cAAc;AACV,SAAK,0BAAU,IAAA;AAAA,EACnB;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,IAAI,KAAA;AAAA,EACpB;AAAA,EAEA,UAAU;AACN,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,KAAW;AACX,WAAO,KAAK,IAAI,IAAI,GAAG;AAAA,EAC3B;AAAA,EAEA,SAAS,KAAW;AAChB,WAAO,KAAK,IAAI,IAAI,GAAG;AAAA,EAC3B;AAAA,EAEA,OAAO,KAAW;AACd,SAAK,IAAI,OAAO,GAAG;AAAA,EACvB;AAAA,EAEA,IAAI,KAAW,qBAA8C;AACzD,QAAI,+BAA+B,UAAU;AACzC,WAAK,IAAI,IAAI,KAAK,oBAAA,CAAqB;AAAA,IAC3C,OAAO;AACH,WAAK,IAAI,IAAI,KAAK,mBAAmB;AAAA,IACzC;AAAA,EACJ;AAAA,EAEA,IAAI,SAAS;AACT,WAAO,KAAK,UAAA;AAAA,EAChB;AAAA,EAEA,YAAY;AACR,WAAO,KAAK,IAAI,OAAA;AAAA,EACpB;AAAA,EAEA,SAAS,KAAW,qBAA8C;AAC9D,QAAI,CAAC,KAAK,SAAS,GAAG,GAAG;AAErB,UAAI,+BAA+B,UAAU;AAEzC,aAAK,IAAI,IAAI,KAAK,oBAAA,CAAqB;AAAA,MAC3C,OAAO;AACH,aAAK,IAAI,IAAI,KAAK,mBAAmB;AAAA,MACzC;AAAA,IACJ;AACA,WAAO,KAAK,IAAI,GAAG;AAAA,EACvB;AAAA,EAEA,QAAQ;AACJ,SAAK,IAAI,MAAA;AAAA,EACb;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,IAAI;AAAA,EACpB;AAAA,EAEA,aAAa;AACT,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,IAAI,QAAA;AAAA,EACpB;AACJ;AAvE2E;AAApE,IAAM,cAAN;"}