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.
- package/dist/array/Finder.d.mts +83 -0
- package/dist/{dts/array → array}/Finder.d.ts +7 -5
- package/dist/array/Finder.js +300 -0
- package/dist/array/Finder.js.map +1 -0
- package/dist/array/Finder.mjs +276 -0
- package/dist/array/Finder.mjs.map +1 -0
- package/dist/array/basics.d.mts +45 -0
- package/dist/{dts/array → array}/basics.d.ts +11 -8
- package/dist/array/basics.js +76 -0
- package/dist/array/basics.js.map +1 -0
- package/dist/array/basics.mjs +48 -0
- package/dist/array/basics.mjs.map +1 -0
- package/dist/array/sort.d.mts +24 -0
- package/dist/{dts/array → array}/sort.d.ts +8 -5
- package/dist/array/sort.js +75 -0
- package/dist/array/sort.js.map +1 -0
- package/dist/array/sort.mjs +55 -0
- package/dist/array/sort.mjs.map +1 -0
- package/dist/{esm/array/transform.js → array/transform.d.mts} +15 -62
- package/dist/{dts/array → array}/transform.d.ts +13 -10
- package/dist/array/transform.js +105 -0
- package/dist/array/transform.js.map +1 -0
- package/dist/array/transform.mjs +75 -0
- package/dist/array/transform.mjs.map +1 -0
- package/dist/array/types.d.mts +116 -0
- package/dist/{dts/array → array}/types.d.ts +16 -14
- package/dist/array/types.js +17 -0
- package/dist/array/types.js.map +1 -0
- package/dist/array/types.mjs +1 -0
- package/dist/array/types.mjs.map +1 -0
- package/dist/array/utils.d.mts +18 -0
- package/dist/{dts/array → array}/utils.d.ts +7 -3
- package/dist/array/utils.js +83 -0
- package/dist/array/utils.js.map +1 -0
- package/dist/array/utils.mjs +59 -0
- package/dist/array/utils.mjs.map +1 -0
- package/dist/colors/Color.d.mts +4 -0
- package/dist/colors/Color.d.ts +4 -0
- package/dist/colors/Color.js +444 -0
- package/dist/colors/Color.js.map +1 -0
- package/dist/colors/Color.mjs +426 -0
- package/dist/colors/Color.mjs.map +1 -0
- package/dist/colors/constants.d.mts +7 -0
- package/dist/colors/constants.d.ts +7 -0
- package/dist/colors/constants.js +175 -0
- package/dist/colors/constants.js.map +1 -0
- package/dist/colors/constants.mjs +149 -0
- package/dist/colors/constants.mjs.map +1 -0
- package/dist/colors/convert.d.mts +189 -0
- package/dist/{dts/colors → colors}/convert.d.ts +26 -21
- package/dist/colors/convert.js +240 -0
- package/dist/colors/convert.js.map +1 -0
- package/dist/colors/convert.mjs +212 -0
- package/dist/colors/convert.mjs.map +1 -0
- package/dist/colors/css-colors.d.mts +161 -0
- package/dist/{dts/colors → colors}/css-colors.d.ts +3 -2
- package/dist/colors/css-colors.js +187 -0
- package/dist/colors/css-colors.js.map +1 -0
- package/dist/colors/css-colors.mjs +163 -0
- package/dist/colors/css-colors.mjs.map +1 -0
- package/dist/colors/helpers.d.mts +91 -0
- package/dist/{dts/colors → colors}/helpers.d.ts +21 -16
- package/dist/colors/helpers.js +136 -0
- package/dist/colors/helpers.js.map +1 -0
- package/dist/colors/helpers.mjs +99 -0
- package/dist/colors/helpers.mjs.map +1 -0
- package/dist/colors/initials.d.mts +30 -0
- package/dist/{dts/colors → colors}/initials.d.ts +9 -4
- package/dist/colors/initials.js +72 -0
- package/dist/colors/initials.js.map +1 -0
- package/dist/colors/initials.mjs +48 -0
- package/dist/colors/initials.mjs.map +1 -0
- package/dist/colors/random.d.mts +24 -0
- package/dist/{dts/colors → colors}/random.d.ts +9 -4
- package/dist/colors/random.js +49 -0
- package/dist/colors/random.js.map +1 -0
- package/dist/colors/random.mjs +24 -0
- package/dist/colors/random.mjs.map +1 -0
- package/dist/colors/types.d.mts +4 -0
- package/dist/colors/types.d.ts +4 -0
- package/dist/colors/types.js +17 -0
- package/dist/colors/types.js.map +1 -0
- package/dist/colors/types.mjs +1 -0
- package/dist/colors/types.mjs.map +1 -0
- package/dist/{esm/colors/utils.js → colors/utils.d.mts} +9 -13
- package/dist/{dts/colors → colors}/utils.d.ts +9 -4
- package/dist/colors/utils.js +47 -0
- package/dist/colors/utils.js.map +1 -0
- package/dist/colors/utils.mjs +22 -0
- package/dist/colors/utils.mjs.map +1 -0
- package/dist/date/Chronos.d.mts +3 -0
- package/dist/date/Chronos.d.ts +3 -0
- package/dist/date/Chronos.js +1906 -0
- package/dist/date/Chronos.js.map +1 -0
- package/dist/date/Chronos.mjs +1891 -0
- package/dist/date/Chronos.mjs.map +1 -0
- package/dist/date/chronos-fn.d.mts +41 -0
- package/dist/{dts/date → date}/chronos-fn.d.ts +5 -2
- package/dist/date/chronos-fn.js +52 -0
- package/dist/date/chronos-fn.js.map +1 -0
- package/dist/date/chronos-fn.mjs +28 -0
- package/dist/date/chronos-fn.mjs.map +1 -0
- package/dist/date/constants.d.mts +3 -0
- package/dist/date/constants.d.ts +3 -0
- package/dist/date/constants.js +469 -0
- package/dist/date/constants.js.map +1 -0
- package/dist/date/constants.mjs +429 -0
- package/dist/date/constants.mjs.map +1 -0
- package/dist/date/greet.d.mts +13 -0
- package/dist/date/greet.d.ts +13 -0
- package/dist/date/greet.js +75 -0
- package/dist/date/greet.js.map +1 -0
- package/dist/date/greet.mjs +55 -0
- package/dist/date/greet.mjs.map +1 -0
- package/dist/date/guards.d.mts +36 -0
- package/dist/{dts/date → date}/guards.d.ts +11 -7
- package/dist/date/guards.js +72 -0
- package/dist/date/guards.js.map +1 -0
- package/dist/date/guards.mjs +45 -0
- package/dist/date/guards.mjs.map +1 -0
- package/dist/date/types.d.mts +3 -0
- package/dist/date/types.d.ts +3 -0
- package/dist/date/types.js +17 -0
- package/dist/date/types.js.map +1 -0
- package/dist/date/types.mjs +1 -0
- package/dist/date/types.mjs.map +1 -0
- package/dist/{esm/date/utils.js → date/utils.d.mts} +13 -27
- package/dist/{dts/date → date}/utils.d.ts +13 -9
- package/dist/date/utils.js +67 -0
- package/dist/date/utils.js.map +1 -0
- package/dist/date/utils.mjs +38 -0
- package/dist/date/utils.mjs.map +1 -0
- package/dist/dom/query.d.mts +46 -0
- package/dist/{dts/dom → dom}/query.d.ts +10 -7
- package/dist/dom/query.js +78 -0
- package/dist/dom/query.js.map +1 -0
- package/dist/dom/query.mjs +51 -0
- package/dist/dom/query.mjs.map +1 -0
- package/dist/{esm/dom/storage.js → dom/storage.d.mts} +8 -26
- package/dist/{dts/dom → dom}/storage.d.ts +8 -7
- package/dist/dom/storage.js +60 -0
- package/dist/dom/storage.js.map +1 -0
- package/dist/dom/storage.mjs +31 -0
- package/dist/dom/storage.mjs.map +1 -0
- package/dist/dom/utils.d.mts +19 -0
- package/dist/{dts/dom → dom}/utils.d.ts +5 -4
- package/dist/dom/utils.js +85 -0
- package/dist/dom/utils.js.map +1 -0
- package/dist/dom/utils.mjs +59 -0
- package/dist/dom/utils.mjs.map +1 -0
- package/dist/form/convert.d.mts +16 -0
- package/dist/{dts/form → form}/convert.d.ts +8 -4
- package/dist/form/convert.js +207 -0
- package/dist/form/convert.js.map +1 -0
- package/dist/form/convert.mjs +194 -0
- package/dist/form/convert.mjs.map +1 -0
- package/dist/{esm/form/guards.js → form/guards.d.mts} +15 -47
- package/dist/{dts/form → form}/guards.d.ts +15 -10
- package/dist/form/guards.js +86 -0
- package/dist/form/guards.js.map +1 -0
- package/dist/form/guards.mjs +55 -0
- package/dist/form/guards.mjs.map +1 -0
- package/dist/form/transform.d.mts +24 -0
- package/dist/{dts/form → form}/transform.d.ts +9 -4
- package/dist/form/transform.js +90 -0
- package/dist/form/transform.js.map +1 -0
- package/dist/form/transform.mjs +65 -0
- package/dist/form/transform.mjs.map +1 -0
- package/dist/form/types.d.mts +102 -0
- package/dist/{dts/form → form}/types.d.ts +13 -10
- package/dist/form/types.js +17 -0
- package/dist/form/types.js.map +1 -0
- package/dist/form/types.mjs +1 -0
- package/dist/form/types.mjs.map +1 -0
- package/dist/{esm/guards/non-primitives.js → guards/non-primitives.d.mts} +22 -60
- package/dist/{dts/guards → guards}/non-primitives.d.ts +22 -20
- package/dist/guards/non-primitives.js +118 -0
- package/dist/guards/non-primitives.js.map +1 -0
- package/dist/guards/non-primitives.mjs +78 -0
- package/dist/guards/non-primitives.mjs.map +1 -0
- package/dist/{esm/guards/primitives.js → guards/primitives.d.mts} +18 -51
- package/dist/{dts/guards → guards}/primitives.d.ts +18 -16
- package/dist/guards/primitives.js +103 -0
- package/dist/guards/primitives.js.map +1 -0
- package/dist/guards/primitives.mjs +66 -0
- package/dist/guards/primitives.mjs.map +1 -0
- package/dist/{esm/guards/specials.js → guards/specials.d.mts} +14 -50
- package/dist/{dts/guards → guards}/specials.d.ts +14 -13
- package/dist/guards/specials.js +97 -0
- package/dist/guards/specials.js.map +1 -0
- package/dist/guards/specials.mjs +62 -0
- package/dist/guards/specials.mjs.map +1 -0
- package/dist/{esm/index.js → index.d.mts} +54 -72
- package/dist/{dts/index.d.ts → index.d.ts} +54 -61
- package/dist/index.js +679 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +666 -0
- package/dist/index.mjs.map +1 -0
- package/dist/{esm/number/Currency.js → number/Currency.d.mts} +13 -59
- package/dist/{dts/number → number}/Currency.d.ts +7 -4
- package/dist/number/Currency.js +130 -0
- package/dist/number/Currency.js.map +1 -0
- package/dist/number/Currency.mjs +106 -0
- package/dist/number/Currency.mjs.map +1 -0
- package/dist/number/Unit.d.mts +2 -0
- package/dist/number/Unit.d.ts +2 -0
- package/dist/number/Unit.js +375 -0
- package/dist/number/Unit.js.map +1 -0
- package/dist/number/Unit.mjs +351 -0
- package/dist/number/Unit.mjs.map +1 -0
- package/dist/number/basics.d.mts +78 -0
- package/dist/{dts/number → number}/basics.d.ts +15 -12
- package/dist/number/basics.js +133 -0
- package/dist/number/basics.js.map +1 -0
- package/dist/number/basics.mjs +101 -0
- package/dist/number/basics.mjs.map +1 -0
- package/dist/number/constants.d.mts +233 -0
- package/dist/{dts/number → number}/constants.d.ts +12 -11
- package/dist/number/constants.js +805 -0
- package/dist/number/constants.js.map +1 -0
- package/dist/number/constants.mjs +772 -0
- package/dist/number/constants.mjs.map +1 -0
- package/dist/number/convert.d.mts +20 -0
- package/dist/{dts/number → number}/convert.d.ts +6 -4
- package/dist/number/convert.js +85 -0
- package/dist/number/convert.js.map +1 -0
- package/dist/number/convert.mjs +60 -0
- package/dist/number/convert.mjs.map +1 -0
- package/dist/number/fibonacci.d.mts +33 -0
- package/dist/{dts/number → number}/fibonacci.d.ts +8 -6
- package/dist/number/fibonacci.js +84 -0
- package/dist/number/fibonacci.js.map +1 -0
- package/dist/number/fibonacci.mjs +57 -0
- package/dist/number/fibonacci.mjs.map +1 -0
- package/dist/{esm/number/guards.js → number/guards.d.mts} +8 -18
- package/dist/{dts/number → number}/guards.d.ts +8 -7
- package/dist/number/guards.js +56 -0
- package/dist/number/guards.js.map +1 -0
- package/dist/number/guards.mjs +27 -0
- package/dist/number/guards.mjs.map +1 -0
- package/dist/number/helpers.d.mts +32 -0
- package/dist/{dts/number → number}/helpers.d.ts +6 -5
- package/dist/number/helpers.js +66 -0
- package/dist/number/helpers.js.map +1 -0
- package/dist/number/helpers.mjs +39 -0
- package/dist/number/helpers.mjs.map +1 -0
- package/dist/number/percent.d.mts +20 -0
- package/dist/{dts/number → number}/percent.d.ts +6 -3
- package/dist/number/percent.js +97 -0
- package/dist/number/percent.js.map +1 -0
- package/dist/number/percent.mjs +73 -0
- package/dist/number/percent.mjs.map +1 -0
- package/dist/number/prime.d.mts +17 -0
- package/dist/{dts/number → number}/prime.d.ts +4 -3
- package/dist/number/prime.js +49 -0
- package/dist/number/prime.js.map +1 -0
- package/dist/number/prime.mjs +24 -0
- package/dist/number/prime.mjs.map +1 -0
- package/dist/number/range.d.mts +14 -0
- package/dist/{dts/number → number}/range.d.ts +6 -3
- package/dist/number/range.js +98 -0
- package/dist/number/range.js.map +1 -0
- package/dist/number/range.mjs +74 -0
- package/dist/number/range.mjs.map +1 -0
- package/dist/number/types.d.mts +2 -0
- package/dist/number/types.d.ts +2 -0
- package/dist/number/types.js +17 -0
- package/dist/number/types.js.map +1 -0
- package/dist/number/types.mjs +1 -0
- package/dist/number/types.mjs.map +1 -0
- package/dist/{esm/number/utilities.js → number/utilities.d.mts} +11 -35
- package/dist/{dts/number → number}/utilities.d.ts +11 -8
- package/dist/number/utilities.js +68 -0
- package/dist/number/utilities.js.map +1 -0
- package/dist/number/utilities.mjs +40 -0
- package/dist/number/utilities.mjs.map +1 -0
- package/dist/object/basics.d.mts +19 -0
- package/dist/object/basics.d.ts +19 -0
- package/dist/object/basics.js +37 -0
- package/dist/object/basics.js.map +1 -0
- package/dist/object/basics.mjs +12 -0
- package/dist/object/basics.mjs.map +1 -0
- package/dist/object/convert.d.mts +75 -0
- package/dist/{dts/object → object}/convert.d.ts +10 -7
- package/dist/object/convert.js +98 -0
- package/dist/object/convert.js.map +1 -0
- package/dist/object/convert.mjs +71 -0
- package/dist/object/convert.mjs.map +1 -0
- package/dist/object/objectify.d.mts +77 -0
- package/dist/{dts/object → object}/objectify.d.ts +13 -11
- package/dist/object/objectify.js +188 -0
- package/dist/object/objectify.js.map +1 -0
- package/dist/object/objectify.mjs +161 -0
- package/dist/object/objectify.mjs.map +1 -0
- package/dist/object/sanitize.d.mts +53 -0
- package/dist/{dts/object → object}/sanitize.d.ts +10 -8
- package/dist/object/sanitize.js +154 -0
- package/dist/object/sanitize.js.map +1 -0
- package/dist/object/sanitize.mjs +133 -0
- package/dist/object/sanitize.mjs.map +1 -0
- package/dist/object/types.d.mts +77 -0
- package/dist/{dts/object → object}/types.d.ts +18 -16
- package/dist/object/types.js +17 -0
- package/dist/object/types.js.map +1 -0
- package/dist/object/types.mjs +1 -0
- package/dist/object/types.mjs.map +1 -0
- package/dist/string/anagram.d.mts +9 -0
- package/dist/{dts/string → string}/anagram.d.ts +3 -2
- package/dist/string/anagram.js +49 -0
- package/dist/string/anagram.js.map +1 -0
- package/dist/string/anagram.mjs +25 -0
- package/dist/string/anagram.mjs.map +1 -0
- package/dist/string/basics.d.mts +42 -0
- package/dist/{dts/string → string}/basics.d.ts +9 -7
- package/dist/string/basics.js +106 -0
- package/dist/string/basics.js.map +1 -0
- package/dist/string/basics.mjs +79 -0
- package/dist/string/basics.mjs.map +1 -0
- package/dist/string/constants.d.mts +3 -0
- package/dist/string/constants.d.ts +3 -0
- package/dist/string/constants.js +155 -0
- package/dist/string/constants.js.map +1 -0
- package/dist/string/constants.mjs +131 -0
- package/dist/string/constants.mjs.map +1 -0
- package/dist/string/convert.d.mts +88 -0
- package/dist/{dts/string → string}/convert.d.ts +13 -11
- package/dist/string/convert.js +127 -0
- package/dist/string/convert.js.map +1 -0
- package/dist/string/convert.mjs +95 -0
- package/dist/string/convert.mjs.map +1 -0
- package/dist/{esm/string/guards.js → string/guards.d.mts} +8 -20
- package/dist/{dts/string → string}/guards.d.ts +8 -7
- package/dist/string/guards.js +58 -0
- package/dist/string/guards.js.map +1 -0
- package/dist/string/guards.mjs +29 -0
- package/dist/string/guards.mjs.map +1 -0
- package/dist/string/types.d.mts +46 -0
- package/dist/{dts/string → string}/types.d.ts +8 -7
- package/dist/string/types.js +17 -0
- package/dist/string/types.js.map +1 -0
- package/dist/string/types.mjs +1 -0
- package/dist/string/types.mjs.map +1 -0
- package/dist/string/utilities.d.mts +22 -0
- package/dist/{dts/string → string}/utilities.d.ts +5 -4
- package/dist/string/utilities.js +55 -0
- package/dist/string/utilities.js.map +1 -0
- package/dist/string/utilities.mjs +29 -0
- package/dist/string/utilities.mjs.map +1 -0
- package/dist/types/index.d.mts +72 -0
- package/dist/{dts/types → types}/index.d.ts +22 -22
- package/dist/types/index.js +17 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.mjs +1 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/{dts/date/Chronos.d.ts → types-8d00ijOX.d.ts} +656 -5
- package/dist/{dts/colors/Color.d.ts → types-B0QxRCuz.d.ts} +131 -3
- package/dist/types-B6eLs9ZP.d.mts +380 -0
- package/dist/{dts/number/Unit.d.ts → types-C_admqGT.d.ts} +136 -3
- package/dist/types-Dn5jclFT.d.mts +1490 -0
- package/dist/types-Dtit1n8Z.d.mts +336 -0
- package/dist/utils/Paginator.d.mts +128 -0
- package/dist/{dts/utils → utils}/Paginator.d.ts +6 -3
- package/dist/utils/Paginator.js +271 -0
- package/dist/utils/Paginator.js.map +1 -0
- package/dist/utils/Paginator.mjs +247 -0
- package/dist/utils/Paginator.mjs.map +1 -0
- package/dist/utils/index.d.mts +110 -0
- package/dist/{dts/utils → utils}/index.d.ts +15 -13
- package/dist/utils/index.js +166 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +132 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/utils/types.d.mts +43 -0
- package/dist/{dts/utils → utils}/types.d.ts +8 -6
- package/dist/utils/types.js +17 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/utils/types.mjs +1 -0
- package/dist/utils/types.mjs.map +1 -0
- package/package.json +36 -35
- package/dist/cjs/array/Finder.js +0 -289
- package/dist/cjs/array/basics.js +0 -83
- package/dist/cjs/array/sort.js +0 -70
- package/dist/cjs/array/transform.js +0 -128
- package/dist/cjs/array/types.js +0 -2
- package/dist/cjs/array/utils.js +0 -81
- package/dist/cjs/colors/Color.js +0 -452
- package/dist/cjs/colors/constants.js +0 -53
- package/dist/cjs/colors/convert.js +0 -323
- package/dist/cjs/colors/css-colors.js +0 -162
- package/dist/cjs/colors/helpers.js +0 -178
- package/dist/cjs/colors/initials.js +0 -61
- package/dist/cjs/colors/random.js +0 -42
- package/dist/cjs/colors/types.js +0 -2
- package/dist/cjs/colors/utils.js +0 -36
- package/dist/cjs/date/Chronos.js +0 -1887
- package/dist/cjs/date/chronos-fn.js +0 -115
- package/dist/cjs/date/constants.js +0 -412
- package/dist/cjs/date/greet.js +0 -47
- package/dist/cjs/date/guards.js +0 -85
- package/dist/cjs/date/types.js +0 -2
- package/dist/cjs/date/utils.js +0 -71
- package/dist/cjs/dom/query.js +0 -87
- package/dist/cjs/dom/storage.js +0 -69
- package/dist/cjs/dom/utils.js +0 -78
- package/dist/cjs/form/convert.js +0 -239
- package/dist/cjs/form/guards.js +0 -102
- package/dist/cjs/form/transform.js +0 -93
- package/dist/cjs/form/types.js +0 -2
- package/dist/cjs/guards/non-primitives.js +0 -168
- package/dist/cjs/guards/primitives.js +0 -137
- package/dist/cjs/guards/specials.js +0 -122
- package/dist/cjs/index.js +0 -385
- package/dist/cjs/number/Currency.js +0 -108
- package/dist/cjs/number/Unit.js +0 -368
- package/dist/cjs/number/basics.js +0 -169
- package/dist/cjs/number/constants.js +0 -607
- package/dist/cjs/number/convert.js +0 -75
- package/dist/cjs/number/fibonacci.js +0 -89
- package/dist/cjs/number/guards.js +0 -64
- package/dist/cjs/number/helpers.js +0 -71
- package/dist/cjs/number/percent.js +0 -92
- package/dist/cjs/number/prime.js +0 -38
- package/dist/cjs/number/range.js +0 -79
- package/dist/cjs/number/types.js +0 -2
- package/dist/cjs/number/utilities.js +0 -87
- package/dist/cjs/object/basics.js +0 -25
- package/dist/cjs/object/convert.js +0 -124
- package/dist/cjs/object/objectify.js +0 -246
- package/dist/cjs/object/sanitize.js +0 -208
- package/dist/cjs/object/types.js +0 -2
- package/dist/cjs/string/anagram.js +0 -33
- package/dist/cjs/string/basics.js +0 -110
- package/dist/cjs/string/constants.js +0 -130
- package/dist/cjs/string/convert.js +0 -189
- package/dist/cjs/string/guards.js +0 -59
- package/dist/cjs/string/types.js +0 -2
- package/dist/cjs/string/utilities.js +0 -45
- package/dist/cjs/types/index.js +0 -2
- package/dist/cjs/utils/Paginator.js +0 -235
- package/dist/cjs/utils/index.js +0 -238
- package/dist/cjs/utils/types.js +0 -2
- package/dist/dts/array/Finder.d.ts.map +0 -1
- package/dist/dts/array/basics.d.ts.map +0 -1
- package/dist/dts/array/sort.d.ts.map +0 -1
- package/dist/dts/array/transform.d.ts.map +0 -1
- package/dist/dts/array/types.d.ts.map +0 -1
- package/dist/dts/array/utils.d.ts.map +0 -1
- package/dist/dts/colors/Color.d.ts.map +0 -1
- package/dist/dts/colors/constants.d.ts +0 -6
- package/dist/dts/colors/constants.d.ts.map +0 -1
- package/dist/dts/colors/convert.d.ts.map +0 -1
- package/dist/dts/colors/css-colors.d.ts.map +0 -1
- package/dist/dts/colors/helpers.d.ts.map +0 -1
- package/dist/dts/colors/initials.d.ts.map +0 -1
- package/dist/dts/colors/random.d.ts.map +0 -1
- package/dist/dts/colors/types.d.ts +0 -128
- package/dist/dts/colors/types.d.ts.map +0 -1
- package/dist/dts/colors/utils.d.ts.map +0 -1
- package/dist/dts/date/Chronos.d.ts.map +0 -1
- package/dist/dts/date/chronos-fn.d.ts.map +0 -1
- package/dist/dts/date/constants.d.ts +0 -297
- package/dist/dts/date/constants.d.ts.map +0 -1
- package/dist/dts/date/greet.d.ts +0 -9
- package/dist/dts/date/greet.d.ts.map +0 -1
- package/dist/dts/date/guards.d.ts.map +0 -1
- package/dist/dts/date/types.d.ts +0 -358
- package/dist/dts/date/types.d.ts.map +0 -1
- package/dist/dts/date/utils.d.ts.map +0 -1
- package/dist/dts/dom/query.d.ts.map +0 -1
- package/dist/dts/dom/storage.d.ts.map +0 -1
- package/dist/dts/dom/utils.d.ts.map +0 -1
- package/dist/dts/form/convert.d.ts.map +0 -1
- package/dist/dts/form/guards.d.ts.map +0 -1
- package/dist/dts/form/transform.d.ts.map +0 -1
- package/dist/dts/form/types.d.ts.map +0 -1
- package/dist/dts/guards/non-primitives.d.ts.map +0 -1
- package/dist/dts/guards/primitives.d.ts.map +0 -1
- package/dist/dts/guards/specials.d.ts.map +0 -1
- package/dist/dts/index.d.ts.map +0 -1
- package/dist/dts/number/Currency.d.ts.map +0 -1
- package/dist/dts/number/Unit.d.ts.map +0 -1
- package/dist/dts/number/basics.d.ts.map +0 -1
- package/dist/dts/number/constants.d.ts.map +0 -1
- package/dist/dts/number/convert.d.ts.map +0 -1
- package/dist/dts/number/fibonacci.d.ts.map +0 -1
- package/dist/dts/number/guards.d.ts.map +0 -1
- package/dist/dts/number/helpers.d.ts.map +0 -1
- package/dist/dts/number/percent.d.ts.map +0 -1
- package/dist/dts/number/prime.d.ts.map +0 -1
- package/dist/dts/number/range.d.ts.map +0 -1
- package/dist/dts/number/types.d.ts +0 -133
- package/dist/dts/number/types.d.ts.map +0 -1
- package/dist/dts/number/utilities.d.ts.map +0 -1
- package/dist/dts/object/basics.d.ts +0 -16
- package/dist/dts/object/basics.d.ts.map +0 -1
- package/dist/dts/object/convert.d.ts.map +0 -1
- package/dist/dts/object/objectify.d.ts.map +0 -1
- package/dist/dts/object/sanitize.d.ts.map +0 -1
- package/dist/dts/object/types.d.ts.map +0 -1
- package/dist/dts/string/anagram.d.ts.map +0 -1
- package/dist/dts/string/basics.d.ts.map +0 -1
- package/dist/dts/string/constants.d.ts +0 -2
- package/dist/dts/string/constants.d.ts.map +0 -1
- package/dist/dts/string/convert.d.ts.map +0 -1
- package/dist/dts/string/guards.d.ts.map +0 -1
- package/dist/dts/string/types.d.ts.map +0 -1
- package/dist/dts/string/utilities.d.ts.map +0 -1
- package/dist/dts/types/index.d.ts.map +0 -1
- package/dist/dts/utils/Paginator.d.ts.map +0 -1
- package/dist/dts/utils/index.d.ts.map +0 -1
- package/dist/dts/utils/types.d.ts.map +0 -1
- package/dist/esm/array/Finder.js +0 -285
- package/dist/esm/array/basics.js +0 -75
- package/dist/esm/array/sort.js +0 -67
- package/dist/esm/array/types.js +0 -1
- package/dist/esm/array/utils.js +0 -78
- package/dist/esm/colors/Color.js +0 -448
- package/dist/esm/colors/constants.js +0 -50
- package/dist/esm/colors/convert.js +0 -306
- package/dist/esm/colors/css-colors.js +0 -159
- package/dist/esm/colors/helpers.js +0 -161
- package/dist/esm/colors/initials.js +0 -58
- package/dist/esm/colors/random.js +0 -37
- package/dist/esm/colors/types.js +0 -1
- package/dist/esm/date/Chronos.js +0 -1883
- package/dist/esm/date/chronos-fn.js +0 -112
- package/dist/esm/date/constants.js +0 -409
- package/dist/esm/date/greet.js +0 -44
- package/dist/esm/date/guards.js +0 -79
- package/dist/esm/date/types.js +0 -1
- package/dist/esm/dom/query.js +0 -80
- package/dist/esm/dom/utils.js +0 -73
- package/dist/esm/form/convert.js +0 -235
- package/dist/esm/form/transform.js +0 -89
- package/dist/esm/form/types.js +0 -1
- package/dist/esm/number/Unit.js +0 -364
- package/dist/esm/number/basics.js +0 -157
- package/dist/esm/number/constants.js +0 -604
- package/dist/esm/number/convert.js +0 -70
- package/dist/esm/number/fibonacci.js +0 -83
- package/dist/esm/number/helpers.js +0 -64
- package/dist/esm/number/percent.js +0 -89
- package/dist/esm/number/prime.js +0 -33
- package/dist/esm/number/range.js +0 -76
- package/dist/esm/number/types.js +0 -1
- package/dist/esm/object/basics.js +0 -20
- package/dist/esm/object/convert.js +0 -118
- package/dist/esm/object/objectify.js +0 -235
- package/dist/esm/object/sanitize.js +0 -204
- package/dist/esm/object/types.js +0 -1
- package/dist/esm/string/anagram.js +0 -30
- package/dist/esm/string/basics.js +0 -103
- package/dist/esm/string/constants.js +0 -127
- package/dist/esm/string/convert.js +0 -177
- package/dist/esm/string/types.js +0 -1
- package/dist/esm/string/utilities.js +0 -39
- package/dist/esm/types/index.js +0 -1
- package/dist/esm/utils/Paginator.js +0 -231
- package/dist/esm/utils/index.js +0 -224
- 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
|
|
2
|
-
import
|
|
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
|
-
|
|
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
|
-
|
|
81
|
-
|
|
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":[]}
|