@oscarpalmer/atoms 0.202.0 → 0.203.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 (156) hide show
  1. package/dist/array/difference.d.mts +4 -5
  2. package/dist/array/exists.d.mts +5 -6
  3. package/dist/array/filter.d.mts +10 -11
  4. package/dist/array/find.d.mts +10 -11
  5. package/dist/array/first.d.mts +10 -11
  6. package/dist/array/flatten.d.mts +2 -3
  7. package/dist/array/from.d.mts +7 -8
  8. package/dist/array/group-by.d.mts +7 -8
  9. package/dist/array/insert.d.mts +3 -4
  10. package/dist/array/intersection.d.mts +4 -5
  11. package/dist/array/last.d.mts +10 -11
  12. package/dist/array/move.d.mts +9 -10
  13. package/dist/array/partition.d.mts +5 -6
  14. package/dist/array/push.d.mts +2 -3
  15. package/dist/array/reverse.d.mts +2 -3
  16. package/dist/array/select.d.mts +11 -12
  17. package/dist/array/single.d.mts +4 -5
  18. package/dist/array/slice.d.mts +12 -13
  19. package/dist/array/sort.d.mts +31 -32
  20. package/dist/array/sort.mjs +41 -33
  21. package/dist/array/splice.d.mts +5 -6
  22. package/dist/array/swap.d.mts +8 -9
  23. package/dist/array/to-map.d.mts +7 -8
  24. package/dist/array/to-record.d.mts +7 -8
  25. package/dist/array/to-set.d.mts +4 -5
  26. package/dist/array/toggle.d.mts +4 -5
  27. package/dist/array/union.d.mts +4 -5
  28. package/dist/array/unique.d.mts +4 -5
  29. package/dist/array/update.d.mts +4 -5
  30. package/dist/beacon.d.mts +8 -9
  31. package/dist/beacon.mjs +90 -65
  32. package/dist/color/constants.d.mts +14 -13
  33. package/dist/color/constants.mjs +9 -2
  34. package/dist/color/index.d.mts +2 -2
  35. package/dist/color/instance.d.mts +3 -3
  36. package/dist/color/instance.mjs +125 -61
  37. package/dist/color/misc/alpha.d.mts +4 -5
  38. package/dist/color/misc/format.d.mts +6 -7
  39. package/dist/color/misc/format.mjs +15 -12
  40. package/dist/color/misc/get.d.mts +14 -15
  41. package/dist/color/misc/is.d.mts +16 -17
  42. package/dist/color/misc/is.mjs +3 -4
  43. package/dist/color/misc/state.d.mts +8 -10
  44. package/dist/color/misc/state.mjs +22 -20
  45. package/dist/color/models.d.mts +25 -19
  46. package/dist/color/space/hex.d.mts +9 -10
  47. package/dist/color/space/hsl.d.mts +8 -9
  48. package/dist/color/space/hwb.d.mts +9 -10
  49. package/dist/color/space/rgb.d.mts +11 -12
  50. package/dist/function/limit.d.mts +9 -8
  51. package/dist/function/limit.mjs +5 -5
  52. package/dist/function/once.d.mts +26 -6
  53. package/dist/function/once.mjs +135 -76
  54. package/dist/function/retry.d.mts +5 -6
  55. package/dist/function/retry.mjs +3 -3
  56. package/dist/index.d.mts +182 -58
  57. package/dist/index.mjs +1191 -810
  58. package/dist/internal/abort.d.mts +3 -4
  59. package/dist/internal/array/callbacks.d.mts +4 -5
  60. package/dist/internal/array/chunk.d.mts +2 -3
  61. package/dist/internal/array/compact.d.mts +3 -4
  62. package/dist/internal/array/find.d.mts +10 -11
  63. package/dist/internal/array/get.d.mts +7 -8
  64. package/dist/internal/array/group.d.mts +2 -3
  65. package/dist/internal/array/index-of.d.mts +10 -11
  66. package/dist/internal/array/insert.d.mts +5 -6
  67. package/dist/internal/array/match.d.mts +17 -18
  68. package/dist/internal/array/overlap.d.mts +2 -3
  69. package/dist/internal/array/sets.d.mts +5 -6
  70. package/dist/internal/array/shuffle.d.mts +2 -3
  71. package/dist/internal/array/update.d.mts +2 -3
  72. package/dist/internal/defaults.d.mts +3 -4
  73. package/dist/internal/function/assert.d.mts +10 -11
  74. package/dist/internal/function/limit.d.mts +41 -0
  75. package/dist/internal/function/limit.mjs +110 -0
  76. package/dist/internal/function/memoize.d.mts +4 -5
  77. package/dist/internal/function/memoize.mjs +53 -31
  78. package/dist/internal/function/misc.d.mts +2 -3
  79. package/dist/internal/function/work.d.mts +53 -54
  80. package/dist/internal/herald.d.mts +8 -9
  81. package/dist/internal/herald.mjs +38 -26
  82. package/dist/internal/is.d.mts +19 -20
  83. package/dist/internal/math/aggregate.d.mts +14 -15
  84. package/dist/internal/math/misc.d.mts +3 -4
  85. package/dist/internal/number.d.mts +4 -5
  86. package/dist/internal/random.d.mts +3 -4
  87. package/dist/internal/result/misc.d.mts +29 -14
  88. package/dist/internal/result/misc.mjs +4 -0
  89. package/dist/internal/result/models.d.mts +9 -10
  90. package/dist/internal/sized/map.d.mts +2 -3
  91. package/dist/internal/sized/misc.d.mts +2 -3
  92. package/dist/internal/string/case.d.mts +9 -10
  93. package/dist/internal/string/misc.d.mts +8 -9
  94. package/dist/internal/subscription.d.mts +10 -11
  95. package/dist/internal/subscription.mjs +69 -57
  96. package/dist/internal/value/compare.d.mts +17 -9
  97. package/dist/internal/value/compare.mjs +7 -7
  98. package/dist/internal/value/equal.d.mts +34 -15
  99. package/dist/internal/value/equal.mjs +28 -13
  100. package/dist/internal/value/get.d.mts +3 -4
  101. package/dist/internal/value/handlers.d.mts +19 -9
  102. package/dist/internal/value/handlers.mjs +50 -50
  103. package/dist/internal/value/has.d.mts +6 -7
  104. package/dist/internal/value/misc.d.mts +6 -7
  105. package/dist/internal/value/partial.d.mts +3 -4
  106. package/dist/internal/value/set.d.mts +4 -5
  107. package/dist/is.d.mts +13 -13
  108. package/dist/logger.d.mts +5 -4
  109. package/dist/logger.mjs +61 -54
  110. package/dist/math.d.mts +20 -20
  111. package/dist/models.d.mts +45 -49
  112. package/dist/promise/constants.d.mts +14 -15
  113. package/dist/promise/delay.d.mts +3 -4
  114. package/dist/promise/delay.mjs +4 -4
  115. package/dist/promise/helpers.d.mts +7 -8
  116. package/dist/promise/index.d.mts +13 -14
  117. package/dist/promise/misc.d.mts +6 -6
  118. package/dist/promise/models.d.mts +16 -17
  119. package/dist/promise/timed.d.mts +4 -5
  120. package/dist/promise/timed.mjs +5 -5
  121. package/dist/query.d.mts +3 -4
  122. package/dist/queue.d.mts +14 -15
  123. package/dist/queue.mjs +185 -129
  124. package/dist/random.d.mts +8 -8
  125. package/dist/result/index.d.mts +8 -9
  126. package/dist/result/match.d.mts +6 -7
  127. package/dist/result/misc.d.mts +3 -3
  128. package/dist/result/work/flow.d.mts +28 -29
  129. package/dist/result/work/pipe.d.mts +24 -25
  130. package/dist/sized/set.d.mts +2 -3
  131. package/dist/string/fuzzy.d.mts +21 -12
  132. package/dist/string/fuzzy.mjs +77 -49
  133. package/dist/string/index.d.mts +8 -8
  134. package/dist/string/match.d.mts +4 -5
  135. package/dist/string/normalize.d.mts +8 -9
  136. package/dist/string/normalize.mjs +9 -4
  137. package/dist/string/template.d.mts +9 -9
  138. package/dist/string/template.mjs +11 -4
  139. package/dist/value/clone.d.mts +21 -13
  140. package/dist/value/clone.mjs +22 -20
  141. package/dist/value/collection.d.mts +4 -5
  142. package/dist/value/diff.d.mts +5 -6
  143. package/dist/value/freeze.d.mts +18 -19
  144. package/dist/value/freeze.mjs +1 -1
  145. package/dist/value/merge.d.mts +13 -14
  146. package/dist/value/merge.mjs +21 -5
  147. package/dist/value/omit.d.mts +2 -3
  148. package/dist/value/pick.d.mts +2 -3
  149. package/dist/value/shake.d.mts +3 -4
  150. package/dist/value/smush.d.mts +3 -4
  151. package/dist/value/transform.d.mts +15 -10
  152. package/dist/value/transform.mjs +12 -7
  153. package/dist/value/unsmush.d.mts +3 -4
  154. package/package.json +1 -1
  155. package/dist/internal/function/timer.d.mts +0 -10
  156. package/dist/internal/function/timer.mjs +0 -87
@@ -1,5 +1,73 @@
1
1
  import { assert } from "../internal/function/assert.mjs";
2
2
  //#region src/function/once.ts
3
+ const ONCE_NAME_ASYNC = "asyncOnce";
4
+ const ONCE_NAME_SYNC = "once";
5
+ const ONCE_PROPERTY = "$once";
6
+ function AsyncOnce(callback) {
7
+ Object.defineProperty(this, ONCE_SYMBOL, { value: {
8
+ callback,
9
+ called: false,
10
+ cleared: false,
11
+ error: false,
12
+ finished: false,
13
+ items: [],
14
+ value: void 0
15
+ } });
16
+ }
17
+ Object.defineProperties(AsyncOnce.prototype, {
18
+ [ONCE_PROPERTY]: { value: ONCE_NAME_ASYNC },
19
+ called: {
20
+ enumerable: true,
21
+ get() {
22
+ return this[ONCE_SYMBOL].called;
23
+ }
24
+ },
25
+ clear: { value: clearOnce },
26
+ cleared: {
27
+ enumerable: true,
28
+ get() {
29
+ return this[ONCE_SYMBOL].cleared;
30
+ }
31
+ },
32
+ error: {
33
+ enumerable: true,
34
+ get() {
35
+ return this[ONCE_SYMBOL].error;
36
+ }
37
+ },
38
+ finished: {
39
+ enumerable: true,
40
+ get() {
41
+ return this[ONCE_SYMBOL].finished;
42
+ }
43
+ },
44
+ run: { value: runOnceAsync }
45
+ });
46
+ function Once(callback) {
47
+ Object.defineProperty(this, ONCE_SYMBOL, { value: {
48
+ callback,
49
+ called: false,
50
+ cleared: false,
51
+ value: void 0
52
+ } });
53
+ }
54
+ Object.defineProperties(Once.prototype, {
55
+ [ONCE_PROPERTY]: { value: ONCE_NAME_SYNC },
56
+ clear: { value: clearOnce },
57
+ called: {
58
+ enumerable: true,
59
+ get() {
60
+ return this[ONCE_SYMBOL].called;
61
+ }
62
+ },
63
+ cleared: {
64
+ enumerable: true,
65
+ get() {
66
+ return this[ONCE_SYMBOL].cleared;
67
+ }
68
+ },
69
+ run: { value: runOnce }
70
+ });
3
71
  /**
4
72
  * Create an asynchronous function that can only be called once, rejecting or resolving the same result on subsequent calls
5
73
  *
@@ -10,59 +78,12 @@ import { assert } from "../internal/function/assert.mjs";
10
78
  */
11
79
  function asyncOnce(callback) {
12
80
  assert(() => typeof callback === "function", ONCE_MESSAGE_EXPECTATION);
13
- const state = {
14
- called: false,
15
- cleared: false,
16
- error: false,
17
- finished: false,
18
- items: [],
19
- value: void 0
20
- };
21
- const fn = (...parameters) => {
22
- if (state.cleared) return Promise.reject(new Error(ONCE_MESSAGE_CLEARED));
23
- if (state.finished) return state.error ? Promise.reject(state.value) : Promise.resolve(state.value);
24
- if (state.called) return new Promise((resolve, reject) => {
25
- state.items.push({
26
- reject,
27
- resolve
28
- });
29
- });
30
- state.called = true;
31
- return new Promise((resolve, reject) => {
32
- state.items.push({
33
- reject,
34
- resolve
35
- });
36
- callback(...parameters).then((value) => {
37
- handleOnceResult(state, value, false);
38
- }).catch((error) => {
39
- handleOnceResult(state, error, true);
40
- });
41
- });
42
- };
43
- Object.defineProperties(fn, {
44
- called: {
45
- enumerable: true,
46
- get: () => state.called
47
- },
48
- clear: { value: () => clearState(state) },
49
- cleared: {
50
- enumerable: true,
51
- get: () => state.cleared
52
- },
53
- error: {
54
- enumerable: true,
55
- get: () => state.error
56
- },
57
- finished: {
58
- enumerable: true,
59
- get: () => state.finished
60
- }
61
- });
62
- return fn;
81
+ return new AsyncOnce(callback);
63
82
  }
64
- function clearState(state) {
83
+ function clearOnce() {
84
+ const state = this[ONCE_SYMBOL];
65
85
  if (!state.called || state.cleared) return;
86
+ state.callback = void 0;
66
87
  state.cleared = true;
67
88
  state.value = void 0;
68
89
  }
@@ -79,6 +100,27 @@ function handleOnceResult(state, value, error) {
79
100
  }
80
101
  }
81
102
  /**
103
+ * Is the value an asynchronous once callback?
104
+ *
105
+ * @param value Value to check
106
+ * @returns `true` if the value is an asynchronous once callback, otherwise `false`
107
+ */
108
+ function isAsyncOnce(value) {
109
+ return isOnceInstance(value, ONCE_NAME_ASYNC);
110
+ }
111
+ /**
112
+ * Is the value a once callback?
113
+ *
114
+ * @param value Value to check
115
+ * @returns `true` if the value is a once callback, otherwise `false`
116
+ */
117
+ function isOnce(value) {
118
+ return isOnceInstance(value, ONCE_NAME_SYNC);
119
+ }
120
+ function isOnceInstance(value, name) {
121
+ return typeof value === "object" && value !== null && ONCE_PROPERTY in value && value[ONCE_PROPERTY] === name;
122
+ }
123
+ /**
82
124
  * Create a function that can only be called once, returning the same value on subsequent calls
83
125
  *
84
126
  * @param callback Callback to use once
@@ -86,34 +128,51 @@ function handleOnceResult(state, value, error) {
86
128
  */
87
129
  function once(callback) {
88
130
  assert(() => typeof callback === "function", ONCE_MESSAGE_EXPECTATION);
89
- const state = {
90
- called: false,
91
- cleared: false,
92
- value: void 0
93
- };
94
- const fn = (...parameters) => {
95
- if (state.cleared) throw new Error(ONCE_MESSAGE_CLEARED);
96
- if (state.called) return state.value;
97
- state.called = true;
98
- state.value = callback(...parameters);
99
- return state.value;
100
- };
101
- Object.defineProperties(fn, {
102
- called: {
103
- enumerable: true,
104
- get: () => state.called
105
- },
106
- clear: { value: () => clearState(state) },
107
- cleared: {
108
- enumerable: true,
109
- get: () => state.cleared
110
- }
131
+ return new Once(callback);
132
+ }
133
+ function runOnce(...parameters) {
134
+ const state = this[ONCE_SYMBOL];
135
+ if (state.cleared) throw new Error(ONCE_MESSAGE_CLEARED);
136
+ if (state.called) return state.value;
137
+ state.called = true;
138
+ state.value = state.callback(...parameters);
139
+ return state.value;
140
+ }
141
+ function runOnceAsync(...parameters) {
142
+ const state = this[ONCE_SYMBOL];
143
+ if (state.cleared) return Promise.reject(new Error(ONCE_MESSAGE_CLEARED));
144
+ if (state.finished) return state.error ? Promise.reject(state.value) : Promise.resolve(state.value);
145
+ if (state.called) return new Promise((resolve, reject) => {
146
+ state.items.push({
147
+ reject,
148
+ resolve
149
+ });
150
+ });
151
+ state.called = true;
152
+ return new Promise((resolve, reject) => {
153
+ state.items.push({
154
+ reject,
155
+ resolve
156
+ });
157
+ state.callback(...parameters).then((value) => {
158
+ handleOnceResult(state, value, false);
159
+ }).catch((error) => {
160
+ handleOnceResult(state, error, true);
161
+ });
111
162
  });
112
- return fn;
113
163
  }
114
164
  const ONCE_MESSAGE_CLEARED = "Once has been cleared";
115
165
  const ONCE_MESSAGE_EXPECTATION = "Once expected a function";
166
+ const ONCE_SYMBOL = Symbol(ONCE_PROPERTY);
167
+ asyncOnce.is = isAsyncOnce;
116
168
  once.async = asyncOnce;
117
- Object.defineProperty(once, "async", { value: asyncOnce });
169
+ once.is = isOnce;
170
+ once.isAsync = isAsyncOnce;
171
+ Object.defineProperty(asyncOnce, "is", { value: isAsyncOnce });
172
+ Object.defineProperties(once, {
173
+ async: { value: asyncOnce },
174
+ is: { value: isOnce },
175
+ isAsync: { value: isAsyncOnce }
176
+ });
118
177
  //#endregion
119
- export { asyncOnce, once };
178
+ export { asyncOnce, isAsyncOnce, isOnce, once };
@@ -3,11 +3,11 @@ import { GenericAsyncCallback, GenericCallback } from "../models.mjs";
3
3
  /**
4
4
  * An error thrown when a retry fails
5
5
  */
6
- declare class RetryError extends Error {
6
+ export declare class RetryError extends Error {
7
7
  readonly original: unknown;
8
8
  constructor(message: string, original: unknown);
9
9
  }
10
- type RetryOptions = {
10
+ export type RetryOptions = {
11
11
  delay?: number;
12
12
  times?: number;
13
13
  when?: (error: unknown) => boolean;
@@ -39,9 +39,8 @@ declare function asyncRetry<Callback extends GenericCallback>(callback: Callback
39
39
  * @param options Retry options
40
40
  * @returns Callback result
41
41
  */
42
- declare function retry<Callback extends GenericCallback>(callback: Callback, options?: Omit<RetryOptions, 'delay'>): ReturnType<Callback>;
43
- declare namespace retry {
42
+ export declare function retry<Callback extends GenericCallback>(callback: Callback, options?: Omit<RetryOptions, 'delay'>): ReturnType<Callback>;
43
+ export declare namespace retry {
44
44
  var async: typeof asyncRetry;
45
45
  }
46
- //#endregion
47
- export { RetryError, RetryOptions, retry };
46
+ //#endregion
@@ -1,6 +1,6 @@
1
1
  import { isPlainObject } from "../internal/is.mjs";
2
2
  import { getNumberOrDefault } from "../internal/defaults.mjs";
3
- import { TIMER_WAIT, getTimer } from "../internal/function/timer.mjs";
3
+ import { LIMITER_WAIT, getLimiter } from "../internal/function/limit.mjs";
4
4
  //#region src/function/retry.ts
5
5
  /**
6
6
  * An error thrown when a retry fails
@@ -32,12 +32,12 @@ async function asyncRetry(callback, options) {
32
32
  if (attempts >= times || !when(error)) rejector(new RetryError(RETRY_MESSAGE_FAILED, error));
33
33
  else {
34
34
  attempts += 1;
35
- timer();
35
+ limiter.run();
36
36
  }
37
37
  }
38
38
  }
39
39
  const { delay, times, when } = createRetryOptions(options);
40
- const timer = getTimer(TIMER_WAIT, handle, delay);
40
+ const limiter = getLimiter(LIMITER_WAIT, handle, delay);
41
41
  let attempts = 0;
42
42
  let rejector;
43
43
  let resolver;