rubico 2.6.0 → 2.6.2

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 (342) hide show
  1. package/_internal/areAllValuesNonfunctions.js +16 -4
  2. package/_internal/areAnyValuesPromises.js +16 -4
  3. package/_internal/functionArrayAll.js +2 -1
  4. package/_internal/functionObjectAll.js +2 -1
  5. package/all.js +101 -22
  6. package/assign.js +19 -3
  7. package/dist/Transducer.es.js +1 -1
  8. package/dist/Transducer.es.min.js +1 -1
  9. package/dist/Transducer.js +1 -1
  10. package/dist/Transducer.min.js +1 -1
  11. package/dist/Transducer.mjs +1 -1
  12. package/dist/__.es.js +1 -1
  13. package/dist/__.es.min.js +1 -1
  14. package/dist/__.js +1 -1
  15. package/dist/__.min.js +1 -1
  16. package/dist/__.mjs +1 -1
  17. package/dist/all.es.js +107 -8
  18. package/dist/all.es.min.js +2 -2
  19. package/dist/all.js +107 -8
  20. package/dist/all.min.js +2 -2
  21. package/dist/all.mjs +107 -8
  22. package/dist/always.es.js +1 -1
  23. package/dist/always.es.min.js +1 -1
  24. package/dist/always.js +1 -1
  25. package/dist/always.min.js +1 -1
  26. package/dist/always.mjs +1 -1
  27. package/dist/and.es.js +30 -9
  28. package/dist/and.es.min.js +2 -2
  29. package/dist/and.js +30 -9
  30. package/dist/and.min.js +2 -2
  31. package/dist/and.mjs +30 -9
  32. package/dist/assign.es.js +3 -2
  33. package/dist/assign.es.min.js +2 -2
  34. package/dist/assign.js +3 -2
  35. package/dist/assign.min.js +2 -2
  36. package/dist/assign.mjs +3 -2
  37. package/dist/compose.es.js +17 -5
  38. package/dist/compose.es.min.js +2 -2
  39. package/dist/compose.js +17 -5
  40. package/dist/compose.min.js +2 -2
  41. package/dist/compose.mjs +17 -5
  42. package/dist/curry.es.js +1 -1
  43. package/dist/curry.es.min.js +1 -1
  44. package/dist/curry.js +1 -1
  45. package/dist/curry.min.js +1 -1
  46. package/dist/curry.mjs +1 -1
  47. package/dist/eq.es.js +17 -5
  48. package/dist/eq.es.min.js +2 -2
  49. package/dist/eq.js +17 -5
  50. package/dist/eq.min.js +2 -2
  51. package/dist/eq.mjs +17 -5
  52. package/dist/every.es.js +1 -1
  53. package/dist/every.es.min.js +1 -1
  54. package/dist/every.js +1 -1
  55. package/dist/every.min.js +1 -1
  56. package/dist/every.mjs +1 -1
  57. package/dist/filter.es.js +1 -1
  58. package/dist/filter.es.min.js +1 -1
  59. package/dist/filter.js +1 -1
  60. package/dist/filter.min.js +1 -1
  61. package/dist/filter.mjs +1 -1
  62. package/dist/flatMap.es.js +1 -1
  63. package/dist/flatMap.es.min.js +1 -1
  64. package/dist/flatMap.js +1 -1
  65. package/dist/flatMap.min.js +1 -1
  66. package/dist/flatMap.mjs +1 -1
  67. package/dist/forEach.es.js +1 -1
  68. package/dist/forEach.es.min.js +1 -1
  69. package/dist/forEach.js +1 -1
  70. package/dist/forEach.min.js +1 -1
  71. package/dist/forEach.mjs +1 -1
  72. package/dist/get.es.js +1 -1
  73. package/dist/get.es.min.js +1 -1
  74. package/dist/get.js +1 -1
  75. package/dist/get.min.js +1 -1
  76. package/dist/get.mjs +1 -1
  77. package/dist/gt.es.js +17 -5
  78. package/dist/gt.es.min.js +2 -2
  79. package/dist/gt.js +17 -5
  80. package/dist/gt.min.js +2 -2
  81. package/dist/gt.mjs +17 -5
  82. package/dist/gte.es.js +17 -5
  83. package/dist/gte.es.min.js +2 -2
  84. package/dist/gte.js +17 -5
  85. package/dist/gte.min.js +2 -2
  86. package/dist/gte.mjs +17 -5
  87. package/dist/lt.es.js +17 -5
  88. package/dist/lt.es.min.js +2 -2
  89. package/dist/lt.js +17 -5
  90. package/dist/lt.min.js +2 -2
  91. package/dist/lt.mjs +17 -5
  92. package/dist/lte.es.js +17 -5
  93. package/dist/lte.es.min.js +2 -2
  94. package/dist/lte.js +17 -5
  95. package/dist/lte.min.js +2 -2
  96. package/dist/lte.mjs +17 -5
  97. package/dist/map.es.js +1 -1
  98. package/dist/map.es.min.js +1 -1
  99. package/dist/map.js +1 -1
  100. package/dist/map.min.js +1 -1
  101. package/dist/map.mjs +1 -1
  102. package/dist/not.es.js +17 -5
  103. package/dist/not.es.min.js +2 -2
  104. package/dist/not.js +17 -5
  105. package/dist/not.min.js +2 -2
  106. package/dist/not.mjs +17 -5
  107. package/dist/omit.es.js +1 -1
  108. package/dist/omit.es.min.js +1 -1
  109. package/dist/omit.js +1 -1
  110. package/dist/omit.min.js +1 -1
  111. package/dist/omit.mjs +1 -1
  112. package/dist/or.es.js +30 -9
  113. package/dist/or.es.min.js +2 -2
  114. package/dist/or.js +30 -9
  115. package/dist/or.min.js +2 -2
  116. package/dist/or.mjs +30 -9
  117. package/dist/pick.es.js +1 -1
  118. package/dist/pick.es.min.js +1 -1
  119. package/dist/pick.js +1 -1
  120. package/dist/pick.min.js +1 -1
  121. package/dist/pick.mjs +1 -1
  122. package/dist/pipe.es.js +17 -5
  123. package/dist/pipe.es.min.js +2 -2
  124. package/dist/pipe.js +17 -5
  125. package/dist/pipe.min.js +2 -2
  126. package/dist/pipe.mjs +17 -5
  127. package/dist/reduce.es.js +1 -1
  128. package/dist/reduce.es.min.js +1 -1
  129. package/dist/reduce.js +1 -1
  130. package/dist/reduce.min.js +1 -1
  131. package/dist/reduce.mjs +1 -1
  132. package/dist/rubico.es.js +170 -89
  133. package/dist/rubico.es.min.js +2 -2
  134. package/dist/rubico.global.js +170 -89
  135. package/dist/rubico.global.min.js +2 -2
  136. package/dist/rubico.js +170 -89
  137. package/dist/rubico.min.js +2 -2
  138. package/dist/rubico.mjs +170 -89
  139. package/dist/set.es.js +1 -1
  140. package/dist/set.es.min.js +1 -1
  141. package/dist/set.js +1 -1
  142. package/dist/set.min.js +1 -1
  143. package/dist/set.mjs +1 -1
  144. package/dist/some.es.js +1 -1
  145. package/dist/some.es.min.js +1 -1
  146. package/dist/some.js +1 -1
  147. package/dist/some.min.js +1 -1
  148. package/dist/some.mjs +1 -1
  149. package/dist/switchCase.es.js +30 -9
  150. package/dist/switchCase.es.min.js +2 -2
  151. package/dist/switchCase.js +30 -9
  152. package/dist/switchCase.min.js +2 -2
  153. package/dist/switchCase.mjs +30 -9
  154. package/dist/tap.es.js +80 -19
  155. package/dist/tap.es.min.js +2 -2
  156. package/dist/tap.js +80 -19
  157. package/dist/tap.min.js +2 -2
  158. package/dist/tap.mjs +80 -19
  159. package/dist/thunkify.es.js +17 -5
  160. package/dist/thunkify.es.min.js +2 -2
  161. package/dist/thunkify.js +17 -5
  162. package/dist/thunkify.min.js +2 -2
  163. package/dist/thunkify.mjs +17 -5
  164. package/dist/transform.es.js +1 -1
  165. package/dist/transform.es.min.js +1 -1
  166. package/dist/transform.js +1 -1
  167. package/dist/transform.min.js +1 -1
  168. package/dist/transform.mjs +1 -1
  169. package/dist/tryCatch.es.js +17 -5
  170. package/dist/tryCatch.es.min.js +2 -2
  171. package/dist/tryCatch.js +17 -5
  172. package/dist/tryCatch.min.js +2 -2
  173. package/dist/tryCatch.mjs +17 -5
  174. package/dist/x/append.es.js +1 -1
  175. package/dist/x/append.es.min.js +1 -1
  176. package/dist/x/append.js +1 -1
  177. package/dist/x/append.min.js +1 -1
  178. package/dist/x/append.mjs +1 -1
  179. package/dist/x/callProp.es.js +1 -1
  180. package/dist/x/callProp.es.min.js +1 -1
  181. package/dist/x/callProp.js +1 -1
  182. package/dist/x/callProp.min.js +1 -1
  183. package/dist/x/callProp.mjs +1 -1
  184. package/dist/x/defaultsDeep.es.js +1 -1
  185. package/dist/x/defaultsDeep.es.min.js +1 -1
  186. package/dist/x/defaultsDeep.js +1 -1
  187. package/dist/x/defaultsDeep.min.js +1 -1
  188. package/dist/x/defaultsDeep.mjs +1 -1
  189. package/dist/x/differenceWith.es.js +1 -1
  190. package/dist/x/differenceWith.es.min.js +1 -1
  191. package/dist/x/differenceWith.js +1 -1
  192. package/dist/x/differenceWith.min.js +1 -1
  193. package/dist/x/differenceWith.mjs +1 -1
  194. package/dist/x/filterOut.es.js +15 -5
  195. package/dist/x/filterOut.es.min.js +2 -2
  196. package/dist/x/filterOut.js +15 -5
  197. package/dist/x/filterOut.min.js +2 -2
  198. package/dist/x/filterOut.mjs +15 -5
  199. package/dist/x/find.es.js +1 -1
  200. package/dist/x/find.es.min.js +1 -1
  201. package/dist/x/find.js +1 -1
  202. package/dist/x/find.min.js +1 -1
  203. package/dist/x/find.mjs +1 -1
  204. package/dist/x/findIndex.es.js +1 -1
  205. package/dist/x/findIndex.es.min.js +1 -1
  206. package/dist/x/findIndex.js +1 -1
  207. package/dist/x/findIndex.min.js +1 -1
  208. package/dist/x/findIndex.mjs +1 -1
  209. package/dist/x/first.es.js +1 -1
  210. package/dist/x/first.es.min.js +1 -1
  211. package/dist/x/first.js +1 -1
  212. package/dist/x/first.min.js +1 -1
  213. package/dist/x/first.mjs +1 -1
  214. package/dist/x/flatten.es.js +1 -1
  215. package/dist/x/flatten.es.min.js +1 -1
  216. package/dist/x/flatten.js +1 -1
  217. package/dist/x/flatten.min.js +1 -1
  218. package/dist/x/flatten.mjs +1 -1
  219. package/dist/x/groupBy.es.js +1 -1
  220. package/dist/x/groupBy.es.min.js +1 -1
  221. package/dist/x/groupBy.js +1 -1
  222. package/dist/x/groupBy.min.js +1 -1
  223. package/dist/x/groupBy.mjs +1 -1
  224. package/dist/x/has.es.js +1 -1
  225. package/dist/x/has.es.min.js +1 -1
  226. package/dist/x/has.js +1 -1
  227. package/dist/x/has.min.js +1 -1
  228. package/dist/x/has.mjs +1 -1
  229. package/dist/x/identity.es.js +1 -1
  230. package/dist/x/identity.es.min.js +1 -1
  231. package/dist/x/identity.js +1 -1
  232. package/dist/x/identity.min.js +1 -1
  233. package/dist/x/identity.mjs +1 -1
  234. package/dist/x/includes.es.js +1 -1
  235. package/dist/x/includes.es.min.js +1 -1
  236. package/dist/x/includes.js +1 -1
  237. package/dist/x/includes.min.js +1 -1
  238. package/dist/x/includes.mjs +1 -1
  239. package/dist/x/isDeepEqual.es.js +1 -1
  240. package/dist/x/isDeepEqual.es.min.js +1 -1
  241. package/dist/x/isDeepEqual.js +1 -1
  242. package/dist/x/isDeepEqual.min.js +1 -1
  243. package/dist/x/isDeepEqual.mjs +1 -1
  244. package/dist/x/isEmpty.es.js +1 -1
  245. package/dist/x/isEmpty.es.min.js +1 -1
  246. package/dist/x/isEmpty.js +1 -1
  247. package/dist/x/isEmpty.min.js +1 -1
  248. package/dist/x/isEmpty.mjs +1 -1
  249. package/dist/x/isEqual.es.js +1 -1
  250. package/dist/x/isEqual.es.min.js +1 -1
  251. package/dist/x/isEqual.js +1 -1
  252. package/dist/x/isEqual.min.js +1 -1
  253. package/dist/x/isEqual.mjs +1 -1
  254. package/dist/x/isFunction.es.js +1 -1
  255. package/dist/x/isFunction.es.min.js +1 -1
  256. package/dist/x/isFunction.js +1 -1
  257. package/dist/x/isFunction.min.js +1 -1
  258. package/dist/x/isFunction.mjs +1 -1
  259. package/dist/x/isIn.es.js +1 -1
  260. package/dist/x/isIn.es.min.js +1 -1
  261. package/dist/x/isIn.js +1 -1
  262. package/dist/x/isIn.min.js +1 -1
  263. package/dist/x/isIn.mjs +1 -1
  264. package/dist/x/isObject.es.js +1 -1
  265. package/dist/x/isObject.es.min.js +1 -1
  266. package/dist/x/isObject.js +1 -1
  267. package/dist/x/isObject.min.js +1 -1
  268. package/dist/x/isObject.mjs +1 -1
  269. package/dist/x/isString.es.js +1 -1
  270. package/dist/x/isString.es.min.js +1 -1
  271. package/dist/x/isString.js +1 -1
  272. package/dist/x/isString.min.js +1 -1
  273. package/dist/x/isString.mjs +1 -1
  274. package/dist/x/keys.es.js +1 -1
  275. package/dist/x/keys.es.min.js +1 -1
  276. package/dist/x/keys.js +1 -1
  277. package/dist/x/keys.min.js +1 -1
  278. package/dist/x/keys.mjs +1 -1
  279. package/dist/x/last.es.js +1 -1
  280. package/dist/x/last.es.min.js +1 -1
  281. package/dist/x/last.js +1 -1
  282. package/dist/x/last.min.js +1 -1
  283. package/dist/x/last.mjs +1 -1
  284. package/dist/x/maxBy.es.js +1 -1
  285. package/dist/x/maxBy.es.min.js +1 -1
  286. package/dist/x/maxBy.js +1 -1
  287. package/dist/x/maxBy.min.js +1 -1
  288. package/dist/x/maxBy.mjs +1 -1
  289. package/dist/x/noop.es.js +1 -1
  290. package/dist/x/noop.es.min.js +1 -1
  291. package/dist/x/noop.js +1 -1
  292. package/dist/x/noop.min.js +1 -1
  293. package/dist/x/noop.mjs +1 -1
  294. package/dist/x/pluck.es.js +1 -1
  295. package/dist/x/pluck.es.min.js +1 -1
  296. package/dist/x/pluck.js +1 -1
  297. package/dist/x/pluck.min.js +1 -1
  298. package/dist/x/pluck.mjs +1 -1
  299. package/dist/x/prepend.es.js +1 -1
  300. package/dist/x/prepend.es.min.js +1 -1
  301. package/dist/x/prepend.js +1 -1
  302. package/dist/x/prepend.min.js +1 -1
  303. package/dist/x/prepend.mjs +1 -1
  304. package/dist/x/size.es.js +1 -1
  305. package/dist/x/size.es.min.js +1 -1
  306. package/dist/x/size.js +1 -1
  307. package/dist/x/size.min.js +1 -1
  308. package/dist/x/size.mjs +1 -1
  309. package/dist/x/trace.es.js +82 -21
  310. package/dist/x/trace.es.min.js +2 -2
  311. package/dist/x/trace.js +82 -21
  312. package/dist/x/trace.min.js +2 -2
  313. package/dist/x/trace.mjs +82 -21
  314. package/dist/x/unionWith.es.js +1 -1
  315. package/dist/x/unionWith.es.min.js +1 -1
  316. package/dist/x/unionWith.js +1 -1
  317. package/dist/x/unionWith.min.js +1 -1
  318. package/dist/x/unionWith.mjs +1 -1
  319. package/dist/x/uniq.es.js +1 -1
  320. package/dist/x/uniq.es.min.js +1 -1
  321. package/dist/x/uniq.js +1 -1
  322. package/dist/x/uniq.min.js +1 -1
  323. package/dist/x/uniq.mjs +1 -1
  324. package/dist/x/unless.es.js +1 -1
  325. package/dist/x/unless.es.min.js +1 -1
  326. package/dist/x/unless.js +1 -1
  327. package/dist/x/unless.min.js +1 -1
  328. package/dist/x/unless.mjs +1 -1
  329. package/dist/x/values.es.js +1 -1
  330. package/dist/x/values.es.min.js +1 -1
  331. package/dist/x/values.js +1 -1
  332. package/dist/x/values.min.js +1 -1
  333. package/dist/x/values.mjs +1 -1
  334. package/dist/x/when.es.js +1 -1
  335. package/dist/x/when.es.min.js +1 -1
  336. package/dist/x/when.js +1 -1
  337. package/dist/x/when.min.js +1 -1
  338. package/dist/x/when.mjs +1 -1
  339. package/es.js +170 -89
  340. package/index.js +170 -89
  341. package/package.json +1 -1
  342. package/tap.js +66 -28
@@ -1,16 +1,28 @@
1
+ const isArray = require('./isArray')
2
+
1
3
  /**
2
4
  * @name areAllValuesNonfunctions
3
5
  *
4
6
  * @synopsis
5
7
  * ```coffeescript [specscript]
6
8
  * areAllValuesNonfunctions(values Array<function|value>) -> boolean
9
+ * areAllValuesNonfunctions(values Object<function|value>) -> boolean
7
10
  * ```
8
11
  */
9
12
  const areAllValuesNonfunctions = function (values) {
10
- const length = values.length
11
- let index = -1
12
- while (++index < length) {
13
- if (typeof values[index] == 'function') {
13
+ if (isArray(values)) {
14
+ const length = values.length
15
+ let index = -1
16
+ while (++index < length) {
17
+ if (typeof values[index] == 'function') {
18
+ return false
19
+ }
20
+ }
21
+ return true
22
+ }
23
+
24
+ for (const key in values) {
25
+ if (typeof values[key] == 'function') {
14
26
  return false
15
27
  }
16
28
  }
@@ -1,3 +1,4 @@
1
+ const isArray = require('./isArray')
1
2
  const isPromise = require('./isPromise')
2
3
 
3
4
  /**
@@ -6,13 +7,24 @@ const isPromise = require('./isPromise')
6
7
  * @synopsis
7
8
  * ```coffeescript [specscript]
8
9
  * areAnyValuesPromises(values Array) -> boolean
10
+ * areAnyValuesPromises(values Object) -> boolean
9
11
  * ```
10
12
  */
11
13
  const areAnyValuesPromises = function (values) {
12
- const length = values.length
13
- let index = -1
14
- while (++index < length) {
15
- const value = values[index]
14
+ if (isArray(values)) {
15
+ const length = values.length
16
+ let index = -1
17
+ while (++index < length) {
18
+ const value = values[index]
19
+ if (isPromise(value)) {
20
+ return true
21
+ }
22
+ }
23
+ return false
24
+ }
25
+
26
+ for (const key in values) {
27
+ const value = values[key]
16
28
  if (isPromise(value)) {
17
29
  return true
18
30
  }
@@ -14,7 +14,8 @@ const functionArrayAll = function (funcs, args) {
14
14
  result = Array(funcsLength)
15
15
  let funcsIndex = -1, isAsync = false
16
16
  while (++funcsIndex < funcsLength) {
17
- const resultItem = funcs[funcsIndex](...args)
17
+ const f = funcs[funcsIndex]
18
+ const resultItem = typeof f == 'function' ? f(...args) : f
18
19
  if (isPromise(resultItem)) {
19
20
  isAsync = true
20
21
  }
@@ -19,7 +19,8 @@ const objectSet = require('./objectSet')
19
19
  const functionObjectAll = function (funcs, args) {
20
20
  const result = {}, promises = []
21
21
  for (const key in funcs) {
22
- const resultItem = funcs[key](...args)
22
+ const f = funcs[key]
23
+ const resultItem = typeof f == 'function' ? f(...args) : f
23
24
  if (isPromise(resultItem)) {
24
25
  promises.push(resultItem.then(curry3(objectSet, result, key, __)))
25
26
  } else {
package/all.js CHANGED
@@ -1,5 +1,8 @@
1
+ const isPromise = require('./_internal/isPromise')
1
2
  const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
3
+ const areAllValuesNonfunctions = require('./_internal/areAllValuesNonfunctions')
2
4
  const promiseAll = require('./_internal/promiseAll')
5
+ const promiseObjectAll = require('./_internal/promiseObjectAll')
3
6
  const isArray = require('./_internal/isArray')
4
7
  const __ = require('./_internal/placeholder')
5
8
  const curry2 = require('./_internal/curry2')
@@ -9,21 +12,54 @@ const functionArrayAllSeries = require('./_internal/functionArrayAllSeries')
9
12
  const functionObjectAll = require('./_internal/functionObjectAll')
10
13
 
11
14
  /**
12
- * @name all
15
+ * @name _allValues
13
16
  *
14
17
  * @synopsis
15
18
  * ```coffeescript [specscript]
16
- * all(...args, funcsArray Array<function>) -> result Promise|Array
17
- *
18
- * all(funcsArray Array<function>)(...args) -> result Promise|Array
19
- *
20
- * all(...args, funcsObject Object<function>) -> result Promise|Object
19
+ * _allValues(values Array<Promise|any>) -> Promise<Array>
20
+ * _allValues(values Object<Promise|any>) -> Promise<Object>
21
+ * ```
22
+ */
23
+ const _allValues = function (values) {
24
+ if (isArray(values)) {
25
+ return areAnyValuesPromises(values)
26
+ ? promiseAll(values)
27
+ : values
28
+ }
29
+ return areAnyValuesPromises(values)
30
+ ? promiseObjectAll(values)
31
+ : values
32
+ }
33
+
34
+ /**
35
+ * @name all
21
36
  *
22
- * all(funcsObject Object<function>)(...args) -> result Promise|Object
37
+ * @synopsis
38
+ * ```coffeescript [specscript]
39
+ * all(values Promise|Array<Promise|any>) -> result Promise|Array
40
+ * all(values Promise|Object<Promise|any>) -> result Promise|Object
41
+ *
42
+ * all(
43
+ * ...args,
44
+ * resolversOrValues Array<function|Promise|any>
45
+ * ) -> result Promise|Array
46
+ *
47
+ * all(
48
+ * resolversOrValues Array<function|Promise|any>
49
+ * )(...args) -> result Promise|Array
50
+ *
51
+ * all(
52
+ * ...args,
53
+ * resolversOrValues Object<function|Promise|any>
54
+ * ) -> result Promise|Object
55
+ *
56
+ * all(
57
+ * resolversOrValues Object<function|Promise|any>
58
+ * )(...args) -> result Promise|Object
23
59
  * ```
24
60
  *
25
61
  * @description
26
- * Function executor and composer. Accepts either an array of functions or an object of functions. Calls each function of the provided array or object in parallel with the provided arguments. Returns either an array or object of the execution results.
62
+ * Calls an array or object of resolver functions or values `resolversOrValues` with provided arguments.
27
63
  *
28
64
  * ```javascript [playground]
29
65
  * const createArrayOfGreetingsFor = all([
@@ -32,24 +68,29 @@ const functionObjectAll = require('./_internal/functionObjectAll')
32
68
  * name => `Hello ${name}`,
33
69
  * ])
34
70
  *
35
- * const arrayOfGreetingsForFred = createArrayOfGreetingsFor('Fred')
36
- *
37
- * console.log(arrayOfGreetingsForFred)
38
- * // ['Hi Fred', 'Hey Fred', 'Hello Fred']
71
+ * const arrayOfGreetingsFor1 = createArrayOfGreetingsFor('1')
39
72
  *
40
- * const createObjectOfGreetingsFor = all({
41
- * hi: name => `Hi ${name}`,
42
- * hey: name => `Hey ${name}`,
43
- * hello: name => `Hello ${name}`,
44
- * })
73
+ * console.log(arrayOfGreetingsFor1)
74
+ * // ['Hi 1', 'Hey 1', 'Hello 1']
75
+ * ```
45
76
  *
46
- * const objectOfGreetingsForJane = createObjectOfGreetingsFor('Jane')
77
+ * If provided only values for `resolversOrValues`, returns an array or object with the same shape as `resolversOrValues` with any Promises resolved.
47
78
  *
48
- * console.log(objectOfGreetingsForJane)
49
- * // { hi: 'Hi Jane', hey: 'Hey Jane', hello: 'Hello Jane' }
79
+ * ```javascript [playground]
80
+ * all([
81
+ * Promise.resolve(1),
82
+ * Promise.resolve(2),
83
+ * 3,
84
+ * ]).then(console.log) // [1, 2, 3]
85
+ *
86
+ * all({
87
+ * a: Promise.resolve(1),
88
+ * b: Promise.resolve(2),
89
+ * c: 3,
90
+ * }).then(console.log) // { a: 1, b: 2, c: 3 }
50
91
  * ```
51
92
  *
52
- * `all` can simultaneously compose objects and handle promises.
93
+ * `all` can be used in a pipeline to compose and manpulate data.
53
94
  *
54
95
  * ```javascript [playground]
55
96
  * const identity = value => value
@@ -72,6 +113,14 @@ const functionObjectAll = require('./_internal/functionObjectAll')
72
113
  * getAndLogUserById('1') // Got user {"_id":1,"name":"George"} by id 1
73
114
  * ```
74
115
  *
116
+ * Values passed in resolver position are set on the result object or array directly. If any of these values are promises, they are resolved for their values before being set on the result object or array.
117
+ *
118
+ * ```javascript [playground]
119
+ * all({}, [
120
+ * Promise.resolve(1),
121
+ * ])
122
+ * ```
123
+ *
75
124
  * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
76
125
  *
77
126
  * ```javascript [playground]
@@ -84,8 +133,37 @@ const functionObjectAll = require('./_internal/functionObjectAll')
84
133
  *
85
134
  * @execution concurrent
86
135
  */
87
-
88
136
  const all = function (...args) {
137
+ if (args.length == 1) {
138
+ const resolversOrValues = args[0]
139
+ if (isPromise(resolversOrValues)) {
140
+ return resolversOrValues.then(_allValues)
141
+ }
142
+ if (areAllValuesNonfunctions(resolversOrValues)) {
143
+ return _allValues(resolversOrValues)
144
+ }
145
+ return isArray(resolversOrValues)
146
+ ? curryArgs2(functionArrayAll, resolversOrValues, __)
147
+ : curryArgs2(functionObjectAll, resolversOrValues, __)
148
+ }
149
+
150
+ const resolversOrValues = args[args.length - 1]
151
+ const argValues = args.slice(0, -1)
152
+
153
+ if (areAnyValuesPromises(argValues)) {
154
+ return isArray(resolversOrValues)
155
+ ? promiseAll(argValues)
156
+ .then(curry2(functionArrayAll, resolversOrValues, __))
157
+ : promiseAll(argValues)
158
+ .then(curry2(functionObjectAll, resolversOrValues, __))
159
+ }
160
+
161
+ return isArray(resolversOrValues)
162
+ ? functionArrayAll(resolversOrValues, argValues)
163
+ : functionObjectAll(resolversOrValues, argValues)
164
+
165
+ /*
166
+ ////////////////////////////////////////////////////////////////
89
167
  const funcs = args.pop()
90
168
  if (args.length == 0) {
91
169
  return isArray(funcs)
@@ -102,6 +180,7 @@ const all = function (...args) {
102
180
  return isArray(funcs)
103
181
  ? functionArrayAll(funcs, args)
104
182
  : functionObjectAll(funcs, args)
183
+ */
105
184
  }
106
185
 
107
186
  /**
package/assign.js CHANGED
@@ -18,13 +18,18 @@ const _assign = function (object, funcs) {
18
18
  *
19
19
  * @synopsis
20
20
  * ```coffeescript [specscript]
21
- * assign(object Promise|Object, resolvers Object<function>) -> result Promise|Object
21
+ * assign(
22
+ * o Promise|Object,
23
+ * resolversOrValues Object<function|Promise|any>
24
+ * ) -> result Promise|Object
22
25
  *
23
- * assign(resolvers Object<function>)(object Object) -> result Promise|Object
26
+ * assign(
27
+ * resolversOrValues Object<function|Promise|any>
28
+ * )(o Object) -> result Promise|Object
24
29
  * ```
25
30
  *
26
31
  * @description
27
- * Function executor and composer. Accepts an object of resolver functions and an argument object. Creates a result object from the argument object, evaluates each resolver with the argument object, and assigns to the result object the evaluations at the corresponding resolver keys.
32
+ * Function executor and composer. Accepts an object of resolver functions or values and an object `o`. Creates a result object from the argument object, evaluates each resolver with the argument object, and assigns to the result object the evaluations at the corresponding resolver keys.
28
33
  *
29
34
  * ```javascript [playground]
30
35
  * const assignSquaredAndCubed = assign({
@@ -55,6 +60,17 @@ const _assign = function (object, funcs) {
55
60
  * // { numbers: [1, 2, 3, 4, 5], total: 15 }
56
61
  * ```
57
62
  *
63
+ * Values passed in resolver position are set on the result object directly. If any of these values are promises, they are resolved for their values before being set on the result object.
64
+ *
65
+ * ```javascript [playground]
66
+ * assign({}, {
67
+ * a: 1,
68
+ * b: Promise.resolve(2),
69
+ * c: () => 3,
70
+ * d: async o => Object.keys(o).length,
71
+ * }).then(console.log) // { a: 1, b: 2, c: 3, d: 0 }
72
+ * ```
73
+ *
58
74
  * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
59
75
  *
60
76
  * ```javascript [playground]
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.6.0
2
+ * rubico v2.6.2
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.6.0
2
+ * rubico v2.6.2
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.6.0
2
+ * rubico v2.6.2
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.6.0
2
+ * rubico v2.6.2
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.6.0
2
+ * rubico v2.6.2
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/__.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.6.0
2
+ * rubico v2.6.2
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/__.es.min.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.6.0
2
+ * rubico v2.6.2
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/__.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.6.0
2
+ * rubico v2.6.2
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/__.min.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.6.0
2
+ * rubico v2.6.2
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/__.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.6.0
2
+ * rubico v2.6.2
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/all.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.6.0
2
+ * rubico v2.6.2
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -7,11 +7,23 @@
7
7
 
8
8
  const isPromise = value => value != null && typeof value.then == 'function'
9
9
 
10
+ const isArray = Array.isArray
11
+
10
12
  const areAnyValuesPromises = function (values) {
11
- const length = values.length
12
- let index = -1
13
- while (++index < length) {
14
- const value = values[index]
13
+ if (isArray(values)) {
14
+ const length = values.length
15
+ let index = -1
16
+ while (++index < length) {
17
+ const value = values[index]
18
+ if (isPromise(value)) {
19
+ return true
20
+ }
21
+ }
22
+ return false
23
+ }
24
+
25
+ for (const key in values) {
26
+ const value = values[key]
15
27
  if (isPromise(value)) {
16
28
  return true
17
29
  }
@@ -19,9 +31,52 @@ const areAnyValuesPromises = function (values) {
19
31
  return false
20
32
  }
21
33
 
34
+ const areAllValuesNonfunctions = function (values) {
35
+ if (isArray(values)) {
36
+ const length = values.length
37
+ let index = -1
38
+ while (++index < length) {
39
+ if (typeof values[index] == 'function') {
40
+ return false
41
+ }
42
+ }
43
+ return true
44
+ }
45
+
46
+ for (const key in values) {
47
+ if (typeof values[key] == 'function') {
48
+ return false
49
+ }
50
+ }
51
+ return true
52
+ }
53
+
22
54
  const promiseAll = Promise.all.bind(Promise)
23
55
 
24
- const isArray = Array.isArray
56
+ const promiseObjectAllExecutor = object => function executor(resolve) {
57
+ const result = {}
58
+ let numPromises = 0
59
+ for (const key in object) {
60
+ const value = object[key]
61
+ if (isPromise(value)) {
62
+ numPromises += 1
63
+ value.then((key => function (res) {
64
+ result[key] = res
65
+ numPromises -= 1
66
+ if (numPromises == 0) {
67
+ resolve(result)
68
+ }
69
+ })(key))
70
+ } else {
71
+ result[key] = value
72
+ }
73
+ }
74
+ if (numPromises == 0) {
75
+ resolve(result)
76
+ }
77
+ }
78
+
79
+ const promiseObjectAll = object => new Promise(promiseObjectAllExecutor(object))
25
80
 
26
81
  const __ = Symbol.for('placeholder')
27
82
 
@@ -71,7 +126,8 @@ const functionArrayAll = function (funcs, args) {
71
126
  result = Array(funcsLength)
72
127
  let funcsIndex = -1, isAsync = false
73
128
  while (++funcsIndex < funcsLength) {
74
- const resultItem = funcs[funcsIndex](...args)
129
+ const f = funcs[funcsIndex]
130
+ const resultItem = typeof f == 'function' ? f(...args) : f
75
131
  if (isPromise(resultItem)) {
76
132
  isAsync = true
77
133
  }
@@ -195,7 +251,8 @@ const always = value => function getter() { return value }
195
251
  const functionObjectAll = function (funcs, args) {
196
252
  const result = {}, promises = []
197
253
  for (const key in funcs) {
198
- const resultItem = funcs[key](...args)
254
+ const f = funcs[key]
255
+ const resultItem = typeof f == 'function' ? f(...args) : f
199
256
  if (isPromise(resultItem)) {
200
257
  promises.push(resultItem.then(curry3(objectSet, result, key, __)))
201
258
  } else {
@@ -205,7 +262,48 @@ const functionObjectAll = function (funcs, args) {
205
262
  return promises.length == 0 ? result : promiseAll(promises).then(always(result))
206
263
  }
207
264
 
265
+ const _allValues = function (values) {
266
+ if (isArray(values)) {
267
+ return areAnyValuesPromises(values)
268
+ ? promiseAll(values)
269
+ : values
270
+ }
271
+ return areAnyValuesPromises(values)
272
+ ? promiseObjectAll(values)
273
+ : values
274
+ }
275
+
208
276
  const all = function (...args) {
277
+ if (args.length == 1) {
278
+ const resolversOrValues = args[0]
279
+ if (isPromise(resolversOrValues)) {
280
+ return resolversOrValues.then(_allValues)
281
+ }
282
+ if (areAllValuesNonfunctions(resolversOrValues)) {
283
+ return _allValues(resolversOrValues)
284
+ }
285
+ return isArray(resolversOrValues)
286
+ ? curryArgs2(functionArrayAll, resolversOrValues, __)
287
+ : curryArgs2(functionObjectAll, resolversOrValues, __)
288
+ }
289
+
290
+ const resolversOrValues = args[args.length - 1]
291
+ const argValues = args.slice(0, -1)
292
+
293
+ if (areAnyValuesPromises(argValues)) {
294
+ return isArray(resolversOrValues)
295
+ ? promiseAll(argValues)
296
+ .then(curry2(functionArrayAll, resolversOrValues, __))
297
+ : promiseAll(argValues)
298
+ .then(curry2(functionObjectAll, resolversOrValues, __))
299
+ }
300
+
301
+ return isArray(resolversOrValues)
302
+ ? functionArrayAll(resolversOrValues, argValues)
303
+ : functionObjectAll(resolversOrValues, argValues)
304
+
305
+ /*
306
+ ////////////////////////////////////////////////////////////////
209
307
  const funcs = args.pop()
210
308
  if (args.length == 0) {
211
309
  return isArray(funcs)
@@ -222,6 +320,7 @@ const all = function (...args) {
222
320
  return isArray(funcs)
223
321
  ? functionArrayAll(funcs, args)
224
322
  : functionObjectAll(funcs, args)
323
+ */
225
324
  }
226
325
 
227
326
  all.series = function allSeries(...args) {
@@ -1,7 +1,7 @@
1
1
  /**
2
- * rubico v2.6.0
2
+ * rubico v2.6.2
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
6
6
  */
7
- const isPromise=r=>null!=r&&"function"==typeof r.then,areAnyValuesPromises=function(r){const n=r.length;let e=-1;for(;++e<n;){const n=r[e];if(isPromise(n))return!0}return!1},promiseAll=Promise.all.bind(Promise),isArray=Array.isArray,__=Symbol.for("placeholder"),curry2ResolveArg0=(r,n)=>function(e){return r(e,n)},curry2ResolveArg1=(r,n)=>function(e){return r(n,e)},curry2=function(r,n,e){return n==__?curry2ResolveArg0(r,e):curry2ResolveArg1(r,n)},curryArgs2ResolveArgs0=(r,n,e)=>function(...e){return r(e,n)},curryArgs2ResolveArgs1=(r,n,e)=>function(...e){return r(n,e)},curryArgs2=function(r,n,e){return n==__?curryArgs2ResolveArgs0(r,e):curryArgs2ResolveArgs1(r,n)},functionArrayAll=function(r,n){const e=r.length,t=Array(e);let o=-1,u=!1;for(;++o<e;){const e=r[o](...n);isPromise(e)&&(u=!0),t[o]=e}return u?promiseAll(t):t},funcConcat=(r,n)=>function(...e){const t=r(...e);return isPromise(t)?t.then(n):n(t)},curry3ResolveArg0=(r,n,e)=>function(t){return r(t,n,e)},curry3ResolveArg1=(r,n,e)=>function(t){return r(n,t,e)},curry3ResolveArg2=(r,n,e)=>function(t){return r(n,e,t)},curry3=function(r,n,e,t){return n==__?curry3ResolveArg0(r,e,t):e==__?curry3ResolveArg1(r,n,t):curry3ResolveArg2(r,n,e)},curry4ResolveArg0=(r,n,e,t)=>function(o){return r(o,n,e,t)},curry4ResolveArg1=(r,n,e,t)=>function(o){return r(n,o,e,t)},curry4ResolveArg2=(r,n,e,t)=>function(o){return r(n,e,o,t)},curry4ResolveArg3=(r,n,e,t)=>function(o){return r(n,e,t,o)},curry4=function(r,n,e,t,o){return n==__?curry4ResolveArg0(r,e,t,o):e==__?curry4ResolveArg1(r,n,t,o):t==__?curry4ResolveArg2(r,n,e,o):curry4ResolveArg3(r,n,e,t)},objectSet=function(r,n,e){return r[n]=e,r},asyncFunctionArrayAllSeries=async function(r,n,e,t){const o=r.length;for(;++t<o;){const o=r[t](...n);e[t]=isPromise(o)?await o:o}return e},functionArrayAllSeries=function(r,n){const e=r.length,t=[];let o=-1;for(;++o<e;){const e=r[o](...n);if(isPromise(e))return e.then(funcConcat(curry3(objectSet,t,o,__),curry4(asyncFunctionArrayAllSeries,r,n,__,o)));t[o]=e}return t},always=r=>function(){return r},functionObjectAll=function(r,n){const e={},t=[];for(const o in r){const u=r[o](...n);isPromise(u)?t.push(u.then(curry3(objectSet,e,o,__))):e[o]=u}return 0==t.length?e:promiseAll(t).then(always(e))},all=function(...r){const n=r.pop();return 0==r.length?isArray(n)?curryArgs2(functionArrayAll,n,__):curryArgs2(functionObjectAll,n,__):areAnyValuesPromises(r)?isArray(n)?promiseAll(r).then(curry2(functionArrayAll,n,__)):promiseAll(r).then(curry2(functionObjectAll,n,__)):isArray(n)?functionArrayAll(n,r):functionObjectAll(n,r)};all.series=function(...r){const n=r.pop();return 0==r.length?curryArgs2(functionArrayAllSeries,n,__):areAnyValuesPromises(r)?promiseAll(r).then(curry2(functionArrayAllSeries,n,__)):functionArrayAllSeries(n,r)};export default all;
7
+ const isPromise=r=>null!=r&&"function"==typeof r.then,isArray=Array.isArray,areAnyValuesPromises=function(r){if(isArray(r)){const n=r.length;let e=-1;for(;++e<n;){const n=r[e];if(isPromise(n))return!0}return!1}for(const n in r){const e=r[n];if(isPromise(e))return!0}return!1},areAllValuesNonfunctions=function(r){if(isArray(r)){const n=r.length;let e=-1;for(;++e<n;)if("function"==typeof r[e])return!1;return!0}for(const n in r)if("function"==typeof r[n])return!1;return!0},promiseAll=Promise.all.bind(Promise),promiseObjectAllExecutor=r=>function(n){const e={};let t=0;for(const o in r){const u=r[o];isPromise(u)?(t+=1,u.then((r=>function(o){e[r]=o,t-=1,0==t&&n(e)})(o))):e[o]=u}0==t&&n(e)},promiseObjectAll=r=>new Promise(promiseObjectAllExecutor(r)),__=Symbol.for("placeholder"),curry2ResolveArg0=(r,n)=>function(e){return r(e,n)},curry2ResolveArg1=(r,n)=>function(e){return r(n,e)},curry2=function(r,n,e){return n==__?curry2ResolveArg0(r,e):curry2ResolveArg1(r,n)},curryArgs2ResolveArgs0=(r,n,e)=>function(...e){return r(e,n)},curryArgs2ResolveArgs1=(r,n,e)=>function(...e){return r(n,e)},curryArgs2=function(r,n,e){return n==__?curryArgs2ResolveArgs0(r,e):curryArgs2ResolveArgs1(r,n)},functionArrayAll=function(r,n){const e=r.length,t=Array(e);let o=-1,u=!1;for(;++o<e;){const e=r[o],s="function"==typeof e?e(...n):e;isPromise(s)&&(u=!0),t[o]=s}return u?promiseAll(t):t},funcConcat=(r,n)=>function(...e){const t=r(...e);return isPromise(t)?t.then(n):n(t)},curry3ResolveArg0=(r,n,e)=>function(t){return r(t,n,e)},curry3ResolveArg1=(r,n,e)=>function(t){return r(n,t,e)},curry3ResolveArg2=(r,n,e)=>function(t){return r(n,e,t)},curry3=function(r,n,e,t){return n==__?curry3ResolveArg0(r,e,t):e==__?curry3ResolveArg1(r,n,t):curry3ResolveArg2(r,n,e)},curry4ResolveArg0=(r,n,e,t)=>function(o){return r(o,n,e,t)},curry4ResolveArg1=(r,n,e,t)=>function(o){return r(n,o,e,t)},curry4ResolveArg2=(r,n,e,t)=>function(o){return r(n,e,o,t)},curry4ResolveArg3=(r,n,e,t)=>function(o){return r(n,e,t,o)},curry4=function(r,n,e,t,o){return n==__?curry4ResolveArg0(r,e,t,o):e==__?curry4ResolveArg1(r,n,t,o):t==__?curry4ResolveArg2(r,n,e,o):curry4ResolveArg3(r,n,e,t)},objectSet=function(r,n,e){return r[n]=e,r},asyncFunctionArrayAllSeries=async function(r,n,e,t){const o=r.length;for(;++t<o;){const o=r[t](...n);e[t]=isPromise(o)?await o:o}return e},functionArrayAllSeries=function(r,n){const e=r.length,t=[];let o=-1;for(;++o<e;){const e=r[o](...n);if(isPromise(e))return e.then(funcConcat(curry3(objectSet,t,o,__),curry4(asyncFunctionArrayAllSeries,r,n,__,o)));t[o]=e}return t},always=r=>function(){return r},functionObjectAll=function(r,n){const e={},t=[];for(const o in r){const u=r[o],s="function"==typeof u?u(...n):u;isPromise(s)?t.push(s.then(curry3(objectSet,e,o,__))):e[o]=s}return 0==t.length?e:promiseAll(t).then(always(e))},_allValues=function(r){return isArray(r)?areAnyValuesPromises(r)?promiseAll(r):r:areAnyValuesPromises(r)?promiseObjectAll(r):r},all=function(...r){if(1==r.length){const n=r[0];return isPromise(n)?n.then(_allValues):areAllValuesNonfunctions(n)?_allValues(n):isArray(n)?curryArgs2(functionArrayAll,n,__):curryArgs2(functionObjectAll,n,__)}const n=r[r.length-1],e=r.slice(0,-1);return areAnyValuesPromises(e)?isArray(n)?promiseAll(e).then(curry2(functionArrayAll,n,__)):promiseAll(e).then(curry2(functionObjectAll,n,__)):isArray(n)?functionArrayAll(n,e):functionObjectAll(n,e)};all.series=function(...r){const n=r.pop();return 0==r.length?curryArgs2(functionArrayAllSeries,n,__):areAnyValuesPromises(r)?promiseAll(r).then(curry2(functionArrayAllSeries,n,__)):functionArrayAllSeries(n,r)};export default all;