@vielzeug/arsenal 1.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 (772) hide show
  1. package/README.md +104 -0
  2. package/dist/_common/_abortable.d.ts +5 -0
  3. package/dist/_common/_abortable.d.ts.map +1 -0
  4. package/dist/_common/_lruMap.cjs +2 -0
  5. package/dist/_common/_lruMap.cjs.map +1 -0
  6. package/dist/_common/_lruMap.d.ts +20 -0
  7. package/dist/_common/_lruMap.d.ts.map +1 -0
  8. package/dist/_common/_lruMap.js +18 -0
  9. package/dist/_common/_lruMap.js.map +1 -0
  10. package/dist/_common/_secureRandomIndex.cjs +2 -0
  11. package/dist/_common/_secureRandomIndex.cjs.map +1 -0
  12. package/dist/_common/_secureRandomIndex.d.ts +2 -0
  13. package/dist/_common/_secureRandomIndex.d.ts.map +1 -0
  14. package/dist/_common/_secureRandomIndex.js +9 -0
  15. package/dist/_common/_secureRandomIndex.js.map +1 -0
  16. package/dist/_common/_selectorSet.cjs +2 -0
  17. package/dist/_common/_selectorSet.cjs.map +1 -0
  18. package/dist/_common/_selectorSet.d.ts +2 -0
  19. package/dist/_common/_selectorSet.d.ts.map +1 -0
  20. package/dist/_common/_selectorSet.js +16 -0
  21. package/dist/_common/_selectorSet.js.map +1 -0
  22. package/dist/_common/unsafePaths.cjs +2 -0
  23. package/dist/_common/unsafePaths.cjs.map +1 -0
  24. package/dist/_common/unsafePaths.d.ts +25 -0
  25. package/dist/_common/unsafePaths.d.ts.map +1 -0
  26. package/dist/_common/unsafePaths.js +13 -0
  27. package/dist/_common/unsafePaths.js.map +1 -0
  28. package/dist/_dev.cjs +2 -0
  29. package/dist/_dev.cjs.map +1 -0
  30. package/dist/_dev.d.ts +2 -0
  31. package/dist/_dev.d.ts.map +1 -0
  32. package/dist/_dev.js +9 -0
  33. package/dist/_dev.js.map +1 -0
  34. package/dist/array/chunk.cjs +2 -0
  35. package/dist/array/chunk.cjs.map +1 -0
  36. package/dist/array/chunk.d.ts +19 -0
  37. package/dist/array/chunk.d.ts.map +1 -0
  38. package/dist/array/chunk.js +12 -0
  39. package/dist/array/chunk.js.map +1 -0
  40. package/dist/array/compact.cjs +2 -0
  41. package/dist/array/compact.cjs.map +1 -0
  42. package/dist/array/compact.d.ts +7 -0
  43. package/dist/array/compact.d.ts.map +1 -0
  44. package/dist/array/compact.js +8 -0
  45. package/dist/array/compact.js.map +1 -0
  46. package/dist/array/compare.cjs +2 -0
  47. package/dist/array/compare.cjs.map +1 -0
  48. package/dist/array/compare.d.ts +31 -0
  49. package/dist/array/compare.d.ts.map +1 -0
  50. package/dist/array/compare.js +20 -0
  51. package/dist/array/compare.js.map +1 -0
  52. package/dist/array/compareBy.cjs +2 -0
  53. package/dist/array/compareBy.cjs.map +1 -0
  54. package/dist/array/compareBy.d.ts +24 -0
  55. package/dist/array/compareBy.d.ts.map +1 -0
  56. package/dist/array/compareBy.js +16 -0
  57. package/dist/array/compareBy.js.map +1 -0
  58. package/dist/array/contains.cjs +2 -0
  59. package/dist/array/contains.cjs.map +1 -0
  60. package/dist/array/contains.d.ts +17 -0
  61. package/dist/array/contains.d.ts.map +1 -0
  62. package/dist/array/contains.js +9 -0
  63. package/dist/array/contains.js.map +1 -0
  64. package/dist/array/countBy.cjs +2 -0
  65. package/dist/array/countBy.cjs.map +1 -0
  66. package/dist/array/countBy.d.ts +8 -0
  67. package/dist/array/countBy.d.ts.map +1 -0
  68. package/dist/array/countBy.js +14 -0
  69. package/dist/array/countBy.js.map +1 -0
  70. package/dist/array/difference.cjs +2 -0
  71. package/dist/array/difference.cjs.map +1 -0
  72. package/dist/array/difference.d.ts +6 -0
  73. package/dist/array/difference.d.ts.map +1 -0
  74. package/dist/array/difference.js +14 -0
  75. package/dist/array/difference.js.map +1 -0
  76. package/dist/array/drop.cjs +2 -0
  77. package/dist/array/drop.cjs.map +1 -0
  78. package/dist/array/drop.d.ts +5 -0
  79. package/dist/array/drop.d.ts.map +1 -0
  80. package/dist/array/drop.js +9 -0
  81. package/dist/array/drop.js.map +1 -0
  82. package/dist/array/dropLast.cjs +2 -0
  83. package/dist/array/dropLast.cjs.map +1 -0
  84. package/dist/array/dropLast.d.ts +5 -0
  85. package/dist/array/dropLast.d.ts.map +1 -0
  86. package/dist/array/dropLast.js +9 -0
  87. package/dist/array/dropLast.js.map +1 -0
  88. package/dist/array/filterMap.cjs +2 -0
  89. package/dist/array/filterMap.cjs.map +1 -0
  90. package/dist/array/filterMap.d.ts +5 -0
  91. package/dist/array/filterMap.d.ts.map +1 -0
  92. package/dist/array/filterMap.js +13 -0
  93. package/dist/array/filterMap.js.map +1 -0
  94. package/dist/array/first.cjs +2 -0
  95. package/dist/array/first.cjs.map +1 -0
  96. package/dist/array/first.d.ts +5 -0
  97. package/dist/array/first.d.ts.map +1 -0
  98. package/dist/array/first.js +8 -0
  99. package/dist/array/first.js.map +1 -0
  100. package/dist/array/flatten.cjs +2 -0
  101. package/dist/array/flatten.cjs.map +1 -0
  102. package/dist/array/flatten.d.ts +5 -0
  103. package/dist/array/flatten.d.ts.map +1 -0
  104. package/dist/array/flatten.js +11 -0
  105. package/dist/array/flatten.js.map +1 -0
  106. package/dist/array/groupBy.cjs +2 -0
  107. package/dist/array/groupBy.cjs.map +1 -0
  108. package/dist/array/groupBy.d.ts +7 -0
  109. package/dist/array/groupBy.d.ts.map +1 -0
  110. package/dist/array/groupBy.js +14 -0
  111. package/dist/array/groupBy.js.map +1 -0
  112. package/dist/array/index.d.ts +29 -0
  113. package/dist/array/index.d.ts.map +1 -0
  114. package/dist/array/indexBy.cjs +2 -0
  115. package/dist/array/indexBy.cjs.map +1 -0
  116. package/dist/array/indexBy.d.ts +7 -0
  117. package/dist/array/indexBy.d.ts.map +1 -0
  118. package/dist/array/indexBy.js +14 -0
  119. package/dist/array/indexBy.js.map +1 -0
  120. package/dist/array/intersection.cjs +2 -0
  121. package/dist/array/intersection.cjs.map +1 -0
  122. package/dist/array/intersection.d.ts +6 -0
  123. package/dist/array/intersection.d.ts.map +1 -0
  124. package/dist/array/intersection.js +14 -0
  125. package/dist/array/intersection.js.map +1 -0
  126. package/dist/array/last.cjs +2 -0
  127. package/dist/array/last.cjs.map +1 -0
  128. package/dist/array/last.d.ts +5 -0
  129. package/dist/array/last.d.ts.map +1 -0
  130. package/dist/array/last.js +8 -0
  131. package/dist/array/last.js.map +1 -0
  132. package/dist/array/partition.cjs +2 -0
  133. package/dist/array/partition.cjs.map +1 -0
  134. package/dist/array/partition.d.ts +5 -0
  135. package/dist/array/partition.d.ts.map +1 -0
  136. package/dist/array/partition.js +10 -0
  137. package/dist/array/partition.js.map +1 -0
  138. package/dist/array/replace.cjs +2 -0
  139. package/dist/array/replace.cjs.map +1 -0
  140. package/dist/array/replace.d.ts +18 -0
  141. package/dist/array/replace.d.ts.map +1 -0
  142. package/dist/array/replace.js +13 -0
  143. package/dist/array/replace.js.map +1 -0
  144. package/dist/array/rotate.cjs +2 -0
  145. package/dist/array/rotate.cjs.map +1 -0
  146. package/dist/array/rotate.d.ts +20 -0
  147. package/dist/array/rotate.d.ts.map +1 -0
  148. package/dist/array/rotate.js +10 -0
  149. package/dist/array/rotate.js.map +1 -0
  150. package/dist/array/search.cjs +2 -0
  151. package/dist/array/search.cjs.map +1 -0
  152. package/dist/array/search.d.ts +85 -0
  153. package/dist/array/search.d.ts.map +1 -0
  154. package/dist/array/search.js +47 -0
  155. package/dist/array/search.js.map +1 -0
  156. package/dist/array/sort.cjs +2 -0
  157. package/dist/array/sort.cjs.map +1 -0
  158. package/dist/array/sort.d.ts +26 -0
  159. package/dist/array/sort.d.ts.map +1 -0
  160. package/dist/array/sort.js +16 -0
  161. package/dist/array/sort.js.map +1 -0
  162. package/dist/array/take.cjs +2 -0
  163. package/dist/array/take.cjs.map +1 -0
  164. package/dist/array/take.d.ts +5 -0
  165. package/dist/array/take.d.ts.map +1 -0
  166. package/dist/array/take.js +9 -0
  167. package/dist/array/take.js.map +1 -0
  168. package/dist/array/takeLast.cjs +2 -0
  169. package/dist/array/takeLast.cjs.map +1 -0
  170. package/dist/array/takeLast.d.ts +5 -0
  171. package/dist/array/takeLast.d.ts.map +1 -0
  172. package/dist/array/takeLast.js +9 -0
  173. package/dist/array/takeLast.js.map +1 -0
  174. package/dist/array/toggle.cjs +2 -0
  175. package/dist/array/toggle.cjs.map +1 -0
  176. package/dist/array/toggle.d.ts +29 -0
  177. package/dist/array/toggle.d.ts.map +1 -0
  178. package/dist/array/toggle.js +9 -0
  179. package/dist/array/toggle.js.map +1 -0
  180. package/dist/array/union.cjs +2 -0
  181. package/dist/array/union.cjs.map +1 -0
  182. package/dist/array/union.d.ts +6 -0
  183. package/dist/array/union.d.ts.map +1 -0
  184. package/dist/array/union.js +9 -0
  185. package/dist/array/union.js.map +1 -0
  186. package/dist/array/uniq.cjs +2 -0
  187. package/dist/array/uniq.cjs.map +1 -0
  188. package/dist/array/uniq.d.ts +18 -0
  189. package/dist/array/uniq.d.ts.map +1 -0
  190. package/dist/array/uniq.js +9 -0
  191. package/dist/array/uniq.js.map +1 -0
  192. package/dist/array/unzip.cjs +2 -0
  193. package/dist/array/unzip.cjs.map +1 -0
  194. package/dist/array/unzip.d.ts +7 -0
  195. package/dist/array/unzip.d.ts.map +1 -0
  196. package/dist/array/unzip.js +11 -0
  197. package/dist/array/unzip.js.map +1 -0
  198. package/dist/array/zip.cjs +2 -0
  199. package/dist/array/zip.cjs.map +1 -0
  200. package/dist/array/zip.d.ts +7 -0
  201. package/dist/array/zip.d.ts.map +1 -0
  202. package/dist/array/zip.js +11 -0
  203. package/dist/array/zip.js.map +1 -0
  204. package/dist/arsenal.cjs +2 -0
  205. package/dist/arsenal.cjs.map +1 -0
  206. package/dist/arsenal.iife.js +2 -0
  207. package/dist/arsenal.iife.js.map +1 -0
  208. package/dist/arsenal.js +2 -0
  209. package/dist/arsenal.js.map +1 -0
  210. package/dist/async/abortError.cjs +2 -0
  211. package/dist/async/abortError.cjs.map +1 -0
  212. package/dist/async/abortError.d.ts +23 -0
  213. package/dist/async/abortError.d.ts.map +1 -0
  214. package/dist/async/abortError.js +8 -0
  215. package/dist/async/abortError.js.map +1 -0
  216. package/dist/async/attempt.cjs +2 -0
  217. package/dist/async/attempt.cjs.map +1 -0
  218. package/dist/async/attempt.d.ts +58 -0
  219. package/dist/async/attempt.d.ts.map +1 -0
  220. package/dist/async/attempt.js +31 -0
  221. package/dist/async/attempt.js.map +1 -0
  222. package/dist/async/backoff.cjs +2 -0
  223. package/dist/async/backoff.cjs.map +1 -0
  224. package/dist/async/backoff.d.ts +20 -0
  225. package/dist/async/backoff.d.ts.map +1 -0
  226. package/dist/async/backoff.js +9 -0
  227. package/dist/async/backoff.js.map +1 -0
  228. package/dist/async/index.d.ts +9 -0
  229. package/dist/async/index.d.ts.map +1 -0
  230. package/dist/async/parallel.cjs +2 -0
  231. package/dist/async/parallel.cjs.map +1 -0
  232. package/dist/async/parallel.d.ts +42 -0
  233. package/dist/async/parallel.d.ts.map +1 -0
  234. package/dist/async/parallel.js +26 -0
  235. package/dist/async/parallel.js.map +1 -0
  236. package/dist/async/queue.cjs +2 -0
  237. package/dist/async/queue.cjs.map +1 -0
  238. package/dist/async/queue.d.ts +42 -0
  239. package/dist/async/queue.d.ts.map +1 -0
  240. package/dist/async/queue.js +72 -0
  241. package/dist/async/queue.js.map +1 -0
  242. package/dist/async/retry.cjs +2 -0
  243. package/dist/async/retry.cjs.map +1 -0
  244. package/dist/async/retry.d.ts +46 -0
  245. package/dist/async/retry.d.ts.map +1 -0
  246. package/dist/async/retry.js +26 -0
  247. package/dist/async/retry.js.map +1 -0
  248. package/dist/async/sleep.cjs +2 -0
  249. package/dist/async/sleep.cjs.map +1 -0
  250. package/dist/async/sleep.d.ts +21 -0
  251. package/dist/async/sleep.d.ts.map +1 -0
  252. package/dist/async/sleep.js +16 -0
  253. package/dist/async/sleep.js.map +1 -0
  254. package/dist/async/waitFor.cjs +2 -0
  255. package/dist/async/waitFor.cjs.map +1 -0
  256. package/dist/async/waitFor.d.ts +34 -0
  257. package/dist/async/waitFor.d.ts.map +1 -0
  258. package/dist/async/waitFor.js +13 -0
  259. package/dist/async/waitFor.js.map +1 -0
  260. package/dist/cache/index.d.ts +3 -0
  261. package/dist/cache/index.d.ts.map +1 -0
  262. package/dist/cache/memo.cjs +2 -0
  263. package/dist/cache/memo.cjs.map +1 -0
  264. package/dist/cache/memo.d.ts +40 -0
  265. package/dist/cache/memo.d.ts.map +1 -0
  266. package/dist/cache/memo.js +37 -0
  267. package/dist/cache/memo.js.map +1 -0
  268. package/dist/cache/stash.cjs +2 -0
  269. package/dist/cache/stash.cjs.map +1 -0
  270. package/dist/cache/stash.d.ts +111 -0
  271. package/dist/cache/stash.d.ts.map +1 -0
  272. package/dist/cache/stash.js +92 -0
  273. package/dist/cache/stash.js.map +1 -0
  274. package/dist/errors.cjs +2 -0
  275. package/dist/errors.cjs.map +1 -0
  276. package/dist/errors.d.ts +20 -0
  277. package/dist/errors.d.ts.map +1 -0
  278. package/dist/errors.js +13 -0
  279. package/dist/errors.js.map +1 -0
  280. package/dist/function/assert.cjs +2 -0
  281. package/dist/function/assert.cjs.map +1 -0
  282. package/dist/function/assert.d.ts +19 -0
  283. package/dist/function/assert.d.ts.map +1 -0
  284. package/dist/function/assert.js +8 -0
  285. package/dist/function/assert.js.map +1 -0
  286. package/dist/function/constant.cjs +2 -0
  287. package/dist/function/constant.cjs.map +1 -0
  288. package/dist/function/constant.d.ts +5 -0
  289. package/dist/function/constant.d.ts.map +1 -0
  290. package/dist/function/constant.js +8 -0
  291. package/dist/function/constant.js.map +1 -0
  292. package/dist/function/debounce.cjs +2 -0
  293. package/dist/function/debounce.cjs.map +1 -0
  294. package/dist/function/debounce.d.ts +31 -0
  295. package/dist/function/debounce.d.ts.map +1 -0
  296. package/dist/function/debounce.js +29 -0
  297. package/dist/function/debounce.js.map +1 -0
  298. package/dist/function/identity.cjs +2 -0
  299. package/dist/function/identity.cjs.map +1 -0
  300. package/dist/function/identity.d.ts +5 -0
  301. package/dist/function/identity.d.ts.map +1 -0
  302. package/dist/function/identity.js +8 -0
  303. package/dist/function/identity.js.map +1 -0
  304. package/dist/function/index.d.ts +10 -0
  305. package/dist/function/index.d.ts.map +1 -0
  306. package/dist/function/once.cjs +2 -0
  307. package/dist/function/once.cjs.map +1 -0
  308. package/dist/function/once.d.ts +32 -0
  309. package/dist/function/once.d.ts.map +1 -0
  310. package/dist/function/once.js +11 -0
  311. package/dist/function/once.js.map +1 -0
  312. package/dist/function/pipe.cjs +2 -0
  313. package/dist/function/pipe.cjs.map +1 -0
  314. package/dist/function/pipe.d.ts +32 -0
  315. package/dist/function/pipe.d.ts.map +1 -0
  316. package/dist/function/pipe.js +10 -0
  317. package/dist/function/pipe.js.map +1 -0
  318. package/dist/function/runAll.cjs +2 -0
  319. package/dist/function/runAll.cjs.map +1 -0
  320. package/dist/function/runAll.d.ts +15 -0
  321. package/dist/function/runAll.d.ts.map +1 -0
  322. package/dist/function/runAll.js +19 -0
  323. package/dist/function/runAll.js.map +1 -0
  324. package/dist/function/tap.cjs +2 -0
  325. package/dist/function/tap.cjs.map +1 -0
  326. package/dist/function/tap.d.ts +5 -0
  327. package/dist/function/tap.d.ts.map +1 -0
  328. package/dist/function/tap.js +8 -0
  329. package/dist/function/tap.js.map +1 -0
  330. package/dist/function/throttle.cjs +2 -0
  331. package/dist/function/throttle.cjs.map +1 -0
  332. package/dist/function/throttle.d.ts +23 -0
  333. package/dist/function/throttle.d.ts.map +1 -0
  334. package/dist/function/throttle.js +36 -0
  335. package/dist/function/throttle.js.map +1 -0
  336. package/dist/guards/combinators.cjs +2 -0
  337. package/dist/guards/combinators.cjs.map +1 -0
  338. package/dist/guards/combinators.d.ts +49 -0
  339. package/dist/guards/combinators.d.ts.map +1 -0
  340. package/dist/guards/combinators.js +17 -0
  341. package/dist/guards/combinators.js.map +1 -0
  342. package/dist/guards/index.d.ts +20 -0
  343. package/dist/guards/index.d.ts.map +1 -0
  344. package/dist/guards/isAbortError.cjs +2 -0
  345. package/dist/guards/isAbortError.cjs.map +1 -0
  346. package/dist/guards/isAbortError.d.ts +19 -0
  347. package/dist/guards/isAbortError.d.ts.map +1 -0
  348. package/dist/guards/isAbortError.js +8 -0
  349. package/dist/guards/isAbortError.js.map +1 -0
  350. package/dist/guards/isArray.cjs +2 -0
  351. package/dist/guards/isArray.cjs.map +1 -0
  352. package/dist/guards/isArray.d.ts +16 -0
  353. package/dist/guards/isArray.d.ts.map +1 -0
  354. package/dist/guards/isArray.js +8 -0
  355. package/dist/guards/isArray.js.map +1 -0
  356. package/dist/guards/isBoolean.cjs +2 -0
  357. package/dist/guards/isBoolean.cjs.map +1 -0
  358. package/dist/guards/isBoolean.d.ts +23 -0
  359. package/dist/guards/isBoolean.d.ts.map +1 -0
  360. package/dist/guards/isBoolean.js +8 -0
  361. package/dist/guards/isBoolean.js.map +1 -0
  362. package/dist/guards/isDate.cjs +2 -0
  363. package/dist/guards/isDate.cjs.map +1 -0
  364. package/dist/guards/isDate.d.ts +15 -0
  365. package/dist/guards/isDate.d.ts.map +1 -0
  366. package/dist/guards/isDate.js +8 -0
  367. package/dist/guards/isDate.js.map +1 -0
  368. package/dist/guards/isDefined.cjs +2 -0
  369. package/dist/guards/isDefined.cjs.map +1 -0
  370. package/dist/guards/isDefined.d.ts +19 -0
  371. package/dist/guards/isDefined.d.ts.map +1 -0
  372. package/dist/guards/isDefined.js +8 -0
  373. package/dist/guards/isDefined.js.map +1 -0
  374. package/dist/guards/isEmpty.cjs +2 -0
  375. package/dist/guards/isEmpty.cjs.map +1 -0
  376. package/dist/guards/isEmpty.d.ts +23 -0
  377. package/dist/guards/isEmpty.d.ts.map +1 -0
  378. package/dist/guards/isEmpty.js +10 -0
  379. package/dist/guards/isEmpty.js.map +1 -0
  380. package/dist/guards/isEqual.cjs +2 -0
  381. package/dist/guards/isEqual.cjs.map +1 -0
  382. package/dist/guards/isEqual.d.ts +24 -0
  383. package/dist/guards/isEqual.d.ts.map +1 -0
  384. package/dist/guards/isEqual.js +34 -0
  385. package/dist/guards/isEqual.js.map +1 -0
  386. package/dist/guards/isError.cjs +2 -0
  387. package/dist/guards/isError.cjs.map +1 -0
  388. package/dist/guards/isError.d.ts +15 -0
  389. package/dist/guards/isError.d.ts.map +1 -0
  390. package/dist/guards/isError.js +8 -0
  391. package/dist/guards/isError.js.map +1 -0
  392. package/dist/guards/isFunction.cjs +2 -0
  393. package/dist/guards/isFunction.cjs.map +1 -0
  394. package/dist/guards/isFunction.d.ts +16 -0
  395. package/dist/guards/isFunction.d.ts.map +1 -0
  396. package/dist/guards/isFunction.js +8 -0
  397. package/dist/guards/isFunction.js.map +1 -0
  398. package/dist/guards/isMatch.cjs +2 -0
  399. package/dist/guards/isMatch.cjs.map +1 -0
  400. package/dist/guards/isMatch.d.ts +23 -0
  401. package/dist/guards/isMatch.d.ts.map +1 -0
  402. package/dist/guards/isMatch.js +23 -0
  403. package/dist/guards/isMatch.js.map +1 -0
  404. package/dist/guards/isNil.cjs +2 -0
  405. package/dist/guards/isNil.cjs.map +1 -0
  406. package/dist/guards/isNil.d.ts +17 -0
  407. package/dist/guards/isNil.d.ts.map +1 -0
  408. package/dist/guards/isNil.js +8 -0
  409. package/dist/guards/isNil.js.map +1 -0
  410. package/dist/guards/isNumber.cjs +2 -0
  411. package/dist/guards/isNumber.cjs.map +1 -0
  412. package/dist/guards/isNumber.d.ts +15 -0
  413. package/dist/guards/isNumber.d.ts.map +1 -0
  414. package/dist/guards/isNumber.js +8 -0
  415. package/dist/guards/isNumber.js.map +1 -0
  416. package/dist/guards/isPlainObject.cjs +2 -0
  417. package/dist/guards/isPlainObject.cjs.map +1 -0
  418. package/dist/guards/isPlainObject.d.ts +16 -0
  419. package/dist/guards/isPlainObject.d.ts.map +1 -0
  420. package/dist/guards/isPlainObject.js +10 -0
  421. package/dist/guards/isPlainObject.js.map +1 -0
  422. package/dist/guards/isPrimitive.cjs +2 -0
  423. package/dist/guards/isPrimitive.cjs.map +1 -0
  424. package/dist/guards/isPrimitive.d.ts +18 -0
  425. package/dist/guards/isPrimitive.d.ts.map +1 -0
  426. package/dist/guards/isPrimitive.js +9 -0
  427. package/dist/guards/isPrimitive.js.map +1 -0
  428. package/dist/guards/isPromise.cjs +2 -0
  429. package/dist/guards/isPromise.cjs.map +1 -0
  430. package/dist/guards/isPromise.d.ts +17 -0
  431. package/dist/guards/isPromise.d.ts.map +1 -0
  432. package/dist/guards/isPromise.js +8 -0
  433. package/dist/guards/isPromise.js.map +1 -0
  434. package/dist/guards/isRegex.cjs +2 -0
  435. package/dist/guards/isRegex.cjs.map +1 -0
  436. package/dist/guards/isRegex.d.ts +21 -0
  437. package/dist/guards/isRegex.d.ts.map +1 -0
  438. package/dist/guards/isRegex.js +8 -0
  439. package/dist/guards/isRegex.js.map +1 -0
  440. package/dist/guards/isString.cjs +2 -0
  441. package/dist/guards/isString.cjs.map +1 -0
  442. package/dist/guards/isString.d.ts +15 -0
  443. package/dist/guards/isString.d.ts.map +1 -0
  444. package/dist/guards/isString.js +8 -0
  445. package/dist/guards/isString.js.map +1 -0
  446. package/dist/guards/shallowEqual.cjs +2 -0
  447. package/dist/guards/shallowEqual.cjs.map +1 -0
  448. package/dist/guards/shallowEqual.d.ts +29 -0
  449. package/dist/guards/shallowEqual.d.ts.map +1 -0
  450. package/dist/guards/shallowEqual.js +20 -0
  451. package/dist/guards/shallowEqual.js.map +1 -0
  452. package/dist/index.cjs +1 -0
  453. package/dist/index.d.ts +119 -0
  454. package/dist/index.d.ts.map +1 -0
  455. package/dist/index.js +118 -0
  456. package/dist/math/abs.cjs +2 -0
  457. package/dist/math/abs.cjs.map +1 -0
  458. package/dist/math/abs.d.ts +17 -0
  459. package/dist/math/abs.d.ts.map +1 -0
  460. package/dist/math/abs.js +8 -0
  461. package/dist/math/abs.js.map +1 -0
  462. package/dist/math/allocate.cjs +2 -0
  463. package/dist/math/allocate.cjs.map +1 -0
  464. package/dist/math/allocate.d.ts +29 -0
  465. package/dist/math/allocate.d.ts.map +1 -0
  466. package/dist/math/allocate.js +20 -0
  467. package/dist/math/allocate.js.map +1 -0
  468. package/dist/math/average.cjs +2 -0
  469. package/dist/math/average.cjs.map +1 -0
  470. package/dist/math/average.d.ts +16 -0
  471. package/dist/math/average.d.ts.map +1 -0
  472. package/dist/math/average.js +14 -0
  473. package/dist/math/average.js.map +1 -0
  474. package/dist/math/clamp.cjs +2 -0
  475. package/dist/math/clamp.cjs.map +1 -0
  476. package/dist/math/clamp.d.ts +21 -0
  477. package/dist/math/clamp.d.ts.map +1 -0
  478. package/dist/math/clamp.js +8 -0
  479. package/dist/math/clamp.js.map +1 -0
  480. package/dist/math/gcd.cjs +2 -0
  481. package/dist/math/gcd.cjs.map +1 -0
  482. package/dist/math/gcd.d.ts +18 -0
  483. package/dist/math/gcd.d.ts.map +1 -0
  484. package/dist/math/gcd.js +13 -0
  485. package/dist/math/gcd.js.map +1 -0
  486. package/dist/math/index.d.ts +20 -0
  487. package/dist/math/index.d.ts.map +1 -0
  488. package/dist/math/lcm.cjs +2 -0
  489. package/dist/math/lcm.cjs.map +1 -0
  490. package/dist/math/lcm.d.ts +15 -0
  491. package/dist/math/lcm.d.ts.map +1 -0
  492. package/dist/math/lcm.js +9 -0
  493. package/dist/math/lcm.js.map +1 -0
  494. package/dist/math/lerp.cjs +2 -0
  495. package/dist/math/lerp.cjs.map +1 -0
  496. package/dist/math/lerp.d.ts +17 -0
  497. package/dist/math/lerp.d.ts.map +1 -0
  498. package/dist/math/lerp.js +8 -0
  499. package/dist/math/lerp.js.map +1 -0
  500. package/dist/math/linspace.cjs +2 -0
  501. package/dist/math/linspace.cjs.map +1 -0
  502. package/dist/math/linspace.d.ts +19 -0
  503. package/dist/math/linspace.d.ts.map +1 -0
  504. package/dist/math/linspace.js +11 -0
  505. package/dist/math/linspace.js.map +1 -0
  506. package/dist/math/max.cjs +2 -0
  507. package/dist/math/max.cjs.map +1 -0
  508. package/dist/math/max.d.ts +21 -0
  509. package/dist/math/max.d.ts.map +1 -0
  510. package/dist/math/max.js +12 -0
  511. package/dist/math/max.js.map +1 -0
  512. package/dist/math/median.cjs +2 -0
  513. package/dist/math/median.cjs.map +1 -0
  514. package/dist/math/median.d.ts +17 -0
  515. package/dist/math/median.d.ts.map +1 -0
  516. package/dist/math/median.js +12 -0
  517. package/dist/math/median.js.map +1 -0
  518. package/dist/math/min.cjs +2 -0
  519. package/dist/math/min.cjs.map +1 -0
  520. package/dist/math/min.d.ts +21 -0
  521. package/dist/math/min.d.ts.map +1 -0
  522. package/dist/math/min.js +12 -0
  523. package/dist/math/min.js.map +1 -0
  524. package/dist/math/mod.cjs +2 -0
  525. package/dist/math/mod.cjs.map +1 -0
  526. package/dist/math/mod.d.ts +18 -0
  527. package/dist/math/mod.d.ts.map +1 -0
  528. package/dist/math/mod.js +10 -0
  529. package/dist/math/mod.js.map +1 -0
  530. package/dist/math/normalize.cjs +2 -0
  531. package/dist/math/normalize.cjs.map +1 -0
  532. package/dist/math/normalize.d.ts +18 -0
  533. package/dist/math/normalize.d.ts.map +1 -0
  534. package/dist/math/normalize.js +9 -0
  535. package/dist/math/normalize.js.map +1 -0
  536. package/dist/math/percent.cjs +2 -0
  537. package/dist/math/percent.cjs.map +1 -0
  538. package/dist/math/percent.d.ts +19 -0
  539. package/dist/math/percent.d.ts.map +1 -0
  540. package/dist/math/percent.js +8 -0
  541. package/dist/math/percent.js.map +1 -0
  542. package/dist/math/range.cjs +2 -0
  543. package/dist/math/range.cjs.map +1 -0
  544. package/dist/math/range.d.ts +37 -0
  545. package/dist/math/range.d.ts.map +1 -0
  546. package/dist/math/range.js +27 -0
  547. package/dist/math/range.js.map +1 -0
  548. package/dist/math/round.cjs +2 -0
  549. package/dist/math/round.cjs.map +1 -0
  550. package/dist/math/round.d.ts +21 -0
  551. package/dist/math/round.d.ts.map +1 -0
  552. package/dist/math/round.js +10 -0
  553. package/dist/math/round.js.map +1 -0
  554. package/dist/math/standardDeviation.cjs +2 -0
  555. package/dist/math/standardDeviation.cjs.map +1 -0
  556. package/dist/math/standardDeviation.d.ts +16 -0
  557. package/dist/math/standardDeviation.d.ts.map +1 -0
  558. package/dist/math/standardDeviation.js +9 -0
  559. package/dist/math/standardDeviation.js.map +1 -0
  560. package/dist/math/sum.cjs +2 -0
  561. package/dist/math/sum.cjs.map +1 -0
  562. package/dist/math/sum.d.ts +19 -0
  563. package/dist/math/sum.d.ts.map +1 -0
  564. package/dist/math/sum.js +13 -0
  565. package/dist/math/sum.js.map +1 -0
  566. package/dist/math/variance.cjs +2 -0
  567. package/dist/math/variance.cjs.map +1 -0
  568. package/dist/math/variance.d.ts +17 -0
  569. package/dist/math/variance.d.ts.map +1 -0
  570. package/dist/math/variance.js +11 -0
  571. package/dist/math/variance.js.map +1 -0
  572. package/dist/object/defaults.cjs +2 -0
  573. package/dist/object/defaults.cjs.map +1 -0
  574. package/dist/object/defaults.d.ts +17 -0
  575. package/dist/object/defaults.d.ts.map +1 -0
  576. package/dist/object/defaults.js +12 -0
  577. package/dist/object/defaults.js.map +1 -0
  578. package/dist/object/diff.cjs +2 -0
  579. package/dist/object/diff.cjs.map +1 -0
  580. package/dist/object/diff.d.ts +63 -0
  581. package/dist/object/diff.d.ts.map +1 -0
  582. package/dist/object/diff.js +27 -0
  583. package/dist/object/diff.js.map +1 -0
  584. package/dist/object/filterValues.cjs +2 -0
  585. package/dist/object/filterValues.cjs.map +1 -0
  586. package/dist/object/filterValues.d.ts +16 -0
  587. package/dist/object/filterValues.d.ts.map +1 -0
  588. package/dist/object/filterValues.js +11 -0
  589. package/dist/object/filterValues.js.map +1 -0
  590. package/dist/object/flattenPaths.cjs +2 -0
  591. package/dist/object/flattenPaths.cjs.map +1 -0
  592. package/dist/object/flattenPaths.d.ts +13 -0
  593. package/dist/object/flattenPaths.d.ts.map +1 -0
  594. package/dist/object/flattenPaths.js +31 -0
  595. package/dist/object/flattenPaths.js.map +1 -0
  596. package/dist/object/getPath.cjs +2 -0
  597. package/dist/object/getPath.cjs.map +1 -0
  598. package/dist/object/getPath.d.ts +48 -0
  599. package/dist/object/getPath.d.ts.map +1 -0
  600. package/dist/object/getPath.js +27 -0
  601. package/dist/object/getPath.js.map +1 -0
  602. package/dist/object/hash.cjs +2 -0
  603. package/dist/object/hash.cjs.map +1 -0
  604. package/dist/object/hash.d.ts +12 -0
  605. package/dist/object/hash.d.ts.map +1 -0
  606. package/dist/object/hash.js +28 -0
  607. package/dist/object/hash.js.map +1 -0
  608. package/dist/object/index.d.ts +15 -0
  609. package/dist/object/index.d.ts.map +1 -0
  610. package/dist/object/invert.cjs +2 -0
  611. package/dist/object/invert.cjs.map +1 -0
  612. package/dist/object/invert.d.ts +15 -0
  613. package/dist/object/invert.d.ts.map +1 -0
  614. package/dist/object/invert.js +11 -0
  615. package/dist/object/invert.js.map +1 -0
  616. package/dist/object/mapKeys.cjs +2 -0
  617. package/dist/object/mapKeys.cjs.map +1 -0
  618. package/dist/object/mapKeys.d.ts +16 -0
  619. package/dist/object/mapKeys.d.ts.map +1 -0
  620. package/dist/object/mapKeys.js +15 -0
  621. package/dist/object/mapKeys.js.map +1 -0
  622. package/dist/object/mapValues.cjs +2 -0
  623. package/dist/object/mapValues.cjs.map +1 -0
  624. package/dist/object/mapValues.d.ts +18 -0
  625. package/dist/object/mapValues.d.ts.map +1 -0
  626. package/dist/object/mapValues.js +11 -0
  627. package/dist/object/mapValues.js.map +1 -0
  628. package/dist/object/merge.cjs +2 -0
  629. package/dist/object/merge.cjs.map +1 -0
  630. package/dist/object/merge.d.ts +41 -0
  631. package/dist/object/merge.d.ts.map +1 -0
  632. package/dist/object/merge.js +27 -0
  633. package/dist/object/merge.js.map +1 -0
  634. package/dist/object/omit.cjs +2 -0
  635. package/dist/object/omit.cjs.map +1 -0
  636. package/dist/object/omit.d.ts +16 -0
  637. package/dist/object/omit.d.ts.map +1 -0
  638. package/dist/object/omit.js +11 -0
  639. package/dist/object/omit.js.map +1 -0
  640. package/dist/object/parseJSON.cjs +2 -0
  641. package/dist/object/parseJSON.cjs.map +1 -0
  642. package/dist/object/parseJSON.d.ts +32 -0
  643. package/dist/object/parseJSON.d.ts.map +1 -0
  644. package/dist/object/parseJSON.js +16 -0
  645. package/dist/object/parseJSON.js.map +1 -0
  646. package/dist/object/pick.cjs +2 -0
  647. package/dist/object/pick.cjs.map +1 -0
  648. package/dist/object/pick.d.ts +17 -0
  649. package/dist/object/pick.d.ts.map +1 -0
  650. package/dist/object/pick.js +11 -0
  651. package/dist/object/pick.js.map +1 -0
  652. package/dist/object/prune.cjs +2 -0
  653. package/dist/object/prune.cjs.map +1 -0
  654. package/dist/object/prune.d.ts +26 -0
  655. package/dist/object/prune.d.ts.map +1 -0
  656. package/dist/object/prune.js +36 -0
  657. package/dist/object/prune.js.map +1 -0
  658. package/dist/random/draw.cjs +2 -0
  659. package/dist/random/draw.cjs.map +1 -0
  660. package/dist/random/draw.d.ts +24 -0
  661. package/dist/random/draw.d.ts.map +1 -0
  662. package/dist/random/draw.js +21 -0
  663. package/dist/random/draw.js.map +1 -0
  664. package/dist/random/index.d.ts +5 -0
  665. package/dist/random/index.d.ts.map +1 -0
  666. package/dist/random/random.cjs +2 -0
  667. package/dist/random/random.cjs.map +1 -0
  668. package/dist/random/random.d.ts +14 -0
  669. package/dist/random/random.d.ts.map +1 -0
  670. package/dist/random/random.js +11 -0
  671. package/dist/random/random.js.map +1 -0
  672. package/dist/random/shuffle.cjs +2 -0
  673. package/dist/random/shuffle.cjs.map +1 -0
  674. package/dist/random/shuffle.d.ts +12 -0
  675. package/dist/random/shuffle.d.ts.map +1 -0
  676. package/dist/random/shuffle.js +14 -0
  677. package/dist/random/shuffle.js.map +1 -0
  678. package/dist/random/uuid.cjs +2 -0
  679. package/dist/random/uuid.cjs.map +1 -0
  680. package/dist/random/uuid.d.ts +12 -0
  681. package/dist/random/uuid.d.ts.map +1 -0
  682. package/dist/random/uuid.js +8 -0
  683. package/dist/random/uuid.js.map +1 -0
  684. package/dist/string/_caseUtils.cjs +2 -0
  685. package/dist/string/_caseUtils.cjs.map +1 -0
  686. package/dist/string/_caseUtils.d.ts +9 -0
  687. package/dist/string/_caseUtils.d.ts.map +1 -0
  688. package/dist/string/_caseUtils.js +13 -0
  689. package/dist/string/_caseUtils.js.map +1 -0
  690. package/dist/string/camelCase.cjs +2 -0
  691. package/dist/string/camelCase.cjs.map +1 -0
  692. package/dist/string/camelCase.d.ts +14 -0
  693. package/dist/string/camelCase.d.ts.map +1 -0
  694. package/dist/string/camelCase.js +9 -0
  695. package/dist/string/camelCase.js.map +1 -0
  696. package/dist/string/endsWith.cjs +2 -0
  697. package/dist/string/endsWith.cjs.map +1 -0
  698. package/dist/string/endsWith.d.ts +5 -0
  699. package/dist/string/endsWith.d.ts.map +1 -0
  700. package/dist/string/endsWith.js +8 -0
  701. package/dist/string/endsWith.js.map +1 -0
  702. package/dist/string/escape.cjs +2 -0
  703. package/dist/string/escape.cjs.map +1 -0
  704. package/dist/string/escape.d.ts +5 -0
  705. package/dist/string/escape.d.ts.map +1 -0
  706. package/dist/string/escape.js +15 -0
  707. package/dist/string/escape.js.map +1 -0
  708. package/dist/string/index.d.ts +14 -0
  709. package/dist/string/index.d.ts.map +1 -0
  710. package/dist/string/kebabCase.cjs +2 -0
  711. package/dist/string/kebabCase.cjs.map +1 -0
  712. package/dist/string/kebabCase.d.ts +15 -0
  713. package/dist/string/kebabCase.d.ts.map +1 -0
  714. package/dist/string/kebabCase.js +9 -0
  715. package/dist/string/kebabCase.js.map +1 -0
  716. package/dist/string/pad.cjs +2 -0
  717. package/dist/string/pad.cjs.map +1 -0
  718. package/dist/string/pad.d.ts +5 -0
  719. package/dist/string/pad.d.ts.map +1 -0
  720. package/dist/string/pad.js +10 -0
  721. package/dist/string/pad.js.map +1 -0
  722. package/dist/string/pascalCase.cjs +2 -0
  723. package/dist/string/pascalCase.cjs.map +1 -0
  724. package/dist/string/pascalCase.d.ts +15 -0
  725. package/dist/string/pascalCase.d.ts.map +1 -0
  726. package/dist/string/pascalCase.js +9 -0
  727. package/dist/string/pascalCase.js.map +1 -0
  728. package/dist/string/similarity.cjs +2 -0
  729. package/dist/string/similarity.cjs.map +1 -0
  730. package/dist/string/similarity.d.ts +2 -0
  731. package/dist/string/similarity.d.ts.map +1 -0
  732. package/dist/string/similarity.js +24 -0
  733. package/dist/string/similarity.js.map +1 -0
  734. package/dist/string/snakeCase.cjs +2 -0
  735. package/dist/string/snakeCase.cjs.map +1 -0
  736. package/dist/string/snakeCase.d.ts +15 -0
  737. package/dist/string/snakeCase.d.ts.map +1 -0
  738. package/dist/string/snakeCase.js +9 -0
  739. package/dist/string/snakeCase.js.map +1 -0
  740. package/dist/string/startsWith.cjs +2 -0
  741. package/dist/string/startsWith.cjs.map +1 -0
  742. package/dist/string/startsWith.d.ts +5 -0
  743. package/dist/string/startsWith.d.ts.map +1 -0
  744. package/dist/string/startsWith.js +8 -0
  745. package/dist/string/startsWith.js.map +1 -0
  746. package/dist/string/titleCase.cjs +2 -0
  747. package/dist/string/titleCase.cjs.map +1 -0
  748. package/dist/string/titleCase.d.ts +5 -0
  749. package/dist/string/titleCase.d.ts.map +1 -0
  750. package/dist/string/titleCase.js +9 -0
  751. package/dist/string/titleCase.js.map +1 -0
  752. package/dist/string/truncate.cjs +2 -0
  753. package/dist/string/truncate.cjs.map +1 -0
  754. package/dist/string/truncate.d.ts +27 -0
  755. package/dist/string/truncate.d.ts.map +1 -0
  756. package/dist/string/truncate.js +17 -0
  757. package/dist/string/truncate.js.map +1 -0
  758. package/dist/string/unescape.cjs +2 -0
  759. package/dist/string/unescape.cjs.map +1 -0
  760. package/dist/string/unescape.d.ts +5 -0
  761. package/dist/string/unescape.d.ts.map +1 -0
  762. package/dist/string/unescape.js +15 -0
  763. package/dist/string/unescape.js.map +1 -0
  764. package/dist/string/words.cjs +2 -0
  765. package/dist/string/words.cjs.map +1 -0
  766. package/dist/string/words.d.ts +5 -0
  767. package/dist/string/words.d.ts.map +1 -0
  768. package/dist/string/words.js +10 -0
  769. package/dist/string/words.js.map +1 -0
  770. package/dist/types.d.ts +13 -0
  771. package/dist/types.d.ts.map +1 -0
  772. package/package.json +102 -0
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Rotates the elements of an array by a specified number of positions.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * const arr = [1, 2, 3, 4, 5];
7
+ * rotate(arr, 2); // [3, 4, 5]
8
+ * rotate(arr, 2, { wrap: true }); // [3, 4, 5, 1, 2]
9
+ * ```
10
+ * @param array - The array to rotate.
11
+ * @param positions - The number of positions to rotate the array.
12
+ * @param [options] - Options for the rotate operation.
13
+ * @param [options.wrap] - If `true`, the rotated-out elements are appended to the end.
14
+ *
15
+ * @returns A new array with the elements rotated.
16
+ */
17
+ export declare function rotate<T>(array: T[], positions: number, { wrap }?: {
18
+ wrap?: boolean;
19
+ }): T[];
20
+ //# sourceMappingURL=rotate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotate.d.ts","sourceRoot":"","sources":["../../src/array/rotate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAY,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,CAAC,EAAE,CAOvG"}
@@ -0,0 +1,10 @@
1
+ //#region src/array/rotate.ts
2
+ function e(e, t, { wrap: n = !1 } = {}) {
3
+ if (e.length === 0) return e;
4
+ let r = (t % e.length + e.length) % e.length, i = e.slice(r);
5
+ return n ? [...i, ...e.slice(0, r)] : i;
6
+ }
7
+ //#endregion
8
+ export { e as rotate };
9
+
10
+ //# sourceMappingURL=rotate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotate.js","names":[],"sources":["../../src/array/rotate.ts"],"sourcesContent":["/**\n * Rotates the elements of an array by a specified number of positions.\n *\n * @example\n * ```ts\n * const arr = [1, 2, 3, 4, 5];\n * rotate(arr, 2); // [3, 4, 5]\n * rotate(arr, 2, { wrap: true }); // [3, 4, 5, 1, 2]\n * ```\n * @param array - The array to rotate.\n * @param positions - The number of positions to rotate the array.\n * @param [options] - Options for the rotate operation.\n * @param [options.wrap] - If `true`, the rotated-out elements are appended to the end.\n *\n * @returns A new array with the elements rotated.\n */\nexport function rotate<T>(array: T[], positions: number, { wrap = false }: { wrap?: boolean } = {}): T[] {\n if (array.length === 0) return array;\n\n const normalizedPos = ((positions % array.length) + array.length) % array.length;\n const rotated = array.slice(normalizedPos);\n\n return wrap ? [...rotated, ...array.slice(0, normalizedPos)] : rotated;\n}\n"],"mappings":";AAgBA,SAAgB,EAAU,GAAY,GAAmB,EAAE,UAAO,OAA8B,CAAC,GAAQ;CACvG,IAAI,EAAM,WAAW,GAAG,OAAO;CAE/B,IAAM,KAAkB,IAAY,EAAM,SAAU,EAAM,UAAU,EAAM,QACpE,IAAU,EAAM,MAAM,CAAa;CAEzC,OAAO,IAAO,CAAC,GAAG,GAAS,GAAG,EAAM,MAAM,GAAG,CAAa,CAAC,IAAI;AACjE"}
@@ -0,0 +1,2 @@
1
+ const e=require("../errors.cjs"),t=require("../guards/isString.cjs"),n=require("../guards/isNil.cjs"),r=require("../guards/isNumber.cjs"),i=require("../string/similarity.cjs");var a=10,o=1e3;function s(t){if(t===void 0)return a;if(!Number.isInteger(t)||t<0)throw new e.ArsenalValidationError(`fuzzy: maxDepth must be a non-negative integer, got ${t}`);return Math.min(t,o)}var c=e=>e.normalize(`NFKD`).replace(/\p{M}/gu,``);function l(e,a,o,s,u=0){return u>s||n.isNil(e)?0:t.isString(e)||r.isNumber(e)?i.similarity(o?c(String(e)):String(e),a):Array.isArray(e)?e.reduce((e,t)=>Math.max(e,l(t,a,o,s,u+1)),0):typeof e==`object`?Object.values(e).reduce((e,t)=>Math.max(e,l(t,a,o,s,u+1)),0):0}function u(e,t,n,r,i){return l(e,t,r,i)>=n}function d(e,t,n={}){let{fields:r,normalize:i=!1,threshold:a=.25}=n,o=s(n.maxDepth);if(!t)return[...e];let l=t.trim().toLowerCase();if(!l)return[...e];let d=i?c(l):l;return e.filter(e=>r&&r.length>0&&typeof e==`object`&&e?r.some(t=>u(e[t],d,a,i,o)):u(e,d,a,i,o))}function f(e,t,n={}){let{fields:r,normalize:i=!1,threshold:a=.25}=n,o=s(n.maxDepth);if(!t||!t.trim())return e.map(e=>({item:e,score:1}));let u=t.trim().toLowerCase(),d=i?c(u):u;return e.map(e=>({item:e,score:r&&r.length>0&&typeof e==`object`&&e?r.reduce((t,n)=>Math.max(t,l(e[n],d,i,o)),0):l(e,d,i,o)})).filter(({score:e})=>e>=a).sort((e,t)=>t.score-e.score)}function p(e,t,n={}){let{scored:r,...i}=n;return r?f(e,t,i):d(e,t,i)}exports.fuzzy=p,exports.fuzzyFilter=d,exports.fuzzyScore=f;
2
+ //# sourceMappingURL=search.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.cjs","names":[],"sources":["../../src/array/search.ts"],"sourcesContent":["import { ArsenalValidationError } from '../errors';\nimport { isNil } from '../guards/isNil';\nimport { isNumber } from '../guards/isNumber';\nimport { isString } from '../guards/isString';\nimport { similarity } from '../string/similarity';\n\nexport type ScoredResult<T> = { item: T; score: number };\n\nexport type FuzzyOptions<T> = {\n fields?: ReadonlyArray<keyof T & string>;\n /**\n * Maximum recursive depth for full-tree scanning when `fields` is omitted. Values beyond\n * this depth are not searched. Must be a non-negative integer; silently clamped to\n * `HARD_MAX_SEEK_DEPTH` to bound worst-case recursion on untrusted, deeply-nested input.\n * Default: `10`.\n */\n maxDepth?: number;\n /** When `true`, applies Unicode NFKD normalization before comparison so accented characters match their base form (é ≈ e). Default: `false`. */\n normalize?: boolean;\n threshold?: number;\n};\n\n/** Default maximum recursive depth for full-tree scanning when `fields` is omitted and `maxDepth` isn't set. */\nconst DEFAULT_MAX_SEEK_DEPTH = 10;\n\n/**\n * Hard ceiling for `maxDepth`, regardless of caller input — bounds worst-case recursion depth\n * (and therefore call-stack usage) even when `maxDepth` is attacker-influenced.\n */\nconst HARD_MAX_SEEK_DEPTH = 1000;\n\n/** @security `maxDepth` may originate from untrusted input reaching a public API — validate and clamp. */\nfunction resolveMaxDepth(maxDepth: number | undefined): number {\n if (maxDepth === undefined) return DEFAULT_MAX_SEEK_DEPTH;\n\n if (!Number.isInteger(maxDepth) || maxDepth < 0) {\n throw new ArsenalValidationError(`fuzzy: maxDepth must be a non-negative integer, got ${maxDepth}`);\n }\n\n return Math.min(maxDepth, HARD_MAX_SEEK_DEPTH);\n}\n\nconst normalizeStr = (s: string): string => s.normalize('NFKD').replace(/\\p{M}/gu, '');\n\nfunction seekScore(item: unknown, query: string, normalize: boolean, maxDepth: number, depth = 0): number {\n if (depth > maxDepth) return 0;\n\n if (isNil(item)) return 0;\n\n if (isString(item) || isNumber(item)) {\n const a = normalize ? normalizeStr(String(item)) : String(item);\n\n return similarity(a, query);\n }\n\n if (Array.isArray(item))\n return (item as unknown[]).reduce<number>(\n (max, v) => Math.max(max, seekScore(v, query, normalize, maxDepth, depth + 1)),\n 0,\n );\n\n if (typeof item === 'object')\n return Object.values(item as Record<string, unknown>).reduce<number>(\n (max, v) => Math.max(max, seekScore(v, query, normalize, maxDepth, depth + 1)),\n 0,\n );\n\n return 0;\n}\n\nfunction seekValue(item: unknown, query: string, threshold: number, normalize: boolean, maxDepth: number): boolean {\n return seekScore(item, query, normalize, maxDepth) >= threshold;\n}\n\n/**\n * Performs a fuzzy filter on an array of items using string similarity.\n * Returns items whose similarity to `query` meets `threshold`.\n * When `fields` is provided, only those keys are searched; otherwise all values are scanned.\n *\n * For results sorted by relevance score, use `fuzzyScore`.\n *\n * @example\n * ```ts\n * const data = [{ name: 'John Doe', age: 25 }, { name: 'Jane Doe', age: 30 }];\n *\n * fuzzyFilter(data, 'doe'); // [{ name: 'John Doe' }, { name: 'Jane Doe' }]\n * fuzzyFilter(data, 'john', { fields: ['name'] });\n * ```\n *\n * @param array - The array of items to filter.\n * @param query - The string to search for.\n * @param [options.threshold=0.25] - Similarity threshold between 0 and 1. Higher = stricter.\n * @param [options.fields] - Limit search to these object keys. Searches all values when omitted.\n * @param [options.normalize=false] - NFKD normalization so accented chars match base form (é ≈ e).\n * @param [options.maxDepth=10] - Maximum recursive depth when scanning nested values (ignored when `fields` is set).\n * @throws {ArsenalValidationError} If `maxDepth` is provided and is not a non-negative integer.\n */\nexport function fuzzyFilter<T>(array: T[], query: string, options: FuzzyOptions<T> = {}): T[] {\n const { fields, normalize = false, threshold = 0.25 } = options;\n const maxDepth = resolveMaxDepth(options.maxDepth);\n\n if (!query) return [...array];\n\n const raw = query.trim().toLowerCase();\n\n if (!raw) return [...array];\n\n const searchTerm = normalize ? normalizeStr(raw) : raw;\n\n return array.filter((item) => {\n if (fields && fields.length > 0 && typeof item === 'object' && item !== null) {\n return fields.some((field) =>\n seekValue((item as Record<string, unknown>)[field], searchTerm, threshold, normalize, maxDepth),\n );\n }\n\n return seekValue(item, searchTerm, threshold, normalize, maxDepth);\n });\n}\n\n/**\n * Performs a fuzzy score on an array of items using string similarity.\n * Returns all items with their similarity score, filtered by `threshold`, sorted by score descending.\n * When `query` is empty, all items are returned with score `1`.\n *\n * For a simple filtered list without scores, use `fuzzyFilter`.\n *\n * @example\n * ```ts\n * const data = [{ name: 'John Doe', age: 25 }, { name: 'Jane Doe', age: 30 }];\n *\n * fuzzyScore(data, 'john', { fields: ['name'] });\n * // [{ item: { name: 'John Doe', age: 25 }, score: 0.8 }, ...]\n * ```\n *\n * @param array - The array of items to score.\n * @param query - The string to search for.\n * @param [options.threshold=0.25] - Minimum score to include in results.\n * @param [options.fields] - Limit scoring to these object keys. Scores all values when omitted.\n * @param [options.normalize=false] - NFKD normalization so accented chars match base form (é ≈ e).\n * @param [options.maxDepth=10] - Maximum recursive depth when scanning nested values (ignored when `fields` is set).\n * @throws {ArsenalValidationError} If `maxDepth` is provided and is not a non-negative integer.\n */\nexport function fuzzyScore<T>(array: T[], query: string, options: FuzzyOptions<T> = {}): ScoredResult<T>[] {\n const { fields, normalize = false, threshold = 0.25 } = options;\n const maxDepth = resolveMaxDepth(options.maxDepth);\n\n if (!query || !query.trim()) {\n return array.map((item) => ({ item, score: 1 }));\n }\n\n const raw = query.trim().toLowerCase();\n const searchTerm = normalize ? normalizeStr(raw) : raw;\n\n const scored = array.map((item) => {\n const score =\n fields && fields.length > 0 && typeof item === 'object' && item !== null\n ? fields.reduce<number>(\n (max, field) =>\n Math.max(max, seekScore((item as Record<string, unknown>)[field], searchTerm, normalize, maxDepth)),\n 0,\n )\n : seekScore(item, searchTerm, normalize, maxDepth);\n\n return { item, score };\n });\n\n return scored.filter(({ score }) => score >= threshold).sort((a, b) => b.score - a.score);\n}\n\n/**\n * Fuzzy-searches an array. In filter mode (default) returns `T[]`.\n * Pass `{ scored: true }` to return `ScoredResult<T>[]` sorted by relevance descending.\n *\n * @example\n * ```ts\n * const users = [{ name: 'Alice' }, { name: 'Bob' }];\n *\n * fuzzy(users, 'ali'); // [{ name: 'Alice' }]\n * fuzzy(users, 'ali', { scored: true }); // [{ item: { name: 'Alice' }, score: 0.9 }]\n * fuzzy(users, 'ali', { fields: ['name'] }); // field-restricted\n * ```\n */\nexport function fuzzy<T>(array: T[], query: string, options: FuzzyOptions<T> & { scored: true }): ScoredResult<T>[];\nexport function fuzzy<T>(array: T[], query: string, options?: FuzzyOptions<T> & { scored?: false }): T[];\nexport function fuzzy<T>(\n array: T[],\n query: string,\n options: FuzzyOptions<T> & { scored?: boolean } = {},\n): T[] | ScoredResult<T>[] {\n const { scored, ...rest } = options;\n\n return scored ? fuzzyScore(array, query, rest) : fuzzyFilter(array, query, rest);\n}\n"],"mappings":"gLAuBA,IAAM,EAAyB,GAMzB,EAAsB,IAG5B,SAAS,EAAgB,EAAsC,CAC7D,GAAI,IAAa,IAAA,GAAW,OAAO,EAEnC,GAAI,CAAC,OAAO,UAAU,CAAQ,GAAK,EAAW,EAC5C,MAAM,IAAI,EAAA,uBAAuB,uDAAuD,GAAU,EAGpG,OAAO,KAAK,IAAI,EAAU,CAAmB,CAC/C,CAEA,IAAM,EAAgB,GAAsB,EAAE,UAAU,MAAM,CAAC,CAAC,QAAQ,UAAW,EAAE,EAErF,SAAS,EAAU,EAAe,EAAe,EAAoB,EAAkB,EAAQ,EAAW,CAuBxG,OAtBI,EAAQ,GAER,EAAA,MAAM,CAAI,EAAU,EAEpB,EAAA,SAAS,CAAI,GAAK,EAAA,SAAS,CAAI,EAG1B,EAAA,WAFG,EAAY,EAAa,OAAO,CAAI,CAAC,EAAI,OAAO,CAAI,EAEzC,CAAK,EAGxB,MAAM,QAAQ,CAAI,EACZ,EAAmB,QACxB,EAAK,IAAM,KAAK,IAAI,EAAK,EAAU,EAAG,EAAO,EAAW,EAAU,EAAQ,CAAC,CAAC,EAC7E,CACF,EAEE,OAAO,GAAS,SACX,OAAO,OAAO,CAA+B,CAAC,CAAC,QACnD,EAAK,IAAM,KAAK,IAAI,EAAK,EAAU,EAAG,EAAO,EAAW,EAAU,EAAQ,CAAC,CAAC,EAC7E,CACF,EAEK,CACT,CAEA,SAAS,EAAU,EAAe,EAAe,EAAmB,EAAoB,EAA2B,CACjH,OAAO,EAAU,EAAM,EAAO,EAAW,CAAQ,GAAK,CACxD,CAyBA,SAAgB,EAAe,EAAY,EAAe,EAA2B,CAAC,EAAQ,CAC5F,GAAM,CAAE,SAAQ,YAAY,GAAO,YAAY,KAAS,EAClD,EAAW,EAAgB,EAAQ,QAAQ,EAEjD,GAAI,CAAC,EAAO,MAAO,CAAC,GAAG,CAAK,EAE5B,IAAM,EAAM,EAAM,KAAK,CAAC,CAAC,YAAY,EAErC,GAAI,CAAC,EAAK,MAAO,CAAC,GAAG,CAAK,EAE1B,IAAM,EAAa,EAAY,EAAa,CAAG,EAAI,EAEnD,OAAO,EAAM,OAAQ,GACf,GAAU,EAAO,OAAS,GAAK,OAAO,GAAS,UAAY,EACtD,EAAO,KAAM,GAClB,EAAW,EAAiC,GAAQ,EAAY,EAAW,EAAW,CAAQ,CAChG,EAGK,EAAU,EAAM,EAAY,EAAW,EAAW,CAAQ,CAClE,CACH,CAyBA,SAAgB,EAAc,EAAY,EAAe,EAA2B,CAAC,EAAsB,CACzG,GAAM,CAAE,SAAQ,YAAY,GAAO,YAAY,KAAS,EAClD,EAAW,EAAgB,EAAQ,QAAQ,EAEjD,GAAI,CAAC,GAAS,CAAC,EAAM,KAAK,EACxB,OAAO,EAAM,IAAK,IAAU,CAAE,OAAM,MAAO,CAAE,EAAE,EAGjD,IAAM,EAAM,EAAM,KAAK,CAAC,CAAC,YAAY,EAC/B,EAAa,EAAY,EAAa,CAAG,EAAI,EAenD,OAbe,EAAM,IAAK,IAUjB,CAAE,OAAM,MARb,GAAU,EAAO,OAAS,GAAK,OAAO,GAAS,UAAY,EACvD,EAAO,QACJ,EAAK,IACJ,KAAK,IAAI,EAAK,EAAW,EAAiC,GAAQ,EAAY,EAAW,CAAQ,CAAC,EACpG,CACF,EACA,EAAU,EAAM,EAAY,EAAW,CAAQ,CAEhC,EAGhB,CAAA,CAAO,QAAQ,CAAE,WAAY,GAAS,CAAS,CAAC,CAAC,MAAM,EAAG,IAAM,EAAE,MAAQ,EAAE,KAAK,CAC1F,CAiBA,SAAgB,EACd,EACA,EACA,EAAkD,CAAC,EAC1B,CACzB,GAAM,CAAE,SAAQ,GAAG,GAAS,EAE5B,OAAO,EAAS,EAAW,EAAO,EAAO,CAAI,EAAI,EAAY,EAAO,EAAO,CAAI,CACjF"}
@@ -0,0 +1,85 @@
1
+ export type ScoredResult<T> = {
2
+ item: T;
3
+ score: number;
4
+ };
5
+ export type FuzzyOptions<T> = {
6
+ fields?: ReadonlyArray<keyof T & string>;
7
+ /**
8
+ * Maximum recursive depth for full-tree scanning when `fields` is omitted. Values beyond
9
+ * this depth are not searched. Must be a non-negative integer; silently clamped to
10
+ * `HARD_MAX_SEEK_DEPTH` to bound worst-case recursion on untrusted, deeply-nested input.
11
+ * Default: `10`.
12
+ */
13
+ maxDepth?: number;
14
+ /** When `true`, applies Unicode NFKD normalization before comparison so accented characters match their base form (é ≈ e). Default: `false`. */
15
+ normalize?: boolean;
16
+ threshold?: number;
17
+ };
18
+ /**
19
+ * Performs a fuzzy filter on an array of items using string similarity.
20
+ * Returns items whose similarity to `query` meets `threshold`.
21
+ * When `fields` is provided, only those keys are searched; otherwise all values are scanned.
22
+ *
23
+ * For results sorted by relevance score, use `fuzzyScore`.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const data = [{ name: 'John Doe', age: 25 }, { name: 'Jane Doe', age: 30 }];
28
+ *
29
+ * fuzzyFilter(data, 'doe'); // [{ name: 'John Doe' }, { name: 'Jane Doe' }]
30
+ * fuzzyFilter(data, 'john', { fields: ['name'] });
31
+ * ```
32
+ *
33
+ * @param array - The array of items to filter.
34
+ * @param query - The string to search for.
35
+ * @param [options.threshold=0.25] - Similarity threshold between 0 and 1. Higher = stricter.
36
+ * @param [options.fields] - Limit search to these object keys. Searches all values when omitted.
37
+ * @param [options.normalize=false] - NFKD normalization so accented chars match base form (é ≈ e).
38
+ * @param [options.maxDepth=10] - Maximum recursive depth when scanning nested values (ignored when `fields` is set).
39
+ * @throws {ArsenalValidationError} If `maxDepth` is provided and is not a non-negative integer.
40
+ */
41
+ export declare function fuzzyFilter<T>(array: T[], query: string, options?: FuzzyOptions<T>): T[];
42
+ /**
43
+ * Performs a fuzzy score on an array of items using string similarity.
44
+ * Returns all items with their similarity score, filtered by `threshold`, sorted by score descending.
45
+ * When `query` is empty, all items are returned with score `1`.
46
+ *
47
+ * For a simple filtered list without scores, use `fuzzyFilter`.
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * const data = [{ name: 'John Doe', age: 25 }, { name: 'Jane Doe', age: 30 }];
52
+ *
53
+ * fuzzyScore(data, 'john', { fields: ['name'] });
54
+ * // [{ item: { name: 'John Doe', age: 25 }, score: 0.8 }, ...]
55
+ * ```
56
+ *
57
+ * @param array - The array of items to score.
58
+ * @param query - The string to search for.
59
+ * @param [options.threshold=0.25] - Minimum score to include in results.
60
+ * @param [options.fields] - Limit scoring to these object keys. Scores all values when omitted.
61
+ * @param [options.normalize=false] - NFKD normalization so accented chars match base form (é ≈ e).
62
+ * @param [options.maxDepth=10] - Maximum recursive depth when scanning nested values (ignored when `fields` is set).
63
+ * @throws {ArsenalValidationError} If `maxDepth` is provided and is not a non-negative integer.
64
+ */
65
+ export declare function fuzzyScore<T>(array: T[], query: string, options?: FuzzyOptions<T>): ScoredResult<T>[];
66
+ /**
67
+ * Fuzzy-searches an array. In filter mode (default) returns `T[]`.
68
+ * Pass `{ scored: true }` to return `ScoredResult<T>[]` sorted by relevance descending.
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * const users = [{ name: 'Alice' }, { name: 'Bob' }];
73
+ *
74
+ * fuzzy(users, 'ali'); // [{ name: 'Alice' }]
75
+ * fuzzy(users, 'ali', { scored: true }); // [{ item: { name: 'Alice' }, score: 0.9 }]
76
+ * fuzzy(users, 'ali', { fields: ['name'] }); // field-restricted
77
+ * ```
78
+ */
79
+ export declare function fuzzy<T>(array: T[], query: string, options: FuzzyOptions<T> & {
80
+ scored: true;
81
+ }): ScoredResult<T>[];
82
+ export declare function fuzzy<T>(array: T[], query: string, options?: FuzzyOptions<T> & {
83
+ scored?: false;
84
+ }): T[];
85
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/array/search.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC5B,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gJAAgJ;IAChJ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAsDF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAY,CAAC,CAAC,CAAM,GAAG,CAAC,EAAE,CAqB5F;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAY,CAAC,CAAC,CAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAyBzG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;AACpH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,CAAC,EAAE,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { ArsenalValidationError as e } from "../errors.js";
2
+ import { isString as t } from "../guards/isString.js";
3
+ import { isNil as n } from "../guards/isNil.js";
4
+ import { isNumber as r } from "../guards/isNumber.js";
5
+ import { similarity as i } from "../string/similarity.js";
6
+ //#region src/array/search.ts
7
+ var a = 10, o = 1e3;
8
+ function s(t) {
9
+ if (t === void 0) return a;
10
+ if (!Number.isInteger(t) || t < 0) throw new e(`fuzzy: maxDepth must be a non-negative integer, got ${t}`);
11
+ return Math.min(t, o);
12
+ }
13
+ var c = (e) => e.normalize("NFKD").replace(/\p{M}/gu, "");
14
+ function l(e, a, o, s, u = 0) {
15
+ return u > s || n(e) ? 0 : t(e) || r(e) ? i(o ? c(String(e)) : String(e), a) : Array.isArray(e) ? e.reduce((e, t) => Math.max(e, l(t, a, o, s, u + 1)), 0) : typeof e == "object" ? Object.values(e).reduce((e, t) => Math.max(e, l(t, a, o, s, u + 1)), 0) : 0;
16
+ }
17
+ function u(e, t, n, r, i) {
18
+ return l(e, t, r, i) >= n;
19
+ }
20
+ function d(e, t, n = {}) {
21
+ let { fields: r, normalize: i = !1, threshold: a = .25 } = n, o = s(n.maxDepth);
22
+ if (!t) return [...e];
23
+ let l = t.trim().toLowerCase();
24
+ if (!l) return [...e];
25
+ let d = i ? c(l) : l;
26
+ return e.filter((e) => r && r.length > 0 && typeof e == "object" && e ? r.some((t) => u(e[t], d, a, i, o)) : u(e, d, a, i, o));
27
+ }
28
+ function f(e, t, n = {}) {
29
+ let { fields: r, normalize: i = !1, threshold: a = .25 } = n, o = s(n.maxDepth);
30
+ if (!t || !t.trim()) return e.map((e) => ({
31
+ item: e,
32
+ score: 1
33
+ }));
34
+ let u = t.trim().toLowerCase(), d = i ? c(u) : u;
35
+ return e.map((e) => ({
36
+ item: e,
37
+ score: r && r.length > 0 && typeof e == "object" && e ? r.reduce((t, n) => Math.max(t, l(e[n], d, i, o)), 0) : l(e, d, i, o)
38
+ })).filter(({ score: e }) => e >= a).sort((e, t) => t.score - e.score);
39
+ }
40
+ function p(e, t, n = {}) {
41
+ let { scored: r, ...i } = n;
42
+ return r ? f(e, t, i) : d(e, t, i);
43
+ }
44
+ //#endregion
45
+ export { p as fuzzy, d as fuzzyFilter, f as fuzzyScore };
46
+
47
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","names":[],"sources":["../../src/array/search.ts"],"sourcesContent":["import { ArsenalValidationError } from '../errors';\nimport { isNil } from '../guards/isNil';\nimport { isNumber } from '../guards/isNumber';\nimport { isString } from '../guards/isString';\nimport { similarity } from '../string/similarity';\n\nexport type ScoredResult<T> = { item: T; score: number };\n\nexport type FuzzyOptions<T> = {\n fields?: ReadonlyArray<keyof T & string>;\n /**\n * Maximum recursive depth for full-tree scanning when `fields` is omitted. Values beyond\n * this depth are not searched. Must be a non-negative integer; silently clamped to\n * `HARD_MAX_SEEK_DEPTH` to bound worst-case recursion on untrusted, deeply-nested input.\n * Default: `10`.\n */\n maxDepth?: number;\n /** When `true`, applies Unicode NFKD normalization before comparison so accented characters match their base form (é ≈ e). Default: `false`. */\n normalize?: boolean;\n threshold?: number;\n};\n\n/** Default maximum recursive depth for full-tree scanning when `fields` is omitted and `maxDepth` isn't set. */\nconst DEFAULT_MAX_SEEK_DEPTH = 10;\n\n/**\n * Hard ceiling for `maxDepth`, regardless of caller input — bounds worst-case recursion depth\n * (and therefore call-stack usage) even when `maxDepth` is attacker-influenced.\n */\nconst HARD_MAX_SEEK_DEPTH = 1000;\n\n/** @security `maxDepth` may originate from untrusted input reaching a public API — validate and clamp. */\nfunction resolveMaxDepth(maxDepth: number | undefined): number {\n if (maxDepth === undefined) return DEFAULT_MAX_SEEK_DEPTH;\n\n if (!Number.isInteger(maxDepth) || maxDepth < 0) {\n throw new ArsenalValidationError(`fuzzy: maxDepth must be a non-negative integer, got ${maxDepth}`);\n }\n\n return Math.min(maxDepth, HARD_MAX_SEEK_DEPTH);\n}\n\nconst normalizeStr = (s: string): string => s.normalize('NFKD').replace(/\\p{M}/gu, '');\n\nfunction seekScore(item: unknown, query: string, normalize: boolean, maxDepth: number, depth = 0): number {\n if (depth > maxDepth) return 0;\n\n if (isNil(item)) return 0;\n\n if (isString(item) || isNumber(item)) {\n const a = normalize ? normalizeStr(String(item)) : String(item);\n\n return similarity(a, query);\n }\n\n if (Array.isArray(item))\n return (item as unknown[]).reduce<number>(\n (max, v) => Math.max(max, seekScore(v, query, normalize, maxDepth, depth + 1)),\n 0,\n );\n\n if (typeof item === 'object')\n return Object.values(item as Record<string, unknown>).reduce<number>(\n (max, v) => Math.max(max, seekScore(v, query, normalize, maxDepth, depth + 1)),\n 0,\n );\n\n return 0;\n}\n\nfunction seekValue(item: unknown, query: string, threshold: number, normalize: boolean, maxDepth: number): boolean {\n return seekScore(item, query, normalize, maxDepth) >= threshold;\n}\n\n/**\n * Performs a fuzzy filter on an array of items using string similarity.\n * Returns items whose similarity to `query` meets `threshold`.\n * When `fields` is provided, only those keys are searched; otherwise all values are scanned.\n *\n * For results sorted by relevance score, use `fuzzyScore`.\n *\n * @example\n * ```ts\n * const data = [{ name: 'John Doe', age: 25 }, { name: 'Jane Doe', age: 30 }];\n *\n * fuzzyFilter(data, 'doe'); // [{ name: 'John Doe' }, { name: 'Jane Doe' }]\n * fuzzyFilter(data, 'john', { fields: ['name'] });\n * ```\n *\n * @param array - The array of items to filter.\n * @param query - The string to search for.\n * @param [options.threshold=0.25] - Similarity threshold between 0 and 1. Higher = stricter.\n * @param [options.fields] - Limit search to these object keys. Searches all values when omitted.\n * @param [options.normalize=false] - NFKD normalization so accented chars match base form (é ≈ e).\n * @param [options.maxDepth=10] - Maximum recursive depth when scanning nested values (ignored when `fields` is set).\n * @throws {ArsenalValidationError} If `maxDepth` is provided and is not a non-negative integer.\n */\nexport function fuzzyFilter<T>(array: T[], query: string, options: FuzzyOptions<T> = {}): T[] {\n const { fields, normalize = false, threshold = 0.25 } = options;\n const maxDepth = resolveMaxDepth(options.maxDepth);\n\n if (!query) return [...array];\n\n const raw = query.trim().toLowerCase();\n\n if (!raw) return [...array];\n\n const searchTerm = normalize ? normalizeStr(raw) : raw;\n\n return array.filter((item) => {\n if (fields && fields.length > 0 && typeof item === 'object' && item !== null) {\n return fields.some((field) =>\n seekValue((item as Record<string, unknown>)[field], searchTerm, threshold, normalize, maxDepth),\n );\n }\n\n return seekValue(item, searchTerm, threshold, normalize, maxDepth);\n });\n}\n\n/**\n * Performs a fuzzy score on an array of items using string similarity.\n * Returns all items with their similarity score, filtered by `threshold`, sorted by score descending.\n * When `query` is empty, all items are returned with score `1`.\n *\n * For a simple filtered list without scores, use `fuzzyFilter`.\n *\n * @example\n * ```ts\n * const data = [{ name: 'John Doe', age: 25 }, { name: 'Jane Doe', age: 30 }];\n *\n * fuzzyScore(data, 'john', { fields: ['name'] });\n * // [{ item: { name: 'John Doe', age: 25 }, score: 0.8 }, ...]\n * ```\n *\n * @param array - The array of items to score.\n * @param query - The string to search for.\n * @param [options.threshold=0.25] - Minimum score to include in results.\n * @param [options.fields] - Limit scoring to these object keys. Scores all values when omitted.\n * @param [options.normalize=false] - NFKD normalization so accented chars match base form (é ≈ e).\n * @param [options.maxDepth=10] - Maximum recursive depth when scanning nested values (ignored when `fields` is set).\n * @throws {ArsenalValidationError} If `maxDepth` is provided and is not a non-negative integer.\n */\nexport function fuzzyScore<T>(array: T[], query: string, options: FuzzyOptions<T> = {}): ScoredResult<T>[] {\n const { fields, normalize = false, threshold = 0.25 } = options;\n const maxDepth = resolveMaxDepth(options.maxDepth);\n\n if (!query || !query.trim()) {\n return array.map((item) => ({ item, score: 1 }));\n }\n\n const raw = query.trim().toLowerCase();\n const searchTerm = normalize ? normalizeStr(raw) : raw;\n\n const scored = array.map((item) => {\n const score =\n fields && fields.length > 0 && typeof item === 'object' && item !== null\n ? fields.reduce<number>(\n (max, field) =>\n Math.max(max, seekScore((item as Record<string, unknown>)[field], searchTerm, normalize, maxDepth)),\n 0,\n )\n : seekScore(item, searchTerm, normalize, maxDepth);\n\n return { item, score };\n });\n\n return scored.filter(({ score }) => score >= threshold).sort((a, b) => b.score - a.score);\n}\n\n/**\n * Fuzzy-searches an array. In filter mode (default) returns `T[]`.\n * Pass `{ scored: true }` to return `ScoredResult<T>[]` sorted by relevance descending.\n *\n * @example\n * ```ts\n * const users = [{ name: 'Alice' }, { name: 'Bob' }];\n *\n * fuzzy(users, 'ali'); // [{ name: 'Alice' }]\n * fuzzy(users, 'ali', { scored: true }); // [{ item: { name: 'Alice' }, score: 0.9 }]\n * fuzzy(users, 'ali', { fields: ['name'] }); // field-restricted\n * ```\n */\nexport function fuzzy<T>(array: T[], query: string, options: FuzzyOptions<T> & { scored: true }): ScoredResult<T>[];\nexport function fuzzy<T>(array: T[], query: string, options?: FuzzyOptions<T> & { scored?: false }): T[];\nexport function fuzzy<T>(\n array: T[],\n query: string,\n options: FuzzyOptions<T> & { scored?: boolean } = {},\n): T[] | ScoredResult<T>[] {\n const { scored, ...rest } = options;\n\n return scored ? fuzzyScore(array, query, rest) : fuzzyFilter(array, query, rest);\n}\n"],"mappings":";;;;;;AAuBA,IAAM,IAAyB,IAMzB,IAAsB;AAG5B,SAAS,EAAgB,GAAsC;CAC7D,IAAI,MAAa,KAAA,GAAW,OAAO;CAEnC,IAAI,CAAC,OAAO,UAAU,CAAQ,KAAK,IAAW,GAC5C,MAAM,IAAI,EAAuB,uDAAuD,GAAU;CAGpG,OAAO,KAAK,IAAI,GAAU,CAAmB;AAC/C;AAEA,IAAM,KAAgB,MAAsB,EAAE,UAAU,MAAM,CAAC,CAAC,QAAQ,WAAW,EAAE;AAErF,SAAS,EAAU,GAAe,GAAe,GAAoB,GAAkB,IAAQ,GAAW;CAuBxG,OAtBI,IAAQ,KAER,EAAM,CAAI,IAAU,IAEpB,EAAS,CAAI,KAAK,EAAS,CAAI,IAG1B,EAFG,IAAY,EAAa,OAAO,CAAI,CAAC,IAAI,OAAO,CAAI,GAEzC,CAAK,IAGxB,MAAM,QAAQ,CAAI,IACZ,EAAmB,QACxB,GAAK,MAAM,KAAK,IAAI,GAAK,EAAU,GAAG,GAAO,GAAW,GAAU,IAAQ,CAAC,CAAC,GAC7E,CACF,IAEE,OAAO,KAAS,WACX,OAAO,OAAO,CAA+B,CAAC,CAAC,QACnD,GAAK,MAAM,KAAK,IAAI,GAAK,EAAU,GAAG,GAAO,GAAW,GAAU,IAAQ,CAAC,CAAC,GAC7E,CACF,IAEK;AACT;AAEA,SAAS,EAAU,GAAe,GAAe,GAAmB,GAAoB,GAA2B;CACjH,OAAO,EAAU,GAAM,GAAO,GAAW,CAAQ,KAAK;AACxD;AAyBA,SAAgB,EAAe,GAAY,GAAe,IAA2B,CAAC,GAAQ;CAC5F,IAAM,EAAE,WAAQ,eAAY,IAAO,eAAY,QAAS,GAClD,IAAW,EAAgB,EAAQ,QAAQ;CAEjD,IAAI,CAAC,GAAO,OAAO,CAAC,GAAG,CAAK;CAE5B,IAAM,IAAM,EAAM,KAAK,CAAC,CAAC,YAAY;CAErC,IAAI,CAAC,GAAK,OAAO,CAAC,GAAG,CAAK;CAE1B,IAAM,IAAa,IAAY,EAAa,CAAG,IAAI;CAEnD,OAAO,EAAM,QAAQ,MACf,KAAU,EAAO,SAAS,KAAK,OAAO,KAAS,YAAY,IACtD,EAAO,MAAM,MAClB,EAAW,EAAiC,IAAQ,GAAY,GAAW,GAAW,CAAQ,CAChG,IAGK,EAAU,GAAM,GAAY,GAAW,GAAW,CAAQ,CAClE;AACH;AAyBA,SAAgB,EAAc,GAAY,GAAe,IAA2B,CAAC,GAAsB;CACzG,IAAM,EAAE,WAAQ,eAAY,IAAO,eAAY,QAAS,GAClD,IAAW,EAAgB,EAAQ,QAAQ;CAEjD,IAAI,CAAC,KAAS,CAAC,EAAM,KAAK,GACxB,OAAO,EAAM,KAAK,OAAU;EAAE;EAAM,OAAO;CAAE,EAAE;CAGjD,IAAM,IAAM,EAAM,KAAK,CAAC,CAAC,YAAY,GAC/B,IAAa,IAAY,EAAa,CAAG,IAAI;CAenD,OAbe,EAAM,KAAK,OAUjB;EAAE;EAAM,OARb,KAAU,EAAO,SAAS,KAAK,OAAO,KAAS,YAAY,IACvD,EAAO,QACJ,GAAK,MACJ,KAAK,IAAI,GAAK,EAAW,EAAiC,IAAQ,GAAY,GAAW,CAAQ,CAAC,GACpG,CACF,IACA,EAAU,GAAM,GAAY,GAAW,CAAQ;CAEhC,EAGhB,CAAA,CAAO,QAAQ,EAAE,eAAY,KAAS,CAAS,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAC1F;AAiBA,SAAgB,EACd,GACA,GACA,IAAkD,CAAC,GAC1B;CACzB,IAAM,EAAE,WAAQ,GAAG,MAAS;CAE5B,OAAO,IAAS,EAAW,GAAO,GAAO,CAAI,IAAI,EAAY,GAAO,GAAO,CAAI;AACjF"}
@@ -0,0 +1,2 @@
1
+ const e=require("../errors.cjs"),t=require("./compare.cjs"),n=require("./compareBy.cjs");function r(r,i,a=`asc`){if(!Array.isArray(r))throw new e.ArsenalValidationError(`sort: first argument must be an array`);if(typeof i==`function`){let e=a===`desc`?-1:1;return[...r].sort((n,r)=>t.compare(i(n),i(r))*e)}return[...r].sort(n.compareBy(i))}exports.sort=r;
2
+ //# sourceMappingURL=sort.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort.cjs","names":[],"sources":["../../src/array/sort.ts"],"sourcesContent":["import { ArsenalValidationError } from '../errors';\nimport { compare } from './compare';\nimport { compareBy } from './compareBy';\n\nexport type SortDirection = 'asc' | 'desc';\nexport type SortSelectors<T> = Partial<Record<keyof T, SortDirection>>;\n\n/**\n * Sorts an array by a selector function (single-field) or by a multi-field\n * object of `{ key: 'asc' | 'desc' }` entries.\n *\n * @example\n * ```ts\n * // Single field\n * sort([{ a: 2 }, { a: 1 }], item => item.a); // [{ a:1 }, { a:2 }]\n * sort([{ a: 2 }, { a: 1 }], item => item.a, 'desc'); // [{ a:2 }, { a:1 }]\n *\n * // Multi-field\n * sort(users, { name: 'asc', age: 'desc' });\n * ```\n *\n * @param array - The array to sort.\n * @param selector - A function extracting the sort key, or a multi-field object.\n * @param direction - `'asc'` (default) or `'desc'` — only applies to single-field mode.\n * @returns A new sorted array.\n *\n * @throws {ArsenalValidationError} If the first argument is not an array.\n */\nexport function sort<T>(array: T[], selector: (item: T) => unknown, direction?: SortDirection): T[];\nexport function sort<T>(array: T[], selectors: SortSelectors<T>): T[];\nexport function sort<T>(\n array: T[],\n selectorOrSelectors: ((item: T) => unknown) | SortSelectors<T>,\n direction: SortDirection = 'asc',\n): T[] {\n if (!Array.isArray(array)) throw new ArsenalValidationError('sort: first argument must be an array');\n\n if (typeof selectorOrSelectors === 'function') {\n const multiplier = direction === 'desc' ? -1 : 1;\n\n return [...array].sort((a, b) => compare(selectorOrSelectors(a), selectorOrSelectors(b)) * multiplier);\n }\n\n return [...array].sort(compareBy(selectorOrSelectors));\n}\n"],"mappings":"yFA8BA,SAAgB,EACd,EACA,EACA,EAA2B,MACtB,CACL,GAAI,CAAC,MAAM,QAAQ,CAAK,EAAG,MAAM,IAAI,EAAA,uBAAuB,uCAAuC,EAEnG,GAAI,OAAO,GAAwB,WAAY,CAC7C,IAAM,EAAa,IAAc,OAAS,GAAK,EAE/C,MAAO,CAAC,GAAG,CAAK,CAAC,CAAC,MAAM,EAAG,IAAM,EAAA,QAAQ,EAAoB,CAAC,EAAG,EAAoB,CAAC,CAAC,EAAI,CAAU,CACvG,CAEA,MAAO,CAAC,GAAG,CAAK,CAAC,CAAC,KAAK,EAAA,UAAU,CAAmB,CAAC,CACvD"}
@@ -0,0 +1,26 @@
1
+ export type SortDirection = 'asc' | 'desc';
2
+ export type SortSelectors<T> = Partial<Record<keyof T, SortDirection>>;
3
+ /**
4
+ * Sorts an array by a selector function (single-field) or by a multi-field
5
+ * object of `{ key: 'asc' | 'desc' }` entries.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * // Single field
10
+ * sort([{ a: 2 }, { a: 1 }], item => item.a); // [{ a:1 }, { a:2 }]
11
+ * sort([{ a: 2 }, { a: 1 }], item => item.a, 'desc'); // [{ a:2 }, { a:1 }]
12
+ *
13
+ * // Multi-field
14
+ * sort(users, { name: 'asc', age: 'desc' });
15
+ * ```
16
+ *
17
+ * @param array - The array to sort.
18
+ * @param selector - A function extracting the sort key, or a multi-field object.
19
+ * @param direction - `'asc'` (default) or `'desc'` — only applies to single-field mode.
20
+ * @returns A new sorted array.
21
+ *
22
+ * @throws {ArsenalValidationError} If the first argument is not an array.
23
+ */
24
+ export declare function sort<T>(array: T[], selector: (item: T) => unknown, direction?: SortDirection): T[];
25
+ export declare function sort<T>(array: T[], selectors: SortSelectors<T>): T[];
26
+ //# sourceMappingURL=sort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../src/array/sort.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAC3C,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,EAAE,SAAS,CAAC,EAAE,aAAa,GAAG,CAAC,EAAE,CAAC;AACpG,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { ArsenalValidationError as e } from "../errors.js";
2
+ import { compare as t } from "./compare.js";
3
+ import { compareBy as n } from "./compareBy.js";
4
+ //#region src/array/sort.ts
5
+ function r(r, i, a = "asc") {
6
+ if (!Array.isArray(r)) throw new e("sort: first argument must be an array");
7
+ if (typeof i == "function") {
8
+ let e = a === "desc" ? -1 : 1;
9
+ return [...r].sort((n, r) => t(i(n), i(r)) * e);
10
+ }
11
+ return [...r].sort(n(i));
12
+ }
13
+ //#endregion
14
+ export { r as sort };
15
+
16
+ //# sourceMappingURL=sort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort.js","names":[],"sources":["../../src/array/sort.ts"],"sourcesContent":["import { ArsenalValidationError } from '../errors';\nimport { compare } from './compare';\nimport { compareBy } from './compareBy';\n\nexport type SortDirection = 'asc' | 'desc';\nexport type SortSelectors<T> = Partial<Record<keyof T, SortDirection>>;\n\n/**\n * Sorts an array by a selector function (single-field) or by a multi-field\n * object of `{ key: 'asc' | 'desc' }` entries.\n *\n * @example\n * ```ts\n * // Single field\n * sort([{ a: 2 }, { a: 1 }], item => item.a); // [{ a:1 }, { a:2 }]\n * sort([{ a: 2 }, { a: 1 }], item => item.a, 'desc'); // [{ a:2 }, { a:1 }]\n *\n * // Multi-field\n * sort(users, { name: 'asc', age: 'desc' });\n * ```\n *\n * @param array - The array to sort.\n * @param selector - A function extracting the sort key, or a multi-field object.\n * @param direction - `'asc'` (default) or `'desc'` — only applies to single-field mode.\n * @returns A new sorted array.\n *\n * @throws {ArsenalValidationError} If the first argument is not an array.\n */\nexport function sort<T>(array: T[], selector: (item: T) => unknown, direction?: SortDirection): T[];\nexport function sort<T>(array: T[], selectors: SortSelectors<T>): T[];\nexport function sort<T>(\n array: T[],\n selectorOrSelectors: ((item: T) => unknown) | SortSelectors<T>,\n direction: SortDirection = 'asc',\n): T[] {\n if (!Array.isArray(array)) throw new ArsenalValidationError('sort: first argument must be an array');\n\n if (typeof selectorOrSelectors === 'function') {\n const multiplier = direction === 'desc' ? -1 : 1;\n\n return [...array].sort((a, b) => compare(selectorOrSelectors(a), selectorOrSelectors(b)) * multiplier);\n }\n\n return [...array].sort(compareBy(selectorOrSelectors));\n}\n"],"mappings":";;;;AA8BA,SAAgB,EACd,GACA,GACA,IAA2B,OACtB;CACL,IAAI,CAAC,MAAM,QAAQ,CAAK,GAAG,MAAM,IAAI,EAAuB,uCAAuC;CAEnG,IAAI,OAAO,KAAwB,YAAY;EAC7C,IAAM,IAAa,MAAc,SAAS,KAAK;EAE/C,OAAO,CAAC,GAAG,CAAK,CAAC,CAAC,MAAM,GAAG,MAAM,EAAQ,EAAoB,CAAC,GAAG,EAAoB,CAAC,CAAC,IAAI,CAAU;CACvG;CAEA,OAAO,CAAC,GAAG,CAAK,CAAC,CAAC,KAAK,EAAU,CAAmB,CAAC;AACvD"}
@@ -0,0 +1,2 @@
1
+ function e(e,t=1){let n=Math.max(0,Math.floor(t));return e.slice(0,n)}exports.take=e;
2
+ //# sourceMappingURL=take.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"take.cjs","names":[],"sources":["../../src/array/take.ts"],"sourcesContent":["/**\n * Takes the first n elements from an array.\n */\nexport function take<T>(array: T[], n = 1): T[] {\n const count = Math.max(0, Math.floor(n));\n\n return array.slice(0, count);\n}\n"],"mappings":"AAGA,SAAgB,EAAQ,EAAY,EAAI,EAAQ,CAC9C,IAAM,EAAQ,KAAK,IAAI,EAAG,KAAK,MAAM,CAAC,CAAC,EAEvC,OAAO,EAAM,MAAM,EAAG,CAAK,CAC7B"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Takes the first n elements from an array.
3
+ */
4
+ export declare function take<T>(array: T[], n?: number): T[];
5
+ //# sourceMappingURL=take.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"take.d.ts","sourceRoot":"","sources":["../../src/array/take.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,SAAI,GAAG,CAAC,EAAE,CAI9C"}
@@ -0,0 +1,9 @@
1
+ //#region src/array/take.ts
2
+ function e(e, t = 1) {
3
+ let n = Math.max(0, Math.floor(t));
4
+ return e.slice(0, n);
5
+ }
6
+ //#endregion
7
+ export { e as take };
8
+
9
+ //# sourceMappingURL=take.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"take.js","names":[],"sources":["../../src/array/take.ts"],"sourcesContent":["/**\n * Takes the first n elements from an array.\n */\nexport function take<T>(array: T[], n = 1): T[] {\n const count = Math.max(0, Math.floor(n));\n\n return array.slice(0, count);\n}\n"],"mappings":";AAGA,SAAgB,EAAQ,GAAY,IAAI,GAAQ;CAC9C,IAAM,IAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC;CAEvC,OAAO,EAAM,MAAM,GAAG,CAAK;AAC7B"}
@@ -0,0 +1,2 @@
1
+ function e(e,t=1){let n=Math.max(0,Math.floor(t));return n===0?[]:e.slice(Math.max(0,e.length-n))}exports.takeLast=e;
2
+ //# sourceMappingURL=takeLast.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"takeLast.cjs","names":[],"sources":["../../src/array/takeLast.ts"],"sourcesContent":["/**\n * Takes the last n elements from an array.\n */\nexport function takeLast<T>(array: T[], n = 1): T[] {\n const count = Math.max(0, Math.floor(n));\n\n if (count === 0) return [];\n\n return array.slice(Math.max(0, array.length - count));\n}\n"],"mappings":"AAGA,SAAgB,EAAY,EAAY,EAAI,EAAQ,CAClD,IAAM,EAAQ,KAAK,IAAI,EAAG,KAAK,MAAM,CAAC,CAAC,EAIvC,OAFI,IAAU,EAAU,CAAC,EAElB,EAAM,MAAM,KAAK,IAAI,EAAG,EAAM,OAAS,CAAK,CAAC,CACtD"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Takes the last n elements from an array.
3
+ */
4
+ export declare function takeLast<T>(array: T[], n?: number): T[];
5
+ //# sourceMappingURL=takeLast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"takeLast.d.ts","sourceRoot":"","sources":["../../src/array/takeLast.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,SAAI,GAAG,CAAC,EAAE,CAMlD"}
@@ -0,0 +1,9 @@
1
+ //#region src/array/takeLast.ts
2
+ function e(e, t = 1) {
3
+ let n = Math.max(0, Math.floor(t));
4
+ return n === 0 ? [] : e.slice(Math.max(0, e.length - n));
5
+ }
6
+ //#endregion
7
+ export { e as takeLast };
8
+
9
+ //# sourceMappingURL=takeLast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"takeLast.js","names":[],"sources":["../../src/array/takeLast.ts"],"sourcesContent":["/**\n * Takes the last n elements from an array.\n */\nexport function takeLast<T>(array: T[], n = 1): T[] {\n const count = Math.max(0, Math.floor(n));\n\n if (count === 0) return [];\n\n return array.slice(Math.max(0, array.length - count));\n}\n"],"mappings":";AAGA,SAAgB,EAAY,GAAY,IAAI,GAAQ;CAClD,IAAM,IAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC;CAIvC,OAFI,MAAU,IAAU,CAAC,IAElB,EAAM,MAAM,KAAK,IAAI,GAAG,EAAM,SAAS,CAAK,CAAC;AACtD"}
@@ -0,0 +1,2 @@
1
+ function e(e,t,n,r={}){let{strategy:i=`append`}=r,a=n?e=>n(e)===n(t):e=>e===t,o=e.findIndex(a);return o===-1?i===`prepend`?[t,...e]:[...e,t]:[...e.slice(0,o),...e.slice(o+1)]}exports.toggle=e;
2
+ //# sourceMappingURL=toggle.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.cjs","names":[],"sources":["../../src/array/toggle.ts"],"sourcesContent":["import type { Primitive } from '../types';\n\n/**\n * Either adds or removes an item from an array, based on whether it already\n * exists in the array (toggle behaviour).\n *\n * @example\n * ```ts\n * toggle([1, 2, 3], 4) // [1, 2, 3, 4]\n * toggle([1, 2, 3], 2) // [1, 3]\n *\n * toggle(\n * [{ id: 1 }, { id: 2 }],\n * { id: 3 },\n * (obj) => obj.id,\n * { strategy: 'prepend' }\n * ) // [{ id: 3 }, { id: 1 }, { id: 2 }]\n * ```\n *\n * @param array - The array to modify.\n * @param item - The item to add or remove.\n * @param selector - A function to determine item identity.\n * @param [options] - Options for the toggle operation.\n * @param [options.strategy] - Where to insert when adding: 'prepend' or 'append' (default).\n * @returns A new array with the item toggled.\n */\nexport function toggle<T>(\n array: T[],\n item: T,\n selector?: (item: T) => Primitive,\n options: { strategy?: 'prepend' | 'append' } = {},\n): T[] {\n const { strategy = 'append' } = options;\n const compareFn = selector ? (el: T) => selector(el) === selector(item) : (el: T) => el === item;\n\n const index = array.findIndex(compareFn);\n\n if (index !== -1) {\n return [...array.slice(0, index), ...array.slice(index + 1)];\n }\n\n return strategy === 'prepend' ? [item, ...array] : [...array, item];\n}\n"],"mappings":"AA0BA,SAAgB,EACd,EACA,EACA,EACA,EAA+C,CAAC,EAC3C,CACL,GAAM,CAAE,WAAW,UAAa,EAC1B,EAAY,EAAY,GAAU,EAAS,CAAE,IAAM,EAAS,CAAI,EAAK,GAAU,IAAO,EAEtF,EAAQ,EAAM,UAAU,CAAS,EAMvC,OAJI,IAAU,GAIP,IAAa,UAAY,CAAC,EAAM,GAAG,CAAK,EAAI,CAAC,GAAG,EAAO,CAAI,EAHzD,CAAC,GAAG,EAAM,MAAM,EAAG,CAAK,EAAG,GAAG,EAAM,MAAM,EAAQ,CAAC,CAAC,CAI/D"}
@@ -0,0 +1,29 @@
1
+ import type { Primitive } from '../types';
2
+ /**
3
+ * Either adds or removes an item from an array, based on whether it already
4
+ * exists in the array (toggle behaviour).
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * toggle([1, 2, 3], 4) // [1, 2, 3, 4]
9
+ * toggle([1, 2, 3], 2) // [1, 3]
10
+ *
11
+ * toggle(
12
+ * [{ id: 1 }, { id: 2 }],
13
+ * { id: 3 },
14
+ * (obj) => obj.id,
15
+ * { strategy: 'prepend' }
16
+ * ) // [{ id: 3 }, { id: 1 }, { id: 2 }]
17
+ * ```
18
+ *
19
+ * @param array - The array to modify.
20
+ * @param item - The item to add or remove.
21
+ * @param selector - A function to determine item identity.
22
+ * @param [options] - Options for the toggle operation.
23
+ * @param [options.strategy] - Where to insert when adding: 'prepend' or 'append' (default).
24
+ * @returns A new array with the item toggled.
25
+ */
26
+ export declare function toggle<T>(array: T[], item: T, selector?: (item: T) => Primitive, options?: {
27
+ strategy?: 'prepend' | 'append';
28
+ }): T[];
29
+ //# sourceMappingURL=toggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../src/array/toggle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACtB,KAAK,EAAE,CAAC,EAAE,EACV,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,EACjC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAO,GAChD,CAAC,EAAE,CAWL"}
@@ -0,0 +1,9 @@
1
+ //#region src/array/toggle.ts
2
+ function e(e, t, n, r = {}) {
3
+ let { strategy: i = "append" } = r, a = n ? (e) => n(e) === n(t) : (e) => e === t, o = e.findIndex(a);
4
+ return o === -1 ? i === "prepend" ? [t, ...e] : [...e, t] : [...e.slice(0, o), ...e.slice(o + 1)];
5
+ }
6
+ //#endregion
7
+ export { e as toggle };
8
+
9
+ //# sourceMappingURL=toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.js","names":[],"sources":["../../src/array/toggle.ts"],"sourcesContent":["import type { Primitive } from '../types';\n\n/**\n * Either adds or removes an item from an array, based on whether it already\n * exists in the array (toggle behaviour).\n *\n * @example\n * ```ts\n * toggle([1, 2, 3], 4) // [1, 2, 3, 4]\n * toggle([1, 2, 3], 2) // [1, 3]\n *\n * toggle(\n * [{ id: 1 }, { id: 2 }],\n * { id: 3 },\n * (obj) => obj.id,\n * { strategy: 'prepend' }\n * ) // [{ id: 3 }, { id: 1 }, { id: 2 }]\n * ```\n *\n * @param array - The array to modify.\n * @param item - The item to add or remove.\n * @param selector - A function to determine item identity.\n * @param [options] - Options for the toggle operation.\n * @param [options.strategy] - Where to insert when adding: 'prepend' or 'append' (default).\n * @returns A new array with the item toggled.\n */\nexport function toggle<T>(\n array: T[],\n item: T,\n selector?: (item: T) => Primitive,\n options: { strategy?: 'prepend' | 'append' } = {},\n): T[] {\n const { strategy = 'append' } = options;\n const compareFn = selector ? (el: T) => selector(el) === selector(item) : (el: T) => el === item;\n\n const index = array.findIndex(compareFn);\n\n if (index !== -1) {\n return [...array.slice(0, index), ...array.slice(index + 1)];\n }\n\n return strategy === 'prepend' ? [item, ...array] : [...array, item];\n}\n"],"mappings":";AA0BA,SAAgB,EACd,GACA,GACA,GACA,IAA+C,CAAC,GAC3C;CACL,IAAM,EAAE,cAAW,aAAa,GAC1B,IAAY,KAAY,MAAU,EAAS,CAAE,MAAM,EAAS,CAAI,KAAK,MAAU,MAAO,GAEtF,IAAQ,EAAM,UAAU,CAAS;CAMvC,OAJI,MAAU,KAIP,MAAa,YAAY,CAAC,GAAM,GAAG,CAAK,IAAI,CAAC,GAAG,GAAO,CAAI,IAHzD,CAAC,GAAG,EAAM,MAAM,GAAG,CAAK,GAAG,GAAG,EAAM,MAAM,IAAQ,CAAC,CAAC;AAI/D"}
@@ -0,0 +1,2 @@
1
+ const e=require("../_common/_selectorSet.cjs");function t(t,n,r){return r?e.dedupeBySelector([...t,...n],r):[...new Set([...t,...n])]}exports.union=t;
2
+ //# sourceMappingURL=union.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union.cjs","names":[],"sources":["../../src/array/union.ts"],"sourcesContent":["import type { Primitive } from '../types';\n\nimport { dedupeBySelector } from '../_common/_selectorSet';\n\n/**\n * Returns a deduplicated union of both arrays.\n */\nexport function union<T>(source: T[], other: T[], selector?: (item: T) => Primitive): T[] {\n if (!selector) {\n return [...new Set([...source, ...other])];\n }\n\n return dedupeBySelector([...source, ...other], selector);\n}\n"],"mappings":"+CAOA,SAAgB,EAAS,EAAa,EAAY,EAAwC,CAKxF,OAJK,EAIE,EAAA,iBAAiB,CAAC,GAAG,EAAQ,GAAG,CAAK,EAAG,CAAQ,EAH9C,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAQ,GAAG,CAAK,CAAC,CAAC,CAI7C"}
@@ -0,0 +1,6 @@
1
+ import type { Primitive } from '../types';
2
+ /**
3
+ * Returns a deduplicated union of both arrays.
4
+ */
5
+ export declare function union<T>(source: T[], other: T[], selector?: (item: T) => Primitive): T[];
6
+ //# sourceMappingURL=union.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union.d.ts","sourceRoot":"","sources":["../../src/array/union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI1C;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,GAAG,CAAC,EAAE,CAMxF"}
@@ -0,0 +1,9 @@
1
+ import { dedupeBySelector as e } from "../_common/_selectorSet.js";
2
+ //#region src/array/union.ts
3
+ function t(t, n, r) {
4
+ return r ? e([...t, ...n], r) : [.../* @__PURE__ */ new Set([...t, ...n])];
5
+ }
6
+ //#endregion
7
+ export { t as union };
8
+
9
+ //# sourceMappingURL=union.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union.js","names":[],"sources":["../../src/array/union.ts"],"sourcesContent":["import type { Primitive } from '../types';\n\nimport { dedupeBySelector } from '../_common/_selectorSet';\n\n/**\n * Returns a deduplicated union of both arrays.\n */\nexport function union<T>(source: T[], other: T[], selector?: (item: T) => Primitive): T[] {\n if (!selector) {\n return [...new Set([...source, ...other])];\n }\n\n return dedupeBySelector([...source, ...other], selector);\n}\n"],"mappings":";;AAOA,SAAgB,EAAS,GAAa,GAAY,GAAwC;CAKxF,OAJK,IAIE,EAAiB,CAAC,GAAG,GAAQ,GAAG,CAAK,GAAG,CAAQ,IAH9C,CAAC,mBAAG,IAAI,IAAI,CAAC,GAAG,GAAQ,GAAG,CAAK,CAAC,CAAC;AAI7C"}
@@ -0,0 +1,2 @@
1
+ const e=require("../_common/_selectorSet.cjs");function t(t,n){return t.length<=1?[...t]:n?e.dedupeBySelector(t,n):[...new Set(t)]}exports.uniq=t;
2
+ //# sourceMappingURL=uniq.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniq.cjs","names":[],"sources":["../../src/array/uniq.ts"],"sourcesContent":["import type { Primitive } from '../types';\n\nimport { dedupeBySelector } from '../_common/_selectorSet';\n\n/**\n * Creates a new array with duplicate values removed.\n *\n * @example\n * ```ts\n * uniq([1, 2, 2, 3, 3, 3]); // [1, 2, 3]\n * const arrObj = [{ id: 1 }, { id: 2 }, { id: 2 }, { id: 3 }, { id: 3 }, { id: 3 }];\n * uniq(arrObj, item => item.id); // [{ id: 1 }, { id: 2 }, { id: 3 }]\n * ```\n *\n * @param array - The array to process.\n * @param [selector] - Function used to generate comparison values for each item.\n\n * @returns A new duplicate-free array.\n */\nexport function uniq<T>(array: T[], selector?: (item: T) => Primitive): T[] {\n if (array.length <= 1) {\n return [...array];\n }\n\n if (!selector) {\n return [...new Set(array)];\n }\n\n return dedupeBySelector(array, selector);\n}\n"],"mappings":"+CAmBA,SAAgB,EAAQ,EAAY,EAAwC,CAS1E,OARI,EAAM,QAAU,EACX,CAAC,GAAG,CAAK,EAGb,EAIE,EAAA,iBAAiB,EAAO,CAAQ,EAH9B,CAAC,GAAG,IAAI,IAAI,CAAK,CAAC,CAI7B"}
@@ -0,0 +1,18 @@
1
+ import type { Primitive } from '../types';
2
+ /**
3
+ * Creates a new array with duplicate values removed.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * uniq([1, 2, 2, 3, 3, 3]); // [1, 2, 3]
8
+ * const arrObj = [{ id: 1 }, { id: 2 }, { id: 2 }, { id: 3 }, { id: 3 }, { id: 3 }];
9
+ * uniq(arrObj, item => item.id); // [{ id: 1 }, { id: 2 }, { id: 3 }]
10
+ * ```
11
+ *
12
+ * @param array - The array to process.
13
+ * @param [selector] - Function used to generate comparison values for each item.
14
+
15
+ * @returns A new duplicate-free array.
16
+ */
17
+ export declare function uniq<T>(array: T[], selector?: (item: T) => Primitive): T[];
18
+ //# sourceMappingURL=uniq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniq.d.ts","sourceRoot":"","sources":["../../src/array/uniq.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI1C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,GAAG,CAAC,EAAE,CAU1E"}
@@ -0,0 +1,9 @@
1
+ import { dedupeBySelector as e } from "../_common/_selectorSet.js";
2
+ //#region src/array/uniq.ts
3
+ function t(t, n) {
4
+ return t.length <= 1 ? [...t] : n ? e(t, n) : [...new Set(t)];
5
+ }
6
+ //#endregion
7
+ export { t as uniq };
8
+
9
+ //# sourceMappingURL=uniq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniq.js","names":[],"sources":["../../src/array/uniq.ts"],"sourcesContent":["import type { Primitive } from '../types';\n\nimport { dedupeBySelector } from '../_common/_selectorSet';\n\n/**\n * Creates a new array with duplicate values removed.\n *\n * @example\n * ```ts\n * uniq([1, 2, 2, 3, 3, 3]); // [1, 2, 3]\n * const arrObj = [{ id: 1 }, { id: 2 }, { id: 2 }, { id: 3 }, { id: 3 }, { id: 3 }];\n * uniq(arrObj, item => item.id); // [{ id: 1 }, { id: 2 }, { id: 3 }]\n * ```\n *\n * @param array - The array to process.\n * @param [selector] - Function used to generate comparison values for each item.\n\n * @returns A new duplicate-free array.\n */\nexport function uniq<T>(array: T[], selector?: (item: T) => Primitive): T[] {\n if (array.length <= 1) {\n return [...array];\n }\n\n if (!selector) {\n return [...new Set(array)];\n }\n\n return dedupeBySelector(array, selector);\n}\n"],"mappings":";;AAmBA,SAAgB,EAAQ,GAAY,GAAwC;CAS1E,OARI,EAAM,UAAU,IACX,CAAC,GAAG,CAAK,IAGb,IAIE,EAAiB,GAAO,CAAQ,IAH9B,CAAC,GAAG,IAAI,IAAI,CAAK,CAAC;AAI7B"}
@@ -0,0 +1,2 @@
1
+ function e(e){if(e.length===0)return[];let t=e[0].length,n=Array.from({length:t},()=>[]);for(let r of e)for(let e=0;e<t;e++)n[e].push(r[e]);return n}exports.unzip=e;
2
+ //# sourceMappingURL=unzip.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unzip.cjs","names":[],"sources":["../../src/array/unzip.ts"],"sourcesContent":["/**\n * Transposes an array of tuples into tuple arrays.\n */\nexport function unzip<T extends readonly unknown[]>(rows: readonly T[]): { [K in keyof T]: Array<T[K]> } {\n if (rows.length === 0) return [] as unknown as { [K in keyof T]: Array<T[K]> };\n\n const width = rows[0].length;\n const out = Array.from({ length: width }, () => [] as unknown[]);\n\n for (const row of rows) {\n for (let index = 0; index < width; index++) {\n out[index].push(row[index]);\n }\n }\n\n return out as { [K in keyof T]: Array<T[K]> };\n}\n"],"mappings":"AAGA,SAAgB,EAAoC,EAAqD,CACvG,GAAI,EAAK,SAAW,EAAG,MAAO,CAAC,EAE/B,IAAM,EAAQ,EAAK,EAAE,CAAC,OAChB,EAAM,MAAM,KAAK,CAAE,OAAQ,CAAM,MAAS,CAAC,CAAc,EAE/D,IAAK,IAAM,KAAO,EAChB,IAAK,IAAI,EAAQ,EAAG,EAAQ,EAAO,IACjC,EAAI,EAAM,CAAC,KAAK,EAAI,EAAM,EAI9B,OAAO,CACT"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Transposes an array of tuples into tuple arrays.
3
+ */
4
+ export declare function unzip<T extends readonly unknown[]>(rows: readonly T[]): {
5
+ [K in keyof T]: Array<T[K]>;
6
+ };
7
+ //# sourceMappingURL=unzip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unzip.d.ts","sourceRoot":"","sources":["../../src/array/unzip.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAavG"}
@@ -0,0 +1,11 @@
1
+ //#region src/array/unzip.ts
2
+ function e(e) {
3
+ if (e.length === 0) return [];
4
+ let t = e[0].length, n = Array.from({ length: t }, () => []);
5
+ for (let r of e) for (let e = 0; e < t; e++) n[e].push(r[e]);
6
+ return n;
7
+ }
8
+ //#endregion
9
+ export { e as unzip };
10
+
11
+ //# sourceMappingURL=unzip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unzip.js","names":[],"sources":["../../src/array/unzip.ts"],"sourcesContent":["/**\n * Transposes an array of tuples into tuple arrays.\n */\nexport function unzip<T extends readonly unknown[]>(rows: readonly T[]): { [K in keyof T]: Array<T[K]> } {\n if (rows.length === 0) return [] as unknown as { [K in keyof T]: Array<T[K]> };\n\n const width = rows[0].length;\n const out = Array.from({ length: width }, () => [] as unknown[]);\n\n for (const row of rows) {\n for (let index = 0; index < width; index++) {\n out[index].push(row[index]);\n }\n }\n\n return out as { [K in keyof T]: Array<T[K]> };\n}\n"],"mappings":";AAGA,SAAgB,EAAoC,GAAqD;CACvG,IAAI,EAAK,WAAW,GAAG,OAAO,CAAC;CAE/B,IAAM,IAAQ,EAAK,EAAE,CAAC,QAChB,IAAM,MAAM,KAAK,EAAE,QAAQ,EAAM,SAAS,CAAC,CAAc;CAE/D,KAAK,IAAM,KAAO,GAChB,KAAK,IAAI,IAAQ,GAAG,IAAQ,GAAO,KACjC,EAAI,EAAM,CAAC,KAAK,EAAI,EAAM;CAI9B,OAAO;AACT"}
@@ -0,0 +1,2 @@
1
+ function e(...e){if(e.length===0)return[];let t=Math.max(...e.map(e=>e.length)),n=Array(t);for(let r=0;r<t;r++)n[r]=e.map(e=>e[r]);return n}exports.zip=e;
2
+ //# sourceMappingURL=zip.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.cjs","names":[],"sources":["../../src/array/zip.ts"],"sourcesContent":["/**\n * Zips multiple arrays by index.\n */\nexport function zip<T extends readonly unknown[][]>(\n ...arrays: T\n): Array<{ [K in keyof T]: T[K] extends readonly (infer U)[] ? U | undefined : never }> {\n if (arrays.length === 0) return [];\n\n const length = Math.max(...arrays.map((arr) => arr.length));\n const out = new Array(length);\n\n for (let index = 0; index < length; index++) {\n out[index] = arrays.map((array) => array[index]);\n }\n\n return out as Array<{ [K in keyof T]: T[K] extends readonly (infer U)[] ? U | undefined : never }>;\n}\n"],"mappings":"AAGA,SAAgB,EACd,GAAG,EACmF,CACtF,GAAI,EAAO,SAAW,EAAG,MAAO,CAAC,EAEjC,IAAM,EAAS,KAAK,IAAI,GAAG,EAAO,IAAK,GAAQ,EAAI,MAAM,CAAC,EACpD,EAAU,MAAM,CAAM,EAE5B,IAAK,IAAI,EAAQ,EAAG,EAAQ,EAAQ,IAClC,EAAI,GAAS,EAAO,IAAK,GAAU,EAAM,EAAM,EAGjD,OAAO,CACT"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Zips multiple arrays by index.
3
+ */
4
+ export declare function zip<T extends readonly unknown[][]>(...arrays: T): Array<{
5
+ [K in keyof T]: T[K] extends readonly (infer U)[] ? U | undefined : never;
6
+ }>;
7
+ //# sourceMappingURL=zip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../../src/array/zip.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,EAChD,GAAG,MAAM,EAAE,CAAC,GACX,KAAK,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,KAAK;CAAE,CAAC,CAWtF"}
@@ -0,0 +1,11 @@
1
+ //#region src/array/zip.ts
2
+ function e(...e) {
3
+ if (e.length === 0) return [];
4
+ let t = Math.max(...e.map((e) => e.length)), n = Array(t);
5
+ for (let r = 0; r < t; r++) n[r] = e.map((e) => e[r]);
6
+ return n;
7
+ }
8
+ //#endregion
9
+ export { e as zip };
10
+
11
+ //# sourceMappingURL=zip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.js","names":[],"sources":["../../src/array/zip.ts"],"sourcesContent":["/**\n * Zips multiple arrays by index.\n */\nexport function zip<T extends readonly unknown[][]>(\n ...arrays: T\n): Array<{ [K in keyof T]: T[K] extends readonly (infer U)[] ? U | undefined : never }> {\n if (arrays.length === 0) return [];\n\n const length = Math.max(...arrays.map((arr) => arr.length));\n const out = new Array(length);\n\n for (let index = 0; index < length; index++) {\n out[index] = arrays.map((array) => array[index]);\n }\n\n return out as Array<{ [K in keyof T]: T[K] extends readonly (infer U)[] ? U | undefined : never }>;\n}\n"],"mappings":";AAGA,SAAgB,EACd,GAAG,GACmF;CACtF,IAAI,EAAO,WAAW,GAAG,OAAO,CAAC;CAEjC,IAAM,IAAS,KAAK,IAAI,GAAG,EAAO,KAAK,MAAQ,EAAI,MAAM,CAAC,GACpD,IAAU,MAAM,CAAM;CAE5B,KAAK,IAAI,IAAQ,GAAG,IAAQ,GAAQ,KAClC,EAAI,KAAS,EAAO,KAAK,MAAU,EAAM,EAAM;CAGjD,OAAO;AACT"}