rubico 1.9.0 → 1.9.3

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 (412) hide show
  1. package/.github/workflows/nodejs.yml +1 -1
  2. package/CHANGELOG.md +16 -1
  3. package/_internal/areAllValuesNonfunctions.js +20 -0
  4. package/_internal/arrayConditional.js +42 -16
  5. package/_internal/nonfunctionsConditional.js +41 -0
  6. package/and.js +76 -32
  7. package/benchmarks/tryCatch.js +17 -2
  8. package/dist/__.es.js +1 -1
  9. package/dist/__.es.min.js +1 -1
  10. package/dist/__.js +1 -1
  11. package/dist/__.min.js +1 -1
  12. package/dist/__.min.mjs +1 -1
  13. package/dist/__.mjs +1 -1
  14. package/dist/all.es.js +1 -1
  15. package/dist/all.es.min.js +1 -1
  16. package/dist/all.js +1 -1
  17. package/dist/all.min.js +1 -1
  18. package/dist/all.min.mjs +1 -1
  19. package/dist/all.mjs +1 -1
  20. package/dist/always.es.js +1 -1
  21. package/dist/always.es.min.js +1 -1
  22. package/dist/always.js +1 -1
  23. package/dist/always.min.js +1 -1
  24. package/dist/always.min.mjs +1 -1
  25. package/dist/always.mjs +1 -1
  26. package/dist/and.es.js +64 -22
  27. package/dist/and.es.min.js +2 -2
  28. package/dist/and.js +64 -22
  29. package/dist/and.min.js +2 -2
  30. package/dist/and.min.mjs +2 -2
  31. package/dist/and.mjs +64 -22
  32. package/dist/any.es.js +1 -1
  33. package/dist/any.es.min.js +1 -1
  34. package/dist/any.js +1 -1
  35. package/dist/any.min.js +1 -1
  36. package/dist/any.min.mjs +1 -1
  37. package/dist/any.mjs +1 -1
  38. package/dist/assign.es.js +1 -1
  39. package/dist/assign.es.min.js +1 -1
  40. package/dist/assign.js +1 -1
  41. package/dist/assign.min.js +1 -1
  42. package/dist/assign.min.mjs +1 -1
  43. package/dist/assign.mjs +1 -1
  44. package/dist/curry.es.js +1 -1
  45. package/dist/curry.es.min.js +1 -1
  46. package/dist/curry.js +1 -1
  47. package/dist/curry.min.js +1 -1
  48. package/dist/curry.min.mjs +1 -1
  49. package/dist/curry.mjs +1 -1
  50. package/dist/eq.es.js +1 -1
  51. package/dist/eq.es.min.js +1 -1
  52. package/dist/eq.js +1 -1
  53. package/dist/eq.min.js +1 -1
  54. package/dist/eq.min.mjs +1 -1
  55. package/dist/eq.mjs +1 -1
  56. package/dist/filter.es.js +31 -4
  57. package/dist/filter.es.min.js +2 -2
  58. package/dist/filter.js +31 -4
  59. package/dist/filter.min.js +2 -2
  60. package/dist/filter.min.mjs +2 -2
  61. package/dist/filter.mjs +31 -4
  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.min.mjs +1 -1
  67. package/dist/flatMap.mjs +1 -1
  68. package/dist/fork.es.js +1 -1
  69. package/dist/fork.es.min.js +1 -1
  70. package/dist/fork.js +1 -1
  71. package/dist/fork.min.js +1 -1
  72. package/dist/fork.min.mjs +1 -1
  73. package/dist/fork.mjs +1 -1
  74. package/dist/get.es.js +1 -1
  75. package/dist/get.es.min.js +1 -1
  76. package/dist/get.js +1 -1
  77. package/dist/get.min.js +1 -1
  78. package/dist/get.min.mjs +1 -1
  79. package/dist/get.mjs +1 -1
  80. package/dist/gt.es.js +1 -1
  81. package/dist/gt.es.min.js +1 -1
  82. package/dist/gt.js +1 -1
  83. package/dist/gt.min.js +1 -1
  84. package/dist/gt.min.mjs +1 -1
  85. package/dist/gt.mjs +1 -1
  86. package/dist/gte.es.js +1 -1
  87. package/dist/gte.es.min.js +1 -1
  88. package/dist/gte.js +1 -1
  89. package/dist/gte.min.js +1 -1
  90. package/dist/gte.min.mjs +1 -1
  91. package/dist/gte.mjs +1 -1
  92. package/dist/lt.es.js +1 -1
  93. package/dist/lt.es.min.js +1 -1
  94. package/dist/lt.js +1 -1
  95. package/dist/lt.min.js +1 -1
  96. package/dist/lt.min.mjs +1 -1
  97. package/dist/lt.mjs +1 -1
  98. package/dist/lte.es.js +1 -1
  99. package/dist/lte.es.min.js +1 -1
  100. package/dist/lte.js +1 -1
  101. package/dist/lte.min.js +1 -1
  102. package/dist/lte.min.mjs +1 -1
  103. package/dist/lte.mjs +1 -1
  104. package/dist/map.es.js +32 -24
  105. package/dist/map.es.min.js +2 -2
  106. package/dist/map.js +32 -24
  107. package/dist/map.min.js +2 -2
  108. package/dist/map.min.mjs +2 -2
  109. package/dist/map.mjs +32 -24
  110. package/dist/not.es.js +1 -1
  111. package/dist/not.es.min.js +1 -1
  112. package/dist/not.js +1 -1
  113. package/dist/not.min.js +1 -1
  114. package/dist/not.min.mjs +1 -1
  115. package/dist/not.mjs +1 -1
  116. package/dist/omit.es.js +1 -1
  117. package/dist/omit.es.min.js +1 -1
  118. package/dist/omit.js +1 -1
  119. package/dist/omit.min.js +1 -1
  120. package/dist/omit.min.mjs +1 -1
  121. package/dist/omit.mjs +1 -1
  122. package/dist/or.es.js +74 -22
  123. package/dist/or.es.min.js +2 -2
  124. package/dist/or.js +74 -22
  125. package/dist/or.min.js +2 -2
  126. package/dist/or.min.mjs +2 -2
  127. package/dist/or.mjs +74 -22
  128. package/dist/pick.es.js +1 -1
  129. package/dist/pick.es.min.js +1 -1
  130. package/dist/pick.js +1 -1
  131. package/dist/pick.min.js +1 -1
  132. package/dist/pick.min.mjs +1 -1
  133. package/dist/pick.mjs +1 -1
  134. package/dist/pipe.es.js +1 -1
  135. package/dist/pipe.es.min.js +1 -1
  136. package/dist/pipe.js +1 -1
  137. package/dist/pipe.min.js +1 -1
  138. package/dist/pipe.min.mjs +1 -1
  139. package/dist/pipe.mjs +1 -1
  140. package/dist/reduce.es.js +12 -5
  141. package/dist/reduce.es.min.js +2 -2
  142. package/dist/reduce.js +12 -5
  143. package/dist/reduce.min.js +2 -2
  144. package/dist/reduce.min.mjs +2 -2
  145. package/dist/reduce.mjs +12 -5
  146. package/dist/rubico.es.js +197 -94
  147. package/dist/rubico.es.min.js +2 -2
  148. package/dist/rubico.js +197 -94
  149. package/dist/rubico.min.js +2 -2
  150. package/dist/rubico.min.mjs +2 -2
  151. package/dist/rubico.mjs +197 -94
  152. package/dist/set.es.js +45 -1
  153. package/dist/set.es.min.js +2 -2
  154. package/dist/set.js +45 -1
  155. package/dist/set.min.js +2 -2
  156. package/dist/set.min.mjs +2 -2
  157. package/dist/set.mjs +45 -1
  158. package/dist/switchCase.es.js +18 -18
  159. package/dist/switchCase.es.min.js +2 -2
  160. package/dist/switchCase.js +18 -18
  161. package/dist/switchCase.min.js +1 -1
  162. package/dist/switchCase.min.mjs +2 -2
  163. package/dist/switchCase.mjs +18 -18
  164. package/dist/tap.es.js +1 -1
  165. package/dist/tap.es.min.js +1 -1
  166. package/dist/tap.js +1 -1
  167. package/dist/tap.min.js +1 -1
  168. package/dist/tap.min.mjs +1 -1
  169. package/dist/tap.mjs +1 -1
  170. package/dist/thunkify.es.js +1 -1
  171. package/dist/thunkify.es.min.js +1 -1
  172. package/dist/thunkify.js +1 -1
  173. package/dist/thunkify.min.js +1 -1
  174. package/dist/thunkify.min.mjs +1 -1
  175. package/dist/thunkify.mjs +1 -1
  176. package/dist/transform.es.js +1 -1
  177. package/dist/transform.es.min.js +1 -1
  178. package/dist/transform.js +1 -1
  179. package/dist/transform.min.js +1 -1
  180. package/dist/transform.min.mjs +1 -1
  181. package/dist/transform.mjs +1 -1
  182. package/dist/tryCatch.es.js +26 -9
  183. package/dist/tryCatch.es.min.js +2 -2
  184. package/dist/tryCatch.js +26 -9
  185. package/dist/tryCatch.min.js +2 -2
  186. package/dist/tryCatch.min.mjs +2 -2
  187. package/dist/tryCatch.mjs +26 -9
  188. package/dist/x/append.es.js +1 -1
  189. package/dist/x/append.es.min.js +1 -1
  190. package/dist/x/append.js +1 -1
  191. package/dist/x/append.min.js +1 -1
  192. package/dist/x/append.min.mjs +1 -1
  193. package/dist/x/append.mjs +1 -1
  194. package/dist/x/callProp.es.js +1 -1
  195. package/dist/x/callProp.es.min.js +1 -1
  196. package/dist/x/callProp.js +1 -1
  197. package/dist/x/callProp.min.js +1 -1
  198. package/dist/x/callProp.min.mjs +1 -1
  199. package/dist/x/callProp.mjs +1 -1
  200. package/dist/x/defaultsDeep.es.js +1 -1
  201. package/dist/x/defaultsDeep.es.min.js +1 -1
  202. package/dist/x/defaultsDeep.js +1 -1
  203. package/dist/x/defaultsDeep.min.js +1 -1
  204. package/dist/x/defaultsDeep.min.mjs +1 -1
  205. package/dist/x/defaultsDeep.mjs +1 -1
  206. package/dist/x/differenceWith.es.js +1 -1
  207. package/dist/x/differenceWith.es.min.js +1 -1
  208. package/dist/x/differenceWith.js +1 -1
  209. package/dist/x/differenceWith.min.js +1 -1
  210. package/dist/x/differenceWith.min.mjs +1 -1
  211. package/dist/x/differenceWith.mjs +1 -1
  212. package/dist/x/filterOut.es.js +31 -4
  213. package/dist/x/filterOut.es.min.js +2 -2
  214. package/dist/x/filterOut.js +31 -4
  215. package/dist/x/filterOut.min.js +2 -2
  216. package/dist/x/filterOut.min.mjs +2 -2
  217. package/dist/x/filterOut.mjs +31 -4
  218. package/dist/x/find.es.js +1 -1
  219. package/dist/x/find.es.min.js +1 -1
  220. package/dist/x/find.js +1 -1
  221. package/dist/x/find.min.js +1 -1
  222. package/dist/x/find.min.mjs +1 -1
  223. package/dist/x/find.mjs +1 -1
  224. package/dist/x/findIndex.es.js +1 -1
  225. package/dist/x/findIndex.es.min.js +1 -1
  226. package/dist/x/findIndex.js +1 -1
  227. package/dist/x/findIndex.min.js +1 -1
  228. package/dist/x/findIndex.min.mjs +1 -1
  229. package/dist/x/findIndex.mjs +1 -1
  230. package/dist/x/first.es.js +1 -1
  231. package/dist/x/first.es.min.js +1 -1
  232. package/dist/x/first.js +1 -1
  233. package/dist/x/first.min.js +1 -1
  234. package/dist/x/first.min.mjs +1 -1
  235. package/dist/x/first.mjs +1 -1
  236. package/dist/x/flatten.es.js +1 -1
  237. package/dist/x/flatten.es.min.js +1 -1
  238. package/dist/x/flatten.js +1 -1
  239. package/dist/x/flatten.min.js +1 -1
  240. package/dist/x/flatten.min.mjs +1 -1
  241. package/dist/x/flatten.mjs +1 -1
  242. package/dist/x/forEach.es.js +1 -1
  243. package/dist/x/forEach.es.min.js +1 -1
  244. package/dist/x/forEach.js +1 -1
  245. package/dist/x/forEach.min.js +1 -1
  246. package/dist/x/forEach.min.mjs +1 -1
  247. package/dist/x/forEach.mjs +1 -1
  248. package/dist/x/groupBy.es.js +12 -5
  249. package/dist/x/groupBy.es.min.js +2 -2
  250. package/dist/x/groupBy.js +12 -5
  251. package/dist/x/groupBy.min.js +2 -2
  252. package/dist/x/groupBy.min.mjs +2 -2
  253. package/dist/x/groupBy.mjs +12 -5
  254. package/dist/x/has.es.js +1 -1
  255. package/dist/x/has.es.min.js +1 -1
  256. package/dist/x/has.js +1 -1
  257. package/dist/x/has.min.js +1 -1
  258. package/dist/x/has.min.mjs +1 -1
  259. package/dist/x/has.mjs +1 -1
  260. package/dist/x/identity.es.js +1 -1
  261. package/dist/x/identity.es.min.js +1 -1
  262. package/dist/x/identity.js +1 -1
  263. package/dist/x/identity.min.js +1 -1
  264. package/dist/x/identity.min.mjs +1 -1
  265. package/dist/x/identity.mjs +1 -1
  266. package/dist/x/includes.es.js +1 -1
  267. package/dist/x/includes.es.min.js +1 -1
  268. package/dist/x/includes.js +1 -1
  269. package/dist/x/includes.min.js +1 -1
  270. package/dist/x/includes.min.mjs +1 -1
  271. package/dist/x/includes.mjs +1 -1
  272. package/dist/x/isDeepEqual.es.js +1 -1
  273. package/dist/x/isDeepEqual.es.min.js +1 -1
  274. package/dist/x/isDeepEqual.js +1 -1
  275. package/dist/x/isDeepEqual.min.js +1 -1
  276. package/dist/x/isDeepEqual.min.mjs +1 -1
  277. package/dist/x/isDeepEqual.mjs +1 -1
  278. package/dist/x/isEmpty.es.js +1 -1
  279. package/dist/x/isEmpty.es.min.js +1 -1
  280. package/dist/x/isEmpty.js +1 -1
  281. package/dist/x/isEmpty.min.js +1 -1
  282. package/dist/x/isEmpty.min.mjs +1 -1
  283. package/dist/x/isEmpty.mjs +1 -1
  284. package/dist/x/isEqual.es.js +1 -1
  285. package/dist/x/isEqual.es.min.js +1 -1
  286. package/dist/x/isEqual.js +1 -1
  287. package/dist/x/isEqual.min.js +1 -1
  288. package/dist/x/isEqual.min.mjs +1 -1
  289. package/dist/x/isEqual.mjs +1 -1
  290. package/dist/x/isFunction.es.js +1 -1
  291. package/dist/x/isFunction.es.min.js +1 -1
  292. package/dist/x/isFunction.js +1 -1
  293. package/dist/x/isFunction.min.js +1 -1
  294. package/dist/x/isFunction.min.mjs +1 -1
  295. package/dist/x/isFunction.mjs +1 -1
  296. package/dist/x/isIn.es.js +81 -0
  297. package/dist/x/isIn.es.min.js +7 -0
  298. package/dist/x/isIn.js +88 -0
  299. package/dist/x/isIn.min.js +8 -0
  300. package/dist/x/isIn.min.mjs +7 -0
  301. package/dist/x/isIn.mjs +81 -0
  302. package/dist/x/isObject.es.js +1 -1
  303. package/dist/x/isObject.es.min.js +1 -1
  304. package/dist/x/isObject.js +1 -1
  305. package/dist/x/isObject.min.js +1 -1
  306. package/dist/x/isObject.min.mjs +1 -1
  307. package/dist/x/isObject.mjs +1 -1
  308. package/dist/x/isString.es.js +1 -1
  309. package/dist/x/isString.es.min.js +1 -1
  310. package/dist/x/isString.js +1 -1
  311. package/dist/x/isString.min.js +1 -1
  312. package/dist/x/isString.min.mjs +1 -1
  313. package/dist/x/isString.mjs +1 -1
  314. package/dist/x/keys.es.js +1 -1
  315. package/dist/x/keys.es.min.js +1 -1
  316. package/dist/x/keys.js +1 -1
  317. package/dist/x/keys.min.js +1 -1
  318. package/dist/x/keys.min.mjs +1 -1
  319. package/dist/x/keys.mjs +1 -1
  320. package/dist/x/last.es.js +1 -1
  321. package/dist/x/last.es.min.js +1 -1
  322. package/dist/x/last.js +1 -1
  323. package/dist/x/last.min.js +1 -1
  324. package/dist/x/last.min.mjs +1 -1
  325. package/dist/x/last.mjs +1 -1
  326. package/dist/x/maxBy.es.js +118 -0
  327. package/dist/x/maxBy.es.min.js +7 -0
  328. package/dist/x/maxBy.js +125 -0
  329. package/dist/x/maxBy.min.js +8 -0
  330. package/dist/x/maxBy.min.mjs +7 -0
  331. package/dist/x/maxBy.mjs +118 -0
  332. package/dist/x/noop.es.js +1 -1
  333. package/dist/x/noop.es.min.js +1 -1
  334. package/dist/x/noop.js +1 -1
  335. package/dist/x/noop.min.js +1 -1
  336. package/dist/x/noop.min.mjs +1 -1
  337. package/dist/x/noop.mjs +1 -1
  338. package/dist/x/pluck.es.js +32 -24
  339. package/dist/x/pluck.es.min.js +2 -2
  340. package/dist/x/pluck.js +32 -24
  341. package/dist/x/pluck.min.js +2 -2
  342. package/dist/x/pluck.min.mjs +2 -2
  343. package/dist/x/pluck.mjs +32 -24
  344. package/dist/x/prepend.es.js +1 -1
  345. package/dist/x/prepend.es.min.js +1 -1
  346. package/dist/x/prepend.js +1 -1
  347. package/dist/x/prepend.min.js +1 -1
  348. package/dist/x/prepend.min.mjs +1 -1
  349. package/dist/x/prepend.mjs +1 -1
  350. package/dist/x/size.es.js +1 -1
  351. package/dist/x/size.es.min.js +1 -1
  352. package/dist/x/size.js +1 -1
  353. package/dist/x/size.min.js +1 -1
  354. package/dist/x/size.min.mjs +1 -1
  355. package/dist/x/size.mjs +1 -1
  356. package/dist/x/trace.es.js +1 -1
  357. package/dist/x/trace.es.min.js +1 -1
  358. package/dist/x/trace.js +1 -1
  359. package/dist/x/trace.min.js +1 -1
  360. package/dist/x/trace.min.mjs +1 -1
  361. package/dist/x/trace.mjs +1 -1
  362. package/dist/x/unionWith.es.js +1 -1
  363. package/dist/x/unionWith.es.min.js +1 -1
  364. package/dist/x/unionWith.js +1 -1
  365. package/dist/x/unionWith.min.js +1 -1
  366. package/dist/x/unionWith.min.mjs +1 -1
  367. package/dist/x/unionWith.mjs +1 -1
  368. package/dist/x/uniq.es.js +2 -452
  369. package/dist/x/uniq.es.min.js +2 -2
  370. package/dist/x/uniq.js +2 -452
  371. package/dist/x/uniq.min.js +2 -2
  372. package/dist/x/uniq.min.mjs +2 -2
  373. package/dist/x/uniq.mjs +2 -452
  374. package/dist/x/unless.es.js +1 -1
  375. package/dist/x/unless.es.min.js +1 -1
  376. package/dist/x/unless.js +1 -1
  377. package/dist/x/unless.min.js +1 -1
  378. package/dist/x/unless.min.mjs +1 -1
  379. package/dist/x/unless.mjs +1 -1
  380. package/dist/x/values.es.js +1 -1
  381. package/dist/x/values.es.min.js +1 -1
  382. package/dist/x/values.js +1 -1
  383. package/dist/x/values.min.js +1 -1
  384. package/dist/x/values.min.mjs +1 -1
  385. package/dist/x/values.mjs +1 -1
  386. package/dist/x/when.es.js +1 -1
  387. package/dist/x/when.es.min.js +1 -1
  388. package/dist/x/when.js +1 -1
  389. package/dist/x/when.min.js +1 -1
  390. package/dist/x/when.min.mjs +1 -1
  391. package/dist/x/when.mjs +1 -1
  392. package/dist-test.js +183 -26
  393. package/es.js +197 -94
  394. package/filter.js +103 -41
  395. package/index.js +197 -94
  396. package/map.js +114 -50
  397. package/or.js +81 -33
  398. package/package.json +2 -1
  399. package/reduce.js +28 -11
  400. package/set.js +22 -0
  401. package/switchCase.js +26 -18
  402. package/test.js +94 -42
  403. package/tryCatch.js +41 -10
  404. package/x/index.js +4 -0
  405. package/x/isIn.js +146 -0
  406. package/x/isIn.test.js +55 -0
  407. package/x/maxBy.js +69 -0
  408. package/x/maxBy.test.js +26 -0
  409. package/x/uniq.benchmark.js +57 -0
  410. package/x/uniq.js +1 -10
  411. package/_internal/areFuncsOrValuesAllValues.js +0 -20
  412. package/_internal/funcsOrValuesConditional.js +0 -67
@@ -16,7 +16,7 @@ jobs:
16
16
 
17
17
  strategy:
18
18
  matrix:
19
- node-version: [14.x, 15.x, 16.x, 17.x]
19
+ node-version: [14.x, 15.x, 16.x, 17.x, 18.x]
20
20
 
21
21
  steps:
22
22
  - uses: actions/checkout@v2
package/CHANGELOG.md CHANGED
@@ -1,4 +1,19 @@
1
- ## v1.9.0 - latest
1
+ ## v1.9.3 - latest
2
+ * property value passed to set may be a resolver - [#224](https://github.com/a-synchronous/rubico/pull/224)
3
+ * rubico/x/isIn - counterpart to includes - [#228](https://github.com/a-synchronous/rubico/pull/228) - [lulldev](https://github.com/lulldev)
4
+ * rubico/x/maxBy - finds the item that is the max by a property denoted by path - [#229](https://github.com/a-synchronous/rubico/pull/229)
5
+ * eager map - [#225](https://github.com/a-synchronous/rubico/pull/225)
6
+ * eager filter - [#226](https://github.com/a-synchronous/rubico/pull/226)
7
+ * eager reduce - [#227](https://github.com/a-synchronous/rubico/pull/227)
8
+
9
+ ## v1.9.2
10
+ * eager tryCatch - [#222](https://github.com/a-synchronous/rubico/pull/218)
11
+
12
+ ## v1.9.1
13
+ * more performant uniq - [#218](https://github.com/a-synchronous/rubico/pull/218) - [jasir](https://github.com/jasir)
14
+ * and and or handle nonfunction values - [#221](https://github.com/a-synchronous/rubico/pull/221)
15
+
16
+ ## v1.9.0
2
17
  * switchCase handles non-function values - [#220](https://github.com/a-synchronous/rubico/pull/220)
3
18
 
4
19
  ## v1.8.15
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @name areAllValuesNonfunctions
3
+ *
4
+ * @synopsis
5
+ * ```coffeescript [specscript]
6
+ * areAllValuesNonfunctions(values Array<function|value>) -> boolean
7
+ * ```
8
+ */
9
+ const areAllValuesNonfunctions = function (values) {
10
+ const length = values.length
11
+ let index = -1
12
+ while (++index < length) {
13
+ if (typeof values[index] == 'function') {
14
+ return false
15
+ }
16
+ }
17
+ return true
18
+ }
19
+
20
+ module.exports = areAllValuesNonfunctions
@@ -1,41 +1,67 @@
1
1
  const isPromise = require('./isPromise')
2
- const curry3 = require('./curry3')
3
- const always = require('./always')
4
- const thunkify2 = require('./thunkify2')
5
2
  const thunkConditional = require('./thunkConditional')
3
+ const thunkifyArgs = require('./thunkifyArgs')
4
+ const thunkify3 = require('./thunkify3')
6
5
  const __ = require('./placeholder')
6
+ const curry3 = require('./curry3')
7
+ const always = require('./always')
7
8
 
8
9
  /**
9
10
  * @name arrayConditional
10
11
  *
11
12
  * @synopsis
12
13
  * ```coffeescript [specscript]
13
- * arrayConditional(array Array<value>, index number) -> boolean
14
+ * arrayConditional(
15
+ * array Array<function|value>,
16
+ * args Array,
17
+ * funcsIndex number,
18
+ * ) -> Promise|any
14
19
  * ```
20
+ *
21
+ * @description
22
+ * Conditional operator `a ? b : c ? d : e ? ...` for functions.
23
+ *
24
+ * @TODO isPromise conditional await
25
+ * @TODO benchmark vs regular promise handling
15
26
  */
16
- const arrayConditional = function (array, index) {
17
- const length = array.length,
18
- lastIndex = length - 1
19
- while ((index += 2) < lastIndex) {
20
- const predication = array[index],
21
- value = array[index + 1]
27
+ const arrayConditional = function (array, args, funcsIndex) {
28
+ const lastIndex = array.length - 1
29
+
30
+ while ((funcsIndex += 2) < lastIndex) {
31
+ const predicate = array[funcsIndex],
32
+ resolverOrValue = array[funcsIndex + 1]
33
+
34
+ const predication = typeof predicate == 'function'
35
+ ? predicate(...args)
36
+ : predicate
37
+
22
38
  if (isPromise(predication)) {
23
39
  return predication.then(curry3(
24
40
  thunkConditional,
25
41
  __,
26
- always(value),
27
- thunkify2(arrayConditional, array, index),
42
+ typeof resolverOrValue == 'function'
43
+ ? thunkifyArgs(resolverOrValue, args)
44
+ : always(resolverOrValue),
45
+ thunkify3(arrayConditional, array, args, funcsIndex),
28
46
  ))
29
47
  }
48
+
30
49
  if (predication) {
31
- return value
50
+ return typeof resolverOrValue == 'function'
51
+ ? resolverOrValue(...args)
52
+ : resolverOrValue
32
53
  }
33
54
  }
34
- // even number of array values
35
- if (index == length) {
55
+
56
+ // even number of array
57
+ if (funcsIndex == array.length) {
36
58
  return undefined
37
59
  }
38
- return array[index]
60
+
61
+ const defaultResolverOrValue = array[lastIndex]
62
+ return typeof defaultResolverOrValue == 'function'
63
+ ? defaultResolverOrValue(...args)
64
+ : defaultResolverOrValue
39
65
  }
40
66
 
41
67
  module.exports = arrayConditional
@@ -0,0 +1,41 @@
1
+ const isPromise = require('./isPromise')
2
+ const curry3 = require('./curry3')
3
+ const always = require('./always')
4
+ const thunkify2 = require('./thunkify2')
5
+ const thunkConditional = require('./thunkConditional')
6
+ const __ = require('./placeholder')
7
+
8
+ /**
9
+ * @name nonfunctionsConditional
10
+ *
11
+ * @synopsis
12
+ * ```coffeescript [specscript]
13
+ * nonfunctionsConditional(array Array<value>, index number) -> boolean
14
+ * ```
15
+ */
16
+ const nonfunctionsConditional = function (array, index) {
17
+ const length = array.length,
18
+ lastIndex = length - 1
19
+ while ((index += 2) < lastIndex) {
20
+ const predication = array[index],
21
+ value = array[index + 1]
22
+ if (isPromise(predication)) {
23
+ return predication.then(curry3(
24
+ thunkConditional,
25
+ __,
26
+ always(value),
27
+ thunkify2(nonfunctionsConditional, array, index),
28
+ ))
29
+ }
30
+ if (predication) {
31
+ return value
32
+ }
33
+ }
34
+ // even number of array values
35
+ if (index == length) {
36
+ return undefined
37
+ }
38
+ return array[index]
39
+ }
40
+
41
+ module.exports = nonfunctionsConditional
package/and.js CHANGED
@@ -2,29 +2,61 @@ const isPromise = require('./_internal/isPromise')
2
2
  const curry3 = require('./_internal/curry3')
3
3
  const __ = require('./_internal/placeholder')
4
4
  const thunkConditional = require('./_internal/thunkConditional')
5
+ const areAllValuesNonfunctions = require('./_internal/areAllValuesNonfunctions')
6
+ const thunkify2 = require('./_internal/thunkify2')
5
7
  const thunkify3 = require('./_internal/thunkify3')
6
8
  const always = require('./_internal/always')
7
9
 
8
10
  /**
9
- * @name asyncAnd
11
+ * @name areAllNonfunctionsTruthy
10
12
  *
11
13
  * @synopsis
12
14
  * ```coffeescript [specscript]
13
- * asyncAnd(
15
+ * areAllNonfunctionsTruthy(predicates Array<value>) -> Promise|boolean
16
+ * ```
17
+ */
18
+ const areAllNonfunctionsTruthy = function (predicates, index) {
19
+ const length = predicates.length
20
+ while (++index < length) {
21
+ let predicate = predicates[index]
22
+ if (isPromise(predicate)) {
23
+ return predicate.then(curry3(
24
+ thunkConditional,
25
+ __,
26
+ thunkify2(areAllNonfunctionsTruthy, predicates, index),
27
+ always(false),
28
+ ))
29
+ }
30
+ if (!predicate) {
31
+ return false
32
+ }
33
+ }
34
+ return true
35
+ }
36
+
37
+ /**
38
+ * @name asyncArePredicatesAllTruthy
39
+ *
40
+ * @synopsis
41
+ * ```coffeescript [specscript]
42
+ * asyncArePredicatesAllTruthy(
14
43
  * predicates Array<value=>Promise|boolean>
15
- * value any,
44
+ * point any,
16
45
  * index number,
17
46
  * ) -> allTruthy boolean
18
47
  * ```
19
48
  */
20
- const asyncAnd = async function (predicates, value, index) {
49
+ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
21
50
  const length = predicates.length
22
51
  while (++index < length) {
23
- let predication = predicates[index](value)
24
- if (isPromise(predication)) {
25
- predication = await predication
52
+ let predicate = predicates[index]
53
+ if (typeof predicate == 'function') {
54
+ predicate = predicate(point)
55
+ }
56
+ if (isPromise(predicate)) {
57
+ predicate = await predicate
26
58
  }
27
- if (!predication) {
59
+ if (!predicate) {
28
60
  return false
29
61
  }
30
62
  }
@@ -36,14 +68,13 @@ const asyncAnd = async function (predicates, value, index) {
36
68
  *
37
69
  * @synopsis
38
70
  * ```coffeescript [specscript]
39
- * var value any,
40
- * predicates Array<value=>Promise|boolean>
41
- *
42
- * and(predicates)(value) -> Promise|boolean
71
+ * and(
72
+ * predicates Array<predicate function|nonfunction>
73
+ * )(point any) -> Promise|boolean
43
74
  * ```
44
75
  *
45
76
  * @description
46
- * Test an array of predicates concurrently against a single input, returning true if all test truthy.
77
+ * Test an array of predicates or nonfunction values concurrently against a single input, returning true if all test truthy.
47
78
  *
48
79
  * ```javascript [playground]
49
80
  * const isOdd = number => number % 2 == 1
@@ -57,32 +88,45 @@ const asyncAnd = async function (predicates, value, index) {
57
88
  * ) // true
58
89
  * ```
59
90
  *
60
- * @execution serial
91
+ * `and` behaves eagerly if provided only nonfunction values
92
+ *
93
+ * ```javascript [playground]
94
+ * console.log(
95
+ * and([true, true, true]),
96
+ * ) // true
97
+ * ```
98
+ *
99
+ * @execution series
61
100
  *
62
101
  * @note ...args slows down here by an order of magnitude
63
102
  */
64
- const and = predicates => function allPredicates(value) {
65
- if (value != null && typeof value.and == 'function') {
66
- return value.and(predicates)
103
+ const and = predicates => {
104
+ if (areAllValuesNonfunctions(predicates)) {
105
+ return areAllNonfunctionsTruthy(predicates, -1)
67
106
  }
68
- const length = predicates.length,
69
- promises = []
70
- let index = -1
107
+ return function arePredicatesAllTruthy(point) {
108
+ const length = predicates.length
109
+ let index = -1
71
110
 
72
- while (++index < length) {
73
- const predication = predicates[index](value)
74
- if (isPromise(predication)) {
75
- return predication.then(curry3(
76
- thunkConditional,
77
- __,
78
- thunkify3(asyncAnd, predicates, value, index),
79
- always(false)))
80
- }
81
- if (!predication) {
82
- return false
111
+ while (++index < length) {
112
+ let predicate = predicates[index]
113
+ if (typeof predicate == 'function') {
114
+ predicate = predicate(point)
115
+ }
116
+ if (isPromise(predicate)) {
117
+ return predicate.then(curry3(
118
+ thunkConditional,
119
+ __,
120
+ thunkify3(asyncArePredicatesAllTruthy, predicates, point, index),
121
+ always(false),
122
+ ))
123
+ }
124
+ if (!predicate) {
125
+ return false
126
+ }
83
127
  }
128
+ return true
84
129
  }
85
- return true
86
130
  }
87
131
 
88
132
  module.exports = and
@@ -1,5 +1,5 @@
1
- const { tryCatch } = require('..')
2
- const { timeInLoop } = require('../x')
1
+ const tryCatch = require('../tryCatch')
2
+ const timeInLoop = require('../x/timeInLoop')
3
3
 
4
4
  const isPromise = value => value != null && typeof value.then == 'function'
5
5
 
@@ -75,6 +75,8 @@ const tryCatch3 = (tryer, catcher) => function tryCatcher(...args) {
75
75
  * @benchmark
76
76
  * tryCatch2: 1e+6: 36.369ms
77
77
  * tryCatch3: 1e+6: 17.027ms
78
+ *
79
+ * TODO find the date
78
80
  */
79
81
 
80
82
  {
@@ -91,3 +93,16 @@ const tryCatch3 = (tryer, catcher) => function tryCatcher(...args) {
91
93
 
92
94
  // timeInLoop('tryCatch3', 1e6, () => tryCatch3(identity, noop)('yo'))
93
95
  }
96
+
97
+ /**
98
+ * @name tryCatch 2022-06-13
99
+ *
100
+ * @benchmark
101
+ * tryCatch: 1e+6: tryCatch: 1e+6: 39.787ms
102
+ */
103
+
104
+ {
105
+ const identity = value => value
106
+ const noop = () => {}
107
+ timeInLoop('tryCatch', 1e6, () => tryCatch2(identity, noop)('yo'))
108
+ }
package/dist/__.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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 v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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 v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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 v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/__.min.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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 v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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 v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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 v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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 v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/all.min.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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 v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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 v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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 v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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 v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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 v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -44,48 +44,90 @@ const thunkConditional = (
44
44
  conditionalExpression, thunkOnTruthy, thunkOnFalsy,
45
45
  ) => conditionalExpression ? thunkOnTruthy() : thunkOnFalsy()
46
46
 
47
+ const areAllValuesNonfunctions = function (values) {
48
+ const length = values.length
49
+ let index = -1
50
+ while (++index < length) {
51
+ if (typeof values[index] == 'function') {
52
+ return false
53
+ }
54
+ }
55
+ return true
56
+ }
57
+
58
+ const thunkify2 = (func, arg0, arg1) => function thunk() {
59
+ return func(arg0, arg1)
60
+ }
61
+
47
62
  const thunkify3 = (func, arg0, arg1, arg2) => function thunk() {
48
63
  return func(arg0, arg1, arg2)
49
64
  }
50
65
 
51
66
  const always = value => function getter() { return value }
52
67
 
53
- const asyncAnd = async function (predicates, value, index) {
68
+ const areAllNonfunctionsTruthy = function (predicates, index) {
54
69
  const length = predicates.length
55
70
  while (++index < length) {
56
- let predication = predicates[index](value)
57
- if (isPromise(predication)) {
58
- predication = await predication
71
+ let predicate = predicates[index]
72
+ if (isPromise(predicate)) {
73
+ return predicate.then(curry3(
74
+ thunkConditional,
75
+ __,
76
+ thunkify2(areAllNonfunctionsTruthy, predicates, index),
77
+ always(false),
78
+ ))
59
79
  }
60
- if (!predication) {
80
+ if (!predicate) {
61
81
  return false
62
82
  }
63
83
  }
64
84
  return true
65
85
  }
66
86
 
67
- const and = predicates => function allPredicates(value) {
68
- if (value != null && typeof value.and == 'function') {
69
- return value.and(predicates)
70
- }
71
- const length = predicates.length,
72
- promises = []
73
- let index = -1
74
-
87
+ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
88
+ const length = predicates.length
75
89
  while (++index < length) {
76
- const predication = predicates[index](value)
77
- if (isPromise(predication)) {
78
- return predication.then(curry3(
79
- thunkConditional,
80
- __,
81
- thunkify3(asyncAnd, predicates, value, index),
82
- always(false)))
90
+ let predicate = predicates[index]
91
+ if (typeof predicate == 'function') {
92
+ predicate = predicate(point)
93
+ }
94
+ if (isPromise(predicate)) {
95
+ predicate = await predicate
83
96
  }
84
- if (!predication) {
97
+ if (!predicate) {
85
98
  return false
86
99
  }
87
100
  }
88
101
  return true
89
102
  }
90
103
 
104
+ const and = predicates => {
105
+ if (areAllValuesNonfunctions(predicates)) {
106
+ return areAllNonfunctionsTruthy(predicates, -1)
107
+ }
108
+ return function arePredicatesAllTruthy(point) {
109
+ const length = predicates.length
110
+ let index = -1
111
+
112
+ while (++index < length) {
113
+ let predicate = predicates[index]
114
+ if (typeof predicate == 'function') {
115
+ predicate = predicate(point)
116
+ }
117
+ if (isPromise(predicate)) {
118
+ return predicate.then(curry3(
119
+ thunkConditional,
120
+ __,
121
+ thunkify3(asyncArePredicatesAllTruthy, predicates, point, index),
122
+ always(false),
123
+ ))
124
+ }
125
+ if (!predicate) {
126
+ return false
127
+ }
128
+ }
129
+ return true
130
+ }
131
+ }
132
+
91
133
  export default and
@@ -1,7 +1,7 @@
1
1
  /**
2
- * rubico v1.9.0
2
+ * rubico v1.9.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2021 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,__=Symbol.for("placeholder"),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)},thunkConditional=(r,n,e)=>r?n():e(),thunkify3=(r,n,e,t)=>function(){return r(n,e,t)},always=r=>function(){return r},asyncAnd=async function(r,n,e){const t=r.length;for(;++e<t;){let t=r[e](n);if(isPromise(t)&&(t=await t),!t)return!1}return!0},and=r=>function(n){if(null!=n&&"function"==typeof n.and)return n.and(r);const e=r.length;let t=-1;for(;++t<e;){const e=r[t](n);if(isPromise(e))return e.then((u=thunkConditional,o=__,c=thunkify3(asyncAnd,r,n,t),i=always(!1),o==__?curry3ResolveArg0(u,c,i):c==__?curry3ResolveArg1(u,o,i):curry3ResolveArg2(u,o,c)));if(!e)return!1}var u,o,c,i;return!0};export default and;
7
+ const isPromise=n=>null!=n&&"function"==typeof n.then,__=Symbol.for("placeholder"),curry3ResolveArg0=(n,r,t)=>function(e){return n(e,r,t)},curry3ResolveArg1=(n,r,t)=>function(e){return n(r,e,t)},curry3ResolveArg2=(n,r,t)=>function(e){return n(r,t,e)},curry3=function(n,r,t,e){return r==__?curry3ResolveArg0(n,t,e):t==__?curry3ResolveArg1(n,r,e):curry3ResolveArg2(n,r,t)},thunkConditional=(n,r,t)=>n?r():t(),areAllValuesNonfunctions=function(n){const r=n.length;let t=-1;for(;++t<r;)if("function"==typeof n[t])return!1;return!0},thunkify2=(n,r,t)=>function(){return n(r,t)},thunkify3=(n,r,t,e)=>function(){return n(r,t,e)},always=n=>function(){return n},areAllNonfunctionsTruthy=function(n,r){const t=n.length;for(;++r<t;){let t=n[r];if(isPromise(t))return t.then(curry3(thunkConditional,__,thunkify2(areAllNonfunctionsTruthy,n,r),always(!1)));if(!t)return!1}return!0},asyncArePredicatesAllTruthy=async function(n,r,t){const e=n.length;for(;++t<e;){let e=n[t];if("function"==typeof e&&(e=e(r)),isPromise(e)&&(e=await e),!e)return!1}return!0},and=n=>areAllValuesNonfunctions(n)?areAllNonfunctionsTruthy(n,-1):function(r){const t=n.length;let e=-1;for(;++e<t;){let t=n[e];if("function"==typeof t&&(t=t(r)),isPromise(t))return t.then(curry3(thunkConditional,__,thunkify3(asyncArePredicatesAllTruthy,n,r,e),always(!1)));if(!t)return!1}return!0};export default and;