@welshman/util 0.1.2 → 0.1.3

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 (98) hide show
  1. package/LICENSE +21 -0
  2. package/dist/lib/src/Deferred.d.ts +21 -0
  3. package/dist/lib/src/Deferred.d.ts.map +1 -0
  4. package/dist/lib/src/Deferred.js +21 -0
  5. package/dist/lib/src/Deferred.js.map +1 -0
  6. package/dist/lib/src/Emitter.d.ts +14 -0
  7. package/dist/lib/src/Emitter.d.ts.map +1 -0
  8. package/dist/lib/src/Emitter.js +18 -0
  9. package/dist/lib/src/Emitter.js.map +1 -0
  10. package/dist/lib/src/LRUCache.d.ts +42 -0
  11. package/dist/lib/src/LRUCache.d.ts.map +1 -0
  12. package/dist/lib/src/LRUCache.js +62 -0
  13. package/dist/lib/src/LRUCache.js.map +1 -0
  14. package/dist/lib/src/TaskQueue.d.ts +18 -0
  15. package/dist/lib/src/TaskQueue.d.ts.map +1 -0
  16. package/dist/lib/src/TaskQueue.js +47 -0
  17. package/dist/lib/src/TaskQueue.js.map +1 -0
  18. package/dist/lib/src/Tools.d.ts +630 -0
  19. package/dist/lib/src/Tools.d.ts.map +1 -0
  20. package/dist/lib/src/Tools.js +1061 -0
  21. package/dist/lib/src/Tools.js.map +1 -0
  22. package/dist/lib/src/index.d.ts +7 -0
  23. package/dist/lib/src/index.d.ts.map +1 -0
  24. package/dist/lib/src/index.js +7 -0
  25. package/dist/lib/src/index.js.map +1 -0
  26. package/dist/lib/src/normalize-url/index.d.ts +286 -0
  27. package/dist/lib/src/normalize-url/index.d.ts.map +1 -0
  28. package/dist/lib/src/normalize-url/index.js +252 -0
  29. package/dist/lib/src/normalize-url/index.js.map +1 -0
  30. package/dist/tsconfig.build.tsbuildinfo +1 -0
  31. package/{build → dist/util}/src/Address.d.ts +1 -0
  32. package/dist/util/src/Address.d.ts.map +1 -0
  33. package/dist/util/src/Address.js.map +1 -0
  34. package/{build → dist/util}/src/Encryptable.d.ts +1 -0
  35. package/dist/util/src/Encryptable.d.ts.map +1 -0
  36. package/dist/util/src/Encryptable.js.map +1 -0
  37. package/{build → dist/util}/src/Events.d.ts +4 -3
  38. package/dist/util/src/Events.d.ts.map +1 -0
  39. package/{build → dist/util}/src/Events.js +3 -3
  40. package/dist/util/src/Events.js.map +1 -0
  41. package/{build → dist/util}/src/Filters.d.ts +1 -0
  42. package/dist/util/src/Filters.d.ts.map +1 -0
  43. package/dist/util/src/Filters.js.map +1 -0
  44. package/{build → dist/util}/src/Handler.d.ts +2 -1
  45. package/dist/util/src/Handler.d.ts.map +1 -0
  46. package/dist/util/src/Handler.js.map +1 -0
  47. package/{build → dist/util}/src/Kinds.d.ts +1 -0
  48. package/dist/util/src/Kinds.d.ts.map +1 -0
  49. package/dist/util/src/Kinds.js.map +1 -0
  50. package/{build → dist/util}/src/Links.d.ts +1 -0
  51. package/dist/util/src/Links.d.ts.map +1 -0
  52. package/dist/util/src/Links.js.map +1 -0
  53. package/{build → dist/util}/src/List.d.ts +1 -0
  54. package/dist/util/src/List.d.ts.map +1 -0
  55. package/dist/util/src/List.js.map +1 -0
  56. package/{build → dist/util}/src/Profile.d.ts +1 -0
  57. package/dist/util/src/Profile.d.ts.map +1 -0
  58. package/dist/util/src/Profile.js.map +1 -0
  59. package/{build → dist/util}/src/Relay.d.ts +1 -0
  60. package/dist/util/src/Relay.d.ts.map +1 -0
  61. package/dist/util/src/Relay.js.map +1 -0
  62. package/{build → dist/util}/src/Tags.d.ts +1 -0
  63. package/dist/util/src/Tags.d.ts.map +1 -0
  64. package/dist/util/src/Tags.js.map +1 -0
  65. package/{build → dist/util}/src/Zaps.d.ts +1 -0
  66. package/dist/util/src/Zaps.d.ts.map +1 -0
  67. package/dist/util/src/Zaps.js.map +1 -0
  68. package/{build → dist/util}/src/index.d.ts +1 -0
  69. package/dist/util/src/index.d.ts.map +1 -0
  70. package/dist/util/src/index.js.map +1 -0
  71. package/package.json +16 -22
  72. package/README.md +0 -15
  73. package/build/src/Address.js.map +0 -1
  74. package/build/src/Encryptable.js.map +0 -1
  75. package/build/src/Events.js.map +0 -1
  76. package/build/src/Filters.js.map +0 -1
  77. package/build/src/Handler.js.map +0 -1
  78. package/build/src/Kinds.js.map +0 -1
  79. package/build/src/Links.js.map +0 -1
  80. package/build/src/List.js.map +0 -1
  81. package/build/src/Profile.js.map +0 -1
  82. package/build/src/Relay.js.map +0 -1
  83. package/build/src/Tags.js.map +0 -1
  84. package/build/src/Zaps.js.map +0 -1
  85. package/build/src/index.js.map +0 -1
  86. package/build/tsconfig.tsbuildinfo +0 -1
  87. /package/{build → dist/util}/src/Address.js +0 -0
  88. /package/{build → dist/util}/src/Encryptable.js +0 -0
  89. /package/{build → dist/util}/src/Filters.js +0 -0
  90. /package/{build → dist/util}/src/Handler.js +0 -0
  91. /package/{build → dist/util}/src/Kinds.js +0 -0
  92. /package/{build → dist/util}/src/Links.js +0 -0
  93. /package/{build → dist/util}/src/List.js +0 -0
  94. /package/{build → dist/util}/src/Profile.js +0 -0
  95. /package/{build → dist/util}/src/Relay.js +0 -0
  96. /package/{build → dist/util}/src/Tags.js +0 -0
  97. /package/{build → dist/util}/src/Zaps.js +0 -0
  98. /package/{build → dist/util}/src/index.js +0 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Jon Staab
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,21 @@
1
+ /** Promise type with strongly typed error */
2
+ export type CustomPromise<T, E> = Promise<T> & {
3
+ __errorType: E;
4
+ };
5
+ /**
6
+ * Creates a Promise with strongly typed error
7
+ * @param executor - Promise executor function
8
+ * @returns Promise with typed error
9
+ */
10
+ export declare function makePromise<T, E>(executor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason: E) => void) => void): CustomPromise<T, E>;
11
+ /** Promise with exposed resolve/reject functions and typed error */
12
+ export type Deferred<T, E = T> = CustomPromise<T, E> & {
13
+ resolve: (arg: T) => void;
14
+ reject: (arg: E) => void;
15
+ };
16
+ /**
17
+ * Creates a Deferred promise
18
+ * @returns Promise with resolve/reject methods exposed
19
+ */
20
+ export declare const defer: <T, E = T>() => Deferred<T, E>;
21
+ //# sourceMappingURL=Deferred.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Deferred.d.ts","sourceRoot":"","sources":["../../../../lib/src/Deferred.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG;IAC7C,WAAW,EAAE,CAAC,CAAA;CACf,CAAA;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAC9B,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,KAAK,IAAI,GAC5F,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAErB;AAED,oEAAoE;AACpE,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IACrD,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;IACzB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;CACzB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,CAQ/C,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Creates a Promise with strongly typed error
3
+ * @param executor - Promise executor function
4
+ * @returns Promise with typed error
5
+ */
6
+ export function makePromise(executor) {
7
+ return new Promise(executor);
8
+ }
9
+ /**
10
+ * Creates a Deferred promise
11
+ * @returns Promise with resolve/reject methods exposed
12
+ */
13
+ export const defer = () => {
14
+ let resolve, reject;
15
+ const p = makePromise((resolve_, reject_) => {
16
+ resolve = resolve_;
17
+ reject = reject_;
18
+ });
19
+ return Object.assign(p, { resolve, reject });
20
+ };
21
+ //# sourceMappingURL=Deferred.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Deferred.js","sourceRoot":"","sources":["../../../../lib/src/Deferred.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,QAA6F;IAE7F,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAwB,CAAA;AACrD,CAAC;AAQD;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,GAA6B,EAAE;IAClD,IAAI,OAAO,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC1C,OAAO,GAAG,QAAQ,CAAA;QAClB,MAAM,GAAG,OAAO,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAC,OAAO,EAAE,MAAM,EAAC,CAA8B,CAAA;AACzE,CAAC,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { EventEmitter } from "events";
2
+ /**
3
+ * Extended EventEmitter that also emits all events to '*' listeners
4
+ */
5
+ export declare class Emitter extends EventEmitter {
6
+ /**
7
+ * Emits an event to listeners and to '*' listeners
8
+ * @param type - Event type/name
9
+ * @param args - Arguments to pass to listeners
10
+ * @returns True if event had listeners
11
+ */
12
+ emit(type: string, ...args: any[]): boolean;
13
+ }
14
+ //# sourceMappingURL=Emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Emitter.d.ts","sourceRoot":"","sources":["../../../../lib/src/Emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAA;AAEnC;;GAEG;AACH,qBAAa,OAAQ,SAAQ,YAAY;IACvC;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;CAMlC"}
@@ -0,0 +1,18 @@
1
+ import { EventEmitter } from "events";
2
+ /**
3
+ * Extended EventEmitter that also emits all events to '*' listeners
4
+ */
5
+ export class Emitter extends EventEmitter {
6
+ /**
7
+ * Emits an event to listeners and to '*' listeners
8
+ * @param type - Event type/name
9
+ * @param args - Arguments to pass to listeners
10
+ * @returns True if event had listeners
11
+ */
12
+ emit(type, ...args) {
13
+ const a = super.emit(type, ...args);
14
+ const b = super.emit("*", type, ...args);
15
+ return a && b;
16
+ }
17
+ }
18
+ //# sourceMappingURL=Emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Emitter.js","sourceRoot":"","sources":["../../../../lib/src/Emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAA;AAEnC;;GAEG;AACH,MAAM,OAAO,OAAQ,SAAQ,YAAY;IACvC;;;;;OAKG;IACH,IAAI,CAAC,IAAY,EAAE,GAAG,IAAW;QAC/B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;QACnC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;QAExC,OAAO,CAAC,IAAI,CAAC,CAAA;IACf,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Least Recently Used (LRU) cache implementation
3
+ * @template T - Type of cache keys
4
+ * @template U - Type of cache values
5
+ */
6
+ export declare class LRUCache<T, U> {
7
+ readonly maxSize: number;
8
+ map: Map<T, U>;
9
+ keys: T[];
10
+ constructor(maxSize?: number);
11
+ has(k: T): boolean;
12
+ get(k: T): U | undefined;
13
+ set(k: T, v: U): void;
14
+ }
15
+ /**
16
+ * Creates a memoized function with LRU caching
17
+ * @template T - Cache key type
18
+ * @template V - Cache value type
19
+ * @template Args - Function argument types
20
+ */
21
+ export declare function cached<T, V, Args extends any[]>({ maxSize, getKey, getValue, }: {
22
+ maxSize: number;
23
+ getKey: (args: Args) => T;
24
+ getValue: (args: Args) => V;
25
+ }): {
26
+ (...args: Args): NonNullable<V>;
27
+ cache: LRUCache<T, V>;
28
+ getKey: (args: Args) => T;
29
+ getValue: (args: Args) => V;
30
+ };
31
+ /**
32
+ * Creates a simple memoized function with default settings
33
+ * @template V - Cache value type
34
+ * @template Args - Function argument types
35
+ */
36
+ export declare function simpleCache<V, Args extends any[]>(getValue: (args: Args) => V): {
37
+ (...args: Args): NonNullable<V>;
38
+ cache: LRUCache<string, V>;
39
+ getKey: (args: Args) => string;
40
+ getValue: (args: Args) => V;
41
+ };
42
+ //# sourceMappingURL=LRUCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LRUCache.d.ts","sourceRoot":"","sources":["../../../../lib/src/LRUCache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IAIZ,QAAQ,CAAC,OAAO,EAAE,MAAM;IAHpC,GAAG,YAAkB;IACrB,IAAI,EAAE,CAAC,EAAE,CAAK;gBAEO,OAAO,GAAE,MAAiB;IAE/C,GAAG,CAAC,CAAC,EAAE,CAAC;IAIR,GAAG,CAAC,CAAC,EAAE,CAAC;IAcR,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAQf;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,SAAS,GAAG,EAAE,EAAE,EAC/C,OAAO,EACP,MAAM,EACN,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAA;IACzB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAA;CAC5B;cAGuB,IAAI;;mBALX,IAAI,KAAK,CAAC;qBACR,IAAI,KAAK,CAAC;EAmB5B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC;;;;;EAE7E"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Least Recently Used (LRU) cache implementation
3
+ * @template T - Type of cache keys
4
+ * @template U - Type of cache values
5
+ */
6
+ export class LRUCache {
7
+ maxSize;
8
+ map = new Map();
9
+ keys = [];
10
+ constructor(maxSize = Infinity) {
11
+ this.maxSize = maxSize;
12
+ }
13
+ has(k) {
14
+ return this.map.has(k);
15
+ }
16
+ get(k) {
17
+ const v = this.map.get(k);
18
+ if (v !== undefined) {
19
+ this.keys.push(k);
20
+ if (this.keys.length > this.maxSize * 2) {
21
+ this.keys = this.keys.splice(-this.maxSize);
22
+ }
23
+ }
24
+ return v;
25
+ }
26
+ set(k, v) {
27
+ this.map.set(k, v);
28
+ this.keys.push(k);
29
+ if (this.map.size > this.maxSize) {
30
+ this.map.delete(this.keys.shift());
31
+ }
32
+ }
33
+ }
34
+ /**
35
+ * Creates a memoized function with LRU caching
36
+ * @template T - Cache key type
37
+ * @template V - Cache value type
38
+ * @template Args - Function argument types
39
+ */
40
+ export function cached({ maxSize, getKey, getValue, }) {
41
+ const cache = new LRUCache(maxSize);
42
+ const get = (...args) => {
43
+ const k = getKey(args);
44
+ if (!cache.has(k)) {
45
+ cache.set(k, getValue(args));
46
+ }
47
+ return cache.get(k);
48
+ };
49
+ get.cache = cache;
50
+ get.getKey = getKey;
51
+ get.getValue = getValue;
52
+ return get;
53
+ }
54
+ /**
55
+ * Creates a simple memoized function with default settings
56
+ * @template V - Cache value type
57
+ * @template Args - Function argument types
58
+ */
59
+ export function simpleCache(getValue) {
60
+ return cached({ maxSize: 10 ** 5, getKey: xs => xs.join(":"), getValue });
61
+ }
62
+ //# sourceMappingURL=LRUCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LRUCache.js","sourceRoot":"","sources":["../../../../lib/src/LRUCache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,QAAQ;IAIE;IAHrB,GAAG,GAAG,IAAI,GAAG,EAAQ,CAAA;IACrB,IAAI,GAAQ,EAAE,CAAA;IAEd,YAAqB,UAAkB,QAAQ;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;IAEnD,GAAG,CAAC,CAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACxB,CAAC;IAED,GAAG,CAAC,CAAI;QACN,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAEzB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAM,CAAC,CAAA;YAEtB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7C,CAAC;QACH,CAAC;QAED,OAAO,CAAC,CAAA;IACV,CAAC;IAED,GAAG,CAAC,CAAI,EAAE,CAAI;QACZ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAEjB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAO,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAA2B,EAC/C,OAAO,EACP,MAAM,EACN,QAAQ,GAKT;IACC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAO,OAAO,CAAC,CAAA;IAEzC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAU,EAAE,EAAE;QAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QAEtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9B,CAAC;QAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAA;IACtB,CAAC,CAAA;IAED,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IACjB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAA;IACnB,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAEvB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAwB,QAA2B;IAC5E,OAAO,MAAM,CAAC,EAAC,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAC,CAAC,CAAA;AACzE,CAAC"}
@@ -0,0 +1,18 @@
1
+ export type TaskQueueOptions<Item> = {
2
+ batchSize: number;
3
+ processItem: (item: Item) => unknown;
4
+ };
5
+ export declare class TaskQueue<Item> {
6
+ readonly options: TaskQueueOptions<Item>;
7
+ items: Item[];
8
+ isPaused: boolean;
9
+ isProcessing: boolean;
10
+ constructor(options: TaskQueueOptions<Item>);
11
+ push(item: Item): void;
12
+ remove(item: Item): void;
13
+ process(): Promise<void>;
14
+ stop(): void;
15
+ start(): void;
16
+ clear(): void;
17
+ }
18
+ //# sourceMappingURL=TaskQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskQueue.d.ts","sourceRoot":"","sources":["../../../../lib/src/TaskQueue.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,CAAC,IAAI,IAAI;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAA;CACrC,CAAA;AAED,qBAAa,SAAS,CAAC,IAAI;IAKb,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC;IAJpD,KAAK,EAAE,IAAI,EAAE,CAAK;IAClB,QAAQ,UAAQ;IAChB,YAAY,UAAQ;gBAEC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC;IAEpD,IAAI,CAAC,IAAI,EAAE,IAAI;IAKf,MAAM,CAAC,IAAI,EAAE,IAAI;IAIX,OAAO;IAwBb,IAAI;IAIJ,KAAK;IAKL,KAAK;CAGN"}
@@ -0,0 +1,47 @@
1
+ import { remove, yieldThread } from "./Tools.js";
2
+ export class TaskQueue {
3
+ options;
4
+ items = [];
5
+ isPaused = false;
6
+ isProcessing = false;
7
+ constructor(options) {
8
+ this.options = options;
9
+ }
10
+ push(item) {
11
+ this.items.push(item);
12
+ this.process();
13
+ }
14
+ remove(item) {
15
+ this.items = remove(item, this.items);
16
+ }
17
+ async process() {
18
+ if (this.isProcessing || this.isPaused || this.items.length === 0) {
19
+ return;
20
+ }
21
+ this.isProcessing = true;
22
+ await yieldThread();
23
+ for (const item of this.items.splice(0, this.options.batchSize)) {
24
+ try {
25
+ await this.options.processItem(item);
26
+ }
27
+ catch (e) {
28
+ console.error(e);
29
+ }
30
+ }
31
+ this.isProcessing = false;
32
+ if (this.items.length > 0) {
33
+ this.process();
34
+ }
35
+ }
36
+ stop() {
37
+ this.isPaused = true;
38
+ }
39
+ start() {
40
+ this.isPaused = false;
41
+ this.process();
42
+ }
43
+ clear() {
44
+ this.items = [];
45
+ }
46
+ }
47
+ //# sourceMappingURL=TaskQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskQueue.js","sourceRoot":"","sources":["../../../../lib/src/TaskQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,YAAY,CAAA;AAO9C,MAAM,OAAO,SAAS;IAKC;IAJrB,KAAK,GAAW,EAAE,CAAA;IAClB,QAAQ,GAAG,KAAK,CAAA;IAChB,YAAY,GAAG,KAAK,CAAA;IAEpB,YAAqB,OAA+B;QAA/B,YAAO,GAAP,OAAO,CAAwB;IAAG,CAAC;IAExD,IAAI,CAAC,IAAU;QACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED,MAAM,CAAC,IAAU;QACf,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,OAAM;QACR,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QAExB,MAAM,WAAW,EAAE,CAAA;QAEnB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YACtC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;QAEzB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAA;QAChB,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;IACtB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QACrB,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACjB,CAAC;CACF"}