nhb-toolbox 4.10.74 → 4.10.76

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 (560) hide show
  1. package/dist/array/Finder.d.mts +83 -0
  2. package/dist/{dts/array → array}/Finder.d.ts +7 -5
  3. package/dist/array/Finder.js +300 -0
  4. package/dist/array/Finder.js.map +1 -0
  5. package/dist/array/Finder.mjs +276 -0
  6. package/dist/array/Finder.mjs.map +1 -0
  7. package/dist/array/basics.d.mts +45 -0
  8. package/dist/{dts/array → array}/basics.d.ts +11 -8
  9. package/dist/array/basics.js +76 -0
  10. package/dist/array/basics.js.map +1 -0
  11. package/dist/array/basics.mjs +48 -0
  12. package/dist/array/basics.mjs.map +1 -0
  13. package/dist/array/sort.d.mts +24 -0
  14. package/dist/{dts/array → array}/sort.d.ts +8 -5
  15. package/dist/array/sort.js +75 -0
  16. package/dist/array/sort.js.map +1 -0
  17. package/dist/array/sort.mjs +55 -0
  18. package/dist/array/sort.mjs.map +1 -0
  19. package/dist/{esm/array/transform.js → array/transform.d.mts} +15 -62
  20. package/dist/{dts/array → array}/transform.d.ts +13 -10
  21. package/dist/array/transform.js +105 -0
  22. package/dist/array/transform.js.map +1 -0
  23. package/dist/array/transform.mjs +75 -0
  24. package/dist/array/transform.mjs.map +1 -0
  25. package/dist/array/types.d.mts +116 -0
  26. package/dist/{dts/array → array}/types.d.ts +16 -14
  27. package/dist/array/types.js +17 -0
  28. package/dist/array/types.js.map +1 -0
  29. package/dist/array/types.mjs +1 -0
  30. package/dist/array/types.mjs.map +1 -0
  31. package/dist/array/utils.d.mts +18 -0
  32. package/dist/{dts/array → array}/utils.d.ts +7 -3
  33. package/dist/array/utils.js +83 -0
  34. package/dist/array/utils.js.map +1 -0
  35. package/dist/array/utils.mjs +59 -0
  36. package/dist/array/utils.mjs.map +1 -0
  37. package/dist/colors/Color.d.mts +4 -0
  38. package/dist/colors/Color.d.ts +4 -0
  39. package/dist/colors/Color.js +444 -0
  40. package/dist/colors/Color.js.map +1 -0
  41. package/dist/colors/Color.mjs +426 -0
  42. package/dist/colors/Color.mjs.map +1 -0
  43. package/dist/colors/constants.d.mts +7 -0
  44. package/dist/colors/constants.d.ts +7 -0
  45. package/dist/colors/constants.js +175 -0
  46. package/dist/colors/constants.js.map +1 -0
  47. package/dist/colors/constants.mjs +149 -0
  48. package/dist/colors/constants.mjs.map +1 -0
  49. package/dist/colors/convert.d.mts +189 -0
  50. package/dist/{dts/colors → colors}/convert.d.ts +26 -21
  51. package/dist/colors/convert.js +240 -0
  52. package/dist/colors/convert.js.map +1 -0
  53. package/dist/colors/convert.mjs +212 -0
  54. package/dist/colors/convert.mjs.map +1 -0
  55. package/dist/colors/css-colors.d.mts +161 -0
  56. package/dist/{dts/colors → colors}/css-colors.d.ts +3 -2
  57. package/dist/colors/css-colors.js +187 -0
  58. package/dist/colors/css-colors.js.map +1 -0
  59. package/dist/colors/css-colors.mjs +163 -0
  60. package/dist/colors/css-colors.mjs.map +1 -0
  61. package/dist/colors/helpers.d.mts +91 -0
  62. package/dist/{dts/colors → colors}/helpers.d.ts +21 -16
  63. package/dist/colors/helpers.js +136 -0
  64. package/dist/colors/helpers.js.map +1 -0
  65. package/dist/colors/helpers.mjs +99 -0
  66. package/dist/colors/helpers.mjs.map +1 -0
  67. package/dist/colors/initials.d.mts +30 -0
  68. package/dist/{dts/colors → colors}/initials.d.ts +9 -4
  69. package/dist/colors/initials.js +72 -0
  70. package/dist/colors/initials.js.map +1 -0
  71. package/dist/colors/initials.mjs +48 -0
  72. package/dist/colors/initials.mjs.map +1 -0
  73. package/dist/colors/random.d.mts +24 -0
  74. package/dist/{dts/colors → colors}/random.d.ts +9 -4
  75. package/dist/colors/random.js +49 -0
  76. package/dist/colors/random.js.map +1 -0
  77. package/dist/colors/random.mjs +24 -0
  78. package/dist/colors/random.mjs.map +1 -0
  79. package/dist/colors/types.d.mts +4 -0
  80. package/dist/colors/types.d.ts +4 -0
  81. package/dist/colors/types.js +17 -0
  82. package/dist/colors/types.js.map +1 -0
  83. package/dist/colors/types.mjs +1 -0
  84. package/dist/colors/types.mjs.map +1 -0
  85. package/dist/{esm/colors/utils.js → colors/utils.d.mts} +9 -13
  86. package/dist/{dts/colors → colors}/utils.d.ts +9 -4
  87. package/dist/colors/utils.js +47 -0
  88. package/dist/colors/utils.js.map +1 -0
  89. package/dist/colors/utils.mjs +22 -0
  90. package/dist/colors/utils.mjs.map +1 -0
  91. package/dist/date/Chronos.d.mts +3 -0
  92. package/dist/date/Chronos.d.ts +3 -0
  93. package/dist/date/Chronos.js +1906 -0
  94. package/dist/date/Chronos.js.map +1 -0
  95. package/dist/date/Chronos.mjs +1891 -0
  96. package/dist/date/Chronos.mjs.map +1 -0
  97. package/dist/date/chronos-fn.d.mts +41 -0
  98. package/dist/{dts/date → date}/chronos-fn.d.ts +5 -2
  99. package/dist/date/chronos-fn.js +52 -0
  100. package/dist/date/chronos-fn.js.map +1 -0
  101. package/dist/date/chronos-fn.mjs +28 -0
  102. package/dist/date/chronos-fn.mjs.map +1 -0
  103. package/dist/date/constants.d.mts +3 -0
  104. package/dist/date/constants.d.ts +3 -0
  105. package/dist/date/constants.js +469 -0
  106. package/dist/date/constants.js.map +1 -0
  107. package/dist/date/constants.mjs +429 -0
  108. package/dist/date/constants.mjs.map +1 -0
  109. package/dist/date/greet.d.mts +13 -0
  110. package/dist/date/greet.d.ts +13 -0
  111. package/dist/date/greet.js +75 -0
  112. package/dist/date/greet.js.map +1 -0
  113. package/dist/date/greet.mjs +55 -0
  114. package/dist/date/greet.mjs.map +1 -0
  115. package/dist/date/guards.d.mts +36 -0
  116. package/dist/{dts/date → date}/guards.d.ts +11 -7
  117. package/dist/date/guards.js +72 -0
  118. package/dist/date/guards.js.map +1 -0
  119. package/dist/date/guards.mjs +45 -0
  120. package/dist/date/guards.mjs.map +1 -0
  121. package/dist/date/types.d.mts +3 -0
  122. package/dist/date/types.d.ts +3 -0
  123. package/dist/date/types.js +17 -0
  124. package/dist/date/types.js.map +1 -0
  125. package/dist/date/types.mjs +1 -0
  126. package/dist/date/types.mjs.map +1 -0
  127. package/dist/{esm/date/utils.js → date/utils.d.mts} +13 -27
  128. package/dist/{dts/date → date}/utils.d.ts +13 -9
  129. package/dist/date/utils.js +67 -0
  130. package/dist/date/utils.js.map +1 -0
  131. package/dist/date/utils.mjs +38 -0
  132. package/dist/date/utils.mjs.map +1 -0
  133. package/dist/dom/query.d.mts +46 -0
  134. package/dist/{dts/dom → dom}/query.d.ts +10 -7
  135. package/dist/dom/query.js +78 -0
  136. package/dist/dom/query.js.map +1 -0
  137. package/dist/dom/query.mjs +51 -0
  138. package/dist/dom/query.mjs.map +1 -0
  139. package/dist/{esm/dom/storage.js → dom/storage.d.mts} +8 -26
  140. package/dist/{dts/dom → dom}/storage.d.ts +8 -7
  141. package/dist/dom/storage.js +60 -0
  142. package/dist/dom/storage.js.map +1 -0
  143. package/dist/dom/storage.mjs +31 -0
  144. package/dist/dom/storage.mjs.map +1 -0
  145. package/dist/dom/utils.d.mts +19 -0
  146. package/dist/{dts/dom → dom}/utils.d.ts +5 -4
  147. package/dist/dom/utils.js +85 -0
  148. package/dist/dom/utils.js.map +1 -0
  149. package/dist/dom/utils.mjs +59 -0
  150. package/dist/dom/utils.mjs.map +1 -0
  151. package/dist/form/convert.d.mts +16 -0
  152. package/dist/{dts/form → form}/convert.d.ts +8 -4
  153. package/dist/form/convert.js +207 -0
  154. package/dist/form/convert.js.map +1 -0
  155. package/dist/form/convert.mjs +194 -0
  156. package/dist/form/convert.mjs.map +1 -0
  157. package/dist/{esm/form/guards.js → form/guards.d.mts} +15 -47
  158. package/dist/{dts/form → form}/guards.d.ts +15 -10
  159. package/dist/form/guards.js +86 -0
  160. package/dist/form/guards.js.map +1 -0
  161. package/dist/form/guards.mjs +55 -0
  162. package/dist/form/guards.mjs.map +1 -0
  163. package/dist/form/transform.d.mts +24 -0
  164. package/dist/{dts/form → form}/transform.d.ts +9 -4
  165. package/dist/form/transform.js +90 -0
  166. package/dist/form/transform.js.map +1 -0
  167. package/dist/form/transform.mjs +65 -0
  168. package/dist/form/transform.mjs.map +1 -0
  169. package/dist/form/types.d.mts +102 -0
  170. package/dist/{dts/form → form}/types.d.ts +13 -10
  171. package/dist/form/types.js +17 -0
  172. package/dist/form/types.js.map +1 -0
  173. package/dist/form/types.mjs +1 -0
  174. package/dist/form/types.mjs.map +1 -0
  175. package/dist/{esm/guards/non-primitives.js → guards/non-primitives.d.mts} +22 -60
  176. package/dist/{dts/guards → guards}/non-primitives.d.ts +22 -20
  177. package/dist/guards/non-primitives.js +118 -0
  178. package/dist/guards/non-primitives.js.map +1 -0
  179. package/dist/guards/non-primitives.mjs +78 -0
  180. package/dist/guards/non-primitives.mjs.map +1 -0
  181. package/dist/{esm/guards/primitives.js → guards/primitives.d.mts} +18 -51
  182. package/dist/{dts/guards → guards}/primitives.d.ts +18 -16
  183. package/dist/guards/primitives.js +103 -0
  184. package/dist/guards/primitives.js.map +1 -0
  185. package/dist/guards/primitives.mjs +66 -0
  186. package/dist/guards/primitives.mjs.map +1 -0
  187. package/dist/{esm/guards/specials.js → guards/specials.d.mts} +14 -50
  188. package/dist/{dts/guards → guards}/specials.d.ts +14 -13
  189. package/dist/guards/specials.js +97 -0
  190. package/dist/guards/specials.js.map +1 -0
  191. package/dist/guards/specials.mjs +62 -0
  192. package/dist/guards/specials.mjs.map +1 -0
  193. package/dist/{esm/index.js → index.d.mts} +54 -72
  194. package/dist/{dts/index.d.ts → index.d.ts} +54 -61
  195. package/dist/index.js +679 -0
  196. package/dist/index.js.map +1 -0
  197. package/dist/index.mjs +666 -0
  198. package/dist/index.mjs.map +1 -0
  199. package/dist/{esm/number/Currency.js → number/Currency.d.mts} +13 -59
  200. package/dist/{dts/number → number}/Currency.d.ts +7 -4
  201. package/dist/number/Currency.js +130 -0
  202. package/dist/number/Currency.js.map +1 -0
  203. package/dist/number/Currency.mjs +106 -0
  204. package/dist/number/Currency.mjs.map +1 -0
  205. package/dist/number/Unit.d.mts +2 -0
  206. package/dist/number/Unit.d.ts +2 -0
  207. package/dist/number/Unit.js +375 -0
  208. package/dist/number/Unit.js.map +1 -0
  209. package/dist/number/Unit.mjs +351 -0
  210. package/dist/number/Unit.mjs.map +1 -0
  211. package/dist/number/basics.d.mts +78 -0
  212. package/dist/{dts/number → number}/basics.d.ts +15 -12
  213. package/dist/number/basics.js +133 -0
  214. package/dist/number/basics.js.map +1 -0
  215. package/dist/number/basics.mjs +101 -0
  216. package/dist/number/basics.mjs.map +1 -0
  217. package/dist/number/constants.d.mts +233 -0
  218. package/dist/{dts/number → number}/constants.d.ts +12 -11
  219. package/dist/number/constants.js +805 -0
  220. package/dist/number/constants.js.map +1 -0
  221. package/dist/number/constants.mjs +772 -0
  222. package/dist/number/constants.mjs.map +1 -0
  223. package/dist/number/convert.d.mts +20 -0
  224. package/dist/{dts/number → number}/convert.d.ts +6 -4
  225. package/dist/number/convert.js +85 -0
  226. package/dist/number/convert.js.map +1 -0
  227. package/dist/number/convert.mjs +60 -0
  228. package/dist/number/convert.mjs.map +1 -0
  229. package/dist/number/fibonacci.d.mts +33 -0
  230. package/dist/{dts/number → number}/fibonacci.d.ts +8 -6
  231. package/dist/number/fibonacci.js +84 -0
  232. package/dist/number/fibonacci.js.map +1 -0
  233. package/dist/number/fibonacci.mjs +57 -0
  234. package/dist/number/fibonacci.mjs.map +1 -0
  235. package/dist/{esm/number/guards.js → number/guards.d.mts} +8 -18
  236. package/dist/{dts/number → number}/guards.d.ts +8 -7
  237. package/dist/number/guards.js +56 -0
  238. package/dist/number/guards.js.map +1 -0
  239. package/dist/number/guards.mjs +27 -0
  240. package/dist/number/guards.mjs.map +1 -0
  241. package/dist/number/helpers.d.mts +32 -0
  242. package/dist/{dts/number → number}/helpers.d.ts +6 -5
  243. package/dist/number/helpers.js +66 -0
  244. package/dist/number/helpers.js.map +1 -0
  245. package/dist/number/helpers.mjs +39 -0
  246. package/dist/number/helpers.mjs.map +1 -0
  247. package/dist/number/percent.d.mts +20 -0
  248. package/dist/{dts/number → number}/percent.d.ts +6 -3
  249. package/dist/number/percent.js +97 -0
  250. package/dist/number/percent.js.map +1 -0
  251. package/dist/number/percent.mjs +73 -0
  252. package/dist/number/percent.mjs.map +1 -0
  253. package/dist/number/prime.d.mts +17 -0
  254. package/dist/{dts/number → number}/prime.d.ts +4 -3
  255. package/dist/number/prime.js +49 -0
  256. package/dist/number/prime.js.map +1 -0
  257. package/dist/number/prime.mjs +24 -0
  258. package/dist/number/prime.mjs.map +1 -0
  259. package/dist/number/range.d.mts +14 -0
  260. package/dist/{dts/number → number}/range.d.ts +6 -3
  261. package/dist/number/range.js +98 -0
  262. package/dist/number/range.js.map +1 -0
  263. package/dist/number/range.mjs +74 -0
  264. package/dist/number/range.mjs.map +1 -0
  265. package/dist/number/types.d.mts +2 -0
  266. package/dist/number/types.d.ts +2 -0
  267. package/dist/number/types.js +17 -0
  268. package/dist/number/types.js.map +1 -0
  269. package/dist/number/types.mjs +1 -0
  270. package/dist/number/types.mjs.map +1 -0
  271. package/dist/{esm/number/utilities.js → number/utilities.d.mts} +11 -35
  272. package/dist/{dts/number → number}/utilities.d.ts +11 -8
  273. package/dist/number/utilities.js +68 -0
  274. package/dist/number/utilities.js.map +1 -0
  275. package/dist/number/utilities.mjs +40 -0
  276. package/dist/number/utilities.mjs.map +1 -0
  277. package/dist/object/basics.d.mts +19 -0
  278. package/dist/object/basics.d.ts +19 -0
  279. package/dist/object/basics.js +37 -0
  280. package/dist/object/basics.js.map +1 -0
  281. package/dist/object/basics.mjs +12 -0
  282. package/dist/object/basics.mjs.map +1 -0
  283. package/dist/object/convert.d.mts +75 -0
  284. package/dist/{dts/object → object}/convert.d.ts +10 -7
  285. package/dist/object/convert.js +98 -0
  286. package/dist/object/convert.js.map +1 -0
  287. package/dist/object/convert.mjs +71 -0
  288. package/dist/object/convert.mjs.map +1 -0
  289. package/dist/object/objectify.d.mts +77 -0
  290. package/dist/{dts/object → object}/objectify.d.ts +13 -11
  291. package/dist/object/objectify.js +188 -0
  292. package/dist/object/objectify.js.map +1 -0
  293. package/dist/object/objectify.mjs +161 -0
  294. package/dist/object/objectify.mjs.map +1 -0
  295. package/dist/object/sanitize.d.mts +53 -0
  296. package/dist/{dts/object → object}/sanitize.d.ts +10 -8
  297. package/dist/object/sanitize.js +154 -0
  298. package/dist/object/sanitize.js.map +1 -0
  299. package/dist/object/sanitize.mjs +133 -0
  300. package/dist/object/sanitize.mjs.map +1 -0
  301. package/dist/object/types.d.mts +77 -0
  302. package/dist/{dts/object → object}/types.d.ts +18 -16
  303. package/dist/object/types.js +17 -0
  304. package/dist/object/types.js.map +1 -0
  305. package/dist/object/types.mjs +1 -0
  306. package/dist/object/types.mjs.map +1 -0
  307. package/dist/string/anagram.d.mts +9 -0
  308. package/dist/{dts/string → string}/anagram.d.ts +3 -2
  309. package/dist/string/anagram.js +49 -0
  310. package/dist/string/anagram.js.map +1 -0
  311. package/dist/string/anagram.mjs +25 -0
  312. package/dist/string/anagram.mjs.map +1 -0
  313. package/dist/string/basics.d.mts +42 -0
  314. package/dist/{dts/string → string}/basics.d.ts +9 -7
  315. package/dist/string/basics.js +106 -0
  316. package/dist/string/basics.js.map +1 -0
  317. package/dist/string/basics.mjs +79 -0
  318. package/dist/string/basics.mjs.map +1 -0
  319. package/dist/string/constants.d.mts +3 -0
  320. package/dist/string/constants.d.ts +3 -0
  321. package/dist/string/constants.js +155 -0
  322. package/dist/string/constants.js.map +1 -0
  323. package/dist/string/constants.mjs +131 -0
  324. package/dist/string/constants.mjs.map +1 -0
  325. package/dist/string/convert.d.mts +88 -0
  326. package/dist/{dts/string → string}/convert.d.ts +13 -11
  327. package/dist/string/convert.js +127 -0
  328. package/dist/string/convert.js.map +1 -0
  329. package/dist/string/convert.mjs +95 -0
  330. package/dist/string/convert.mjs.map +1 -0
  331. package/dist/{esm/string/guards.js → string/guards.d.mts} +8 -20
  332. package/dist/{dts/string → string}/guards.d.ts +8 -7
  333. package/dist/string/guards.js +58 -0
  334. package/dist/string/guards.js.map +1 -0
  335. package/dist/string/guards.mjs +29 -0
  336. package/dist/string/guards.mjs.map +1 -0
  337. package/dist/string/types.d.mts +46 -0
  338. package/dist/{dts/string → string}/types.d.ts +8 -7
  339. package/dist/string/types.js +17 -0
  340. package/dist/string/types.js.map +1 -0
  341. package/dist/string/types.mjs +1 -0
  342. package/dist/string/types.mjs.map +1 -0
  343. package/dist/string/utilities.d.mts +22 -0
  344. package/dist/{dts/string → string}/utilities.d.ts +5 -4
  345. package/dist/string/utilities.js +55 -0
  346. package/dist/string/utilities.js.map +1 -0
  347. package/dist/string/utilities.mjs +29 -0
  348. package/dist/string/utilities.mjs.map +1 -0
  349. package/dist/types/index.d.mts +72 -0
  350. package/dist/{dts/types → types}/index.d.ts +22 -22
  351. package/dist/types/index.js +17 -0
  352. package/dist/types/index.js.map +1 -0
  353. package/dist/types/index.mjs +1 -0
  354. package/dist/types/index.mjs.map +1 -0
  355. package/dist/{dts/date/Chronos.d.ts → types-8d00ijOX.d.ts} +656 -5
  356. package/dist/{dts/colors/Color.d.ts → types-B0QxRCuz.d.ts} +131 -3
  357. package/dist/types-B6eLs9ZP.d.mts +380 -0
  358. package/dist/{dts/number/Unit.d.ts → types-C_admqGT.d.ts} +136 -3
  359. package/dist/types-Dn5jclFT.d.mts +1490 -0
  360. package/dist/types-Dtit1n8Z.d.mts +336 -0
  361. package/dist/utils/Paginator.d.mts +128 -0
  362. package/dist/{dts/utils → utils}/Paginator.d.ts +6 -3
  363. package/dist/utils/Paginator.js +271 -0
  364. package/dist/utils/Paginator.js.map +1 -0
  365. package/dist/utils/Paginator.mjs +247 -0
  366. package/dist/utils/Paginator.mjs.map +1 -0
  367. package/dist/utils/index.d.mts +110 -0
  368. package/dist/{dts/utils → utils}/index.d.ts +15 -13
  369. package/dist/utils/index.js +166 -0
  370. package/dist/utils/index.js.map +1 -0
  371. package/dist/utils/index.mjs +132 -0
  372. package/dist/utils/index.mjs.map +1 -0
  373. package/dist/utils/types.d.mts +43 -0
  374. package/dist/{dts/utils → utils}/types.d.ts +8 -6
  375. package/dist/utils/types.js +17 -0
  376. package/dist/utils/types.js.map +1 -0
  377. package/dist/utils/types.mjs +1 -0
  378. package/dist/utils/types.mjs.map +1 -0
  379. package/package.json +36 -35
  380. package/dist/cjs/array/Finder.js +0 -289
  381. package/dist/cjs/array/basics.js +0 -83
  382. package/dist/cjs/array/sort.js +0 -70
  383. package/dist/cjs/array/transform.js +0 -128
  384. package/dist/cjs/array/types.js +0 -2
  385. package/dist/cjs/array/utils.js +0 -81
  386. package/dist/cjs/colors/Color.js +0 -452
  387. package/dist/cjs/colors/constants.js +0 -53
  388. package/dist/cjs/colors/convert.js +0 -323
  389. package/dist/cjs/colors/css-colors.js +0 -162
  390. package/dist/cjs/colors/helpers.js +0 -178
  391. package/dist/cjs/colors/initials.js +0 -61
  392. package/dist/cjs/colors/random.js +0 -42
  393. package/dist/cjs/colors/types.js +0 -2
  394. package/dist/cjs/colors/utils.js +0 -36
  395. package/dist/cjs/date/Chronos.js +0 -1887
  396. package/dist/cjs/date/chronos-fn.js +0 -115
  397. package/dist/cjs/date/constants.js +0 -412
  398. package/dist/cjs/date/greet.js +0 -47
  399. package/dist/cjs/date/guards.js +0 -85
  400. package/dist/cjs/date/types.js +0 -2
  401. package/dist/cjs/date/utils.js +0 -71
  402. package/dist/cjs/dom/query.js +0 -87
  403. package/dist/cjs/dom/storage.js +0 -69
  404. package/dist/cjs/dom/utils.js +0 -78
  405. package/dist/cjs/form/convert.js +0 -239
  406. package/dist/cjs/form/guards.js +0 -102
  407. package/dist/cjs/form/transform.js +0 -93
  408. package/dist/cjs/form/types.js +0 -2
  409. package/dist/cjs/guards/non-primitives.js +0 -168
  410. package/dist/cjs/guards/primitives.js +0 -137
  411. package/dist/cjs/guards/specials.js +0 -122
  412. package/dist/cjs/index.js +0 -385
  413. package/dist/cjs/number/Currency.js +0 -108
  414. package/dist/cjs/number/Unit.js +0 -368
  415. package/dist/cjs/number/basics.js +0 -169
  416. package/dist/cjs/number/constants.js +0 -607
  417. package/dist/cjs/number/convert.js +0 -75
  418. package/dist/cjs/number/fibonacci.js +0 -89
  419. package/dist/cjs/number/guards.js +0 -64
  420. package/dist/cjs/number/helpers.js +0 -71
  421. package/dist/cjs/number/percent.js +0 -92
  422. package/dist/cjs/number/prime.js +0 -38
  423. package/dist/cjs/number/range.js +0 -79
  424. package/dist/cjs/number/types.js +0 -2
  425. package/dist/cjs/number/utilities.js +0 -87
  426. package/dist/cjs/object/basics.js +0 -25
  427. package/dist/cjs/object/convert.js +0 -124
  428. package/dist/cjs/object/objectify.js +0 -246
  429. package/dist/cjs/object/sanitize.js +0 -208
  430. package/dist/cjs/object/types.js +0 -2
  431. package/dist/cjs/string/anagram.js +0 -33
  432. package/dist/cjs/string/basics.js +0 -110
  433. package/dist/cjs/string/constants.js +0 -130
  434. package/dist/cjs/string/convert.js +0 -189
  435. package/dist/cjs/string/guards.js +0 -59
  436. package/dist/cjs/string/types.js +0 -2
  437. package/dist/cjs/string/utilities.js +0 -45
  438. package/dist/cjs/types/index.js +0 -2
  439. package/dist/cjs/utils/Paginator.js +0 -235
  440. package/dist/cjs/utils/index.js +0 -238
  441. package/dist/cjs/utils/types.js +0 -2
  442. package/dist/dts/array/Finder.d.ts.map +0 -1
  443. package/dist/dts/array/basics.d.ts.map +0 -1
  444. package/dist/dts/array/sort.d.ts.map +0 -1
  445. package/dist/dts/array/transform.d.ts.map +0 -1
  446. package/dist/dts/array/types.d.ts.map +0 -1
  447. package/dist/dts/array/utils.d.ts.map +0 -1
  448. package/dist/dts/colors/Color.d.ts.map +0 -1
  449. package/dist/dts/colors/constants.d.ts +0 -6
  450. package/dist/dts/colors/constants.d.ts.map +0 -1
  451. package/dist/dts/colors/convert.d.ts.map +0 -1
  452. package/dist/dts/colors/css-colors.d.ts.map +0 -1
  453. package/dist/dts/colors/helpers.d.ts.map +0 -1
  454. package/dist/dts/colors/initials.d.ts.map +0 -1
  455. package/dist/dts/colors/random.d.ts.map +0 -1
  456. package/dist/dts/colors/types.d.ts +0 -128
  457. package/dist/dts/colors/types.d.ts.map +0 -1
  458. package/dist/dts/colors/utils.d.ts.map +0 -1
  459. package/dist/dts/date/Chronos.d.ts.map +0 -1
  460. package/dist/dts/date/chronos-fn.d.ts.map +0 -1
  461. package/dist/dts/date/constants.d.ts +0 -297
  462. package/dist/dts/date/constants.d.ts.map +0 -1
  463. package/dist/dts/date/greet.d.ts +0 -9
  464. package/dist/dts/date/greet.d.ts.map +0 -1
  465. package/dist/dts/date/guards.d.ts.map +0 -1
  466. package/dist/dts/date/types.d.ts +0 -358
  467. package/dist/dts/date/types.d.ts.map +0 -1
  468. package/dist/dts/date/utils.d.ts.map +0 -1
  469. package/dist/dts/dom/query.d.ts.map +0 -1
  470. package/dist/dts/dom/storage.d.ts.map +0 -1
  471. package/dist/dts/dom/utils.d.ts.map +0 -1
  472. package/dist/dts/form/convert.d.ts.map +0 -1
  473. package/dist/dts/form/guards.d.ts.map +0 -1
  474. package/dist/dts/form/transform.d.ts.map +0 -1
  475. package/dist/dts/form/types.d.ts.map +0 -1
  476. package/dist/dts/guards/non-primitives.d.ts.map +0 -1
  477. package/dist/dts/guards/primitives.d.ts.map +0 -1
  478. package/dist/dts/guards/specials.d.ts.map +0 -1
  479. package/dist/dts/index.d.ts.map +0 -1
  480. package/dist/dts/number/Currency.d.ts.map +0 -1
  481. package/dist/dts/number/Unit.d.ts.map +0 -1
  482. package/dist/dts/number/basics.d.ts.map +0 -1
  483. package/dist/dts/number/constants.d.ts.map +0 -1
  484. package/dist/dts/number/convert.d.ts.map +0 -1
  485. package/dist/dts/number/fibonacci.d.ts.map +0 -1
  486. package/dist/dts/number/guards.d.ts.map +0 -1
  487. package/dist/dts/number/helpers.d.ts.map +0 -1
  488. package/dist/dts/number/percent.d.ts.map +0 -1
  489. package/dist/dts/number/prime.d.ts.map +0 -1
  490. package/dist/dts/number/range.d.ts.map +0 -1
  491. package/dist/dts/number/types.d.ts +0 -133
  492. package/dist/dts/number/types.d.ts.map +0 -1
  493. package/dist/dts/number/utilities.d.ts.map +0 -1
  494. package/dist/dts/object/basics.d.ts +0 -16
  495. package/dist/dts/object/basics.d.ts.map +0 -1
  496. package/dist/dts/object/convert.d.ts.map +0 -1
  497. package/dist/dts/object/objectify.d.ts.map +0 -1
  498. package/dist/dts/object/sanitize.d.ts.map +0 -1
  499. package/dist/dts/object/types.d.ts.map +0 -1
  500. package/dist/dts/string/anagram.d.ts.map +0 -1
  501. package/dist/dts/string/basics.d.ts.map +0 -1
  502. package/dist/dts/string/constants.d.ts +0 -2
  503. package/dist/dts/string/constants.d.ts.map +0 -1
  504. package/dist/dts/string/convert.d.ts.map +0 -1
  505. package/dist/dts/string/guards.d.ts.map +0 -1
  506. package/dist/dts/string/types.d.ts.map +0 -1
  507. package/dist/dts/string/utilities.d.ts.map +0 -1
  508. package/dist/dts/types/index.d.ts.map +0 -1
  509. package/dist/dts/utils/Paginator.d.ts.map +0 -1
  510. package/dist/dts/utils/index.d.ts.map +0 -1
  511. package/dist/dts/utils/types.d.ts.map +0 -1
  512. package/dist/esm/array/Finder.js +0 -285
  513. package/dist/esm/array/basics.js +0 -75
  514. package/dist/esm/array/sort.js +0 -67
  515. package/dist/esm/array/types.js +0 -1
  516. package/dist/esm/array/utils.js +0 -78
  517. package/dist/esm/colors/Color.js +0 -448
  518. package/dist/esm/colors/constants.js +0 -50
  519. package/dist/esm/colors/convert.js +0 -306
  520. package/dist/esm/colors/css-colors.js +0 -159
  521. package/dist/esm/colors/helpers.js +0 -161
  522. package/dist/esm/colors/initials.js +0 -58
  523. package/dist/esm/colors/random.js +0 -37
  524. package/dist/esm/colors/types.js +0 -1
  525. package/dist/esm/date/Chronos.js +0 -1883
  526. package/dist/esm/date/chronos-fn.js +0 -112
  527. package/dist/esm/date/constants.js +0 -409
  528. package/dist/esm/date/greet.js +0 -44
  529. package/dist/esm/date/guards.js +0 -79
  530. package/dist/esm/date/types.js +0 -1
  531. package/dist/esm/dom/query.js +0 -80
  532. package/dist/esm/dom/utils.js +0 -73
  533. package/dist/esm/form/convert.js +0 -235
  534. package/dist/esm/form/transform.js +0 -89
  535. package/dist/esm/form/types.js +0 -1
  536. package/dist/esm/number/Unit.js +0 -364
  537. package/dist/esm/number/basics.js +0 -157
  538. package/dist/esm/number/constants.js +0 -604
  539. package/dist/esm/number/convert.js +0 -70
  540. package/dist/esm/number/fibonacci.js +0 -83
  541. package/dist/esm/number/helpers.js +0 -64
  542. package/dist/esm/number/percent.js +0 -89
  543. package/dist/esm/number/prime.js +0 -33
  544. package/dist/esm/number/range.js +0 -76
  545. package/dist/esm/number/types.js +0 -1
  546. package/dist/esm/object/basics.js +0 -20
  547. package/dist/esm/object/convert.js +0 -118
  548. package/dist/esm/object/objectify.js +0 -235
  549. package/dist/esm/object/sanitize.js +0 -204
  550. package/dist/esm/object/types.js +0 -1
  551. package/dist/esm/string/anagram.js +0 -30
  552. package/dist/esm/string/basics.js +0 -103
  553. package/dist/esm/string/constants.js +0 -127
  554. package/dist/esm/string/convert.js +0 -177
  555. package/dist/esm/string/types.js +0 -1
  556. package/dist/esm/string/utilities.js +0 -39
  557. package/dist/esm/types/index.js +0 -1
  558. package/dist/esm/utils/Paginator.js +0 -231
  559. package/dist/esm/utils/index.js +0 -224
  560. package/dist/esm/utils/types.js +0 -1
@@ -0,0 +1,83 @@
1
+ import { OwnKeys } from '../types/index.mjs';
2
+ import { FindOptions } from './types.mjs';
3
+ import '../object/types.mjs';
4
+
5
+ type KeySelector<T> = Extract<OwnKeys<T>, string | number> | ((item: T) => string | number);
6
+ /**
7
+ * The `Finder` class performs optimized searching on arrays.
8
+ * It supports binary search, fuzzy search, and smart caching with TTL.
9
+ */
10
+ declare class Finder<T> {
11
+ #private;
12
+ /**
13
+ * * Creates a new `Finder` instance with a static array of items.
14
+ *
15
+ * @param data An array of items to initialize the search dataset.
16
+ * @param ttl Optional time-to-live (in milliseconds) for cached search results. Defaults to {@link Finder.#DEFAULT_TTL 5 Minutes}.
17
+ */
18
+ constructor(data: T[], ttl?: number);
19
+ /**
20
+ * * Creates a new `Finder` instance with a lazy-evaluated item provider.
21
+ *
22
+ * @param cb A function returning an array of items to initialize the search dataset.
23
+ * @param ttl Time-to-live (in milliseconds) for cached search results. Defaults to {@link Finder.#DEFAULT_TTL 5 Minutes}.
24
+ */
25
+ constructor(cb: () => T[], ttl?: number);
26
+ /**
27
+ * @instance Clears cache globally or for a specific key.
28
+ * @param key Optional key to clear only a specific cache entry.
29
+ */
30
+ clearCache(key?: string): void;
31
+ /**
32
+ * @instance Finds all items that match the provided matcher using optional caching or fuzzy logic.
33
+ * @param matcher The value to match against.
34
+ * @param keySelector Property key or selector function.
35
+ * @param options Optional settings for search behavior and source list.
36
+ */
37
+ findAll(matcher: string | number, keySelector: KeySelector<T>, options?: FindOptions<T>): T[];
38
+ /**
39
+ * @instance Finds first matching item that matches the provided matcher using optional caching or fuzzy logic.
40
+ * @param matcher The value to match.
41
+ * @param keySelector Property key or selector function.
42
+ * @param options Optional behavior flags and item source.
43
+ */
44
+ findOne(matcher: string | number, keySelector: KeySelector<T>, options?: FindOptions<T>): T | undefined;
45
+ /**
46
+ * @instance Asynchronous variant of `findAll` that accepts a promise-based data supplier.
47
+ * @param supplier Async function resolving the items list.
48
+ * @param matcher The value to match.
49
+ * @param keySelector Property key or selector function.
50
+ * @param options Optional settings for search behavior and cache.
51
+ */
52
+ findAllAsync(supplier: () => Promise<T[]>, matcher: string | number, keySelector: KeySelector<T>, options?: Omit<FindOptions<T>, 'items'>): Promise<T[]>;
53
+ /**
54
+ * @instance Asynchronous variant of `findOne`.
55
+ * @param supplier Async function resolving the items list.
56
+ * @param matcher The value to match.
57
+ * @param keySelector Property key or selector function.
58
+ * @param options Optional settings for behavior and cache.
59
+ */
60
+ findOneAsync(supplier: () => Promise<T[]>, matcher: string | number, keySelector: KeySelector<T>, options?: Omit<FindOptions<T>, 'items'>): Promise<T | undefined>;
61
+ /**
62
+ * @instance Performs a binary search on a sorted array using a custom key selector.
63
+ *
64
+ * @param sorted - The sorted array of items to search.
65
+ * @param matcher - The value to search for.
66
+ * @param keySelector - A function that extracts the comparable key from each item.
67
+ * @param caseInsensitive - Whether to compare string keys ignoring case.
68
+ * @returns The first matching item if found; otherwise, undefined.
69
+ */
70
+ binarySearch(sorted: T[], matcher: string | number, keySelector: (item: T) => string | number, caseInsensitive: boolean): T | undefined;
71
+ /**
72
+ * @instance Performs a fuzzy search on an array by matching characters in sequence.
73
+ *
74
+ * @param array - The array of items to search.
75
+ * @param matcher - The fuzzy search string to match against.
76
+ * @param keySelector - A function that extracts the key to search from each item.
77
+ * @param caseInsensitive - Whether to compare ignoring case for string values.
78
+ * @returns The first fuzzy-matching item if found; otherwise, undefined.
79
+ */
80
+ fuzzySearch(array: T[], matcher: string, keySelector: (item: T) => string | number, caseInsensitive: boolean): T | undefined;
81
+ }
82
+
83
+ export { Finder };
@@ -1,11 +1,13 @@
1
- import type { OwnKeys } from '../types';
2
- import type { FindOptions } from './types';
1
+ import { OwnKeys } from '../types/index.js';
2
+ import { FindOptions } from './types.js';
3
+ import '../object/types.js';
4
+
3
5
  type KeySelector<T> = Extract<OwnKeys<T>, string | number> | ((item: T) => string | number);
4
6
  /**
5
7
  * The `Finder` class performs optimized searching on arrays.
6
8
  * It supports binary search, fuzzy search, and smart caching with TTL.
7
9
  */
8
- export declare class Finder<T> {
10
+ declare class Finder<T> {
9
11
  #private;
10
12
  /**
11
13
  * * Creates a new `Finder` instance with a static array of items.
@@ -77,5 +79,5 @@ export declare class Finder<T> {
77
79
  */
78
80
  fuzzySearch(array: T[], matcher: string, keySelector: (item: T) => string | number, caseInsensitive: boolean): T | undefined;
79
81
  }
80
- export {};
81
- //# sourceMappingURL=Finder.d.ts.map
82
+
83
+ export { Finder };
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var Finder_exports = {};
20
+ __export(Finder_exports, {
21
+ Finder: () => Finder
22
+ });
23
+ module.exports = __toCommonJS(Finder_exports);
24
+ class Finder {
25
+ static #DEFAULT_TTL = 1e3 * 60 * 5;
26
+ #cachedResult = /* @__PURE__ */ new Map();
27
+ #sortedCache = /* @__PURE__ */ new Map();
28
+ #ttl;
29
+ #items;
30
+ /**
31
+ * * Creates a new `Finder` instance.
32
+ *
33
+ * @param data The initial array of items or a callback returning them.
34
+ * @param ttl Time-to-live (in milliseconds) for cached search results. Defaults to {@link Finder.#DEFAULT_TTL 5 Minutes}.
35
+ */
36
+ constructor(data, ttl = Finder.#DEFAULT_TTL) {
37
+ this.#ttl = ttl;
38
+ this.#items = typeof data === "function" ? data() : data;
39
+ }
40
+ /**
41
+ * @instance Clears cache globally or for a specific key.
42
+ * @param key Optional key to clear only a specific cache entry.
43
+ */
44
+ clearCache(key) {
45
+ if (key) {
46
+ this.#cachedResult.delete(key);
47
+ } else {
48
+ this.#cachedResult.clear();
49
+ }
50
+ }
51
+ /**
52
+ * @instance Finds all items that match the provided matcher using optional caching or fuzzy logic.
53
+ * @param matcher The value to match against.
54
+ * @param keySelector Property key or selector function.
55
+ * @param options Optional settings for search behavior and source list.
56
+ */
57
+ findAll(matcher, keySelector, options) {
58
+ const {
59
+ fuzzy = false,
60
+ needSorting = true,
61
+ cacheKey = "finder-cache",
62
+ forceBinary = false,
63
+ caseInsensitive = true,
64
+ data
65
+ } = options ?? {};
66
+ const source = typeof data === "function" ? data() : data ?? this.#items;
67
+ if (!source?.length) return [];
68
+ const rawGetKey = typeof keySelector === "function" ? keySelector : (item) => item[keySelector];
69
+ const getKey = Finder.#createMemoizedKeyGetter(rawGetKey);
70
+ const normalizedMatcher = caseInsensitive && typeof matcher === "string" ? matcher.toLowerCase() : matcher;
71
+ if (cacheKey) {
72
+ const entry = this.#cachedResult.get(cacheKey);
73
+ if (entry && Date.now() - entry.timestamp < this.#ttl) {
74
+ return entry.result;
75
+ } else {
76
+ this.#cachedResult.delete(cacheKey);
77
+ }
78
+ }
79
+ let results = [];
80
+ if (source.length < 100 && !forceBinary) {
81
+ results = source.filter((item) => {
82
+ const key = getKey(item);
83
+ const value = caseInsensitive && typeof key === "string" ? key.toLowerCase() : key;
84
+ return value === normalizedMatcher;
85
+ });
86
+ } else {
87
+ const sorted = needSorting ? this.#sortAndCache(source, getKey, cacheKey) : source;
88
+ const firstMatch = this.binarySearch(
89
+ sorted,
90
+ normalizedMatcher,
91
+ getKey,
92
+ caseInsensitive
93
+ );
94
+ if (firstMatch) {
95
+ const baseKey = getKey(firstMatch);
96
+ const base = caseInsensitive && typeof baseKey === "string" ? baseKey.toLowerCase() : baseKey;
97
+ results = sorted.filter((item) => {
98
+ const key = getKey(item);
99
+ const value = caseInsensitive && typeof key === "string" ? key.toLowerCase() : key;
100
+ return value === base;
101
+ });
102
+ }
103
+ }
104
+ if (!results.length && fuzzy && typeof normalizedMatcher === "string") {
105
+ results = source.filter((item) => {
106
+ const rawKey = getKey(item);
107
+ const key = caseInsensitive && typeof rawKey === "string" ? rawKey.toLowerCase() : String(rawKey);
108
+ return this.#match(key, normalizedMatcher);
109
+ });
110
+ }
111
+ if (cacheKey) {
112
+ this.#cachedResult.set(cacheKey, {
113
+ result: results,
114
+ timestamp: Date.now()
115
+ });
116
+ }
117
+ return results;
118
+ }
119
+ /**
120
+ * @instance Finds first matching item that matches the provided matcher using optional caching or fuzzy logic.
121
+ * @param matcher The value to match.
122
+ * @param keySelector Property key or selector function.
123
+ * @param options Optional behavior flags and item source.
124
+ */
125
+ findOne(matcher, keySelector, options) {
126
+ const {
127
+ fuzzy = false,
128
+ needSorting = true,
129
+ cacheKey = "finder-cache",
130
+ forceBinary = false,
131
+ caseInsensitive = true,
132
+ data
133
+ } = options ?? {};
134
+ const source = typeof data === "function" ? data() : data ?? this.#items;
135
+ if (!source?.length) return void 0;
136
+ const rawGetKey = typeof keySelector === "function" ? keySelector : (item) => item[keySelector];
137
+ const getKey = Finder.#createMemoizedKeyGetter(rawGetKey);
138
+ const normalizedMatcher = caseInsensitive && typeof matcher === "string" ? matcher.toLowerCase() : matcher;
139
+ if (cacheKey) {
140
+ const entry = this.#cachedResult.get(cacheKey);
141
+ if (entry && Date.now() - entry.timestamp < this.#ttl) {
142
+ return entry.result[0];
143
+ } else {
144
+ this.#cachedResult.delete(cacheKey);
145
+ }
146
+ }
147
+ let result;
148
+ if (source?.length < 100 && !forceBinary) {
149
+ result = source?.find((item) => {
150
+ const key = getKey(item);
151
+ const value = caseInsensitive && typeof key === "string" ? key.toLowerCase() : key;
152
+ return value === normalizedMatcher;
153
+ });
154
+ } else {
155
+ result = this.binarySearch(
156
+ needSorting ? this.#sortAndCache(source, getKey, cacheKey) : source,
157
+ normalizedMatcher,
158
+ getKey,
159
+ caseInsensitive
160
+ );
161
+ }
162
+ if (!result && fuzzy && typeof normalizedMatcher === "string") {
163
+ return this.fuzzySearch(
164
+ source,
165
+ normalizedMatcher,
166
+ getKey,
167
+ caseInsensitive
168
+ );
169
+ }
170
+ if (cacheKey && result) {
171
+ this.#cachedResult.set(cacheKey, {
172
+ result: [result],
173
+ timestamp: Date.now()
174
+ });
175
+ }
176
+ return result;
177
+ }
178
+ /**
179
+ * @instance Asynchronous variant of `findAll` that accepts a promise-based data supplier.
180
+ * @param supplier Async function resolving the items list.
181
+ * @param matcher The value to match.
182
+ * @param keySelector Property key or selector function.
183
+ * @param options Optional settings for search behavior and cache.
184
+ */
185
+ async findAllAsync(supplier, matcher, keySelector, options) {
186
+ const items = await supplier();
187
+ return this.findAll(matcher, keySelector, { ...options, data: items });
188
+ }
189
+ /**
190
+ * @instance Asynchronous variant of `findOne`.
191
+ * @param supplier Async function resolving the items list.
192
+ * @param matcher The value to match.
193
+ * @param keySelector Property key or selector function.
194
+ * @param options Optional settings for behavior and cache.
195
+ */
196
+ async findOneAsync(supplier, matcher, keySelector, options) {
197
+ const items = await supplier();
198
+ return this.findOne(matcher, keySelector, { ...options, data: items });
199
+ }
200
+ /**
201
+ * @instance Performs a binary search on a sorted array using a custom key selector.
202
+ *
203
+ * @param sorted - The sorted array of items to search.
204
+ * @param matcher - The value to search for.
205
+ * @param keySelector - A function that extracts the comparable key from each item.
206
+ * @param caseInsensitive - Whether to compare string keys ignoring case.
207
+ * @returns The first matching item if found; otherwise, undefined.
208
+ */
209
+ binarySearch(sorted, matcher, keySelector, caseInsensitive) {
210
+ let min = 0, max = sorted?.length - 1;
211
+ while (min <= max) {
212
+ const mid = Math.floor((min + max) / 2);
213
+ const midKey = keySelector(sorted[mid]);
214
+ const key = caseInsensitive && typeof midKey === "string" ? midKey.toLowerCase() : midKey;
215
+ if (key === matcher) return sorted[mid];
216
+ if (key < matcher) min = mid + 1;
217
+ else max = mid - 1;
218
+ }
219
+ return void 0;
220
+ }
221
+ /**
222
+ * @instance Performs a fuzzy search on an array by matching characters in sequence.
223
+ *
224
+ * @param array - The array of items to search.
225
+ * @param matcher - The fuzzy search string to match against.
226
+ * @param keySelector - A function that extracts the key to search from each item.
227
+ * @param caseInsensitive - Whether to compare ignoring case for string values.
228
+ * @returns The first fuzzy-matching item if found; otherwise, undefined.
229
+ */
230
+ fuzzySearch(array, matcher, keySelector, caseInsensitive) {
231
+ for (const item of array) {
232
+ const rawKey = keySelector(item);
233
+ const key = caseInsensitive && typeof rawKey === "string" ? rawKey.toLowerCase() : String(rawKey);
234
+ if (this.#match(key, matcher)) return item;
235
+ }
236
+ return void 0;
237
+ }
238
+ /**
239
+ * @private Checks if the characters in the target string appear in order within the source string.
240
+ * @param source Source string to search within.
241
+ * @param target Target string to match against the source string.
242
+ * @returns True if the target string is a fuzzy match within the source string; otherwise, false.
243
+ */
244
+ #match(source, target) {
245
+ let i = 0;
246
+ for (const char of target) {
247
+ i = source?.indexOf(char, i);
248
+ if (i === -1) return false;
249
+ i++;
250
+ }
251
+ return true;
252
+ }
253
+ /**
254
+ * @private Sorts an array and caches the result for a specified time-to-live (TTL).
255
+ * @param data Data to sort and cache.
256
+ * @param getKey Key extraction function.
257
+ * @param cacheKey Optional cache key for storing the result.
258
+ * @returns
259
+ */
260
+ #sortAndCache(data, getKey, cacheKey) {
261
+ if (cacheKey) {
262
+ const entry = this.#sortedCache.get(cacheKey);
263
+ if (entry && Date.now() - entry.timestamp < this.#ttl) {
264
+ return entry.result;
265
+ } else {
266
+ this.#sortedCache.delete(cacheKey);
267
+ }
268
+ }
269
+ const sorted = [...data].sort((a, b) => {
270
+ const keyA = getKey(a);
271
+ const keyB = getKey(b);
272
+ return keyA < keyB ? -1 : keyA > keyB ? 1 : 0;
273
+ });
274
+ if (cacheKey) {
275
+ this.#sortedCache.set(cacheKey, {
276
+ result: sorted,
277
+ timestamp: Date.now()
278
+ });
279
+ }
280
+ return sorted;
281
+ }
282
+ /**
283
+ * @static @private Creates a memoized version of a key extractor.
284
+ * @param getKey Original key extraction function
285
+ */
286
+ static #createMemoizedKeyGetter(getKey) {
287
+ const cache = /* @__PURE__ */ new Map();
288
+ return (item) => {
289
+ if (cache.has(item)) return cache.get(item);
290
+ const key = getKey(item);
291
+ cache.set(item, key);
292
+ return key;
293
+ };
294
+ }
295
+ }
296
+ // Annotate the CommonJS export names for ESM import in node:
297
+ 0 && (module.exports = {
298
+ Finder
299
+ });
300
+ //# sourceMappingURL=Finder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/array/Finder.ts"],"sourcesContent":["import type { OwnKeys } from '../types';\nimport type { FindOptions } from './types';\n\ntype KeySelector<T> =\n\t| Extract<OwnKeys<T>, string | number>\n\t| ((item: T) => string | number);\n\ntype CacheEntry<T> = { result: T[]; timestamp: number };\n\n/**\n * The `Finder` class performs optimized searching on arrays.\n * It supports binary search, fuzzy search, and smart caching with TTL.\n */\nexport class Finder<T> {\n\tstatic readonly #DEFAULT_TTL = 1000 * 60 * 5;\n\n\treadonly #cachedResult: Map<string, CacheEntry<T>> = new Map();\n\treadonly #sortedCache: Map<string, CacheEntry<T>> = new Map();\n\treadonly #ttl: number;\n\treadonly #items: T[];\n\n\t/**\n\t * * Creates a new `Finder` instance with a static array of items.\n\t *\n\t * @param data An array of items to initialize the search dataset.\n\t * @param ttl Optional time-to-live (in milliseconds) for cached search results. Defaults to {@link Finder.#DEFAULT_TTL 5 Minutes}.\n\t */\n\tconstructor(data: T[], ttl?: number);\n\n\t/**\n\t * * Creates a new `Finder` instance with a lazy-evaluated item provider.\n\t *\n\t * @param cb A function returning an array of items to initialize the search dataset.\n\t * @param ttl Time-to-live (in milliseconds) for cached search results. Defaults to {@link Finder.#DEFAULT_TTL 5 Minutes}.\n\t */\n\tconstructor(cb: () => T[], ttl?: number);\n\n\t/**\n\t * * Creates a new `Finder` instance.\n\t *\n\t * @param data The initial array of items or a callback returning them.\n\t * @param ttl Time-to-live (in milliseconds) for cached search results. Defaults to {@link Finder.#DEFAULT_TTL 5 Minutes}.\n\t */\n\tconstructor(data: T[] | (() => T[]), ttl: number = Finder.#DEFAULT_TTL) {\n\t\tthis.#ttl = ttl;\n\t\tthis.#items = typeof data === 'function' ? data() : data;\n\t}\n\n\t/**\n\t * @instance Clears cache globally or for a specific key.\n\t * @param key Optional key to clear only a specific cache entry.\n\t */\n\tclearCache(key?: string): void {\n\t\tif (key) {\n\t\t\tthis.#cachedResult.delete(key);\n\t\t} else {\n\t\t\tthis.#cachedResult.clear();\n\t\t}\n\t}\n\n\t/**\n\t * @instance Finds all items that match the provided matcher using optional caching or fuzzy logic.\n\t * @param matcher The value to match against.\n\t * @param keySelector Property key or selector function.\n\t * @param options Optional settings for search behavior and source list.\n\t */\n\tfindAll(\n\t\tmatcher: string | number,\n\t\tkeySelector: KeySelector<T>,\n\t\toptions?: FindOptions<T>,\n\t): T[] {\n\t\tconst {\n\t\t\tfuzzy = false,\n\t\t\tneedSorting = true,\n\t\t\tcacheKey = 'finder-cache',\n\t\t\tforceBinary = false,\n\t\t\tcaseInsensitive = true,\n\t\t\tdata,\n\t\t} = options ?? {};\n\n\t\tconst source =\n\t\t\ttypeof data === 'function' ? data() : (data ?? this.#items);\n\n\t\tif (!source?.length) return [];\n\n\t\tconst rawGetKey =\n\t\t\ttypeof keySelector === 'function' ? keySelector : (\n\t\t\t\t(item: T) => item[keySelector] as string | number\n\t\t\t);\n\n\t\tconst getKey = Finder.#createMemoizedKeyGetter(rawGetKey);\n\n\t\tconst normalizedMatcher =\n\t\t\tcaseInsensitive && typeof matcher === 'string' ?\n\t\t\t\tmatcher.toLowerCase()\n\t\t\t:\tmatcher;\n\n\t\tif (cacheKey) {\n\t\t\tconst entry = this.#cachedResult.get(cacheKey);\n\n\t\t\tif (entry && Date.now() - entry.timestamp < this.#ttl) {\n\t\t\t\treturn entry.result;\n\t\t\t} else {\n\t\t\t\tthis.#cachedResult.delete(cacheKey);\n\t\t\t}\n\t\t}\n\n\t\tlet results: T[] = [];\n\n\t\tif (source.length < 100 && !forceBinary) {\n\t\t\tresults = source.filter((item) => {\n\t\t\t\tconst key = getKey(item);\n\t\t\t\tconst value =\n\t\t\t\t\tcaseInsensitive && typeof key === 'string' ?\n\t\t\t\t\t\tkey.toLowerCase()\n\t\t\t\t\t:\tkey;\n\t\t\t\treturn value === normalizedMatcher;\n\t\t\t});\n\t\t} else {\n\t\t\tconst sorted =\n\t\t\t\tneedSorting ?\n\t\t\t\t\tthis.#sortAndCache(source, getKey, cacheKey)\n\t\t\t\t:\tsource;\n\n\t\t\tconst firstMatch = this.binarySearch(\n\t\t\t\tsorted,\n\t\t\t\tnormalizedMatcher,\n\t\t\t\tgetKey,\n\t\t\t\tcaseInsensitive,\n\t\t\t);\n\n\t\t\tif (firstMatch) {\n\t\t\t\tconst baseKey = getKey(firstMatch);\n\n\t\t\t\tconst base =\n\t\t\t\t\tcaseInsensitive && typeof baseKey === 'string' ?\n\t\t\t\t\t\tbaseKey.toLowerCase()\n\t\t\t\t\t:\tbaseKey;\n\n\t\t\t\tresults = sorted.filter((item) => {\n\t\t\t\t\tconst key = getKey(item);\n\n\t\t\t\t\tconst value =\n\t\t\t\t\t\tcaseInsensitive && typeof key === 'string' ?\n\t\t\t\t\t\t\tkey.toLowerCase()\n\t\t\t\t\t\t:\tkey;\n\n\t\t\t\t\treturn value === base;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (!results.length && fuzzy && typeof normalizedMatcher === 'string') {\n\t\t\tresults = source.filter((item) => {\n\t\t\t\tconst rawKey = getKey(item);\n\n\t\t\t\tconst key =\n\t\t\t\t\tcaseInsensitive && typeof rawKey === 'string' ?\n\t\t\t\t\t\trawKey.toLowerCase()\n\t\t\t\t\t:\tString(rawKey);\n\n\t\t\t\treturn this.#match(key, normalizedMatcher);\n\t\t\t});\n\t\t}\n\n\t\tif (cacheKey) {\n\t\t\tthis.#cachedResult.set(cacheKey, {\n\t\t\t\tresult: results,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t}\n\n\t\treturn results;\n\t}\n\n\t/**\n\t * @instance Finds first matching item that matches the provided matcher using optional caching or fuzzy logic.\n\t * @param matcher The value to match.\n\t * @param keySelector Property key or selector function.\n\t * @param options Optional behavior flags and item source.\n\t */\n\tfindOne(\n\t\tmatcher: string | number,\n\t\tkeySelector: KeySelector<T>,\n\t\toptions?: FindOptions<T>,\n\t): T | undefined {\n\t\tconst {\n\t\t\tfuzzy = false,\n\t\t\tneedSorting = true,\n\t\t\tcacheKey = 'finder-cache',\n\t\t\tforceBinary = false,\n\t\t\tcaseInsensitive = true,\n\t\t\tdata,\n\t\t} = options ?? {};\n\n\t\tconst source =\n\t\t\ttypeof data === 'function' ? data() : (data ?? this.#items);\n\n\t\tif (!source?.length) return undefined;\n\n\t\tconst rawGetKey =\n\t\t\ttypeof keySelector === 'function' ? keySelector : (\n\t\t\t\t(item: T) => item[keySelector] as string | number\n\t\t\t);\n\n\t\tconst getKey = Finder.#createMemoizedKeyGetter(rawGetKey);\n\n\t\tconst normalizedMatcher =\n\t\t\tcaseInsensitive && typeof matcher === 'string' ?\n\t\t\t\tmatcher.toLowerCase()\n\t\t\t:\tmatcher;\n\n\t\tif (cacheKey) {\n\t\t\tconst entry = this.#cachedResult.get(cacheKey);\n\n\t\t\tif (entry && Date.now() - entry.timestamp < this.#ttl) {\n\t\t\t\treturn entry.result[0];\n\t\t\t} else {\n\t\t\t\tthis.#cachedResult.delete(cacheKey);\n\t\t\t}\n\t\t}\n\n\t\tlet result: T | undefined;\n\n\t\tif (source?.length < 100 && !forceBinary) {\n\t\t\tresult = source?.find((item) => {\n\t\t\t\tconst key = getKey(item);\n\t\t\t\tconst value =\n\t\t\t\t\tcaseInsensitive && typeof key === 'string' ?\n\t\t\t\t\t\tkey.toLowerCase()\n\t\t\t\t\t:\tkey;\n\t\t\t\treturn value === normalizedMatcher;\n\t\t\t});\n\t\t} else {\n\t\t\tresult = this.binarySearch(\n\t\t\t\tneedSorting ?\n\t\t\t\t\tthis.#sortAndCache(source, getKey, cacheKey)\n\t\t\t\t:\tsource,\n\t\t\t\tnormalizedMatcher,\n\t\t\t\tgetKey,\n\t\t\t\tcaseInsensitive,\n\t\t\t);\n\t\t}\n\n\t\tif (!result && fuzzy && typeof normalizedMatcher === 'string') {\n\t\t\treturn this.fuzzySearch(\n\t\t\t\tsource,\n\t\t\t\tnormalizedMatcher,\n\t\t\t\tgetKey,\n\t\t\t\tcaseInsensitive,\n\t\t\t);\n\t\t}\n\n\t\tif (cacheKey && result) {\n\t\t\tthis.#cachedResult.set(cacheKey, {\n\t\t\t\tresult: [result],\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * @instance Asynchronous variant of `findAll` that accepts a promise-based data supplier.\n\t * @param supplier Async function resolving the items list.\n\t * @param matcher The value to match.\n\t * @param keySelector Property key or selector function.\n\t * @param options Optional settings for search behavior and cache.\n\t */\n\tasync findAllAsync(\n\t\tsupplier: () => Promise<T[]>,\n\t\tmatcher: string | number,\n\t\tkeySelector: KeySelector<T>,\n\t\toptions?: Omit<FindOptions<T>, 'items'>,\n\t): Promise<T[]> {\n\t\tconst items = await supplier();\n\n\t\treturn this.findAll(matcher, keySelector, { ...options, data: items });\n\t}\n\n\t/**\n\t * @instance Asynchronous variant of `findOne`.\n\t * @param supplier Async function resolving the items list.\n\t * @param matcher The value to match.\n\t * @param keySelector Property key or selector function.\n\t * @param options Optional settings for behavior and cache.\n\t */\n\tasync findOneAsync(\n\t\tsupplier: () => Promise<T[]>,\n\t\tmatcher: string | number,\n\t\tkeySelector: KeySelector<T>,\n\t\toptions?: Omit<FindOptions<T>, 'items'>,\n\t): Promise<T | undefined> {\n\t\tconst items = await supplier();\n\n\t\treturn this.findOne(matcher, keySelector, { ...options, data: items });\n\t}\n\n\t/**\n\t * @instance Performs a binary search on a sorted array using a custom key selector.\n\t *\n\t * @param sorted - The sorted array of items to search.\n\t * @param matcher - The value to search for.\n\t * @param keySelector - A function that extracts the comparable key from each item.\n\t * @param caseInsensitive - Whether to compare string keys ignoring case.\n\t * @returns The first matching item if found; otherwise, undefined.\n\t */\n\tbinarySearch(\n\t\tsorted: T[],\n\t\tmatcher: string | number,\n\t\tkeySelector: (item: T) => string | number,\n\t\tcaseInsensitive: boolean,\n\t): T | undefined {\n\t\tlet min = 0,\n\t\t\tmax = sorted?.length - 1;\n\n\t\twhile (min <= max) {\n\t\t\tconst mid = Math.floor((min + max) / 2);\n\t\t\tconst midKey = keySelector(sorted[mid]);\n\t\t\tconst key =\n\t\t\t\tcaseInsensitive && typeof midKey === 'string' ?\n\t\t\t\t\tmidKey.toLowerCase()\n\t\t\t\t:\tmidKey;\n\n\t\t\tif (key === matcher) return sorted[mid];\n\t\t\tif (key < matcher) min = mid + 1;\n\t\t\telse max = mid - 1;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * @instance Performs a fuzzy search on an array by matching characters in sequence.\n\t *\n\t * @param array - The array of items to search.\n\t * @param matcher - The fuzzy search string to match against.\n\t * @param keySelector - A function that extracts the key to search from each item.\n\t * @param caseInsensitive - Whether to compare ignoring case for string values.\n\t * @returns The first fuzzy-matching item if found; otherwise, undefined.\n\t */\n\tfuzzySearch(\n\t\tarray: T[],\n\t\tmatcher: string,\n\t\tkeySelector: (item: T) => string | number,\n\t\tcaseInsensitive: boolean,\n\t): T | undefined {\n\t\tfor (const item of array) {\n\t\t\tconst rawKey = keySelector(item);\n\t\t\tconst key =\n\t\t\t\tcaseInsensitive && typeof rawKey === 'string' ?\n\t\t\t\t\trawKey.toLowerCase()\n\t\t\t\t:\tString(rawKey);\n\t\t\tif (this.#match(key, matcher)) return item;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * @private Checks if the characters in the target string appear in order within the source string.\n\t * @param source Source string to search within.\n\t * @param target Target string to match against the source string.\n\t * @returns True if the target string is a fuzzy match within the source string; otherwise, false.\n\t */\n\t#match(source: string, target: string): boolean {\n\t\tlet i = 0;\n\n\t\tfor (const char of target) {\n\t\t\ti = source?.indexOf(char, i);\n\t\t\tif (i === -1) return false;\n\t\t\ti++;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * @private Sorts an array and caches the result for a specified time-to-live (TTL).\n\t * @param data Data to sort and cache.\n\t * @param getKey Key extraction function.\n\t * @param cacheKey Optional cache key for storing the result.\n\t * @returns\n\t */\n\t#sortAndCache(\n\t\tdata: T[],\n\t\tgetKey: (item: T) => string | number,\n\t\tcacheKey?: string,\n\t) {\n\t\tif (cacheKey) {\n\t\t\tconst entry = this.#sortedCache.get(cacheKey);\n\n\t\t\tif (entry && Date.now() - entry.timestamp < this.#ttl) {\n\t\t\t\treturn entry.result;\n\t\t\t} else {\n\t\t\t\tthis.#sortedCache.delete(cacheKey);\n\t\t\t}\n\t\t}\n\n\t\tconst sorted = [...data].sort((a, b) => {\n\t\t\tconst keyA = getKey(a);\n\t\t\tconst keyB = getKey(b);\n\t\t\treturn (\n\t\t\t\tkeyA < keyB ? -1\n\t\t\t\t: keyA > keyB ? 1\n\t\t\t\t: 0\n\t\t\t);\n\t\t});\n\n\t\tif (cacheKey) {\n\t\t\tthis.#sortedCache.set(cacheKey, {\n\t\t\t\tresult: sorted,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t}\n\n\t\treturn sorted;\n\t}\n\n\t/**\n\t * @static @private Creates a memoized version of a key extractor.\n\t * @param getKey Original key extraction function\n\t */\n\tstatic #createMemoizedKeyGetter<T>(\n\t\tgetKey: (item: T) => string | number,\n\t): (item: T) => string | number {\n\t\tconst cache = new Map<T, string | number>();\n\n\t\treturn (item: T): string | number => {\n\t\t\tif (cache.has(item)) return cache.get(item)!;\n\t\t\tconst key = getKey(item);\n\t\t\tcache.set(item, key);\n\t\t\treturn key;\n\t\t};\n\t}\n}\n"],"mappings":"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","names":[]}