@augment-vir/common 29.3.0 → 30.0.1

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 (296) hide show
  1. package/LICENSE-CC0 +121 -0
  2. package/LICENSE-MIT +21 -0
  3. package/README.md +7 -3
  4. package/dist/augments/array/array-map.d.ts +34 -0
  5. package/dist/augments/array/array-map.js +32 -0
  6. package/dist/augments/array/array-to-object.d.ts +53 -0
  7. package/dist/augments/array/array-to-object.js +67 -0
  8. package/dist/augments/array/awaited/awaited-filter.d.ts +36 -0
  9. package/dist/augments/array/awaited/awaited-filter.js +36 -0
  10. package/dist/augments/array/awaited/awaited-for-each.d.ts +31 -0
  11. package/dist/augments/array/awaited/awaited-for-each.js +34 -0
  12. package/dist/augments/array/awaited/awaited-map.d.ts +33 -0
  13. package/dist/augments/array/awaited/awaited-map.js +40 -0
  14. package/dist/augments/array/filter.d.ts +32 -0
  15. package/dist/augments/array/filter.js +74 -0
  16. package/dist/augments/array/remove-duplicates.d.ts +60 -0
  17. package/dist/augments/array/remove-duplicates.js +72 -0
  18. package/dist/augments/array/repeat-array.d.ts +23 -0
  19. package/dist/augments/array/repeat-array.js +25 -0
  20. package/dist/augments/array/shuffle-array.d.ts +9 -0
  21. package/dist/augments/array/shuffle-array.js +17 -0
  22. package/dist/augments/array/string-array.d.ts +9 -0
  23. package/dist/augments/array/string-array.js +11 -0
  24. package/dist/augments/core-exports.d.ts +1 -0
  25. package/dist/augments/core-exports.js +1 -0
  26. package/dist/augments/enum/enum-value-check.d.ts +32 -0
  27. package/dist/augments/enum/enum-value-check.js +34 -0
  28. package/dist/augments/error/combine-errors.d.ts +24 -0
  29. package/dist/augments/error/combine-errors.js +34 -0
  30. package/dist/augments/function/call-asynchronously.d.ts +25 -0
  31. package/dist/augments/function/call-asynchronously.js +26 -0
  32. package/dist/augments/function/call-with-retries.d.ts +24 -0
  33. package/dist/augments/function/call-with-retries.js +50 -0
  34. package/dist/augments/function/debounce.d.ts +89 -0
  35. package/dist/augments/function/debounce.js +112 -0
  36. package/dist/augments/function/execution-duration.d.ts +20 -0
  37. package/dist/augments/function/execution-duration.js +39 -0
  38. package/dist/augments/function/if-truthy.d.ts +28 -0
  39. package/dist/augments/function/if-truthy.js +35 -0
  40. package/dist/{types/augments → augments/function}/wrap-in-try.d.ts +14 -7
  41. package/dist/augments/function/wrap-in-try.js +98 -0
  42. package/dist/augments/json/append-json.d.ts +5 -0
  43. package/dist/augments/json/append-json.js +59 -0
  44. package/dist/augments/json/copy-through-json.d.ts +34 -0
  45. package/dist/augments/json/copy-through-json.js +42 -0
  46. package/dist/augments/json/json-compatible.d.ts +50 -0
  47. package/dist/augments/json/jsonify.d.ts +31 -0
  48. package/dist/augments/json/jsonify.js +33 -0
  49. package/dist/augments/log/log-colors.d.ts +64 -0
  50. package/dist/augments/log/log-colors.js +157 -0
  51. package/dist/augments/log/log-string.d.ts +35 -0
  52. package/dist/augments/log/log-string.js +73 -0
  53. package/dist/augments/log/log-writer.d.ts +30 -0
  54. package/dist/augments/log/log.d.ts +56 -0
  55. package/dist/augments/log/log.js +85 -0
  56. package/dist/augments/log/logger.d.ts +60 -0
  57. package/dist/augments/log/logger.js +59 -0
  58. package/dist/augments/number/clamp.d.ts +18 -0
  59. package/dist/augments/number/clamp.js +19 -0
  60. package/dist/augments/number/coords.d.ts +23 -0
  61. package/dist/augments/number/digit.d.ts +8 -0
  62. package/dist/augments/number/dimensions.d.ts +23 -0
  63. package/dist/augments/number/min-max.d.ts +18 -0
  64. package/dist/augments/number/min-max.js +16 -0
  65. package/dist/augments/number/number-conversion.d.ts +29 -0
  66. package/dist/augments/number/number-conversion.js +56 -0
  67. package/dist/augments/number/round.d.ts +22 -0
  68. package/dist/augments/number/round.js +24 -0
  69. package/dist/augments/number/scientific.d.ts +18 -0
  70. package/dist/augments/number/scientific.js +20 -0
  71. package/dist/augments/number/truncate-number.d.ts +40 -0
  72. package/dist/{esm/augments → augments/number}/truncate-number.js +39 -17
  73. package/dist/augments/number/wrap-number.d.ts +19 -0
  74. package/dist/augments/number/wrap-number.js +28 -0
  75. package/dist/augments/object/diff.d.ts +51 -0
  76. package/dist/augments/object/diff.js +149 -0
  77. package/dist/augments/object/empty.d.ts +9 -0
  78. package/dist/augments/object/get-or-set.d.ts +10 -0
  79. package/dist/augments/object/get-or-set.js +100 -0
  80. package/dist/augments/object/key-count.d.ts +21 -0
  81. package/dist/augments/object/map-entries.d.ts +13 -0
  82. package/dist/augments/object/map-entries.js +80 -0
  83. package/dist/augments/object/map-enum.d.ts +11 -0
  84. package/dist/augments/object/map-enum.js +45 -0
  85. package/dist/augments/object/map-values.d.ts +35 -0
  86. package/dist/augments/object/map-values.js +65 -0
  87. package/dist/{types/augments → augments}/object/merge-deep.d.ts +4 -0
  88. package/dist/{esm/augments → augments}/object/merge-deep.js +9 -6
  89. package/dist/augments/object/merge-defined-properties.d.ts +19 -0
  90. package/dist/augments/object/merge-defined-properties.js +32 -0
  91. package/dist/augments/object/merge-property-arrays.d.ts +29 -0
  92. package/dist/augments/object/merge-property-arrays.js +39 -0
  93. package/dist/augments/object/object-entries.d.ts +31 -0
  94. package/dist/augments/object/object-entries.js +40 -0
  95. package/dist/augments/object/object-filter.d.ts +22 -0
  96. package/dist/augments/object/object-filter.js +27 -0
  97. package/dist/augments/object/object-keys.d.ts +34 -0
  98. package/dist/augments/object/object-keys.js +43 -0
  99. package/dist/augments/object/object-values.d.ts +11 -0
  100. package/dist/augments/object/object-values.js +13 -0
  101. package/dist/augments/path/esm-path.d.ts +26 -0
  102. package/dist/augments/path/esm-path.js +31 -0
  103. package/dist/augments/prisma/prisma-models.d.ts +143 -0
  104. package/dist/augments/prisma/prisma-models.js +1 -0
  105. package/dist/augments/promise/timed-promise.d.ts +22 -0
  106. package/dist/augments/promise/timed-promise.js +51 -0
  107. package/dist/augments/random/random-boolean.d.ts +24 -0
  108. package/dist/augments/random/random-boolean.js +32 -0
  109. package/dist/augments/random/random-integer.d.ts +14 -0
  110. package/dist/augments/random/random-integer.js +34 -0
  111. package/dist/augments/random/random-string.d.ts +18 -0
  112. package/dist/augments/random/random-string.js +67 -0
  113. package/dist/augments/regexp/match.d.ts +10 -0
  114. package/dist/augments/regexp/match.js +13 -0
  115. package/dist/augments/regexp/regexp-flags.d.ts +56 -0
  116. package/dist/augments/regexp/regexp-flags.js +75 -0
  117. package/dist/augments/regexp/regexp-string.d.ts +9 -0
  118. package/dist/augments/regexp/regexp-string.js +11 -0
  119. package/dist/augments/selection-set/select-collapsed.d.ts +54 -0
  120. package/dist/augments/selection-set/select-collapsed.js +63 -0
  121. package/dist/augments/selection-set/select-from.d.ts +48 -0
  122. package/dist/augments/selection-set/select-from.js +72 -0
  123. package/dist/augments/selection-set/selection-set.d.ts +37 -0
  124. package/dist/augments/selection-set/selection-set.js +1 -0
  125. package/dist/augments/string/casing/capitalization.d.ts +17 -0
  126. package/dist/augments/string/casing/capitalization.js +25 -0
  127. package/dist/augments/string/casing/casing.d.ts +73 -0
  128. package/dist/augments/string/casing/casing.js +65 -0
  129. package/dist/augments/string/casing/kebab-and-camel.d.ts +17 -0
  130. package/dist/augments/string/casing/kebab-and-camel.js +57 -0
  131. package/dist/augments/string/comma.d.ts +26 -0
  132. package/dist/augments/string/comma.js +48 -0
  133. package/dist/augments/string/join.d.ts +21 -0
  134. package/dist/augments/string/join.js +34 -0
  135. package/dist/augments/string/prefix.d.ts +30 -0
  136. package/dist/augments/string/prefix.js +30 -0
  137. package/dist/augments/string/remove-duplicate-characters.d.ts +17 -0
  138. package/dist/augments/string/remove-duplicate-characters.js +22 -0
  139. package/dist/augments/string/replace.d.ts +18 -0
  140. package/dist/augments/string/replace.js +22 -0
  141. package/dist/augments/string/split.d.ts +31 -0
  142. package/dist/augments/string/split.js +53 -0
  143. package/dist/augments/string/substring-index.d.ts +19 -0
  144. package/dist/augments/string/substring-index.js +47 -0
  145. package/dist/augments/string/suffix.d.ts +96 -0
  146. package/dist/augments/string/suffix.js +89 -0
  147. package/dist/augments/string/white-space.d.ts +12 -0
  148. package/dist/augments/string/white-space.js +19 -0
  149. package/dist/augments/string/wrap-string.d.ts +19 -0
  150. package/dist/augments/string/wrap-string.js +20 -0
  151. package/dist/augments/type/ensure-type.d.ts +12 -0
  152. package/dist/augments/type/ensure-type.js +14 -0
  153. package/dist/augments/type/readonly.d.ts +9 -0
  154. package/dist/augments/type/readonly.js +10 -0
  155. package/dist/augments/type/type-recursion.d.ts +253 -0
  156. package/dist/augments/type/type-recursion.js +1 -0
  157. package/dist/augments/type/union.d.ts +1 -0
  158. package/dist/augments/type/union.js +1 -0
  159. package/dist/augments/type/void-type.d.ts +9 -0
  160. package/dist/augments/type/void-type.js +1 -0
  161. package/dist/augments/type/writable.d.ts +10 -0
  162. package/dist/augments/type/writable.js +10 -0
  163. package/dist/index.d.ts +83 -0
  164. package/dist/index.js +83 -0
  165. package/package.json +43 -15
  166. package/dist/cjs/augments/ansi.js +0 -27
  167. package/dist/cjs/augments/array/array.js +0 -68
  168. package/dist/cjs/augments/array/remove-duplicates.js +0 -16
  169. package/dist/cjs/augments/async.js +0 -28
  170. package/dist/cjs/augments/boolean.js +0 -19
  171. package/dist/cjs/augments/common-number.js +0 -112
  172. package/dist/cjs/augments/common-string.js +0 -245
  173. package/dist/cjs/augments/debounce.js +0 -38
  174. package/dist/cjs/augments/environment.js +0 -6
  175. package/dist/cjs/augments/error.js +0 -52
  176. package/dist/cjs/augments/esm-path.js +0 -11
  177. package/dist/cjs/augments/function.js +0 -2
  178. package/dist/cjs/augments/json-compatible.js +0 -2
  179. package/dist/cjs/augments/json.js +0 -28
  180. package/dist/cjs/augments/object/any-object.js +0 -2
  181. package/dist/cjs/augments/object/enum.js +0 -48
  182. package/dist/cjs/augments/object/filter-object.js +0 -26
  183. package/dist/cjs/augments/object/get-or-set.js +0 -40
  184. package/dist/cjs/augments/object/has-key.js +0 -6
  185. package/dist/cjs/augments/object/jsonify.js +0 -6
  186. package/dist/cjs/augments/object/key-count.js +0 -2
  187. package/dist/cjs/augments/object/map-object.js +0 -61
  188. package/dist/cjs/augments/object/merge-deep.js +0 -52
  189. package/dist/cjs/augments/object/merge-property-arrays.js +0 -14
  190. package/dist/cjs/augments/object/object-entries.js +0 -40
  191. package/dist/cjs/augments/object/object.js +0 -18
  192. package/dist/cjs/augments/object/pick-deep.js +0 -2
  193. package/dist/cjs/augments/object/selection-set.js +0 -56
  194. package/dist/cjs/augments/object/typed-has-property.js +0 -29
  195. package/dist/cjs/augments/promise/deferred-promise.js +0 -31
  196. package/dist/cjs/augments/promise/promise.js +0 -79
  197. package/dist/cjs/augments/promise/wait.js +0 -66
  198. package/dist/cjs/augments/random.js +0 -118
  199. package/dist/cjs/augments/regexp.js +0 -19
  200. package/dist/cjs/augments/string/prefixes.js +0 -20
  201. package/dist/cjs/augments/string/suffixes.js +0 -40
  202. package/dist/cjs/augments/string/uuid.js +0 -13
  203. package/dist/cjs/augments/time.js +0 -35
  204. package/dist/cjs/augments/truncate-number.js +0 -153
  205. package/dist/cjs/augments/tuple.js +0 -20
  206. package/dist/cjs/augments/type-recursion.js +0 -2
  207. package/dist/cjs/augments/type.js +0 -36
  208. package/dist/cjs/augments/union.js +0 -2
  209. package/dist/cjs/augments/wrap-in-try.js +0 -37
  210. package/dist/cjs/index.js +0 -60
  211. package/dist/esm/augments/ansi.js +0 -24
  212. package/dist/esm/augments/array/array.js +0 -57
  213. package/dist/esm/augments/array/remove-duplicates.js +0 -13
  214. package/dist/esm/augments/async.js +0 -23
  215. package/dist/esm/augments/boolean.js +0 -14
  216. package/dist/esm/augments/common-number.js +0 -100
  217. package/dist/esm/augments/common-string.js +0 -227
  218. package/dist/esm/augments/debounce.js +0 -34
  219. package/dist/esm/augments/environment.js +0 -3
  220. package/dist/esm/augments/error.js +0 -45
  221. package/dist/esm/augments/esm-path.js +0 -8
  222. package/dist/esm/augments/json.js +0 -24
  223. package/dist/esm/augments/object/enum.js +0 -41
  224. package/dist/esm/augments/object/filter-object.js +0 -21
  225. package/dist/esm/augments/object/get-or-set.js +0 -36
  226. package/dist/esm/augments/object/has-key.js +0 -3
  227. package/dist/esm/augments/object/jsonify.js +0 -3
  228. package/dist/esm/augments/object/map-object.js +0 -57
  229. package/dist/esm/augments/object/merge-property-arrays.js +0 -11
  230. package/dist/esm/augments/object/object-entries.js +0 -32
  231. package/dist/esm/augments/object/object.js +0 -14
  232. package/dist/esm/augments/object/selection-set.js +0 -52
  233. package/dist/esm/augments/object/typed-has-property.js +0 -25
  234. package/dist/esm/augments/promise/deferred-promise.js +0 -28
  235. package/dist/esm/augments/promise/promise.js +0 -71
  236. package/dist/esm/augments/promise/wait.js +0 -60
  237. package/dist/esm/augments/random.js +0 -113
  238. package/dist/esm/augments/regexp.js +0 -14
  239. package/dist/esm/augments/string/prefixes.js +0 -16
  240. package/dist/esm/augments/string/suffixes.js +0 -31
  241. package/dist/esm/augments/string/uuid.js +0 -9
  242. package/dist/esm/augments/time.js +0 -31
  243. package/dist/esm/augments/tuple.js +0 -16
  244. package/dist/esm/augments/type.js +0 -30
  245. package/dist/esm/augments/wrap-in-try.js +0 -34
  246. package/dist/esm/index.js +0 -44
  247. package/dist/types/augments/ansi.d.ts +0 -1
  248. package/dist/types/augments/array/array.d.ts +0 -26
  249. package/dist/types/augments/array/remove-duplicates.d.ts +0 -1
  250. package/dist/types/augments/async.d.ts +0 -14
  251. package/dist/types/augments/boolean.d.ts +0 -6
  252. package/dist/types/augments/common-number.d.ts +0 -52
  253. package/dist/types/augments/common-string.d.ts +0 -74
  254. package/dist/types/augments/debounce.d.ts +0 -15
  255. package/dist/types/augments/environment.d.ts +0 -1
  256. package/dist/types/augments/error.d.ts +0 -9
  257. package/dist/types/augments/esm-path.d.ts +0 -4
  258. package/dist/types/augments/function.d.ts +0 -25
  259. package/dist/types/augments/json-compatible.d.ts +0 -22
  260. package/dist/types/augments/json.d.ts +0 -9
  261. package/dist/types/augments/object/any-object.d.ts +0 -2
  262. package/dist/types/augments/object/enum.d.ts +0 -8
  263. package/dist/types/augments/object/filter-object.d.ts +0 -4
  264. package/dist/types/augments/object/get-or-set.d.ts +0 -26
  265. package/dist/types/augments/object/has-key.d.ts +0 -1
  266. package/dist/types/augments/object/jsonify.d.ts +0 -2
  267. package/dist/types/augments/object/key-count.d.ts +0 -13
  268. package/dist/types/augments/object/map-object.d.ts +0 -20
  269. package/dist/types/augments/object/merge-property-arrays.d.ts +0 -1
  270. package/dist/types/augments/object/object-entries.d.ts +0 -8
  271. package/dist/types/augments/object/object.d.ts +0 -21
  272. package/dist/types/augments/object/pick-deep.d.ts +0 -14
  273. package/dist/types/augments/object/selection-set.d.ts +0 -27
  274. package/dist/types/augments/object/typed-has-property.d.ts +0 -7
  275. package/dist/types/augments/promise/deferred-promise.d.ts +0 -8
  276. package/dist/types/augments/promise/promise.d.ts +0 -15
  277. package/dist/types/augments/promise/wait.d.ts +0 -18
  278. package/dist/types/augments/random.d.ts +0 -37
  279. package/dist/types/augments/regexp.d.ts +0 -3
  280. package/dist/types/augments/string/prefixes.d.ts +0 -9
  281. package/dist/types/augments/string/suffixes.d.ts +0 -17
  282. package/dist/types/augments/string/uuid.d.ts +0 -5
  283. package/dist/types/augments/time.d.ts +0 -14
  284. package/dist/types/augments/truncate-number.d.ts +0 -19
  285. package/dist/types/augments/tuple.d.ts +0 -17
  286. package/dist/types/augments/type-recursion.d.ts +0 -161
  287. package/dist/types/augments/type.d.ts +0 -69
  288. package/dist/types/augments/union.d.ts +0 -5
  289. package/dist/types/index.d.ts +0 -44
  290. /package/dist/{esm/augments → augments/json}/json-compatible.js +0 -0
  291. /package/dist/{esm/augments/function.js → augments/log/log-writer.js} +0 -0
  292. /package/dist/{esm/augments/object/any-object.js → augments/number/coords.js} +0 -0
  293. /package/dist/{esm/augments/object/key-count.js → augments/number/digit.js} +0 -0
  294. /package/dist/{esm/augments/object/pick-deep.js → augments/number/dimensions.js} +0 -0
  295. /package/dist/{esm/augments/type-recursion.js → augments/object/empty.js} +0 -0
  296. /package/dist/{esm/augments/union.js → augments/object/key-count.js} +0 -0
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Removes duplicates from an array. Optionally provide a callback for calculating a unique id for
3
+ * entries.
4
+ *
5
+ * @category Array
6
+ * @category Package : @augment-vir/common
7
+ * @example No callback
8
+ *
9
+ * ```ts
10
+ * import {removeDuplicates} from '@augment-vir/common';
11
+ *
12
+ * const result = removeDuplicates([
13
+ * 1,
14
+ * 1,
15
+ * 1,
16
+ * 1,
17
+ * 1,
18
+ * 2,
19
+ * 4,
20
+ * ]);
21
+ * // result is `[1, 2, 4]`
22
+ *
23
+ * const exampleEntry = {id: 5};
24
+ *
25
+ * const result2 = removeDuplicates([
26
+ * {id: 1},
27
+ * // this entry will not get filtered out because it's a new object reference
28
+ * {id: 1},
29
+ * exampleEntry,
30
+ * // this `exampleEntry` will get filtered out because it's the same reference as the one above
31
+ * exampleEntry,
32
+ * {id: 4},
33
+ * ]);
34
+ * // result2 is `[{id: 1}, {id: 1}, exampleEntry, {id: 4}]`
35
+ * ```
36
+ *
37
+ * @example With callback
38
+ *
39
+ * ```ts
40
+ * import {removeDuplicates} from '@augment-vir/common';
41
+ *
42
+ * const exampleEntry = {id: 5};
43
+ *
44
+ * const result2 = removeDuplicates(
45
+ * [
46
+ * {id: 1},
47
+ * {id: 1},
48
+ * exampleEntry,
49
+ * exampleEntry,
50
+ * {id: 4},
51
+ * ],
52
+ * (entry) => entry.id,
53
+ * );
54
+ * // result2 is `[{id: 1}, exampleEntry, {id: 4}]`
55
+ * ```
56
+ *
57
+ * @returns A new array (does not mutate).
58
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
59
+ */
60
+ export declare function removeDuplicates<const Entry>(originalArray: ReadonlyArray<Entry>, calculateUniqueId?: (entry: Readonly<Entry>) => unknown): Entry[];
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Removes duplicates from an array. Optionally provide a callback for calculating a unique id for
3
+ * entries.
4
+ *
5
+ * @category Array
6
+ * @category Package : @augment-vir/common
7
+ * @example No callback
8
+ *
9
+ * ```ts
10
+ * import {removeDuplicates} from '@augment-vir/common';
11
+ *
12
+ * const result = removeDuplicates([
13
+ * 1,
14
+ * 1,
15
+ * 1,
16
+ * 1,
17
+ * 1,
18
+ * 2,
19
+ * 4,
20
+ * ]);
21
+ * // result is `[1, 2, 4]`
22
+ *
23
+ * const exampleEntry = {id: 5};
24
+ *
25
+ * const result2 = removeDuplicates([
26
+ * {id: 1},
27
+ * // this entry will not get filtered out because it's a new object reference
28
+ * {id: 1},
29
+ * exampleEntry,
30
+ * // this `exampleEntry` will get filtered out because it's the same reference as the one above
31
+ * exampleEntry,
32
+ * {id: 4},
33
+ * ]);
34
+ * // result2 is `[{id: 1}, {id: 1}, exampleEntry, {id: 4}]`
35
+ * ```
36
+ *
37
+ * @example With callback
38
+ *
39
+ * ```ts
40
+ * import {removeDuplicates} from '@augment-vir/common';
41
+ *
42
+ * const exampleEntry = {id: 5};
43
+ *
44
+ * const result2 = removeDuplicates(
45
+ * [
46
+ * {id: 1},
47
+ * {id: 1},
48
+ * exampleEntry,
49
+ * exampleEntry,
50
+ * {id: 4},
51
+ * ],
52
+ * (entry) => entry.id,
53
+ * );
54
+ * // result2 is `[{id: 1}, exampleEntry, {id: 4}]`
55
+ * ```
56
+ *
57
+ * @returns A new array (does not mutate).
58
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
59
+ */
60
+ export function removeDuplicates(originalArray, calculateUniqueId = (entry) => entry) {
61
+ const grouped = new Map();
62
+ return originalArray.filter((entry) => {
63
+ const uniqueId = calculateUniqueId(entry);
64
+ if (grouped.get(uniqueId)) {
65
+ return false;
66
+ }
67
+ else {
68
+ grouped.set(uniqueId, entry);
69
+ return true;
70
+ }
71
+ });
72
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Repeats an array. Constructs a new array with the entries from the original repeated the given
3
+ * number of times.
4
+ *
5
+ * @category Array
6
+ * @category Package : @augment-vir/common
7
+ * @example
8
+ *
9
+ * ```ts
10
+ * import {repeatArray} from '@augment-vir/common';
11
+ *
12
+ * const result = repeatArray(3, [
13
+ * 'a',
14
+ * 'b',
15
+ * 'c',
16
+ * ]);
17
+ * // result is `['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']`
18
+ * ```
19
+ *
20
+ * @returns A new array (does not mutate).
21
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
22
+ */
23
+ export declare function repeatArray<T>(repeatCount: number, array: T[]): T[];
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Repeats an array. Constructs a new array with the entries from the original repeated the given
3
+ * number of times.
4
+ *
5
+ * @category Array
6
+ * @category Package : @augment-vir/common
7
+ * @example
8
+ *
9
+ * ```ts
10
+ * import {repeatArray} from '@augment-vir/common';
11
+ *
12
+ * const result = repeatArray(3, [
13
+ * 'a',
14
+ * 'b',
15
+ * 'c',
16
+ * ]);
17
+ * // result is `['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']`
18
+ * ```
19
+ *
20
+ * @returns A new array (does not mutate).
21
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
22
+ */
23
+ export function repeatArray(repeatCount, array) {
24
+ return Array.from({ length: repeatCount }, () => [...array]).flat();
25
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shuffles the positions of an array's entries (without mutating the array).
3
+ *
4
+ * @category Array
5
+ * @category Package : @augment-vir/common
6
+ * @returns A new array (does not mutate).
7
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
8
+ */
9
+ export declare function shuffleArray<ArrayElementType>(input: ReadonlyArray<ArrayElementType>): Array<ArrayElementType>;
@@ -0,0 +1,17 @@
1
+ import { randomString } from '../random/random-string.js';
2
+ /**
3
+ * Shuffles the positions of an array's entries (without mutating the array).
4
+ *
5
+ * @category Array
6
+ * @category Package : @augment-vir/common
7
+ * @returns A new array (does not mutate).
8
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
9
+ */
10
+ export function shuffleArray(input) {
11
+ return input
12
+ .map((value) => {
13
+ return { value, sort: randomString() };
14
+ })
15
+ .sort((a, b) => a.sort.localeCompare(b.sort))
16
+ .map(({ value }) => value);
17
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Trims all entries in an array.
3
+ *
4
+ * @category Array
5
+ * @category Package : @augment-vir/common
6
+ * @returns A new array (does not mutate).
7
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
8
+ */
9
+ export declare function trimArrayStrings(input: ReadonlyArray<string>): string[];
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Trims all entries in an array.
3
+ *
4
+ * @category Array
5
+ * @category Package : @augment-vir/common
6
+ * @returns A new array (does not mutate).
7
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
8
+ */
9
+ export function trimArrayStrings(input) {
10
+ return input.map((line) => line.trim()).filter((line) => line !== '');
11
+ }
@@ -0,0 +1 @@
1
+ export * from '@augment-vir/core';
@@ -0,0 +1 @@
1
+ export * from '@augment-vir/core';
@@ -0,0 +1,32 @@
1
+ import type { EnumBaseType } from '@augment-vir/core';
2
+ /**
3
+ * Filters the input array to all valid values from the given enum.
4
+ *
5
+ * @category Array
6
+ * @category Enum
7
+ * @category Package : @augment-vir/common
8
+ * @example
9
+ *
10
+ * ```ts
11
+ * enum MyEnum {
12
+ * A = 'a',
13
+ * B = 'b',
14
+ * }
15
+ *
16
+ * const result = filterToEnumValues(
17
+ * [
18
+ * 1,
19
+ * 2,
20
+ * 3,
21
+ * 'a',
22
+ * 'b',
23
+ * MyEnum.A,
24
+ * ],
25
+ * MyEnum,
26
+ * ); // result is `[MyEnum.A, MyEnum.B, MyEnum.A]`
27
+ * ```
28
+ *
29
+ * @returns A new array (does not mutate).
30
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
31
+ */
32
+ export declare function filterToEnumValues<const T extends EnumBaseType>(inputs: ReadonlyArray<unknown>, checkEnum: T): T[keyof T][];
@@ -0,0 +1,34 @@
1
+ import { check } from '@augment-vir/assert';
2
+ /**
3
+ * Filters the input array to all valid values from the given enum.
4
+ *
5
+ * @category Array
6
+ * @category Enum
7
+ * @category Package : @augment-vir/common
8
+ * @example
9
+ *
10
+ * ```ts
11
+ * enum MyEnum {
12
+ * A = 'a',
13
+ * B = 'b',
14
+ * }
15
+ *
16
+ * const result = filterToEnumValues(
17
+ * [
18
+ * 1,
19
+ * 2,
20
+ * 3,
21
+ * 'a',
22
+ * 'b',
23
+ * MyEnum.A,
24
+ * ],
25
+ * MyEnum,
26
+ * ); // result is `[MyEnum.A, MyEnum.B, MyEnum.A]`
27
+ * ```
28
+ *
29
+ * @returns A new array (does not mutate).
30
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
31
+ */
32
+ export function filterToEnumValues(inputs, checkEnum) {
33
+ return inputs.filter((input) => check.isEnumValue(input, checkEnum));
34
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Combines an array of errors into a single array.
3
+ *
4
+ * - If no errors are in the given array, a new Error with an empty message is returned.
5
+ * - If only one error is in the given array, it is directly returned without modification.
6
+ *
7
+ * @category Array
8
+ * @category Error
9
+ * @category Package : @augment-vir/common
10
+ * @example
11
+ *
12
+ * ```ts
13
+ * import {combineErrors} from '@augment-vir/common';
14
+ *
15
+ * const result1 = combineErrors([
16
+ * new Error('message 1'),
17
+ * new Error('message 2'),
18
+ * ]); // result1 is a single error with the message 'message 1\nmessage 2'
19
+ * ```
20
+ *
21
+ * @returns A single error.
22
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
23
+ */
24
+ export declare function combineErrors(errors: ReadonlyArray<Error>): Error;
@@ -0,0 +1,34 @@
1
+ import { check } from '@augment-vir/assert';
2
+ import { extractErrorMessage } from '@augment-vir/core';
3
+ /**
4
+ * Combines an array of errors into a single array.
5
+ *
6
+ * - If no errors are in the given array, a new Error with an empty message is returned.
7
+ * - If only one error is in the given array, it is directly returned without modification.
8
+ *
9
+ * @category Array
10
+ * @category Error
11
+ * @category Package : @augment-vir/common
12
+ * @example
13
+ *
14
+ * ```ts
15
+ * import {combineErrors} from '@augment-vir/common';
16
+ *
17
+ * const result1 = combineErrors([
18
+ * new Error('message 1'),
19
+ * new Error('message 2'),
20
+ * ]); // result1 is a single error with the message 'message 1\nmessage 2'
21
+ * ```
22
+ *
23
+ * @returns A single error.
24
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
25
+ */
26
+ export function combineErrors(errors) {
27
+ if (!check.isLengthAtLeast(errors, 1)) {
28
+ return new Error();
29
+ }
30
+ else if (errors.length === 1) {
31
+ return errors[0];
32
+ }
33
+ return new Error(errors.map((error) => extractErrorMessage(error).trim()).join('\n'));
34
+ }
@@ -0,0 +1,25 @@
1
+ import { MaybePromise } from '@augment-vir/core';
2
+ /**
3
+ * Call a function asynchronously without interrupting current synchronous execution, even if the
4
+ * function was originally synchronous.
5
+ *
6
+ * @category Function
7
+ * @category Package : @augment-vir/common
8
+ * @example
9
+ *
10
+ * ```ts
11
+ * import {callAsynchronously} from '@augment-vir/common';
12
+ *
13
+ * console.info('1');
14
+ * const later = callAsynchronously(() => {
15
+ * console.info('3');
16
+ * });
17
+ * console.info('2');
18
+ * await later;
19
+ *
20
+ * // logs 1,2,3 in numeric order
21
+ * ```
22
+ *
23
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
24
+ */
25
+ export declare function callAsynchronously<T>(callback: () => MaybePromise<T>): Promise<T>;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Call a function asynchronously without interrupting current synchronous execution, even if the
3
+ * function was originally synchronous.
4
+ *
5
+ * @category Function
6
+ * @category Package : @augment-vir/common
7
+ * @example
8
+ *
9
+ * ```ts
10
+ * import {callAsynchronously} from '@augment-vir/common';
11
+ *
12
+ * console.info('1');
13
+ * const later = callAsynchronously(() => {
14
+ * console.info('3');
15
+ * });
16
+ * console.info('2');
17
+ * await later;
18
+ *
19
+ * // logs 1,2,3 in numeric order
20
+ * ```
21
+ *
22
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
23
+ */
24
+ export async function callAsynchronously(callback) {
25
+ return await Promise.resolve().then(() => callback());
26
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Calls `callback` until it doesn't throw an error or throws an error when `maxRetries` is reached.
3
+ * Similar to the `waitUntil` guard from '@augment-vir/assert' but doesn't check the callback's
4
+ * output.
5
+ *
6
+ * @category Function
7
+ * @category Package : @augment-vir/common
8
+ * @example
9
+ *
10
+ * ```ts
11
+ * import {callWithRetries} from '@augment-vir/common';
12
+ *
13
+ * const result = callWithRetries(5, () => {
14
+ * if (Math.random() < 0.5) {
15
+ * return 'done';
16
+ * } else {
17
+ * throw new Error();
18
+ * }
19
+ * });
20
+ * ```
21
+ *
22
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
23
+ */
24
+ export declare function callWithRetries<const T>(maxRetries: number, callback: () => T): T;
@@ -0,0 +1,50 @@
1
+ import { ensureErrorAndPrependMessage } from '@augment-vir/core';
2
+ /**
3
+ * Calls `callback` until it doesn't throw an error or throws an error when `maxRetries` is reached.
4
+ * Similar to the `waitUntil` guard from '@augment-vir/assert' but doesn't check the callback's
5
+ * output.
6
+ *
7
+ * @category Function
8
+ * @category Package : @augment-vir/common
9
+ * @example
10
+ *
11
+ * ```ts
12
+ * import {callWithRetries} from '@augment-vir/common';
13
+ *
14
+ * const result = callWithRetries(5, () => {
15
+ * if (Math.random() < 0.5) {
16
+ * return 'done';
17
+ * } else {
18
+ * throw new Error();
19
+ * }
20
+ * });
21
+ * ```
22
+ *
23
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
24
+ */
25
+ export function callWithRetries(maxRetries, callback) {
26
+ try {
27
+ const result = callback();
28
+ if (result instanceof Promise) {
29
+ return result.catch((error) => {
30
+ if (maxRetries <= 1) {
31
+ throw ensureErrorAndPrependMessage(error, 'Retry max reached');
32
+ }
33
+ else {
34
+ return callWithRetries(maxRetries - 1, callback);
35
+ }
36
+ });
37
+ }
38
+ else {
39
+ return result;
40
+ }
41
+ }
42
+ catch (error) {
43
+ if (maxRetries <= 1) {
44
+ throw ensureErrorAndPrependMessage(error, 'Retry max reached');
45
+ }
46
+ else {
47
+ return callWithRetries(maxRetries - 1, callback);
48
+ }
49
+ }
50
+ }
@@ -0,0 +1,89 @@
1
+ import { MaybePromise } from '@augment-vir/core';
2
+ import { AnyDuration } from '@date-vir/duration';
3
+ /**
4
+ * Different types of debouncing for the {@link Debounce} class.
5
+ *
6
+ * @category Function
7
+ * @category Package : @augment-vir/common
8
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
9
+ */
10
+ export declare enum DebounceStyle {
11
+ /**
12
+ * Fires on the first call, then waits the given amount of milliseconds until another call is
13
+ * allowed through.
14
+ *
15
+ * `.execute()` calls with a 25ms debounce time looks like this:
16
+ *
17
+ * | 1st `.execute()` | 2nd `.execute()` | 3rd `.execute()` | 4th `.execute()` |
18
+ * | ---------------- | ---------------- | ---------------- | ---------------- |
19
+ * | 0ms | 10ms | 20ms | 30ms |
20
+ * | fired! | | | fired! |
21
+ */
22
+ FirstThenWait = "first-then-wait",
23
+ /**
24
+ * Waits the given amount of milliseconds after the first call and then fires the latest
25
+ * assigned callback.
26
+ *
27
+ * `.execute()` calls with a 25ms debounce time looks like this:
28
+ *
29
+ * | 1st `.execute()` | 2nd `.execute()` | 3rd `.execute()` | - | 4th `.execute()` | ... |
30
+ * | ---------------- | ---------------- | ---------------- | ------ | ---------------- | ------ |
31
+ * | 0ms | 10ms | 20ms | 25ms | 30ms | 50ms |
32
+ * | | | | fired! | | fired! |
33
+ */
34
+ AfterWait = "after-wait"
35
+ }
36
+ /**
37
+ * Enable debouncing of callbacks, with various styles of debounce supported in {@link DebounceStyle}
38
+ * (see its docs for debounce style details). A callback can be provided on construction or to the
39
+ * `.execute()` method.
40
+ *
41
+ * @category Function
42
+ * @category Package : @augment-vir/common
43
+ * @example
44
+ *
45
+ * ```ts
46
+ * import {Debounce} from '@augment-vir/common';
47
+ *
48
+ * const debounce = new Debounce(
49
+ * DebounceStyle.FirstThenWait,
50
+ * {
51
+ * milliseconds: 500,
52
+ * },
53
+ * // callback can optionally be provided on construction
54
+ * () => {
55
+ * console.log('called');
56
+ * },
57
+ * );
58
+ *
59
+ * debounce.execute();
60
+ * // providing a callback in `.execute()` permanently overrides the callback provided in construction.
61
+ * debounce.execute(() => {});
62
+ * ```
63
+ *
64
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
65
+ */
66
+ export declare class Debounce {
67
+ /** Debounce style. See {@link DebounceStyle} for more details. */
68
+ debounceStyle: DebounceStyle;
69
+ /** Duration between debounces. */
70
+ debounceDuration: AnyDuration;
71
+ /**
72
+ * Set the callback to be triggered on `.execute()`. If this is not set, the callback to be
73
+ * called can be passed in `.execute()` instead.
74
+ */
75
+ callback?: (() => MaybePromise<void>) | undefined;
76
+ nextCallTimestamp: number;
77
+ constructor(
78
+ /** Debounce style. See {@link DebounceStyle} for more details. */
79
+ debounceStyle: DebounceStyle,
80
+ /** Duration between debounces. */
81
+ debounceDuration: AnyDuration,
82
+ /**
83
+ * Set the callback to be triggered on `.execute()`. If this is not set, the callback to be
84
+ * called can be passed in `.execute()` instead.
85
+ */
86
+ callback?: (() => MaybePromise<void>) | undefined);
87
+ /** Call the callback, if one has been set yet, if the current debounce timer is up. */
88
+ execute(callback?: typeof this.callback | undefined): void;
89
+ }