rubico 2.8.4 → 2.8.6

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 (369) hide show
  1. package/README.md +2 -1
  2. package/_internal/curryArity.js +3 -3
  3. package/all.js +28 -53
  4. package/and.js +1 -1
  5. package/assign.js +14 -16
  6. package/compose.js +12 -13
  7. package/curry.js +1 -1
  8. package/dist/Transducer.es.js +1 -1
  9. package/dist/Transducer.es.min.js +1 -1
  10. package/dist/Transducer.js +1 -1
  11. package/dist/Transducer.min.js +1 -1
  12. package/dist/Transducer.mjs +1 -1
  13. package/dist/__.es.js +1 -1
  14. package/dist/__.es.min.js +1 -1
  15. package/dist/__.js +1 -1
  16. package/dist/__.min.js +1 -1
  17. package/dist/__.mjs +1 -1
  18. package/dist/all.es.js +1 -1
  19. package/dist/all.es.min.js +1 -1
  20. package/dist/all.js +1 -1
  21. package/dist/all.min.js +1 -1
  22. package/dist/all.mjs +1 -1
  23. package/dist/always.es.js +1 -1
  24. package/dist/always.es.min.js +1 -1
  25. package/dist/always.js +1 -1
  26. package/dist/always.min.js +1 -1
  27. package/dist/always.mjs +1 -1
  28. package/dist/and.es.js +1 -1
  29. package/dist/and.es.min.js +1 -1
  30. package/dist/and.js +1 -1
  31. package/dist/and.min.js +1 -1
  32. package/dist/and.mjs +1 -1
  33. package/dist/assign.es.js +1 -1
  34. package/dist/assign.es.min.js +1 -1
  35. package/dist/assign.js +1 -1
  36. package/dist/assign.min.js +1 -1
  37. package/dist/assign.mjs +1 -1
  38. package/dist/compose.es.js +1 -1
  39. package/dist/compose.es.min.js +1 -1
  40. package/dist/compose.js +1 -1
  41. package/dist/compose.min.js +1 -1
  42. package/dist/compose.mjs +1 -1
  43. package/dist/curry.es.js +4 -4
  44. package/dist/curry.es.min.js +2 -2
  45. package/dist/curry.js +4 -4
  46. package/dist/curry.min.js +2 -2
  47. package/dist/curry.mjs +4 -4
  48. package/dist/eq.es.js +1 -1
  49. package/dist/eq.es.min.js +1 -1
  50. package/dist/eq.js +1 -1
  51. package/dist/eq.min.js +1 -1
  52. package/dist/eq.mjs +1 -1
  53. package/dist/every.es.js +1 -1
  54. package/dist/every.es.min.js +1 -1
  55. package/dist/every.js +1 -1
  56. package/dist/every.min.js +1 -1
  57. package/dist/every.mjs +1 -1
  58. package/dist/filter.es.js +1 -1
  59. package/dist/filter.es.min.js +1 -1
  60. package/dist/filter.js +1 -1
  61. package/dist/filter.min.js +1 -1
  62. package/dist/filter.mjs +1 -1
  63. package/dist/flatMap.es.js +1 -1
  64. package/dist/flatMap.es.min.js +1 -1
  65. package/dist/flatMap.js +1 -1
  66. package/dist/flatMap.min.js +1 -1
  67. package/dist/flatMap.mjs +1 -1
  68. package/dist/forEach.es.js +1 -1
  69. package/dist/forEach.es.min.js +1 -1
  70. package/dist/forEach.js +1 -1
  71. package/dist/forEach.min.js +1 -1
  72. package/dist/forEach.mjs +1 -1
  73. package/dist/get.es.js +27 -3
  74. package/dist/get.es.min.js +2 -2
  75. package/dist/get.js +27 -3
  76. package/dist/get.min.js +2 -2
  77. package/dist/get.mjs +27 -3
  78. package/dist/gt.es.js +1 -1
  79. package/dist/gt.es.min.js +1 -1
  80. package/dist/gt.js +1 -1
  81. package/dist/gt.min.js +1 -1
  82. package/dist/gt.mjs +1 -1
  83. package/dist/gte.es.js +1 -1
  84. package/dist/gte.es.min.js +1 -1
  85. package/dist/gte.js +1 -1
  86. package/dist/gte.min.js +1 -1
  87. package/dist/gte.mjs +1 -1
  88. package/dist/lt.es.js +1 -1
  89. package/dist/lt.es.min.js +1 -1
  90. package/dist/lt.js +1 -1
  91. package/dist/lt.min.js +1 -1
  92. package/dist/lt.mjs +1 -1
  93. package/dist/lte.es.js +1 -1
  94. package/dist/lte.es.min.js +1 -1
  95. package/dist/lte.js +1 -1
  96. package/dist/lte.min.js +1 -1
  97. package/dist/lte.mjs +1 -1
  98. package/dist/map.es.js +4 -4
  99. package/dist/map.es.min.js +2 -2
  100. package/dist/map.js +4 -4
  101. package/dist/map.min.js +2 -2
  102. package/dist/map.mjs +4 -4
  103. package/dist/not.es.js +1 -1
  104. package/dist/not.es.min.js +1 -1
  105. package/dist/not.js +1 -1
  106. package/dist/not.min.js +1 -1
  107. package/dist/not.mjs +1 -1
  108. package/dist/omit.es.js +1 -1
  109. package/dist/omit.es.min.js +1 -1
  110. package/dist/omit.js +1 -1
  111. package/dist/omit.min.js +1 -1
  112. package/dist/omit.mjs +1 -1
  113. package/dist/or.es.js +1 -1
  114. package/dist/or.es.min.js +1 -1
  115. package/dist/or.js +1 -1
  116. package/dist/or.min.js +1 -1
  117. package/dist/or.mjs +1 -1
  118. package/dist/pick.es.js +1 -1
  119. package/dist/pick.es.min.js +1 -1
  120. package/dist/pick.js +1 -1
  121. package/dist/pick.min.js +1 -1
  122. package/dist/pick.mjs +1 -1
  123. package/dist/pipe.es.js +1 -1
  124. package/dist/pipe.es.min.js +1 -1
  125. package/dist/pipe.js +1 -1
  126. package/dist/pipe.min.js +1 -1
  127. package/dist/pipe.mjs +1 -1
  128. package/dist/reduce.es.js +1 -1
  129. package/dist/reduce.es.min.js +1 -1
  130. package/dist/reduce.js +1 -1
  131. package/dist/reduce.min.js +1 -1
  132. package/dist/reduce.mjs +1 -1
  133. package/dist/rubico.es.js +6 -6
  134. package/dist/rubico.es.min.js +2 -2
  135. package/dist/rubico.global.js +6 -6
  136. package/dist/rubico.global.min.js +2 -2
  137. package/dist/rubico.js +6 -6
  138. package/dist/rubico.min.js +2 -2
  139. package/dist/rubico.mjs +6 -6
  140. package/dist/set.es.js +1 -1
  141. package/dist/set.es.min.js +1 -1
  142. package/dist/set.js +1 -1
  143. package/dist/set.min.js +1 -1
  144. package/dist/set.mjs +1 -1
  145. package/dist/some.es.js +1 -1
  146. package/dist/some.es.min.js +1 -1
  147. package/dist/some.js +1 -1
  148. package/dist/some.min.js +1 -1
  149. package/dist/some.mjs +1 -1
  150. package/dist/switchCase.es.js +1 -1
  151. package/dist/switchCase.es.min.js +1 -1
  152. package/dist/switchCase.js +1 -1
  153. package/dist/switchCase.min.js +1 -1
  154. package/dist/switchCase.mjs +1 -1
  155. package/dist/tap.es.js +1 -1
  156. package/dist/tap.es.min.js +1 -1
  157. package/dist/tap.js +1 -1
  158. package/dist/tap.min.js +1 -1
  159. package/dist/tap.mjs +1 -1
  160. package/dist/thunkify.es.js +1 -1
  161. package/dist/thunkify.es.min.js +1 -1
  162. package/dist/thunkify.js +1 -1
  163. package/dist/thunkify.min.js +1 -1
  164. package/dist/thunkify.mjs +1 -1
  165. package/dist/transform.es.js +1 -1
  166. package/dist/transform.es.min.js +1 -1
  167. package/dist/transform.js +1 -1
  168. package/dist/transform.min.js +1 -1
  169. package/dist/transform.mjs +1 -1
  170. package/dist/tryCatch.es.js +1 -1
  171. package/dist/tryCatch.es.min.js +1 -1
  172. package/dist/tryCatch.js +1 -1
  173. package/dist/tryCatch.min.js +1 -1
  174. package/dist/tryCatch.mjs +1 -1
  175. package/dist/x/append.es.js +1 -1
  176. package/dist/x/append.es.min.js +1 -1
  177. package/dist/x/append.js +1 -1
  178. package/dist/x/append.min.js +1 -1
  179. package/dist/x/append.mjs +1 -1
  180. package/dist/x/callProp.es.js +1 -1
  181. package/dist/x/callProp.es.min.js +1 -1
  182. package/dist/x/callProp.js +1 -1
  183. package/dist/x/callProp.min.js +1 -1
  184. package/dist/x/callProp.mjs +1 -1
  185. package/dist/x/defaultsDeep.es.js +1 -1
  186. package/dist/x/defaultsDeep.es.min.js +1 -1
  187. package/dist/x/defaultsDeep.js +1 -1
  188. package/dist/x/defaultsDeep.min.js +1 -1
  189. package/dist/x/defaultsDeep.mjs +1 -1
  190. package/dist/x/differenceWith.es.js +1 -1
  191. package/dist/x/differenceWith.es.min.js +1 -1
  192. package/dist/x/differenceWith.js +1 -1
  193. package/dist/x/differenceWith.min.js +1 -1
  194. package/dist/x/differenceWith.mjs +1 -1
  195. package/dist/x/filterOut.es.js +1 -1
  196. package/dist/x/filterOut.es.min.js +1 -1
  197. package/dist/x/filterOut.js +1 -1
  198. package/dist/x/filterOut.min.js +1 -1
  199. package/dist/x/filterOut.mjs +1 -1
  200. package/dist/x/find.es.js +1 -1
  201. package/dist/x/find.es.min.js +1 -1
  202. package/dist/x/find.js +1 -1
  203. package/dist/x/find.min.js +1 -1
  204. package/dist/x/find.mjs +1 -1
  205. package/dist/x/findIndex.es.js +1 -1
  206. package/dist/x/findIndex.es.min.js +1 -1
  207. package/dist/x/findIndex.js +1 -1
  208. package/dist/x/findIndex.min.js +1 -1
  209. package/dist/x/findIndex.mjs +1 -1
  210. package/dist/x/first.es.js +1 -1
  211. package/dist/x/first.es.min.js +1 -1
  212. package/dist/x/first.js +1 -1
  213. package/dist/x/first.min.js +1 -1
  214. package/dist/x/first.mjs +1 -1
  215. package/dist/x/flatten.es.js +1 -1
  216. package/dist/x/flatten.es.min.js +1 -1
  217. package/dist/x/flatten.js +1 -1
  218. package/dist/x/flatten.min.js +1 -1
  219. package/dist/x/flatten.mjs +1 -1
  220. package/dist/x/groupBy.es.js +1 -1
  221. package/dist/x/groupBy.es.min.js +1 -1
  222. package/dist/x/groupBy.js +1 -1
  223. package/dist/x/groupBy.min.js +1 -1
  224. package/dist/x/groupBy.mjs +1 -1
  225. package/dist/x/has.es.js +1 -1
  226. package/dist/x/has.es.min.js +1 -1
  227. package/dist/x/has.js +1 -1
  228. package/dist/x/has.min.js +1 -1
  229. package/dist/x/has.mjs +1 -1
  230. package/dist/x/identity.es.js +1 -1
  231. package/dist/x/identity.es.min.js +1 -1
  232. package/dist/x/identity.js +1 -1
  233. package/dist/x/identity.min.js +1 -1
  234. package/dist/x/identity.mjs +1 -1
  235. package/dist/x/includes.es.js +1 -1
  236. package/dist/x/includes.es.min.js +1 -1
  237. package/dist/x/includes.js +1 -1
  238. package/dist/x/includes.min.js +1 -1
  239. package/dist/x/includes.mjs +1 -1
  240. package/dist/x/isDeepEqual.es.js +1 -1
  241. package/dist/x/isDeepEqual.es.min.js +1 -1
  242. package/dist/x/isDeepEqual.js +1 -1
  243. package/dist/x/isDeepEqual.min.js +1 -1
  244. package/dist/x/isDeepEqual.mjs +1 -1
  245. package/dist/x/isEmpty.es.js +1 -1
  246. package/dist/x/isEmpty.es.min.js +1 -1
  247. package/dist/x/isEmpty.js +1 -1
  248. package/dist/x/isEmpty.min.js +1 -1
  249. package/dist/x/isEmpty.mjs +1 -1
  250. package/dist/x/isEqual.es.js +1 -1
  251. package/dist/x/isEqual.es.min.js +1 -1
  252. package/dist/x/isEqual.js +1 -1
  253. package/dist/x/isEqual.min.js +1 -1
  254. package/dist/x/isEqual.mjs +1 -1
  255. package/dist/x/isFunction.es.js +1 -1
  256. package/dist/x/isFunction.es.min.js +1 -1
  257. package/dist/x/isFunction.js +1 -1
  258. package/dist/x/isFunction.min.js +1 -1
  259. package/dist/x/isFunction.mjs +1 -1
  260. package/dist/x/isIn.es.js +1 -1
  261. package/dist/x/isIn.es.min.js +1 -1
  262. package/dist/x/isIn.js +1 -1
  263. package/dist/x/isIn.min.js +1 -1
  264. package/dist/x/isIn.mjs +1 -1
  265. package/dist/x/isObject.es.js +1 -1
  266. package/dist/x/isObject.es.min.js +1 -1
  267. package/dist/x/isObject.js +1 -1
  268. package/dist/x/isObject.min.js +1 -1
  269. package/dist/x/isObject.mjs +1 -1
  270. package/dist/x/isString.es.js +1 -1
  271. package/dist/x/isString.es.min.js +1 -1
  272. package/dist/x/isString.js +1 -1
  273. package/dist/x/isString.min.js +1 -1
  274. package/dist/x/isString.mjs +1 -1
  275. package/dist/x/keys.es.js +1 -1
  276. package/dist/x/keys.es.min.js +1 -1
  277. package/dist/x/keys.js +1 -1
  278. package/dist/x/keys.min.js +1 -1
  279. package/dist/x/keys.mjs +1 -1
  280. package/dist/x/last.es.js +1 -1
  281. package/dist/x/last.es.min.js +1 -1
  282. package/dist/x/last.js +1 -1
  283. package/dist/x/last.min.js +1 -1
  284. package/dist/x/last.mjs +1 -1
  285. package/dist/x/maxBy.es.js +27 -23
  286. package/dist/x/maxBy.es.min.js +2 -2
  287. package/dist/x/maxBy.js +27 -23
  288. package/dist/x/maxBy.min.js +2 -2
  289. package/dist/x/maxBy.mjs +27 -23
  290. package/dist/x/noop.es.js +1 -1
  291. package/dist/x/noop.es.min.js +1 -1
  292. package/dist/x/noop.js +1 -1
  293. package/dist/x/noop.min.js +1 -1
  294. package/dist/x/noop.mjs +1 -1
  295. package/dist/x/pluck.es.js +8 -6
  296. package/dist/x/pluck.es.min.js +2 -2
  297. package/dist/x/pluck.js +8 -6
  298. package/dist/x/pluck.min.js +2 -2
  299. package/dist/x/pluck.mjs +8 -6
  300. package/dist/x/prepend.es.js +1 -1
  301. package/dist/x/prepend.es.min.js +1 -1
  302. package/dist/x/prepend.js +1 -1
  303. package/dist/x/prepend.min.js +1 -1
  304. package/dist/x/prepend.mjs +1 -1
  305. package/dist/x/size.es.js +1 -1
  306. package/dist/x/size.es.min.js +1 -1
  307. package/dist/x/size.js +1 -1
  308. package/dist/x/size.min.js +1 -1
  309. package/dist/x/size.mjs +1 -1
  310. package/dist/x/trace.es.js +1 -1
  311. package/dist/x/trace.es.min.js +1 -1
  312. package/dist/x/trace.js +1 -1
  313. package/dist/x/trace.min.js +1 -1
  314. package/dist/x/trace.mjs +1 -1
  315. package/dist/x/unionWith.es.js +1 -1
  316. package/dist/x/unionWith.es.min.js +1 -1
  317. package/dist/x/unionWith.js +1 -1
  318. package/dist/x/unionWith.min.js +1 -1
  319. package/dist/x/unionWith.mjs +1 -1
  320. package/dist/x/uniq.es.js +1 -1
  321. package/dist/x/uniq.es.min.js +1 -1
  322. package/dist/x/uniq.js +1 -1
  323. package/dist/x/uniq.min.js +1 -1
  324. package/dist/x/uniq.mjs +1 -1
  325. package/dist/x/unless.es.js +1 -1
  326. package/dist/x/unless.es.min.js +1 -1
  327. package/dist/x/unless.js +1 -1
  328. package/dist/x/unless.min.js +1 -1
  329. package/dist/x/unless.mjs +1 -1
  330. package/dist/x/values.es.js +1 -1
  331. package/dist/x/values.es.min.js +1 -1
  332. package/dist/x/values.js +1 -1
  333. package/dist/x/values.min.js +1 -1
  334. package/dist/x/values.mjs +1 -1
  335. package/dist/x/when.es.js +1 -1
  336. package/dist/x/when.es.min.js +1 -1
  337. package/dist/x/when.js +1 -1
  338. package/dist/x/when.min.js +1 -1
  339. package/dist/x/when.mjs +1 -1
  340. package/eq.js +1 -1
  341. package/es.js +6 -6
  342. package/every.js +1 -1
  343. package/filter.js +1 -1
  344. package/flatMap.js +1 -1
  345. package/forEach.js +2 -2
  346. package/get.js +46 -24
  347. package/gt.js +1 -1
  348. package/gte.js +1 -1
  349. package/index.js +6 -6
  350. package/lt.js +1 -1
  351. package/lte.js +1 -1
  352. package/map.js +4 -4
  353. package/monad/Mux.js +6 -4
  354. package/monad/PossiblePromise.js +6 -4
  355. package/monad/README.md +60 -39
  356. package/monad/Struct.js +6 -4
  357. package/not.js +1 -1
  358. package/omit.js +1 -1
  359. package/or.js +1 -1
  360. package/package.json +1 -1
  361. package/pick.js +1 -1
  362. package/pipe.js +18 -24
  363. package/reduce.js +1 -1
  364. package/set.js +1 -1
  365. package/some.js +1 -1
  366. package/switchCase.js +41 -41
  367. package/tap.js +13 -21
  368. package/transform.js +1 -1
  369. package/tryCatch.js +16 -24
package/get.js CHANGED
@@ -1,6 +1,9 @@
1
1
  const isPromise = require('./_internal/isPromise')
2
+ const promiseAll = require('./_internal/promiseAll')
2
3
  const __ = require('./_internal/placeholder')
4
+ const curry2 = require('./_internal/curry2')
3
5
  const curry3 = require('./_internal/curry3')
6
+ const funcApply = require('./_internal/funcApply')
4
7
  const isArray = require('./_internal/isArray')
5
8
  const isObject = require('./_internal/isObject')
6
9
  const getByPath = require('./_internal/getByPath')
@@ -18,47 +21,62 @@ const _get = function (object, path, defaultValue) {
18
21
  *
19
22
  * @synopsis
20
23
  * ```coffeescript [specscript]
21
- * get(
22
- * object Promise|Object,
23
- * path string|number|Array<string|number>,
24
- * defaultValue? function|any
25
- * ) -> result Promise|Object
26
- *
27
- * get(
28
- * path string|number|Array<string|number>,
29
- * defaultValue? function|any
30
- * )(object Object) -> result Promise|Object
24
+ * path string|number|Array<string|number>
25
+ * defaultValue any
26
+ * defaultResolver function
27
+ *
28
+ * get(Promise|Object, path) -> Promise|any
29
+ * get(Promise|Object, path, defaultValue) -> Promise|any
30
+ * get(Promise|Object, path, defaultResolver) -> Promise|any
31
+ *
32
+ * get(path)(Object) -> Promise|any
33
+ * get(path, defaultValue)(Object) -> Promise|any
34
+ * get(path, defaultResolver)(Object) -> Promise|any
31
35
  * ```
32
36
  *
33
37
  * @description
34
- * Accesses a property of an object given a path denoted by a string, number, or an array of string or numbers.
38
+ * Property accessor. Accesses the property of an object given a path denoted by a string, number, or array of string or numbers.
35
39
  *
36
40
  * ```javascript [playground]
37
41
  * const obj = { hello: 'world' }
38
42
  *
39
- * console.log(get(obj, 'hello')) // world
43
+ * const value = get(obj, 'hello')
44
+ *
45
+ * console.log(value)
40
46
  * ```
41
47
  *
42
- * `get` supports a lazy API for composability
48
+ * `get` supports a lazy API for composability.
43
49
  *
44
50
  * ```javascript [playground]
45
51
  * const obj = { hello: 'world' }
46
52
  *
47
53
  * const getHello = get('hello')
48
54
  *
49
- * console.log(getHello({ hello: 'world' })) // world
55
+ * const value = getHello({ hello: 'world' })
56
+ *
57
+ * console.log(value)
50
58
  * ```
51
59
  *
52
- * If the value at the end of the path is not found on the object, returns an optional default value. The default value can be a function resolver that takes the object as an argument. If no default value is provided, returns `undefined`. The function resolver may be asynchronous (returns a promise).
60
+ * If the value denoted by the path is not found in the object, `get` returns a default value. The default value can be a function resolver that takes the object as an argument. If no default value is provided, `get` returns `undefined`.
53
61
  *
54
62
  * ```javascript [playground]
55
63
  * const getHelloWithDefaultValue = get('hello', 'default')
56
64
  *
57
- * console.log(getHelloWithDefaultValue({ foo: 'bar' })) // default
65
+ * console.log(getHelloWithDefaultValue({ foo: 'bar' }))
58
66
  *
59
67
  * const getHelloWithDefaultResolver = get('hello', object => object.foo)
60
68
  *
61
- * console.log(getHelloWithDefaultResolver({ foo: 'bar' })) // bar
69
+ * console.log(getHelloWithDefaultResolver({ foo: 'bar' }))
70
+ * ```
71
+ *
72
+ * The default resolver may be asynchronous, in which case `get` returns a promise.
73
+ *
74
+ * ```javascript [playground]
75
+ * const asyncDefaultResolver = async object => object.a
76
+ *
77
+ * const promise = get({ a: 1 }, 'notfound', asyncDefaultResolver)
78
+ *
79
+ * promise.then(console.log)
62
80
  * ```
63
81
  *
64
82
  * `get` supports three types of path patterns for nested property access.
@@ -70,18 +88,22 @@ const _get = function (object, path, defaultValue) {
70
88
  * ```javascript [playground]
71
89
  * const getABC0 = get('a.b.c[0]')
72
90
  *
73
- * console.log(getABC0({ a: { b: { c: ['hello'] } } })) // hello
91
+ * const abc0 = getABC0({ a: { b: { c: ['hello'] } } })
92
+ *
93
+ * console.log(abc0)
74
94
  *
75
95
  * const get00000DotNotation = get('0.0.0.0.0')
76
96
  * const get00000BracketNotation = get('[0][0][0][0][0]')
77
97
  * const get00000ArrayNotation = get([0, 0, 0, 0, 0])
78
98
  *
79
- * console.log(get00000DotNotation([[[[['foo']]]]])) // foo
80
- * console.log(get00000BracketNotation([[[[['foo']]]]])) // foo
81
- * console.log(get00000ArrayNotation([[[[['foo']]]]])) // foo
99
+ * const nested = [[[[['foo']]]]]
100
+ *
101
+ * console.log(get00000DotNotation(nested))
102
+ * console.log(get00000BracketNotation(nested))
103
+ * console.log(get00000ArrayNotation(nested))
82
104
  * ```
83
105
  *
84
- * 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 argument position are resolved for their values before further execution.
85
107
  *
86
108
  * ```javascript [playground]
87
109
  * get(Promise.resolve({ a: 1 }), 'a').then(console.log) // 1
@@ -101,8 +123,8 @@ const get = function (arg0, arg1, arg2) {
101
123
  if (typeof arg0 == 'string' || typeof arg0 == 'number' || isArray(arg0)) {
102
124
  return curry3(_get, __, arg0, arg1)
103
125
  }
104
- if (isPromise(arg0)) {
105
- return arg0.then(curry3(_get, __, arg1, arg2))
126
+ if (isPromise(arg0) || isPromise(arg2)) {
127
+ return promiseAll([arg0, arg1, arg2]).then(curry2(funcApply, _get, __))
106
128
  }
107
129
  return _get(arg0, arg1, arg2)
108
130
  }
package/gt.js CHANGED
@@ -65,7 +65,7 @@ const greaterThan = require('./_internal/greaterThan')
65
65
  * ])
66
66
  * ```
67
67
  *
68
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
68
+ * Any promises passed in argument position are resolved for their values before further execution.
69
69
  *
70
70
  * ```javascript [playground]
71
71
  * gt(Promise.resolve({ a: 2, b: 1 }), get('a'), get('b')).then(console.log) // true
package/gte.js CHANGED
@@ -69,7 +69,7 @@ const greaterThanOrEqual = require('./_internal/greaterThanOrEqual')
69
69
  * ])
70
70
  * ```
71
71
  *
72
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
72
+ * Any promises passed in argument position are resolved for their values before further execution.
73
73
  *
74
74
  * ```javascript [playground]
75
75
  * gte(Promise.resolve({ a: 1, b: 1 }), get('a'), get('b')).then(console.log) // true
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rubico v2.8.4
2
+ * Rubico v2.8.6
3
3
  * https://rubico.land/
4
4
  *
5
5
  * © Richard Yufei Tong, King of Software
@@ -1079,7 +1079,7 @@ const _curryArity = (arity, func, context, args) => function curried(...curriedA
1079
1079
  curriedArgsIndex = -1,
1080
1080
  numCurriedPlaceholders = 0
1081
1081
 
1082
- while (++argsIndex < argsLength) {
1082
+ while ((argsIndex += 1) < argsLength) {
1083
1083
  const arg = args[argsIndex]
1084
1084
  if (arg == __ && (curriedArgsIndex += 1) < curriedArgsLength) {
1085
1085
  const curriedArg = curriedArgs[curriedArgsIndex]
@@ -1103,7 +1103,7 @@ const _curryArity = (arity, func, context, args) => function curried(...curriedA
1103
1103
  }
1104
1104
  }
1105
1105
 
1106
- while (++curriedArgsIndex < curriedArgsLength) {
1106
+ while ((curriedArgsIndex += 1) < curriedArgsLength) {
1107
1107
  const curriedArg = curriedArgs[curriedArgsIndex]
1108
1108
  if (curriedArg == __) {
1109
1109
  numCurriedPlaceholders += 1
@@ -1133,7 +1133,7 @@ const curryArity = function (arity, func, context, args) {
1133
1133
  return _curryArity(arity, func, context, args)
1134
1134
  }
1135
1135
  let argsIndex = -1
1136
- while (++argsIndex < argsLength) {
1136
+ while ((argsIndex += 1) < argsLength) {
1137
1137
  const arg = args[argsIndex]
1138
1138
  if (arg == __) {
1139
1139
  return _curryArity(arity, func, context, args)
@@ -3126,8 +3126,8 @@ const get = function (arg0, arg1, arg2) {
3126
3126
  if (typeof arg0 == 'string' || typeof arg0 == 'number' || isArray(arg0)) {
3127
3127
  return curry3(_get, __, arg0, arg1)
3128
3128
  }
3129
- if (isPromise(arg0)) {
3130
- return arg0.then(curry3(_get, __, arg1, arg2))
3129
+ if (isPromise(arg0) || isPromise(arg2)) {
3130
+ return promiseAll([arg0, arg1, arg2]).then(curry2(funcApply, _get, __))
3131
3131
  }
3132
3132
  return _get(arg0, arg1, arg2)
3133
3133
  }
package/lt.js CHANGED
@@ -67,7 +67,7 @@ const lessThan = require('./_internal/lessThan')
67
67
  * ])
68
68
  * ```
69
69
  *
70
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
70
+ * Any promises passed in argument position are resolved for their values before further execution.
71
71
  *
72
72
  * ```javascript [playground]
73
73
  * lt(Promise.resolve({ a: 1, b: 2 }), get('a'), get('b')).then(console.log) // true
package/lte.js CHANGED
@@ -67,7 +67,7 @@ const lessThanOrEqual = require('./_internal/lessThanOrEqual')
67
67
  * ])
68
68
  * ```
69
69
  *
70
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
70
+ * Any promises passed in argument position are resolved for their values before further execution.
71
71
  *
72
72
  * ```javascript [playground]
73
73
  * lte(Promise.resolve({ a: 1, b: 1 }), get('a'), get('b')).then(console.log) // true
package/map.js CHANGED
@@ -250,7 +250,7 @@ const _map = function (value, f) {
250
250
  * })()
251
251
  * ```
252
252
  *
253
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
253
+ * Any promises passed in argument position are resolved for their values before further execution.
254
254
  *
255
255
  * ```javascript [playground]
256
256
  * const asyncSquare = async n => n ** 2
@@ -357,7 +357,7 @@ const _mapEntries = (value, f) => {
357
357
  * // Map(3) { 'A' => 1, 'B' => 4, 'C' => 9 }
358
358
  * ```
359
359
  *
360
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
360
+ * Any promises passed in argument position are resolved for their values before further execution.
361
361
  *
362
362
  * ```javascript [playground]
363
363
  * const asyncSquareEntries = async ([k, v]) => [k, v ** 2]
@@ -467,7 +467,7 @@ const _mapSeries = function (collection, f) {
467
467
  * map.series([1, 2, 3, 4, 5], delayedLog)
468
468
  * ```
469
469
  *
470
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
470
+ * Any promises passed in argument position are resolved for their values before further execution.
471
471
  *
472
472
  * ```javascript [playground]
473
473
  * const asyncSquare = async n => n ** 2
@@ -574,7 +574,7 @@ const _mapPool = function (f, concurrency, mapper) {
574
574
  * ]))(ids)
575
575
  * ```
576
576
  *
577
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
577
+ * Any promises passed in argument position are resolved for their values before further execution.
578
578
  *
579
579
  * ```javascript [playground]
580
580
  * const asyncSquare = async n => n ** 2
package/monad/Mux.js CHANGED
@@ -1,7 +1,9 @@
1
- /* rubico v1.5.0
2
- * https://github.com/a-synchronous/rubico
3
- * (c) 2019-2020 Richard Tong
4
- * rubico may be freely distributed under the MIT license.
1
+ /**
2
+ * Rubico
3
+ * https://rubico.land/
4
+ *
5
+ * © Richard Yufei Tong, King of Software
6
+ * Rubico may be freely distributed under the CFOSS license.
5
7
  */
6
8
 
7
9
  'use strict'
@@ -1,7 +1,9 @@
1
- /* rubico v1.5.0
2
- * https://github.com/a-synchronous/rubico
3
- * (c) 2019-2020 Richard Tong
4
- * rubico may be freely distributed under the MIT license.
1
+ /**
2
+ * Rubico
3
+ * https://rubico.land/
4
+ *
5
+ * © Richard Yufei Tong, King of Software
6
+ * Rubico may be freely distributed under the CFOSS license.
5
7
  */
6
8
 
7
9
  'use strict'
package/monad/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # rubico/monad
1
+ # Monad
2
2
 
3
3
  This is a place for JavaScript monads.
4
4
 
@@ -6,70 +6,91 @@ Warning: this entire directory is experimental; APIs here are subject to change.
6
6
 
7
7
  # Specification
8
8
 
9
- Each rubico monad must return an object that implements `.chain`, while having some notion of `.map` and `.concat`. Similarly, while `.empty` is not strictly required, there should be some notion of an empty instance of a Monad. For example, `[]` is `empty` for Arrays. All of these methods as well as any others are free to implement; only `.chain` is required. Monads should throw TypeErrors from the constructor for invalid types of arguments. rubico Monads should generally act on objects or primitive values and not functions. A Monad that acts on a function may be better for rubico/x.
9
+ Each monad must have a way to wrap one or more values, either using the constructor or using the `of` method.
10
10
 
11
+ Each monad must implement the `chain`, `flatMap`, or `then` methods, or have a combination of the `map` and `concat` methods. Similarly, while `empty` is not strictly required, there should be some notion of an empty instance of a Monad. For example, `[]` is `empty` for Arrays. All of these methods as well as any others not listed may be implemented; only the `chain`, `flatMap`, or `then` methods and the constructor or `of` methods are required.
12
+
13
+ Each monad should throw TypeErrors from the constructor for invalid types of arguments.
14
+
15
+ ## Monad constructor
11
16
  ```coffeescript [specscript]
12
- Monad = (args ...any)=>({
17
+ new Monad(...arguments) -> Monad {
18
+ of: function,
13
19
  chain: function,
14
- map: function?,
15
- concat: function?,
16
- empty: function?,
17
- })
20
+ flatMap: function,
21
+ then: function,
22
+ map: function,
23
+ concat: function,
24
+ }
18
25
  ```
19
26
 
20
- ## Monad.prototype.chain - required
27
+ ## Monad of method
21
28
  ```coffeescript [specscript]
22
- Monad(value any).chain(
23
- flatMapper value=>(result Monad|any)) -> result
29
+ Monad.of(...arguments) -> Monad {
30
+ of: function,
31
+ chain: function,
32
+ flatMap: function,
33
+ then: function,
34
+ map: function,
35
+ concat: function,
36
+ }
24
37
  ```
25
38
 
26
- ## Monad.prototype.map
39
+ ## Monad chain method
27
40
  ```coffeescript [specscript]
28
- Monad(value any).map(mapper value=>any) -> mappedMonad Monad
41
+ monad Monad
42
+
43
+ monad.chain(any=>(Monad|any)) -> Monad
29
44
  ```
30
45
 
31
- ## Monad.prototype.concat
46
+ ## Monad flatMap method
32
47
  ```coffeescript [specscript]
33
- Monad(value any).concat(anotherMonad Monad) -> combinedMonad Monad
48
+ monad Monad
49
+
50
+ monad.flatMap(any=>(Monad|any)) -> Monad
34
51
  ```
35
52
 
36
- ## Monad.prototype.empty
53
+ ## Monad then method
37
54
  ```coffeescript [specscript]
38
- Monad.empty() -> emptyMonad Monad
39
- ```
55
+ monad Monad
40
56
 
41
- # Examples
57
+ monad.then(any=>(Monad|any)) -> Monad
58
+ ```
42
59
 
43
- A monad's effect is activated by calling its `.chain` method with `flatMap`.
60
+ ## Monad map method
61
+ ```coffeescript [specscript]
62
+ monad Monad
44
63
 
45
- ```javascript
46
- const { flatMap } = require('rubico')
64
+ monad.map(any=>any) -> Monad
65
+ ```
47
66
 
48
- const Maybe = value => ({
49
- chain(flatMapper) {
50
- return value == null ? value : flatMapper(value)
51
- },
52
- })
67
+ ## Monad concat method
68
+ ```coffeescript [specscript]
69
+ monad Monad
53
70
 
54
- flatMap(console.log)(Maybe(null))
71
+ monad.concat(Monad) -> Monad
72
+ ```
55
73
 
56
- flatMap(console.log)(Maybe('hello world')) // hello world
74
+ ## Monad empty method
75
+ ```coffeescript [specscript]
76
+ Monad.empty() -> Monad
57
77
  ```
58
78
 
59
- Additionally, if a monad implements `.concat`, it can be transformed as a Semigroup with a transducer and `transform`.
79
+ # Example
80
+ A monad's effect is activated by calling its `chain` method with a function.
60
81
 
61
82
  ```javascript
62
- const { transform } = require('rubico')
63
-
64
- const Max = number => ({
65
- number,
66
- concat(value) {
67
- return Max(Math.max(
68
- number, value.constructor == Max ? value.number : value))
83
+ const Maybe = value => ({
84
+ chain(func) {
85
+ if (value) {
86
+ func(value)
87
+ }
88
+ return this
69
89
  },
70
90
  })
71
91
 
72
- transform(
73
- map(Math.abs), new Max(-Infinity),
74
- )([-1, -2, -3, -4, -5]) // Max { 5 }
92
+ Maybe(null).chain(console.log)
93
+
94
+ Maybe('hello world').chain(console.log) // hello world
75
95
  ```
96
+
package/monad/Struct.js CHANGED
@@ -1,7 +1,9 @@
1
- /* rubico v1.5.0
2
- * https://github.com/a-synchronous/rubico
3
- * (c) 2019-2020 Richard Tong
4
- * rubico may be freely distributed under the MIT license.
1
+ /**
2
+ * Rubico
3
+ * https://rubico.land/
4
+ *
5
+ * © Richard Yufei Tong, King of Software
6
+ * Rubico may be freely distributed under the CFOSS license.
5
7
  */
6
8
 
7
9
  'use strict'
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 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
@@ -62,7 +62,7 @@ const _omit = function (source, paths) {
62
62
  * ])
63
63
  * ```
64
64
  *
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.
65
+ * Any promises passed in argument position are resolved for their values before further execution.
66
66
  *
67
67
  * ```javascript [playground]
68
68
  * omit(Promise.resolve({ a: 1, b: 2, c: 3 }), ['a', 'b']).then(console.log)
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 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.4",
3
+ "version": "2.8.6",
4
4
  "description": "[a]synchronous functional programming",
5
5
  "author": "Richard Tong",
6
6
  "license": "CFOSS",
package/pick.js CHANGED
@@ -62,7 +62,7 @@ const _pick = function (source, keys) {
62
62
  * ])
63
63
  * ```
64
64
  *
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.
65
+ * Any promises passed in argument position are resolved for their values before further execution.
66
66
  *
67
67
  * ```javascript [playground]
68
68
  * pick(Promise.resolve({ a: 1, b: 2, c: 3 }), ['a', 'b']).then(console.log)
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 passed in argument position are resolved for their values before further execution.
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 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
@@ -90,7 +90,7 @@ const _set = function (obj, path, value) {
90
90
  * ])
91
91
  * ```
92
92
  *
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.
93
+ * Any promises passed in argument position are resolved for their values before further execution.
94
94
  *
95
95
  * ```javascript [playground]
96
96
  * set(Promise.resolve({}), 'a', 1).then(console.log) // { a: 1 }
package/some.js CHANGED
@@ -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 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