rubico 2.7.3 → 2.7.5

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 (496) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +27 -30
  3. package/Transducer.d.ts +10 -10
  4. package/Transducer.js +65 -69
  5. package/__.js +1 -1
  6. package/_internal/FlatMappingIterator.js +1 -1
  7. package/_internal/MappingIterator.d.ts +1 -1
  8. package/_internal/MappingIterator.js +1 -1
  9. package/_internal/arrayFilter.js +6 -6
  10. package/_internal/arrayFilterIndexes.js +7 -7
  11. package/_internal/arrayFilterWithIndex.js +6 -6
  12. package/_internal/arrayFind.js +7 -7
  13. package/_internal/arrayFlatten.js +25 -25
  14. package/_internal/arrayForEach.d.ts +1 -1
  15. package/_internal/arrayForEach.js +1 -1
  16. package/_internal/arrayForEachSeries.js +1 -1
  17. package/_internal/arrayMap.d.ts +2 -2
  18. package/_internal/arrayMap.js +5 -5
  19. package/_internal/arrayMapPool.d.ts +1 -1
  20. package/_internal/arrayMapPool.js +10 -10
  21. package/_internal/arrayMapRate.js +4 -4
  22. package/_internal/arrayMapSeries.d.ts +1 -1
  23. package/_internal/arrayMapSeries.js +8 -8
  24. package/_internal/arrayMapWithIndex.js +4 -4
  25. package/_internal/arrayReduce.js +1 -1
  26. package/_internal/asyncGeneratorFunctionForEach.js +3 -3
  27. package/_internal/asyncGeneratorFunctionMap.js +3 -3
  28. package/_internal/asyncIteratorFind.js +3 -3
  29. package/_internal/asyncIteratorForEach.d.ts +1 -1
  30. package/_internal/asyncIteratorForEach.js +3 -3
  31. package/_internal/asyncIteratorForEachSeries.js +3 -3
  32. package/_internal/asyncIteratorToArray.js +2 -2
  33. package/_internal/copyDeep.js +12 -12
  34. package/_internal/funcAll.js +3 -3
  35. package/_internal/funcAllSeries.js +6 -6
  36. package/_internal/funcObjectAll.js +4 -4
  37. package/_internal/functionArrayAll.js +3 -3
  38. package/_internal/functionArrayAllSeries.js +6 -6
  39. package/_internal/functionObjectAll.js +4 -4
  40. package/_internal/generatorFunctionForEach.js +3 -3
  41. package/_internal/generatorFunctionMap.js +3 -3
  42. package/_internal/generatorFunctionReduce.js +1 -1
  43. package/_internal/iteratorEvery.js +2 -2
  44. package/_internal/iteratorFind.js +7 -7
  45. package/_internal/iteratorForEach.d.ts +1 -1
  46. package/_internal/iteratorForEach.js +3 -3
  47. package/_internal/iteratorForEachSeries.js +1 -1
  48. package/_internal/iteratorReduce.d.ts +1 -1
  49. package/_internal/iteratorReduce.js +2 -2
  50. package/_internal/iteratorSome.js +2 -2
  51. package/_internal/mapFilter.js +4 -4
  52. package/_internal/mapMap.d.ts +1 -1
  53. package/_internal/mapMap.js +6 -6
  54. package/_internal/mapMapPool.js +10 -10
  55. package/_internal/mapMapSeries.js +10 -10
  56. package/_internal/objectFilter.js +6 -6
  57. package/_internal/objectFlatMap.d.ts +1 -1
  58. package/_internal/objectFlatMap.js +1 -1
  59. package/_internal/objectFlatten.js +14 -14
  60. package/_internal/objectMap.js +3 -3
  61. package/_internal/objectMapOwn.js +3 -3
  62. package/_internal/objectMapPool.js +10 -10
  63. package/_internal/objectMapSeries.js +9 -9
  64. package/_internal/objectReduce.d.ts +1 -1
  65. package/_internal/objectReduce.js +2 -2
  66. package/_internal/reducerAllSync.d.ts +2 -2
  67. package/_internal/reducerAllSync.js +2 -2
  68. package/_internal/reducerAnySync.d.ts +1 -1
  69. package/_internal/reducerAnySync.js +2 -2
  70. package/_internal/reducerConcat.d.ts +1 -1
  71. package/_internal/reducerConcat.js +4 -4
  72. package/_internal/reducerConcatSync.js +2 -2
  73. package/_internal/reducerEvery.d.ts +2 -2
  74. package/_internal/reducerEvery.js +4 -4
  75. package/_internal/reducerFilter.d.ts +2 -2
  76. package/_internal/reducerFilter.js +5 -5
  77. package/_internal/reducerFlatten.js +3 -3
  78. package/_internal/reducerForEach.d.ts +2 -2
  79. package/_internal/reducerForEach.js +5 -5
  80. package/_internal/reducerMap.d.ts +1 -1
  81. package/_internal/reducerMap.js +5 -5
  82. package/_internal/reducerSome.d.ts +2 -2
  83. package/_internal/reducerSome.js +4 -4
  84. package/_internal/reducerTryCatch.d.ts +2 -2
  85. package/_internal/reducerTryCatch.js +8 -8
  86. package/_internal/setFilter.d.ts +1 -1
  87. package/_internal/setFilter.js +5 -5
  88. package/_internal/setFlatten.js +24 -24
  89. package/_internal/setMap.d.ts +1 -1
  90. package/_internal/setMap.js +6 -6
  91. package/_internal/setMapPool.js +9 -9
  92. package/_internal/setMapSeries.js +10 -10
  93. package/_internal/streamFlatExtend.js +25 -25
  94. package/_internal/streamFlatMap.js +2 -2
  95. package/all.js +3 -3
  96. package/and.js +5 -2
  97. package/assign.js +2 -2
  98. package/compose.js +6 -2
  99. package/curry.js +5 -12
  100. package/dist/Transducer.es.js +24 -24
  101. package/dist/Transducer.es.min.js +1 -1
  102. package/dist/Transducer.js +24 -24
  103. package/dist/Transducer.min.js +1 -1
  104. package/dist/Transducer.mjs +24 -24
  105. package/dist/__.es.js +1 -1
  106. package/dist/__.es.min.js +1 -1
  107. package/dist/__.js +1 -1
  108. package/dist/__.min.js +1 -1
  109. package/dist/__.mjs +1 -1
  110. package/dist/all.es.js +14 -14
  111. package/dist/all.es.min.js +1 -1
  112. package/dist/all.js +14 -14
  113. package/dist/all.min.js +1 -1
  114. package/dist/all.mjs +14 -14
  115. package/dist/always.es.js +1 -1
  116. package/dist/always.es.min.js +1 -1
  117. package/dist/always.js +1 -1
  118. package/dist/always.min.js +1 -1
  119. package/dist/always.mjs +1 -1
  120. package/dist/and.es.js +1 -1
  121. package/dist/and.es.min.js +1 -1
  122. package/dist/and.js +1 -1
  123. package/dist/and.min.js +1 -1
  124. package/dist/and.mjs +1 -1
  125. package/dist/assign.es.js +5 -5
  126. package/dist/assign.es.min.js +1 -1
  127. package/dist/assign.js +5 -5
  128. package/dist/assign.min.js +1 -1
  129. package/dist/assign.mjs +5 -5
  130. package/dist/compose.es.js +1 -1
  131. package/dist/compose.es.min.js +1 -1
  132. package/dist/compose.js +1 -1
  133. package/dist/compose.min.js +1 -1
  134. package/dist/compose.mjs +1 -1
  135. package/dist/curry.es.js +1 -1
  136. package/dist/curry.es.min.js +1 -1
  137. package/dist/curry.js +1 -1
  138. package/dist/curry.min.js +1 -1
  139. package/dist/curry.mjs +1 -1
  140. package/dist/eq.es.js +1 -1
  141. package/dist/eq.es.min.js +1 -1
  142. package/dist/eq.js +1 -1
  143. package/dist/eq.min.js +1 -1
  144. package/dist/eq.mjs +1 -1
  145. package/dist/every.es.js +7 -7
  146. package/dist/every.es.min.js +1 -1
  147. package/dist/every.js +7 -7
  148. package/dist/every.min.js +1 -1
  149. package/dist/every.mjs +7 -7
  150. package/dist/filter.es.js +21 -21
  151. package/dist/filter.es.min.js +1 -1
  152. package/dist/filter.js +21 -21
  153. package/dist/filter.min.js +1 -1
  154. package/dist/filter.mjs +21 -21
  155. package/dist/flatMap.es.js +82 -82
  156. package/dist/flatMap.es.min.js +1 -1
  157. package/dist/flatMap.js +82 -82
  158. package/dist/flatMap.min.js +1 -1
  159. package/dist/flatMap.mjs +82 -82
  160. package/dist/forEach.es.js +7 -7
  161. package/dist/forEach.es.min.js +1 -1
  162. package/dist/forEach.js +7 -7
  163. package/dist/forEach.min.js +1 -1
  164. package/dist/forEach.mjs +7 -7
  165. package/dist/get.es.js +1 -1
  166. package/dist/get.es.min.js +1 -1
  167. package/dist/get.js +1 -1
  168. package/dist/get.min.js +1 -1
  169. package/dist/get.mjs +1 -1
  170. package/dist/gt.es.js +1 -1
  171. package/dist/gt.es.min.js +1 -1
  172. package/dist/gt.js +1 -1
  173. package/dist/gt.min.js +1 -1
  174. package/dist/gt.mjs +1 -1
  175. package/dist/gte.es.js +1 -1
  176. package/dist/gte.es.min.js +1 -1
  177. package/dist/gte.js +1 -1
  178. package/dist/gte.min.js +1 -1
  179. package/dist/gte.mjs +1 -1
  180. package/dist/lt.es.js +1 -1
  181. package/dist/lt.es.min.js +1 -1
  182. package/dist/lt.js +1 -1
  183. package/dist/lt.min.js +1 -1
  184. package/dist/lt.mjs +1 -1
  185. package/dist/lte.es.js +1 -1
  186. package/dist/lte.es.min.js +1 -1
  187. package/dist/lte.js +1 -1
  188. package/dist/lte.min.js +1 -1
  189. package/dist/lte.mjs +1 -1
  190. package/dist/map.es.js +83 -83
  191. package/dist/map.es.min.js +1 -1
  192. package/dist/map.js +83 -83
  193. package/dist/map.min.js +1 -1
  194. package/dist/map.mjs +83 -83
  195. package/dist/not.es.js +1 -1
  196. package/dist/not.es.min.js +1 -1
  197. package/dist/not.js +1 -1
  198. package/dist/not.min.js +1 -1
  199. package/dist/not.mjs +1 -1
  200. package/dist/omit.es.js +13 -13
  201. package/dist/omit.es.min.js +1 -1
  202. package/dist/omit.js +13 -13
  203. package/dist/omit.min.js +1 -1
  204. package/dist/omit.mjs +13 -13
  205. package/dist/or.es.js +1 -1
  206. package/dist/or.es.min.js +1 -1
  207. package/dist/or.js +1 -1
  208. package/dist/or.min.js +1 -1
  209. package/dist/or.mjs +1 -1
  210. package/dist/pick.es.js +1 -1
  211. package/dist/pick.es.min.js +1 -1
  212. package/dist/pick.js +1 -1
  213. package/dist/pick.min.js +1 -1
  214. package/dist/pick.mjs +1 -1
  215. package/dist/pipe.es.js +1 -1
  216. package/dist/pipe.es.min.js +1 -1
  217. package/dist/pipe.js +1 -1
  218. package/dist/pipe.min.js +1 -1
  219. package/dist/pipe.mjs +1 -1
  220. package/dist/reduce.es.js +5 -5
  221. package/dist/reduce.es.min.js +1 -1
  222. package/dist/reduce.js +5 -5
  223. package/dist/reduce.min.js +1 -1
  224. package/dist/reduce.mjs +5 -5
  225. package/dist/rubico.es.js +215 -215
  226. package/dist/rubico.es.min.js +1 -1
  227. package/dist/rubico.global.js +215 -215
  228. package/dist/rubico.global.min.js +1 -1
  229. package/dist/rubico.js +215 -215
  230. package/dist/rubico.min.js +1 -1
  231. package/dist/rubico.mjs +215 -215
  232. package/dist/set.es.js +1 -1
  233. package/dist/set.es.min.js +1 -1
  234. package/dist/set.js +1 -1
  235. package/dist/set.min.js +1 -1
  236. package/dist/set.mjs +1 -1
  237. package/dist/some.es.js +8 -8
  238. package/dist/some.es.min.js +1 -1
  239. package/dist/some.js +8 -8
  240. package/dist/some.min.js +1 -1
  241. package/dist/some.mjs +8 -8
  242. package/dist/switchCase.es.js +1 -1
  243. package/dist/switchCase.es.min.js +1 -1
  244. package/dist/switchCase.js +1 -1
  245. package/dist/switchCase.min.js +1 -1
  246. package/dist/switchCase.mjs +1 -1
  247. package/dist/tap.es.js +1 -1
  248. package/dist/tap.es.min.js +1 -1
  249. package/dist/tap.js +1 -1
  250. package/dist/tap.min.js +1 -1
  251. package/dist/tap.mjs +1 -1
  252. package/dist/thunkify.es.js +1 -1
  253. package/dist/thunkify.es.min.js +1 -1
  254. package/dist/thunkify.js +1 -1
  255. package/dist/thunkify.min.js +1 -1
  256. package/dist/thunkify.mjs +1 -1
  257. package/dist/transform.es.js +5 -5
  258. package/dist/transform.es.min.js +1 -1
  259. package/dist/transform.js +5 -5
  260. package/dist/transform.min.js +1 -1
  261. package/dist/transform.mjs +5 -5
  262. package/dist/tryCatch.es.js +1 -1
  263. package/dist/tryCatch.es.min.js +1 -1
  264. package/dist/tryCatch.js +1 -1
  265. package/dist/tryCatch.min.js +1 -1
  266. package/dist/tryCatch.mjs +1 -1
  267. package/dist/x/append.es.js +8 -8
  268. package/dist/x/append.es.min.js +1 -1
  269. package/dist/x/append.js +8 -8
  270. package/dist/x/append.min.js +1 -1
  271. package/dist/x/append.mjs +8 -8
  272. package/dist/x/callProp.es.js +1 -1
  273. package/dist/x/callProp.es.min.js +1 -1
  274. package/dist/x/callProp.js +1 -1
  275. package/dist/x/callProp.min.js +1 -1
  276. package/dist/x/callProp.mjs +1 -1
  277. package/dist/x/defaultsDeep.es.js +69 -37
  278. package/dist/x/defaultsDeep.es.min.js +2 -2
  279. package/dist/x/defaultsDeep.js +69 -37
  280. package/dist/x/defaultsDeep.min.js +2 -2
  281. package/dist/x/defaultsDeep.mjs +69 -37
  282. package/dist/x/differenceWith.es.js +14 -14
  283. package/dist/x/differenceWith.es.min.js +1 -1
  284. package/dist/x/differenceWith.js +14 -14
  285. package/dist/x/differenceWith.min.js +1 -1
  286. package/dist/x/differenceWith.mjs +14 -14
  287. package/dist/x/filterOut.es.js +21 -21
  288. package/dist/x/filterOut.es.min.js +1 -1
  289. package/dist/x/filterOut.js +21 -21
  290. package/dist/x/filterOut.min.js +1 -1
  291. package/dist/x/filterOut.mjs +21 -21
  292. package/dist/x/find.es.js +18 -18
  293. package/dist/x/find.es.min.js +1 -1
  294. package/dist/x/find.js +18 -18
  295. package/dist/x/find.min.js +1 -1
  296. package/dist/x/find.mjs +18 -18
  297. package/dist/x/findIndex.es.js +1 -1
  298. package/dist/x/findIndex.es.min.js +1 -1
  299. package/dist/x/findIndex.js +1 -1
  300. package/dist/x/findIndex.min.js +1 -1
  301. package/dist/x/findIndex.mjs +1 -1
  302. package/dist/x/first.es.js +1 -1
  303. package/dist/x/first.es.min.js +1 -1
  304. package/dist/x/first.js +1 -1
  305. package/dist/x/first.min.js +1 -1
  306. package/dist/x/first.mjs +1 -1
  307. package/dist/x/flatten.es.js +82 -82
  308. package/dist/x/flatten.es.min.js +1 -1
  309. package/dist/x/flatten.js +82 -82
  310. package/dist/x/flatten.min.js +1 -1
  311. package/dist/x/flatten.mjs +82 -82
  312. package/dist/x/groupBy.es.js +17 -17
  313. package/dist/x/groupBy.es.min.js +1 -1
  314. package/dist/x/groupBy.js +17 -17
  315. package/dist/x/groupBy.min.js +1 -1
  316. package/dist/x/groupBy.mjs +17 -17
  317. package/dist/x/has.es.js +1 -1
  318. package/dist/x/has.es.min.js +1 -1
  319. package/dist/x/has.js +1 -1
  320. package/dist/x/has.min.js +1 -1
  321. package/dist/x/has.mjs +1 -1
  322. package/dist/x/identity.es.js +1 -1
  323. package/dist/x/identity.es.min.js +1 -1
  324. package/dist/x/identity.js +1 -1
  325. package/dist/x/identity.min.js +1 -1
  326. package/dist/x/identity.mjs +1 -1
  327. package/dist/x/includes.es.js +1 -1
  328. package/dist/x/includes.es.min.js +1 -1
  329. package/dist/x/includes.js +1 -1
  330. package/dist/x/includes.min.js +1 -1
  331. package/dist/x/includes.mjs +1 -1
  332. package/dist/x/isDeepEqual.es.js +1 -1
  333. package/dist/x/isDeepEqual.es.min.js +1 -1
  334. package/dist/x/isDeepEqual.js +1 -1
  335. package/dist/x/isDeepEqual.min.js +1 -1
  336. package/dist/x/isDeepEqual.mjs +1 -1
  337. package/dist/x/isEmpty.es.js +1 -1
  338. package/dist/x/isEmpty.es.min.js +1 -1
  339. package/dist/x/isEmpty.js +1 -1
  340. package/dist/x/isEmpty.min.js +1 -1
  341. package/dist/x/isEmpty.mjs +1 -1
  342. package/dist/x/isEqual.es.js +1 -1
  343. package/dist/x/isEqual.es.min.js +1 -1
  344. package/dist/x/isEqual.js +1 -1
  345. package/dist/x/isEqual.min.js +1 -1
  346. package/dist/x/isEqual.mjs +1 -1
  347. package/dist/x/isFunction.es.js +1 -1
  348. package/dist/x/isFunction.es.min.js +1 -1
  349. package/dist/x/isFunction.js +1 -1
  350. package/dist/x/isFunction.min.js +1 -1
  351. package/dist/x/isFunction.mjs +1 -1
  352. package/dist/x/isIn.es.js +1 -1
  353. package/dist/x/isIn.es.min.js +1 -1
  354. package/dist/x/isIn.js +1 -1
  355. package/dist/x/isIn.min.js +1 -1
  356. package/dist/x/isIn.mjs +1 -1
  357. package/dist/x/isObject.es.js +1 -1
  358. package/dist/x/isObject.es.min.js +1 -1
  359. package/dist/x/isObject.js +1 -1
  360. package/dist/x/isObject.min.js +1 -1
  361. package/dist/x/isObject.mjs +1 -1
  362. package/dist/x/isString.es.js +1 -1
  363. package/dist/x/isString.es.min.js +1 -1
  364. package/dist/x/isString.js +1 -1
  365. package/dist/x/isString.min.js +1 -1
  366. package/dist/x/isString.mjs +1 -1
  367. package/dist/x/keys.es.js +1 -1
  368. package/dist/x/keys.es.min.js +1 -1
  369. package/dist/x/keys.js +1 -1
  370. package/dist/x/keys.min.js +1 -1
  371. package/dist/x/keys.mjs +1 -1
  372. package/dist/x/last.es.js +1 -1
  373. package/dist/x/last.es.min.js +1 -1
  374. package/dist/x/last.js +1 -1
  375. package/dist/x/last.min.js +1 -1
  376. package/dist/x/last.mjs +1 -1
  377. package/dist/x/maxBy.es.js +6 -6
  378. package/dist/x/maxBy.es.min.js +1 -1
  379. package/dist/x/maxBy.js +6 -6
  380. package/dist/x/maxBy.min.js +1 -1
  381. package/dist/x/maxBy.mjs +6 -6
  382. package/dist/x/noop.es.js +1 -1
  383. package/dist/x/noop.es.min.js +1 -1
  384. package/dist/x/noop.js +1 -1
  385. package/dist/x/noop.min.js +1 -1
  386. package/dist/x/noop.mjs +1 -1
  387. package/dist/x/pluck.es.js +83 -83
  388. package/dist/x/pluck.es.min.js +1 -1
  389. package/dist/x/pluck.js +83 -83
  390. package/dist/x/pluck.min.js +1 -1
  391. package/dist/x/pluck.mjs +83 -83
  392. package/dist/x/prepend.es.js +8 -8
  393. package/dist/x/prepend.es.min.js +1 -1
  394. package/dist/x/prepend.js +8 -8
  395. package/dist/x/prepend.min.js +1 -1
  396. package/dist/x/prepend.mjs +8 -8
  397. package/dist/x/size.es.js +1 -1
  398. package/dist/x/size.es.min.js +1 -1
  399. package/dist/x/size.js +1 -1
  400. package/dist/x/size.min.js +1 -1
  401. package/dist/x/size.mjs +1 -1
  402. package/dist/x/trace.es.js +1 -1
  403. package/dist/x/trace.es.min.js +1 -1
  404. package/dist/x/trace.js +1 -1
  405. package/dist/x/trace.min.js +1 -1
  406. package/dist/x/trace.mjs +1 -1
  407. package/dist/x/unionWith.es.js +39 -39
  408. package/dist/x/unionWith.es.min.js +1 -1
  409. package/dist/x/unionWith.js +39 -39
  410. package/dist/x/unionWith.min.js +1 -1
  411. package/dist/x/unionWith.mjs +39 -39
  412. package/dist/x/uniq.es.js +1 -1
  413. package/dist/x/uniq.es.min.js +1 -1
  414. package/dist/x/uniq.js +1 -1
  415. package/dist/x/uniq.min.js +1 -1
  416. package/dist/x/uniq.mjs +1 -1
  417. package/dist/x/unless.es.js +1 -1
  418. package/dist/x/unless.es.min.js +1 -1
  419. package/dist/x/unless.js +1 -1
  420. package/dist/x/unless.min.js +1 -1
  421. package/dist/x/unless.mjs +1 -1
  422. package/dist/x/values.es.js +1 -1
  423. package/dist/x/values.es.min.js +1 -1
  424. package/dist/x/values.js +1 -1
  425. package/dist/x/values.min.js +1 -1
  426. package/dist/x/values.mjs +1 -1
  427. package/dist/x/when.es.js +1 -1
  428. package/dist/x/when.es.min.js +1 -1
  429. package/dist/x/when.js +1 -1
  430. package/dist/x/when.min.js +1 -1
  431. package/dist/x/when.mjs +1 -1
  432. package/eq.js +32 -10
  433. package/es.js +215 -215
  434. package/every.d.ts +1 -1
  435. package/every.js +6 -3
  436. package/filter.d.ts +3 -3
  437. package/filter.js +14 -14
  438. package/flatMap.d.ts +9 -9
  439. package/flatMap.js +9 -9
  440. package/forEach.d.ts +1 -1
  441. package/forEach.js +19 -15
  442. package/global.js +1 -0
  443. package/gt.js +30 -13
  444. package/gte.js +31 -12
  445. package/index.js +215 -215
  446. package/lt.js +28 -9
  447. package/lte.js +34 -15
  448. package/map.d.ts +3 -3
  449. package/map.js +31 -31
  450. package/monad/Mux.benchmark.js +1 -1
  451. package/monad/Mux.js +6 -6
  452. package/monad/Struct.js +2 -2
  453. package/not.js +15 -7
  454. package/or.js +5 -2
  455. package/package.json +1 -1
  456. package/pipe.js +7 -13
  457. package/reduce.d.ts +7 -7
  458. package/reduce.js +16 -16
  459. package/some.d.ts +1 -1
  460. package/some.js +6 -3
  461. package/switchCase.d.ts +1 -1
  462. package/switchCase.js +7 -4
  463. package/tap.js +14 -4
  464. package/thunkify.js +2 -0
  465. package/transform.d.ts +1 -1
  466. package/transform.js +6 -15
  467. package/tryCatch.js +8 -2
  468. package/x/README.md +8 -8
  469. package/x/append.d.ts +2 -2
  470. package/x/append.js +8 -8
  471. package/x/defaultsDeep.js +94 -57
  472. package/x/defaultsDeep.test.js +24 -1
  473. package/x/differenceWith.js +13 -13
  474. package/x/find.d.ts +1 -1
  475. package/x/find.js +1 -1
  476. package/x/find.test.js +2 -2
  477. package/x/findIndex.test.js +1 -1
  478. package/x/first.d.ts +1 -1
  479. package/x/first.js +1 -1
  480. package/x/first.test.js +1 -1
  481. package/x/groupBy.d.ts +1 -1
  482. package/x/groupBy.js +13 -13
  483. package/x/last.d.ts +1 -1
  484. package/x/last.js +1 -1
  485. package/x/last.test.js +1 -1
  486. package/x/maxBy.d.ts +7 -7
  487. package/x/maxBy.js +13 -13
  488. package/x/maxBy.test.js +5 -5
  489. package/x/pluck.test.js +1 -1
  490. package/x/prepend.d.ts +2 -2
  491. package/x/prepend.js +8 -8
  492. package/x/size.d.ts +1 -1
  493. package/x/size.js +1 -1
  494. package/x/unionWith.js +11 -11
  495. package/x/unionWith.test.js +5 -5
  496. package/global.d.ts +0 -1
package/reduce.js CHANGED
@@ -23,17 +23,17 @@ const _reduce = function (collection, reducer, initial) {
23
23
  * ```coffeescript [specscript]
24
24
  * type Foldable = Array|Set|Map|Generator|AsyncGenerator|{ reduce: function }|Object
25
25
  *
26
- * type Reducer = (
26
+ * type SyncOrAsyncReducer = (
27
27
  * accumulator any,
28
- * item any,
28
+ * element any,
29
29
  * indexOrKey number|string|any,
30
30
  * foldable Foldable
31
31
  * )=>(nextAccumulator Promise|any)
32
32
  *
33
- * type Resolver = (foldable Foldable)=>Promise|any
33
+ * type UnarySyncOrAsyncResolver = any=>Promise|any
34
34
  *
35
- * reducer Reducer
36
- * initial Resolver|any
35
+ * reducer SyncOrAsyncReducer
36
+ * initial UnarySyncOrAsyncResolver|any
37
37
  *
38
38
  * reduce(foldable Promise|Foldable, reducer, initial?) -> result Promise|any
39
39
  * reduce(reducer, initial?)(foldable Foldable) -> result Promise|any
@@ -51,11 +51,11 @@ const _reduce = function (collection, reducer, initial) {
51
51
  * * `object with .reduce method`
52
52
  * * `object`
53
53
  *
54
- * The reducing operation is dictated by a provided reducer function, which defines a transformation between the accumulator and a given item of the foldable.
54
+ * The reducing operation is dictated by a provided reducer function, which defines a transformation between the accumulator and a given element of the foldable.
55
55
  *
56
56
  * ```javascript
57
- * const reducer = function (accumulator, item) {
58
- * // nextAccumulator is the result of some operation between accumulator and item
57
+ * const reducer = function (accumulator, element) {
58
+ * // nextAccumulator is the result of some operation between accumulator and element
59
59
  * // and becomes the accumulator for the next iteration and invocation of the reducer
60
60
  * return nextAccumulator
61
61
  * }
@@ -67,7 +67,7 @@ const _reduce = function (collection, reducer, initial) {
67
67
  * ```coffeescript [specscript]
68
68
  * reducer(
69
69
  * accumulator any,
70
- * item any,
70
+ * element any,
71
71
  * index number,
72
72
  * fold Array
73
73
  * ) -> nextAccumulator Promise|any
@@ -77,7 +77,7 @@ const _reduce = function (collection, reducer, initial) {
77
77
  * ```coffeescript [specscript]
78
78
  * reducer(
79
79
  * accumulator any,
80
- * item any
80
+ * element any
81
81
  * ) -> nextAccumulator Promise|any
82
82
  * ```
83
83
  *
@@ -85,7 +85,7 @@ const _reduce = function (collection, reducer, initial) {
85
85
  * ```coffeescript [specscript]
86
86
  * reducer(
87
87
  * accumulator any,
88
- * item any,
88
+ * element any,
89
89
  * key any,
90
90
  * fold Map
91
91
  * ) -> nextAccumulator Promise|any
@@ -95,7 +95,7 @@ const _reduce = function (collection, reducer, initial) {
95
95
  * ```coffeescript [specscript]
96
96
  * reducer(
97
97
  * accumulator any,
98
- * item any
98
+ * element any
99
99
  * ) -> nextAccumulator Promise|any
100
100
  * ```
101
101
  *
@@ -103,7 +103,7 @@ const _reduce = function (collection, reducer, initial) {
103
103
  * ```coffeescript [specscript]
104
104
  * reducer(
105
105
  * accumulator any,
106
- * item any
106
+ * element any
107
107
  * ) -> nextAccumulator Promise|any
108
108
  * ```
109
109
  *
@@ -113,13 +113,13 @@ const _reduce = function (collection, reducer, initial) {
113
113
  * ```coffeescript [specscript]
114
114
  * reducer(
115
115
  * accumulator any,
116
- * item any,
116
+ * element any,
117
117
  * key string,
118
118
  * fold Object
119
119
  * ) -> nextAccumulator Promise|any
120
120
  * ```
121
121
  *
122
- * `reduce` executes a reducer function for each item of the array in order. If no initial value is provided, `reduce` uses the first item of the foldable as the initial value and starts iterating from the second item of the foldable.
122
+ * `reduce` executes a reducer function for each element of the array in order. If no initial value is provided, `reduce` uses the first element of the foldable as the initial value and starts iterating from the second element of the foldable.
123
123
  *
124
124
  * ```javascript [playground]
125
125
  * const max = (a, b) => a > b ? a : b
@@ -128,7 +128,7 @@ const _reduce = function (collection, reducer, initial) {
128
128
  * console.log(result) // 5
129
129
  * ```
130
130
  *
131
- * If an initial value is provided, the accumulator starts as the initial value rather than the first item of the foldable.
131
+ * If an initial value is provided, the accumulator starts as the initial value rather than the first element of the foldable.
132
132
  *
133
133
  * ```javascript [playground]
134
134
  * const add = (a, b) => a + b
package/some.d.ts CHANGED
@@ -12,7 +12,7 @@ export = some;
12
12
  * ```
13
13
  *
14
14
  * @description
15
- * Test a predicate concurrently across all items of a collection, returning true if any executions return truthy.
15
+ * Test a predicate concurrently across all elements of a collection, returning true if any executions return truthy.
16
16
  *
17
17
  * ```javascript [playground]
18
18
  * const isOdd = number => number % 2 == 1
package/some.js CHANGED
@@ -41,13 +41,16 @@ const _some = function (collection, predicate) {
41
41
  * @synopsis
42
42
  * ```coffeescript [specscript]
43
43
  * type Foldable = Array|Set|Map|Generator|AsyncGenerator|{ reduce: function }|Object
44
+ * type UnarySyncOrAsyncPredicate = any=>Promise|boolean
44
45
  *
45
- * some(foldable Foldable, predicate function) -> Promise|boolean
46
- * some(predicate function)(foldable Foldable) -> Promise|boolean
46
+ * predicate UnarySyncOrAsyncPredicate
47
+ *
48
+ * some(foldable Foldable, predicate) -> Promise|boolean
49
+ * some(predicate)(foldable Foldable) -> Promise|boolean
47
50
  * ```
48
51
  *
49
52
  * @description
50
- * Test a predicate concurrently across all items of a foldable, returning true if any executions return true.
53
+ * Test a predicate concurrently across all elements of a foldable, returning true if any executions return true.
51
54
  *
52
55
  * ```javascript [playground]
53
56
  * const isOdd = number => number % 2 == 1
package/switchCase.d.ts CHANGED
@@ -61,7 +61,7 @@ export = switchCase;
61
61
  * ])(false).then(console.log) // default
62
62
  * ```
63
63
  *
64
- * If every item in the conditional array is a nonfunction value, `switchCase` executes eagerly.
64
+ * If every element in the conditional array is a nonfunction value, `switchCase` executes eagerly.
65
65
  *
66
66
  * ```javascript [playground]
67
67
  * const age = 26
package/switchCase.js CHANGED
@@ -14,8 +14,11 @@ const curryArgs3 = require('./_internal/curryArgs3')
14
14
  * ```coffeescript [specscript]
15
15
  * args Array<any>
16
16
  * argsOrPromises Array<Promise|any>
17
+ *
18
+ * type SyncOrAsyncPredicate = (...args)=>Promise|boolean|any
19
+ *
17
20
  * conditionalPromisesOrValues Array<Promise|boolean|any>
18
- * conditionalFuncsOrPromisesOrValues Array<function|Promise|boolean|any>
21
+ * conditionalFuncsOrPromisesOrValues Array<SyncOrAsyncPredicate|Promise|boolean|any>
19
22
  *
20
23
  * switchCase(conditionalPromisesOrValues) -> Promise|any
21
24
  * switchCase(...argsOrPromises, conditionalFuncsOrPromisesOrValues) -> Promise|any
@@ -58,16 +61,16 @@ const curryArgs3 = require('./_internal/curryArgs3')
58
61
  * Any function can be replaced with a nonfunction (object or primitive) value to be used directly in the operation.
59
62
  *
60
63
  * ```javascript [playground]
61
- * switchCase([
64
+ * switchCase(false, [
62
65
  * async function asyncIdentity(value) {
63
66
  * return value
64
67
  * },
65
68
  * 'something',
66
69
  * 'default',
67
- * ])(false).then(console.log) // default
70
+ * ]).then(console.log) // default
68
71
  * ```
69
72
  *
70
- * If every item in the conditional array is a nonfunction value, `switchCase` executes eagerly.
73
+ * If every element in the conditional array is a nonfunction value, `switchCase` executes eagerly.
71
74
  *
72
75
  * ```javascript [playground]
73
76
  * const age = 26
package/tap.js CHANGED
@@ -25,8 +25,12 @@ const _tap = function (args, f) {
25
25
  * args Array<any>
26
26
  * argsOrPromises Array<Promise|any>
27
27
  *
28
- * tap(...argsOrPromises, f function) -> Promise|args[0]
29
- * tap(f function)(...args) -> Promise|args[0]
28
+ * type SyncOrAsyncFunction = (...args)=>Promise|any
29
+ *
30
+ * f SyncOrAsyncFunction
31
+ *
32
+ * tap(...argsOrPromises, f) -> Promise|args[0]
33
+ * tap(f)(...args) -> Promise|args[0]
30
34
  * ```
31
35
  *
32
36
  * @description
@@ -107,8 +111,14 @@ const _tapIf = function (predicate, f, args) {
107
111
  * args Array<any>
108
112
  * argsOrPromises Array<Promise|any>
109
113
  *
110
- * tap.if(...argsOrPromises, predicate function, f function) -> Promise|args[0]
111
- * tap.if(predicate function, f function)(...args) -> Promise|args[0]
114
+ * type SyncOrAsyncPredicate = (...args)=>Promise|boolean|any
115
+ * type SyncOrAsyncFunction = (...args)=>Promise|any
116
+ *
117
+ * predicate SyncOrAsyncPredicate
118
+ * f SyncOrAsyncFunction
119
+ *
120
+ * tap.if(...argsOrPromises, predicate, f) -> Promise|args[0]
121
+ * tap.if(predicate, f)(...args) -> Promise|args[0]
112
122
  * ```
113
123
  *
114
124
  * @description
package/thunkify.js CHANGED
@@ -9,6 +9,8 @@ const funcApply = require('./_internal/funcApply')
9
9
  *
10
10
  * @synopsis
11
11
  * ```coffeescript [specscript]
12
+ * args Array<any>
13
+ *
12
14
  * thunkify(func function, ...args) -> thunk ()=>func(...args)
13
15
  * ```
14
16
  *
package/transform.d.ts CHANGED
@@ -40,7 +40,7 @@ export = transform;
40
40
  * * `Set`; concatenation defined by `result.add(...values)`
41
41
  * * `TypedArray`; concatenation defined by `result.set(prevResult); result.set(values, offset)`
42
42
  * * `{ concat: function }`; concatenation defined by `result.concat(values)`
43
- * * `{ write: function }`; concatenation defined by `result.write(item)`
43
+ * * `{ write: function }`; concatenation defined by `result.write(element)`
44
44
  * * `Object`; concatenation defined by `({ ...result, ...values })`
45
45
  *
46
46
  * `transform` can transform any of the above collections into any of the other above collections.
package/transform.js CHANGED
@@ -22,21 +22,16 @@ const _transform = function (collection, transducer, initialValue) {
22
22
  * @synopsis
23
23
  * ```coffeescript [specscript]
24
24
  * type Foldable = Array|Set|Map|Generator|AsyncGenerator|{ reduce: function }|Object
25
- *
26
- * type Reducer = (
27
- * accumulator any,
28
- * value any,
29
- * )=>(nextAccumulator Promise|any)
30
- *
31
- * type Transducer = Reducer=>Reducer
25
+ * type SyncOrAsyncReducer = (accumulator any, value any)=>(nextAccumulator Promise|any)
26
+ * type Transducer = SyncOrAsyncReducer=>SyncOrAsyncReducer
32
27
  *
33
28
  * type Semigroup =
34
29
  * Array|String|Set|TypedArray|{ concat: function }|{ write: function }|Object
35
30
  *
36
- * type SemigroupResolver = (foldable Foldable)=>Promise|Semigroup
31
+ * type UnarySyncOrAsyncSemigroupResolver = any=>Promise|Semigroup
37
32
  *
38
33
  * transducer Transducer
39
- * initial Semigroup|SemigroupResolver
34
+ * initial UnarySyncOrAsyncSemigroupResolver|Semigroup
40
35
  *
41
36
  * transform(foldable Promise|Foldable, transducer, initial?) -> result Promise|Semigroup
42
37
  * transform(transducer, initial?)(foldable Foldable) -> result Promise|Semigroup
@@ -57,12 +52,8 @@ const _transform = function (collection, transducer, initialValue) {
57
52
  * Transducers, due to their lazy nature, don't have knowledge of the foldable they are transforming. As such, the transducer signature for all foldables is the same:
58
53
  *
59
54
  * ```coffeescript [specscript]
60
- * type Reducer = (
61
- * accumulator any,
62
- * value any,
63
- * )=>(nextAccumulator Promise|any)
64
- *
65
- * type Transducer = Reducer=>Reducer
55
+ * type SyncOrAsyncReducer = (accumulator any, value any)=>(nextAccumulator Promise|any)
56
+ * type Transducer = SyncOrAsyncReducer=>SyncOrAsyncReducer
66
57
  * ```
67
58
  *
68
59
  * The following data types are considered to be semigroups:
package/tryCatch.js CHANGED
@@ -25,8 +25,14 @@ const _tryCatch = function (tryer, catcher, args) {
25
25
  * args Array<any>
26
26
  * argsOrPromises Array<Promise|any>
27
27
  *
28
- * tryCatch(tryer function, catcher function)(...args) -> Promise|any
29
- * tryCatch(...argsOrPromises, tryer function, catcher function) -> Promise|any
28
+ * type SyncOrAsyncFunction = (...args)=>Promise|any
29
+ * type SyncOrAsyncCatcher = (error Error|any, ...args)=>Promise|any
30
+ *
31
+ * tryer SyncOrAsyncFunction
32
+ * catcher SyncOrAsyncCatcher
33
+ *
34
+ * tryCatch(tryer, catcher)(...args) -> Promise|any
35
+ * tryCatch(...argsOrPromises, tryer, catcher) -> Promise|any
30
36
  * ```
31
37
  *
32
38
  * @description
package/x/README.md CHANGED
@@ -46,7 +46,7 @@ defaultsDeep({
46
46
  ```
47
47
 
48
48
  ### find
49
- get the first item in a collection that passes the test
49
+ get the first element in a collection that passes the test
50
50
  ```javascript
51
51
  y = find(xi => boolean)(x)
52
52
  ```
@@ -86,20 +86,20 @@ flatten([[1], [2], [3]]), // > [1, 2, 3]
86
86
 
87
87
  `x` is a String or Array
88
88
 
89
- `y` is the last item of `x`
89
+ `y` is the last element of `x`
90
90
 
91
91
  ```javascript
92
92
  first([1,2,3]) // 1
93
93
  ```
94
94
 
95
95
  ### forEach
96
- execute a function for each item of a collection, returning input
96
+ execute a function for each element of a collection, returning input
97
97
  ```javascript
98
98
  y = forEach(f)(x)
99
99
  ```
100
100
  `f` is a function
101
101
 
102
- `f` is called for each item of `x`
102
+ `f` is called for each element of `x`
103
103
 
104
104
  `x` is an Iterable, AsyncIterable, Object, or reducer function
105
105
 
@@ -232,14 +232,14 @@ y = last(x)
232
232
 
233
233
  `x` is a String or Array
234
234
 
235
- `y` is the last item of `x`
235
+ `y` is the last element of `x`
236
236
 
237
237
  ```javascript
238
238
  last([1,2,3]) // 3
239
239
  ```
240
240
 
241
241
  ### pluck
242
- create a new collection by getting a path from every item of an old collection
242
+ create a new collection by getting a path from every element of an old collection
243
243
  ```javascript
244
244
  y = pluck(path, defaultValue)(x)
245
245
  ```
@@ -312,13 +312,13 @@ create a flattened unique array with uniques given by a binary predicate
312
312
  ```javascript
313
313
  y = unionWith((a, b) => boolean)(x)
314
314
  ```
315
- `a` and `b` are items of items of `x`
315
+ `a` and `b` are elements of elements of `x`
316
316
 
317
317
  `(a, b) => boolean` returns True if a and b are duplicates
318
318
 
319
319
  `x` is an Array of Arrays of anything
320
320
 
321
- `y` is a flattened Array of unique items of items of `x` determined by `(a, b) => boolean`
321
+ `y` is a flattened Array of unique elements of elements of `x` determined by `(a, b) => boolean`
322
322
 
323
323
  `y` is a Promise if any of the following are true
324
324
  * `(a, b) => boolean` is asynchronous
package/x/append.d.ts CHANGED
@@ -5,7 +5,7 @@ export = append;
5
5
  * @synopsis
6
6
  * ```coffeescript [specscript]
7
7
  * append(
8
- * item string|Array,
8
+ * element string|Array,
9
9
  * )(value string|Array) -> string|array
10
10
  * ```
11
11
  *
@@ -35,4 +35,4 @@ export = append;
35
35
  *
36
36
  * @since 1.7.3
37
37
  */
38
- declare function append(item: any): (value: any) => string | any[];
38
+ declare function append(element: any): (value: any) => string | any[];
package/x/append.js CHANGED
@@ -7,7 +7,7 @@ const isArray = require('../_internal/isArray')
7
7
  * @synopsis
8
8
  * ```coffeescript [specscript]
9
9
  * append(
10
- * item string|Array,
10
+ * element string|Array,
11
11
  * )(value string|Array) -> string|array
12
12
  * ```
13
13
  *
@@ -41,20 +41,20 @@ const isArray = require('../_internal/isArray')
41
41
  * @since 1.7.3
42
42
  */
43
43
 
44
- const append = item => function appendFunc(value) {
44
+ const append = element => function appendFunc(value) {
45
45
 
46
46
  if (isArray(value)) {
47
- if (isArray(item)){
48
- return [...value, ...item]
47
+ if (isArray(element)){
48
+ return [...value, ...element]
49
49
  }
50
- return [...value, item]
50
+ return [...value, element]
51
51
  }
52
52
 
53
53
  if (isString(value)){
54
- if (!isString(item)){
55
- throw new TypeError(`${item} is not a string`)
54
+ if (!isString(element)){
55
+ throw new TypeError(`${element} is not a string`)
56
56
  }
57
- return `${value}${item}`
57
+ return `${value}${element}`
58
58
  }
59
59
 
60
60
  throw new TypeError(`${value} is not an Array or string`)
package/x/defaultsDeep.js CHANGED
@@ -1,33 +1,35 @@
1
1
  const isArray = require('../_internal/isArray')
2
+ const curry2 = require('../_internal/curry2')
3
+ const __ = require('../_internal/placeholder')
2
4
 
3
5
  /**
4
6
  * @name arrayDefaultsDeepFromArray
5
7
  *
6
8
  * @synopsis
7
9
  * ```coffeescript [specscript]
8
- * var array Array<Array|Object|any>,
9
- * defaultArray Array<Array|Object|any>,
10
- *
11
- * arrayDefaultsDeepFromArray(array, defaultArray) -> Array
10
+ * arrayDefaultsDeepFromArray(
11
+ * data Array<Array|Object|any>,
12
+ * defaults Array<Array|Object|any>
13
+ * ) -> Object
12
14
  * ```
13
15
  */
14
- const arrayDefaultsDeepFromArray = function (array, defaultArray) {
15
- const defaultArrayLength = defaultArray.length,
16
- result = array.slice()
16
+ function arrayDefaultsDeepFromArray(data, defaults) {
17
+ const defaultArrayLength = defaults.length,
18
+ result = data.slice()
17
19
  let index = -1
18
20
  while (++index < defaultArrayLength) {
19
- const item = array[index],
20
- defaultItem = defaultArray[index]
21
- if (isArray(item) && isArray(defaultItem)) {
22
- result[index] = arrayDefaultsDeepFromArray(item, defaultItem)
23
- } else if (item == null) {
24
- result[index] = defaultItem
25
- } else if (defaultItem == null) {
26
- result[index] = item
27
- } else if (item.constructor == Object && defaultItem.constructor == Object) {
28
- result[index] = objectDefaultsDeepFromObject(item, defaultItem)
21
+ const element = data[index],
22
+ defaultElement = defaults[index]
23
+ if (isArray(element) && isArray(defaultElement)) {
24
+ result[index] = arrayDefaultsDeepFromArray(element, defaultElement)
25
+ } else if (element == null) {
26
+ result[index] = defaultElement
27
+ } else if (defaultElement == null) {
28
+ result[index] = element
29
+ } else if (element.constructor == Object && defaultElement.constructor == Object) {
30
+ result[index] = objectDefaultsDeepFromObject(element, defaultElement)
29
31
  } else {
30
- result[index] = item
32
+ result[index] = element
31
33
  }
32
34
  }
33
35
  return result
@@ -38,62 +40,89 @@ const arrayDefaultsDeepFromArray = function (array, defaultArray) {
38
40
  *
39
41
  * @synopsis
40
42
  * ```coffeescript [specscript]
41
- * var object Object<Array|Object|any>,
42
- * defaultObject Object<Array|Object|any>
43
- *
44
- * objectDefaultsDeepFromObject(object, defaultObject) -> Object
43
+ * objectDefaultsDeepFromObject(
44
+ * data Object<Array|Object|any>,
45
+ * defaults Object<Array|Object|any>
46
+ * ) -> Object
45
47
  * ```
46
48
  */
47
- const objectDefaultsDeepFromObject = function (object, defaultObject) {
48
- const result = { ...object }
49
- for (const key in defaultObject) {
50
- const item = object[key],
51
- defaultItem = defaultObject[key]
52
- if (isArray(item) && isArray(defaultItem)) {
53
- result[key] = arrayDefaultsDeepFromArray(item, defaultItem)
54
- } else if (item == null) {
55
- result[key] = defaultItem
56
- } else if (defaultItem == null) {
57
- result[key] = item
58
- } else if (item.constructor == Object && defaultItem.constructor == Object) {
59
- result[key] = objectDefaultsDeepFromObject(item, defaultItem)
49
+ function objectDefaultsDeepFromObject(data, defaults) {
50
+ const result = { ...data }
51
+ for (const key in defaults) {
52
+ const element = data[key],
53
+ defaultElement = defaults[key]
54
+ if (isArray(element) && isArray(defaultElement)) {
55
+ result[key] = arrayDefaultsDeepFromArray(element, defaultElement)
56
+ } else if (element == null) {
57
+ result[key] = defaultElement
58
+ } else if (defaultElement == null) {
59
+ result[key] = element
60
+ } else if (element.constructor == Object && defaultElement.constructor == Object) {
61
+ result[key] = objectDefaultsDeepFromObject(element, defaultElement)
60
62
  } else {
61
- result[key] = item
63
+ result[key] = element
62
64
  }
63
65
  }
64
66
  return result
65
67
  }
66
68
 
69
+ /**
70
+ * @name _defaultsDeep
71
+ *
72
+ * @synopsis
73
+ * ```coffeescript [specscript]
74
+ * _defaultsDeep(
75
+ * data Object<Array|Object|any>,
76
+ * defaults (Object|Array)<Array|Object|any>
77
+ * ) -> result Object
78
+ * ```
79
+ */
80
+ function _defaultsDeep(data, defaults) {
81
+ if (isArray(data) && isArray(defaults)) {
82
+ return arrayDefaultsDeepFromArray(data, defaults)
83
+ }
84
+ if (data == null || defaults == null) {
85
+ return data
86
+ }
87
+ if (data.constructor == Object && defaults.constructor == Object) {
88
+ return objectDefaultsDeepFromObject(data, defaults)
89
+ }
90
+ return data
91
+ }
92
+
67
93
  /**
68
94
  * @name defaultsDeep
69
95
  *
70
96
  * @synopsis
71
97
  * ```coffeescript [specscript]
72
- * var defaultCollection Array|Object,
73
- * value Array|Object
98
+ * data (Object|Array)<Array|Object|any>
99
+ * defaults (Object|Array)<Array|Object|any>
74
100
  *
75
- * defaultsDeep(defaultCollection)(value) -> Array|Object
101
+ * defaultsDeep(data, defaults) -> result Object
102
+ * defaultsDeep(defaults)(data) -> result Object
76
103
  * ```
77
104
  *
78
105
  * @description
79
- * Deeply assign default values to an array or object by an array or object of possibly nested default values.
106
+ * Deeply assign default values to an object or array `data` using an array or object of default values `defaults`. The keys or indices of each element of `defaults` are used to extend `data` where there is no existing value. Both `data` and `defaults` may have nested arrays or objects.
80
107
  *
81
108
  * ```javascript [playground]
82
109
  * import defaultsDeep from 'https://unpkg.com/rubico/dist/x/defaultsDeep.es.js'
83
110
  *
84
- * const defaultUser = defaultsDeep({
111
+ * const user = {
112
+ * name: 'John',
113
+ * images: [{ url: 'https://placehold.co/600x400' }],
114
+ * }
115
+ *
116
+ * const userWithDefaults = defaultsDeep(user, {
85
117
  * name: 'placeholder',
86
118
  * images: [
87
- * { url: 'https://via.placeholder.com/150' },
88
- * { url: 'https://via.placeholder.com/150' },
89
- * { url: 'https://via.placeholder.com/150' },
119
+ * { url: 'https://placehold.co/150' },
120
+ * { url: 'https://placehold.co/150' },
121
+ * { url: 'https://placehold.co/150' },
90
122
  * ],
91
123
  * })
92
124
  *
93
- * console.log(defaultUser({
94
- * name: 'John',
95
- * images: [{ url: 'https://via.placeholder.com/150/0000FF/808080%20?Text=Digital.com' }],
96
- * }))
125
+ * console.log(userWithDefaults)
97
126
  * // {
98
127
  * // name: 'John',
99
128
  * // images: [
@@ -104,22 +133,30 @@ const objectDefaultsDeepFromObject = function (object, defaultObject) {
104
133
  * // }
105
134
  * ```
106
135
  *
136
+ * The `defaults` array or object may be provided to `defaultsDeep` without `data` to create a lazy version of `defaultsDeep` that accepts `data` as a single argument. This "lazy" API can be used for function pipelines and function compositions.
137
+ *
138
+ * ```javascript [playground]
139
+ * pipe({ a: 1 }, [
140
+ * defaultsDeep({ b: 2, c: 3, g: [1, 2, 3] }),
141
+ * console.log, // { a: 1, b: 2, c: 3, g: [1, 2, 3] }
142
+ * ])
143
+ * ```
144
+ *
107
145
  * See also:
146
+ * * [pipe](/docs/pipe)
147
+ * * [compose](/docs/compose)
108
148
  * * [callProp](/docs/callProp)
109
149
  * * [differenceWith](/docs/differenceWith)
110
150
  *
111
151
  */
112
- const defaultsDeep = defaultCollection => function defaulting(value) {
113
- if (isArray(value) && isArray(defaultCollection)) {
114
- return arrayDefaultsDeepFromArray(value, defaultCollection)
115
- }
116
- if (value == null || defaultCollection == null) {
117
- return value
152
+ function defaultsDeep(...args) {
153
+ if (args.length == 1) {
154
+ return curry2(_defaultsDeep, __, args[0])
118
155
  }
119
- if (value.constructor == Object && defaultCollection.constructor == Object) {
120
- return objectDefaultsDeepFromObject(value, defaultCollection)
156
+ if (args.length == 2) {
157
+ return _defaultsDeep(...args)
121
158
  }
122
- return value
159
+ throw new TypeError('Invalid number of arguments')
123
160
  }
124
161
 
125
162
  module.exports = defaultsDeep
@@ -2,6 +2,29 @@ const assert = require('assert')
2
2
  const defaultsDeep = require('./defaultsDeep')
3
3
 
4
4
  describe('defaultsDeep', () => {
5
+ it('eager API', async () => {
6
+ assert.deepEqual(
7
+ defaultsDeep([3], [1, 2, 3]),
8
+ [3, 2, 3],
9
+ )
10
+ assert.deepEqual(
11
+ defaultsDeep([[]], [[1], 2, 3]),
12
+ [[1], 2, 3],
13
+ )
14
+ })
15
+
16
+ it('Invalid number of arguments', async () => {
17
+ assert.throws(
18
+ () => defaultsDeep(),
19
+ new TypeError('Invalid number of arguments'),
20
+ )
21
+
22
+ assert.throws(
23
+ () => defaultsDeep(1, 2, 3),
24
+ new TypeError('Invalid number of arguments'),
25
+ )
26
+ })
27
+
5
28
  it('default array', async () => {
6
29
  assert.deepEqual(
7
30
  defaultsDeep([1, 2, 3])([3]),
@@ -97,7 +120,7 @@ describe('defaultsDeep', () => {
97
120
  { obj: { a: '1' } },
98
121
  )
99
122
  })
100
- it('nullish default item should use current item', async () => {
123
+ it('nullish default element should use current element', async () => {
101
124
  assert.deepEqual(
102
125
  defaultsDeep([null, 1, 2, 3, 4])([0, 1, 2]),
103
126
  [0, 1, 2, 3, 4],