rubico 2.7.2 → 2.7.4

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 (495) hide show
  1. package/README.md +14 -17
  2. package/Transducer.d.ts +10 -10
  3. package/Transducer.js +65 -69
  4. package/__.js +1 -1
  5. package/_internal/FlatMappingIterator.js +1 -1
  6. package/_internal/MappingIterator.d.ts +1 -1
  7. package/_internal/MappingIterator.js +1 -1
  8. package/_internal/arrayFilter.js +6 -6
  9. package/_internal/arrayFilterIndexes.js +7 -7
  10. package/_internal/arrayFilterWithIndex.js +6 -6
  11. package/_internal/arrayFind.js +7 -7
  12. package/_internal/arrayFlatten.js +25 -25
  13. package/_internal/arrayForEach.d.ts +1 -1
  14. package/_internal/arrayForEach.js +1 -1
  15. package/_internal/arrayForEachSeries.js +1 -1
  16. package/_internal/arrayMap.d.ts +2 -2
  17. package/_internal/arrayMap.js +5 -5
  18. package/_internal/arrayMapPool.d.ts +1 -1
  19. package/_internal/arrayMapPool.js +10 -10
  20. package/_internal/arrayMapRate.js +4 -4
  21. package/_internal/arrayMapSeries.d.ts +1 -1
  22. package/_internal/arrayMapSeries.js +8 -8
  23. package/_internal/arrayMapWithIndex.js +4 -4
  24. package/_internal/arrayReduce.js +1 -1
  25. package/_internal/asyncGeneratorFunctionForEach.js +3 -3
  26. package/_internal/asyncGeneratorFunctionMap.js +3 -3
  27. package/_internal/asyncIteratorFind.js +3 -3
  28. package/_internal/asyncIteratorForEach.d.ts +1 -1
  29. package/_internal/asyncIteratorForEach.js +3 -3
  30. package/_internal/asyncIteratorForEachSeries.js +3 -3
  31. package/_internal/asyncIteratorToArray.js +2 -2
  32. package/_internal/copyDeep.js +12 -12
  33. package/_internal/funcAll.js +3 -3
  34. package/_internal/funcAllSeries.js +6 -6
  35. package/_internal/funcObjectAll.js +4 -4
  36. package/_internal/functionArrayAll.js +3 -3
  37. package/_internal/functionArrayAllSeries.js +6 -6
  38. package/_internal/functionObjectAll.js +4 -4
  39. package/_internal/generatorFunctionForEach.js +3 -3
  40. package/_internal/generatorFunctionMap.js +3 -3
  41. package/_internal/generatorFunctionReduce.js +1 -1
  42. package/_internal/iteratorEvery.js +2 -2
  43. package/_internal/iteratorFind.js +7 -7
  44. package/_internal/iteratorForEach.d.ts +1 -1
  45. package/_internal/iteratorForEach.js +3 -3
  46. package/_internal/iteratorForEachSeries.js +1 -1
  47. package/_internal/iteratorReduce.d.ts +1 -1
  48. package/_internal/iteratorReduce.js +2 -2
  49. package/_internal/iteratorSome.js +2 -2
  50. package/_internal/mapFilter.js +4 -4
  51. package/_internal/mapMap.d.ts +1 -1
  52. package/_internal/mapMap.js +6 -6
  53. package/_internal/mapMapPool.js +10 -10
  54. package/_internal/mapMapSeries.js +10 -10
  55. package/_internal/objectFilter.js +6 -6
  56. package/_internal/objectFlatMap.d.ts +1 -1
  57. package/_internal/objectFlatMap.js +1 -1
  58. package/_internal/objectFlatten.js +14 -14
  59. package/_internal/objectMap.js +3 -3
  60. package/_internal/objectMapOwn.js +3 -3
  61. package/_internal/objectMapPool.js +10 -10
  62. package/_internal/objectMapSeries.js +9 -9
  63. package/_internal/objectReduce.d.ts +1 -1
  64. package/_internal/objectReduce.js +2 -2
  65. package/_internal/reducerAllSync.d.ts +2 -2
  66. package/_internal/reducerAllSync.js +2 -2
  67. package/_internal/reducerAnySync.d.ts +1 -1
  68. package/_internal/reducerAnySync.js +2 -2
  69. package/_internal/reducerConcat.d.ts +1 -1
  70. package/_internal/reducerConcat.js +4 -4
  71. package/_internal/reducerConcatSync.js +2 -2
  72. package/_internal/reducerEvery.d.ts +2 -2
  73. package/_internal/reducerEvery.js +4 -4
  74. package/_internal/reducerFilter.d.ts +2 -2
  75. package/_internal/reducerFilter.js +5 -5
  76. package/_internal/reducerFlatten.js +3 -3
  77. package/_internal/reducerForEach.d.ts +2 -2
  78. package/_internal/reducerForEach.js +5 -5
  79. package/_internal/reducerMap.d.ts +1 -1
  80. package/_internal/reducerMap.js +5 -5
  81. package/_internal/reducerSome.d.ts +2 -2
  82. package/_internal/reducerSome.js +4 -4
  83. package/_internal/reducerTryCatch.d.ts +2 -2
  84. package/_internal/reducerTryCatch.js +8 -8
  85. package/_internal/setFilter.d.ts +1 -1
  86. package/_internal/setFilter.js +5 -5
  87. package/_internal/setFlatten.js +24 -24
  88. package/_internal/setMap.d.ts +1 -1
  89. package/_internal/setMap.js +6 -6
  90. package/_internal/setMapPool.js +9 -9
  91. package/_internal/setMapSeries.js +10 -10
  92. package/_internal/streamFlatExtend.js +25 -25
  93. package/_internal/streamFlatMap.js +2 -2
  94. package/all.js +29 -30
  95. package/and.js +27 -13
  96. package/assign.js +15 -23
  97. package/compose.js +7 -5
  98. package/curry.js +5 -12
  99. package/dist/Transducer.es.js +24 -24
  100. package/dist/Transducer.es.min.js +1 -1
  101. package/dist/Transducer.js +24 -24
  102. package/dist/Transducer.min.js +1 -1
  103. package/dist/Transducer.mjs +24 -24
  104. package/dist/__.es.js +1 -1
  105. package/dist/__.es.min.js +1 -1
  106. package/dist/__.js +1 -1
  107. package/dist/__.min.js +1 -1
  108. package/dist/__.mjs +1 -1
  109. package/dist/all.es.js +14 -14
  110. package/dist/all.es.min.js +1 -1
  111. package/dist/all.js +14 -14
  112. package/dist/all.min.js +1 -1
  113. package/dist/all.mjs +14 -14
  114. package/dist/always.es.js +1 -1
  115. package/dist/always.es.min.js +1 -1
  116. package/dist/always.js +1 -1
  117. package/dist/always.min.js +1 -1
  118. package/dist/always.mjs +1 -1
  119. package/dist/and.es.js +1 -1
  120. package/dist/and.es.min.js +1 -1
  121. package/dist/and.js +1 -1
  122. package/dist/and.min.js +1 -1
  123. package/dist/and.mjs +1 -1
  124. package/dist/assign.es.js +5 -5
  125. package/dist/assign.es.min.js +1 -1
  126. package/dist/assign.js +5 -5
  127. package/dist/assign.min.js +1 -1
  128. package/dist/assign.mjs +5 -5
  129. package/dist/compose.es.js +1 -1
  130. package/dist/compose.es.min.js +1 -1
  131. package/dist/compose.js +1 -1
  132. package/dist/compose.min.js +1 -1
  133. package/dist/compose.mjs +1 -1
  134. package/dist/curry.es.js +1 -1
  135. package/dist/curry.es.min.js +1 -1
  136. package/dist/curry.js +1 -1
  137. package/dist/curry.min.js +1 -1
  138. package/dist/curry.mjs +1 -1
  139. package/dist/eq.es.js +1 -1
  140. package/dist/eq.es.min.js +1 -1
  141. package/dist/eq.js +1 -1
  142. package/dist/eq.min.js +1 -1
  143. package/dist/eq.mjs +1 -1
  144. package/dist/every.es.js +7 -7
  145. package/dist/every.es.min.js +1 -1
  146. package/dist/every.js +7 -7
  147. package/dist/every.min.js +1 -1
  148. package/dist/every.mjs +7 -7
  149. package/dist/filter.es.js +21 -21
  150. package/dist/filter.es.min.js +1 -1
  151. package/dist/filter.js +21 -21
  152. package/dist/filter.min.js +1 -1
  153. package/dist/filter.mjs +21 -21
  154. package/dist/flatMap.es.js +82 -82
  155. package/dist/flatMap.es.min.js +1 -1
  156. package/dist/flatMap.js +82 -82
  157. package/dist/flatMap.min.js +1 -1
  158. package/dist/flatMap.mjs +82 -82
  159. package/dist/forEach.es.js +7 -7
  160. package/dist/forEach.es.min.js +1 -1
  161. package/dist/forEach.js +7 -7
  162. package/dist/forEach.min.js +1 -1
  163. package/dist/forEach.mjs +7 -7
  164. package/dist/get.es.js +1 -1
  165. package/dist/get.es.min.js +1 -1
  166. package/dist/get.js +1 -1
  167. package/dist/get.min.js +1 -1
  168. package/dist/get.mjs +1 -1
  169. package/dist/gt.es.js +1 -1
  170. package/dist/gt.es.min.js +1 -1
  171. package/dist/gt.js +1 -1
  172. package/dist/gt.min.js +1 -1
  173. package/dist/gt.mjs +1 -1
  174. package/dist/gte.es.js +1 -1
  175. package/dist/gte.es.min.js +1 -1
  176. package/dist/gte.js +1 -1
  177. package/dist/gte.min.js +1 -1
  178. package/dist/gte.mjs +1 -1
  179. package/dist/lt.es.js +1 -1
  180. package/dist/lt.es.min.js +1 -1
  181. package/dist/lt.js +1 -1
  182. package/dist/lt.min.js +1 -1
  183. package/dist/lt.mjs +1 -1
  184. package/dist/lte.es.js +1 -1
  185. package/dist/lte.es.min.js +1 -1
  186. package/dist/lte.js +1 -1
  187. package/dist/lte.min.js +1 -1
  188. package/dist/lte.mjs +1 -1
  189. package/dist/map.es.js +83 -83
  190. package/dist/map.es.min.js +1 -1
  191. package/dist/map.js +83 -83
  192. package/dist/map.min.js +1 -1
  193. package/dist/map.mjs +83 -83
  194. package/dist/not.es.js +4 -2
  195. package/dist/not.es.min.js +2 -2
  196. package/dist/not.js +4 -2
  197. package/dist/not.min.js +2 -2
  198. package/dist/not.mjs +4 -2
  199. package/dist/omit.es.js +13 -13
  200. package/dist/omit.es.min.js +1 -1
  201. package/dist/omit.js +13 -13
  202. package/dist/omit.min.js +1 -1
  203. package/dist/omit.mjs +13 -13
  204. package/dist/or.es.js +1 -1
  205. package/dist/or.es.min.js +1 -1
  206. package/dist/or.js +1 -1
  207. package/dist/or.min.js +1 -1
  208. package/dist/or.mjs +1 -1
  209. package/dist/pick.es.js +1 -1
  210. package/dist/pick.es.min.js +1 -1
  211. package/dist/pick.js +1 -1
  212. package/dist/pick.min.js +1 -1
  213. package/dist/pick.mjs +1 -1
  214. package/dist/pipe.es.js +1 -1
  215. package/dist/pipe.es.min.js +1 -1
  216. package/dist/pipe.js +1 -1
  217. package/dist/pipe.min.js +1 -1
  218. package/dist/pipe.mjs +1 -1
  219. package/dist/reduce.es.js +5 -5
  220. package/dist/reduce.es.min.js +1 -1
  221. package/dist/reduce.js +5 -5
  222. package/dist/reduce.min.js +1 -1
  223. package/dist/reduce.mjs +5 -5
  224. package/dist/rubico.es.js +218 -216
  225. package/dist/rubico.es.min.js +2 -2
  226. package/dist/rubico.global.js +218 -216
  227. package/dist/rubico.global.min.js +2 -2
  228. package/dist/rubico.js +218 -216
  229. package/dist/rubico.min.js +2 -2
  230. package/dist/rubico.mjs +218 -216
  231. package/dist/set.es.js +1 -1
  232. package/dist/set.es.min.js +1 -1
  233. package/dist/set.js +1 -1
  234. package/dist/set.min.js +1 -1
  235. package/dist/set.mjs +1 -1
  236. package/dist/some.es.js +8 -8
  237. package/dist/some.es.min.js +1 -1
  238. package/dist/some.js +8 -8
  239. package/dist/some.min.js +1 -1
  240. package/dist/some.mjs +8 -8
  241. package/dist/switchCase.es.js +1 -1
  242. package/dist/switchCase.es.min.js +1 -1
  243. package/dist/switchCase.js +1 -1
  244. package/dist/switchCase.min.js +1 -1
  245. package/dist/switchCase.mjs +1 -1
  246. package/dist/tap.es.js +1 -1
  247. package/dist/tap.es.min.js +1 -1
  248. package/dist/tap.js +1 -1
  249. package/dist/tap.min.js +1 -1
  250. package/dist/tap.mjs +1 -1
  251. package/dist/thunkify.es.js +1 -1
  252. package/dist/thunkify.es.min.js +1 -1
  253. package/dist/thunkify.js +1 -1
  254. package/dist/thunkify.min.js +1 -1
  255. package/dist/thunkify.mjs +1 -1
  256. package/dist/transform.es.js +5 -5
  257. package/dist/transform.es.min.js +1 -1
  258. package/dist/transform.js +5 -5
  259. package/dist/transform.min.js +1 -1
  260. package/dist/transform.mjs +5 -5
  261. package/dist/tryCatch.es.js +1 -1
  262. package/dist/tryCatch.es.min.js +1 -1
  263. package/dist/tryCatch.js +1 -1
  264. package/dist/tryCatch.min.js +1 -1
  265. package/dist/tryCatch.mjs +1 -1
  266. package/dist/x/append.es.js +8 -8
  267. package/dist/x/append.es.min.js +1 -1
  268. package/dist/x/append.js +8 -8
  269. package/dist/x/append.min.js +1 -1
  270. package/dist/x/append.mjs +8 -8
  271. package/dist/x/callProp.es.js +1 -1
  272. package/dist/x/callProp.es.min.js +1 -1
  273. package/dist/x/callProp.js +1 -1
  274. package/dist/x/callProp.min.js +1 -1
  275. package/dist/x/callProp.mjs +1 -1
  276. package/dist/x/defaultsDeep.es.js +69 -37
  277. package/dist/x/defaultsDeep.es.min.js +2 -2
  278. package/dist/x/defaultsDeep.js +69 -37
  279. package/dist/x/defaultsDeep.min.js +2 -2
  280. package/dist/x/defaultsDeep.mjs +69 -37
  281. package/dist/x/differenceWith.es.js +14 -14
  282. package/dist/x/differenceWith.es.min.js +1 -1
  283. package/dist/x/differenceWith.js +14 -14
  284. package/dist/x/differenceWith.min.js +1 -1
  285. package/dist/x/differenceWith.mjs +14 -14
  286. package/dist/x/filterOut.es.js +24 -22
  287. package/dist/x/filterOut.es.min.js +2 -2
  288. package/dist/x/filterOut.js +24 -22
  289. package/dist/x/filterOut.min.js +2 -2
  290. package/dist/x/filterOut.mjs +24 -22
  291. package/dist/x/find.es.js +18 -18
  292. package/dist/x/find.es.min.js +1 -1
  293. package/dist/x/find.js +18 -18
  294. package/dist/x/find.min.js +1 -1
  295. package/dist/x/find.mjs +18 -18
  296. package/dist/x/findIndex.es.js +1 -1
  297. package/dist/x/findIndex.es.min.js +1 -1
  298. package/dist/x/findIndex.js +1 -1
  299. package/dist/x/findIndex.min.js +1 -1
  300. package/dist/x/findIndex.mjs +1 -1
  301. package/dist/x/first.es.js +1 -1
  302. package/dist/x/first.es.min.js +1 -1
  303. package/dist/x/first.js +1 -1
  304. package/dist/x/first.min.js +1 -1
  305. package/dist/x/first.mjs +1 -1
  306. package/dist/x/flatten.es.js +82 -82
  307. package/dist/x/flatten.es.min.js +1 -1
  308. package/dist/x/flatten.js +82 -82
  309. package/dist/x/flatten.min.js +1 -1
  310. package/dist/x/flatten.mjs +82 -82
  311. package/dist/x/groupBy.es.js +17 -17
  312. package/dist/x/groupBy.es.min.js +1 -1
  313. package/dist/x/groupBy.js +17 -17
  314. package/dist/x/groupBy.min.js +1 -1
  315. package/dist/x/groupBy.mjs +17 -17
  316. package/dist/x/has.es.js +1 -1
  317. package/dist/x/has.es.min.js +1 -1
  318. package/dist/x/has.js +1 -1
  319. package/dist/x/has.min.js +1 -1
  320. package/dist/x/has.mjs +1 -1
  321. package/dist/x/identity.es.js +1 -1
  322. package/dist/x/identity.es.min.js +1 -1
  323. package/dist/x/identity.js +1 -1
  324. package/dist/x/identity.min.js +1 -1
  325. package/dist/x/identity.mjs +1 -1
  326. package/dist/x/includes.es.js +1 -1
  327. package/dist/x/includes.es.min.js +1 -1
  328. package/dist/x/includes.js +1 -1
  329. package/dist/x/includes.min.js +1 -1
  330. package/dist/x/includes.mjs +1 -1
  331. package/dist/x/isDeepEqual.es.js +1 -1
  332. package/dist/x/isDeepEqual.es.min.js +1 -1
  333. package/dist/x/isDeepEqual.js +1 -1
  334. package/dist/x/isDeepEqual.min.js +1 -1
  335. package/dist/x/isDeepEqual.mjs +1 -1
  336. package/dist/x/isEmpty.es.js +1 -1
  337. package/dist/x/isEmpty.es.min.js +1 -1
  338. package/dist/x/isEmpty.js +1 -1
  339. package/dist/x/isEmpty.min.js +1 -1
  340. package/dist/x/isEmpty.mjs +1 -1
  341. package/dist/x/isEqual.es.js +1 -1
  342. package/dist/x/isEqual.es.min.js +1 -1
  343. package/dist/x/isEqual.js +1 -1
  344. package/dist/x/isEqual.min.js +1 -1
  345. package/dist/x/isEqual.mjs +1 -1
  346. package/dist/x/isFunction.es.js +1 -1
  347. package/dist/x/isFunction.es.min.js +1 -1
  348. package/dist/x/isFunction.js +1 -1
  349. package/dist/x/isFunction.min.js +1 -1
  350. package/dist/x/isFunction.mjs +1 -1
  351. package/dist/x/isIn.es.js +1 -1
  352. package/dist/x/isIn.es.min.js +1 -1
  353. package/dist/x/isIn.js +1 -1
  354. package/dist/x/isIn.min.js +1 -1
  355. package/dist/x/isIn.mjs +1 -1
  356. package/dist/x/isObject.es.js +1 -1
  357. package/dist/x/isObject.es.min.js +1 -1
  358. package/dist/x/isObject.js +1 -1
  359. package/dist/x/isObject.min.js +1 -1
  360. package/dist/x/isObject.mjs +1 -1
  361. package/dist/x/isString.es.js +1 -1
  362. package/dist/x/isString.es.min.js +1 -1
  363. package/dist/x/isString.js +1 -1
  364. package/dist/x/isString.min.js +1 -1
  365. package/dist/x/isString.mjs +1 -1
  366. package/dist/x/keys.es.js +1 -1
  367. package/dist/x/keys.es.min.js +1 -1
  368. package/dist/x/keys.js +1 -1
  369. package/dist/x/keys.min.js +1 -1
  370. package/dist/x/keys.mjs +1 -1
  371. package/dist/x/last.es.js +1 -1
  372. package/dist/x/last.es.min.js +1 -1
  373. package/dist/x/last.js +1 -1
  374. package/dist/x/last.min.js +1 -1
  375. package/dist/x/last.mjs +1 -1
  376. package/dist/x/maxBy.es.js +6 -6
  377. package/dist/x/maxBy.es.min.js +1 -1
  378. package/dist/x/maxBy.js +6 -6
  379. package/dist/x/maxBy.min.js +1 -1
  380. package/dist/x/maxBy.mjs +6 -6
  381. package/dist/x/noop.es.js +1 -1
  382. package/dist/x/noop.es.min.js +1 -1
  383. package/dist/x/noop.js +1 -1
  384. package/dist/x/noop.min.js +1 -1
  385. package/dist/x/noop.mjs +1 -1
  386. package/dist/x/pluck.es.js +83 -83
  387. package/dist/x/pluck.es.min.js +1 -1
  388. package/dist/x/pluck.js +83 -83
  389. package/dist/x/pluck.min.js +1 -1
  390. package/dist/x/pluck.mjs +83 -83
  391. package/dist/x/prepend.es.js +8 -8
  392. package/dist/x/prepend.es.min.js +1 -1
  393. package/dist/x/prepend.js +8 -8
  394. package/dist/x/prepend.min.js +1 -1
  395. package/dist/x/prepend.mjs +8 -8
  396. package/dist/x/size.es.js +1 -1
  397. package/dist/x/size.es.min.js +1 -1
  398. package/dist/x/size.js +1 -1
  399. package/dist/x/size.min.js +1 -1
  400. package/dist/x/size.mjs +1 -1
  401. package/dist/x/trace.es.js +1 -1
  402. package/dist/x/trace.es.min.js +1 -1
  403. package/dist/x/trace.js +1 -1
  404. package/dist/x/trace.min.js +1 -1
  405. package/dist/x/trace.mjs +1 -1
  406. package/dist/x/unionWith.es.js +39 -39
  407. package/dist/x/unionWith.es.min.js +1 -1
  408. package/dist/x/unionWith.js +39 -39
  409. package/dist/x/unionWith.min.js +1 -1
  410. package/dist/x/unionWith.mjs +39 -39
  411. package/dist/x/uniq.es.js +1 -1
  412. package/dist/x/uniq.es.min.js +1 -1
  413. package/dist/x/uniq.js +1 -1
  414. package/dist/x/uniq.min.js +1 -1
  415. package/dist/x/uniq.mjs +1 -1
  416. package/dist/x/unless.es.js +1 -1
  417. package/dist/x/unless.es.min.js +1 -1
  418. package/dist/x/unless.js +1 -1
  419. package/dist/x/unless.min.js +1 -1
  420. package/dist/x/unless.mjs +1 -1
  421. package/dist/x/values.es.js +1 -1
  422. package/dist/x/values.es.min.js +1 -1
  423. package/dist/x/values.js +1 -1
  424. package/dist/x/values.min.js +1 -1
  425. package/dist/x/values.mjs +1 -1
  426. package/dist/x/when.es.js +1 -1
  427. package/dist/x/when.es.min.js +1 -1
  428. package/dist/x/when.js +1 -1
  429. package/dist/x/when.min.js +1 -1
  430. package/dist/x/when.mjs +1 -1
  431. package/eq.js +32 -10
  432. package/es.js +218 -216
  433. package/every.d.ts +1 -1
  434. package/every.js +5 -3
  435. package/filter.d.ts +3 -3
  436. package/filter.js +15 -15
  437. package/flatMap.d.ts +9 -9
  438. package/flatMap.js +13 -11
  439. package/forEach.d.ts +1 -1
  440. package/forEach.js +19 -15
  441. package/gt.js +30 -13
  442. package/gte.js +31 -12
  443. package/index.js +218 -216
  444. package/lt.js +28 -9
  445. package/lte.js +34 -15
  446. package/map.d.ts +3 -3
  447. package/map.js +32 -32
  448. package/monad/Mux.benchmark.js +1 -1
  449. package/monad/Mux.js +6 -6
  450. package/monad/Struct.js +2 -2
  451. package/not.js +23 -8
  452. package/omit.js +2 -3
  453. package/or.js +30 -14
  454. package/package.json +1 -1
  455. package/pick.js +2 -3
  456. package/pipe.js +7 -15
  457. package/reduce.d.ts +7 -7
  458. package/reduce.js +19 -24
  459. package/some.d.ts +1 -1
  460. package/some.js +5 -3
  461. package/switchCase.d.ts +1 -1
  462. package/switchCase.js +13 -12
  463. package/tap.js +20 -4
  464. package/thunkify.js +2 -0
  465. package/transform.d.ts +1 -1
  466. package/transform.js +9 -23
  467. package/tryCatch.js +41 -8
  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
package/README.md CHANGED
@@ -26,7 +26,9 @@ pipe(numbers, [
26
26
  ```
27
27
 
28
28
  # Installation
29
- [Core build](https://unpkg.com/rubico/index.js) ([~9.8 kB minified and gzipped](https://unpkg.com/rubico/dist/rubico.min.js))
29
+ [Core build](https://unpkg.com/rubico/index.js) ([~7.7 kB minified and gzipped](https://unpkg.com/rubico/dist/rubico.min.js))
30
+
31
+ [Transducer module](https://unpkg.com/rubico/dist/Transducer.js) ([~1.5kb minified and gzipped](https://unpkg.com/rubico/dist/Transducer.min.js))
30
32
 
31
33
  with `npm`
32
34
  ```bash
@@ -86,7 +88,7 @@ When you import this library, you obtain the freedom that comes from having thos
86
88
 
87
89
  # Introduction
88
90
 
89
- rubico is a library for async-enabled functional programming in JavaScript. The library supports a simple and composable functional style in asynchronous environments.
91
+ rubico is a library for [A]synchronous Functional Programming in JavaScript. The library supports a simple and composable functional style in asynchronous environments.
90
92
 
91
93
  ```javascript
92
94
  const {
@@ -119,7 +121,7 @@ const {
119
121
  } = rubico
120
122
  ```
121
123
 
122
- With async-enabled, or [a]synchronous, functional programming, functions provided to the rubico operators may be asynchronous and return a Promise. Any promises in argument position are also resolved before continuing with the operation.
124
+ With [A]synchronous Functional Programming, any function may be asynchronous and return a promise. All promises are resolved for their values before continuing with the operation.
123
125
 
124
126
  ```javascript [playground]
125
127
  const helloPromise = Promise.resolve('hello')
@@ -133,7 +135,7 @@ pipe(helloPromise, [ // helloPromise is resolved for 'hello'
133
135
  ])
134
136
  ```
135
137
 
136
- All rubico operators support both an eager and a lazy API. The eager API takes all required arguments and executes at once, while its lazy API takes only the non-data arguments and executes lazily, returning a function that expects the data arguments. This dual API supports a natural and composable code style.
138
+ All rubico operators support both eager and lazy APIs. The eager API takes all required arguments and executes at once, while the lazy API takes only the setup arguments and returns a function that executes later. This dual API supports a natural and composable code style.
137
139
 
138
140
  ```javascript [playground]
139
141
  const myObj = { a: 1, b: 2, c: 3 }
@@ -203,7 +205,7 @@ pipe(todoIDs, [
203
205
  ])
204
206
  ```
205
207
 
206
- rubico offers transducers in its `Transducer` module. You can consume these transducers with the `transform` and `compose` operators. You should use `compose` over `pipe` to chain a left-to-right composition of transducers.
208
+ rubico offers transducers through its `Transducer` module. You can consume these transducers with rubico's `transform` and `compose` operators. You can use `compose` to chain a left-to-right composition of transducers.
207
209
 
208
210
  ```javascript [playground]
209
211
  const isOdd = number => number % 2 == 1
@@ -219,18 +221,18 @@ const generateNumbers = function* () {
219
221
  }
220
222
 
221
223
  pipe(generateNumbers(), [
222
- transform(compose([
224
+ transform(compose(
223
225
  Transducer.filter(isOdd),
224
226
  Transducer.map(asyncSquare),
225
- ]), []),
227
+ ), []),
226
228
  console.log, // [1, 9, 25]
227
229
  ])
228
230
  ```
229
231
 
230
- For advanced asynchronous use cases, some of the operators have property functions that have different asynchronous behavior, e.g.
231
- * `map` - apply a mapper function concurrently
232
- * `map.pool` - apply a mapper function concurrently with a concurrency limit
233
- * `map.series` - apply a mapper function serially
232
+ For advanced asynchronous use cases, some of the rubico operators have property functions that have various asynchronous behavior, e.g.
233
+ * `map` - applies a mapper function concurrently
234
+ * `map.pool` - applies a mapper function concurrently with a concurrency limit
235
+ * `map.series` - applies a mapper function serially
234
236
 
235
237
  For more functions beyond the core operators, please visit `rubico/x`. You can find the full documentation at [rubico.land/docs](https://rubico.land/docs).
236
238
 
@@ -241,7 +243,7 @@ npm run bench
241
243
  ```
242
244
 
243
245
  # Contributing
244
- Your feedback and contributions are welcome. If you have a suggestion, please raise an issue. Prior to that, please search through the issues first in case your suggestion has been made already. If you decide to work on an issue, or feel like taking initiative and contributing anything at all, feel free to create a pull request and I will get back to you shortly.
246
+ Your feedback and contributions are welcome. If you have a suggestion, please raise an issue. Prior to that, please search through the issues first in case your suggestion has been made already. If you decide to work on an issue, please create a pull request.
245
247
 
246
248
  Pull requests should provide some basic context and link the relevant issue. Here is an [example pull request](https://github.com/a-synchronous/rubico/pull/12). If you are interested in contributing, the [help wanted](https://github.com/a-synchronous/rubico/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) tag is a good place to start.
247
249
 
@@ -260,11 +262,6 @@ rubico is [MIT Licensed](https://github.com/a-synchronous/rubico/blob/master/LIC
260
262
  # Awesome Resources
261
263
  [rubico simplifies asynchronous code](https://dev.to/richytong/rubico-a-synchrnous-functional-syntax-motivation-20hf)
262
264
  <br>
263
- [Practical Functional Programming in JavaScript - Side Effects and Purity](https://dev.to/richytong/practical-functional-programming-in-javascript-side-effects-and-purity-revised-420h)
264
- <br>
265
- [Practical Functional Programming in JavaScript - Techniques for Composing Data](https://dev.to/richytong/practical-functional-programming-in-javascript-techniques-for-composing-data-c39)
266
- <br>
267
- [Practical Functional Programming in JavaScript - Error Handling](https://dev.to/richytong/practical-functional-programming-in-javascript-error-handling-8g5)
268
265
 
269
266
  # Blog
270
267
  Check out the rubico blog at [https://rubico.land/blog](https://rubico.land/blog)
package/Transducer.d.ts CHANGED
@@ -16,12 +16,12 @@
16
16
  * ```
17
17
  *
18
18
  * @description
19
- * Creates a mapping transducer. Items in the final reducing operation are transformed by the mapper function. It is possible to use an asynchronous mapper, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
19
+ * Creates a mapping transducer. Elements in the final reducing operation are transformed by the mapper function. It is possible to use an asynchronous mapper, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
20
20
  *
21
21
  * ```javascript [playground]
22
22
  * const square = number => number ** 2
23
23
  *
24
- * const concat = (array, item) => array.concat(item)
24
+ * const concat = (array, element) => array.concat(element)
25
25
  *
26
26
  * const mapSquare = Transducer.map(square)
27
27
  * // mapSquare is a transducer
@@ -66,12 +66,12 @@ export function map(mapper: any): (arg0: any) => any;
66
66
  * ```
67
67
  *
68
68
  * @description
69
- * Creates a filtering transducer. A filtering reducer skips items of reducing operation if they test falsy by the predicate. It is possible to use an asynchronous predicate, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
69
+ * Creates a filtering transducer. A filtering reducer skips elements of reducing operation if they test falsy by the predicate. It is possible to use an asynchronous predicate, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
70
70
  *
71
71
  * ```javascript [playground]
72
72
  * const isOdd = number => number % 2 == 1
73
73
  *
74
- * const concat = (array, item) => array.concat(item)
74
+ * const concat = (array, element) => array.concat(element)
75
75
  *
76
76
  * const concatOddNumbers = filter(isOdd)(concat)
77
77
  *
@@ -99,7 +99,7 @@ export function filter(predicate: any): (arg0: any) => any;
99
99
  * ```
100
100
  *
101
101
  * @description
102
- * Creates a flatMapping transducer. A flatMapping transducer applies the flatMapping function to each item of the reducing operation, concatenating the results of the flatMapper execution into the final result. It is possible to use an asynchronous flatMapper, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
102
+ * Creates a flatMapping transducer. A flatMapping transducer applies the flatMapping function to each element of the reducing operation, concatenating the results of the flatMapper execution into the final result. It is possible to use an asynchronous flatMapper, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
103
103
  *
104
104
  * ```javascript [playground]
105
105
  * const powers = number => [number, number ** 2, number ** 3]
@@ -132,7 +132,7 @@ export function flatMap(flatMapper: any): (arg0: any) => any;
132
132
  * ```
133
133
  *
134
134
  * @description
135
- * Creates an effectful pasthrough transducer. The effectful passthrough transducer applies the effectful function to each item of the reducing operation, leaving the reducing operation unchanged. It is possible to use an asynchronous effectful function, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
135
+ * Creates an effectful pasthrough transducer. The effectful passthrough transducer applies the effectful function to each element of the reducing operation, leaving the reducing operation unchanged. It is possible to use an asynchronous effectful function, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
136
136
  *
137
137
  * ```javascript [playground]
138
138
  * const numbers = [1, 2, 3, 4, 5]
@@ -161,7 +161,7 @@ export function forEach(func: any): (arg0: any) => any;
161
161
  * ```
162
162
  *
163
163
  * @description
164
- * Creates a pasthrough transducer. The passthrough transducer passes each item of the reducing operation through, leaving the reducing operation unchanged.
164
+ * Creates a pasthrough transducer. The passthrough transducer passes each element of the reducing operation through, leaving the reducing operation unchanged.
165
165
  *
166
166
  * ```javascript [playground]
167
167
  * const createAsyncNumbers = async function* () {
@@ -184,7 +184,7 @@ export function passthrough(reducer: any): any;
184
184
  * ```coffeescript [specscript]
185
185
  * type Reducer = (
186
186
  * accumulator any,
187
- * item any,
187
+ * element any,
188
188
  * indexOrKey? number|string,
189
189
  * collection? Foldable,
190
190
  * )=>(nextAccumulator Promise|any)
@@ -193,12 +193,12 @@ export function passthrough(reducer: any): any;
193
193
  *
194
194
  * Transducer.tryCatch(
195
195
  * transducerTryer Transducer,
196
- * catcher (error Error, item any)=>Promise|any,
196
+ * catcher (error Error, element any)=>Promise|any,
197
197
  * ) -> tryCatchTransducer Transducer
198
198
  * ```
199
199
  *
200
200
  * @description
201
- * Creates an error handling transducer. The error handling transducer wraps a transducer and catches any errors thrown by the transducer with the catcher function. The catcher function is provided the error as well as the original item (before any processing by the transducer) for which the error was thrown. It is possible for either the transducer or the catcher to be asynchronous, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
201
+ * Creates an error handling transducer. The error handling transducer wraps a transducer and catches any errors thrown by the transducer with the catcher function. The catcher function is provided the error as well as the original element (before any processing by the transducer) for which the error was thrown. It is possible for either the transducer or the catcher to be asynchronous, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
202
202
  *
203
203
  * ```javascript [playground]
204
204
  * const db = new Map()
package/Transducer.js CHANGED
@@ -21,23 +21,22 @@ const Transducer = {}
21
21
  *
22
22
  * @synopsis
23
23
  * ```coffeescript [specscript]
24
- * type Reducer = (
25
- * accumulator any,
26
- * value any,
27
- * )=>(nextAccumulator Promise|any)
24
+ * type SyncOrAsyncReducer = (accumulator any, value any)=>(nextAccumulator Promise|any)
25
+ * type Transducer = SyncOrAsyncReducer=>SyncOrAsyncReducer
26
+ * type UnarySyncOrAsyncMapper = (element any)=>(resultElement Promise|any)
28
27
  *
29
- * type Transducer = Reducer=>Reducer
28
+ * mapper UnarySyncOrAsyncMapper
30
29
  *
31
- * Transducer.map(mapperFunc function) -> mappingTransducer Transducer
30
+ * Transducer.map(mapper) -> mappingTransducer Transducer
32
31
  * ```
33
32
  *
34
33
  * @description
35
- * Creates a mapping transducer. Items in the final reducing operation are transformed by the mapper function. It is possible to use an asynchronous mapper, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
34
+ * Creates a mapping transducer. Elements of the transducer's reducing operation are transformed by the mapper function. It is possible to use an asynchronous mapper, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
36
35
  *
37
36
  * ```javascript [playground]
38
37
  * const square = number => number ** 2
39
38
  *
40
- * const concat = (array, item) => array.concat(item)
39
+ * const concat = (array, element) => array.concat(element)
41
40
  *
42
41
  * const mapSquare = Transducer.map(square)
43
42
  * // mapSquare is a transducer
@@ -81,29 +80,32 @@ Transducer.map = function transducerMap(mapper) {
81
80
  *
82
81
  * @synopsis
83
82
  * ```coffeescript [specscript]
84
- * type Reducer = (
85
- * accumulator any,
86
- * value any,
87
- * )=>(nextAccumulator Promise|any)
83
+ * type SyncOrAsyncReducer = (accumulator any, value any)=>(nextAccumulator Promise|any)
84
+ * type Transducer = SyncOrAsyncReducer=>SyncOrAsyncReducer
85
+ * type UnarySyncOrAsyncPredicate = any=>Promise|boolean|any
88
86
  *
89
- * type Transducer = Reducer=>Reducer
87
+ * predicate UnarySyncOrAsyncPredicate
90
88
  *
91
- * Transducer.filter(predicate function) -> filteringTransducer Transducer
89
+ * Transducer.filter(predicate) -> filteringTransducer Transducer
92
90
  * ```
93
91
  *
94
92
  * @description
95
- * Creates a filtering transducer. A filtering reducer skips items of reducing operation if they test falsy by the predicate. It is possible to use an asynchronous predicate, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
93
+ * Creates a filtering transducer. A filtering transducer filters out elements of its reducing operation if they test false by the predicate. It is possible to use an asynchronous predicate, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
96
94
  *
97
95
  * ```javascript [playground]
98
96
  * const isOdd = number => number % 2 == 1
99
97
  *
100
- * const concat = (array, item) => array.concat(item)
98
+ * const concat = (array, element) => array.concat(element)
101
99
  *
102
- * const concatOddNumbers = filter(isOdd)(concat)
100
+ * const concatOddNumbers = Transducer.filter(isOdd)(concat)
103
101
  *
104
- * console.log(
105
- * [1, 2, 3, 4, 5].reduce(concatOddNumbers, []),
106
- * ) // [1, 3, 5]
102
+ * const array = [1, 2, 3, 4, 5]
103
+ *
104
+ * const oddNumbers1 = array.reduce(concatOddNumbers, [])
105
+ * console.log(oddNumbers1) // [1, 3, 5]
106
+ *
107
+ * const oddNumbers2 = transform(array, Transducer.filter(isOdd), [])
108
+ * console.log(oddNumbers2) // [1, 3, 5]
107
109
  * ```
108
110
  *
109
111
  * Read more on [transducers](/blog/transducers-crash-course-rubico-v2).
@@ -126,18 +128,18 @@ Transducer.filter = function transducerFilter(predicate) {
126
128
  *
127
129
  * @synopsis
128
130
  * ```coffeescript [specscript]
129
- * type Reducer = (
130
- * accumulator any,
131
- * value any,
132
- * )=>(nextAccumulator Promise|any)
131
+ * type SyncOrAsyncReducer = (accumulator any, value any)=>(nextAccumulator Promise|any)
132
+ * type Transducer = SyncOrAsyncReducer=>SyncOrAsyncReducer
133
+ * type Monad = Array|String|Set|Generator|AsyncGenerator|{ flatMap: string }|{ chain: string }|Object
134
+ * type UnarySyncOrAsyncFlatMapper = (element any)=>(monad Promise|Monad|any)
133
135
  *
134
- * type Transducer = Reducer=>Reducer
136
+ * flatMapper UnarySyncOrAsyncFlatMapper
135
137
  *
136
138
  * Transducer.flatMap(flatMapper) -> flatMappingTransducer Transducer
137
139
  * ```
138
140
  *
139
141
  * @description
140
- * Creates a flatMapping transducer. A flatMapping transducer applies the flatMapping function to each item of the reducing operation, concatenating the results of the flatMapper execution into the final result. It is possible to use an asynchronous flatMapper, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
142
+ * Creates a flatMapping transducer. A flatMapping transducer applies the flatMapper function to each element of its reducing operation, concatenating the results of the flatMapper execution onto the accumulator. It is possible to use an asynchronous flatMapper, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
141
143
  *
142
144
  * ```javascript [playground]
143
145
  * const powers = number => [number, number ** 2, number ** 3]
@@ -169,25 +171,24 @@ Transducer.flatMap = function transducerFlatMap(flatMapper) {
169
171
  *
170
172
  * @synopsis
171
173
  * ```coffeescript [specscript]
172
- * type Reducer = (
173
- * accumulator any,
174
- * value any,
175
- * )=>(nextAccumulator Promise|any)
174
+ * type SyncOrAsyncReducer = (accumulator any, value any)=>(nextAccumulator Promise|any)
175
+ * type Transducer = SyncOrAsyncReducer=>SyncOrAsyncReducer
176
+ * type UnarySyncOrAsyncCallback = (element any)=>Promise|undefined
176
177
  *
177
- * type Transducer = Reducer=>Reducer
178
+ * callback UnarySyncOrAsyncCallback
178
179
  *
179
- * Transducer.forEach(func function) -> forEachTransducer Transducer
180
+ * Transducer.forEach(callback) -> forEachTransducer Transducer
180
181
  * ```
181
182
  *
182
183
  * @description
183
- * Creates an effectful pasthrough transducer. The effectful passthrough transducer applies the effectful function to each item of the reducing operation, leaving the reducing operation unchanged. It is possible to use an asynchronous effectful function, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
184
+ * Executes a callback function for each element of a reducing operation, leaving the reducing operation unmodified. It is possible to use an asynchronous callback function, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
184
185
  *
185
186
  * ```javascript [playground]
186
187
  * const numbers = [1, 2, 3, 4, 5]
187
- * transform(numbers, compose([
188
+ * transform(numbers, compose(
188
189
  * Transducer.map(number => number ** 2),
189
190
  * Transducer.forEach(console.log), // 1 4 9 16 25
190
- * ]), null)
191
+ * ), null)
191
192
  * ```
192
193
  *
193
194
  * Read more on [transducers](/blog/transducers-crash-course-rubico-v2).
@@ -210,18 +211,14 @@ Transducer.forEach = function transducerForEach(func) {
210
211
  *
211
212
  * @synopsis
212
213
  * ```coffeescript [specscript]
213
- * type Reducer = (
214
- * accumulator any,
215
- * value any,
216
- * )=>(nextAccumulator Promise|any)
214
+ * type SyncOrAsyncReducer = (accumulator any, value any)=>(nextAccumulator Promise|any)
215
+ * type Transducer = SyncOrAsyncReducer=>SyncOrAsyncReducer
217
216
  *
218
- * type Transducer = Reducer=>Reducer
219
- *
220
- * Transducer.passthrough(func function) -> passthroughTransducer Transducer
217
+ * Transducer.passthrough Transducer
221
218
  * ```
222
219
  *
223
220
  * @description
224
- * Creates a pasthrough transducer. The passthrough transducer passes each item of the reducing operation through, leaving the reducing operation unchanged.
221
+ * Creates a pasthrough transducer. The passthrough transducer simply passes each element of the reducing operation through to the next downstream operation, leaving the reducing operation unmodified.
225
222
  *
226
223
  * ```javascript [playground]
227
224
  * const createAsyncNumbers = async function* () {
@@ -256,21 +253,17 @@ Transducer.passthrough = function transducerPassthrough(reducer) {
256
253
  *
257
254
  * @synopsis
258
255
  * ```coffeescript [specscript]
259
- * type Reducer = (
260
- * accumulator any,
261
- * item any,
262
- * )=>(nextAccumulator Promise|any)
256
+ * type SyncOrAsyncReducer = (accumulator any, value any)=>(nextAccumulator Promise|any)
257
+ * type Transducer = SyncOrAsyncReducer=>SyncOrAsyncReducer
263
258
  *
264
- * type Transducer = Reducer=>Reducer
259
+ * transducerTryer Transducer
260
+ * catcher (error Error, element any)=>Promise|any
265
261
  *
266
- * Transducer.tryCatch(
267
- * transducerTryer Transducer,
268
- * catcher (error Error, item any)=>Promise|any,
269
- * ) -> tryCatchTransducer Transducer
262
+ * Transducer.tryCatch(transducerTryer, catcher) -> tryCatchTransducer Transducer
270
263
  * ```
271
264
  *
272
265
  * @description
273
- * Creates an error handling transducer. The error handling transducer wraps a transducer and catches any errors thrown by the transducer with the catcher function. The catcher function is provided the error as well as the original item (before any processing by the transducer) for which the error was thrown. It is possible for either the transducer or the catcher to be asynchronous, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
266
+ * Creates an error handling transducer. The error handling transducer wraps a transducer and catches any errors thrown by the transducer with the catcher function. The catcher function is provided the error as well as the element for which the error was thrown. It is possible for either the transducer or the catcher to be asynchronous, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
274
267
  *
275
268
  * ```javascript [playground]
276
269
  * const db = new Map()
@@ -281,22 +274,25 @@ Transducer.passthrough = function transducerPassthrough(reducer) {
281
274
  *
282
275
  * const userIds = ['a', 'b', 'c', 'd', 'e']
283
276
  *
284
- * transform(userIds, Transducer.tryCatch(compose([
285
- * Transducer.map(async userId => {
286
- * if (db.has(userId)) {
287
- * return db.get(userId)
288
- * }
289
- * throw new Error(`user ${userId} not found`)
290
- * }),
291
- *
292
- * Transducer.forEach(user => {
293
- * console.log('Found', user.name)
294
- * })
295
- * ]), (error, userId) => {
296
- * console.error(error)
297
- * console.log('userId in catcher:', userId)
298
- * // original userId for which the error was thrown is provided
299
- * }), null)
277
+ * transform(userIds, Transducer.tryCatch(
278
+ * compose(
279
+ * Transducer.map(async userId => {
280
+ * if (db.has(userId)) {
281
+ * return db.get(userId)
282
+ * }
283
+ * throw new Error(`user ${userId} not found`)
284
+ * }),
285
+ *
286
+ * Transducer.forEach(user => {
287
+ * console.log('Found', user.name)
288
+ * })
289
+ * ),
290
+ * (error, userId) => {
291
+ * console.error(error)
292
+ * console.log('userId in catcher:', userId)
293
+ * // original userId for which the error was thrown is provided
294
+ * }
295
+ * ), null)
300
296
  * ```
301
297
  *
302
298
  * Read more on [transducers](/blog/transducers-crash-course-rubico-v2).
package/__.js CHANGED
@@ -5,7 +5,7 @@ const __ = require('./_internal/placeholder')
5
5
  *
6
6
  * @synopsis
7
7
  * ```coffeescript [specscript]
8
- * __ Symbol
8
+ * __ Symbol(placeholder)
9
9
  * ```
10
10
  *
11
11
  * @description
@@ -33,7 +33,7 @@ const FlatMappingIterator = function (iterator, flatMapper) {
33
33
  const monadAsArray = genericReduce(
34
34
  flatMapper(iteration.value),
35
35
  arrayPush,
36
- []) // this will always have at least one item
36
+ []) // this will always have at least one element
37
37
  if (monadAsArray.length > 1) {
38
38
  buffer = monadAsArray
39
39
  bufferIndex = 1
@@ -14,7 +14,7 @@ export = MappingIterator;
14
14
  * ```
15
15
  *
16
16
  * @description
17
- * Creates a mapping iterator, i.e. an iterator that applies a mapper to each item of a source iterator.
17
+ * Creates a mapping iterator, i.e. an iterator that applies a mapper to each element of a source iterator.
18
18
  *
19
19
  * Note: consuming the mapping iterator also consumes the source iterator.
20
20
  */
@@ -15,7 +15,7 @@ const symbolIterator = require('./symbolIterator')
15
15
  * ```
16
16
  *
17
17
  * @description
18
- * Creates a mapping iterator, i.e. an iterator that applies a mapper to each item of a source iterator.
18
+ * Creates a mapping iterator, i.e. an iterator that applies a mapper to each element of a source iterator.
19
19
  *
20
20
  * Note: consuming the mapping iterator also consumes the source iterator.
21
21
  */
@@ -25,15 +25,15 @@ const arrayFilter = function (array, predicate) {
25
25
  let index = -1,
26
26
  resultIndex = -1
27
27
  while (++index < arrayLength) {
28
- const item = array[index],
29
- shouldIncludeItem = predicate(item, index, array)
30
- if (isPromise(shouldIncludeItem)) {
28
+ const element = array[index],
29
+ shouldIncludeElement = predicate(element, index, array)
30
+ if (isPromise(shouldIncludeElement)) {
31
31
  return promiseAll(
32
- arrayExtendMap([shouldIncludeItem], array, predicate, index)
32
+ arrayExtendMap([shouldIncludeElement], array, predicate, index)
33
33
  ).then(curry4(arrayFilterByConditions, array, result, index - 1, __))
34
34
  }
35
- if (shouldIncludeItem) {
36
- result[++resultIndex] = item
35
+ if (shouldIncludeElement) {
36
+ result[++resultIndex] = element
37
37
  }
38
38
  }
39
39
  return result
@@ -24,17 +24,17 @@ const arrayFilterIndexes = function (predicate, array) {
24
24
  let index = -1,
25
25
  resultIndex = -1
26
26
  while (++index < arrayLength) {
27
- const item = array[index],
28
- shouldIncludeItem = predicate(index)
29
- if (isPromise(shouldIncludeItem)) {
30
- const predicationPromises = [shouldIncludeItem]
27
+ const element = array[index],
28
+ shouldIncludeElement = predicate(index)
29
+ if (isPromise(shouldIncludeElement)) {
30
+ const predicationPromises = [shouldIncludeElement]
31
31
  return promiseAll(
32
32
  arrayExtendMapIndexes(
33
- [shouldIncludeItem], array, predicate, index)).then(
33
+ [shouldIncludeElement], array, predicate, index)).then(
34
34
  curry4(arrayFilterByConditions, array, result, index - 1, __))
35
35
  }
36
- if (shouldIncludeItem) {
37
- result[++resultIndex] = item
36
+ if (shouldIncludeElement) {
37
+ result[++resultIndex] = element
38
38
  }
39
39
  }
40
40
  return result
@@ -27,16 +27,16 @@ const arrayFilterWithIndex = function (array, predicate) {
27
27
  let index = -1,
28
28
  resultIndex = -1
29
29
  while (++index < arrayLength) {
30
- const item = array[index],
31
- shouldIncludeItem = predicate(item, index, array)
32
- if (isPromise(shouldIncludeItem)) {
30
+ const element = array[index],
31
+ shouldIncludeElement = predicate(element, index, array)
32
+ if (isPromise(shouldIncludeElement)) {
33
33
  return promiseAll(
34
34
  arrayExtendMapWithIndex(
35
- [shouldIncludeItem], array, predicate, index)).then(
35
+ [shouldIncludeElement], array, predicate, index)).then(
36
36
  curry4(arrayFilterByConditions, array, result, index - 1, __))
37
37
  }
38
- if (shouldIncludeItem) {
39
- result[++resultIndex] = item
38
+ if (shouldIncludeElement) {
39
+ result[++resultIndex] = element
40
40
  }
41
41
  }
42
42
  return result
@@ -21,13 +21,13 @@ const always = require('./always')
21
21
  const arrayFindAsync = async function (array, predicate, index) {
22
22
  const length = array.length
23
23
  while (++index < length) {
24
- const item = array[index]
25
- let predication = predicate(item)
24
+ const element = array[index]
25
+ let predication = predicate(element)
26
26
  if (isPromise(predication)) {
27
27
  predication = await predication
28
28
  }
29
29
  if (predication) {
30
- return item
30
+ return element
31
31
  }
32
32
  }
33
33
  return undefined
@@ -50,16 +50,16 @@ const arrayFind = function (array, predicate) {
50
50
  const length = array.length
51
51
  let index = -1
52
52
  while (++index < length) {
53
- const item = array[index],
54
- predication = predicate(item)
53
+ const element = array[index],
54
+ predication = predicate(element)
55
55
  if (isPromise(predication)) {
56
56
  return predication.then(curry3(
57
57
  thunkConditional,
58
58
  __,
59
- always(item),
59
+ always(element),
60
60
  thunkify3(arrayFindAsync, array, predicate, index)))
61
61
  } else if (predication) {
62
- return item
62
+ return element
63
63
  }
64
64
  }
65
65
  return undefined
@@ -37,44 +37,44 @@ const arrayFlatten = function (array) {
37
37
  let index = -1
38
38
 
39
39
  while (++index < length) {
40
- const item = array[index]
41
- if (isArray(item)) {
42
- const itemLength = item.length
43
- let itemIndex = -1
44
- while (++itemIndex < itemLength) {
45
- result.push(item[itemIndex])
40
+ const element = array[index]
41
+ if (isArray(element)) {
42
+ const elementLength = element.length
43
+ let elementIndex = -1
44
+ while (++elementIndex < elementLength) {
45
+ result.push(element[elementIndex])
46
46
  }
47
- } else if (item == null) {
48
- result.push(item)
49
- } else if (typeof item.then == 'function') {
50
- promises.push(item.then(curry2(arrayPush, result, __)))
51
- } else if (typeof item[symbolIterator] == 'function') {
52
- for (const subItem of item) {
53
- result.push(subItem)
47
+ } else if (element == null) {
48
+ result.push(element)
49
+ } else if (typeof element.then == 'function') {
50
+ promises.push(element.then(curry2(arrayPush, result, __)))
51
+ } else if (typeof element[symbolIterator] == 'function') {
52
+ for (const subElement of element) {
53
+ result.push(subElement)
54
54
  }
55
- } else if (typeof item[symbolAsyncIterator] == 'function') {
55
+ } else if (typeof element[symbolAsyncIterator] == 'function') {
56
56
  promises.push(asyncIteratorForEach(
57
- item[symbolAsyncIterator](), curry2(arrayPush, result, __)))
58
- } else if (typeof item.chain == 'function') {
59
- const monadValue = item.chain(identity)
57
+ element[symbolAsyncIterator](), curry2(arrayPush, result, __)))
58
+ } else if (typeof element.chain == 'function') {
59
+ const monadValue = element.chain(identity)
60
60
  isPromise(monadValue)
61
61
  ? promises.push(monadValue.then(curry2(arrayPush, result, __)))
62
62
  : result.push(monadValue)
63
- } else if (typeof item.flatMap == 'function') {
64
- const monadValue = item.flatMap(identity)
63
+ } else if (typeof element.flatMap == 'function') {
64
+ const monadValue = element.flatMap(identity)
65
65
  isPromise(monadValue)
66
66
  ? promises.push(monadValue.then(curry2(arrayPush, result, __)))
67
67
  : result.push(monadValue)
68
- } else if (typeof item.reduce == 'function') {
69
- const folded = item.reduce(funcConcatSync(
68
+ } else if (typeof element.reduce == 'function') {
69
+ const folded = element.reduce(funcConcatSync(
70
70
  getArg1, curry2(arrayPush, result, __)), null)
71
71
  isPromise(folded) && promises.push(folded)
72
- } else if (item.constructor == Object) {
73
- for (const key in item) {
74
- result.push(item[key])
72
+ } else if (element.constructor == Object) {
73
+ for (const key in element) {
74
+ result.push(element[key])
75
75
  }
76
76
  } else {
77
- result.push(item)
77
+ result.push(element)
78
78
  }
79
79
  }
80
80
  return promises.length == 0
@@ -12,7 +12,7 @@ export = arrayForEach;
12
12
  * ```
13
13
  *
14
14
  * @description
15
- * Call a callback for each item of an iterator. Return a promise if any executions are asynchronous.
15
+ * Call a callback for each element of an iterator. Return a promise if any executions are asynchronous.
16
16
  *
17
17
  * Note: iterator is consumed
18
18
  */
@@ -15,7 +15,7 @@ const always = require('./always')
15
15
  * ```
16
16
  *
17
17
  * @description
18
- * Call a callback for each item of an iterator. Return a promise if any executions are asynchronous.
18
+ * Call a callback for each element of an iterator. Return a promise if any executions are asynchronous.
19
19
  *
20
20
  * Note: iterator is consumed
21
21
  */