@koine/utils 2.0.0-beta.4 → 2.0.0-beta.42

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 (451) hide show
  1. package/Defer.d.ts +0 -15
  2. package/Emitter.d.ts +2 -21
  3. package/README.md +4 -2
  4. package/accentSets.d.ts +1 -15
  5. package/addOrReplaceAtIdx.d.ts +1 -5
  6. package/areEqual.d.ts +2 -17
  7. package/arrayFilterFalsy.d.ts +1 -0
  8. package/arrayOfAll.d.ts +1 -28
  9. package/arraySum.d.ts +1 -7
  10. package/arrayToLookup.d.ts +1 -7
  11. package/arrayUniqueByProperties.d.ts +1 -0
  12. package/buildUrlQueryString.d.ts +2 -12
  13. package/capitalize.d.ts +1 -8
  14. package/changeCaseCamel.d.ts +2 -0
  15. package/changeCaseCapital.d.ts +2 -0
  16. package/changeCaseConstant.d.ts +2 -0
  17. package/changeCaseDot.d.ts +2 -0
  18. package/changeCaseHelpers.d.ts +19 -0
  19. package/changeCaseKebab.d.ts +2 -0
  20. package/changeCaseNone.d.ts +2 -0
  21. package/changeCasePascal.d.ts +2 -0
  22. package/changeCasePascalSnake.d.ts +2 -0
  23. package/changeCasePath.d.ts +2 -0
  24. package/changeCaseSentence.d.ts +2 -0
  25. package/changeCaseSnake.d.ts +2 -0
  26. package/changeCaseTrain.d.ts +2 -0
  27. package/chunkByChunks.d.ts +1 -7
  28. package/chunkBySize.d.ts +1 -6
  29. package/clamp.d.ts +1 -8
  30. package/clsx.d.ts +6 -9
  31. package/convertRange.d.ts +1 -14
  32. package/cookie.d.ts +1 -37
  33. package/createPalette.d.ts +2 -12
  34. package/debounce.d.ts +1 -8
  35. package/debouncePromise.d.ts +10 -11
  36. package/debounceRaf.d.ts +0 -8
  37. package/decode.d.ts +1 -6
  38. package/encode.d.ts +1 -6
  39. package/ensureInt.d.ts +1 -7
  40. package/env.d.ts +0 -0
  41. package/errorToString.d.ts +1 -7
  42. package/findDuplicatedIndexes.d.ts +1 -5
  43. package/forin.d.ts +1 -7
  44. package/gbToBytes.d.ts +1 -7
  45. package/getEmptyArray.d.ts +1 -9
  46. package/getKeys.d.ts +1 -9
  47. package/getMediaQueryWidthResolvers.d.ts +1 -2
  48. package/getMediaQueryWidthTailwindScreens.d.ts +1 -2
  49. package/getNonce.d.ts +1 -6
  50. package/getParamAmong.d.ts +1 -12
  51. package/getParamAsInt.d.ts +1 -12
  52. package/getParamAsString.d.ts +1 -11
  53. package/getType.d.ts +4 -17
  54. package/getUrlHashParams.d.ts +1 -9
  55. package/getUrlHashPathname.d.ts +1 -9
  56. package/getUrlPathnameParts.d.ts +1 -12
  57. package/getUrlQueryParams.d.ts +1 -14
  58. package/imgEmptyPixel.d.ts +1 -7
  59. package/index.cjs.d.ts +1 -0
  60. package/index.cjs.default.js +1 -0
  61. package/index.cjs.js +482 -0
  62. package/index.cjs.mjs +2 -0
  63. package/index.d.ts +24 -5
  64. package/index.esm.js +330 -0
  65. package/invariant.d.ts +1 -19
  66. package/isAnyObject.d.ts +2 -8
  67. package/isArray.d.ts +1 -7
  68. package/isBlob.d.ts +1 -7
  69. package/isBoolean.d.ts +1 -7
  70. package/isBrowser.d.ts +1 -6
  71. package/isBrowserNow.d.ts +1 -6
  72. package/isDate.d.ts +1 -7
  73. package/isEmptyArray.d.ts +1 -7
  74. package/isEmptyObject.d.ts +4 -8
  75. package/isEmptyString.d.ts +1 -7
  76. package/isError.d.ts +1 -7
  77. package/isExternalUrl.d.ts +1 -9
  78. package/isFile.d.ts +1 -7
  79. package/isFloat.d.ts +1 -7
  80. package/isFormData.d.ts +1 -7
  81. package/isFullArray.d.ts +1 -7
  82. package/isFullObject.d.ts +2 -8
  83. package/isFullString.d.ts +1 -7
  84. package/isFunction.d.ts +2 -8
  85. package/isInt.d.ts +1 -7
  86. package/isMap.d.ts +1 -7
  87. package/isNaNValue.d.ts +1 -7
  88. package/isNegativeNumber.d.ts +1 -7
  89. package/isNull.d.ts +1 -7
  90. package/isNullOrUndefined.d.ts +1 -7
  91. package/isNumber.d.ts +1 -9
  92. package/isNumericLiteral.d.ts +1 -0
  93. package/isObject.d.ts +2 -8
  94. package/isObjectLike.d.ts +2 -10
  95. package/isObjectStringKeyed.d.ts +2 -0
  96. package/isOneOf.d.ts +1 -5
  97. package/isPlainObject.d.ts +2 -8
  98. package/isPositiveNumber.d.ts +1 -7
  99. package/isPrimitive.d.ts +1 -7
  100. package/isPromise.d.ts +1 -7
  101. package/isRegExp.d.ts +1 -7
  102. package/isServer.d.ts +1 -6
  103. package/isServerNow.d.ts +1 -6
  104. package/isSet.d.ts +1 -7
  105. package/isString.d.ts +1 -7
  106. package/isSymbol.d.ts +1 -7
  107. package/isType.d.ts +2 -11
  108. package/isUndefined.d.ts +1 -7
  109. package/isWeakMap.d.ts +1 -7
  110. package/isWeakSet.d.ts +1 -7
  111. package/kbToBytes.d.ts +1 -7
  112. package/location.d.ts +0 -3
  113. package/lowercase.d.ts +1 -7
  114. package/mapListBy.d.ts +1 -7
  115. package/matchSorter.d.ts +2 -10
  116. package/mbToBytes.d.ts +1 -7
  117. package/mergeObjects.d.ts +1 -7
  118. package/mergeUrlQueryParams.d.ts +2 -9
  119. package/moveSortableArrayItemByKey.d.ts +1 -9
  120. package/noop.d.ts +1 -7
  121. package/normaliseUrl.d.ts +1 -11
  122. package/normaliseUrlPathname.d.ts +1 -10
  123. package/objectFlat.d.ts +3 -0
  124. package/objectFlip.d.ts +1 -0
  125. package/objectOmit.d.ts +1 -11
  126. package/objectPick.d.ts +1 -8
  127. package/objectSortByKeysMatching.d.ts +3 -0
  128. package/objectToArray.d.ts +1 -0
  129. package/package.json +9 -10
  130. package/parseCookie.d.ts +2 -11
  131. package/parseURL.d.ts +1 -8
  132. package/quaranteneProps.d.ts +2 -17
  133. package/randomInt.d.ts +1 -7
  134. package/randomKey.d.ts +1 -8
  135. package/readCookie.d.ts +0 -1
  136. package/removeAccents.d.ts +2 -6
  137. package/removeCookie.d.ts +1 -9
  138. package/removeDuplicates.d.ts +0 -0
  139. package/removeDuplicatesByKey.d.ts +1 -8
  140. package/removeDuplicatesComparing.d.ts +1 -5
  141. package/removeIndexesFromArray.d.ts +1 -5
  142. package/removeTrailingSlash.d.ts +1 -7
  143. package/removeUrlQueryParams.d.ts +1 -8
  144. package/render.d.ts +2 -41
  145. package/round.d.ts +2 -0
  146. package/roundTo.d.ts +1 -8
  147. package/serializeCookie.d.ts +2 -27
  148. package/setCookie.d.ts +1 -9
  149. package/shuffle.d.ts +1 -16
  150. package/slugify.d.ts +1 -11
  151. package/split.d.ts +1 -2
  152. package/splitReverse.d.ts +4 -0
  153. package/swapMap.d.ts +1 -7
  154. package/throttle.d.ts +1 -8
  155. package/titleCase.d.ts +1 -7
  156. package/toNumber.d.ts +1 -5
  157. package/toRgba.d.ts +1 -5
  158. package/transformToUrlPathname.d.ts +1 -11
  159. package/truncate.d.ts +1 -7
  160. package/tryUntil.d.ts +1 -8
  161. package/types.d.ts +1 -18
  162. package/typings.d.ts +31 -5
  163. package/uid.d.ts +1 -7
  164. package/updateLinkParams.d.ts +2 -10
  165. package/updateUrlQueryParams.d.ts +2 -9
  166. package/uppercase.d.ts +1 -7
  167. package/uuid.d.ts +1 -8
  168. package/uuidNumeric.d.ts +1 -6
  169. package/wait.d.ts +1 -7
  170. package/without.d.ts +0 -0
  171. package/Defer.js +0 -35
  172. package/Defer.mjs +0 -27
  173. package/Emitter.js +0 -53
  174. package/Emitter.mjs +0 -35
  175. package/accentSets.js +0 -133
  176. package/accentSets.mjs +0 -122
  177. package/addOrReplaceAtIdx.js +0 -40
  178. package/addOrReplaceAtIdx.mjs +0 -22
  179. package/areEqual.js +0 -75
  180. package/areEqual.mjs +0 -71
  181. package/arrayOfAll.js +0 -45
  182. package/arrayOfAll.mjs +0 -27
  183. package/arraySum.js +0 -24
  184. package/arraySum.mjs +0 -6
  185. package/arrayToLookup.js +0 -29
  186. package/arrayToLookup.mjs +0 -11
  187. package/buildUrlQueryString.js +0 -39
  188. package/buildUrlQueryString.mjs +0 -28
  189. package/capitalize.js +0 -28
  190. package/capitalize.mjs +0 -10
  191. package/changeUrlPath.d.ts +0 -10
  192. package/changeUrlPath.js +0 -29
  193. package/changeUrlPath.mjs +0 -17
  194. package/chunkByChunks.js +0 -52
  195. package/chunkByChunks.mjs +0 -34
  196. package/chunkBySize.js +0 -29
  197. package/chunkBySize.mjs +0 -11
  198. package/clamp.js +0 -27
  199. package/clamp.mjs +0 -9
  200. package/clsx.js +0 -59
  201. package/clsx.mjs +0 -46
  202. package/convertRange.js +0 -33
  203. package/convertRange.mjs +0 -15
  204. package/cookie.js +0 -21
  205. package/cookie.mjs +0 -11
  206. package/createPalette.js +0 -34
  207. package/createPalette.mjs +0 -25
  208. package/debounce.js +0 -39
  209. package/debounce.mjs +0 -21
  210. package/debouncePromise.js +0 -21
  211. package/debouncePromise.mjs +0 -8
  212. package/debounceRaf.js +0 -40
  213. package/debounceRaf.mjs +0 -22
  214. package/decode.js +0 -27
  215. package/decode.mjs +0 -9
  216. package/encode.js +0 -27
  217. package/encode.mjs +0 -9
  218. package/ensureInt.js +0 -24
  219. package/ensureInt.mjs +0 -6
  220. package/env.js +0 -3
  221. package/env.mjs +0 -2
  222. package/errorToString.js +0 -22
  223. package/errorToString.mjs +0 -7
  224. package/findDuplicatedIndexes.js +0 -31
  225. package/findDuplicatedIndexes.mjs +0 -13
  226. package/forin.js +0 -28
  227. package/forin.mjs +0 -10
  228. package/gbToBytes.js +0 -24
  229. package/gbToBytes.mjs +0 -6
  230. package/getEmptyArray.js +0 -29
  231. package/getEmptyArray.mjs +0 -16
  232. package/getKeys.js +0 -26
  233. package/getKeys.mjs +0 -8
  234. package/getMediaQueryWidthResolvers.js +0 -81
  235. package/getMediaQueryWidthResolvers.mjs +0 -63
  236. package/getMediaQueryWidthTailwindScreens.js +0 -51
  237. package/getMediaQueryWidthTailwindScreens.mjs +0 -33
  238. package/getNonce.js +0 -23
  239. package/getNonce.mjs +0 -8
  240. package/getParamAmong.js +0 -25
  241. package/getParamAmong.mjs +0 -15
  242. package/getParamAsInt.js +0 -28
  243. package/getParamAsInt.mjs +0 -18
  244. package/getParamAsString.js +0 -24
  245. package/getParamAsString.mjs +0 -13
  246. package/getType.js +0 -30
  247. package/getType.mjs +0 -17
  248. package/getUrlHashParams.js +0 -27
  249. package/getUrlHashParams.mjs +0 -14
  250. package/getUrlHashPathname.js +0 -29
  251. package/getUrlHashPathname.mjs +0 -11
  252. package/getUrlPathnameParts.js +0 -25
  253. package/getUrlPathnameParts.mjs +0 -15
  254. package/getUrlQueryParams.js +0 -36
  255. package/getUrlQueryParams.mjs +0 -27
  256. package/imgEmptyPixel.js +0 -24
  257. package/imgEmptyPixel.mjs +0 -6
  258. package/index.js +0 -532
  259. package/index.mjs +0 -132
  260. package/invariant.js +0 -50
  261. package/invariant.mjs +0 -32
  262. package/isAnyObject.js +0 -24
  263. package/isAnyObject.mjs +0 -9
  264. package/isArray.js +0 -24
  265. package/isArray.mjs +0 -9
  266. package/isBlob.js +0 -24
  267. package/isBlob.mjs +0 -9
  268. package/isBoolean.js +0 -24
  269. package/isBoolean.mjs +0 -9
  270. package/isBrowser.js +0 -23
  271. package/isBrowser.mjs +0 -5
  272. package/isBrowserNow.js +0 -22
  273. package/isBrowserNow.mjs +0 -6
  274. package/isDate.js +0 -24
  275. package/isDate.mjs +0 -9
  276. package/isEmptyArray.js +0 -24
  277. package/isEmptyArray.mjs +0 -9
  278. package/isEmptyObject.js +0 -24
  279. package/isEmptyObject.mjs +0 -9
  280. package/isEmptyString.js +0 -26
  281. package/isEmptyString.mjs +0 -8
  282. package/isError.js +0 -24
  283. package/isError.mjs +0 -9
  284. package/isExternalUrl.js +0 -32
  285. package/isExternalUrl.mjs +0 -19
  286. package/isFile.js +0 -24
  287. package/isFile.mjs +0 -9
  288. package/isFloat.js +0 -24
  289. package/isFloat.mjs +0 -9
  290. package/isFormData.js +0 -24
  291. package/isFormData.mjs +0 -9
  292. package/isFullArray.js +0 -24
  293. package/isFullArray.mjs +0 -9
  294. package/isFullObject.js +0 -24
  295. package/isFullObject.mjs +0 -9
  296. package/isFullString.js +0 -24
  297. package/isFullString.mjs +0 -9
  298. package/isFunction.js +0 -22
  299. package/isFunction.mjs +0 -8
  300. package/isInt.js +0 -24
  301. package/isInt.mjs +0 -9
  302. package/isMap.js +0 -24
  303. package/isMap.mjs +0 -9
  304. package/isNaNValue.js +0 -24
  305. package/isNaNValue.mjs +0 -9
  306. package/isNegativeNumber.js +0 -24
  307. package/isNegativeNumber.mjs +0 -9
  308. package/isNull.js +0 -24
  309. package/isNull.mjs +0 -9
  310. package/isNullOrUndefined.js +0 -24
  311. package/isNullOrUndefined.mjs +0 -9
  312. package/isNumber.js +0 -24
  313. package/isNumber.mjs +0 -11
  314. package/isObject.js +0 -24
  315. package/isObject.mjs +0 -9
  316. package/isObjectLike.js +0 -24
  317. package/isObjectLike.mjs +0 -11
  318. package/isOneOf.js +0 -22
  319. package/isOneOf.mjs +0 -4
  320. package/isPlainObject.js +0 -25
  321. package/isPlainObject.mjs +0 -10
  322. package/isPositiveNumber.js +0 -24
  323. package/isPositiveNumber.mjs +0 -9
  324. package/isPrimitive.js +0 -29
  325. package/isPrimitive.mjs +0 -14
  326. package/isPromise.js +0 -24
  327. package/isPromise.mjs +0 -9
  328. package/isRegExp.js +0 -24
  329. package/isRegExp.mjs +0 -9
  330. package/isServer.js +0 -23
  331. package/isServer.mjs +0 -7
  332. package/isServerNow.js +0 -22
  333. package/isServerNow.mjs +0 -6
  334. package/isSet.js +0 -24
  335. package/isSet.mjs +0 -9
  336. package/isString.js +0 -24
  337. package/isString.mjs +0 -9
  338. package/isSymbol.js +0 -24
  339. package/isSymbol.mjs +0 -9
  340. package/isType.js +0 -32
  341. package/isType.mjs +0 -20
  342. package/isUndefined.js +0 -24
  343. package/isUndefined.mjs +0 -9
  344. package/isWeakMap.js +0 -24
  345. package/isWeakMap.mjs +0 -9
  346. package/isWeakSet.js +0 -24
  347. package/isWeakSet.mjs +0 -9
  348. package/kbToBytes.js +0 -24
  349. package/kbToBytes.mjs +0 -6
  350. package/location.js +0 -6
  351. package/location.mjs +0 -3
  352. package/lowercase.js +0 -24
  353. package/lowercase.mjs +0 -6
  354. package/mapListBy.js +0 -29
  355. package/mapListBy.mjs +0 -11
  356. package/matchSorter.js +0 -373
  357. package/matchSorter.mjs +0 -352
  358. package/mbToBytes.js +0 -24
  359. package/mbToBytes.mjs +0 -6
  360. package/mergeObjects.js +0 -39
  361. package/mergeObjects.mjs +0 -34
  362. package/mergeUrlQueryParams.js +0 -32
  363. package/mergeUrlQueryParams.mjs +0 -18
  364. package/moveSortableArrayItemByKey.js +0 -35
  365. package/moveSortableArrayItemByKey.mjs +0 -17
  366. package/noop.js +0 -24
  367. package/noop.mjs +0 -6
  368. package/normaliseUrl.js +0 -24
  369. package/normaliseUrl.mjs +0 -13
  370. package/normaliseUrlPathname.js +0 -24
  371. package/normaliseUrlPathname.mjs +0 -12
  372. package/objectOmit.js +0 -35
  373. package/objectOmit.mjs +0 -17
  374. package/objectPick.js +0 -32
  375. package/objectPick.mjs +0 -14
  376. package/parseCookie.js +0 -55
  377. package/parseCookie.mjs +0 -44
  378. package/parseURL.js +0 -37
  379. package/parseURL.mjs +0 -19
  380. package/quaranteneProps.js +0 -49
  381. package/quaranteneProps.mjs +0 -31
  382. package/randomInt.js +0 -26
  383. package/randomInt.mjs +0 -8
  384. package/randomKey.js +0 -28
  385. package/randomKey.mjs +0 -10
  386. package/readCookie.js +0 -51
  387. package/readCookie.mjs +0 -33
  388. package/removeAccents.js +0 -28
  389. package/removeAccents.mjs +0 -12
  390. package/removeCookie.js +0 -28
  391. package/removeCookie.mjs +0 -16
  392. package/removeDuplicates.js +0 -13
  393. package/removeDuplicates.mjs +0 -12
  394. package/removeDuplicatesByKey.js +0 -36
  395. package/removeDuplicatesByKey.mjs +0 -18
  396. package/removeDuplicatesComparing.js +0 -25
  397. package/removeDuplicatesComparing.mjs +0 -9
  398. package/removeIndexesFromArray.js +0 -31
  399. package/removeIndexesFromArray.mjs +0 -13
  400. package/removeTrailingSlash.js +0 -26
  401. package/removeTrailingSlash.mjs +0 -8
  402. package/removeUrlQueryParams.js +0 -33
  403. package/removeUrlQueryParams.mjs +0 -19
  404. package/render.js +0 -93
  405. package/render.mjs +0 -110
  406. package/roundTo.js +0 -50
  407. package/roundTo.mjs +0 -32
  408. package/serializeCookie.js +0 -102
  409. package/serializeCookie.mjs +0 -98
  410. package/setCookie.js +0 -68
  411. package/setCookie.mjs +0 -55
  412. package/shuffle.js +0 -50
  413. package/shuffle.mjs +0 -32
  414. package/slugify.js +0 -35
  415. package/slugify.mjs +0 -25
  416. package/split.js +0 -22
  417. package/split.mjs +0 -4
  418. package/swapMap.js +0 -30
  419. package/swapMap.mjs +0 -12
  420. package/throttle.js +0 -38
  421. package/throttle.mjs +0 -20
  422. package/titleCase.js +0 -24
  423. package/titleCase.mjs +0 -6
  424. package/toNumber.js +0 -23
  425. package/toNumber.mjs +0 -7
  426. package/toRgba.js +0 -32
  427. package/toRgba.mjs +0 -14
  428. package/transformToUrlPathname.js +0 -24
  429. package/transformToUrlPathname.mjs +0 -13
  430. package/truncate.js +0 -24
  431. package/truncate.mjs +0 -6
  432. package/tryUntil.js +0 -42
  433. package/tryUntil.mjs +0 -24
  434. package/types.js +0 -5
  435. package/types.mjs +0 -2
  436. package/uid.js +0 -24
  437. package/uid.mjs +0 -10
  438. package/updateLinkParams.js +0 -26
  439. package/updateLinkParams.mjs +0 -13
  440. package/updateUrlQueryParams.js +0 -28
  441. package/updateUrlQueryParams.mjs +0 -14
  442. package/uppercase.js +0 -24
  443. package/uppercase.mjs +0 -6
  444. package/uuid.js +0 -28
  445. package/uuid.mjs +0 -10
  446. package/uuidNumeric.js +0 -23
  447. package/uuidNumeric.mjs +0 -5
  448. package/wait.js +0 -24
  449. package/wait.mjs +0 -6
  450. package/without.js +0 -55
  451. package/without.mjs +0 -54
package/matchSorter.js DELETED
@@ -1,373 +0,0 @@
1
- /**
2
- * @file
3
- *
4
- * Slightly adapted from Kent C. Dodd's [match-sorter](https://github.com/kentcdodds/match-sorter)
5
- * differences are:
6
- * - less exports
7
- * - smaller output
8
- * - no external deps
9
- *
10
- * TODO: turn objects into arrays for smaller output?
11
- *
12
- * @name match-sorter
13
- * @license MIT license.
14
- * @copyright (c) 2020 Kent C. Dodds
15
- * @author Kent C. Dodds <me@kentcdodds.com> (https://kentcdodds.com)
16
- */ "use strict";
17
- Object.defineProperty(exports, "__esModule", {
18
- value: true
19
- });
20
- function _export(target, all) {
21
- for(var name in all)Object.defineProperty(target, name, {
22
- enumerable: true,
23
- get: all[name]
24
- });
25
- }
26
- _export(exports, {
27
- matchSorter: function() {
28
- return matchSorter;
29
- },
30
- defaultBaseSortFn: function() {
31
- return defaultBaseSortFn;
32
- },
33
- default: function() {
34
- return _default;
35
- }
36
- });
37
- const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
38
- const _removeAccents = /*#__PURE__*/ _interop_require_default._(require("./removeAccents"));
39
- const RANKING_CASE_SENSITIVE_EQUAL = 7;
40
- const RANKING_EQUAL = 6;
41
- const RANKING_STARTS_WITH = 5;
42
- const RANKING_WORD_STARTS_WITH = 4;
43
- const RANKING_CONTAINS = 3;
44
- const RANKING_ACRONYM = 2;
45
- const RANKING_MATCHES = 1;
46
- const RANKING_NO_MATCH = 0;
47
- const defaultBaseSortFn = (a, b)=>String(a.rankedValue).localeCompare(String(b.rankedValue));
48
- /**
49
- * Takes an array of items and a value and returns a new array with the items that match the given value
50
- * @param {Array} items - the items to sort
51
- * @param {String} value - the value to use for ranking
52
- * @param {Object} options - Some options to configure the sorter
53
- * @return {Array} - the new sorted array
54
- */ function matchSorter(items, value, options = {}) {
55
- const { keys, threshold = RANKING_MATCHES, baseSort = defaultBaseSortFn, sorter = (matchedItems)=>matchedItems.sort((a, b)=>sortRankedValues(a, b, baseSort)) } = options;
56
- const matchedItems = items.reduce(reduceItemsToRanked, []);
57
- return sorter(matchedItems).map(({ item })=>item);
58
- function reduceItemsToRanked(matches, item, index) {
59
- const rankingInfo = getHighestRanking(item, keys, value, options);
60
- const { rank, keyThreshold = threshold } = rankingInfo;
61
- if (rank >= keyThreshold) {
62
- matches.push({
63
- ...rankingInfo,
64
- item,
65
- index
66
- });
67
- }
68
- return matches;
69
- }
70
- }
71
- /**
72
- * Gets the highest ranking for value for the given item based on its values for the given keys
73
- * @param {*} item - the item to rank
74
- * @param {Array} keys - the keys to get values from the item for the ranking
75
- * @param {String} value - the value to rank against
76
- * @param {Object} options - options to control the ranking
77
- * @return {{rank: Number, keyIndex: Number, keyThreshold: Number}} - the highest ranking
78
- */ function getHighestRanking(item, keys, value, options) {
79
- if (!keys) {
80
- // if keys is not specified, then we assume the item given is ready to be matched
81
- const stringItem = item;
82
- return {
83
- // ends up being duplicate of 'item' in matches but consistent
84
- rankedValue: stringItem,
85
- rank: getMatchRanking(stringItem, value, options),
86
- keyIndex: -1,
87
- keyThreshold: options.threshold
88
- };
89
- }
90
- const valuesToRank = getAllValuesToRank(item, keys);
91
- return valuesToRank.reduce(({ rank, rankedValue, keyIndex, keyThreshold }, { itemValue, attributes }, i)=>{
92
- let newRank = getMatchRanking(itemValue, value, options);
93
- let newRankedValue = rankedValue;
94
- const { minRanking, maxRanking, threshold } = attributes;
95
- if (newRank < minRanking && newRank >= RANKING_MATCHES) {
96
- newRank = minRanking;
97
- } else if (newRank > maxRanking) {
98
- newRank = maxRanking;
99
- }
100
- if (newRank > rank) {
101
- rank = newRank;
102
- keyIndex = i;
103
- keyThreshold = threshold;
104
- newRankedValue = itemValue;
105
- }
106
- return {
107
- rankedValue: newRankedValue,
108
- rank,
109
- keyIndex,
110
- keyThreshold
111
- };
112
- }, {
113
- rankedValue: item,
114
- rank: RANKING_NO_MATCH,
115
- keyIndex: -1,
116
- keyThreshold: options.threshold
117
- });
118
- }
119
- /**
120
- * Gives a rankings score based on how well the two strings match.
121
- * @param {String} testString - the string to test against
122
- * @param {String} stringToRank - the string to rank
123
- * @param {Object} options - options for the match (like keepDiacritics for comparison)
124
- * @returns {Number} the ranking for how well stringToRank matches testString
125
- */ function getMatchRanking(testString, stringToRank, options) {
126
- testString = prepareValueForComparison(testString, options);
127
- stringToRank = prepareValueForComparison(stringToRank, options);
128
- // too long
129
- if (stringToRank.length > testString.length) {
130
- return RANKING_NO_MATCH;
131
- }
132
- // case sensitive equals
133
- if (testString === stringToRank) {
134
- return RANKING_CASE_SENSITIVE_EQUAL;
135
- }
136
- // Lower casing before further comparison
137
- testString = testString.toLowerCase();
138
- stringToRank = stringToRank.toLowerCase();
139
- // case insensitive equals
140
- if (testString === stringToRank) {
141
- return RANKING_EQUAL;
142
- }
143
- // starts with
144
- if (testString.startsWith(stringToRank)) {
145
- return RANKING_STARTS_WITH;
146
- }
147
- // word starts with
148
- if (testString.includes(` ${stringToRank}`)) {
149
- return RANKING_WORD_STARTS_WITH;
150
- }
151
- // contains
152
- if (testString.includes(stringToRank)) {
153
- return RANKING_CONTAINS;
154
- } else if (stringToRank.length === 1) {
155
- // If the only character in the given stringToRank
156
- // isn't even contained in the testString, then
157
- // it's definitely not a match.
158
- return RANKING_NO_MATCH;
159
- }
160
- // acronym
161
- if (getAcronym(testString).includes(stringToRank)) {
162
- return RANKING_ACRONYM;
163
- }
164
- // will return a number between RANKING_MATCHES and
165
- // RANKING_MATCHES + 1 depending on how close of a match it is.
166
- return getClosenessRanking(testString, stringToRank);
167
- }
168
- /**
169
- * Generates an acronym for a string.
170
- *
171
- * @param {String} string the string for which to produce the acronym
172
- * @returns {String} the acronym
173
- */ function getAcronym(string) {
174
- let acronym = "";
175
- const wordsInString = string.split(" ");
176
- wordsInString.forEach((wordInString)=>{
177
- const splitByHyphenWords = wordInString.split("-");
178
- splitByHyphenWords.forEach((splitByHyphenWord)=>{
179
- acronym += splitByHyphenWord.substring(0, 1);
180
- });
181
- });
182
- return acronym;
183
- }
184
- /**
185
- * Returns a score based on how spread apart the
186
- * characters from the stringToRank are within the testString.
187
- * A number close to RANKING_MATCHES represents a loose match. A number close
188
- * to RANKING_MATCHES + 1 represents a tighter match.
189
- * @param {String} testString - the string to test against
190
- * @param {String} stringToRank - the string to rank
191
- * @returns {Number} the number between RANKING_MATCHES and
192
- * RANKING_MATCHES + 1 for how well stringToRank matches testString
193
- */ function getClosenessRanking(testString, stringToRank) {
194
- let matchingInOrderCharCount = 0;
195
- let charNumber = 0;
196
- function findMatchingCharacter(matchChar, string, index) {
197
- for(let j = index, J = string.length; j < J; j++){
198
- const stringChar = string[j];
199
- if (stringChar === matchChar) {
200
- matchingInOrderCharCount += 1;
201
- return j + 1;
202
- }
203
- }
204
- return -1;
205
- }
206
- function getRanking(spread) {
207
- const spreadPercentage = 1 / spread;
208
- const inOrderPercentage = matchingInOrderCharCount / stringToRank.length;
209
- const ranking = RANKING_MATCHES + inOrderPercentage * spreadPercentage;
210
- return ranking;
211
- }
212
- const firstIndex = findMatchingCharacter(stringToRank[0], testString, 0);
213
- if (firstIndex < 0) {
214
- return RANKING_NO_MATCH;
215
- }
216
- charNumber = firstIndex;
217
- for(let i = 1, I = stringToRank.length; i < I; i++){
218
- const matchChar = stringToRank[i];
219
- charNumber = findMatchingCharacter(matchChar, testString, charNumber);
220
- const found = charNumber > -1;
221
- if (!found) {
222
- return RANKING_NO_MATCH;
223
- }
224
- }
225
- const spread = charNumber - firstIndex;
226
- return getRanking(spread);
227
- }
228
- /**
229
- * Sorts items that have a rank, index, and keyIndex
230
- * @param {Object} a - the first item to sort
231
- * @param {Object} b - the second item to sort
232
- * @return {Number} -1 if a should come first, 1 if b should come first, 0 if equal
233
- */ function sortRankedValues(a, b, baseSort) {
234
- const aFirst = -1;
235
- const bFirst = 1;
236
- const { rank: aRank, keyIndex: aKeyIndex } = a;
237
- const { rank: bRank, keyIndex: bKeyIndex } = b;
238
- const same = aRank === bRank;
239
- if (same) {
240
- if (aKeyIndex === bKeyIndex) {
241
- // use the base sort function as a tie-breaker
242
- return baseSort(a, b);
243
- } else {
244
- return aKeyIndex < bKeyIndex ? aFirst : bFirst;
245
- }
246
- } else {
247
- return aRank > bRank ? aFirst : bFirst;
248
- }
249
- }
250
- /**
251
- * Prepares value for comparison by stringifying it, removing diacritics (if specified)
252
- * @param {String} value - the value to clean
253
- * @param {Object} options - {keepDiacritics: whether to remove diacritics}
254
- * @return {String} the prepared value
255
- */ function prepareValueForComparison(value, { keepDiacritics }) {
256
- // value might not actually be a string at this point (we don't get to choose)
257
- // so part of preparing the value for comparison is ensure that it is a string
258
- value = `${value}`; // toString
259
- if (!keepDiacritics) {
260
- value = (0, _removeAccents.default)(value);
261
- }
262
- return value;
263
- }
264
- /**
265
- * Gets value for key in item at arbitrarily nested keypath
266
- * @param {Object} item - the item
267
- * @param {Object|Function} key - the potentially nested keypath or property callback
268
- * @return {Array} - an array containing the value(s) at the nested keypath
269
- */ function getItemValues(item, key) {
270
- if (typeof key === "object") {
271
- key = key.key;
272
- }
273
- let value;
274
- if (typeof key === "function") {
275
- value = key(item);
276
- } else if (item == null) {
277
- value = null;
278
- } else if (Object.hasOwnProperty.call(item, key)) {
279
- value = item[key];
280
- } else if (key.includes(".")) {
281
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
282
- return getNestedValues(key, item);
283
- } else {
284
- value = null;
285
- }
286
- // because `value` can also be undefined
287
- if (value == null) {
288
- return [];
289
- }
290
- if (Array.isArray(value)) {
291
- return value;
292
- }
293
- return [
294
- String(value)
295
- ];
296
- }
297
- /**
298
- * Given path: "foo.bar.baz"
299
- * And item: {foo: {bar: {baz: 'buzz'}}}
300
- * -> 'buzz'
301
- * @param path a dot-separated set of keys
302
- * @param item the item to get the value from
303
- */ function getNestedValues(path, item) {
304
- const keys = path.split(".");
305
- let values = [
306
- item
307
- ];
308
- for(let i = 0, I = keys.length; i < I; i++){
309
- const nestedKey = keys[i];
310
- let nestedValues = [];
311
- for(let j = 0, J = values.length; j < J; j++){
312
- const nestedItem = values[j];
313
- if (nestedItem == null) continue;
314
- if (Object.hasOwnProperty.call(nestedItem, nestedKey)) {
315
- const nestedValue = nestedItem[nestedKey];
316
- if (nestedValue != null) {
317
- nestedValues.push(nestedValue);
318
- }
319
- } else if (nestedKey === "*") {
320
- // ensure that values is an array
321
- nestedValues = nestedValues.concat(nestedItem);
322
- }
323
- }
324
- values = nestedValues;
325
- }
326
- if (Array.isArray(values[0])) {
327
- // keep allowing the implicit wildcard for an array of strings at the end of
328
- // the path; don't use `.flat()` because that's not available in node.js v10
329
- const result = [];
330
- return result.concat(...values);
331
- }
332
- // Based on our logic it should be an array of strings by now...
333
- // assuming the user's path terminated in strings
334
- return values;
335
- }
336
- /**
337
- * Gets all the values for the given keys in the given item and returns an array of those values
338
- * @param item - the item from which the values will be retrieved
339
- * @param keys - the keys to use to retrieve the values
340
- * @return objects with {itemValue, attributes}
341
- */ function getAllValuesToRank(item, keys) {
342
- const allValues = [];
343
- for(let j = 0, J = keys.length; j < J; j++){
344
- const key = keys[j];
345
- const attributes = getKeyAttributes(key);
346
- const itemValues = getItemValues(item, key);
347
- for(let i = 0, I = itemValues.length; i < I; i++){
348
- allValues.push({
349
- itemValue: itemValues[i],
350
- attributes
351
- });
352
- }
353
- }
354
- return allValues;
355
- }
356
- const defaultKeyAttributes = {
357
- maxRanking: Infinity,
358
- minRanking: -Infinity
359
- };
360
- /**
361
- * Gets all the attributes for the given key
362
- * @param key - the key from which the attributes will be retrieved
363
- * @return object containing the key's attributes
364
- */ function getKeyAttributes(key) {
365
- if (typeof key === "string") {
366
- return defaultKeyAttributes;
367
- }
368
- return {
369
- ...defaultKeyAttributes,
370
- ...key
371
- };
372
- }
373
- const _default = matchSorter;