@keeex/utils 7.3.0 → 7.5.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.
Files changed (56) hide show
  1. package/lib/async/eventqueue.d.ts +60 -0
  2. package/lib/async/eventqueue.js +129 -0
  3. package/lib/async/keycache.d.ts +1 -1
  4. package/lib/async/timecache.d.ts +1 -1
  5. package/lib/benchmark.d.ts +1 -1
  6. package/lib/benchmark.js +2 -2
  7. package/lib/bits/arraybuffer.js +2 -1
  8. package/lib/bits/triggers/base.d.ts +3 -3
  9. package/lib/bits/triggers/base.js +3 -3
  10. package/lib/bits/triggers/debounce.d.ts +1 -1
  11. package/lib/bits/triggers/grenade.d.ts +1 -1
  12. package/lib/bits/triggers/types.d.ts +1 -1
  13. package/lib/cron.d.ts +2 -2
  14. package/lib/cron.js +1 -1
  15. package/lib/dataview.d.ts +22 -0
  16. package/lib/dataview.js +29 -0
  17. package/lib/marshalling/marshaller.d.ts +1 -1
  18. package/lib/promise.d.ts +1 -1
  19. package/lib/promise.js +0 -1
  20. package/lib/triggers.d.ts +4 -4
  21. package/lib/types/array.d.ts +6 -6
  22. package/lib/types/array.js +3 -3
  23. package/lib/types/enum.d.ts +3 -3
  24. package/lib/types/enum.js +2 -2
  25. package/lib/types/record.d.ts +7 -7
  26. package/lib/types/record.js +3 -3
  27. package/lib/types/utils.d.ts +4 -3
  28. package/lib/types/utils.js +13 -6
  29. package/package.json +1 -1
  30. package/web/async/eventqueue.d.ts +60 -0
  31. package/web/async/eventqueue.js +126 -0
  32. package/web/async/keycache.d.ts +1 -1
  33. package/web/async/timecache.d.ts +1 -1
  34. package/web/benchmark.d.ts +1 -1
  35. package/web/benchmark.js +2 -2
  36. package/web/bits/arraybuffer.js +3 -1
  37. package/web/bits/triggers/base.d.ts +3 -3
  38. package/web/bits/triggers/base.js +3 -3
  39. package/web/bits/triggers/debounce.d.ts +1 -1
  40. package/web/bits/triggers/grenade.d.ts +1 -1
  41. package/web/bits/triggers/types.d.ts +1 -1
  42. package/web/cron.d.ts +2 -2
  43. package/web/dataview.d.ts +22 -0
  44. package/web/dataview.js +27 -0
  45. package/web/marshalling/marshaller.d.ts +1 -1
  46. package/web/promise.d.ts +1 -1
  47. package/web/promise.js +0 -1
  48. package/web/triggers.d.ts +4 -4
  49. package/web/types/array.d.ts +6 -6
  50. package/web/types/array.js +3 -3
  51. package/web/types/enum.d.ts +3 -3
  52. package/web/types/enum.js +2 -2
  53. package/web/types/record.d.ts +7 -7
  54. package/web/types/record.js +3 -3
  55. package/web/types/utils.d.ts +4 -3
  56. package/web/types/utils.js +6 -6
@@ -13,8 +13,9 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import ms from "ms";
16
+ import * as types from "./types.js";
17
+ import type ms from "ms";
17
18
  /** Check that the argument match the string portion of `ms()` */
18
- export declare const isMsStringValue: import("./types.js").TypePredicate<ms.StringValue>;
19
+ export declare const isMsStringValue: types.TypePredicate<ms.StringValue>;
19
20
  /** Check that a value is suitable for input for `ms()` */
20
- export declare const isMsInput: import("./types.js").TypePredicate<number | ms.StringValue>;
21
+ export declare const isMsInput: types.TypePredicate<number | ms.StringValue>;
@@ -14,7 +14,7 @@
14
14
  *
15
15
  */
16
16
  import { isNumber } from "./primitive.js";
17
- import { makeOrPredicate, makeTemplatePredicate } from "./types.js";
17
+ import * as types from "./types.js";
18
18
  /** All `ms()` units, extracted from type definition */
19
19
  const msBaseUnits = [
20
20
  "Years",
@@ -55,14 +55,21 @@ const msUnitAnyCase = Array.from(new Set([
55
55
  ...msBaseUnits.map((c) => c.toUpperCase()),
56
56
  ...msBaseUnits.map((c) => c.toLowerCase()),
57
57
  ]));
58
- const isMsStrInput = makeTemplatePredicate("${number}");
59
- const isMsStrUnitPredicate = makeTemplatePredicate("${number}${msUnitAnyCase}", { msUnitAnyCase });
60
- const isMsSpaceUnitPredicate = makeTemplatePredicate("${number} ${msUnitAnyCase}", { msUnitAnyCase });
58
+ const isMsStrInput = types.makeTemplatePredicate("${number}");
59
+ const isMsStrUnitPredicate = types.makeTemplatePredicate("${number}${msUnitAnyCase}", {
60
+ msUnitAnyCase,
61
+ });
62
+ const isMsSpaceUnitPredicate = types.makeTemplatePredicate("${number} ${msUnitAnyCase}", {
63
+ msUnitAnyCase,
64
+ });
61
65
  /** Check that the argument match the string portion of `ms()` */
62
- export const isMsStringValue = makeOrPredicate([
66
+ export const isMsStringValue = types.makeOrPredicate([
63
67
  isMsStrInput,
64
68
  isMsStrUnitPredicate,
65
69
  isMsSpaceUnitPredicate,
66
70
  ]);
67
71
  /** Check that a value is suitable for input for `ms()` */
68
- export const isMsInput = makeOrPredicate([isNumber, isMsStringValue]);
72
+ export const isMsInput = types.makeOrPredicate([
73
+ isNumber,
74
+ isMsStringValue,
75
+ ]);
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@keeex/utils","version":"7.3.0","description":"Various utility functions for pure JavaScript","scripts":{},"author":"KeeeX SAS","contributors":[{"name":"Gabriel Paul \"Cley Faye\" Risterucci","email":"gabriel@keeex.net"}],"homepage":"https://keeex.me/oss","keywords":["utility"],"type":"module","license":"MIT","dependencies":{"@keeex/bubble_babble":"^3.0.1","@keeex/log":"^1.7.1","base64-arraybuffer":"^1.0.2","cron-parser":"^5.3.0","ms":"^2.1.3","text-encoding-shim":"^1.0.5"},"exports":{"./array.js":{"node":"./lib/array.js","browser":"./web/array.js","react-native":"./web/array.js","default":"./lib/array.js"},"./arraybuffer.js":{"node":"./lib/arraybuffer.js","browser":"./web/arraybuffer.js","react-native":"./web/arraybuffer.js","default":"./lib/arraybuffer.js"},"./async/asynctrigger.js":{"node":"./lib/async/asynctrigger.js","browser":"./web/async/asynctrigger.js","react-native":"./web/async/asynctrigger.js","default":"./lib/async/asynctrigger.js"},"./async/deferredpromise.js":{"node":"./lib/async/deferredpromise.js","browser":"./web/async/deferredpromise.js","react-native":"./web/async/deferredpromise.js","default":"./lib/async/deferredpromise.js"},"./async/keycache.js":{"node":"./lib/async/keycache.js","browser":"./web/async/keycache.js","react-native":"./web/async/keycache.js","default":"./lib/async/keycache.js"},"./async/queues.js":{"node":"./lib/async/queues.js","browser":"./web/async/queues.js","react-native":"./web/async/queues.js","default":"./lib/async/queues.js"},"./async/timecache.js":{"node":"./lib/async/timecache.js","browser":"./web/async/timecache.js","react-native":"./web/async/timecache.js","default":"./lib/async/timecache.js"},"./base58.js":{"node":"./lib/base58.js","browser":"./web/base58.js","react-native":"./web/base58.js","default":"./lib/base58.js"},"./base64.js":{"node":"./lib/base64.js","browser":"./web/base64.js","react-native":"./web/base64.js","default":"./lib/base64.js"},"./benchmark.js":{"node":"./lib/benchmark.js","browser":"./web/benchmark.js","react-native":"./web/benchmark.js","default":"./lib/benchmark.js"},"./bytebuffer.js":{"node":"./lib/bytebuffer.js","browser":"./web/bytebuffer.js","react-native":"./web/bytebuffer.js","default":"./lib/bytebuffer.js"},"./consts.js":{"node":"./lib/consts.js","browser":"./web/consts.js","react-native":"./web/consts.js","default":"./lib/consts.js"},"./cron.js":{"node":"./lib/cron.js","browser":"./web/cron.js","react-native":"./web/cron.js","default":"./lib/cron.js"},"./dict.js":{"node":"./lib/dict.js","browser":"./web/dict.js","react-native":"./web/dict.js","default":"./lib/dict.js"},"./error.js":{"node":"./lib/error.js","browser":"./web/error.js","react-native":"./web/error.js","default":"./lib/error.js"},"./global.js":{"node":"./lib/global.js","browser":"./web/global.js","react-native":"./web/global.js","default":"./lib/global.js"},"./hex.js":{"node":"./lib/hex.js","browser":"./web/hex.js","react-native":"./web/hex.js","default":"./lib/hex.js"},"./idx.js":{"node":"./lib/idx.js","browser":"./web/idx.js","react-native":"./web/idx.js","default":"./lib/idx.js"},"./json.js":{"node":"./lib/json.js","browser":"./web/json.js","react-native":"./web/json.js","default":"./lib/json.js"},"./linebuffer.js":{"node":"./lib/linebuffer.js","browser":"./web/linebuffer.js","react-native":"./web/linebuffer.js","default":"./lib/linebuffer.js"},"./marshalling/marshaller.js":{"node":"./lib/marshalling/marshaller.js","browser":"./web/marshalling/marshaller.js","react-native":"./web/marshalling/marshaller.js","default":"./lib/marshalling/marshaller.js"},"./marshalling/unmarshaller.js":{"node":"./lib/marshalling/unmarshaller.js","browser":"./web/marshalling/unmarshaller.js","react-native":"./web/marshalling/unmarshaller.js","default":"./lib/marshalling/unmarshaller.js"},"./number.js":{"node":"./lib/number.js","browser":"./web/number.js","react-native":"./web/number.js","default":"./lib/number.js"},"./path.js":{"node":"./lib/path.js","browser":"./web/path.js","react-native":"./web/path.js","default":"./lib/path.js"},"./promise.js":{"node":"./lib/promise.js","browser":"./web/promise.js","react-native":"./web/promise.js","default":"./lib/promise.js"},"./starttime.js":{"node":"./lib/starttime.js","browser":"./web/starttime.js","react-native":"./web/starttime.js","default":"./lib/starttime.js"},"./string.js":{"node":"./lib/string.js","browser":"./web/string.js","react-native":"./web/string.js","default":"./lib/string.js"},"./triggers.js":{"node":"./lib/triggers.js","browser":"./web/triggers.js","react-native":"./web/triggers.js","default":"./lib/triggers.js"},"./types/array.js":{"node":"./lib/types/array.js","browser":"./web/types/array.js","react-native":"./web/types/array.js","default":"./lib/types/array.js"},"./types/enum.js":{"node":"./lib/types/enum.js","browser":"./web/types/enum.js","react-native":"./web/types/enum.js","default":"./lib/types/enum.js"},"./types/predicateerror.js":{"node":"./lib/types/predicateerror.js","browser":"./web/types/predicateerror.js","react-native":"./web/types/predicateerror.js","default":"./lib/types/predicateerror.js"},"./types/primitive.js":{"node":"./lib/types/primitive.js","browser":"./web/types/primitive.js","react-native":"./web/types/primitive.js","default":"./lib/types/primitive.js"},"./types/record.js":{"node":"./lib/types/record.js","browser":"./web/types/record.js","react-native":"./web/types/record.js","default":"./lib/types/record.js"},"./types/types.js":{"node":"./lib/types/types.js","browser":"./web/types/types.js","react-native":"./web/types/types.js","default":"./lib/types/types.js"},"./types/utils.js":{"node":"./lib/types/utils.js","browser":"./web/types/utils.js","react-native":"./web/types/utils.js","default":"./lib/types/utils.js"},"./uint8array.js":{"node":"./lib/uint8array.js","browser":"./web/uint8array.js","react-native":"./web/uint8array.js","default":"./lib/uint8array.js"},"./units.js":{"node":"./lib/units.js","browser":"./web/units.js","react-native":"./web/units.js","default":"./lib/units.js"}},"files":["/lib","/web"]}
1
+ {"name":"@keeex/utils","version":"7.5.0","description":"Various utility functions for pure JavaScript","scripts":{},"author":"KeeeX SAS","contributors":[{"name":"Gabriel Paul \"Cley Faye\" Risterucci","email":"gabriel@keeex.net"}],"homepage":"https://keeex.me/oss","keywords":["utility"],"type":"module","license":"MIT","dependencies":{"@keeex/bubble_babble":"^3.0.1","@keeex/log":"^1.7.2","base64-arraybuffer":"^1.0.2","cron-parser":"^5.4.0","ms":"^2.1.3","text-encoding-shim":"^1.0.5"},"exports":{"./array.js":{"node":"./lib/array.js","browser":"./web/array.js","react-native":"./web/array.js","default":"./lib/array.js"},"./arraybuffer.js":{"node":"./lib/arraybuffer.js","browser":"./web/arraybuffer.js","react-native":"./web/arraybuffer.js","default":"./lib/arraybuffer.js"},"./async/asynctrigger.js":{"node":"./lib/async/asynctrigger.js","browser":"./web/async/asynctrigger.js","react-native":"./web/async/asynctrigger.js","default":"./lib/async/asynctrigger.js"},"./async/deferredpromise.js":{"node":"./lib/async/deferredpromise.js","browser":"./web/async/deferredpromise.js","react-native":"./web/async/deferredpromise.js","default":"./lib/async/deferredpromise.js"},"./async/eventqueue.js":{"node":"./lib/async/eventqueue.js","browser":"./web/async/eventqueue.js","react-native":"./web/async/eventqueue.js","default":"./lib/async/eventqueue.js"},"./async/keycache.js":{"node":"./lib/async/keycache.js","browser":"./web/async/keycache.js","react-native":"./web/async/keycache.js","default":"./lib/async/keycache.js"},"./async/queues.js":{"node":"./lib/async/queues.js","browser":"./web/async/queues.js","react-native":"./web/async/queues.js","default":"./lib/async/queues.js"},"./async/timecache.js":{"node":"./lib/async/timecache.js","browser":"./web/async/timecache.js","react-native":"./web/async/timecache.js","default":"./lib/async/timecache.js"},"./base58.js":{"node":"./lib/base58.js","browser":"./web/base58.js","react-native":"./web/base58.js","default":"./lib/base58.js"},"./base64.js":{"node":"./lib/base64.js","browser":"./web/base64.js","react-native":"./web/base64.js","default":"./lib/base64.js"},"./benchmark.js":{"node":"./lib/benchmark.js","browser":"./web/benchmark.js","react-native":"./web/benchmark.js","default":"./lib/benchmark.js"},"./bytebuffer.js":{"node":"./lib/bytebuffer.js","browser":"./web/bytebuffer.js","react-native":"./web/bytebuffer.js","default":"./lib/bytebuffer.js"},"./consts.js":{"node":"./lib/consts.js","browser":"./web/consts.js","react-native":"./web/consts.js","default":"./lib/consts.js"},"./cron.js":{"node":"./lib/cron.js","browser":"./web/cron.js","react-native":"./web/cron.js","default":"./lib/cron.js"},"./dataview.js":{"node":"./lib/dataview.js","browser":"./web/dataview.js","react-native":"./web/dataview.js","default":"./lib/dataview.js"},"./dict.js":{"node":"./lib/dict.js","browser":"./web/dict.js","react-native":"./web/dict.js","default":"./lib/dict.js"},"./error.js":{"node":"./lib/error.js","browser":"./web/error.js","react-native":"./web/error.js","default":"./lib/error.js"},"./global.js":{"node":"./lib/global.js","browser":"./web/global.js","react-native":"./web/global.js","default":"./lib/global.js"},"./hex.js":{"node":"./lib/hex.js","browser":"./web/hex.js","react-native":"./web/hex.js","default":"./lib/hex.js"},"./idx.js":{"node":"./lib/idx.js","browser":"./web/idx.js","react-native":"./web/idx.js","default":"./lib/idx.js"},"./json.js":{"node":"./lib/json.js","browser":"./web/json.js","react-native":"./web/json.js","default":"./lib/json.js"},"./linebuffer.js":{"node":"./lib/linebuffer.js","browser":"./web/linebuffer.js","react-native":"./web/linebuffer.js","default":"./lib/linebuffer.js"},"./marshalling/marshaller.js":{"node":"./lib/marshalling/marshaller.js","browser":"./web/marshalling/marshaller.js","react-native":"./web/marshalling/marshaller.js","default":"./lib/marshalling/marshaller.js"},"./marshalling/unmarshaller.js":{"node":"./lib/marshalling/unmarshaller.js","browser":"./web/marshalling/unmarshaller.js","react-native":"./web/marshalling/unmarshaller.js","default":"./lib/marshalling/unmarshaller.js"},"./number.js":{"node":"./lib/number.js","browser":"./web/number.js","react-native":"./web/number.js","default":"./lib/number.js"},"./path.js":{"node":"./lib/path.js","browser":"./web/path.js","react-native":"./web/path.js","default":"./lib/path.js"},"./promise.js":{"node":"./lib/promise.js","browser":"./web/promise.js","react-native":"./web/promise.js","default":"./lib/promise.js"},"./starttime.js":{"node":"./lib/starttime.js","browser":"./web/starttime.js","react-native":"./web/starttime.js","default":"./lib/starttime.js"},"./string.js":{"node":"./lib/string.js","browser":"./web/string.js","react-native":"./web/string.js","default":"./lib/string.js"},"./triggers.js":{"node":"./lib/triggers.js","browser":"./web/triggers.js","react-native":"./web/triggers.js","default":"./lib/triggers.js"},"./types/array.js":{"node":"./lib/types/array.js","browser":"./web/types/array.js","react-native":"./web/types/array.js","default":"./lib/types/array.js"},"./types/enum.js":{"node":"./lib/types/enum.js","browser":"./web/types/enum.js","react-native":"./web/types/enum.js","default":"./lib/types/enum.js"},"./types/predicateerror.js":{"node":"./lib/types/predicateerror.js","browser":"./web/types/predicateerror.js","react-native":"./web/types/predicateerror.js","default":"./lib/types/predicateerror.js"},"./types/primitive.js":{"node":"./lib/types/primitive.js","browser":"./web/types/primitive.js","react-native":"./web/types/primitive.js","default":"./lib/types/primitive.js"},"./types/record.js":{"node":"./lib/types/record.js","browser":"./web/types/record.js","react-native":"./web/types/record.js","default":"./lib/types/record.js"},"./types/types.js":{"node":"./lib/types/types.js","browser":"./web/types/types.js","react-native":"./web/types/types.js","default":"./lib/types/types.js"},"./types/utils.js":{"node":"./lib/types/utils.js","browser":"./web/types/utils.js","react-native":"./web/types/utils.js","default":"./lib/types/utils.js"},"./uint8array.js":{"node":"./lib/uint8array.js","browser":"./web/uint8array.js","react-native":"./web/uint8array.js","default":"./lib/uint8array.js"},"./units.js":{"node":"./lib/units.js","browser":"./web/units.js","react-native":"./web/units.js","default":"./lib/units.js"}},"files":["/lib","/web"]}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @license
3
+ * @preserve
4
+ *
5
+ * MIT License
6
+ *
7
+ * Copyright (c) 2023 KeeeX SAS
8
+ *
9
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10
+ *
11
+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
12
+ *
13
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
+ *
15
+ */
16
+ import * as kxLog from "@keeex/log";
17
+ import { type Awaitable } from "../types/types.js";
18
+ export type EventHandler<DataType> = DataType extends undefined ? () => Awaitable<void> : (data: DataType) => Awaitable<void>;
19
+ /** Function used to merge multiple events into one */
20
+ export type MergeFunc<DataType> = (pendingData: Array<DataType>) => Awaitable<DataType>;
21
+ /**
22
+ * Provides asynchronous handling of a sequential event queue.
23
+ *
24
+ * This should work as a regular sequential event queue, except that the handling of these events
25
+ * can be done using asynchronous functions.
26
+ * All handlers will be called on all input events in the order they came in, but there is no
27
+ * guarantee on the *order* of the event handlers when there is more than one.
28
+ *
29
+ * More events can be triggered while some events are processed, in which case they'll cause more
30
+ * calls to the handlers as needed.
31
+ */
32
+ export declare class EventQueue<DataType> {
33
+ #private;
34
+ constructor(merger?: MergeFunc<DataType>, logger?: kxLog.Logger);
35
+ addHandler: (handler: EventHandler<DataType>) => void;
36
+ removeHandler: (handler: EventHandler<DataType>) => void;
37
+ /**
38
+ * Cancel all pending events.
39
+ *
40
+ * Currently pending events that are not being processed are dropped.
41
+ * This does not prevent more events from being sent, and will not stop current processing.
42
+ */
43
+ cancelAll: () => void;
44
+ /**
45
+ * Disable all further event processing.
46
+ *
47
+ * This will not stop current processing.
48
+ */
49
+ close: (cancelAll?: boolean) => void;
50
+ /**
51
+ * Wait for all handlers to complete.
52
+ *
53
+ * If there are currently events being processed, this will wait until they are all processed.
54
+ * If more events show up while waiting, it will wait for those events to be processed too.
55
+ * If there are no events currently being processed, it will resolve immediately.
56
+ */
57
+ wait: () => Promise<void>;
58
+ /** Trigger an event to be handled */
59
+ trigger: (data: DataType) => void;
60
+ }
@@ -0,0 +1,126 @@
1
+ /**
2
+ * @license
3
+ * @preserve
4
+ *
5
+ * MIT License
6
+ *
7
+ * Copyright (c) 2023 KeeeX SAS
8
+ *
9
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10
+ *
11
+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
12
+ *
13
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
+ *
15
+ */
16
+ import * as kxLog from "@keeex/log";
17
+ /**
18
+ * Provides asynchronous handling of a sequential event queue.
19
+ *
20
+ * This should work as a regular sequential event queue, except that the handling of these events
21
+ * can be done using asynchronous functions.
22
+ * All handlers will be called on all input events in the order they came in, but there is no
23
+ * guarantee on the *order* of the event handlers when there is more than one.
24
+ *
25
+ * More events can be triggered while some events are processed, in which case they'll cause more
26
+ * calls to the handlers as needed.
27
+ */
28
+ export class EventQueue {
29
+ #activeDispenser = null;
30
+ #closed = false;
31
+ #events = [];
32
+ #handlers = [];
33
+ #log;
34
+ #merger;
35
+ constructor(merger, logger = kxLog.createLogger({
36
+ tag: "EventQueue",
37
+ numbered: true
38
+ })) {
39
+ this.#log = logger;
40
+ this.#merger = merger;
41
+ }
42
+ addHandler = handler => {
43
+ this.#handlers.push(handler);
44
+ };
45
+ removeHandler = handler => {
46
+ const index = this.#handlers.indexOf(handler);
47
+ if (index !== -1) this.#handlers.splice(index, 1);
48
+ };
49
+ /**
50
+ * Cancel all pending events.
51
+ *
52
+ * Currently pending events that are not being processed are dropped.
53
+ * This does not prevent more events from being sent, and will not stop current processing.
54
+ */
55
+ cancelAll = () => {
56
+ this.#events.length = 0;
57
+ };
58
+ /**
59
+ * Disable all further event processing.
60
+ *
61
+ * This will not stop current processing.
62
+ */
63
+ close = (cancelAll = false) => {
64
+ this.#closed = true;
65
+ if (cancelAll) this.cancelAll();
66
+ };
67
+ /**
68
+ * Wait for all handlers to complete.
69
+ *
70
+ * If there are currently events being processed, this will wait until they are all processed.
71
+ * If more events show up while waiting, it will wait for those events to be processed too.
72
+ * If there are no events currently being processed, it will resolve immediately.
73
+ */
74
+ wait = () => this.#activeDispenser ?? Promise.resolve();
75
+ /** Trigger an event to be handled */
76
+ trigger = data => {
77
+ if (this.#closed) {
78
+ try {
79
+ this.#log.error("Received event while closed", data);
80
+ } catch {
81
+ this.#log.error("Received event while closed (can't display)");
82
+ }
83
+ return;
84
+ }
85
+ this.#events.push(data);
86
+ try {
87
+ this.#log.debug("Event trigger with data", data);
88
+ } catch {
89
+ this.#log.debug("Event trigger with data (can't display)");
90
+ }
91
+ this.#activeDispenser ??= this.#triggerAsync();
92
+ };
93
+ /** Call the event handlers sequentially on all buffered data */
94
+ #triggerAsync = async () => {
95
+ this.#log.debug("Dispensing events to handlers");
96
+ try {
97
+ // We could do this with recursive calls after instead, but there is no need for a deep stack
98
+ // trace for this.
99
+ while (this.#events.length > 0) {
100
+ // eslint-disable-next-line no-await-in-loop
101
+ const nextEvent = await this.#getNextEvent();
102
+ // eslint-disable-next-line no-await-in-loop
103
+ await Promise.all(this.#handlers.map(async handler => handler(nextEvent)));
104
+ if (this.#events.length > 0) {
105
+ this.#log.debug("More events in queue");
106
+ }
107
+ }
108
+ } finally {
109
+ this.#log.debug("Done dispensing events");
110
+ this.#activeDispenser = null;
111
+ }
112
+ };
113
+ /** Return the next event to process */
114
+ #getNextEvent = async () => {
115
+ if (this.#events.length === 0) throw new Error("No more events to process");
116
+ if (this.#merger && this.#events.length > 1) {
117
+ this.#log.debug(`Merging ${this.#events.length} events into one`);
118
+ const allEvents = [...this.#events];
119
+ this.#events.length = 0;
120
+ const merged = await this.#merger(allEvents);
121
+ return merged;
122
+ }
123
+ const nextEvent = this.#events.shift();
124
+ return nextEvent;
125
+ };
126
+ }
@@ -13,7 +13,7 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { Awaitable } from "../types/types.js";
16
+ import { type Awaitable } from "../types/types.js";
17
17
  /**
18
18
  * Function used to fill a cache entry on a cache miss.
19
19
  *
@@ -13,7 +13,7 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { Awaitable } from "../types/types.js";
16
+ import { type Awaitable } from "../types/types.js";
17
17
  /** Function used to refresh a timed cache */
18
18
  export type ProbeFunc<T> = () => Awaitable<T>;
19
19
  type HandlerFunc<T> = (error?: Error, value?: T) => void;
@@ -13,7 +13,7 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { Awaitable } from "./types/types.js";
16
+ import { type Awaitable } from "./types/types.js";
17
17
  export type BenchmarkFunction = (() => Promise<void>) | (() => void);
18
18
  /**
19
19
  * Run the provided function for given iterations and return the average runtime in ms.
package/web/benchmark.js CHANGED
@@ -13,7 +13,7 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { createLogger } from "@keeex/log";
16
+ import * as kxLog from "@keeex/log";
17
17
  /** Return now() up to the best precision available */
18
18
  const getNow = typeof performance.now === "function" ? () => performance.now() : () => Date.now();
19
19
  /**
@@ -73,7 +73,7 @@ const addToAverageWindow = (value, window, len) => {
73
73
  };
74
74
  let logger = null;
75
75
  const getLogger = () => {
76
- logger ??= createLogger({
76
+ logger ??= kxLog.createLogger({
77
77
  tag: "@keeex/js-utils:benchmark"
78
78
  });
79
79
  return logger;
@@ -23,7 +23,9 @@ import { b64EffectiveData, B64_PAD2, B64_PAD1, B64_PAD0, B64_CHARBLOCK } from ".
23
23
  export const getArrayBuffer = typedArray => {
24
24
  if (typedArray instanceof ArrayBuffer) return typedArray;
25
25
  const ab = typedArray.buffer;
26
- if (typedArray.byteOffset === 0 && typedArray.byteLength === ab.byteLength) return ab;
26
+ if (typedArray.byteOffset === 0 && typedArray.byteLength === ab.byteLength) {
27
+ return ab;
28
+ }
27
29
  return ab.slice(typedArray.byteOffset, typedArray.byteOffset + typedArray.byteLength);
28
30
  };
29
31
  /**
@@ -13,17 +13,17 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { Logger } from "@keeex/log";
16
+ import * as kxLog from "@keeex/log";
17
17
  import * as types from "./types.js";
18
18
  /**
19
19
  * Base implementation for all triggers.
20
20
  */
21
21
  export declare abstract class BaseTrigger implements types.Trigger {
22
22
  #private;
23
- constructor(handler: types.TriggerHandler, delayMs: number, logger?: Logger | string);
23
+ constructor(handler: types.TriggerHandler, delayMs: number, logger?: kxLog.Logger | string);
24
24
  protected get state(): types.TriggerState;
25
25
  protected set state(value: types.TriggerState);
26
- protected get logger(): Logger;
26
+ protected get logger(): kxLog.Logger;
27
27
  abstract trigger(): void;
28
28
  cancel: () => void;
29
29
  stop: () => void;
@@ -13,7 +13,7 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { createLogger } from "@keeex/log";
16
+ import * as kxLog from "@keeex/log";
17
17
  import { dropPromise } from "../../promise.js";
18
18
  import * as types from "./types.js";
19
19
  /**
@@ -29,14 +29,14 @@ export class BaseTrigger {
29
29
  this.#handler = handler;
30
30
  this.#delay = delayMs;
31
31
  if (typeof logger === "string") {
32
- this.#logger = createLogger({
32
+ this.#logger = kxLog.createLogger({
33
33
  tag: logger,
34
34
  numbered: true
35
35
  });
36
36
  } else if (logger) {
37
37
  this.#logger = logger;
38
38
  } else {
39
- this.#logger = createLogger({
39
+ this.#logger = kxLog.createLogger({
40
40
  tag: "PromiseTrigger",
41
41
  numbered: true
42
42
  });
@@ -13,7 +13,7 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { Logger } from "@keeex/log";
16
+ import { type Logger } from "@keeex/log";
17
17
  import { BaseTrigger } from "./base.js";
18
18
  import * as types from "./types.js";
19
19
  /**
@@ -13,7 +13,7 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { Logger } from "@keeex/log";
16
+ import { type Logger } from "@keeex/log";
17
17
  import { BaseTrigger } from "./base.js";
18
18
  import * as types from "./types.js";
19
19
  /**
@@ -13,7 +13,7 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { Awaitable } from "../../types/types.js";
16
+ import { type Awaitable } from "../../types/types.js";
17
17
  export type TriggerHandler = () => Awaitable<void>;
18
18
  export declare enum TriggerState {
19
19
  /** Trigger was not triggered */
package/web/cron.d.ts CHANGED
@@ -13,9 +13,9 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { Logger } from "@keeex/log";
16
+ import { type Logger } from "@keeex/log";
17
17
  import ScheduledTask from "./cron/scheduledtask.js";
18
- import { TaskFunction, TaskOptions, Overrun, CompleteTaskOptions } from "./cron/types.js";
18
+ import { type TaskFunction, type TaskOptions, Overrun, type CompleteTaskOptions } from "./cron/types.js";
19
19
  export { Overrun };
20
20
  export type { ScheduledTask, TaskFunction, TaskOptions, CompleteTaskOptions };
21
21
  /**
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license
3
+ * @preserve
4
+ *
5
+ * MIT License
6
+ *
7
+ * Copyright (c) 2023 KeeeX SAS
8
+ *
9
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10
+ *
11
+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
12
+ *
13
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
+ *
15
+ */
16
+ /**
17
+ * Return a `DataView` on the boundaries of the provided `data`.
18
+ *
19
+ * @param byteOffset - Offset after the start of `data` in its buffer
20
+ * @param byteLength - Length of the available data within `data`
21
+ */
22
+ export declare const getDataView: (data: Uint8Array, byteOffset?: number, byteLength?: number) => DataView;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * @preserve
4
+ *
5
+ * MIT License
6
+ *
7
+ * Copyright (c) 2023 KeeeX SAS
8
+ *
9
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10
+ *
11
+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
12
+ *
13
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
+ *
15
+ */
16
+ /**
17
+ * Return a `DataView` on the boundaries of the provided `data`.
18
+ *
19
+ * @param byteOffset - Offset after the start of `data` in its buffer
20
+ * @param byteLength - Length of the available data within `data`
21
+ */
22
+ export const getDataView = (data, byteOffset = 0, byteLength = data.byteLength - byteOffset) => {
23
+ if (byteOffset < 0 || byteOffset >= data.byteLength || byteOffset + byteLength > data.byteLength) {
24
+ throw new Error("Out of bound");
25
+ }
26
+ return new DataView(data.buffer, data.byteOffset + byteOffset, byteLength);
27
+ };
@@ -23,7 +23,7 @@ export default class Marshaller {
23
23
  private constructor();
24
24
  static readonly start: (magicNumbers?: string) => Marshaller;
25
25
  /** End building the buffer and returns the result */
26
- readonly end: () => ArrayBuffer;
26
+ readonly end: () => Uint8Array;
27
27
  /** Append an utf-8 string */
28
28
  readonly str: (value: string) => this;
29
29
  /** Append a 32-bit unsigned int */
package/web/promise.d.ts CHANGED
@@ -13,7 +13,7 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { Awaitable } from "./types/types.js";
16
+ import { type Awaitable } from "./types/types.js";
17
17
  /**
18
18
  * Create a promise that resolves after a given delay.
19
19
  *
package/web/promise.js CHANGED
@@ -13,7 +13,6 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- /* eslint-env node */
17
16
  import * as log from "@keeex/log";
18
17
  import { asError } from "./error.js";
19
18
  import { timeConvert } from "./units.js";
package/web/triggers.d.ts CHANGED
@@ -13,9 +13,9 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { Logger } from "@keeex/log";
17
- import { Trigger, TriggerHandler } from "./bits/triggers/types.js";
16
+ import { type Logger } from "@keeex/log";
17
+ import type * as types from "./bits/triggers/types.js";
18
18
  /** Return a simple trigger that is run after the initial delay is passed after a trigger call */
19
- export declare const simpleTrigger: (handler: TriggerHandler, delayMs: number, logger?: Logger) => Trigger;
19
+ export declare const simpleTrigger: (handler: types.TriggerHandler, delayMs: number, logger?: Logger) => types.Trigger;
20
20
  /** Return a debouncing trigger that will rearm as long as it is triggered during the grace delay */
21
- export declare const debouncingTrigger: (handler: TriggerHandler, delayMs: number, logger?: Logger) => Trigger;
21
+ export declare const debouncingTrigger: (handler: types.TriggerHandler, delayMs: number, logger?: Logger) => types.Trigger;
@@ -13,7 +13,7 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { PredicateOptions, TypePredicate } from "./types.js";
16
+ import * as types from "./types.js";
17
17
  /** Shorthand for an object that can be either T or an array of T */
18
18
  export type Arrayable<T> = Array<T> | T;
19
19
  /**
@@ -21,14 +21,14 @@ export type Arrayable<T> = Array<T> | T;
21
21
  *
22
22
  * @public
23
23
  */
24
- export declare const isStringArray: TypePredicate<Array<string>>;
24
+ export declare const isStringArray: types.TypePredicate<Array<string>>;
25
25
  /**
26
26
  * Check that a given object is an array where each value have the given type.
27
27
  *
28
28
  * @public
29
29
  */
30
- export declare const isArrayOfType: <T>(obj: unknown, predicate: TypePredicate<T>, options?: PredicateOptions) => obj is Array<T>;
31
- export declare const isArrayableOfType: <T>(obj: unknown, predicate: TypePredicate<T>, options?: PredicateOptions) => obj is Arrayable<T>;
30
+ export declare const isArrayOfType: <T>(obj: unknown, predicate: types.TypePredicate<T>, options?: types.PredicateOptions) => obj is Array<T>;
31
+ export declare const isArrayableOfType: <T>(obj: unknown, predicate: types.TypePredicate<T>, options?: types.PredicateOptions) => obj is Arrayable<T>;
32
32
  /** @public */
33
- export declare const makeArrayOfTypePredicate: <ValueType>(valuePredicate: TypePredicate<ValueType>) => TypePredicate<Array<ValueType>>;
34
- export declare const makeArrayableOfTypePredicate: <ValueType>(valuePredicate: TypePredicate<ValueType>) => TypePredicate<Arrayable<ValueType>>;
33
+ export declare const makeArrayOfTypePredicate: <ValueType>(valuePredicate: types.TypePredicate<ValueType>) => types.TypePredicate<Array<ValueType>>;
34
+ export declare const makeArrayableOfTypePredicate: <ValueType>(valuePredicate: types.TypePredicate<ValueType>) => types.TypePredicate<Arrayable<ValueType>>;
@@ -14,7 +14,7 @@
14
14
  *
15
15
  */
16
16
  import { PredicateError } from "./predicateerror.js";
17
- import { getPredicateOptions } from "./types.js";
17
+ import * as types from "./types.js";
18
18
  // #endregion
19
19
  /**
20
20
  * Check that a given object is an array of string
@@ -22,7 +22,7 @@ import { getPredicateOptions } from "./types.js";
22
22
  * @public
23
23
  */
24
24
  export const isStringArray = (obj, options = false) => {
25
- const opt = getPredicateOptions(options);
25
+ const opt = types.getPredicateOptions(options);
26
26
  if (!Array.isArray(obj)) {
27
27
  PredicateError.expected(opt.raise, undefined, "an array");
28
28
  return false;
@@ -41,7 +41,7 @@ export const isStringArray = (obj, options = false) => {
41
41
  * @public
42
42
  */
43
43
  export const isArrayOfType = (obj, predicate, options = false) => {
44
- const opt = getPredicateOptions(options);
44
+ const opt = types.getPredicateOptions(options);
45
45
  if (!Array.isArray(obj)) {
46
46
  PredicateError.expected(opt.raise, undefined, "an array");
47
47
  return false;
@@ -13,7 +13,7 @@
13
13
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  *
15
15
  */
16
- import { PredicateOptions, TypePredicate } from "./types.js";
16
+ import * as types from "./types.js";
17
17
  /**
18
18
  * Return an enum-type value whose key matches the provided key string.
19
19
  *
@@ -25,6 +25,6 @@ export declare const keyToEnum: <EnumType>(key: string, enumType: Record<string,
25
25
  *
26
26
  * @public
27
27
  */
28
- export declare const isEnumType: <EnumType>(obj: unknown, enumType: unknown, options?: PredicateOptions) => obj is EnumType;
28
+ export declare const isEnumType: <EnumType>(obj: unknown, enumType: unknown, options?: types.PredicateOptions) => obj is EnumType;
29
29
  /** @public */
30
- export declare const makeEnumTypePredicate: <EnumType>(enumType: unknown) => TypePredicate<EnumType>;
30
+ export declare const makeEnumTypePredicate: <EnumType>(enumType: unknown) => types.TypePredicate<EnumType>;