@vinicunca/perkakas 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (569) hide show
  1. package/dist/add-prop.cjs +1 -1
  2. package/dist/add-prop.d.cts +1 -1
  3. package/dist/add-prop.d.ts +1 -1
  4. package/dist/add-prop.js +1 -1
  5. package/dist/add.cjs +1 -1
  6. package/dist/add.js +1 -1
  7. package/dist/all-pass.cjs +1 -1
  8. package/dist/all-pass.js +1 -1
  9. package/dist/any-pass.cjs +1 -1
  10. package/dist/any-pass.js +1 -1
  11. package/dist/array-required-prefix-Ck4lHkbA.d.cts +33 -0
  12. package/dist/array-required-prefix-DXv_WnmG.d.ts +33 -0
  13. package/dist/bounded-partial-BqwRN49U.d.cts +15 -0
  14. package/dist/bounded-partial-BzynYDVs.d.ts +15 -0
  15. package/dist/ceil.cjs +1 -1
  16. package/dist/ceil.js +1 -1
  17. package/dist/{chunk-AJQEGHF5.cjs → chunk-22AQJBPW.cjs} +1 -1
  18. package/dist/chunk-2HQM73IT.cjs +1 -0
  19. package/dist/chunk-2XGSSTCA.js +1 -0
  20. package/dist/chunk-3DOG24FJ.cjs +1 -0
  21. package/dist/{chunk-6ENW2VLC.cjs → chunk-3LC3CLYE.cjs} +1 -1
  22. package/dist/chunk-44LUF6RO.js +1 -0
  23. package/dist/chunk-4BTTPOEU.cjs +1 -0
  24. package/dist/chunk-4Y6KJJOW.js +1 -0
  25. package/dist/chunk-5PMGMODH.js +1 -0
  26. package/dist/{chunk-GVYLRJPB.cjs → chunk-66JP4PUG.cjs} +1 -1
  27. package/dist/chunk-6M4IYQFZ.js +1 -0
  28. package/dist/chunk-76VE5EC6.cjs +1 -0
  29. package/dist/{chunk-TNA73S2T.cjs → chunk-7C7R7JNX.cjs} +1 -1
  30. package/dist/{chunk-WONMP5WS.js → chunk-7V7IBWP5.js} +1 -1
  31. package/dist/chunk-B6SBIS6W.js +1 -0
  32. package/dist/chunk-BEMQAYI5.cjs +1 -0
  33. package/dist/chunk-BKBHW2XJ.js +1 -0
  34. package/dist/chunk-BSNCALDT.cjs +1 -0
  35. package/dist/chunk-CTGIT5TY.js +1 -0
  36. package/dist/{chunk-UGWBDJPI.cjs → chunk-D4TUHKBA.cjs} +1 -1
  37. package/dist/chunk-EK7ODJWE.js +1 -0
  38. package/dist/chunk-FGMSPUSF.cjs +1 -0
  39. package/dist/chunk-FIO5FNV2.js +1 -0
  40. package/dist/chunk-FOUZI2Q3.cjs +1 -0
  41. package/dist/chunk-GRKRFDIL.js +1 -0
  42. package/dist/chunk-GW4KDK3D.cjs +1 -0
  43. package/dist/chunk-HSNPZS6R.cjs +1 -0
  44. package/dist/chunk-ITDJLXHO.js +1 -0
  45. package/dist/{chunk-FLQYTU5W.cjs → chunk-JHFSYEXB.cjs} +1 -1
  46. package/dist/{chunk-WCPENZWH.js → chunk-JI5FJX2E.js} +1 -1
  47. package/dist/chunk-JYWIRZ2Z.js +1 -0
  48. package/dist/chunk-K26HQR4Y.cjs +1 -0
  49. package/dist/chunk-KYMVIFAW.cjs +1 -0
  50. package/dist/chunk-MBGSSEZN.cjs +1 -0
  51. package/dist/{chunk-22IDCBFS.js → chunk-MPWQN3WY.js} +1 -1
  52. package/dist/chunk-NHTBBY2L.js +1 -0
  53. package/dist/chunk-NQUTCPKD.js +1 -0
  54. package/dist/{chunk-ZQXE6PIV.cjs → chunk-NVCXF5UR.cjs} +1 -1
  55. package/dist/chunk-O74TUGYF.js +1 -0
  56. package/dist/chunk-OKBFQ7B6.js +1 -0
  57. package/dist/{chunk-MHEODCN3.cjs → chunk-OMHZCALN.cjs} +1 -1
  58. package/dist/chunk-P7RCAO7P.cjs +438 -0
  59. package/dist/chunk-QGF2XNZS.cjs +1 -0
  60. package/dist/chunk-R4O7XE2F.cjs +1 -0
  61. package/dist/chunk-RMOD5JNB.cjs +1 -0
  62. package/dist/chunk-RTFVY5D4.cjs +1 -0
  63. package/dist/chunk-SG2YWG6U.cjs +1 -0
  64. package/dist/chunk-SXNRBENP.cjs +1 -0
  65. package/dist/chunk-TSP3FU72.cjs +1 -0
  66. package/dist/chunk-TVMG2NYC.js +1 -0
  67. package/dist/chunk-TWCEO47X.cjs +1 -0
  68. package/dist/{chunk-L4FN2W5Q.cjs → chunk-TXPRX236.cjs} +1 -1
  69. package/dist/{chunk-3K7SNX4D.cjs → chunk-UURK6I3D.cjs} +1 -1
  70. package/dist/chunk-UWMBE6BM.js +1 -0
  71. package/dist/{chunk-VBH6SKKO.js → chunk-VI2QG3FU.js} +1 -1
  72. package/dist/chunk-XCG2UC6T.js +1 -0
  73. package/dist/chunk-YCSQX2SY.js +1 -0
  74. package/dist/{chunk-6XVLHSPK.js → chunk-YRVN4PYH.js} +1 -1
  75. package/dist/chunk-YWIXN5BR.js +1 -0
  76. package/dist/chunk-Z23BZCCD.js +438 -0
  77. package/dist/{chunk-EDZFEURO.js → chunk-Z5YZYBC2.js} +1 -1
  78. package/dist/chunk-Z7D7Q6U3.js +1 -0
  79. package/dist/chunk-ZITGCTSW.js +1 -0
  80. package/dist/chunk-ZMG3NQDL.js +1 -0
  81. package/dist/chunk.cjs +1 -1
  82. package/dist/chunk.d.cts +37 -41
  83. package/dist/chunk.d.ts +37 -41
  84. package/dist/chunk.js +1 -1
  85. package/dist/clamp.cjs +1 -1
  86. package/dist/clamp.js +1 -1
  87. package/dist/clamped-integer-subtract-DZ7rsJE4.d.cts +15 -0
  88. package/dist/clamped-integer-subtract-DZ7rsJE4.d.ts +15 -0
  89. package/dist/clone.cjs +1 -1
  90. package/dist/clone.js +1 -1
  91. package/dist/coerced-array-DRz3tqda.d.cts +14 -0
  92. package/dist/coerced-array-DRz3tqda.d.ts +14 -0
  93. package/dist/concat.cjs +1 -1
  94. package/dist/concat.js +1 -1
  95. package/dist/conditional.cjs +1 -1
  96. package/dist/conditional.d.cts +133 -43
  97. package/dist/conditional.d.ts +133 -43
  98. package/dist/conditional.js +1 -1
  99. package/dist/constant.cjs +1 -1
  100. package/dist/constant.js +1 -1
  101. package/dist/count-by.cjs +1 -1
  102. package/dist/count-by.d.cts +5 -4
  103. package/dist/count-by.d.ts +5 -4
  104. package/dist/count-by.js +1 -1
  105. package/dist/curry.cjs +1 -1
  106. package/dist/curry.js +1 -1
  107. package/dist/debounce.cjs +1 -1
  108. package/dist/debounce.js +1 -1
  109. package/dist/difference-with.cjs +1 -1
  110. package/dist/difference-with.js +1 -1
  111. package/dist/difference.cjs +1 -1
  112. package/dist/difference.js +1 -1
  113. package/dist/divide.cjs +1 -1
  114. package/dist/divide.js +1 -1
  115. package/dist/do-nothing.cjs +1 -1
  116. package/dist/do-nothing.js +1 -1
  117. package/dist/drop-first-by.cjs +1 -1
  118. package/dist/drop-first-by.d.cts +1 -1
  119. package/dist/drop-first-by.d.ts +1 -1
  120. package/dist/drop-first-by.js +1 -1
  121. package/dist/drop-last-while.cjs +1 -1
  122. package/dist/drop-last-while.js +1 -1
  123. package/dist/drop-last.cjs +1 -1
  124. package/dist/drop-last.js +1 -1
  125. package/dist/drop-while.cjs +1 -1
  126. package/dist/drop-while.js +1 -1
  127. package/dist/drop.cjs +1 -1
  128. package/dist/drop.d.cts +18 -30
  129. package/dist/drop.d.ts +18 -30
  130. package/dist/drop.js +1 -1
  131. package/dist/entries.cjs +1 -1
  132. package/dist/entries.d.cts +8 -5
  133. package/dist/entries.d.ts +8 -5
  134. package/dist/entries.js +1 -1
  135. package/dist/{enumerable-string-key-of-BQ4aR5ep.d.cts → enumerable-string-key-of-C4gsorXe.d.ts} +3 -1
  136. package/dist/{enumerable-string-key-of-BQ4aR5ep.d.ts → enumerable-string-key-of-D8w_3Yg8.d.cts} +3 -1
  137. package/dist/enumerable-string-keyed-value-of-BU9R_cEk.d.cts +9 -0
  138. package/dist/enumerable-string-keyed-value-of-BU9R_cEk.d.ts +9 -0
  139. package/dist/evolve.cjs +1 -1
  140. package/dist/evolve.js +1 -1
  141. package/dist/filter.cjs +1 -1
  142. package/dist/filter.d.cts +12 -4
  143. package/dist/filter.d.ts +12 -4
  144. package/dist/filter.js +1 -1
  145. package/dist/filtered-array-BCjySbC6.d.cts +18 -0
  146. package/dist/filtered-array-JKATL39M.d.ts +18 -0
  147. package/dist/find-index.cjs +1 -1
  148. package/dist/find-index.js +1 -1
  149. package/dist/find-last-index.cjs +1 -1
  150. package/dist/find-last-index.js +1 -1
  151. package/dist/find-last.cjs +1 -1
  152. package/dist/find-last.js +1 -1
  153. package/dist/find.cjs +1 -1
  154. package/dist/find.js +1 -1
  155. package/dist/first-by.cjs +1 -1
  156. package/dist/first-by.d.cts +1 -1
  157. package/dist/first-by.d.ts +1 -1
  158. package/dist/first-by.js +1 -1
  159. package/dist/first.cjs +1 -1
  160. package/dist/first.js +1 -1
  161. package/dist/flat-map.cjs +1 -1
  162. package/dist/flat-map.js +1 -1
  163. package/dist/flat.cjs +1 -1
  164. package/dist/flat.d.cts +2 -5
  165. package/dist/flat.d.ts +2 -5
  166. package/dist/flat.js +1 -1
  167. package/dist/floor.cjs +1 -1
  168. package/dist/floor.js +1 -1
  169. package/dist/for-each-obj.cjs +1 -1
  170. package/dist/for-each-obj.d.cts +3 -2
  171. package/dist/for-each-obj.d.ts +3 -2
  172. package/dist/for-each-obj.js +1 -1
  173. package/dist/for-each.cjs +1 -1
  174. package/dist/for-each.js +1 -1
  175. package/dist/from-entries.cjs +1 -1
  176. package/dist/from-entries.d.cts +4 -2
  177. package/dist/from-entries.d.ts +4 -2
  178. package/dist/from-entries.js +1 -1
  179. package/dist/from-keys.cjs +1 -1
  180. package/dist/from-keys.d.cts +4 -3
  181. package/dist/from-keys.d.ts +4 -3
  182. package/dist/from-keys.js +1 -1
  183. package/dist/funnel.cjs +1 -1
  184. package/dist/funnel.d.cts +7 -7
  185. package/dist/funnel.d.ts +7 -7
  186. package/dist/funnel.js +1 -1
  187. package/dist/funnel.lodash-debounce-with-cached-value.test.cjs +1 -1
  188. package/dist/funnel.lodash-debounce-with-cached-value.test.js +1 -1
  189. package/dist/funnel.lodash-debounce.test.cjs +1 -1
  190. package/dist/funnel.lodash-debounce.test.js +1 -1
  191. package/dist/funnel.lodash-throttle-with-cached-value.test.cjs +1 -1
  192. package/dist/funnel.lodash-throttle-with-cached-value.test.js +1 -1
  193. package/dist/funnel.lodash-throttle.test.cjs +1 -1
  194. package/dist/funnel.lodash-throttle.test.js +1 -1
  195. package/dist/funnel.perkakas-debounce.test.cjs +1 -0
  196. package/dist/funnel.perkakas-debounce.test.js +1 -0
  197. package/dist/funnel.reference-batch.test.cjs +1 -1
  198. package/dist/funnel.reference-batch.test.js +1 -1
  199. package/dist/funnel.test-d.cjs +1 -1
  200. package/dist/funnel.test-d.js +1 -1
  201. package/dist/funnel.test.cjs +1 -1
  202. package/dist/funnel.test.js +1 -1
  203. package/dist/group-by-prop.cjs +1 -0
  204. package/dist/group-by-prop.d.cts +93 -0
  205. package/dist/group-by-prop.d.ts +93 -0
  206. package/dist/group-by-prop.js +1 -0
  207. package/dist/group-by.cjs +1 -1
  208. package/dist/group-by.d.cts +15 -4
  209. package/dist/group-by.d.ts +15 -4
  210. package/dist/group-by.js +1 -1
  211. package/dist/has-at-least.cjs +1 -1
  212. package/dist/has-at-least.d.cts +7 -15
  213. package/dist/has-at-least.d.ts +7 -15
  214. package/dist/has-at-least.js +1 -1
  215. package/dist/has-sub-object.cjs +1 -1
  216. package/dist/has-sub-object.js +1 -1
  217. package/dist/human-readable-file-size.cjs +1 -1
  218. package/dist/human-readable-file-size.js +1 -1
  219. package/dist/identity.cjs +1 -1
  220. package/dist/identity.js +1 -1
  221. package/dist/if-D4QIikQ1.d.cts +5 -0
  222. package/dist/if-D4QIikQ1.d.ts +5 -0
  223. package/dist/index-by.cjs +1 -1
  224. package/dist/index-by.d.cts +5 -4
  225. package/dist/index-by.d.ts +5 -4
  226. package/dist/index-by.js +1 -1
  227. package/dist/index.cjs +1 -1
  228. package/dist/index.d.cts +15 -8
  229. package/dist/index.d.ts +15 -8
  230. package/dist/index.js +1 -1
  231. package/dist/intersection-with.cjs +1 -1
  232. package/dist/intersection-with.js +1 -1
  233. package/dist/intersection.cjs +1 -1
  234. package/dist/intersection.js +1 -1
  235. package/dist/invert.cjs +1 -1
  236. package/dist/invert.d.cts +2 -1
  237. package/dist/invert.d.ts +2 -1
  238. package/dist/invert.js +1 -1
  239. package/dist/is-array.cjs +1 -1
  240. package/dist/is-array.js +1 -1
  241. package/dist/is-big-int.cjs +1 -1
  242. package/dist/is-big-int.js +1 -1
  243. package/dist/is-boolean.cjs +1 -1
  244. package/dist/is-boolean.js +1 -1
  245. package/dist/is-bounded-record-C9WAwfA8.d.cts +30 -0
  246. package/dist/is-bounded-record-C9WAwfA8.d.ts +30 -0
  247. package/dist/is-date.cjs +1 -1
  248. package/dist/is-date.js +1 -1
  249. package/dist/is-deep-equal.cjs +1 -1
  250. package/dist/is-deep-equal.js +1 -1
  251. package/dist/is-defined.cjs +1 -1
  252. package/dist/is-defined.js +1 -1
  253. package/dist/is-empty.cjs +1 -1
  254. package/dist/is-empty.js +1 -1
  255. package/dist/is-error.cjs +1 -1
  256. package/dist/is-error.js +1 -1
  257. package/dist/is-function.cjs +1 -1
  258. package/dist/is-function.js +1 -1
  259. package/dist/is-included-in.cjs +1 -1
  260. package/dist/is-included-in.js +1 -1
  261. package/dist/is-non-null.cjs +1 -1
  262. package/dist/is-non-null.js +1 -1
  263. package/dist/is-non-nullish.cjs +1 -1
  264. package/dist/is-non-nullish.js +1 -1
  265. package/dist/is-not.cjs +1 -1
  266. package/dist/is-not.js +1 -1
  267. package/dist/is-nullish.cjs +1 -1
  268. package/dist/is-nullish.js +1 -1
  269. package/dist/is-number.cjs +1 -1
  270. package/dist/is-number.js +1 -1
  271. package/dist/is-object-type.cjs +1 -1
  272. package/dist/is-object-type.js +1 -1
  273. package/dist/is-plain-object.cjs +1 -1
  274. package/dist/is-plain-object.js +1 -1
  275. package/dist/is-promise.cjs +1 -1
  276. package/dist/is-promise.js +1 -1
  277. package/dist/is-shallow-equal.cjs +1 -1
  278. package/dist/is-shallow-equal.js +1 -1
  279. package/dist/is-strict-equal.cjs +1 -1
  280. package/dist/is-strict-equal.js +1 -1
  281. package/dist/is-string.cjs +1 -1
  282. package/dist/is-string.js +1 -1
  283. package/dist/is-symbol.cjs +1 -1
  284. package/dist/is-symbol.js +1 -1
  285. package/dist/is-truthy.cjs +1 -1
  286. package/dist/is-truthy.js +1 -1
  287. package/dist/join.cjs +1 -1
  288. package/dist/join.js +1 -1
  289. package/dist/key-codes.cjs +1 -1
  290. package/dist/key-codes.js +1 -1
  291. package/dist/keys.cjs +1 -1
  292. package/dist/keys.d.cts +4 -3
  293. package/dist/keys.d.ts +4 -3
  294. package/dist/keys.js +1 -1
  295. package/dist/last.cjs +1 -1
  296. package/dist/last.js +1 -1
  297. package/dist/length.cjs +1 -1
  298. package/dist/length.js +1 -1
  299. package/dist/magic-string.es-2ADFIHOO.cjs +13 -0
  300. package/dist/magic-string.es-PNCTE22R.js +13 -0
  301. package/dist/map-keys.cjs +1 -1
  302. package/dist/map-keys.d.cts +8 -6
  303. package/dist/map-keys.d.ts +8 -6
  304. package/dist/map-keys.js +1 -1
  305. package/dist/map-to-obj.cjs +1 -1
  306. package/dist/map-to-obj.d.cts +30 -12
  307. package/dist/map-to-obj.d.ts +30 -12
  308. package/dist/map-to-obj.js +1 -1
  309. package/dist/map-values.cjs +1 -1
  310. package/dist/map-values.d.cts +3 -2
  311. package/dist/map-values.d.ts +3 -2
  312. package/dist/map-values.js +1 -1
  313. package/dist/map-with-feedback.cjs +1 -1
  314. package/dist/map-with-feedback.js +1 -1
  315. package/dist/map.cjs +1 -1
  316. package/dist/map.js +1 -1
  317. package/dist/mean-by.cjs +1 -1
  318. package/dist/mean-by.js +1 -1
  319. package/dist/merge-all.cjs +1 -1
  320. package/dist/merge-all.d.cts +2 -1
  321. package/dist/merge-all.d.ts +2 -1
  322. package/dist/merge-all.js +1 -1
  323. package/dist/merge-deep.cjs +1 -1
  324. package/dist/merge-deep.js +1 -1
  325. package/dist/merge.cjs +1 -1
  326. package/dist/merge.js +1 -1
  327. package/dist/multiply.cjs +1 -1
  328. package/dist/multiply.js +1 -1
  329. package/dist/nth-by.cjs +1 -1
  330. package/dist/nth-by.d.cts +1 -1
  331. package/dist/nth-by.d.ts +1 -1
  332. package/dist/nth-by.js +1 -1
  333. package/dist/obj-of.cjs +1 -1
  334. package/dist/obj-of.js +1 -1
  335. package/dist/omit-by.cjs +1 -1
  336. package/dist/omit-by.d.cts +7 -6
  337. package/dist/omit-by.d.ts +7 -6
  338. package/dist/omit-by.js +1 -1
  339. package/dist/omit.cjs +1 -1
  340. package/dist/omit.js +1 -1
  341. package/dist/once.cjs +1 -1
  342. package/dist/once.js +1 -1
  343. package/dist/only.cjs +1 -1
  344. package/dist/only.js +1 -1
  345. package/dist/partial-array-Vnf1fBtl.d.cts +10 -0
  346. package/dist/partial-array-Vnf1fBtl.d.ts +10 -0
  347. package/dist/partition.cjs +1 -1
  348. package/dist/partition.js +1 -1
  349. package/dist/path-or.cjs +1 -1
  350. package/dist/path-or.js +1 -1
  351. package/dist/perkakas-type-error-8wPb8T2y.d.cts +17 -0
  352. package/dist/perkakas-type-error-8wPb8T2y.d.ts +17 -0
  353. package/dist/pick-by.cjs +1 -1
  354. package/dist/pick-by.d.cts +11 -11
  355. package/dist/pick-by.d.ts +11 -11
  356. package/dist/pick-by.js +1 -1
  357. package/dist/pick.cjs +1 -1
  358. package/dist/pick.d.cts +52 -7
  359. package/dist/pick.d.ts +52 -7
  360. package/dist/pick.js +1 -1
  361. package/dist/pipe.cjs +1 -1
  362. package/dist/pipe.js +1 -1
  363. package/dist/piped.cjs +1 -1
  364. package/dist/piped.js +1 -1
  365. package/dist/product.cjs +1 -1
  366. package/dist/product.js +1 -1
  367. package/dist/prop.cjs +1 -1
  368. package/dist/prop.js +1 -1
  369. package/dist/pull-object.cjs +1 -1
  370. package/dist/pull-object.d.cts +5 -4
  371. package/dist/pull-object.d.ts +5 -4
  372. package/dist/pull-object.js +1 -1
  373. package/dist/random-integer.cjs +1 -1
  374. package/dist/random-integer.js +1 -1
  375. package/dist/random-string.cjs +1 -1
  376. package/dist/random-string.js +1 -1
  377. package/dist/range.cjs +1 -1
  378. package/dist/range.js +1 -1
  379. package/dist/rank-by.cjs +1 -1
  380. package/dist/rank-by.d.cts +1 -1
  381. package/dist/rank-by.d.ts +1 -1
  382. package/dist/rank-by.js +1 -1
  383. package/dist/reduce.cjs +1 -1
  384. package/dist/reduce.js +1 -1
  385. package/dist/reverse.cjs +1 -1
  386. package/dist/reverse.js +1 -1
  387. package/dist/round.cjs +1 -1
  388. package/dist/round.js +1 -1
  389. package/dist/sample.cjs +1 -1
  390. package/dist/sample.js +1 -1
  391. package/dist/set-path.cjs +1 -1
  392. package/dist/set-path.d.cts +18 -7
  393. package/dist/set-path.d.ts +18 -7
  394. package/dist/set-path.js +1 -1
  395. package/dist/set.cjs +1 -1
  396. package/dist/set.d.cts +1 -1
  397. package/dist/set.d.ts +1 -1
  398. package/dist/set.js +1 -1
  399. package/dist/shuffle.cjs +1 -1
  400. package/dist/shuffle.js +1 -1
  401. package/dist/sleep.cjs +1 -1
  402. package/dist/sleep.js +1 -1
  403. package/dist/slice-string.cjs +1 -1
  404. package/dist/slice-string.js +1 -1
  405. package/dist/slugify.cjs +1 -1
  406. package/dist/slugify.js +1 -1
  407. package/dist/sort-by.cjs +1 -1
  408. package/dist/sort-by.d.cts +1 -1
  409. package/dist/sort-by.d.ts +1 -1
  410. package/dist/sort-by.js +1 -1
  411. package/dist/sort.cjs +1 -1
  412. package/dist/sort.js +1 -1
  413. package/dist/sorted-index-by.cjs +1 -1
  414. package/dist/sorted-index-by.js +1 -1
  415. package/dist/sorted-index-with.cjs +1 -1
  416. package/dist/sorted-index-with.js +1 -1
  417. package/dist/sorted-index.cjs +1 -1
  418. package/dist/sorted-index.js +1 -1
  419. package/dist/sorted-last-index-by.cjs +1 -1
  420. package/dist/sorted-last-index-by.js +1 -1
  421. package/dist/sorted-last-index.cjs +1 -1
  422. package/dist/sorted-last-index.js +1 -1
  423. package/dist/splice.cjs +1 -1
  424. package/dist/splice.js +1 -1
  425. package/dist/split-at.cjs +1 -1
  426. package/dist/split-at.js +1 -1
  427. package/dist/split-when.cjs +1 -1
  428. package/dist/split-when.js +1 -1
  429. package/dist/split.cjs +1 -1
  430. package/dist/split.js +1 -1
  431. package/dist/string-to-path.cjs +1 -1
  432. package/dist/string-to-path.d.cts +33 -11
  433. package/dist/string-to-path.d.ts +33 -11
  434. package/dist/string-to-path.js +1 -1
  435. package/dist/subtract.cjs +1 -1
  436. package/dist/subtract.js +1 -1
  437. package/dist/sum-by.cjs +1 -1
  438. package/dist/sum-by.js +1 -1
  439. package/dist/sum.cjs +1 -1
  440. package/dist/sum.js +1 -1
  441. package/dist/swap-indices.cjs +1 -1
  442. package/dist/swap-indices.js +1 -1
  443. package/dist/swap-props.cjs +1 -1
  444. package/dist/swap-props.js +1 -1
  445. package/dist/take-first-by.cjs +1 -1
  446. package/dist/take-first-by.d.cts +1 -1
  447. package/dist/take-first-by.d.ts +1 -1
  448. package/dist/take-first-by.js +1 -1
  449. package/dist/take-last-while.cjs +1 -1
  450. package/dist/take-last-while.d.cts +2 -0
  451. package/dist/take-last-while.d.ts +2 -0
  452. package/dist/take-last-while.js +1 -1
  453. package/dist/take-last.cjs +1 -1
  454. package/dist/take-last.js +1 -1
  455. package/dist/take-while.cjs +1 -1
  456. package/dist/take-while.d.cts +2 -0
  457. package/dist/take-while.d.ts +2 -0
  458. package/dist/take-while.js +1 -1
  459. package/dist/take.cjs +1 -1
  460. package/dist/take.js +1 -1
  461. package/dist/tap.cjs +1 -1
  462. package/dist/tap.js +1 -1
  463. package/dist/times.cjs +1 -1
  464. package/dist/times.d.cts +1 -9
  465. package/dist/times.d.ts +1 -9
  466. package/dist/times.js +1 -1
  467. package/dist/to-camel-case.cjs +1 -1
  468. package/dist/to-camel-case.js +1 -1
  469. package/dist/to-capital-case.cjs +1 -1
  470. package/dist/to-capital-case.js +1 -1
  471. package/dist/to-constant-case.cjs +1 -1
  472. package/dist/to-constant-case.js +1 -1
  473. package/dist/to-kebab-case.cjs +1 -1
  474. package/dist/to-kebab-case.js +1 -1
  475. package/dist/to-no-case.cjs +1 -1
  476. package/dist/to-no-case.js +1 -1
  477. package/dist/to-pascal-case.cjs +1 -1
  478. package/dist/to-pascal-case.js +1 -1
  479. package/dist/to-pascal-snake-case.cjs +1 -1
  480. package/dist/to-pascal-snake-case.js +1 -1
  481. package/dist/to-sentence-case.cjs +1 -1
  482. package/dist/to-sentence-case.js +1 -1
  483. package/dist/to-snake-case.cjs +1 -1
  484. package/dist/to-snake-case.js +1 -1
  485. package/dist/to-string-DO8zw6jS.d.cts +11 -0
  486. package/dist/to-string-DO8zw6jS.d.ts +11 -0
  487. package/dist/to-train-case.cjs +1 -1
  488. package/dist/to-train-case.js +1 -1
  489. package/dist/tuple-parts-BTivqbtT.d.ts +86 -0
  490. package/dist/tuple-parts-v6av7LMU.d.cts +86 -0
  491. package/dist/unique-by.cjs +1 -1
  492. package/dist/unique-by.js +1 -1
  493. package/dist/unique-with.cjs +1 -1
  494. package/dist/unique-with.js +1 -1
  495. package/dist/unique.cjs +1 -1
  496. package/dist/unique.js +1 -1
  497. package/dist/{upsert-prop-tIHFi_F_.d.cts → upsert-prop-Cc3jEW9l.d.cts} +1 -2
  498. package/dist/{upsert-prop-D0N8486l.d.ts → upsert-prop-CdUtD50i.d.ts} +1 -2
  499. package/dist/values.cjs +1 -1
  500. package/dist/values.d.cts +1 -1
  501. package/dist/values.d.ts +1 -1
  502. package/dist/values.js +1 -1
  503. package/dist/zip-with.cjs +1 -1
  504. package/dist/zip-with.js +1 -1
  505. package/dist/zip.cjs +1 -1
  506. package/dist/zip.js +1 -1
  507. package/package.json +12 -12
  508. package/dist/chunk-2MU3SHCO.js +0 -1
  509. package/dist/chunk-3CFBQYOQ.js +0 -1
  510. package/dist/chunk-5SAUYUEK.js +0 -1
  511. package/dist/chunk-5VXKW6SI.cjs +0 -1
  512. package/dist/chunk-6HSB3NFW.js +0 -1
  513. package/dist/chunk-6L5XEBJG.js +0 -1
  514. package/dist/chunk-A2PAJNYA.js +0 -1
  515. package/dist/chunk-APUBIDDU.cjs +0 -1
  516. package/dist/chunk-AWXJSK4F.js +0 -1
  517. package/dist/chunk-B5QDOWVQ.cjs +0 -1
  518. package/dist/chunk-B7RHAPUE.js +0 -1
  519. package/dist/chunk-BOOMUHPG.js +0 -1
  520. package/dist/chunk-CZLV6ZLZ.js +0 -1
  521. package/dist/chunk-DLXKXNZT.js +0 -1
  522. package/dist/chunk-F3JXHUP4.cjs +0 -1
  523. package/dist/chunk-FMUPPQZE.js +0 -1
  524. package/dist/chunk-GFQXVPLP.cjs +0 -1
  525. package/dist/chunk-GOUUMCT7.cjs +0 -1
  526. package/dist/chunk-HRK4GMT2.cjs +0 -1
  527. package/dist/chunk-I7K3Z4BT.js +0 -1
  528. package/dist/chunk-ICYGL2YZ.js +0 -1
  529. package/dist/chunk-IJ4I5A3K.js +0 -1
  530. package/dist/chunk-IXGOK22A.cjs +0 -1
  531. package/dist/chunk-L4ITKDYB.cjs +0 -1
  532. package/dist/chunk-MBC7VZHY.js +0 -1
  533. package/dist/chunk-NQGMUM3E.cjs +0 -1
  534. package/dist/chunk-OBWPUDD3.cjs +0 -1
  535. package/dist/chunk-OEJ5J23C.js +0 -1
  536. package/dist/chunk-OL2TQDYM.cjs +0 -1
  537. package/dist/chunk-PIF5X7RQ.cjs +0 -1
  538. package/dist/chunk-PWHX2554.js +0 -1
  539. package/dist/chunk-QQMFHVPX.cjs +0 -1
  540. package/dist/chunk-SQZULO7V.js +0 -1
  541. package/dist/chunk-THE6MSJO.cjs +0 -1
  542. package/dist/chunk-UDSRBKNR.js +0 -1
  543. package/dist/chunk-UUYCL4G2.js +0 -1
  544. package/dist/chunk-VRZNQSZN.cjs +0 -1
  545. package/dist/chunk-WYM2JV5T.cjs +0 -1
  546. package/dist/chunk-XLGD5ZUY.cjs +0 -1
  547. package/dist/chunk-XU4TDKMD.cjs +0 -1
  548. package/dist/chunk-YCM6N46T.js +0 -1
  549. package/dist/chunk-Z46FX2Y4.js +0 -1
  550. package/dist/enumerable-string-keyed-value-of-CLzltniW.d.cts +0 -15
  551. package/dist/enumerable-string-keyed-value-of-CLzltniW.d.ts +0 -15
  552. package/dist/exact-record-Dhbe_K-E.d.ts +0 -5
  553. package/dist/exact-record-_isi2JMR.d.cts +0 -5
  554. package/dist/funnel.remeda-debounce.test.cjs +0 -1
  555. package/dist/funnel.remeda-debounce.test.js +0 -1
  556. package/dist/if-bounded-record-Drd4UbBU.d.cts +0 -29
  557. package/dist/if-bounded-record-Drd4UbBU.d.ts +0 -29
  558. package/dist/n-tuple-5jljrt4c.d.cts +0 -10
  559. package/dist/n-tuple-5jljrt4c.d.ts +0 -10
  560. package/dist/reconstructed-record-DchLaSO8.d.cts +0 -10
  561. package/dist/reconstructed-record-DuxOLlMs.d.ts +0 -10
  562. package/dist/take-last-while.spec-d-.cjs +0 -1
  563. package/dist/take-last-while.spec-d-.d.cts +0 -2
  564. package/dist/take-last-while.spec-d-.d.ts +0 -2
  565. package/dist/take-last-while.spec-d-.js +0 -1
  566. package/dist/tuple-parts-CP0H7BrE.d.cts +0 -37
  567. package/dist/tuple-parts-CP0H7BrE.d.ts +0 -37
  568. /package/dist/{funnel.remeda-debounce.test.d.cts → funnel.perkakas-debounce.test.d.cts} +0 -0
  569. /package/dist/{funnel.remeda-debounce.test.d.ts → funnel.perkakas-debounce.test.d.ts} +0 -0
@@ -8,9 +8,12 @@
8
8
  type GuardType<T, Fallback = never> = T extends (x: any, ...rest: any) => x is infer U ? U : Fallback;
9
9
 
10
10
  type Case<In, Out, When extends (x: In) => boolean = (x: In) => boolean> = readonly [when: When, then: (x: GuardType<When, In> & In) => Out];
11
- declare const conditionalPlus: typeof conditional & {
12
- defaultCase: typeof defaultCase;
13
- };
11
+ type DefaultCase<In, Out> = (x: In) => Out;
12
+ interface Utilities {
13
+ readonly defaultCase: typeof defaultCase;
14
+ }
15
+ type WithUtils<T> = T & Utilities;
16
+ declare const conditionalPlus: WithUtils<typeof conditional>;
14
17
 
15
18
  /**
16
19
  * Executes a transformer function based on the first matching predicate,
@@ -19,13 +22,18 @@ declare const conditionalPlus: typeof conditional & {
19
22
  * corresponding transformer, and returns, ignoring any further cases, even if
20
23
  * they would match.
21
24
  *
22
- * !IMPORTANT! - Unlike similar implementations in frameworks like Lodash and
23
- * Ramda, this implementation does **NOT** return a default/fallback
24
- * `undefined` value when none of the cases match; and instead will **throw** an
25
- * exception in those cases.
26
- * To add a default case use the `conditional.defaultCase` helper as the final
27
- * case of your implementation. By default it returns `undefined`, but could be
28
- * provided a transformer in order to return something else.
25
+ * NOTE*: Some type-predicates may fail to narrow the param type of their
26
+ * transformer; in such cases wrap your type-predicate in an anonymous arrow
27
+ * function: e.g., instead of
28
+ * `conditional(..., [myTypePredicate, myTransformer], ...)`, use
29
+ * `conditional(..., [($) => myTypePredicate($), myTransformer], ...)`.
30
+ *
31
+ * To add a a default, catch-all, case you can provide a single callback
32
+ * function (instead of a 2-tuple) as the last case. This is equivalent to
33
+ * adding a case with a trivial always-true predicate as it's condition (see
34
+ * example).
35
+ *
36
+ * For simpler cases you should also consider using `when` instead.
29
37
  *
30
38
  * Due to TypeScript's inability to infer the result of negating a type-
31
39
  * predicate we can't refine the types used in subsequent cases based on
@@ -33,30 +41,62 @@ declare const conditionalPlus: typeof conditional & {
33
41
  * is recommended for more precise type control when such type narrowing is
34
42
  * needed.
35
43
  *
36
- * @param cases - A list of (up to 10) tuples, each defining a case. Each tuple
37
- * consists of a predicate (or a type-predicate) and a transformer function that
38
- * processes the data if its case matches.
44
+ * !IMPORTANT! - Unlike similar implementations in Lodash and Ramda, this
45
+ * implementation **doesn't** implicitly return `undefined` as a fallback when
46
+ * when none of the cases match; and instead **throws** an exception in those
47
+ * cases! You have to explicitly provide a default case, and can use
48
+ * `constant(undefined)` as your last case to replicate that behavior.
49
+ *
50
+ * @param cases - A list of (up to 10) cases. Each case can be either:
51
+ * - A 2-tuple consisting of a predicate (or type-predicate) and a transformer
52
+ * function that processes the data if the predicate matches.
53
+ * - A single callback function that acts as a default fallback case.
39
54
  * @returns The output of the matched transformer. If no cases match, an
40
55
  * exception is thrown. The return type is a union of the return types of all
41
56
  * provided transformers.
42
57
  * @signature
43
58
  * P.conditional(...cases)(data);
44
59
  * @example
45
- * const nameOrId = 3 as string | number;
60
+ * const nameOrId = 3 as string | number | boolean;
61
+ *
46
62
  * P.pipe(
47
63
  * nameOrId,
48
64
  * P.conditional(
49
65
  * [P.isString, (name) => `Hello ${name}`],
50
66
  * [P.isNumber, (id) => `Hello ID: ${id}`],
51
- * P.conditional.defaultCase(
52
- * (something) => `Hello something (${JSON.stringify(something)})`,
53
- * ),
54
67
  * ),
55
- * ); //=> 'Hello ID: 3'
68
+ * ); //=> 'Hello ID: 3' (typed as `string`), can throw!.
69
+ *
70
+ * P.pipe(
71
+ * nameOrId,
72
+ * P.conditional(
73
+ * [P.isString, (name) => `Hello ${name}`],
74
+ * [P.isNumber, (id) => `Hello ID: ${id}`],
75
+ * P.constant(undefined),
76
+ * ),
77
+ * ); //=> 'Hello ID: 3' (typed as `string | undefined`), won't throw.
78
+ *
79
+ * P.pipe(
80
+ * nameOrId,
81
+ * P.conditional(
82
+ * [P.isString, (name) => `Hello ${name}`],
83
+ * [P.isNumber, (id) => `Hello ID: ${id}`],
84
+ * (something) => `Hello something (${JSON.stringify(something)})`,
85
+ * ),
86
+ * ); //=> 'Hello ID: 3' (typed as `string`), won't throw.
56
87
  * @dataLast
57
88
  * @category Function
58
89
  */
59
- declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Fn8 extends (x: T) => boolean, Fn9 extends (x: T) => boolean, Return0, Return1 = never, Return2 = never, Return3 = never, Return4 = never, Return5 = never, Return6 = never, Return7 = never, Return8 = never, Return9 = never>(case0: Case<T, Return0, Fn0>, case1?: Case<T, Return1, Fn1>, case2?: Case<T, Return2, Fn2>, case3?: Case<T, Return3, Fn3>, case4?: Case<T, Return4, Fn4>, case5?: Case<T, Return5, Fn5>, case6?: Case<T, Return6, Fn6>, case7?: Case<T, Return7, Fn7>, case8?: Case<T, Return8, Fn8>, case9?: Case<T, Return9, Fn9>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Return8 | Return9;
90
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Return0, Fallback = never>(case0: Case<T, Return0, Fn0>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Fallback;
91
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Return0, Return1, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Fallback;
92
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Return0, Return1, Return2, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Fallback;
93
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Fallback;
94
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Fallback;
95
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Fallback;
96
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Fallback;
97
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Return7, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, case7: Case<T, Return7, Fn7>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Fallback;
98
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Fn8 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Return7, Return8, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, case7: Case<T, Return7, Fn7>, case8: Case<T, Return8, Fn8>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Return8 | Fallback;
99
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Fn8 extends (x: T) => boolean, Fn9 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Return7, Return8, Return9, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, case7: Case<T, Return7, Fn7>, case8: Case<T, Return8, Fn8>, case9: Case<T, Return9, Fn9>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Return8 | Return9 | Fallback;
60
100
  /**
61
101
  * Executes a transformer function based on the first matching predicate,
62
102
  * functioning like a series of `if...else if...` statements. It sequentially
@@ -64,13 +104,18 @@ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T
64
104
  * corresponding transformer, and returns, ignoring any further cases, even if
65
105
  * they would match.
66
106
  *
67
- * !IMPORTANT! - Unlike similar implementations in frameworks like Lodash and
68
- * Ramda, this implementation does **NOT** return a default/fallback
69
- * `undefined` value when none of the cases match; and instead will **throw** an
70
- * exception in those cases.
71
- * To add a default case use the `conditional.defaultCase` helper as the final
72
- * case of your implementation. By default it returns `undefined`, but could be
73
- * provided a transformer in order to return something else.
107
+ * NOTE*: Some type-predicates may fail to narrow the param type of their
108
+ * transformer; in such cases wrap your type-predicate in an anonymous arrow
109
+ * function: e.g., instead of
110
+ * `conditional(..., [myTypePredicate, myTransformer], ...)`, use
111
+ * `conditional(..., [($) => myTypePredicate($), myTransformer], ...)`.
112
+ *
113
+ * To add a a default, catch-all, case you can provide a single callback
114
+ * function (instead of a 2-tuple) as the last case. This is equivalent to
115
+ * adding a case with a trivial always-true predicate as it's condition (see
116
+ * example).
117
+ *
118
+ * For simpler cases you should also consider using `when` instead.
74
119
  *
75
120
  * Due to TypeScript's inability to infer the result of negating a type-
76
121
  * predicate we can't refine the types used in subsequent cases based on
@@ -78,34 +123,76 @@ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T
78
123
  * is recommended for more precise type control when such type narrowing is
79
124
  * needed.
80
125
  *
126
+ * !IMPORTANT! - Unlike similar implementations in Lodash and Ramda, this
127
+ * implementation **doesn't** implicitly return `undefined` as a fallback when
128
+ * when none of the cases match; and instead **throws** an exception in those
129
+ * cases! You have to explicitly provide a default case, and can use
130
+ * `constant(undefined)` as your last case to replicate that behavior.
131
+ *
81
132
  * @param data - The input data to be evaluated against the provided cases.
82
- * @param cases - A list of (up to 10) tuples, each defining a case. Each tuple
83
- * consists of a predicate (or a type-predicate) and a transformer function that
84
- * processes the data if its case matches.
133
+ * @param cases - A list of (up to 10) cases. Each case can be either:
134
+ * - A 2-tuple consisting of a predicate (or type-predicate) and a transformer
135
+ * function that processes the data if the predicate matches.
136
+ * - A single callback function that acts as a default fallback case.
85
137
  * @returns The output of the matched transformer. If no cases match, an
86
138
  * exception is thrown. The return type is a union of the return types of all
87
139
  * provided transformers.
88
140
  * @signature
89
141
  * P.conditional(data, ...cases);
90
142
  * @example
91
- * const nameOrId = 3 as string | number;
143
+ * const nameOrId = 3 as string | number | boolean;
144
+ *
92
145
  * P.conditional(
93
146
  * nameOrId,
94
147
  * [P.isString, (name) => `Hello ${name}`],
95
148
  * [P.isNumber, (id) => `Hello ID: ${id}`],
96
- * P.conditional.defaultCase(
97
- * (something) => `Hello something (${JSON.stringify(something)})`,
98
- * ),
99
- * ); //=> 'Hello ID: 3'
149
+ * ); //=> 'Hello ID: 3' (typed as `string`), can throw!.
150
+ *
151
+ * P.conditional(
152
+ * nameOrId,
153
+ * [P.isString, (name) => `Hello ${name}`],
154
+ * [P.isNumber, (id) => `Hello ID: ${id}`],
155
+ * P.constant(undefined),
156
+ * ); //=> 'Hello ID: 3' (typed as `string | undefined`), won't throw.
157
+ *
158
+ * P.conditional(
159
+ * nameOrId,
160
+ * [P.isString, (name) => `Hello ${name}`],
161
+ * [P.isNumber, (id) => `Hello ID: ${id}`],
162
+ * (something) => `Hello something (${JSON.stringify(something)})`,
163
+ * ); //=> 'Hello ID: 3' (typed as `string`), won't throw.
100
164
  * @dataFirst
101
165
  * @category Function
102
166
  */
103
- declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Fn8 extends (x: T) => boolean, Fn9 extends (x: T) => boolean, Return0, Return1 = never, Return2 = never, Return3 = never, Return4 = never, Return5 = never, Return6 = never, Return7 = never, Return8 = never, Return9 = never>(data: T, case0: Case<T, Return0, Fn0>, case1?: Case<T, Return1, Fn1>, case2?: Case<T, Return2, Fn2>, case3?: Case<T, Return3, Fn3>, case4?: Case<T, Return4, Fn4>, case5?: Case<T, Return5, Fn5>, case6?: Case<T, Return6, Fn6>, case7?: Case<T, Return7, Fn7>, case8?: Case<T, Return8, Fn8>, case9?: Case<T, Return9, Fn9>): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Return8 | Return9;
167
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Return0, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, fallback?: DefaultCase<T, Fallback>): Return0 | Fallback;
168
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Return0, Return1, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Fallback;
169
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Return0, Return1, Return2, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Fallback;
170
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Fallback;
171
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Return4 | Fallback;
172
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Fallback;
173
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Fallback;
174
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Return7, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, case7: Case<T, Return7, Fn7>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Fallback;
175
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Fn8 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Return7, Return8, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, case7: Case<T, Return7, Fn7>, case8: Case<T, Return8, Fn8>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Return8 | Fallback;
176
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Fn8 extends (x: T) => boolean, Fn9 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Return7, Return8, Return9, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, case7: Case<T, Return7, Fn7>, case8: Case<T, Return8, Fn8>, case9: Case<T, Return9, Fn9>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Return8 | Return9 | Fallback;
177
+ /**
178
+ *! **DEPRECATED**: `conditional` now accepts a default, catch-all, callback directly and no longer needs this utility wrapper. Use `constant(undefined)` as your last case instead (see example).
179
+ *
180
+ * @example
181
+ * const nameOrId = 3 as string | number;
182
+ * P.conditional(
183
+ * nameOrId,
184
+ * [P.isString, (name) => `Hello ${name}`],
185
+ * [P.isNumber, (id) => `Hello ID: ${id}`],
186
+ * // Was: `P.conditional.defaultCase(),`, Now:
187
+ * constant(undefined),
188
+ * ); //=> 'Hello ID: 3'
189
+ * @deprecated `conditional` now accepts a default, catch-all, callback
190
+ * directly and no longer needs this utility wrapper. Use `constant(undefined)`
191
+ * as your last case instead (see example).
192
+ */
193
+ declare function defaultCase(): Case<unknown, undefined>;
104
194
  /**
105
- * A simplified case that accepts all data. Put this as the last case to
106
- * prevent an exception from being thrown when none of the previous cases
107
- * match.
108
- * If this is not the last case it will short-circuit anything after it.
195
+ *! **DEPRECATED**: `conditional` now accepts a default, catch-all, callback directly and no longer needs this utility wrapper. Simply put your `then` callback as the last case (see example).
109
196
  *
110
197
  * @param then - You only need to provide the transformer, the predicate is
111
198
  * implicit. @default () => undefined, which is how Lodash and Ramda handle
@@ -116,12 +203,15 @@ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T
116
203
  * nameOrId,
117
204
  * [P.isString, (name) => `Hello ${name}`],
118
205
  * [P.isNumber, (id) => `Hello ID: ${id}`],
119
- * P.conditional.defaultCase(
120
- * (something) => `Hello something (${JSON.stringify(something)})`,
121
- * ),
206
+ * // Was: `P.conditional.defaultCase(
207
+ * // (something) => `Hello something (${JSON.stringify(something)})`,
208
+ * //),`, Now:
209
+ * (something) => `Hello something (${JSON.stringify(something)})`
122
210
  * ); //=> 'Hello ID: 3'
211
+ * @deprecated `conditional` now accepts a default, catch-all, callback
212
+ * directly and no longer needs this utility wrapper. Simply put your `then`
213
+ * callback as the last case.
123
214
  */
124
- declare function defaultCase(): Case<unknown, undefined>;
125
215
  declare function defaultCase<In, Then extends (param: In) => unknown>(then: Then): Case<In, ReturnType<Then>>;
126
216
 
127
217
  export { conditionalPlus as conditional };
@@ -8,9 +8,12 @@
8
8
  type GuardType<T, Fallback = never> = T extends (x: any, ...rest: any) => x is infer U ? U : Fallback;
9
9
 
10
10
  type Case<In, Out, When extends (x: In) => boolean = (x: In) => boolean> = readonly [when: When, then: (x: GuardType<When, In> & In) => Out];
11
- declare const conditionalPlus: typeof conditional & {
12
- defaultCase: typeof defaultCase;
13
- };
11
+ type DefaultCase<In, Out> = (x: In) => Out;
12
+ interface Utilities {
13
+ readonly defaultCase: typeof defaultCase;
14
+ }
15
+ type WithUtils<T> = T & Utilities;
16
+ declare const conditionalPlus: WithUtils<typeof conditional>;
14
17
 
15
18
  /**
16
19
  * Executes a transformer function based on the first matching predicate,
@@ -19,13 +22,18 @@ declare const conditionalPlus: typeof conditional & {
19
22
  * corresponding transformer, and returns, ignoring any further cases, even if
20
23
  * they would match.
21
24
  *
22
- * !IMPORTANT! - Unlike similar implementations in frameworks like Lodash and
23
- * Ramda, this implementation does **NOT** return a default/fallback
24
- * `undefined` value when none of the cases match; and instead will **throw** an
25
- * exception in those cases.
26
- * To add a default case use the `conditional.defaultCase` helper as the final
27
- * case of your implementation. By default it returns `undefined`, but could be
28
- * provided a transformer in order to return something else.
25
+ * NOTE*: Some type-predicates may fail to narrow the param type of their
26
+ * transformer; in such cases wrap your type-predicate in an anonymous arrow
27
+ * function: e.g., instead of
28
+ * `conditional(..., [myTypePredicate, myTransformer], ...)`, use
29
+ * `conditional(..., [($) => myTypePredicate($), myTransformer], ...)`.
30
+ *
31
+ * To add a a default, catch-all, case you can provide a single callback
32
+ * function (instead of a 2-tuple) as the last case. This is equivalent to
33
+ * adding a case with a trivial always-true predicate as it's condition (see
34
+ * example).
35
+ *
36
+ * For simpler cases you should also consider using `when` instead.
29
37
  *
30
38
  * Due to TypeScript's inability to infer the result of negating a type-
31
39
  * predicate we can't refine the types used in subsequent cases based on
@@ -33,30 +41,62 @@ declare const conditionalPlus: typeof conditional & {
33
41
  * is recommended for more precise type control when such type narrowing is
34
42
  * needed.
35
43
  *
36
- * @param cases - A list of (up to 10) tuples, each defining a case. Each tuple
37
- * consists of a predicate (or a type-predicate) and a transformer function that
38
- * processes the data if its case matches.
44
+ * !IMPORTANT! - Unlike similar implementations in Lodash and Ramda, this
45
+ * implementation **doesn't** implicitly return `undefined` as a fallback when
46
+ * when none of the cases match; and instead **throws** an exception in those
47
+ * cases! You have to explicitly provide a default case, and can use
48
+ * `constant(undefined)` as your last case to replicate that behavior.
49
+ *
50
+ * @param cases - A list of (up to 10) cases. Each case can be either:
51
+ * - A 2-tuple consisting of a predicate (or type-predicate) and a transformer
52
+ * function that processes the data if the predicate matches.
53
+ * - A single callback function that acts as a default fallback case.
39
54
  * @returns The output of the matched transformer. If no cases match, an
40
55
  * exception is thrown. The return type is a union of the return types of all
41
56
  * provided transformers.
42
57
  * @signature
43
58
  * P.conditional(...cases)(data);
44
59
  * @example
45
- * const nameOrId = 3 as string | number;
60
+ * const nameOrId = 3 as string | number | boolean;
61
+ *
46
62
  * P.pipe(
47
63
  * nameOrId,
48
64
  * P.conditional(
49
65
  * [P.isString, (name) => `Hello ${name}`],
50
66
  * [P.isNumber, (id) => `Hello ID: ${id}`],
51
- * P.conditional.defaultCase(
52
- * (something) => `Hello something (${JSON.stringify(something)})`,
53
- * ),
54
67
  * ),
55
- * ); //=> 'Hello ID: 3'
68
+ * ); //=> 'Hello ID: 3' (typed as `string`), can throw!.
69
+ *
70
+ * P.pipe(
71
+ * nameOrId,
72
+ * P.conditional(
73
+ * [P.isString, (name) => `Hello ${name}`],
74
+ * [P.isNumber, (id) => `Hello ID: ${id}`],
75
+ * P.constant(undefined),
76
+ * ),
77
+ * ); //=> 'Hello ID: 3' (typed as `string | undefined`), won't throw.
78
+ *
79
+ * P.pipe(
80
+ * nameOrId,
81
+ * P.conditional(
82
+ * [P.isString, (name) => `Hello ${name}`],
83
+ * [P.isNumber, (id) => `Hello ID: ${id}`],
84
+ * (something) => `Hello something (${JSON.stringify(something)})`,
85
+ * ),
86
+ * ); //=> 'Hello ID: 3' (typed as `string`), won't throw.
56
87
  * @dataLast
57
88
  * @category Function
58
89
  */
59
- declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Fn8 extends (x: T) => boolean, Fn9 extends (x: T) => boolean, Return0, Return1 = never, Return2 = never, Return3 = never, Return4 = never, Return5 = never, Return6 = never, Return7 = never, Return8 = never, Return9 = never>(case0: Case<T, Return0, Fn0>, case1?: Case<T, Return1, Fn1>, case2?: Case<T, Return2, Fn2>, case3?: Case<T, Return3, Fn3>, case4?: Case<T, Return4, Fn4>, case5?: Case<T, Return5, Fn5>, case6?: Case<T, Return6, Fn6>, case7?: Case<T, Return7, Fn7>, case8?: Case<T, Return8, Fn8>, case9?: Case<T, Return9, Fn9>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Return8 | Return9;
90
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Return0, Fallback = never>(case0: Case<T, Return0, Fn0>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Fallback;
91
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Return0, Return1, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Fallback;
92
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Return0, Return1, Return2, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Fallback;
93
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Fallback;
94
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Fallback;
95
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Fallback;
96
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Fallback;
97
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Return7, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, case7: Case<T, Return7, Fn7>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Fallback;
98
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Fn8 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Return7, Return8, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, case7: Case<T, Return7, Fn7>, case8: Case<T, Return8, Fn8>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Return8 | Fallback;
99
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Fn8 extends (x: T) => boolean, Fn9 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Return7, Return8, Return9, Fallback = never>(case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, case7: Case<T, Return7, Fn7>, case8: Case<T, Return8, Fn8>, case9: Case<T, Return9, Fn9>, fallback?: DefaultCase<T, Fallback>): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Return8 | Return9 | Fallback;
60
100
  /**
61
101
  * Executes a transformer function based on the first matching predicate,
62
102
  * functioning like a series of `if...else if...` statements. It sequentially
@@ -64,13 +104,18 @@ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T
64
104
  * corresponding transformer, and returns, ignoring any further cases, even if
65
105
  * they would match.
66
106
  *
67
- * !IMPORTANT! - Unlike similar implementations in frameworks like Lodash and
68
- * Ramda, this implementation does **NOT** return a default/fallback
69
- * `undefined` value when none of the cases match; and instead will **throw** an
70
- * exception in those cases.
71
- * To add a default case use the `conditional.defaultCase` helper as the final
72
- * case of your implementation. By default it returns `undefined`, but could be
73
- * provided a transformer in order to return something else.
107
+ * NOTE*: Some type-predicates may fail to narrow the param type of their
108
+ * transformer; in such cases wrap your type-predicate in an anonymous arrow
109
+ * function: e.g., instead of
110
+ * `conditional(..., [myTypePredicate, myTransformer], ...)`, use
111
+ * `conditional(..., [($) => myTypePredicate($), myTransformer], ...)`.
112
+ *
113
+ * To add a a default, catch-all, case you can provide a single callback
114
+ * function (instead of a 2-tuple) as the last case. This is equivalent to
115
+ * adding a case with a trivial always-true predicate as it's condition (see
116
+ * example).
117
+ *
118
+ * For simpler cases you should also consider using `when` instead.
74
119
  *
75
120
  * Due to TypeScript's inability to infer the result of negating a type-
76
121
  * predicate we can't refine the types used in subsequent cases based on
@@ -78,34 +123,76 @@ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T
78
123
  * is recommended for more precise type control when such type narrowing is
79
124
  * needed.
80
125
  *
126
+ * !IMPORTANT! - Unlike similar implementations in Lodash and Ramda, this
127
+ * implementation **doesn't** implicitly return `undefined` as a fallback when
128
+ * when none of the cases match; and instead **throws** an exception in those
129
+ * cases! You have to explicitly provide a default case, and can use
130
+ * `constant(undefined)` as your last case to replicate that behavior.
131
+ *
81
132
  * @param data - The input data to be evaluated against the provided cases.
82
- * @param cases - A list of (up to 10) tuples, each defining a case. Each tuple
83
- * consists of a predicate (or a type-predicate) and a transformer function that
84
- * processes the data if its case matches.
133
+ * @param cases - A list of (up to 10) cases. Each case can be either:
134
+ * - A 2-tuple consisting of a predicate (or type-predicate) and a transformer
135
+ * function that processes the data if the predicate matches.
136
+ * - A single callback function that acts as a default fallback case.
85
137
  * @returns The output of the matched transformer. If no cases match, an
86
138
  * exception is thrown. The return type is a union of the return types of all
87
139
  * provided transformers.
88
140
  * @signature
89
141
  * P.conditional(data, ...cases);
90
142
  * @example
91
- * const nameOrId = 3 as string | number;
143
+ * const nameOrId = 3 as string | number | boolean;
144
+ *
92
145
  * P.conditional(
93
146
  * nameOrId,
94
147
  * [P.isString, (name) => `Hello ${name}`],
95
148
  * [P.isNumber, (id) => `Hello ID: ${id}`],
96
- * P.conditional.defaultCase(
97
- * (something) => `Hello something (${JSON.stringify(something)})`,
98
- * ),
99
- * ); //=> 'Hello ID: 3'
149
+ * ); //=> 'Hello ID: 3' (typed as `string`), can throw!.
150
+ *
151
+ * P.conditional(
152
+ * nameOrId,
153
+ * [P.isString, (name) => `Hello ${name}`],
154
+ * [P.isNumber, (id) => `Hello ID: ${id}`],
155
+ * P.constant(undefined),
156
+ * ); //=> 'Hello ID: 3' (typed as `string | undefined`), won't throw.
157
+ *
158
+ * P.conditional(
159
+ * nameOrId,
160
+ * [P.isString, (name) => `Hello ${name}`],
161
+ * [P.isNumber, (id) => `Hello ID: ${id}`],
162
+ * (something) => `Hello something (${JSON.stringify(something)})`,
163
+ * ); //=> 'Hello ID: 3' (typed as `string`), won't throw.
100
164
  * @dataFirst
101
165
  * @category Function
102
166
  */
103
- declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Fn8 extends (x: T) => boolean, Fn9 extends (x: T) => boolean, Return0, Return1 = never, Return2 = never, Return3 = never, Return4 = never, Return5 = never, Return6 = never, Return7 = never, Return8 = never, Return9 = never>(data: T, case0: Case<T, Return0, Fn0>, case1?: Case<T, Return1, Fn1>, case2?: Case<T, Return2, Fn2>, case3?: Case<T, Return3, Fn3>, case4?: Case<T, Return4, Fn4>, case5?: Case<T, Return5, Fn5>, case6?: Case<T, Return6, Fn6>, case7?: Case<T, Return7, Fn7>, case8?: Case<T, Return8, Fn8>, case9?: Case<T, Return9, Fn9>): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Return8 | Return9;
167
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Return0, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, fallback?: DefaultCase<T, Fallback>): Return0 | Fallback;
168
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Return0, Return1, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Fallback;
169
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Return0, Return1, Return2, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Fallback;
170
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Fallback;
171
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Return4 | Fallback;
172
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Fallback;
173
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Fallback;
174
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Return7, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, case7: Case<T, Return7, Fn7>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Fallback;
175
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Fn8 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Return7, Return8, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, case7: Case<T, Return7, Fn7>, case8: Case<T, Return8, Fn8>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Return8 | Fallback;
176
+ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T) => boolean, Fn2 extends (x: T) => boolean, Fn3 extends (x: T) => boolean, Fn4 extends (x: T) => boolean, Fn5 extends (x: T) => boolean, Fn6 extends (x: T) => boolean, Fn7 extends (x: T) => boolean, Fn8 extends (x: T) => boolean, Fn9 extends (x: T) => boolean, Return0, Return1, Return2, Return3, Return4, Return5, Return6, Return7, Return8, Return9, Fallback = never>(data: T, case0: Case<T, Return0, Fn0>, case1: Case<T, Return1, Fn1>, case2: Case<T, Return2, Fn2>, case3: Case<T, Return3, Fn3>, case4: Case<T, Return4, Fn4>, case5: Case<T, Return5, Fn5>, case6: Case<T, Return6, Fn6>, case7: Case<T, Return7, Fn7>, case8: Case<T, Return8, Fn8>, case9: Case<T, Return9, Fn9>, fallback?: DefaultCase<T, Fallback>): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Return6 | Return7 | Return8 | Return9 | Fallback;
177
+ /**
178
+ *! **DEPRECATED**: `conditional` now accepts a default, catch-all, callback directly and no longer needs this utility wrapper. Use `constant(undefined)` as your last case instead (see example).
179
+ *
180
+ * @example
181
+ * const nameOrId = 3 as string | number;
182
+ * P.conditional(
183
+ * nameOrId,
184
+ * [P.isString, (name) => `Hello ${name}`],
185
+ * [P.isNumber, (id) => `Hello ID: ${id}`],
186
+ * // Was: `P.conditional.defaultCase(),`, Now:
187
+ * constant(undefined),
188
+ * ); //=> 'Hello ID: 3'
189
+ * @deprecated `conditional` now accepts a default, catch-all, callback
190
+ * directly and no longer needs this utility wrapper. Use `constant(undefined)`
191
+ * as your last case instead (see example).
192
+ */
193
+ declare function defaultCase(): Case<unknown, undefined>;
104
194
  /**
105
- * A simplified case that accepts all data. Put this as the last case to
106
- * prevent an exception from being thrown when none of the previous cases
107
- * match.
108
- * If this is not the last case it will short-circuit anything after it.
195
+ *! **DEPRECATED**: `conditional` now accepts a default, catch-all, callback directly and no longer needs this utility wrapper. Simply put your `then` callback as the last case (see example).
109
196
  *
110
197
  * @param then - You only need to provide the transformer, the predicate is
111
198
  * implicit. @default () => undefined, which is how Lodash and Ramda handle
@@ -116,12 +203,15 @@ declare function conditional<T, Fn0 extends (x: T) => boolean, Fn1 extends (x: T
116
203
  * nameOrId,
117
204
  * [P.isString, (name) => `Hello ${name}`],
118
205
  * [P.isNumber, (id) => `Hello ID: ${id}`],
119
- * P.conditional.defaultCase(
120
- * (something) => `Hello something (${JSON.stringify(something)})`,
121
- * ),
206
+ * // Was: `P.conditional.defaultCase(
207
+ * // (something) => `Hello something (${JSON.stringify(something)})`,
208
+ * //),`, Now:
209
+ * (something) => `Hello something (${JSON.stringify(something)})`
122
210
  * ); //=> 'Hello ID: 3'
211
+ * @deprecated `conditional` now accepts a default, catch-all, callback
212
+ * directly and no longer needs this utility wrapper. Simply put your `then`
213
+ * callback as the last case.
123
214
  */
124
- declare function defaultCase(): Case<unknown, undefined>;
125
215
  declare function defaultCase<In, Then extends (param: In) => unknown>(then: Then): Case<In, ReturnType<Then>>;
126
216
 
127
217
  export { conditionalPlus as conditional };
@@ -1 +1 @@
1
- import{a}from"./chunk-A2PAJNYA.js";export{a as conditional};
1
+ import{a}from"./chunk-4Y6KJJOW.js";import"./chunk-EK7ODJWE.js";export{a as conditional};
package/dist/constant.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkWLNQOMKLcjs = require('./chunk-WLNQOMKL.cjs');exports.constant = _chunkWLNQOMKLcjs.a;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkWLNQOMKLcjs = require('./chunk-WLNQOMKL.cjs');require('./chunk-MBGSSEZN.cjs');exports.constant = _chunkWLNQOMKLcjs.a;
package/dist/constant.js CHANGED
@@ -1 +1 @@
1
- import{a}from"./chunk-T5XG33UI.js";export{a as constant};
1
+ import{a}from"./chunk-T5XG33UI.js";import"./chunk-EK7ODJWE.js";export{a as constant};
package/dist/count-by.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkPIF5X7RQcjs = require('./chunk-PIF5X7RQ.cjs');require('./chunk-XR72I63W.cjs');require('./chunk-GZJMERDJ.cjs');exports.countBy = _chunkPIF5X7RQcjs.a;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk22AQJBPWcjs = require('./chunk-22AQJBPW.cjs');require('./chunk-XR72I63W.cjs');require('./chunk-GZJMERDJ.cjs');require('./chunk-MBGSSEZN.cjs');exports.countBy = _chunk22AQJBPWcjs.a;
@@ -1,6 +1,7 @@
1
- import { E as ExactRecord } from './exact-record-_isi2JMR.cjs';
2
- import './if-bounded-record-Drd4UbBU.cjs';
1
+ import { B as BoundedPartial } from './bounded-partial-BqwRN49U.cjs';
2
+ import './if-D4QIikQ1.cjs';
3
3
  import 'type-fest';
4
+ import './is-bounded-record-C9WAwfA8.cjs';
4
5
 
5
6
  /**
6
7
  * Categorize and count elements in an array using a defined callback function.
@@ -19,7 +20,7 @@ import 'type-fest';
19
20
  * @dataFirst
20
21
  * @category Array
21
22
  */
22
- declare function countBy<T, K extends PropertyKey>(data: ReadonlyArray<T>, categorizationFn: (value: T, index: number, data: ReadonlyArray<T>) => K | undefined): ExactRecord<K, number>;
23
+ declare function countBy<T, K extends PropertyKey>(data: ReadonlyArray<T>, categorizationFn: (value: T, index: number, data: ReadonlyArray<T>) => K | undefined): BoundedPartial<Record<K, number>>;
23
24
  /**
24
25
  * Categorize and count elements in an array using a defined callback function.
25
26
  * The callback function is applied to each element in the array to determine
@@ -36,6 +37,6 @@ declare function countBy<T, K extends PropertyKey>(data: ReadonlyArray<T>, categ
36
37
  * @dataLast
37
38
  * @category Array
38
39
  */
39
- declare function countBy<T, K extends PropertyKey>(categorizationFn: (value: T, index: number, data: ReadonlyArray<T>) => K | undefined): (data: ReadonlyArray<T>) => ExactRecord<K, number>;
40
+ declare function countBy<T, K extends PropertyKey>(categorizationFn: (value: T, index: number, data: ReadonlyArray<T>) => K | undefined): (data: ReadonlyArray<T>) => BoundedPartial<Record<K, number>>;
40
41
 
41
42
  export { countBy };
@@ -1,6 +1,7 @@
1
- import { E as ExactRecord } from './exact-record-Dhbe_K-E.js';
2
- import './if-bounded-record-Drd4UbBU.js';
1
+ import { B as BoundedPartial } from './bounded-partial-BzynYDVs.js';
2
+ import './if-D4QIikQ1.js';
3
3
  import 'type-fest';
4
+ import './is-bounded-record-C9WAwfA8.js';
4
5
 
5
6
  /**
6
7
  * Categorize and count elements in an array using a defined callback function.
@@ -19,7 +20,7 @@ import 'type-fest';
19
20
  * @dataFirst
20
21
  * @category Array
21
22
  */
22
- declare function countBy<T, K extends PropertyKey>(data: ReadonlyArray<T>, categorizationFn: (value: T, index: number, data: ReadonlyArray<T>) => K | undefined): ExactRecord<K, number>;
23
+ declare function countBy<T, K extends PropertyKey>(data: ReadonlyArray<T>, categorizationFn: (value: T, index: number, data: ReadonlyArray<T>) => K | undefined): BoundedPartial<Record<K, number>>;
23
24
  /**
24
25
  * Categorize and count elements in an array using a defined callback function.
25
26
  * The callback function is applied to each element in the array to determine
@@ -36,6 +37,6 @@ declare function countBy<T, K extends PropertyKey>(data: ReadonlyArray<T>, categ
36
37
  * @dataLast
37
38
  * @category Array
38
39
  */
39
- declare function countBy<T, K extends PropertyKey>(categorizationFn: (value: T, index: number, data: ReadonlyArray<T>) => K | undefined): (data: ReadonlyArray<T>) => ExactRecord<K, number>;
40
+ declare function countBy<T, K extends PropertyKey>(categorizationFn: (value: T, index: number, data: ReadonlyArray<T>) => K | undefined): (data: ReadonlyArray<T>) => BoundedPartial<Record<K, number>>;
40
41
 
41
42
  export { countBy };
package/dist/count-by.js CHANGED
@@ -1 +1 @@
1
- import{a}from"./chunk-BOOMUHPG.js";import"./chunk-J6WPJH72.js";import"./chunk-KGPDVVVV.js";export{a as countBy};
1
+ import{a}from"./chunk-CTGIT5TY.js";import"./chunk-J6WPJH72.js";import"./chunk-KGPDVVVV.js";import"./chunk-EK7ODJWE.js";export{a as countBy};