@ls-stack/utils 3.63.0 → 3.66.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 (328) hide show
  1. package/dist/{arrayUtils.d.cts → arrayUtils.d.mts} +24 -23
  2. package/dist/arrayUtils.mjs +249 -0
  3. package/dist/assertions-qMxfVhSu.mjs +207 -0
  4. package/dist/{assertions.d.ts → assertions.d.mts} +4 -3
  5. package/dist/assertions.mjs +3 -0
  6. package/dist/asyncQueue.d.mts +497 -0
  7. package/dist/asyncQueue.mjs +757 -0
  8. package/dist/{awaitDebounce.d.cts → awaitDebounce.d.mts} +11 -6
  9. package/dist/awaitDebounce.mjs +54 -0
  10. package/dist/{cache.d.ts → cache.d.mts} +76 -68
  11. package/dist/cache.mjs +355 -0
  12. package/dist/castValues-DfICShCc.mjs +19 -0
  13. package/dist/{castValues.d.cts → castValues.d.mts} +3 -2
  14. package/dist/castValues.mjs +3 -0
  15. package/dist/{concurrentCalls.d.ts → concurrentCalls.d.mts} +74 -65
  16. package/dist/concurrentCalls.mjs +295 -0
  17. package/dist/consoleFmt.d.mts +55 -0
  18. package/dist/consoleFmt.mjs +63 -0
  19. package/dist/conversions-DTmwEMIu.mjs +12 -0
  20. package/dist/conversions.d.mts +4 -0
  21. package/dist/conversions.mjs +3 -0
  22. package/dist/createThrottleController.d.mts +18 -0
  23. package/dist/createThrottleController.mjs +40 -0
  24. package/dist/debounce.d.mts +47 -0
  25. package/dist/debounce.mjs +117 -0
  26. package/dist/dedent.d.mts +74 -0
  27. package/dist/dedent.mjs +80 -0
  28. package/dist/deepEqual-C7EZEixx.mjs +78 -0
  29. package/dist/{deepEqual.d.cts → deepEqual.d.mts} +3 -2
  30. package/dist/deepEqual.mjs +3 -0
  31. package/dist/{deepReplaceValues.d.cts → deepReplaceValues.d.mts} +4 -3
  32. package/dist/deepReplaceValues.mjs +61 -0
  33. package/dist/diffParser.d.mts +63 -0
  34. package/dist/diffParser.mjs +410 -0
  35. package/dist/enhancedMap.d.mts +21 -0
  36. package/dist/enhancedMap.mjs +69 -0
  37. package/dist/exhaustiveMatch.d.mts +10 -0
  38. package/dist/exhaustiveMatch.mjs +48 -0
  39. package/dist/{filterObjectOrArrayKeys.d.cts → filterObjectOrArrayKeys.d.mts} +15 -8
  40. package/dist/filterObjectOrArrayKeys.mjs +497 -0
  41. package/dist/{getAutoIncrementId.d.cts → getAutoIncrementId.d.mts} +9 -5
  42. package/dist/getAutoIncrementId.mjs +53 -0
  43. package/dist/{getCompositeKey.d.cts → getCompositeKey.d.mts} +3 -2
  44. package/dist/getCompositeKey.mjs +50 -0
  45. package/dist/{getValueStableKey.d.cts → getValueStableKey.d.mts} +5 -3
  46. package/dist/getValueStableKey.mjs +17 -0
  47. package/dist/{hash.d.cts → hash.d.mts} +3 -2
  48. package/dist/hash.mjs +28 -0
  49. package/dist/interpolate.d.mts +17 -0
  50. package/dist/interpolate.mjs +28 -0
  51. package/dist/{iteratorUtils.d.cts → iteratorUtils.d.mts} +5 -4
  52. package/dist/iteratorUtils.mjs +39 -0
  53. package/dist/keepPrevIfUnchanged.d.mts +12 -0
  54. package/dist/keepPrevIfUnchanged.mjs +9 -0
  55. package/dist/keyedMap.d.mts +76 -0
  56. package/dist/keyedMap.mjs +139 -0
  57. package/dist/keyedSet.d.mts +77 -0
  58. package/dist/keyedSet.mjs +129 -0
  59. package/dist/{levenshtein.d.cts → levenshtein.d.mts} +3 -2
  60. package/dist/levenshtein.mjs +121 -0
  61. package/dist/main.d.mts +4 -0
  62. package/dist/main.mjs +7 -0
  63. package/dist/matchPath.d.mts +50 -0
  64. package/dist/matchPath.mjs +81 -0
  65. package/dist/mathUtils-BDP1lM_z.mjs +81 -0
  66. package/dist/{mathUtils.d.cts → mathUtils.d.mts} +3 -2
  67. package/dist/mathUtils.mjs +3 -0
  68. package/dist/{mutationUtils.d.cts → mutationUtils.d.mts} +6 -5
  69. package/dist/mutationUtils.mjs +44 -0
  70. package/dist/{objUtils.d.ts → objUtils.d.mts} +8 -6
  71. package/dist/objUtils.mjs +115 -0
  72. package/dist/parallelAsyncCalls.d.mts +83 -0
  73. package/dist/parallelAsyncCalls.mjs +121 -0
  74. package/dist/partialEqual.d.mts +139 -0
  75. package/dist/partialEqual.mjs +1055 -0
  76. package/dist/promiseUtils.d.mts +9 -0
  77. package/dist/promiseUtils.mjs +17 -0
  78. package/dist/regexUtils.d.mts +18 -0
  79. package/dist/regexUtils.mjs +34 -0
  80. package/dist/{retryOnError.d.cts → retryOnError.d.mts} +38 -37
  81. package/dist/retryOnError.mjs +91 -0
  82. package/dist/{runShellCmd.d.ts → runShellCmd.d.mts} +24 -15
  83. package/dist/runShellCmd.mjs +151 -0
  84. package/dist/{safeJson.d.cts → safeJson.d.mts} +3 -2
  85. package/dist/safeJson.mjs +30 -0
  86. package/dist/{saferTyping.d.cts → saferTyping.d.mts} +4 -3
  87. package/dist/saferTyping.mjs +45 -0
  88. package/dist/serializeXML.d.mts +23 -0
  89. package/dist/serializeXML.mjs +74 -0
  90. package/dist/{shallowEqual.d.cts → shallowEqual.d.mts} +3 -2
  91. package/dist/shallowEqual.mjs +54 -0
  92. package/dist/sleep.d.mts +4 -0
  93. package/dist/sleep.mjs +7 -0
  94. package/dist/stringUtils-DjhWOiYn.mjs +113 -0
  95. package/dist/{stringUtils.d.cts → stringUtils.d.mts} +3 -2
  96. package/dist/stringUtils.mjs +3 -0
  97. package/dist/{testUtils.d.ts → testUtils.d.mts} +83 -52
  98. package/dist/testUtils.mjs +310 -0
  99. package/dist/{throttle.d.ts → throttle.d.mts} +18 -17
  100. package/dist/throttle.mjs +102 -0
  101. package/dist/time-sr2lhQRw.mjs +67 -0
  102. package/dist/{time.d.ts → time.d.mts} +8 -7
  103. package/dist/time.mjs +3 -0
  104. package/dist/{timers.d.cts → timers.d.mts} +22 -13
  105. package/dist/timers.mjs +220 -0
  106. package/dist/{tsResult.d.cts → tsResult.d.mts} +52 -48
  107. package/dist/tsResult.mjs +142 -0
  108. package/dist/typeGuards-B1mzA-Rz.mjs +128 -0
  109. package/dist/{typeGuards.d.cts → typeGuards.d.mts} +3 -2
  110. package/dist/typeGuards.mjs +3 -0
  111. package/dist/{typeUtils.d.ts → typeUtils.d.mts} +13 -34
  112. package/dist/typeUtils.mjs +1 -0
  113. package/dist/{typedStrings.d.cts → typedStrings.d.mts} +5 -4
  114. package/dist/typedStrings.mjs +131 -0
  115. package/dist/typingFnUtils-Bb8drgKF.mjs +101 -0
  116. package/dist/{typingFnUtils.d.cts → typingFnUtils.d.mts} +13 -22
  117. package/dist/typingFnUtils.mjs +3 -0
  118. package/dist/{typingTestUtils.d.cts → typingTestUtils.d.mts} +11 -15
  119. package/dist/typingTestUtils.mjs +80 -0
  120. package/dist/typingUtils.d.mts +20 -0
  121. package/dist/typingUtils.mjs +1 -0
  122. package/dist/yamlStringify.d.mts +17 -0
  123. package/dist/yamlStringify.mjs +189 -0
  124. package/package.json +65 -234
  125. package/dist/arrayUtils.cjs +0 -229
  126. package/dist/arrayUtils.d.ts +0 -171
  127. package/dist/arrayUtils.js +0 -42
  128. package/dist/assertions.cjs +0 -107
  129. package/dist/assertions.d.cts +0 -192
  130. package/dist/assertions.js +0 -25
  131. package/dist/asyncQueue.cjs +0 -672
  132. package/dist/asyncQueue.d.cts +0 -488
  133. package/dist/asyncQueue.d.ts +0 -488
  134. package/dist/asyncQueue.js +0 -631
  135. package/dist/awaitDebounce.cjs +0 -106
  136. package/dist/awaitDebounce.d.ts +0 -41
  137. package/dist/awaitDebounce.js +0 -28
  138. package/dist/cache.cjs +0 -367
  139. package/dist/cache.d.cts +0 -228
  140. package/dist/cache.js +0 -19
  141. package/dist/castValues.cjs +0 -50
  142. package/dist/castValues.d.ts +0 -4
  143. package/dist/castValues.js +0 -8
  144. package/dist/chunk-5DZT3Z5Z.js +0 -8
  145. package/dist/chunk-6FBIEPWU.js +0 -96
  146. package/dist/chunk-6FIBVC2P.js +0 -56
  147. package/dist/chunk-7CQPOM5I.js +0 -100
  148. package/dist/chunk-B6DNOZCP.js +0 -369
  149. package/dist/chunk-BM4PYVOX.js +0 -109
  150. package/dist/chunk-C2SVCIWE.js +0 -57
  151. package/dist/chunk-CCUPDGSZ.js +0 -132
  152. package/dist/chunk-DBOWTYR4.js +0 -49
  153. package/dist/chunk-DFXNVEH6.js +0 -14
  154. package/dist/chunk-DX2524CZ.js +0 -314
  155. package/dist/chunk-GMJTLFM6.js +0 -60
  156. package/dist/chunk-IATIXMCE.js +0 -20
  157. package/dist/chunk-II4R3VVX.js +0 -25
  158. package/dist/chunk-JF2MDHOJ.js +0 -40
  159. package/dist/chunk-JQFUKJU5.js +0 -71
  160. package/dist/chunk-MI4UE2PQ.js +0 -561
  161. package/dist/chunk-PUKVXYYL.js +0 -52
  162. package/dist/chunk-QQS7I7ZL.js +0 -16
  163. package/dist/chunk-VAAMRG4K.js +0 -20
  164. package/dist/chunk-WFQJUJTC.js +0 -182
  165. package/dist/chunk-ZXIKIA5B.js +0 -178
  166. package/dist/concurrentCalls.cjs +0 -406
  167. package/dist/concurrentCalls.d.cts +0 -116
  168. package/dist/concurrentCalls.js +0 -346
  169. package/dist/consoleFmt.cjs +0 -85
  170. package/dist/consoleFmt.d.cts +0 -54
  171. package/dist/consoleFmt.d.ts +0 -54
  172. package/dist/consoleFmt.js +0 -60
  173. package/dist/conversions.cjs +0 -44
  174. package/dist/conversions.d.cts +0 -3
  175. package/dist/conversions.d.ts +0 -3
  176. package/dist/conversions.js +0 -6
  177. package/dist/createThrottleController.cjs +0 -193
  178. package/dist/createThrottleController.d.cts +0 -13
  179. package/dist/createThrottleController.d.ts +0 -13
  180. package/dist/createThrottleController.js +0 -61
  181. package/dist/debounce.cjs +0 -157
  182. package/dist/debounce.d.cts +0 -46
  183. package/dist/debounce.d.ts +0 -46
  184. package/dist/debounce.js +0 -8
  185. package/dist/dedent.cjs +0 -104
  186. package/dist/dedent.d.cts +0 -73
  187. package/dist/dedent.d.ts +0 -73
  188. package/dist/dedent.js +0 -79
  189. package/dist/deepEqual.cjs +0 -96
  190. package/dist/deepEqual.d.ts +0 -21
  191. package/dist/deepEqual.js +0 -8
  192. package/dist/deepReplaceValues.cjs +0 -87
  193. package/dist/deepReplaceValues.d.ts +0 -27
  194. package/dist/deepReplaceValues.js +0 -7
  195. package/dist/enhancedMap.cjs +0 -131
  196. package/dist/enhancedMap.d.cts +0 -20
  197. package/dist/enhancedMap.d.ts +0 -20
  198. package/dist/enhancedMap.js +0 -10
  199. package/dist/exhaustiveMatch.cjs +0 -66
  200. package/dist/exhaustiveMatch.d.cts +0 -9
  201. package/dist/exhaustiveMatch.d.ts +0 -9
  202. package/dist/exhaustiveMatch.js +0 -40
  203. package/dist/filterObjectOrArrayKeys.cjs +0 -619
  204. package/dist/filterObjectOrArrayKeys.d.ts +0 -88
  205. package/dist/filterObjectOrArrayKeys.js +0 -9
  206. package/dist/getAutoIncrementId.cjs +0 -44
  207. package/dist/getAutoIncrementId.d.ts +0 -46
  208. package/dist/getAutoIncrementId.js +0 -18
  209. package/dist/getCompositeKey.cjs +0 -86
  210. package/dist/getCompositeKey.d.ts +0 -11
  211. package/dist/getCompositeKey.js +0 -8
  212. package/dist/getValueStableKey.cjs +0 -89
  213. package/dist/getValueStableKey.d.ts +0 -15
  214. package/dist/getValueStableKey.js +0 -11
  215. package/dist/hash.cjs +0 -57
  216. package/dist/hash.d.ts +0 -7
  217. package/dist/hash.js +0 -32
  218. package/dist/interpolate.cjs +0 -88
  219. package/dist/interpolate.d.cts +0 -11
  220. package/dist/interpolate.d.ts +0 -11
  221. package/dist/interpolate.js +0 -46
  222. package/dist/iteratorUtils.cjs +0 -73
  223. package/dist/iteratorUtils.d.ts +0 -10
  224. package/dist/iteratorUtils.js +0 -44
  225. package/dist/keepPrevIfUnchanged.cjs +0 -102
  226. package/dist/keepPrevIfUnchanged.d.cts +0 -7
  227. package/dist/keepPrevIfUnchanged.d.ts +0 -7
  228. package/dist/keepPrevIfUnchanged.js +0 -7
  229. package/dist/levenshtein.cjs +0 -180
  230. package/dist/levenshtein.d.ts +0 -5
  231. package/dist/levenshtein.js +0 -153
  232. package/dist/main.cjs +0 -32
  233. package/dist/main.d.cts +0 -3
  234. package/dist/main.d.ts +0 -3
  235. package/dist/main.js +0 -7
  236. package/dist/matchPath.cjs +0 -155
  237. package/dist/matchPath.d.cts +0 -53
  238. package/dist/matchPath.d.ts +0 -53
  239. package/dist/matchPath.js +0 -108
  240. package/dist/mathUtils.cjs +0 -81
  241. package/dist/mathUtils.d.ts +0 -54
  242. package/dist/mathUtils.js +0 -22
  243. package/dist/mutationUtils.cjs +0 -153
  244. package/dist/mutationUtils.d.ts +0 -15
  245. package/dist/mutationUtils.js +0 -55
  246. package/dist/objUtils.cjs +0 -242
  247. package/dist/objUtils.d.cts +0 -28
  248. package/dist/objUtils.js +0 -38
  249. package/dist/parallelAsyncCalls.cjs +0 -162
  250. package/dist/parallelAsyncCalls.d.cts +0 -82
  251. package/dist/parallelAsyncCalls.d.ts +0 -82
  252. package/dist/parallelAsyncCalls.js +0 -126
  253. package/dist/partialEqual.cjs +0 -1196
  254. package/dist/partialEqual.d.cts +0 -141
  255. package/dist/partialEqual.d.ts +0 -141
  256. package/dist/partialEqual.js +0 -1168
  257. package/dist/promiseUtils.cjs +0 -38
  258. package/dist/promiseUtils.d.cts +0 -8
  259. package/dist/promiseUtils.d.ts +0 -8
  260. package/dist/promiseUtils.js +0 -6
  261. package/dist/regexUtils.cjs +0 -60
  262. package/dist/regexUtils.d.cts +0 -17
  263. package/dist/regexUtils.d.ts +0 -17
  264. package/dist/regexUtils.js +0 -33
  265. package/dist/retryOnError.cjs +0 -130
  266. package/dist/retryOnError.d.ts +0 -83
  267. package/dist/retryOnError.js +0 -101
  268. package/dist/runShellCmd.cjs +0 -127
  269. package/dist/runShellCmd.d.cts +0 -90
  270. package/dist/runShellCmd.js +0 -98
  271. package/dist/safeJson.cjs +0 -45
  272. package/dist/safeJson.d.ts +0 -16
  273. package/dist/safeJson.js +0 -8
  274. package/dist/saferTyping.cjs +0 -52
  275. package/dist/saferTyping.d.ts +0 -47
  276. package/dist/saferTyping.js +0 -23
  277. package/dist/serializeXML.cjs +0 -154
  278. package/dist/serializeXML.d.cts +0 -22
  279. package/dist/serializeXML.d.ts +0 -22
  280. package/dist/serializeXML.js +0 -116
  281. package/dist/shallowEqual.cjs +0 -88
  282. package/dist/shallowEqual.d.ts +0 -4
  283. package/dist/shallowEqual.js +0 -63
  284. package/dist/sleep.cjs +0 -32
  285. package/dist/sleep.d.cts +0 -3
  286. package/dist/sleep.d.ts +0 -3
  287. package/dist/sleep.js +0 -6
  288. package/dist/stringUtils.cjs +0 -155
  289. package/dist/stringUtils.d.ts +0 -55
  290. package/dist/stringUtils.js +0 -50
  291. package/dist/testUtils.cjs +0 -1490
  292. package/dist/testUtils.d.cts +0 -133
  293. package/dist/testUtils.js +0 -359
  294. package/dist/throttle.cjs +0 -282
  295. package/dist/throttle.d.cts +0 -98
  296. package/dist/throttle.js +0 -38
  297. package/dist/time.cjs +0 -152
  298. package/dist/time.d.cts +0 -25
  299. package/dist/time.js +0 -38
  300. package/dist/timers.cjs +0 -194
  301. package/dist/timers.d.ts +0 -121
  302. package/dist/timers.js +0 -156
  303. package/dist/tsResult.cjs +0 -226
  304. package/dist/tsResult.d.ts +0 -114
  305. package/dist/tsResult.js +0 -180
  306. package/dist/typeGuards.cjs +0 -70
  307. package/dist/typeGuards.d.ts +0 -111
  308. package/dist/typeGuards.js +0 -18
  309. package/dist/typeUtils.cjs +0 -18
  310. package/dist/typeUtils.d.cts +0 -61
  311. package/dist/typeUtils.js +0 -0
  312. package/dist/typedStrings.cjs +0 -90
  313. package/dist/typedStrings.d.ts +0 -163
  314. package/dist/typedStrings.js +0 -57
  315. package/dist/typingFnUtils.cjs +0 -96
  316. package/dist/typingFnUtils.d.ts +0 -100
  317. package/dist/typingFnUtils.js +0 -30
  318. package/dist/typingTestUtils.cjs +0 -52
  319. package/dist/typingTestUtils.d.ts +0 -79
  320. package/dist/typingTestUtils.js +0 -27
  321. package/dist/typingUtils.cjs +0 -18
  322. package/dist/typingUtils.d.cts +0 -35
  323. package/dist/typingUtils.d.ts +0 -35
  324. package/dist/typingUtils.js +0 -0
  325. package/dist/yamlStringify.cjs +0 -423
  326. package/dist/yamlStringify.d.cts +0 -10
  327. package/dist/yamlStringify.d.ts +0 -10
  328. package/dist/yamlStringify.js +0 -9
package/dist/hash.mjs ADDED
@@ -0,0 +1,28 @@
1
+ //#region src/hash.ts
2
+ /**
3
+ * @param str - The string to hash.
4
+ * @returns The hash of the string.
5
+ */
6
+ function murmur2(str) {
7
+ let h = 0;
8
+ let k, i = 0, len = str.length;
9
+ for (; len >= 4; ++i, len -= 4) {
10
+ k = str.charCodeAt(i) & 255 | (str.charCodeAt(++i) & 255) << 8 | (str.charCodeAt(++i) & 255) << 16 | (str.charCodeAt(++i) & 255) << 24;
11
+ k = (k & 65535) * 1540483477 + ((k >>> 16) * 59797 << 16);
12
+ k ^= k >>> 24;
13
+ h = (k & 65535) * 1540483477 + ((k >>> 16) * 59797 << 16) ^ (h & 65535) * 1540483477 + ((h >>> 16) * 59797 << 16);
14
+ }
15
+ switch (len) {
16
+ case 3: h ^= (str.charCodeAt(i + 2) & 255) << 16;
17
+ case 2: h ^= (str.charCodeAt(i + 1) & 255) << 8;
18
+ case 1:
19
+ h ^= str.charCodeAt(i) & 255;
20
+ h = (h & 65535) * 1540483477 + ((h >>> 16) * 59797 << 16);
21
+ }
22
+ h ^= h >>> 13;
23
+ h = (h & 65535) * 1540483477 + ((h >>> 16) * 59797 << 16);
24
+ return ((h ^ h >>> 15) >>> 0).toString(36);
25
+ }
26
+
27
+ //#endregion
28
+ export { murmur2 };
@@ -0,0 +1,17 @@
1
+ //#region src/interpolate.d.ts
2
+ type Interval = [number, number];
3
+ declare function cyclicLerp(input: number, [inStart, inEnd]: Interval, [outStart, outEnd]: Interval): number;
4
+ type InterpolateArgs = {
5
+ input: number;
6
+ in: number[];
7
+ out: number[];
8
+ clamp?: boolean | 'start' | 'end';
9
+ };
10
+ declare function interpolate({
11
+ input,
12
+ in: inputRange,
13
+ out,
14
+ clamp
15
+ }: InterpolateArgs): number;
16
+ //#endregion
17
+ export { cyclicLerp, interpolate };
@@ -0,0 +1,28 @@
1
+ import { i as invariant } from "./assertions-qMxfVhSu.mjs";
2
+ import { a as clampRange, i as clampMin, r as clampMax } from "./mathUtils-BDP1lM_z.mjs";
3
+
4
+ //#region src/interpolate.ts
5
+ function mod(n, m) {
6
+ return (n % m + m) % m;
7
+ }
8
+ function cyclicLerp(input, [inStart, inEnd], [outStart, outEnd]) {
9
+ return mod((input - inStart) / (inEnd - inStart), 1) * (outEnd - outStart) + outStart;
10
+ }
11
+ function findRange(input, inputRange) {
12
+ for (let i = 1; i < inputRange.length - 1; i++) if (inputRange[i] >= input) return i - 1;
13
+ return inputRange.length - 2;
14
+ }
15
+ function interpolate({ input, in: inputRange, out, clamp = true }) {
16
+ invariant(inputRange.length === out.length, "Ranges must have the same length");
17
+ const range = findRange(input, inputRange);
18
+ const inStart = inputRange[range];
19
+ const inEnd = inputRange[range + 1];
20
+ const outStart = out[range];
21
+ const outEnd = out[range + 1];
22
+ const interpolatedValue = (input - inStart) / (inEnd - inStart) * (outEnd - outStart) + outStart;
23
+ const outputIsAscending = outStart < outEnd;
24
+ return clamp === "start" ? outputIsAscending ? clampMin(interpolatedValue, outStart) : clampMax(interpolatedValue, outStart) : clamp === "end" ? outputIsAscending ? clampMax(interpolatedValue, outEnd) : clampMin(interpolatedValue, outEnd) : clamp ? clampRange(interpolatedValue, outStart, outEnd) : interpolatedValue;
25
+ }
26
+
27
+ //#endregion
28
+ export { cyclicLerp, interpolate };
@@ -1,10 +1,11 @@
1
+ //#region src/iteratorUtils.d.ts
1
2
  declare function enumerate<T>(iter: Iterable<T>, start?: number): Generator<[number, T]>;
2
3
  declare function withIsLast<T>(array: T[]): Generator<[isLast: boolean, item: T, index: number]>;
3
4
  declare function withPrevious<T>(iter: Iterable<T>): Generator<{
4
- prev: T | undefined;
5
- current: T;
5
+ prev: T | undefined;
6
+ current: T;
6
7
  }>;
7
8
  declare function range(start: number, end: number, step?: number): Generator<number>;
8
9
  declare function rangeArray(start: number, end: number, step?: number): number[];
9
-
10
- export { enumerate, range, rangeArray, withIsLast, withPrevious };
10
+ //#endregion
11
+ export { enumerate, range, rangeArray, withIsLast, withPrevious };
@@ -0,0 +1,39 @@
1
+ //#region src/iteratorUtils.ts
2
+ function* enumerate(iter, start = 0) {
3
+ let index = start;
4
+ for (const item of iter) {
5
+ yield [index, item];
6
+ index++;
7
+ }
8
+ }
9
+ function* withIsLast(array) {
10
+ let index = 0;
11
+ for (const item of array) {
12
+ yield [
13
+ index === array.length - 1,
14
+ item,
15
+ index
16
+ ];
17
+ index++;
18
+ }
19
+ }
20
+ function* withPrevious(iter) {
21
+ let prev = void 0;
22
+ for (const current of iter) {
23
+ yield {
24
+ prev,
25
+ current
26
+ };
27
+ prev = current;
28
+ }
29
+ }
30
+ function* range(start, end, step = 1) {
31
+ if (start > end) for (let i = start; i >= end; i -= step) yield i;
32
+ else for (let i = start; i <= end; i += step) yield i;
33
+ }
34
+ function rangeArray(start, end, step = 1) {
35
+ return [...range(start, end, step)];
36
+ }
37
+
38
+ //#endregion
39
+ export { enumerate, range, rangeArray, withIsLast, withPrevious };
@@ -0,0 +1,12 @@
1
+ //#region src/keepPrevIfUnchanged.d.ts
2
+ declare function keepPrevIfUnchanged<T>({
3
+ prev,
4
+ newValue,
5
+ equalityFn
6
+ }: {
7
+ prev: T;
8
+ newValue: T;
9
+ equalityFn?: (foo: any, bar: any) => boolean;
10
+ }): T;
11
+ //#endregion
12
+ export { keepPrevIfUnchanged };
@@ -0,0 +1,9 @@
1
+ import { t as deepEqual } from "./deepEqual-C7EZEixx.mjs";
2
+
3
+ //#region src/keepPrevIfUnchanged.ts
4
+ function keepPrevIfUnchanged({ prev, newValue, equalityFn = deepEqual }) {
5
+ return equalityFn(prev, newValue) ? prev : newValue;
6
+ }
7
+
8
+ //#endregion
9
+ export { keepPrevIfUnchanged };
@@ -0,0 +1,76 @@
1
+ //#region src/keyedMap.d.ts
2
+ /**
3
+ * A Map implementation that uses a custom key function to determine key equality.
4
+ * Keys with the same computed internal key are considered equal.
5
+ *
6
+ * @example
7
+ * const map = new KeyedMap<{ x: number; y: number }, string, string>(
8
+ * (key) => `${key.x},${key.y}`,
9
+ * );
10
+ * map.set({ x: 1, y: 2 }, 'point A');
11
+ * map.get({ x: 1, y: 2 }); // 'point A' (different object, same computed key)
12
+ *
13
+ * @template K - The type of the external key
14
+ * @template V - The type of the value
15
+ * @template InternalKey - The type of the internal key used for comparison
16
+ */
17
+ declare class KeyedMap<K, V, InternalKey = string> {
18
+ private map;
19
+ private getKey;
20
+ /**
21
+ * @param getKey - Function to compute an internal key from the external key
22
+ * @param entries - Optional initial entries to add to the map
23
+ */
24
+ constructor(getKey: (key: K) => InternalKey, entries?: Iterable<[K, V]>);
25
+ /** The number of entries in the map */
26
+ get size(): number;
27
+ /** Sets a value for the given key. If the key exists, replaces both key and value. */
28
+ set(key: K, value: V): this;
29
+ /** Sets multiple entries at once. */
30
+ setMultiple(entries: Iterable<[K, V]>): this;
31
+ /** Gets the value for the given key, or undefined if not found. */
32
+ get(key: K): V | undefined;
33
+ /** Checks if the map contains the given key. */
34
+ has(key: K): boolean;
35
+ /** Removes the entry for the given key. Returns true if the entry was removed. */
36
+ delete(key: K): boolean;
37
+ /** Removes multiple entries. Returns the number of entries removed. */
38
+ deleteMultiple(keys: Iterable<K>): number;
39
+ /** Removes all entries from the map. */
40
+ clear(): void;
41
+ /** Executes a callback for each entry in the map. */
42
+ forEach(callback: (value: V, key: K, map: KeyedMap<K, V, InternalKey>) => void, thisArg?: unknown): void;
43
+ /** Finds the first entry matching the predicate. */
44
+ find(predicate: (value: V, key: K) => boolean): {
45
+ key: K;
46
+ value: V;
47
+ } | undefined;
48
+ /** Gets the value for the given key, or throws if not found. */
49
+ getOrThrow(key: K): V;
50
+ /** Gets the value for the given key, or inserts and returns the fallback value. */
51
+ getOrInsert(key: K, fallback: () => V): V;
52
+ /** Returns values that match the predicate. */
53
+ toFilteredValues(predicate: (value: V, key: K) => boolean): V[];
54
+ /** Returns all values as an array. */
55
+ toValues(): V[];
56
+ /** Returns all keys as an array. */
57
+ toKeys(): K[];
58
+ keys(): IterableIterator<K>;
59
+ values(): IterableIterator<V>;
60
+ entries(): IterableIterator<[K, V]>;
61
+ [Symbol.iterator](): IterableIterator<[K, V]>;
62
+ }
63
+ /**
64
+ * A Map that compares keys by value instead of reference.
65
+ * Uses `getCompositeKey` to generate a stable string key for any value.
66
+ *
67
+ * @example
68
+ * const map = new CompositeKeyMap<{ x: number; y: number }, string>();
69
+ * map.set({ x: 1, y: 2 }, 'point A');
70
+ * map.get({ x: 1, y: 2 }); // 'point A' (different object, same value)
71
+ */
72
+ declare class CompositeKeyMap<K, V> extends KeyedMap<K, V, string> {
73
+ constructor(entries?: Iterable<[K, V]>);
74
+ }
75
+ //#endregion
76
+ export { CompositeKeyMap, KeyedMap };
@@ -0,0 +1,139 @@
1
+ import { getCompositeKey } from "./getCompositeKey.mjs";
2
+
3
+ //#region src/keyedMap.ts
4
+ /**
5
+ * A Map implementation that uses a custom key function to determine key equality.
6
+ * Keys with the same computed internal key are considered equal.
7
+ *
8
+ * @example
9
+ * const map = new KeyedMap<{ x: number; y: number }, string, string>(
10
+ * (key) => `${key.x},${key.y}`,
11
+ * );
12
+ * map.set({ x: 1, y: 2 }, 'point A');
13
+ * map.get({ x: 1, y: 2 }); // 'point A' (different object, same computed key)
14
+ *
15
+ * @template K - The type of the external key
16
+ * @template V - The type of the value
17
+ * @template InternalKey - The type of the internal key used for comparison
18
+ */
19
+ var KeyedMap = class {
20
+ map;
21
+ getKey;
22
+ /**
23
+ * @param getKey - Function to compute an internal key from the external key
24
+ * @param entries - Optional initial entries to add to the map
25
+ */
26
+ constructor(getKey, entries) {
27
+ this.getKey = getKey;
28
+ this.map = /* @__PURE__ */ new Map();
29
+ if (entries) for (const [key, value] of entries) this.set(key, value);
30
+ }
31
+ /** The number of entries in the map */
32
+ get size() {
33
+ return this.map.size;
34
+ }
35
+ /** Sets a value for the given key. If the key exists, replaces both key and value. */
36
+ set(key, value) {
37
+ const internalKey = this.getKey(key);
38
+ this.map.set(internalKey, {
39
+ key,
40
+ value
41
+ });
42
+ return this;
43
+ }
44
+ /** Sets multiple entries at once. */
45
+ setMultiple(entries) {
46
+ for (const [key, value] of entries) this.set(key, value);
47
+ return this;
48
+ }
49
+ /** Gets the value for the given key, or undefined if not found. */
50
+ get(key) {
51
+ const internalKey = this.getKey(key);
52
+ return this.map.get(internalKey)?.value;
53
+ }
54
+ /** Checks if the map contains the given key. */
55
+ has(key) {
56
+ const internalKey = this.getKey(key);
57
+ return this.map.has(internalKey);
58
+ }
59
+ /** Removes the entry for the given key. Returns true if the entry was removed. */
60
+ delete(key) {
61
+ const internalKey = this.getKey(key);
62
+ return this.map.delete(internalKey);
63
+ }
64
+ /** Removes multiple entries. Returns the number of entries removed. */
65
+ deleteMultiple(keys) {
66
+ let count = 0;
67
+ for (const key of keys) if (this.delete(key)) count++;
68
+ return count;
69
+ }
70
+ /** Removes all entries from the map. */
71
+ clear() {
72
+ this.map.clear();
73
+ }
74
+ /** Executes a callback for each entry in the map. */
75
+ forEach(callback, thisArg) {
76
+ for (const { key, value } of this.map.values()) callback.call(thisArg, value, key, this);
77
+ }
78
+ /** Finds the first entry matching the predicate. */
79
+ find(predicate) {
80
+ for (const { key, value } of this.map.values()) if (predicate(value, key)) return {
81
+ key,
82
+ value
83
+ };
84
+ }
85
+ /** Gets the value for the given key, or throws if not found. */
86
+ getOrThrow(key) {
87
+ const value = this.get(key);
88
+ if (value === void 0 && !this.has(key)) throw new Error(`Key not found in KeyedMap`);
89
+ return value;
90
+ }
91
+ /** Gets the value for the given key, or inserts and returns the fallback value. */
92
+ getOrInsert(key, fallback) {
93
+ if (!this.has(key)) this.set(key, fallback());
94
+ return this.getOrThrow(key);
95
+ }
96
+ /** Returns values that match the predicate. */
97
+ toFilteredValues(predicate) {
98
+ const values = [];
99
+ for (const { key, value } of this.map.values()) if (predicate(value, key)) values.push(value);
100
+ return values;
101
+ }
102
+ /** Returns all values as an array. */
103
+ toValues() {
104
+ return [...this.values()];
105
+ }
106
+ /** Returns all keys as an array. */
107
+ toKeys() {
108
+ return [...this.keys()];
109
+ }
110
+ *keys() {
111
+ for (const { key } of this.map.values()) yield key;
112
+ }
113
+ *values() {
114
+ for (const { value } of this.map.values()) yield value;
115
+ }
116
+ *entries() {
117
+ for (const { key, value } of this.map.values()) yield [key, value];
118
+ }
119
+ [Symbol.iterator]() {
120
+ return this.entries();
121
+ }
122
+ };
123
+ /**
124
+ * A Map that compares keys by value instead of reference.
125
+ * Uses `getCompositeKey` to generate a stable string key for any value.
126
+ *
127
+ * @example
128
+ * const map = new CompositeKeyMap<{ x: number; y: number }, string>();
129
+ * map.set({ x: 1, y: 2 }, 'point A');
130
+ * map.get({ x: 1, y: 2 }); // 'point A' (different object, same value)
131
+ */
132
+ var CompositeKeyMap = class extends KeyedMap {
133
+ constructor(entries) {
134
+ super(getCompositeKey, entries);
135
+ }
136
+ };
137
+
138
+ //#endregion
139
+ export { CompositeKeyMap, KeyedMap };
@@ -0,0 +1,77 @@
1
+ //#region src/keyedSet.d.ts
2
+ /**
3
+ * A Set implementation that uses a custom key function to determine uniqueness.
4
+ * Items with the same key are considered equal, and adding a duplicate replaces
5
+ * the existing item.
6
+ *
7
+ * @example
8
+ * const set = new KeyedSet<{ id: number; name: string }, number>(
9
+ * (item) => item.id,
10
+ * );
11
+ * set.add({ id: 1, name: 'one' });
12
+ * set.add({ id: 1, name: 'replaced' }); // replaces previous item
13
+ * set.getByKey(1); // { id: 1, name: 'replaced' }
14
+ *
15
+ * @template T - The type of items stored in the set
16
+ * @template K - The type of the key extracted from items
17
+ */
18
+ declare class KeyedSet<T, K = string> {
19
+ private map;
20
+ private getKey;
21
+ /**
22
+ * @param getKey - Function to extract a unique key from each item
23
+ * @param iterable - Optional initial items to add to the set
24
+ */
25
+ constructor(getKey: (item: T) => K, iterable?: Iterable<T>);
26
+ /** The number of items in the set */
27
+ get size(): number;
28
+ /**
29
+ * Adds an item to the set. If an item with the same key exists, it will be
30
+ * replaced.
31
+ */
32
+ add(item: T): this;
33
+ /** Adds multiple items to the set. */
34
+ addMultiple(items: Iterable<T>): this;
35
+ /** Checks if an item with the same key exists in the set. */
36
+ has(item: T): boolean;
37
+ /** Checks if an item with the given key exists in the set. */
38
+ hasKey(key: K): boolean;
39
+ /** Gets an item by its key, or undefined if not found. */
40
+ getByKey(key: K): T | undefined;
41
+ /**
42
+ * Removes an item from the set by computing its key. Returns true if the item
43
+ * was removed.
44
+ */
45
+ delete(item: T): boolean;
46
+ /** Removes an item by its key. Returns true if the item was removed. */
47
+ deleteByKey(key: K): boolean;
48
+ /** Removes multiple items from the set. Returns the number of items removed. */
49
+ deleteMultiple(items: Iterable<T>): number;
50
+ /** Removes multiple items by their keys. Returns the number of items removed. */
51
+ deleteMultipleByKeys(keys: Iterable<K>): number;
52
+ /** Removes all items from the set. */
53
+ clear(): void;
54
+ /** Executes a callback for each item in the set. */
55
+ forEach(callback: (value: T, value2: T, set: KeyedSet<T, K>) => void, thisArg?: unknown): void;
56
+ values(): IterableIterator<T>;
57
+ keys(): IterableIterator<T>;
58
+ entries(): IterableIterator<[T, T]>;
59
+ [Symbol.iterator](): IterableIterator<T>;
60
+ /** Returns all items as an array. */
61
+ toArray(): T[];
62
+ }
63
+ /**
64
+ * A Set that compares items by value instead of reference. Uses
65
+ * `getCompositeKey` to generate a stable string key for any value.
66
+ *
67
+ * @example
68
+ * const set = new ValueSet<{ x: number; y: number }>();
69
+ * set.add({ x: 1, y: 2 });
70
+ * set.add({ x: 1, y: 2 }); // ignored, same value already exists
71
+ * set.size; // 1
72
+ */
73
+ declare class CompositeKeySet<T> extends KeyedSet<T, string> {
74
+ constructor(iterable?: Iterable<T>);
75
+ }
76
+ //#endregion
77
+ export { CompositeKeySet, KeyedSet };
@@ -0,0 +1,129 @@
1
+ import { getCompositeKey } from "./getCompositeKey.mjs";
2
+
3
+ //#region src/keyedSet.ts
4
+ /**
5
+ * A Set implementation that uses a custom key function to determine uniqueness.
6
+ * Items with the same key are considered equal, and adding a duplicate replaces
7
+ * the existing item.
8
+ *
9
+ * @example
10
+ * const set = new KeyedSet<{ id: number; name: string }, number>(
11
+ * (item) => item.id,
12
+ * );
13
+ * set.add({ id: 1, name: 'one' });
14
+ * set.add({ id: 1, name: 'replaced' }); // replaces previous item
15
+ * set.getByKey(1); // { id: 1, name: 'replaced' }
16
+ *
17
+ * @template T - The type of items stored in the set
18
+ * @template K - The type of the key extracted from items
19
+ */
20
+ var KeyedSet = class {
21
+ map;
22
+ getKey;
23
+ /**
24
+ * @param getKey - Function to extract a unique key from each item
25
+ * @param iterable - Optional initial items to add to the set
26
+ */
27
+ constructor(getKey, iterable) {
28
+ this.getKey = getKey;
29
+ this.map = /* @__PURE__ */ new Map();
30
+ if (iterable) for (const item of iterable) this.add(item);
31
+ }
32
+ /** The number of items in the set */
33
+ get size() {
34
+ return this.map.size;
35
+ }
36
+ /**
37
+ * Adds an item to the set. If an item with the same key exists, it will be
38
+ * replaced.
39
+ */
40
+ add(item) {
41
+ const key = this.getKey(item);
42
+ this.map.set(key, item);
43
+ return this;
44
+ }
45
+ /** Adds multiple items to the set. */
46
+ addMultiple(items) {
47
+ for (const item of items) this.add(item);
48
+ return this;
49
+ }
50
+ /** Checks if an item with the same key exists in the set. */
51
+ has(item) {
52
+ const key = this.getKey(item);
53
+ return this.map.has(key);
54
+ }
55
+ /** Checks if an item with the given key exists in the set. */
56
+ hasKey(key) {
57
+ return this.map.has(key);
58
+ }
59
+ /** Gets an item by its key, or undefined if not found. */
60
+ getByKey(key) {
61
+ return this.map.get(key);
62
+ }
63
+ /**
64
+ * Removes an item from the set by computing its key. Returns true if the item
65
+ * was removed.
66
+ */
67
+ delete(item) {
68
+ const key = this.getKey(item);
69
+ return this.map.delete(key);
70
+ }
71
+ /** Removes an item by its key. Returns true if the item was removed. */
72
+ deleteByKey(key) {
73
+ return this.map.delete(key);
74
+ }
75
+ /** Removes multiple items from the set. Returns the number of items removed. */
76
+ deleteMultiple(items) {
77
+ let count = 0;
78
+ for (const item of items) if (this.delete(item)) count++;
79
+ return count;
80
+ }
81
+ /** Removes multiple items by their keys. Returns the number of items removed. */
82
+ deleteMultipleByKeys(keys) {
83
+ let count = 0;
84
+ for (const key of keys) if (this.deleteByKey(key)) count++;
85
+ return count;
86
+ }
87
+ /** Removes all items from the set. */
88
+ clear() {
89
+ this.map.clear();
90
+ }
91
+ /** Executes a callback for each item in the set. */
92
+ forEach(callback, thisArg) {
93
+ for (const value of this.map.values()) callback.call(thisArg, value, value, this);
94
+ }
95
+ *values() {
96
+ yield* this.map.values();
97
+ }
98
+ *keys() {
99
+ yield* this.map.values();
100
+ }
101
+ *entries() {
102
+ for (const value of this.map.values()) yield [value, value];
103
+ }
104
+ [Symbol.iterator]() {
105
+ return this.values();
106
+ }
107
+ /** Returns all items as an array. */
108
+ toArray() {
109
+ return [...this.map.values()];
110
+ }
111
+ };
112
+ /**
113
+ * A Set that compares items by value instead of reference. Uses
114
+ * `getCompositeKey` to generate a stable string key for any value.
115
+ *
116
+ * @example
117
+ * const set = new ValueSet<{ x: number; y: number }>();
118
+ * set.add({ x: 1, y: 2 });
119
+ * set.add({ x: 1, y: 2 }); // ignored, same value already exists
120
+ * set.size; // 1
121
+ */
122
+ var CompositeKeySet = class extends KeyedSet {
123
+ constructor(iterable) {
124
+ super(getCompositeKey, iterable);
125
+ }
126
+ };
127
+
128
+ //#endregion
129
+ export { CompositeKeySet, KeyedSet };
@@ -1,5 +1,6 @@
1
+ //#region src/levenshtein.d.ts
1
2
  declare function levenshteinDistance(a: string, b: string): number;
2
3
  declare function getClosestString(str: string, arr: readonly string[], maxDistance?: number): string | undefined;
3
4
  declare function getClosestStringsUpToDist(str: string, arr: readonly string[], maxDistance?: number): string[];
4
-
5
- export { getClosestString, getClosestStringsUpToDist, levenshteinDistance };
5
+ //#endregion
6
+ export { getClosestString, getClosestStringsUpToDist, levenshteinDistance };