rubico 2.8.5 → 2.10.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/README.md +2 -1
  2. package/_internal/FlatMappingAsyncIterator.js +41 -30
  3. package/_internal/LinkedList.js +54 -0
  4. package/_internal/LinkedList.test.js +34 -0
  5. package/_internal/MappingAsyncIterator.js +65 -15
  6. package/_internal/SerialMappingAsyncIterator.js +79 -0
  7. package/_internal/curryArity.js +3 -3
  8. package/_internal/iteratorFind.js +0 -2
  9. package/_internal/iteratorForEachSeries.js +1 -1
  10. package/_internal/objectFlatten.js +4 -1
  11. package/all.js +33 -59
  12. package/and.js +1 -1
  13. package/assign.js +14 -16
  14. package/compose.js +12 -13
  15. package/curry.js +1 -1
  16. package/dist/Transducer.es.js +1 -1
  17. package/dist/Transducer.es.min.js +1 -1
  18. package/dist/Transducer.js +1 -1
  19. package/dist/Transducer.min.js +1 -1
  20. package/dist/Transducer.mjs +1 -1
  21. package/dist/__.es.js +1 -1
  22. package/dist/__.es.min.js +1 -1
  23. package/dist/__.js +1 -1
  24. package/dist/__.min.js +1 -1
  25. package/dist/__.mjs +1 -1
  26. package/dist/all.es.js +1 -1
  27. package/dist/all.es.min.js +1 -1
  28. package/dist/all.js +1 -1
  29. package/dist/all.min.js +1 -1
  30. package/dist/all.mjs +1 -1
  31. package/dist/always.es.js +1 -1
  32. package/dist/always.es.min.js +1 -1
  33. package/dist/always.js +1 -1
  34. package/dist/always.min.js +1 -1
  35. package/dist/always.mjs +1 -1
  36. package/dist/and.es.js +1 -1
  37. package/dist/and.es.min.js +1 -1
  38. package/dist/and.js +1 -1
  39. package/dist/and.min.js +1 -1
  40. package/dist/and.mjs +1 -1
  41. package/dist/assign.es.js +1 -1
  42. package/dist/assign.es.min.js +1 -1
  43. package/dist/assign.js +1 -1
  44. package/dist/assign.min.js +1 -1
  45. package/dist/assign.mjs +1 -1
  46. package/dist/compose.es.js +1 -1
  47. package/dist/compose.es.min.js +1 -1
  48. package/dist/compose.js +1 -1
  49. package/dist/compose.min.js +1 -1
  50. package/dist/compose.mjs +1 -1
  51. package/dist/curry.es.js +4 -4
  52. package/dist/curry.es.min.js +2 -2
  53. package/dist/curry.js +4 -4
  54. package/dist/curry.min.js +2 -2
  55. package/dist/curry.mjs +4 -4
  56. package/dist/eq.es.js +1 -1
  57. package/dist/eq.es.min.js +1 -1
  58. package/dist/eq.js +1 -1
  59. package/dist/eq.min.js +1 -1
  60. package/dist/eq.mjs +1 -1
  61. package/dist/every.es.js +1 -1
  62. package/dist/every.es.min.js +1 -1
  63. package/dist/every.js +1 -1
  64. package/dist/every.min.js +1 -1
  65. package/dist/every.mjs +1 -1
  66. package/dist/filter.es.js +4 -4
  67. package/dist/filter.es.min.js +2 -2
  68. package/dist/filter.js +4 -4
  69. package/dist/filter.min.js +2 -2
  70. package/dist/filter.mjs +4 -4
  71. package/dist/flatMap.es.js +44 -28
  72. package/dist/flatMap.es.min.js +2 -2
  73. package/dist/flatMap.js +44 -28
  74. package/dist/flatMap.min.js +2 -2
  75. package/dist/flatMap.mjs +44 -28
  76. package/dist/forEach.es.js +6 -6
  77. package/dist/forEach.es.min.js +2 -2
  78. package/dist/forEach.js +6 -6
  79. package/dist/forEach.min.js +2 -2
  80. package/dist/forEach.mjs +6 -6
  81. package/dist/get.es.js +27 -3
  82. package/dist/get.es.min.js +2 -2
  83. package/dist/get.js +27 -3
  84. package/dist/get.min.js +2 -2
  85. package/dist/get.mjs +27 -3
  86. package/dist/gt.es.js +1 -1
  87. package/dist/gt.es.min.js +1 -1
  88. package/dist/gt.js +1 -1
  89. package/dist/gt.min.js +1 -1
  90. package/dist/gt.mjs +1 -1
  91. package/dist/gte.es.js +1 -1
  92. package/dist/gte.es.min.js +1 -1
  93. package/dist/gte.js +1 -1
  94. package/dist/gte.min.js +1 -1
  95. package/dist/gte.mjs +1 -1
  96. package/dist/lt.es.js +1 -1
  97. package/dist/lt.es.min.js +1 -1
  98. package/dist/lt.js +1 -1
  99. package/dist/lt.min.js +1 -1
  100. package/dist/lt.mjs +1 -1
  101. package/dist/lte.es.js +1 -1
  102. package/dist/lte.es.min.js +1 -1
  103. package/dist/lte.js +1 -1
  104. package/dist/lte.min.js +1 -1
  105. package/dist/lte.mjs +1 -1
  106. package/dist/map.es.js +190 -42
  107. package/dist/map.es.min.js +2 -2
  108. package/dist/map.js +190 -42
  109. package/dist/map.min.js +2 -2
  110. package/dist/map.mjs +190 -42
  111. package/dist/not.es.js +1 -1
  112. package/dist/not.es.min.js +1 -1
  113. package/dist/not.js +1 -1
  114. package/dist/not.min.js +1 -1
  115. package/dist/not.mjs +1 -1
  116. package/dist/omit.es.js +1 -1
  117. package/dist/omit.es.min.js +1 -1
  118. package/dist/omit.js +1 -1
  119. package/dist/omit.min.js +1 -1
  120. package/dist/omit.mjs +1 -1
  121. package/dist/or.es.js +1 -1
  122. package/dist/or.es.min.js +1 -1
  123. package/dist/or.js +1 -1
  124. package/dist/or.min.js +1 -1
  125. package/dist/or.mjs +1 -1
  126. package/dist/pick.es.js +1 -1
  127. package/dist/pick.es.min.js +1 -1
  128. package/dist/pick.js +1 -1
  129. package/dist/pick.min.js +1 -1
  130. package/dist/pick.mjs +1 -1
  131. package/dist/pipe.es.js +1 -1
  132. package/dist/pipe.es.min.js +1 -1
  133. package/dist/pipe.js +1 -1
  134. package/dist/pipe.min.js +1 -1
  135. package/dist/pipe.mjs +1 -1
  136. package/dist/reduce.es.js +1 -1
  137. package/dist/reduce.es.min.js +1 -1
  138. package/dist/reduce.js +1 -1
  139. package/dist/reduce.min.js +1 -1
  140. package/dist/reduce.mjs +1 -1
  141. package/dist/rubico.es.js +238 -83
  142. package/dist/rubico.es.min.js +2 -2
  143. package/dist/rubico.global.js +238 -83
  144. package/dist/rubico.global.min.js +2 -2
  145. package/dist/rubico.js +238 -83
  146. package/dist/rubico.min.js +2 -2
  147. package/dist/rubico.mjs +238 -83
  148. package/dist/set.es.js +1 -1
  149. package/dist/set.es.min.js +1 -1
  150. package/dist/set.js +1 -1
  151. package/dist/set.min.js +1 -1
  152. package/dist/set.mjs +1 -1
  153. package/dist/some.es.js +1 -1
  154. package/dist/some.es.min.js +1 -1
  155. package/dist/some.js +1 -1
  156. package/dist/some.min.js +1 -1
  157. package/dist/some.mjs +1 -1
  158. package/dist/switchCase.es.js +1 -1
  159. package/dist/switchCase.es.min.js +1 -1
  160. package/dist/switchCase.js +1 -1
  161. package/dist/switchCase.min.js +1 -1
  162. package/dist/switchCase.mjs +1 -1
  163. package/dist/tap.es.js +1 -1
  164. package/dist/tap.es.min.js +1 -1
  165. package/dist/tap.js +1 -1
  166. package/dist/tap.min.js +1 -1
  167. package/dist/tap.mjs +1 -1
  168. package/dist/thunkify.es.js +1 -1
  169. package/dist/thunkify.es.min.js +1 -1
  170. package/dist/thunkify.js +1 -1
  171. package/dist/thunkify.min.js +1 -1
  172. package/dist/thunkify.mjs +1 -1
  173. package/dist/transform.es.js +1 -1
  174. package/dist/transform.es.min.js +1 -1
  175. package/dist/transform.js +1 -1
  176. package/dist/transform.min.js +1 -1
  177. package/dist/transform.mjs +1 -1
  178. package/dist/tryCatch.es.js +1 -1
  179. package/dist/tryCatch.es.min.js +1 -1
  180. package/dist/tryCatch.js +1 -1
  181. package/dist/tryCatch.min.js +1 -1
  182. package/dist/tryCatch.mjs +1 -1
  183. package/dist/x/append.es.js +1 -1
  184. package/dist/x/append.es.min.js +1 -1
  185. package/dist/x/append.js +1 -1
  186. package/dist/x/append.min.js +1 -1
  187. package/dist/x/append.mjs +1 -1
  188. package/dist/x/callProp.es.js +1 -1
  189. package/dist/x/callProp.es.min.js +1 -1
  190. package/dist/x/callProp.js +1 -1
  191. package/dist/x/callProp.min.js +1 -1
  192. package/dist/x/callProp.mjs +1 -1
  193. package/dist/x/defaultsDeep.es.js +1 -1
  194. package/dist/x/defaultsDeep.es.min.js +1 -1
  195. package/dist/x/defaultsDeep.js +1 -1
  196. package/dist/x/defaultsDeep.min.js +1 -1
  197. package/dist/x/defaultsDeep.mjs +1 -1
  198. package/dist/x/differenceWith.es.js +1 -1
  199. package/dist/x/differenceWith.es.min.js +1 -1
  200. package/dist/x/differenceWith.js +1 -1
  201. package/dist/x/differenceWith.min.js +1 -1
  202. package/dist/x/differenceWith.mjs +1 -1
  203. package/dist/x/filterOut.es.js +4 -4
  204. package/dist/x/filterOut.es.min.js +2 -2
  205. package/dist/x/filterOut.js +4 -4
  206. package/dist/x/filterOut.min.js +2 -2
  207. package/dist/x/filterOut.mjs +4 -4
  208. package/dist/x/find.es.js +1 -3
  209. package/dist/x/find.es.min.js +1 -1
  210. package/dist/x/find.js +1 -3
  211. package/dist/x/find.min.js +1 -1
  212. package/dist/x/find.mjs +1 -3
  213. package/dist/x/findIndex.es.js +1 -1
  214. package/dist/x/findIndex.es.min.js +1 -1
  215. package/dist/x/findIndex.js +1 -1
  216. package/dist/x/findIndex.min.js +1 -1
  217. package/dist/x/findIndex.mjs +1 -1
  218. package/dist/x/first.es.js +1 -1
  219. package/dist/x/first.es.min.js +1 -1
  220. package/dist/x/first.js +1 -1
  221. package/dist/x/first.min.js +1 -1
  222. package/dist/x/first.mjs +1 -1
  223. package/dist/x/flatten.es.js +44 -28
  224. package/dist/x/flatten.es.min.js +2 -2
  225. package/dist/x/flatten.js +44 -28
  226. package/dist/x/flatten.min.js +2 -2
  227. package/dist/x/flatten.mjs +44 -28
  228. package/dist/x/groupBy.es.js +1 -1
  229. package/dist/x/groupBy.es.min.js +1 -1
  230. package/dist/x/groupBy.js +1 -1
  231. package/dist/x/groupBy.min.js +1 -1
  232. package/dist/x/groupBy.mjs +1 -1
  233. package/dist/x/has.es.js +1 -1
  234. package/dist/x/has.es.min.js +1 -1
  235. package/dist/x/has.js +1 -1
  236. package/dist/x/has.min.js +1 -1
  237. package/dist/x/has.mjs +1 -1
  238. package/dist/x/identity.es.js +1 -1
  239. package/dist/x/identity.es.min.js +1 -1
  240. package/dist/x/identity.js +1 -1
  241. package/dist/x/identity.min.js +1 -1
  242. package/dist/x/identity.mjs +1 -1
  243. package/dist/x/includes.es.js +1 -1
  244. package/dist/x/includes.es.min.js +1 -1
  245. package/dist/x/includes.js +1 -1
  246. package/dist/x/includes.min.js +1 -1
  247. package/dist/x/includes.mjs +1 -1
  248. package/dist/x/isDeepEqual.es.js +1 -1
  249. package/dist/x/isDeepEqual.es.min.js +1 -1
  250. package/dist/x/isDeepEqual.js +1 -1
  251. package/dist/x/isDeepEqual.min.js +1 -1
  252. package/dist/x/isDeepEqual.mjs +1 -1
  253. package/dist/x/isEmpty.es.js +1 -1
  254. package/dist/x/isEmpty.es.min.js +1 -1
  255. package/dist/x/isEmpty.js +1 -1
  256. package/dist/x/isEmpty.min.js +1 -1
  257. package/dist/x/isEmpty.mjs +1 -1
  258. package/dist/x/isEqual.es.js +1 -1
  259. package/dist/x/isEqual.es.min.js +1 -1
  260. package/dist/x/isEqual.js +1 -1
  261. package/dist/x/isEqual.min.js +1 -1
  262. package/dist/x/isEqual.mjs +1 -1
  263. package/dist/x/isFunction.es.js +1 -1
  264. package/dist/x/isFunction.es.min.js +1 -1
  265. package/dist/x/isFunction.js +1 -1
  266. package/dist/x/isFunction.min.js +1 -1
  267. package/dist/x/isFunction.mjs +1 -1
  268. package/dist/x/isIn.es.js +1 -1
  269. package/dist/x/isIn.es.min.js +1 -1
  270. package/dist/x/isIn.js +1 -1
  271. package/dist/x/isIn.min.js +1 -1
  272. package/dist/x/isIn.mjs +1 -1
  273. package/dist/x/isObject.es.js +1 -1
  274. package/dist/x/isObject.es.min.js +1 -1
  275. package/dist/x/isObject.js +1 -1
  276. package/dist/x/isObject.min.js +1 -1
  277. package/dist/x/isObject.mjs +1 -1
  278. package/dist/x/isString.es.js +1 -1
  279. package/dist/x/isString.es.min.js +1 -1
  280. package/dist/x/isString.js +1 -1
  281. package/dist/x/isString.min.js +1 -1
  282. package/dist/x/isString.mjs +1 -1
  283. package/dist/x/keys.es.js +1 -1
  284. package/dist/x/keys.es.min.js +1 -1
  285. package/dist/x/keys.js +1 -1
  286. package/dist/x/keys.min.js +1 -1
  287. package/dist/x/keys.mjs +1 -1
  288. package/dist/x/last.es.js +1 -1
  289. package/dist/x/last.es.min.js +1 -1
  290. package/dist/x/last.js +1 -1
  291. package/dist/x/last.min.js +1 -1
  292. package/dist/x/last.mjs +1 -1
  293. package/dist/x/maxBy.es.js +27 -23
  294. package/dist/x/maxBy.es.min.js +2 -2
  295. package/dist/x/maxBy.js +27 -23
  296. package/dist/x/maxBy.min.js +2 -2
  297. package/dist/x/maxBy.mjs +27 -23
  298. package/dist/x/noop.es.js +1 -1
  299. package/dist/x/noop.es.min.js +1 -1
  300. package/dist/x/noop.js +1 -1
  301. package/dist/x/noop.min.js +1 -1
  302. package/dist/x/noop.mjs +1 -1
  303. package/dist/x/pluck.es.js +194 -44
  304. package/dist/x/pluck.es.min.js +2 -2
  305. package/dist/x/pluck.js +194 -44
  306. package/dist/x/pluck.min.js +2 -2
  307. package/dist/x/pluck.mjs +194 -44
  308. package/dist/x/prepend.es.js +1 -1
  309. package/dist/x/prepend.es.min.js +1 -1
  310. package/dist/x/prepend.js +1 -1
  311. package/dist/x/prepend.min.js +1 -1
  312. package/dist/x/prepend.mjs +1 -1
  313. package/dist/x/size.es.js +1 -1
  314. package/dist/x/size.es.min.js +1 -1
  315. package/dist/x/size.js +1 -1
  316. package/dist/x/size.min.js +1 -1
  317. package/dist/x/size.mjs +1 -1
  318. package/dist/x/trace.es.js +1 -1
  319. package/dist/x/trace.es.min.js +1 -1
  320. package/dist/x/trace.js +1 -1
  321. package/dist/x/trace.min.js +1 -1
  322. package/dist/x/trace.mjs +1 -1
  323. package/dist/x/unionWith.es.js +1 -1
  324. package/dist/x/unionWith.es.min.js +1 -1
  325. package/dist/x/unionWith.js +1 -1
  326. package/dist/x/unionWith.min.js +1 -1
  327. package/dist/x/unionWith.mjs +1 -1
  328. package/dist/x/uniq.es.js +1 -1
  329. package/dist/x/uniq.es.min.js +1 -1
  330. package/dist/x/uniq.js +1 -1
  331. package/dist/x/uniq.min.js +1 -1
  332. package/dist/x/uniq.mjs +1 -1
  333. package/dist/x/unless.es.js +1 -1
  334. package/dist/x/unless.es.min.js +1 -1
  335. package/dist/x/unless.js +1 -1
  336. package/dist/x/unless.min.js +1 -1
  337. package/dist/x/unless.mjs +1 -1
  338. package/dist/x/values.es.js +1 -1
  339. package/dist/x/values.es.min.js +1 -1
  340. package/dist/x/values.js +1 -1
  341. package/dist/x/values.min.js +1 -1
  342. package/dist/x/values.mjs +1 -1
  343. package/dist/x/when.es.js +1 -1
  344. package/dist/x/when.es.min.js +1 -1
  345. package/dist/x/when.js +1 -1
  346. package/dist/x/when.min.js +1 -1
  347. package/dist/x/when.mjs +1 -1
  348. package/eq.js +2 -2
  349. package/es.js +238 -83
  350. package/every.js +2 -2
  351. package/filter.js +4 -4
  352. package/flatMap.js +61 -54
  353. package/forEach.js +33 -56
  354. package/get.js +49 -25
  355. package/gt.js +2 -2
  356. package/gte.js +2 -2
  357. package/index.js +238 -83
  358. package/lt.js +2 -2
  359. package/lte.js +2 -2
  360. package/map.js +115 -151
  361. package/monad/Mux.js +6 -4
  362. package/monad/PossiblePromise.js +6 -4
  363. package/monad/README.md +61 -40
  364. package/monad/Struct.js +6 -4
  365. package/not.js +1 -1
  366. package/omit.js +22 -19
  367. package/or.js +1 -1
  368. package/package.json +1 -1
  369. package/pick.js +14 -11
  370. package/pipe.js +18 -24
  371. package/reduce.js +1 -1
  372. package/set.js +17 -18
  373. package/some.js +2 -2
  374. package/switchCase.js +51 -43
  375. package/tap.js +17 -23
  376. package/transform.js +1 -1
  377. package/tryCatch.js +16 -24
  378. package/x/defaultsDeep.js +1 -1
  379. package/x/defaultsDeep.test.js +1 -1
  380. package/_internal/NextIteration.js +0 -12
  381. package/_internal/generatorFunctionFilter.js +0 -28
  382. package/_internal/iterationMap.js +0 -27
package/not.js CHANGED
@@ -59,7 +59,7 @@ const _not = function (args, predicate) {
59
59
  * not(promise).then(console.log) // true
60
60
  * ```
61
61
  *
62
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
62
+ * Any promises passed in data argument position are resolved for their values before further execution.
63
63
  *
64
64
  * ```javascript [playground]
65
65
  * const isOdd = number => number % 2 == 1
package/omit.js CHANGED
@@ -20,17 +20,21 @@ const _omit = function (source, paths) {
20
20
  *
21
21
  * @synopsis
22
22
  * ```coffeescript [specscript]
23
- * omit(source Promise|Object, paths Array<string>) -> result Object
24
- * omit(paths Array<string>)(source Object) -> result Object
23
+ * paths Array<string>
24
+ *
25
+ * omit(Promise|Object, paths) -> Object
26
+ * omit(paths)(Object) -> Object
25
27
  * ```
26
28
  *
27
29
  * @description
28
- * Create a new object by excluding provided paths on a source object.
30
+ * Object constructor. Creates a new object by excluding provided paths on an argument object.
29
31
  *
30
32
  * ```javascript [playground]
31
- * console.log(
32
- * omit({ _id: '1', name: 'John' }, ['_id']),
33
- * ) // { name: 'John' }
33
+ * const argumentObject = { _id: '1', name: 'John' }
34
+ *
35
+ * const newObject = omit(argumentObject, ['_id'])
36
+ *
37
+ * console.log(newObject)
34
38
  * ```
35
39
  *
36
40
  * `omit` supports three types of path patterns for nested property access
@@ -40,33 +44,32 @@ const _omit = function (source, paths) {
40
44
  * * an array of keys or indices - `['a', 0, 'value']`
41
45
  *
42
46
  * ```javascript [playground]
43
- * console.log(
44
- * omit(['a.b.d'])({
45
- * a: {
46
- * b: {
47
- * c: 'hello',
48
- * d: 'goodbye',
49
- * },
47
+ * const omittedABD = omit(['a.b.d'])({
48
+ * a: {
49
+ * b: {
50
+ * c: 'hello',
51
+ * d: 'goodbye',
50
52
  * },
51
- * }),
52
- * ) // { a: { b: { c: 'hello' } } }
53
+ * },
54
+ * })
55
+ *
56
+ * console.log(omittedABD)
53
57
  * ```
54
58
  *
55
- * Compose `omit` inside a `pipe` with its lazy API
59
+ * `omit` supports a lazy interface for composability.
56
60
  *
57
61
  * ```javascript [playground]
58
62
  * pipe({ a: 1, b: 2, c: 3 }, [
59
63
  * map(number => number ** 2),
60
64
  * omit(['a', 'b']),
61
- * console.log, // { c: 9 }
65
+ * console.log,
62
66
  * ])
63
67
  * ```
64
68
  *
65
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
69
+ * If the argument object is a promise, it is resolved for its value before further execution for the eager interface only.
66
70
  *
67
71
  * ```javascript [playground]
68
72
  * omit(Promise.resolve({ a: 1, b: 2, c: 3 }), ['a', 'b']).then(console.log)
69
- * // { c: 3 }
70
73
  * ```
71
74
  *
72
75
  * See also:
package/or.js CHANGED
@@ -145,7 +145,7 @@ const areAnyPredicatesTruthy = function (args, predicates) {
145
145
  * console.log(condition) // false
146
146
  * ```
147
147
  *
148
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
148
+ * Any promises passed in data argument position are resolved for their values before further execution.
149
149
  *
150
150
  * ```javascript [playground]
151
151
  * or(Promise.resolve('aaa'), [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rubico",
3
- "version": "2.8.5",
3
+ "version": "2.10.0",
4
4
  "description": "[a]synchronous functional programming",
5
5
  "author": "Richard Tong",
6
6
  "license": "CFOSS",
package/pick.js CHANGED
@@ -27,17 +27,21 @@ const _pick = function (source, keys) {
27
27
  *
28
28
  * @synopsis
29
29
  * ```coffeescript [specscript]
30
- * pick(source Promise|Object, keys Array<string>) -> result Object
31
- * pick(keys Array<string>)(source Object) -> result Object
30
+ * keys Array<string>
31
+ *
32
+ * pick(Promise|Object, keys) -> Object
33
+ * pick(keys)(Object) -> Object
32
34
  * ```
33
35
  *
34
36
  * @description
35
- * Creates a new object from a source object by selecting provided keys. If a provided key does not exist on the source object, excludes it from the resulting object.
37
+ * Object constructor. Creates a new object from an argument object by selecting keys from an array. If a key does not exist on the argument object, it is excluded from the new object.
36
38
  *
37
39
  * ```javascript [playground]
38
- * console.log(
39
- * pick({ goodbye: 1, world: 2 }, ['hello', 'world']),
40
- * ) // { world: 2 }
40
+ * const argumentObject = { goodbye: 1, world: 2 }
41
+ *
42
+ * const newObject = pick(argumentObject, ['hello', 'world'])
43
+ *
44
+ * console.log(newObject)
41
45
  * ```
42
46
  *
43
47
  * `pick` supports three types of path patterns for nested property access
@@ -49,24 +53,23 @@ const _pick = function (source, keys) {
49
53
  * ```javascript [playground]
50
54
  * const nested = { a: { b: { c: { d: 1, e: [2, 3] } } } }
51
55
  *
52
- * console.log(pick(['a.b.c.d'])(nested)) // { a: { b: { c: { d: 1 } } } }
56
+ * console.log(pick(nested, ['a.b.c.d']))
53
57
  * ```
54
58
  *
55
- * Compose `pick` inside a `pipe` with its lazy API.
59
+ * `pick` supports a lazy interface for composability.
56
60
  *
57
61
  * ```javascript [playground]
58
62
  * pipe({ a: 1, b: 2, c: 3 }, [
59
63
  * map(number => number ** 2),
60
64
  * pick(['a', 'c']),
61
- * console.log, // { a: 1, c: 9 }
65
+ * console.log,
62
66
  * ])
63
67
  * ```
64
68
  *
65
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
69
+ * If the argument object is a promise, it is resolved for its value before further execution for the eager interface only.
66
70
  *
67
71
  * ```javascript [playground]
68
72
  * pick(Promise.resolve({ a: 1, b: 2, c: 3 }), ['a', 'b']).then(console.log)
69
- * // { a: 1, b: 2 }
70
73
  * ```
71
74
  *
72
75
  * See also:
package/pipe.js CHANGED
@@ -10,41 +10,35 @@ const __ = require('./_internal/placeholder')
10
10
  *
11
11
  * @synopsis
12
12
  * ```coffeescript [specscript]
13
- * args Array<any>
14
- * argsOrPromises Array<Promise|any>
15
- *
16
- * type SyncOrAsyncFunction = (...args)=>Promise|any
13
+ * type SyncOrAsyncFunction = (...arguments)=>Promise|any
17
14
  * type UnarySyncOrAsyncFunction = any=>Promise|any
18
15
  *
19
16
  * funcs [SyncOrAsyncFunction, ...Array<UnarySyncOrAsyncFunction>]
20
17
  *
21
- * pipe(funcs)(...args) -> result Promise|any
22
- * pipe(...argsOrPromises, funcs) -> result Promise|any
23
- * pipe(...funcs)(...args) -> result Promise|any
18
+ * pipe(funcs)(...arguments) -> Promise|any
19
+ * pipe(...arguments, funcs) -> Promise|any
20
+ * pipe(...funcs)(...arguments) -> Promise|any
24
21
  * ```
25
22
  *
26
23
  * @description
27
- * 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. All arguments provided to the pipeline are provided to the first function in the pipeline. If any function in the pipeline is asynchronous, the result of the pipeline execution is a Promise.
24
+ * Creates a function pipeline from multiple functions. Each function in the function pipeline is evaluated in series starting from the first function in the function pipeline, passing its return value as the first and only argument to the next function in the pipeline. The result of the execution of a function pipeline is the return value of the last function in the function pipeline. If any function in the function pipeline is asynchronous, the result of the execution of the function pipeline is a promise.
28
25
  *
29
- * ```javascript [playground]
30
- * const syncAdd123 = pipe([
31
- * number => number + 1,
32
- * number => number + 2,
33
- * number => number + 3,
34
- * ])
26
+ * Multiple arguments may be provided to a function pipeline, in which case they are passed directly to the first function in the function pipeline.
35
27
  *
36
- * console.log(syncAdd123(5)) // 11
28
+ * ```javascript [playground]
29
+ * function add(a, b, c) {
30
+ * return a + b + c
31
+ * }
37
32
  *
38
- * const asyncAdd123 = pipe([
39
- * async number => number + 1,
40
- * async number => number + 2,
41
- * async number => number + 3,
33
+ * const pipeline = pipe([
34
+ * add,
35
+ * console.log,
42
36
  * ])
43
37
  *
44
- * asyncAdd123(5).then(console.log) // 11
38
+ * pipeline(1, 2, 3)
45
39
  * ```
46
40
  *
47
- * `pipe` supports a mathematical API.
41
+ * Functions may be passed to `pipe` as arguments instead of as items of an array.
48
42
  *
49
43
  * ```javascript [playground]
50
44
  * const appendB = x => x + 'b'
@@ -52,14 +46,14 @@ const __ = require('./_internal/placeholder')
52
46
  *
53
47
  * const appendBC = pipe(appendB, appendC)
54
48
  *
55
- * console.log(appendBC('a')) // 'abc'
49
+ * console.log(appendBC('a'))
56
50
  * ```
57
51
  *
58
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
52
+ * Any promises in `arguments` are resolved for their values before further execution for the eager interface only.
59
53
  *
60
54
  * ```javascript [playground]
61
55
  * pipe(Promise.resolve(1), 2, Promise.resolve(3), [
62
- * console.log, // [1, 2, 3]
56
+ * console.log,
63
57
  * ])
64
58
  * ```
65
59
  *
package/reduce.js CHANGED
@@ -193,7 +193,7 @@ const _reduce = function (collection, reducer, initial) {
193
193
  * reduce(asyncGenerate(), asyncAdd).then(console.log) // 15
194
194
  * ```
195
195
  *
196
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
196
+ * Any promises passed in data argument position are resolved for their values before further execution.
197
197
  *
198
198
  * ```javascript [playground]
199
199
  * const add = (a, b) => a + b
package/set.js CHANGED
@@ -38,20 +38,19 @@ const _set = function (obj, path, value) {
38
38
  *
39
39
  * @synopsis
40
40
  * ```coffeescript [specscript]
41
- * set(
42
- * object Promise|Object,
43
- * path string|Array<string|number>,
44
- * value function|any,
45
- * ) -> result Promise|Object
41
+ * path string|Array<string|number>
42
+ * resolver (...arguments)=>Promise|any
43
+ * value any
46
44
  *
47
- * set(
48
- * path string|Array<string|number>,
49
- * value function|any,
50
- * )(object Object) -> result Promise|Object
45
+ * set(Promise|Object, path, value) -> Promise|Object
46
+ * set(Promise|Object, path, resolver) -> Promise|Object
47
+ *
48
+ * set(path, value)(Object) -> Promise|Object
49
+ * set(path, resolver)(Object) -> Promise|Object
51
50
  * ```
52
51
  *
53
52
  * @description
54
- * Sets a property on a new object shallow cloned from the argument object given a path denoted by a string, number, or an array of string or numbers.
53
+ * Property setter. Shallow clones the argument object and sets a property on the shallow cloned object at the path denoted by a string, number, or array of string or numbers.
55
54
  *
56
55
  * `set` supports three types of path patterns for nested property access.
57
56
  *
@@ -60,15 +59,15 @@ const _set = function (obj, path, value) {
60
59
  * * an array of keys or indices - `['a', 0, 'value']`
61
60
  *
62
61
  * ```javascript [playground]
63
- * console.log(set({ b: 2 }, 'a', 1)) // { a: 1, b: 2 }
62
+ * console.log(set({ b: 2 }, 'a', 1))
64
63
  *
65
64
  * const nestedAC2 = { a: { c: 2 } }
66
65
  *
67
- * console.log(set(nestedAC2, 'a.b', 1)) // { a : { b: 1, c: 2 }}
66
+ * console.log(set(nestedAC2, 'a.b', 1))
68
67
  *
69
68
  * const nestedA0BC3 = { a: [{ b: { c: 3 } }] }
70
69
  *
71
- * console.log(set(nestedA0BC3, 'a[0].b.c', 4)) // { a: [{ b: { c: 4 } }] }
70
+ * console.log(set(nestedA0BC3, 'a[0].b.c', 4))
72
71
  * ```
73
72
  *
74
73
  * The property value may be a function, in which case it is treated as a resolver and provided the argument object to resolve the value to set.
@@ -78,22 +77,22 @@ const _set = function (obj, path, value) {
78
77
  *
79
78
  * const myNewObj = set('b', obj => obj.a + 2)(myObj)
80
79
  *
81
- * console.log(myNewObj) // { a: 1, b: 3 }
80
+ * console.log(myNewObj)
82
81
  * ```
83
82
  *
84
- * `set` supports a lazy API for composability.
83
+ * `set` supports a lazy interface for composability.
85
84
  *
86
85
  * ```javascript [playground]
87
86
  * pipe({ a: 1 }, [
88
87
  * set('b', 2),
89
- * console.log, // { a: 1, b: 2 }
88
+ * console.log,
90
89
  * ])
91
90
  * ```
92
91
  *
93
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
92
+ * If the argument object is a promise, it is resolved for its value before further execution for the eager interface only.
94
93
  *
95
94
  * ```javascript [playground]
96
- * set(Promise.resolve({}), 'a', 1).then(console.log) // { a: 1 }
95
+ * set(Promise.resolve({}), 'a', 1).then(console.log)
97
96
  * ```
98
97
  *
99
98
  * See also:
package/some.js CHANGED
@@ -94,7 +94,7 @@ const _some = function (collection, predicate) {
94
94
  * promise.then(console.log) // true
95
95
  * ```
96
96
  *
97
- * `some` supports a lazy API for composability.
97
+ * `some` supports a lazy interface for composability.
98
98
  *
99
99
  * ```javascript [playground]
100
100
  * pipe([1, 2, 3], [
@@ -103,7 +103,7 @@ const _some = function (collection, predicate) {
103
103
  * ])
104
104
  * ```
105
105
  *
106
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
106
+ * Any promises passed in data argument position are resolved for their values before further execution.
107
107
  *
108
108
  * ```javascript [playground]
109
109
  * some(Promise.resolve([1, 2, 3, 4, 5]), n => n > 6).then(console.log) // false
package/switchCase.js CHANGED
@@ -12,84 +12,92 @@ const curryArgs3 = require('./_internal/curryArgs3')
12
12
  *
13
13
  * @synopsis
14
14
  * ```coffeescript [specscript]
15
- * args Array<any>
16
- * argsOrPromises Array<Promise|any>
15
+ * type SyncOrAsyncPredicate = (...arguments)=>Promise|boolean|any
16
+ * type SyncOrAsyncFunction = (...arguments)=>Promise|any
17
17
  *
18
- * type SyncOrAsyncPredicate = (...args)=>Promise|boolean|any
18
+ * conditionalValues Array<Promise|boolean|any>
19
+ * conditionalFunctionsOrValues Array<SyncOrAsyncPredicate|SyncOrAsyncFunction|Promise|boolean|any>
19
20
  *
20
- * conditionalPromisesOrValues Array<Promise|boolean|any>
21
- * conditionalFuncsOrPromisesOrValues Array<SyncOrAsyncPredicate|Promise|boolean|any>
22
- *
23
- * switchCase(conditionalPromisesOrValues) -> Promise|any
24
- * switchCase(...argsOrPromises, conditionalFuncsOrPromisesOrValues) -> Promise|any
25
- * switchCase(conditionalFuncsOrPromisesOrValues)(...args) -> Promise|any
21
+ * switchCase(conditionalValues) -> Promise|any
22
+ * switchCase(...arguments, conditionalFunctionsOrValues) -> Promise|any
23
+ * switchCase(conditionalFunctionsOrValues)(...arguments) -> Promise|any
26
24
  * ```
27
25
  *
28
26
  * @description
29
- * Function equivalent to the [Conditional (ternary) operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator). Accepts an array of conditional functions that specifies cases as pairings of `predicate` and `resolver` functions with the exception of the last, default resolver. All functions are provided with the same arguments and executed in series. The result of a `switchCase` operation is either the result of the execution the last default resolver, or the result of the execution of the first resolver where the associated predicate tested true.
27
+ * Conditional function operator. Accepts an array of conditional functions or values that specifies cases as function or value pairs with the exception of the last, default function or value. All functions are provided with the same arguments and executed in series. The result of a conditional execution with `switchCase` is the result of the execution of the first truthy function or value pair, the result of the execution of the last, default function, or the provided last, default value.
30
28
  *
31
29
  * ```javascript [playground]
32
- * const fruitIsYellow = fruit => fruit.color == 'yellow'
33
- *
34
- * console.log(
35
- * switchCase({ name: 'plantain', color: 'yellow' }, [
36
- * fruitIsYellow,
37
- * fruit => fruit.name + ' is possibly a banana',
38
- * fruit => fruit.name + ' is probably not a banana',
39
- * ])
40
- * ) // plantain is possibly a banana
30
+ * function isOdd(n) {
31
+ * return n % 2 == 1
32
+ * }
33
+ *
34
+ * switchCase(1, [
35
+ * isOdd,
36
+ * n => console.log(`${n} is odd`),
37
+ * n => console.log(`${n} is even`),
38
+ * ])
41
39
  * ```
42
40
  *
43
- * For composability `switchCase` supports a lazy API.
41
+ * `switchCase` supports a lazy interface for composability.
44
42
  *
45
43
  * ```javascript [playground]
46
- * const fruitIsYellow = fruit => fruit.color == 'yellow'
47
- *
48
44
  * const fruitsGuesser = switchCase([
49
- * fruitIsYellow,
45
+ * fruit => fruit.color == 'yellow',
50
46
  * fruit => fruit.name + ' is possibly a banana',
51
47
  * fruit => fruit.name + ' is probably not a banana',
52
48
  * ])
53
49
  *
54
- * console.log(fruitsGuesser({ name: 'plantain', color: 'yellow' }))
55
- * // plantain is possibly a banana
50
+ * const guess1 = fruitsGuesser({ name: 'plantain', color: 'yellow' })
51
+ * const guess2 = fruitsGuesser({ name: 'apple', color: 'red' })
56
52
  *
57
- * console.log(fruitsGuesser({ name: 'apple', color: 'red' }))
58
- * // apple is probably not a banana
53
+ * console.log(guess1)
54
+ * console.log(guess2)
59
55
  * ```
60
56
  *
61
- * Any function can be replaced with a nonfunction (object or primitive) value to be used directly in the operation.
57
+ * Any item of the conditional array passed to switchCase can be a nonfunction (object or primitive) value.
62
58
  *
63
59
  * ```javascript [playground]
64
- * switchCase(false, [
65
- * async function asyncIdentity(value) {
66
- * return value
67
- * },
68
- * 'something',
69
- * 'default',
70
- * ]).then(console.log) // default
60
+ * function identity (value) {
61
+ * return value
62
+ * }
63
+ *
64
+ * const value = switchCase(false, [
65
+ * identity,
66
+ * 'non-function',
67
+ * 'default-value',
68
+ * ])
69
+ *
70
+ * console.log(value)
71
71
  * ```
72
72
  *
73
- * If every element in the conditional array is a nonfunction value, `switchCase` executes eagerly.
73
+ * If every item in the conditional array is a nonfunction value, `switchCase` executes eagerly.
74
74
  *
75
75
  * ```javascript [playground]
76
76
  * const age = 26
77
77
  *
78
- * const myDrink = switchCase([age >= 21, 'Beer', 'Juice'])
78
+ * const myDrink = switchCase([age >= 21, 'Water', 'Juice'])
79
79
  *
80
- * console.log(myDrink) // Beer
80
+ * console.log(myDrink)
81
81
  * ```
82
82
  *
83
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
83
+ * Any promises in `arguments` are resolved for their values before further execution for the eager interface only. Any promises in the conditional array are resolved before further execution for both the lazy and eager interface.
84
84
  *
85
85
  * ```javascript [playground]
86
86
  * switchCase(Promise.resolve(1), 2, Promise.resolve(3), [
87
87
  * function doValuesAddUpTo6(a, b, c) {
88
- * return a + b + c == 6
88
+ * return a + b + c === 6
89
89
  * },
90
- * (a, b, c) => console.log(`${a} + ${b} + ${c} == 6`),
91
- * (a, b, c) => console.log(`${a} + ${b} + ${c} != 6`),
92
- * ]) // 1 + 2 + 3 == 6
90
+ * (a, b, c) => console.log(`${a} + ${b} + ${c} === 6`),
91
+ * (a, b, c) => console.log(`${a} + ${b} + ${c} !== 6`),
92
+ * ])
93
+ *
94
+ * const promise = switchCase(true, [
95
+ * bool => bool,
96
+ * Promise.resolve(1),
97
+ * Promise.resolve(2),
98
+ * ])
99
+ *
100
+ * promise.then(console.log)
93
101
  * ```
94
102
  *
95
103
  * See also:
package/tap.js CHANGED
@@ -22,19 +22,16 @@ const _tap = function (args, f) {
22
22
  *
23
23
  * @synopsis
24
24
  * ```coffeescript [specscript]
25
- * args Array<any>
26
- * argsOrPromises Array<Promise|any>
27
- *
28
- * type SyncOrAsyncFunction = (...args)=>Promise|any
25
+ * type SyncOrAsyncFunction = (...arguments)=>Promise|any
29
26
  *
30
27
  * f SyncOrAsyncFunction
31
28
  *
32
- * tap(...argsOrPromises, f) -> Promise|args[0]
33
- * tap(f)(...args) -> Promise|args[0]
29
+ * tap(...arguments, f) -> Promise|arguments[0]
30
+ * tap(f)(...arguments) -> Promise|arguments[0]
34
31
  * ```
35
32
  *
36
33
  * @description
37
- * Call a function with provided arguments, returning the first argument. The return value of the function call is discarded.
34
+ * Calls a function with provided arguments, returning the first argument. The return value of the function call is discarded.
38
35
  *
39
36
  * ```javascript [playground]
40
37
  * const pipeline = pipe([
@@ -43,15 +40,13 @@ const _tap = function (args, f) {
43
40
  * tap(value => console.log(value + 'barbaz')),
44
41
  * ])
45
42
  *
46
- * pipeline('foo') // 'foo'
47
- * // 'foobar'
48
- * // 'foobarbaz'
43
+ * pipeline('foo')
49
44
  * ```
50
45
  *
51
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
46
+ * Any promises in `arguments` are resolved for their values before further execution for the eager interface only.
52
47
  *
53
48
  * ```javascript [playground]
54
- * tap(Promise.resolve(1), Promise.resolve(2), 3, console.log) // 1 2 3
49
+ * tap(Promise.resolve(1), Promise.resolve(2), 3, console.log)
55
50
  * ```
56
51
  *
57
52
  * See also:
@@ -108,21 +103,20 @@ const _tapIf = function (predicate, f, args) {
108
103
  *
109
104
  * @synopsis
110
105
  * ```coffeescript [specscript]
111
- * args Array<any>
112
- * argsOrPromises Array<Promise|any>
113
- *
114
- * type SyncOrAsyncPredicate = (...args)=>Promise|boolean|any
115
- * type SyncOrAsyncFunction = (...args)=>Promise|any
106
+ * type SyncOrAsyncPredicate = (...arguments)=>Promise|boolean|any
107
+ * type SyncOrAsyncFunction = (...arguments)=>Promise|any
116
108
  *
117
109
  * predicate SyncOrAsyncPredicate
118
110
  * f SyncOrAsyncFunction
119
111
  *
120
- * tap.if(...argsOrPromises, predicate, f) -> Promise|args[0]
121
- * tap.if(predicate, f)(...args) -> Promise|args[0]
112
+ * tap.if(...arguments, predicate, f) -> Promise|arguments[0]
113
+ * tap.if(predicate, f)(...arguments) -> Promise|arguments[0]
122
114
  * ```
123
115
  *
124
116
  * @description
125
- * A version of `tap` that accepts a predicate function (a function that returns a boolean value) before the function `f` to execute. Only executes `f` if the predicate function tests true. The arguments are the same to both the predicate function and the function to execute `f`.
117
+ * A version of [tap](/docs/tap) that accepts a predicate function before the function to execute and only executes the function if the predicate function tests true.
118
+ *
119
+ * Arguments passed to `tap.if` are provided to both the predicate function and the function to execute.
126
120
  *
127
121
  * ```javascript [playground]
128
122
  * const isOdd = number => number % 2 == 1
@@ -130,13 +124,13 @@ const _tapIf = function (predicate, f, args) {
130
124
  * const logIfOdd = tap.if(isOdd, console.log)
131
125
  *
132
126
  * logIfOdd(2)
133
- * logIfOdd(3) // 3
127
+ * logIfOdd(3)
134
128
  * ```
135
129
  *
136
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
130
+ * Any promises in `arguments` are resolved for their values before further execution for the eager interface only.
137
131
  *
138
132
  * ```javascript [playground]
139
- * tap.if(Promise.resolve(1), n => n < 5, console.log) // 1
133
+ * tap.if(Promise.resolve(1), n => n < 5, console.log)
140
134
  * tap.if(Promise.resolve(6), n => n < 5, console.log)
141
135
  * ```
142
136
  *
package/transform.js CHANGED
@@ -201,7 +201,7 @@ const _transform = function (collection, transducer, initialValue) {
201
201
  * promise.then(console.log)
202
202
  * ```
203
203
  *
204
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
204
+ * Any promises passed in data argument position are resolved for their values before further execution.
205
205
  *
206
206
  * ```javascript [playground]
207
207
  * const promise = transform(