rubico 2.7.10 → 2.8.1

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 (343) hide show
  1. package/LICENSE +5 -17
  2. package/README.md +1 -1
  3. package/_internal/curryArity.js +34 -12
  4. package/_internal/funcApply2.js +18 -0
  5. package/_internal/mapMapEntries.js +1 -1
  6. package/_internal/objectMapEntries.js +1 -1
  7. package/curry.js +95 -12
  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 +146 -13
  44. package/dist/curry.es.min.js +2 -2
  45. package/dist/curry.js +146 -13
  46. package/dist/curry.min.js +2 -2
  47. package/dist/curry.mjs +146 -13
  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 +1 -1
  74. package/dist/get.es.min.js +1 -1
  75. package/dist/get.js +1 -1
  76. package/dist/get.min.js +1 -1
  77. package/dist/get.mjs +1 -1
  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 +52 -13
  99. package/dist/map.es.min.js +2 -2
  100. package/dist/map.js +52 -13
  101. package/dist/map.min.js +2 -2
  102. package/dist/map.mjs +52 -13
  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 +63 -18
  134. package/dist/rubico.es.min.js +2 -2
  135. package/dist/rubico.global.js +63 -18
  136. package/dist/rubico.global.min.js +2 -2
  137. package/dist/rubico.js +63 -18
  138. package/dist/rubico.min.js +2 -2
  139. package/dist/rubico.mjs +63 -18
  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 +41 -17
  161. package/dist/thunkify.es.min.js +2 -2
  162. package/dist/thunkify.js +41 -17
  163. package/dist/thunkify.min.js +2 -2
  164. package/dist/thunkify.mjs +41 -17
  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 +1 -1
  286. package/dist/x/maxBy.es.min.js +1 -1
  287. package/dist/x/maxBy.js +1 -1
  288. package/dist/x/maxBy.min.js +1 -1
  289. package/dist/x/maxBy.mjs +1 -1
  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 +52 -13
  296. package/dist/x/pluck.es.min.js +2 -2
  297. package/dist/x/pluck.js +52 -13
  298. package/dist/x/pluck.min.js +2 -2
  299. package/dist/x/pluck.mjs +52 -13
  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/es.js +63 -18
  341. package/index.js +63 -18
  342. package/package.json +1 -1
  343. package/thunkify.js +66 -6
package/LICENSE CHANGED
@@ -1,21 +1,9 @@
1
- The MIT License (MIT)
1
+ The CLOUT Free and Open Source Software License (CFOSS)
2
2
 
3
- Copyright (c) 2025 Richard Tong
3
+ © Richard Yufei Tong, King of Software
4
4
 
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
11
6
 
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
7
+ 1. This permission notice is included in all copies or substantial portions of the Software.
14
8
 
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
9
+ THE SOFTWARE IS PROVIDED AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE, OR IN THE USE OF OR OTHER DEALINGS OF THE SOFTWARE.
package/README.md CHANGED
@@ -121,7 +121,7 @@ const {
121
121
  } = rubico
122
122
  ```
123
123
 
124
- With [A]synchronous Functional Programming, any function may be asynchronous and return a promise. All promises are resolved for their values before continuing with the operation.
124
+ With [A]synchronous Functional Programming, any function may be asynchronous and return a promise, and arguments may be promises as well. If a promise is provided to a Rubico operator in argument position, it is resolved for its value before continuing with the operation.
125
125
 
126
126
  ```javascript [playground]
127
127
  const helloPromise = Promise.resolve('hello')
@@ -1,4 +1,9 @@
1
+ const areAnyValuesPromises = require('./areAnyValuesPromises')
2
+ const promiseAll = require('./promiseAll')
1
3
  const __ = require('./placeholder')
4
+ const curry4 = require('./curry4')
5
+ const curry3 = require('./curry3')
6
+ const funcApply2 = require('./funcApply2')
2
7
 
3
8
  /**
4
9
  * @name _curryArity
@@ -9,13 +14,14 @@ const __ = require('./placeholder')
9
14
  *
10
15
  * var arity number,
11
16
  * func function,
17
+ * context object,
12
18
  * args Array<__|any>,
13
19
  * curried function
14
20
  *
15
- * _curryArity(arity, func, args) -> curried|any
21
+ * _curryArity(context, arity, func, args) -> curried|any
16
22
  * ```
17
23
  */
18
- const _curryArity = (arity, func, args) => function curried(...curriedArgs) {
24
+ const _curryArity = (arity, func, context, args) => function curried(...curriedArgs) {
19
25
  const argsLength = args.length,
20
26
  curriedArgsLength = curriedArgs.length,
21
27
  nextArgs = []
@@ -34,10 +40,16 @@ const _curryArity = (arity, func, args) => function curried(...curriedArgs) {
34
40
  } else {
35
41
  nextArgs.push(arg)
36
42
  }
43
+
37
44
  if (nextArgs.length == arity) {
45
+ if (areAnyValuesPromises(nextArgs)) {
46
+ return numCurriedPlaceholders == 0
47
+ ? promiseAll(nextArgs).then(curry3(funcApply2, func, context, __))
48
+ : promiseAll(nextArgs).then(curry4(curryArity, arity, func, context, __))
49
+ }
38
50
  return numCurriedPlaceholders == 0
39
- ? func(...nextArgs)
40
- : curryArity(arity, func, nextArgs)
51
+ ? func.apply(context, nextArgs)
52
+ : curryArity(arity, func, context, nextArgs)
41
53
  }
42
54
  }
43
55
 
@@ -47,13 +59,22 @@ const _curryArity = (arity, func, args) => function curried(...curriedArgs) {
47
59
  numCurriedPlaceholders += 1
48
60
  }
49
61
  nextArgs.push(curriedArg)
62
+
50
63
  if (nextArgs.length == arity) {
64
+ if (areAnyValuesPromises(nextArgs)) {
65
+ return numCurriedPlaceholders == 0
66
+ ? promiseAll(nextArgs).then(curry3(funcApply2, func, context, __))
67
+ : promiseAll(nextArgs).then(curry4(curryArity, arity, func, context, __))
68
+ }
51
69
  return numCurriedPlaceholders == 0
52
- ? func(...nextArgs)
53
- : curryArity(arity, func, nextArgs)
70
+ ? func.apply(context, nextArgs)
71
+ : curryArity(arity, func, context, nextArgs)
54
72
  }
55
73
  }
56
- return curryArity(arity, func, nextArgs)
74
+
75
+ return areAnyValuesPromises(nextArgs)
76
+ ? promiseAll(nextArgs).then(curry4(curryArity, arity, func, context, __))
77
+ : curryArity(arity, func, context, nextArgs)
57
78
  }
58
79
 
59
80
  /**
@@ -65,29 +86,30 @@ const _curryArity = (arity, func, args) => function curried(...curriedArgs) {
65
86
  *
66
87
  * var arity number,
67
88
  * func function,
89
+ * context object,
68
90
  * args Array<__|any>,
69
91
  * curried function
70
92
  *
71
- * curryArity(arity, func, args) -> curried|any
93
+ * curryArity(arity, func, context, args) -> curried|any
72
94
  * ```
73
95
  *
74
96
  * @description
75
97
  * Create a curried version of a function with specified arity.
76
98
  */
77
99
 
78
- const curryArity = function (arity, func, args) {
100
+ const curryArity = function (arity, func, context, args) {
79
101
  const argsLength = args.length
80
102
  if (argsLength < arity) {
81
- return _curryArity(arity, func, args)
103
+ return _curryArity(arity, func, context, args)
82
104
  }
83
105
  let argsIndex = -1
84
106
  while (++argsIndex < argsLength) {
85
107
  const arg = args[argsIndex]
86
108
  if (arg == __) {
87
- return _curryArity(arity, func, args)
109
+ return _curryArity(arity, func, context, args)
88
110
  }
89
111
  }
90
- return func(...args)
112
+ return func.apply(context, args)
91
113
  }
92
114
 
93
115
  module.exports = curryArity
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @name funcApply2
3
+ *
4
+ * @synopsis
5
+ * ```coffeescript [specscript]
6
+ * funcApply2<
7
+ * func function,
8
+ * context object,
9
+ * args Array
10
+ * >(func, args) -> func(...args)
11
+ * ```
12
+ *
13
+ * @description
14
+ * Apply arguments to a function with context.
15
+ */
16
+ const funcApply2 = (func, context, args) => func.apply(context, args)
17
+
18
+ module.exports = funcApply2
@@ -11,7 +11,7 @@ const mapMapEntriesForEachCallback = (
11
11
  ) => function callback(value, key) {
12
12
  const mapping = mapper([key, value])
13
13
  if (isPromise(mapping)) {
14
- promises.push(mapping.then(spread2(curryArity(3, mapSet, [result]))))
14
+ promises.push(mapping.then(spread2(curryArity(3, mapSet, this, [result]))))
15
15
  } else {
16
16
  result.set(mapping[0], mapping[1])
17
17
  }
@@ -24,7 +24,7 @@ const objectMapEntries = function (object, mapper) {
24
24
  mapping = mapper([key, value])
25
25
  if (isPromise(mapping)) {
26
26
  promises.push(mapping.then(
27
- spread2(curryArity(3, objectSet, [result]))))
27
+ spread2(curryArity(3, objectSet, this, [result]))))
28
28
  } else {
29
29
  result[mapping[0]] = mapping[1]
30
30
  }
package/curry.js CHANGED
@@ -1,3 +1,7 @@
1
+ const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
2
+ const promiseAll = require('./_internal/promiseAll')
3
+ const __ = require('./_internal/placeholder')
4
+ const curry4 = require('./_internal/curry4')
1
5
  const curryArity = require('./_internal/curryArity')
2
6
 
3
7
  /**
@@ -17,20 +21,32 @@ const curryArity = require('./_internal/curryArity')
17
21
  * ```
18
22
  *
19
23
  * @description
20
- * Enable partial application of a function's arguments in any order. Provide the placeholder value `__` to specify an argument to be resolved in the partially applied function.
24
+ * Enables partial application of a function's arguments in any order. Provide the placeholder value `__` to specify an argument to be resolved in the partially applied function.
21
25
  *
22
26
  * ```javascript [playground]
23
27
  * const add = (a, b, c) => a + b + c
24
28
  *
25
- * console.log(curry(add, 'a', 'b', 'c')) // 'abc'
26
- * console.log(curry(add)('a', 'b', 'c')) // 'abc'
27
- * console.log(curry(add, 'a')('b', 'c')) // 'abc'
28
- * console.log(curry(add, 'a', 'b')('c')) // 'abc'
29
- * console.log(curry(add)('a')('b')('c')) // 'abc'
29
+ * console.log(curry(add, 'a', 'b', 'c'))
30
+ * console.log(curry(add)('a', 'b', 'c'))
31
+ * console.log(curry(add, 'a')('b', 'c'))
32
+ * console.log(curry(add, 'a', 'b')('c'))
33
+ * console.log(curry(add)('a')('b')('c'))
30
34
  *
31
- * console.log(curry(add, __, 'b', 'c')('a')) // abc
32
- * console.log(curry(add, __, __, 'c')('a', 'b')) // abc
33
- * console.log(curry(add, __, __, 'c')(__, 'b')('a')) // abc
35
+ * console.log(curry(add, __, 'b', 'c')('a'))
36
+ * console.log(curry(add, __, __, 'c')('a', 'b'))
37
+ * console.log(curry(add, __, __, 'c')(__, 'b')('a'))
38
+ * ```
39
+ *
40
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
41
+ *
42
+ * ```javascript [playground]
43
+ * const add = (a, b, c) => a + b + c
44
+ *
45
+ * curry(add, Promise.resolve('a'), 'b', 'c').then(console.log)
46
+ *
47
+ * let curried = await curry(add, __, __, Promise.resolve('c'))
48
+ * curried = await curried(__, Promise.resolve('b'))
49
+ * console.log(curried('a'))
34
50
  * ```
35
51
  *
36
52
  * See also:
@@ -38,11 +54,17 @@ const curryArity = require('./_internal/curryArity')
38
54
  * * [thunkify](/docs/thunkify)
39
55
  * * [always](/docs/always)
40
56
  * * [curry.arity](/docs/curry.arity)
57
+ * * [curry.call](/docs/curry.call)
41
58
  * * [__](/docs/__)
42
59
  * * [Transducer.map](/docs/Transducer.map)
43
60
  *
44
61
  */
45
- const curry = (func, ...args) => curryArity(func.length, func, args)
62
+ const curry = (func, ...args) => {
63
+ if (areAnyValuesPromises(args)) {
64
+ return promiseAll(args).then(curry4(curryArity, func.length, func, this, __))
65
+ }
66
+ return curryArity(func.length, func, this, args)
67
+ }
46
68
 
47
69
  /**
48
70
  * @name curry.arity
@@ -61,7 +83,7 @@ const curry = (func, ...args) => curryArity(func.length, func, args)
61
83
  * ```
62
84
  *
63
85
  * @description
64
- * `curry` with specified arity (number of arguments taken by the function) as the first parameter.
86
+ * [curry](/docs/curry) with specified arity (number of arguments taken by the function) as the first parameter.
65
87
  *
66
88
  * ```javascript [playground]
67
89
  * const add = (a, b, c = 0) => a + b + c
@@ -74,12 +96,73 @@ const curry = (func, ...args) => curryArity(func.length, func, args)
74
96
  * * [thunkify](/docs/thunkify)
75
97
  * * [always](/docs/always)
76
98
  * * [curry](/docs/curry)
99
+ * * [curry.call](/docs/curry.call)
77
100
  * * [__](/docs/__)
78
101
  * * [Transducer.map](/docs/Transducer.map)
79
102
  *
80
103
  */
81
104
  curry.arity = function curryArity_(arity, func, ...args) {
82
- return curryArity(arity, func, args)
105
+ if (areAnyValuesPromises(args)) {
106
+ return promiseAll(args).then(curry4(curryArity, arity, func, this, __))
107
+ }
108
+ return curryArity(arity, func, this, args)
109
+ }
110
+
111
+ /**
112
+ * @name curry.call
113
+ *
114
+ * @synopsis
115
+ * ```coffeescript [specscript]
116
+ * type __ = Symbol(placeholder)
117
+ * type ArgsWithPlaceholder = Array<__|any>
118
+ *
119
+ * n number
120
+ * args ArgsWithPlaceholder
121
+ * moreArgs ArgsWithPlaceholder
122
+ *
123
+ * curry.call(func function, context object, ...args) -> curriedFuncOrResult function|any
124
+ * curriedFuncOrResult(...moreArgs) -> anotherCurriedFuncOrResult function|any
125
+ * ```
126
+ *
127
+ * @description
128
+ * [curry](/docs/curry) with specified context.
129
+ *
130
+ * ```javascript [playground]
131
+ * class Point {
132
+ * constructor(x, y) {
133
+ * this.x = x
134
+ * this.y = y
135
+ * }
136
+ *
137
+ * toString() {
138
+ * return `(${this.x}, ${this.y})`
139
+ * }
140
+ * }
141
+ *
142
+ * const point = new Point(100, 100)
143
+ *
144
+ * const box = { x: 5, y: 10 }
145
+ *
146
+ * console.log(curry.call(point.toString, point))
147
+ * console.log(curry.call(point.toString, box))
148
+ * ```
149
+ *
150
+ * See also:
151
+ * * [eq](/docs/eq)
152
+ * * [thunkify](/docs/thunkify)
153
+ * * [always](/docs/always)
154
+ * * [curry](/docs/curry)
155
+ * * [curry.arity](/docs/curry.arity)
156
+ * * [__](/docs/__)
157
+ * * [Transducer.map](/docs/Transducer.map)
158
+ *
159
+ */
160
+ curry.call = function call(func, context, ...args) {
161
+ if (areAnyValuesPromises(args)) {
162
+ return promiseAll(args).then(curry4(curryArity, func.length, func, context, __))
163
+ }
164
+ return curryArity(func.length, func, context, args)
83
165
  }
84
166
 
167
+
85
168
  module.exports = curry
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 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.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 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.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 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.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 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.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 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.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 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.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/all.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/all.min.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/all.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/always.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/always.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/always.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/and.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/and.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/and.min.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/and.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/assign.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/assign.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/assign.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/compose.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/compose.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.10
2
+ * rubico v2.8.1
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2026 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.