rubico 2.6.5 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/Transducer.d.ts +1 -1
  2. package/Transducer.js +65 -16
  3. package/__.js +10 -1
  4. package/all.d.ts +2 -2
  5. package/all.js +11 -2
  6. package/always.js +8 -0
  7. package/and.js +6 -0
  8. package/assign.js +9 -0
  9. package/compose.js +33 -8
  10. package/curry.js +18 -0
  11. package/dist/Transducer.es.js +2 -2
  12. package/dist/Transducer.es.min.js +2 -2
  13. package/dist/Transducer.js +2 -2
  14. package/dist/Transducer.min.js +2 -2
  15. package/dist/Transducer.mjs +2 -2
  16. package/dist/__.es.js +2 -2
  17. package/dist/__.es.min.js +2 -2
  18. package/dist/__.js +2 -2
  19. package/dist/__.min.js +2 -2
  20. package/dist/__.mjs +2 -2
  21. package/dist/all.es.js +2 -22
  22. package/dist/all.es.min.js +2 -2
  23. package/dist/all.js +2 -22
  24. package/dist/all.min.js +2 -2
  25. package/dist/all.mjs +2 -22
  26. package/dist/always.es.js +2 -2
  27. package/dist/always.es.min.js +2 -2
  28. package/dist/always.js +2 -2
  29. package/dist/always.min.js +2 -2
  30. package/dist/always.mjs +2 -2
  31. package/dist/and.es.js +2 -2
  32. package/dist/and.es.min.js +2 -2
  33. package/dist/and.js +2 -2
  34. package/dist/and.min.js +2 -2
  35. package/dist/and.mjs +2 -2
  36. package/dist/assign.es.js +2 -2
  37. package/dist/assign.es.min.js +2 -2
  38. package/dist/assign.js +2 -2
  39. package/dist/assign.min.js +2 -2
  40. package/dist/assign.mjs +2 -2
  41. package/dist/compose.es.js +6 -2
  42. package/dist/compose.es.min.js +3 -3
  43. package/dist/compose.js +6 -2
  44. package/dist/compose.min.js +3 -3
  45. package/dist/compose.mjs +6 -2
  46. package/dist/curry.es.js +2 -2
  47. package/dist/curry.es.min.js +2 -2
  48. package/dist/curry.js +2 -2
  49. package/dist/curry.min.js +2 -2
  50. package/dist/curry.mjs +2 -2
  51. package/dist/eq.es.js +2 -2
  52. package/dist/eq.es.min.js +2 -2
  53. package/dist/eq.js +2 -2
  54. package/dist/eq.min.js +2 -2
  55. package/dist/eq.mjs +2 -2
  56. package/dist/every.es.js +2 -2
  57. package/dist/every.es.min.js +2 -2
  58. package/dist/every.js +2 -2
  59. package/dist/every.min.js +2 -2
  60. package/dist/every.mjs +2 -2
  61. package/dist/filter.es.js +5 -3
  62. package/dist/filter.es.min.js +3 -3
  63. package/dist/filter.js +5 -3
  64. package/dist/filter.min.js +3 -3
  65. package/dist/filter.mjs +5 -3
  66. package/dist/flatMap.es.js +2 -2
  67. package/dist/flatMap.es.min.js +2 -2
  68. package/dist/flatMap.js +2 -2
  69. package/dist/flatMap.min.js +2 -2
  70. package/dist/flatMap.mjs +2 -2
  71. package/dist/forEach.es.js +2 -2
  72. package/dist/forEach.es.min.js +2 -2
  73. package/dist/forEach.js +2 -2
  74. package/dist/forEach.min.js +2 -2
  75. package/dist/forEach.mjs +2 -2
  76. package/dist/get.es.js +2 -2
  77. package/dist/get.es.min.js +2 -2
  78. package/dist/get.js +2 -2
  79. package/dist/get.min.js +2 -2
  80. package/dist/get.mjs +2 -2
  81. package/dist/gt.es.js +2 -2
  82. package/dist/gt.es.min.js +2 -2
  83. package/dist/gt.js +2 -2
  84. package/dist/gt.min.js +2 -2
  85. package/dist/gt.mjs +2 -2
  86. package/dist/gte.es.js +2 -2
  87. package/dist/gte.es.min.js +2 -2
  88. package/dist/gte.js +2 -2
  89. package/dist/gte.min.js +2 -2
  90. package/dist/gte.mjs +2 -2
  91. package/dist/lt.es.js +2 -2
  92. package/dist/lt.es.min.js +2 -2
  93. package/dist/lt.js +2 -2
  94. package/dist/lt.min.js +2 -2
  95. package/dist/lt.mjs +2 -2
  96. package/dist/lte.es.js +2 -2
  97. package/dist/lte.es.min.js +2 -2
  98. package/dist/lte.js +2 -2
  99. package/dist/lte.min.js +2 -2
  100. package/dist/lte.mjs +2 -2
  101. package/dist/map.es.js +31 -31
  102. package/dist/map.es.min.js +3 -3
  103. package/dist/map.js +31 -31
  104. package/dist/map.min.js +3 -3
  105. package/dist/map.mjs +31 -31
  106. package/dist/not.es.js +2 -2
  107. package/dist/not.es.min.js +2 -2
  108. package/dist/not.js +2 -2
  109. package/dist/not.min.js +2 -2
  110. package/dist/not.mjs +2 -2
  111. package/dist/omit.es.js +2 -2
  112. package/dist/omit.es.min.js +2 -2
  113. package/dist/omit.js +2 -2
  114. package/dist/omit.min.js +2 -2
  115. package/dist/omit.mjs +2 -2
  116. package/dist/or.es.js +2 -2
  117. package/dist/or.es.min.js +2 -2
  118. package/dist/or.js +2 -2
  119. package/dist/or.min.js +2 -2
  120. package/dist/or.mjs +2 -2
  121. package/dist/pick.es.js +2 -2
  122. package/dist/pick.es.min.js +2 -2
  123. package/dist/pick.js +2 -2
  124. package/dist/pick.min.js +2 -2
  125. package/dist/pick.mjs +2 -2
  126. package/dist/pipe.es.js +6 -2
  127. package/dist/pipe.es.min.js +3 -3
  128. package/dist/pipe.js +6 -2
  129. package/dist/pipe.min.js +3 -3
  130. package/dist/pipe.mjs +6 -2
  131. package/dist/reduce.es.js +9 -9
  132. package/dist/reduce.es.min.js +2 -2
  133. package/dist/reduce.js +9 -9
  134. package/dist/reduce.min.js +2 -2
  135. package/dist/reduce.mjs +9 -9
  136. package/dist/rubico.es.js +49 -59
  137. package/dist/rubico.es.min.js +3 -3
  138. package/dist/rubico.global.js +49 -59
  139. package/dist/rubico.global.min.js +3 -3
  140. package/dist/rubico.js +49 -59
  141. package/dist/rubico.min.js +3 -3
  142. package/dist/rubico.mjs +49 -59
  143. package/dist/set.es.js +2 -2
  144. package/dist/set.es.min.js +2 -2
  145. package/dist/set.js +2 -2
  146. package/dist/set.min.js +2 -2
  147. package/dist/set.mjs +2 -2
  148. package/dist/some.es.js +2 -2
  149. package/dist/some.es.min.js +2 -2
  150. package/dist/some.js +2 -2
  151. package/dist/some.min.js +2 -2
  152. package/dist/some.mjs +2 -2
  153. package/dist/switchCase.es.js +2 -2
  154. package/dist/switchCase.es.min.js +2 -2
  155. package/dist/switchCase.js +2 -2
  156. package/dist/switchCase.min.js +2 -2
  157. package/dist/switchCase.mjs +2 -2
  158. package/dist/tap.es.js +2 -2
  159. package/dist/tap.es.min.js +2 -2
  160. package/dist/tap.js +2 -2
  161. package/dist/tap.min.js +2 -2
  162. package/dist/tap.mjs +2 -2
  163. package/dist/thunkify.es.js +2 -2
  164. package/dist/thunkify.es.min.js +2 -2
  165. package/dist/thunkify.js +2 -2
  166. package/dist/thunkify.min.js +2 -2
  167. package/dist/thunkify.mjs +2 -2
  168. package/dist/transform.es.js +2 -2
  169. package/dist/transform.es.min.js +2 -2
  170. package/dist/transform.js +2 -2
  171. package/dist/transform.min.js +2 -2
  172. package/dist/transform.mjs +2 -2
  173. package/dist/tryCatch.es.js +2 -2
  174. package/dist/tryCatch.es.min.js +2 -2
  175. package/dist/tryCatch.js +2 -2
  176. package/dist/tryCatch.min.js +2 -2
  177. package/dist/tryCatch.mjs +2 -2
  178. package/dist/x/append.es.js +2 -2
  179. package/dist/x/append.es.min.js +2 -2
  180. package/dist/x/append.js +2 -2
  181. package/dist/x/append.min.js +2 -2
  182. package/dist/x/append.mjs +2 -2
  183. package/dist/x/callProp.es.js +2 -2
  184. package/dist/x/callProp.es.min.js +2 -2
  185. package/dist/x/callProp.js +2 -2
  186. package/dist/x/callProp.min.js +2 -2
  187. package/dist/x/callProp.mjs +2 -2
  188. package/dist/x/defaultsDeep.es.js +2 -2
  189. package/dist/x/defaultsDeep.es.min.js +2 -2
  190. package/dist/x/defaultsDeep.js +2 -2
  191. package/dist/x/defaultsDeep.min.js +2 -2
  192. package/dist/x/defaultsDeep.mjs +2 -2
  193. package/dist/x/differenceWith.es.js +2 -2
  194. package/dist/x/differenceWith.es.min.js +2 -2
  195. package/dist/x/differenceWith.js +2 -2
  196. package/dist/x/differenceWith.min.js +2 -2
  197. package/dist/x/differenceWith.mjs +2 -2
  198. package/dist/x/filterOut.es.js +5 -3
  199. package/dist/x/filterOut.es.min.js +3 -3
  200. package/dist/x/filterOut.js +5 -3
  201. package/dist/x/filterOut.min.js +3 -3
  202. package/dist/x/filterOut.mjs +5 -3
  203. package/dist/x/find.es.js +2 -2
  204. package/dist/x/find.es.min.js +2 -2
  205. package/dist/x/find.js +2 -2
  206. package/dist/x/find.min.js +2 -2
  207. package/dist/x/find.mjs +2 -2
  208. package/dist/x/findIndex.es.js +2 -2
  209. package/dist/x/findIndex.es.min.js +2 -2
  210. package/dist/x/findIndex.js +2 -2
  211. package/dist/x/findIndex.min.js +2 -2
  212. package/dist/x/findIndex.mjs +2 -2
  213. package/dist/x/first.es.js +2 -2
  214. package/dist/x/first.es.min.js +2 -2
  215. package/dist/x/first.js +2 -2
  216. package/dist/x/first.min.js +2 -2
  217. package/dist/x/first.mjs +2 -2
  218. package/dist/x/flatten.es.js +2 -2
  219. package/dist/x/flatten.es.min.js +2 -2
  220. package/dist/x/flatten.js +2 -2
  221. package/dist/x/flatten.min.js +2 -2
  222. package/dist/x/flatten.mjs +2 -2
  223. package/dist/x/groupBy.es.js +9 -9
  224. package/dist/x/groupBy.es.min.js +2 -2
  225. package/dist/x/groupBy.js +9 -9
  226. package/dist/x/groupBy.min.js +2 -2
  227. package/dist/x/groupBy.mjs +9 -9
  228. package/dist/x/has.es.js +2 -2
  229. package/dist/x/has.es.min.js +2 -2
  230. package/dist/x/has.js +2 -2
  231. package/dist/x/has.min.js +2 -2
  232. package/dist/x/has.mjs +2 -2
  233. package/dist/x/identity.es.js +2 -2
  234. package/dist/x/identity.es.min.js +2 -2
  235. package/dist/x/identity.js +2 -2
  236. package/dist/x/identity.min.js +2 -2
  237. package/dist/x/identity.mjs +2 -2
  238. package/dist/x/includes.es.js +2 -2
  239. package/dist/x/includes.es.min.js +2 -2
  240. package/dist/x/includes.js +2 -2
  241. package/dist/x/includes.min.js +2 -2
  242. package/dist/x/includes.mjs +2 -2
  243. package/dist/x/isDeepEqual.es.js +2 -2
  244. package/dist/x/isDeepEqual.es.min.js +2 -2
  245. package/dist/x/isDeepEqual.js +2 -2
  246. package/dist/x/isDeepEqual.min.js +2 -2
  247. package/dist/x/isDeepEqual.mjs +2 -2
  248. package/dist/x/isEmpty.es.js +2 -2
  249. package/dist/x/isEmpty.es.min.js +2 -2
  250. package/dist/x/isEmpty.js +2 -2
  251. package/dist/x/isEmpty.min.js +2 -2
  252. package/dist/x/isEmpty.mjs +2 -2
  253. package/dist/x/isEqual.es.js +2 -2
  254. package/dist/x/isEqual.es.min.js +2 -2
  255. package/dist/x/isEqual.js +2 -2
  256. package/dist/x/isEqual.min.js +2 -2
  257. package/dist/x/isEqual.mjs +2 -2
  258. package/dist/x/isFunction.es.js +2 -2
  259. package/dist/x/isFunction.es.min.js +2 -2
  260. package/dist/x/isFunction.js +2 -2
  261. package/dist/x/isFunction.min.js +2 -2
  262. package/dist/x/isFunction.mjs +2 -2
  263. package/dist/x/isIn.es.js +2 -2
  264. package/dist/x/isIn.es.min.js +2 -2
  265. package/dist/x/isIn.js +2 -2
  266. package/dist/x/isIn.min.js +2 -2
  267. package/dist/x/isIn.mjs +2 -2
  268. package/dist/x/isObject.es.js +2 -2
  269. package/dist/x/isObject.es.min.js +2 -2
  270. package/dist/x/isObject.js +2 -2
  271. package/dist/x/isObject.min.js +2 -2
  272. package/dist/x/isObject.mjs +2 -2
  273. package/dist/x/isString.es.js +2 -2
  274. package/dist/x/isString.es.min.js +2 -2
  275. package/dist/x/isString.js +2 -2
  276. package/dist/x/isString.min.js +2 -2
  277. package/dist/x/isString.mjs +2 -2
  278. package/dist/x/keys.es.js +2 -2
  279. package/dist/x/keys.es.min.js +2 -2
  280. package/dist/x/keys.js +2 -2
  281. package/dist/x/keys.min.js +2 -2
  282. package/dist/x/keys.mjs +2 -2
  283. package/dist/x/last.es.js +2 -2
  284. package/dist/x/last.es.min.js +2 -2
  285. package/dist/x/last.js +2 -2
  286. package/dist/x/last.min.js +2 -2
  287. package/dist/x/last.mjs +2 -2
  288. package/dist/x/maxBy.es.js +2 -2
  289. package/dist/x/maxBy.es.min.js +2 -2
  290. package/dist/x/maxBy.js +2 -2
  291. package/dist/x/maxBy.min.js +2 -2
  292. package/dist/x/maxBy.mjs +2 -2
  293. package/dist/x/noop.es.js +2 -2
  294. package/dist/x/noop.es.min.js +2 -2
  295. package/dist/x/noop.js +2 -2
  296. package/dist/x/noop.min.js +2 -2
  297. package/dist/x/noop.mjs +2 -2
  298. package/dist/x/pluck.es.js +31 -31
  299. package/dist/x/pluck.es.min.js +3 -3
  300. package/dist/x/pluck.js +31 -31
  301. package/dist/x/pluck.min.js +3 -3
  302. package/dist/x/pluck.mjs +31 -31
  303. package/dist/x/prepend.es.js +2 -2
  304. package/dist/x/prepend.es.min.js +2 -2
  305. package/dist/x/prepend.js +2 -2
  306. package/dist/x/prepend.min.js +2 -2
  307. package/dist/x/prepend.mjs +2 -2
  308. package/dist/x/size.es.js +2 -2
  309. package/dist/x/size.es.min.js +2 -2
  310. package/dist/x/size.js +2 -2
  311. package/dist/x/size.min.js +2 -2
  312. package/dist/x/size.mjs +2 -2
  313. package/dist/x/trace.es.js +2 -2
  314. package/dist/x/trace.es.min.js +2 -2
  315. package/dist/x/trace.js +2 -2
  316. package/dist/x/trace.min.js +2 -2
  317. package/dist/x/trace.mjs +2 -2
  318. package/dist/x/unionWith.es.js +2 -2
  319. package/dist/x/unionWith.es.min.js +2 -2
  320. package/dist/x/unionWith.js +2 -2
  321. package/dist/x/unionWith.min.js +2 -2
  322. package/dist/x/unionWith.mjs +2 -2
  323. package/dist/x/uniq.es.js +2 -2
  324. package/dist/x/uniq.es.min.js +2 -2
  325. package/dist/x/uniq.js +2 -2
  326. package/dist/x/uniq.min.js +2 -2
  327. package/dist/x/uniq.mjs +2 -2
  328. package/dist/x/unless.es.js +2 -2
  329. package/dist/x/unless.es.min.js +2 -2
  330. package/dist/x/unless.js +2 -2
  331. package/dist/x/unless.min.js +2 -2
  332. package/dist/x/unless.mjs +2 -2
  333. package/dist/x/values.es.js +2 -2
  334. package/dist/x/values.es.min.js +2 -2
  335. package/dist/x/values.js +2 -2
  336. package/dist/x/values.min.js +2 -2
  337. package/dist/x/values.mjs +2 -2
  338. package/dist/x/when.es.js +2 -2
  339. package/dist/x/when.es.min.js +2 -2
  340. package/dist/x/when.js +2 -2
  341. package/dist/x/when.min.js +2 -2
  342. package/dist/x/when.mjs +2 -2
  343. package/eq.d.ts +6 -6
  344. package/eq.js +14 -6
  345. package/es.js +49 -59
  346. package/every.js +19 -5
  347. package/filter.js +87 -47
  348. package/flatMap.js +38 -32
  349. package/forEach.js +107 -13
  350. package/get.js +9 -0
  351. package/gt.js +9 -0
  352. package/gte.js +9 -0
  353. package/index.js +49 -59
  354. package/lte.js +9 -0
  355. package/map.js +198 -103
  356. package/not.js +7 -0
  357. package/omit.d.ts +2 -2
  358. package/omit.js +11 -2
  359. package/or.js +6 -0
  360. package/package.json +1 -3
  361. package/pick.js +9 -0
  362. package/pipe.js +30 -3
  363. package/reduce.js +132 -89
  364. package/set.js +9 -0
  365. package/some.js +17 -3
  366. package/switchCase.js +6 -0
  367. package/tap.js +14 -0
  368. package/thunkify.js +8 -0
  369. package/transform.js +112 -44
  370. package/tryCatch.js +5 -0
  371. package/x/append.js +3 -0
  372. package/x/callProp.js +5 -0
  373. package/x/defaultsDeep.d.ts +2 -2
  374. package/x/defaultsDeep.js +7 -2
  375. package/x/differenceWith.js +5 -0
  376. package/x/find.d.ts +2 -2
  377. package/x/find.js +2 -2
  378. package/x/groupBy.d.ts +2 -2
  379. package/x/groupBy.js +2 -2
  380. package/x/pluck.d.ts +2 -2
  381. package/x/pluck.js +2 -2
  382. package/x/unionWith.test.js +3 -3
package/map.js CHANGED
@@ -93,93 +93,118 @@ const _map = function (value, f) {
93
93
  *
94
94
  * @synopsis
95
95
  * ```coffeescript [specscript]
96
- * type Mappable = Array|Object|Set|Map|Iterator|AsyncIterator
96
+ * type Functor = Array|Set|Map|Generator|AsyncGenerator|{ map: function }|Object
97
97
  *
98
98
  * type Mapper = (
99
- * value any,
99
+ * item any,
100
100
  * indexOrKey number|string|any,
101
- * collection Mappable
101
+ * ftor Functor
102
102
  * )=>(resultItem Promise|any)
103
103
  *
104
- * map(collection Promise|Mappable, f Mapper) -> result Promise|Mappable
105
- * map(f Mapper)(collection Mappable) -> result Promise|Mappable
104
+ * map(ftor Promise|Functor, mapper Mapper) -> result Promise|Functor
105
+ * map(mapper Mapper)(ftor Functor) -> result Promise|Functor
106
106
  * ```
107
107
  *
108
108
  * @description
109
- * Applies a synchronous or asynchronous mapper function `f` concurrently to each item of a collection, returning the results in a new collection of the same type. If order is implied by the collection, it is maintained in the result. `map` accepts the following collections:
109
+ * Applies a mapper function to each item of a functor, returning a functor of the same type with the mapped items. The order of the items is maintained.
110
+ *
111
+ * The following data types are considered to be functors:
112
+ * * `array`
113
+ * * `set`
114
+ * * `map`
115
+ * * `generator`
116
+ * * `async generator`
117
+ * * `object with .map method`
118
+ * * `object`
119
+ *
120
+ * The mapper function defines a mapping between a given item in the functor to a resulting item in the returned functor.
121
+ *
122
+ * ```javascript
123
+ * const mapper = function (item) {
124
+ * // resultItem is the result of a mapping from item
125
+ * return resultItem
126
+ * }
127
+ * ```
110
128
  *
111
- * * `Array`
112
- * * `Object`
113
- * * `Set`
114
- * * `Map`
115
- * * `Iterator`/`Generator`
116
- * * `AsyncIterator`/`AsyncGenerator`
129
+ * The mapper function signature changes depending on the provided functor.
117
130
  *
118
- * With arrays (type `Array`), `map` applies the mapper function `f` to each item of the array, returning the transformed results in a new array ordered the same as the original array.
131
+ * If the functor is an array:
132
+ * ```coffeescript [specscript]
133
+ * mapper(item any, index number, ftor Array) -> resultItem Promise|any
134
+ * ```
119
135
  *
120
- * ```javascript [playground]
121
- * const square = number => number ** 2
136
+ * If the functor is a set:
137
+ * ```coffeescript [specscript]
138
+ * mapper(item any, item any, ftor Set) -> resultItem Promise|any
139
+ * ```
122
140
  *
123
- * const array = [1, 2, 3, 4, 5]
141
+ * If the functor is a map:
142
+ * ```coffeescript [specscript]
143
+ * mapper(item any, key any, ftor Map) -> resultItem Promise|any
144
+ * ```
145
+ *
146
+ * If the functor is a generator:
147
+ * ```coffeescript [specscript]
148
+ * mapper(item any) -> resultItem Promise|any
149
+ * ```
150
+ *
151
+ * If the functor is an async generator:
152
+ * ```coffeescript [specscript]
153
+ * mapper(item any) -> resultItem Promise|any
154
+ * ```
124
155
  *
125
- * console.log(
126
- * map(array, square)
127
- * ) // [1, 4, 9, 16, 25]
156
+ * If the functor is an object with a `.map` method, the mapper function signature is defined externally.
128
157
  *
129
- * console.log(
130
- * map(square)(array)
131
- * ) // [1, 4, 9, 16, 25]
158
+ * If the functor is a plain object:
159
+ * ```coffeescript [specscript]
160
+ * mapper(item any, key string, ftor Object) -> resultItem Promise|any
132
161
  * ```
133
162
  *
134
- * With objects (type `Object`), `map` applies the mapper function `f` to each value of the object, returning the transformed results as values in a new object ordered by the keys of the original object
163
+ * `map` works for arrays.
135
164
  *
136
165
  * ```javascript [playground]
137
166
  * const square = number => number ** 2
138
167
  *
139
- * const obj = { a: 1, b: 2, c: 3, d: 4, e: 5 }
168
+ * const array = [1, 2, 3, 4, 5]
169
+ *
170
+ * const result = map(array, square)
171
+ * console.log(result) // [1, 4, 9, 16, 25]
172
+ * ```
140
173
  *
141
- * console.log(
142
- * map(square)(obj)
143
- * ) // { a: 1, b: 4, c: 9, d: 16, e: 25 }
174
+ * The mapper function may be asynchronous, in which case it is applied concurrently.
175
+ *
176
+ * ```javascript [playground]
177
+ * const asyncSquare = async number => number ** 2
178
+ *
179
+ * const array = [1, 2, 3, 4, 5]
144
180
  *
145
- * console.log(
146
- * map(obj, square)
147
- * ) // { a: 1, b: 4, c: 9, d: 16, e: 25 }
181
+ * const promise = map(array, asyncSquare)
182
+ * promise.then(console.log) // [1, 4, 9, 16, 25]
148
183
  * ```
149
184
  *
150
- * With sets (type `Set`), `map` applies the mapper function `f` to each value of the set, returning the transformed results unordered in a new set.
185
+ * `map` applies the mapper function to just the values of an object.
151
186
  *
152
187
  * ```javascript [playground]
153
188
  * const square = number => number ** 2
154
189
  *
155
- * const set = new Set([1, 2, 3, 4, 5])
156
- *
157
- * console.log(
158
- * map(set, square)
159
- * ) // [1, 4, 9, 16, 25]
190
+ * const obj = { a: 1, b: 2, c: 3, d: 4, e: 5 }
160
191
  *
161
- * console.log(
162
- * map(square)(set)
163
- * ) // [1, 4, 9, 16, 25]
192
+ * const result = map(obj, square)
193
+ * console.log(result) // { a: 1, b: 4, c: 9, d: 16, e: 25 }
164
194
  * ```
165
195
  *
166
- * With maps (type `Map`), `map` applies the mapper function `f` to each value of the map, returning the results at the same keys in a new map. The entries of the resulting map are in the same order as those of the original map
196
+ * `map` applies the mapper function to the values of the entries of a map.
167
197
  *
168
198
  * ```javascript [playground]
169
199
  * const square = number => number ** 2
170
200
  *
171
201
  * const m = new Map([['a', 1], ['b', 2], ['c', 3], ['d', 4], ['e', 5]])
172
202
  *
173
- * console.log(
174
- * map(square)(m)
175
- * ) // Map { 'a' => 1, 'b' => 4, 'c' => 9, 'd' => 16, 'e' => 25 }
176
- *
177
- * console.log(
178
- * map(m, square)
179
- * ) // Map { 'a' => 1, 'b' => 4, 'c' => 9, 'd' => 16, 'e' => 25 }
203
+ * const result = map(m, square)
204
+ * console.log(result) // Map { 'a' => 1, 'b' => 4, 'c' => 9, 'd' => 16, 'e' => 25 }
180
205
  * ```
181
206
  *
182
- * With iterators (type `Iterator`) or generators (type `Generator`), `map` applies the mapper function `f` lazily to each value of the iterator/generator, creating a new iterator with transformed iterations.
207
+ * `map` applies the mapper function lazily to each value of a generator, creating a new generator with mapped items.
183
208
  *
184
209
  * ```javascript [playground]
185
210
  * const capitalize = string => string.toUpperCase()
@@ -190,16 +215,13 @@ const _map = function (value, f) {
190
215
  *
191
216
  * const abcGenerator = abcGeneratorFunc()
192
217
  * const ABCGenerator = map(abcGeneratorFunc(), capitalize)
193
- * const ABCGenerator2 = map(capitalize)(abcGeneratorFunc())
194
218
  *
195
219
  * console.log([...abcGenerator]) // ['a', 'b', 'c']
196
220
  *
197
221
  * console.log([...ABCGenerator]) // ['A', 'B', 'C']
198
- *
199
- * console.log([...ABCGenerator2]) // ['A', 'B', 'C']
200
222
  * ```
201
223
  *
202
- * With asyncIterators (type `AsyncIterator`, or `AsyncGenerator`), `map` applies the mapper function `f` lazily to each value of the asyncIterator, creating a new asyncIterator with transformed iterations
224
+ * `map` applies the mapper function lazily to each value of an async generator, creating a new async generator with mapped items.
203
225
  *
204
226
  * ```javascript [playground]
205
227
  * const capitalize = string => string.toUpperCase()
@@ -210,7 +232,6 @@ const _map = function (value, f) {
210
232
  *
211
233
  * const abcAsyncGenerator = abcAsyncGeneratorFunc()
212
234
  * const ABCGenerator = map(abcAsyncGeneratorFunc(), capitalize)
213
- * const ABCGenerator2 = map(capitalize)(abcAsyncGeneratorFunc())
214
235
  *
215
236
  * ;(async function () {
216
237
  * for await (const letter of abcAsyncGenerator) {
@@ -226,13 +247,6 @@ const _map = function (value, f) {
226
247
  * // B
227
248
  * // C
228
249
  * }
229
- *
230
- * for await (const letter of ABCGenerator2) {
231
- * console.log(letter)
232
- * // A
233
- * // B
234
- * // C
235
- * }
236
250
  * })()
237
251
  * ```
238
252
  *
@@ -245,6 +259,17 @@ const _map = function (value, f) {
245
259
  * // [1, 4, 9, 16, 25]
246
260
  * ```
247
261
  *
262
+ * See also:
263
+ * * [forEach](/docs/forEach)
264
+ * * [map.entries](/docs/map.entries)
265
+ * * [map.series](/docs/map.series)
266
+ * * [map.pool](/docs/map.pool)
267
+ * * [filter](/docs/filter)
268
+ * * [reduce](/docs/reduce)
269
+ * * [transform](/docs/transform)
270
+ * * [flatMap](/docs/flatMap)
271
+ * * [some](/docs/some)
272
+ *
248
273
  * @execution concurrent
249
274
  *
250
275
  * @TODO streamMap
@@ -277,23 +302,49 @@ const _mapEntries = (value, f) => {
277
302
  *
278
303
  * @synopsis
279
304
  * ```coffeescript [specscript]
280
- * type EntriesMappable = Object|Map
305
+ * type FunctorWithEntries = Map|Object
281
306
  *
282
- * type Mapper = (
283
- * value any,
284
- * key string|any,
285
- * collection EntriesMappable
286
- * )=>(resultItem Promise|any)
307
+ * type EntryMapper = (
308
+ * entry [key string|any, value any],
309
+ * )=>(resultEntry Promise|[resultKey string|any, resultItem any])
287
310
  *
288
- * map.entries(value Promise|EntriesMappable, f Mapper)
289
- * -> Promise|EntriesMappable
311
+ * map.entries(
312
+ * value Promise|FunctorWithEntries,
313
+ * mapper EntryMapper
314
+ * ) -> Promise|FunctorWithEntries
290
315
  *
291
- * map.entries(f Mapper)(value EntriesMappable)
292
- * -> Promise|EntriesMappable
316
+ * map.entries(mapper EntryMapper)(value FunctorWithEntries)
317
+ * -> Promise|FunctorWithEntries
293
318
  * ```
294
319
  *
295
320
  * @description
296
- * `map` over the entries rather than the values of a collection. Accepts collections of type `Map` or `Object`.
321
+ * `map` over the entries of a functor as opposed to the values.
322
+ *
323
+ * The following data types are considered to be functors with entries:
324
+ * * `map`
325
+ * * `object`
326
+ *
327
+ * The signature of the mapper function changes depending on the provided functor:
328
+ *
329
+ * If the functor is a map:
330
+ *
331
+ * ```coffeescript [specscript]
332
+ * mapper(entry [key any, value any]) -> resultEntry Promise|[
333
+ * resultKey any,
334
+ * resultValue any,
335
+ * ]
336
+ * ```
337
+ *
338
+ * If the functor is an object:
339
+ *
340
+ * ```coffeescript [specscript]
341
+ * mapper(entry [key string, value any]) -> resultEntry Promise|[
342
+ * resultKey string,
343
+ * resultValue any,
344
+ * ]
345
+ * ```
346
+ *
347
+ * `map.entries` works for objects and maps.
297
348
  *
298
349
  * ```javascript [playground]
299
350
  * const upperCaseKeysAndSquareValues =
@@ -318,6 +369,17 @@ const _mapEntries = (value, f) => {
318
369
  * // { a: 1, b: 4, c: 9 }
319
370
  * ```
320
371
  *
372
+ * See also:
373
+ * * [forEach](/docs/forEach)
374
+ * * [map](/docs/map)
375
+ * * [map.series](/docs/map.series)
376
+ * * [map.pool](/docs/map.pool)
377
+ * * [filter](/docs/filter)
378
+ * * [reduce](/docs/reduce)
379
+ * * [transform](/docs/transform)
380
+ * * [flatMap](/docs/flatMap)
381
+ * * [some](/docs/some)
382
+ *
321
383
  * @since v1.7.0
322
384
  */
323
385
  map.entries = function mapEntries(arg0, arg1) {
@@ -334,15 +396,15 @@ map.entries = function mapEntries(arg0, arg1) {
334
396
  *
335
397
  * @synopsis
336
398
  * ```coffeescript [specscript]
337
- * type Mappable = Array|Object|Set|Map
399
+ * type Functor = Array|Object|Set|Map
338
400
  *
339
401
  * type Mapper = (
340
402
  * value any,
341
403
  * indexOrKey number|string|any,
342
- * collection Mappable
404
+ * f Functor
343
405
  * )=>(mappedItem Promise|any)
344
406
  *
345
- * _mapSeries(collection Mappable, f Mapper) -> result Promise|Mappable
407
+ * _mapSeries(f Functor, f Mapper) -> result Promise|Functor
346
408
  * ```
347
409
  */
348
410
  const _mapSeries = function (collection, f) {
@@ -373,16 +435,21 @@ const _mapSeries = function (collection, f) {
373
435
  *
374
436
  * @synopsis
375
437
  * ```coffeescript [specscript]
376
- * type Mappable = Array|Object|Set|Map
438
+ * type MapSeriesFunctor = Array|Object|Set|Map
377
439
  *
378
440
  * type Mapper = (
379
441
  * value any,
380
442
  * indexOrKey number|string|any,
381
- * collection Mappable
443
+ * ftor MapSeriesFunctor,
382
444
  * )=>(mappedItem Promise|any)
383
445
  *
384
- * map.series(collection Promise|Mappable, f Mapper) -> result Mappable
385
- * map.series(f Mapper)(collection Mappable) -> result Mappable
446
+ * map.series(
447
+ * ftor Promise|MapSeriesFunctor,
448
+ * mapper Mapper
449
+ * ) -> result MapSeriesFunctor
450
+ *
451
+ * map.series(mapper Mapper)(ftor MapSeriesFunctor)
452
+ * -> result MapSeriesFunctor
386
453
  * ```
387
454
  *
388
455
  * @description
@@ -409,6 +476,17 @@ const _mapSeries = function (collection, f) {
409
476
  * // [1, 4, 9, 16, 25]
410
477
  * ```
411
478
  *
479
+ * See also:
480
+ * * [forEach](/docs/forEach)
481
+ * * [map](/docs/map)
482
+ * * [map.entries](/docs/map.entries)
483
+ * * [map.pool](/docs/map.pool)
484
+ * * [filter](/docs/filter)
485
+ * * [reduce](/docs/reduce)
486
+ * * [transform](/docs/transform)
487
+ * * [flatMap](/docs/flatMap)
488
+ * * [some](/docs/some)
489
+ *
412
490
  * @execution series
413
491
  */
414
492
  map.series = function mapSeries(arg0, arg1) {
@@ -425,31 +503,31 @@ map.series = function mapSeries(arg0, arg1) {
425
503
  *
426
504
  * @synopsis
427
505
  * ```coffeescript [specscript]
428
- * type Mappable = Array|Object|Set|Map
506
+ * type Functor = Array|Object|Set|Map
429
507
  *
430
- * _mapPool(collection Mappable, concurrency number, f function) -> result Promise|Mappable
508
+ * _mapPool(f Functor, concurrency number, mapper function) -> result Promise|Functor
431
509
  * ```
432
510
  */
433
- const _mapPool = function (collection, concurrency, f) {
434
- if (isArray(collection)) {
435
- return arrayMapPool(collection, concurrency, f)
511
+ const _mapPool = function (f, concurrency, mapper) {
512
+ if (isArray(f)) {
513
+ return arrayMapPool(f, concurrency, mapper)
436
514
  }
437
- if (collection == null) {
438
- throw new TypeError(`invalid collection ${collection}`)
515
+ if (f == null) {
516
+ throw new TypeError(`invalid functor ${f}`)
439
517
  }
440
- if (typeof collection == 'string' || collection.constructor == String) {
441
- return stringMapPool(collection, concurrency, f)
518
+ if (typeof f == 'string' || f.constructor == String) {
519
+ return stringMapPool(f, concurrency, mapper)
442
520
  }
443
- if (collection.constructor == Set) {
444
- return setMapPool(collection, concurrency, f)
521
+ if (f.constructor == Set) {
522
+ return setMapPool(f, concurrency, mapper)
445
523
  }
446
- if (collection.constructor == Map) {
447
- return mapMapPool(collection, concurrency, f)
524
+ if (f.constructor == Map) {
525
+ return mapMapPool(f, concurrency, mapper)
448
526
  }
449
- if (collection.constructor == Object) {
450
- return objectMapPool(collection, concurrency, f)
527
+ if (f.constructor == Object) {
528
+ return objectMapPool(f, concurrency, mapper)
451
529
  }
452
- throw new TypeError(`invalid collection ${collection}`)
530
+ throw new TypeError(`invalid functor ${f}`)
453
531
  }
454
532
 
455
533
  /**
@@ -457,18 +535,24 @@ const _mapPool = function (collection, concurrency, f) {
457
535
  *
458
536
  * @synopsis
459
537
  * ```coffeescript [specscript]
460
- * type Mappable = Array|Object|Set|Map
538
+ * type MapPoolFunctor = Array|Object|Set|Map
539
+ *
540
+ * type Mapper = (
541
+ * item any,
542
+ * indexOrKey number|string|any,
543
+ * ftor Functor
544
+ * )=>(resultItem Promise|any)
461
545
  *
462
546
  * map.pool(
547
+ * ftor MapPoolFunctor,
463
548
  * concurrency number,
464
- * mapper (value any)=>Promise|any,
465
- * )(collection Mappable) -> result Promise|Array
549
+ * mapper Mapper
550
+ * ) -> result Promise|Array
466
551
  *
467
552
  * map.pool(
468
- * collection Mappable,
469
553
  * concurrency number,
470
- * mapper (value any)=>Promise|any,
471
- * ) -> result Promise|Array
554
+ * mapper Mapper
555
+ * )(ftor MapPoolFunctor) -> result Promise|Array
472
556
  * ```
473
557
  *
474
558
  * @description
@@ -499,6 +583,17 @@ const _mapPool = function (collection, concurrency, f) {
499
583
  * // [1, 4, 9, 16, 25]
500
584
  * ```
501
585
  *
586
+ * See also:
587
+ * * [forEach](/docs/forEach)
588
+ * * [map](/docs/map)
589
+ * * [map.entries](/docs/map.entries)
590
+ * * [map.series](/docs/map.series)
591
+ * * [filter](/docs/filter)
592
+ * * [reduce](/docs/reduce)
593
+ * * [transform](/docs/transform)
594
+ * * [flatMap](/docs/flatMap)
595
+ * * [some](/docs/some)
596
+ *
502
597
  * @TODO objectMapPool
503
598
  *
504
599
  * @execution concurrent
@@ -517,15 +612,15 @@ map.pool = function mapPool(arg0, arg1, arg2) {
517
612
  *
518
613
  * @synopsis
519
614
  * ```coffeescript [specscript]
520
- * type Mappable = Array|Object|Set|Map
615
+ * type Functor = Array|Object|Set|Map
521
616
  *
522
617
  * map.rate(
523
618
  * rate number,
524
619
  * f (value any)=>Promise|any,
525
- * )(collection Mappable) -> result Promise|Array
620
+ * )(f Functor) -> result Promise|Array
526
621
  *
527
622
  * map.rate(
528
- * collection Mappable,
623
+ * f Functor,
529
624
  * rate number,
530
625
  * f (value any)=>Promise|any,
531
626
  * ) -> result Promise|Array
package/not.js CHANGED
@@ -53,6 +53,13 @@ const _not = function (args, predicate) {
53
53
  *
54
54
  * not(Promise.resolve(3), isOdd).then(console.log) // false
55
55
  * ```
56
+ *
57
+ * See also:
58
+ * * [some](/docs/some)
59
+ * * [and](/docs/and)
60
+ * * [or](/docs/or)
61
+ * * [eq](/docs/eq)
62
+ *
56
63
  */
57
64
 
58
65
  const not = function (...args) {
package/omit.d.ts CHANGED
@@ -14,8 +14,8 @@ export = omit;
14
14
  *
15
15
  * ```javascript [playground]
16
16
  * console.log(
17
- * omit({ _id: '1', name: 'George' }, ['_id']),
18
- * ) // { name: 'George' }
17
+ * omit({ _id: '1', name: 'John' }, ['_id']),
18
+ * ) // { name: 'John' }
19
19
  * ```
20
20
  *
21
21
  * `omit` supports three types of path patterns for nested property access
package/omit.js CHANGED
@@ -30,8 +30,8 @@ const _omit = function (source, paths) {
30
30
  *
31
31
  * ```javascript [playground]
32
32
  * console.log(
33
- * omit({ _id: '1', name: 'George' }, ['_id']),
34
- * ) // { name: 'George' }
33
+ * omit({ _id: '1', name: 'John' }, ['_id']),
34
+ * ) // { name: 'John' }
35
35
  * ```
36
36
  *
37
37
  * `omit` supports three types of path patterns for nested property access
@@ -69,6 +69,15 @@ const _omit = function (source, paths) {
69
69
  * omit(Promise.resolve({ a: 1, b: 2, c: 3 }), ['a', 'b']).then(console.log)
70
70
  * // { c: 3 }
71
71
  * ```
72
+ *
73
+ * See also:
74
+ * * [pipe](/docs/pipe)
75
+ * * [all](/docs/all)
76
+ * * [assign](/docs/assign)
77
+ * * [get](/docs/get)
78
+ * * [set](/docs/set)
79
+ * * [pick](/docs/pick)
80
+ * * [forEach](/docs/forEach)
72
81
  */
73
82
  const omit = function (arg0, arg1) {
74
83
  if (arg1 == null) {
package/or.js CHANGED
@@ -138,6 +138,12 @@ const areAnyPredicatesTruthy = function (args, predicates) {
138
138
  * ]).then(console.log) // true
139
139
  * ```
140
140
  *
141
+ * See also:
142
+ * * [some](/docs/some)
143
+ * * [and](/docs/and)
144
+ * * [not](/docs/not)
145
+ * * [eq](/docs/eq)
146
+ *
141
147
  * @execution series
142
148
  *
143
149
  * @note ...args slows down here by an order of magnitude
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rubico",
3
- "version": "2.6.5",
3
+ "version": "2.7.0",
4
4
  "description": "[a]synchronous functional programming",
5
5
  "author": "Richard Tong",
6
6
  "license": "MIT",
@@ -115,7 +115,6 @@
115
115
  "async": "latest",
116
116
  "bluebird": "latest",
117
117
  "codecov": "^3.7.1",
118
- "eslint": "^9.22.0",
119
118
  "fantasy-land": "latest",
120
119
  "lodash": "latest",
121
120
  "mocha": "^11.1.0",
@@ -129,7 +128,6 @@
129
128
  "scripts": {
130
129
  "test": "mocha test.js *.test.js */**.test.js",
131
130
  "test-coverage": "nyc mocha test.js x/*.test.js monad/*.test.js",
132
- "lint": "eslint .",
133
131
  "build": "npm run dts && ./build",
134
132
  "bench": "./bench",
135
133
  "dts": "del *.d.ts _internal/*.d.ts x/*.d.ts && tsc"
package/pick.js CHANGED
@@ -69,6 +69,15 @@ const _pick = function (source, keys) {
69
69
  * pick(Promise.resolve({ a: 1, b: 2, c: 3 }), ['a', 'b']).then(console.log)
70
70
  * // { a: 1, b: 2 }
71
71
  * ```
72
+ *
73
+ * See also:
74
+ * * [pipe](/docs/pipe)
75
+ * * [all](/docs/all)
76
+ * * [assign](/docs/assign)
77
+ * * [get](/docs/get)
78
+ * * [set](/docs/set)
79
+ * * [omit](/docs/omit)
80
+ * * [forEach](/docs/forEach)
72
81
  */
73
82
  const pick = function (arg0, arg1) {
74
83
  if (arg1 == null) {
package/pipe.js CHANGED
@@ -10,13 +10,19 @@ const __ = require('./_internal/placeholder')
10
10
  *
11
11
  * @synopsis
12
12
  * ```coffeescript [specscript]
13
- * pipe(funcs Array<function>)(...args) -> result Promise|any
13
+ * funcs Array<function>
14
+ * args Array<any>
15
+ * argsWithPromises Array<Promise|any>
14
16
  *
15
- * pipe(...args, funcs Array<function>) -> result Promise|any
17
+ * pipe(funcs)(...args) -> result Promise|any
18
+ *
19
+ * pipe(...argsWithPromises, funcs Array<function>) -> result Promise|any
20
+ *
21
+ * pipe(...funcs)(...args) -> result Promise|any
16
22
  * ```
17
23
  *
18
24
  * @description
19
- * Creates a function pipeline from an array of functions, where each function passes its return value as a single argument to the next function until all functions have executed. The first function is called with the arguments to the pipeline, while the result of the pipeline execution is the return of its last function. If any function of the pipeline is asynchronous, the result of the execution is a Promise.
25
+ * Creates a function pipeline from multiple functions. Each function in the pipeline is evaluated in series, passing its return value as an argument to the next function. The result of a pipeline execution is the return value of the last function in the pipeline. If any function in the pipeline is asynchronous, the result of the pipeline execution is a Promise.
20
26
  *
21
27
  * ```javascript [playground]
22
28
  * const syncAdd123 = pipe([
@@ -36,6 +42,17 @@ const __ = require('./_internal/placeholder')
36
42
  * asyncAdd123(5).then(console.log) // 11
37
43
  * ```
38
44
  *
45
+ * `pipe` supports a mathematical API
46
+ *
47
+ * ```javascript [playground]
48
+ * const appendB = x => x + 'b'
49
+ * const appendC = x => x + 'c'
50
+ *
51
+ * const appendBC = pipe(appendB, appendC)
52
+ *
53
+ * console.log(appendBC(a)) // 'abc'
54
+ * ```
55
+ *
39
56
  * When passed any amount of arguments before the array of functions, `pipe` executes eagerly; the array of functions is immediately invoked with the supplied arguments.
40
57
  *
41
58
  * ```javascript [playground]
@@ -54,6 +71,12 @@ const __ = require('./_internal/placeholder')
54
71
  * ])
55
72
  * ```
56
73
  *
74
+ * See also:
75
+ * * [compose](/docs/compose)
76
+ * * [tap](/docs/tap)
77
+ * * [switchCase](/docs/switchCase)
78
+ * * [tryCatch](/docs/tryCatch)
79
+ *
57
80
  * @execution series
58
81
  *
59
82
  * @transducing
@@ -61,6 +84,10 @@ const __ = require('./_internal/placeholder')
61
84
  * @since 1.6.0
62
85
  */
63
86
  const pipe = function (...args) {
87
+ if (typeof args[0] == 'function') {
88
+ return args.reduce(funcConcat)
89
+ }
90
+
64
91
  const funcs = args.pop()
65
92
  const pipeline = funcs.reduce(funcConcat)
66
93