index.d.ts 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. declare namespace pWaterfall {
  2. type Task<ValueType, ReturnType> = (
  3. previousValue: ValueType
  4. ) => ReturnType | PromiseLike<ReturnType>;
  5. type InitialTask<ReturnType> = () => ReturnType | PromiseLike<ReturnType>;
  6. }
  7. declare const pWaterfall: {
  8. /**
  9. Run promise-returning & async functions in series, each passing its result to the next.
  10. @param tasks - Functions are expected to return a value. If a `Promise` is returned, it's awaited before continuing with the next task.
  11. @param initialValue - Value to use as `previousValue` in the first task.
  12. @returns Resolves when all promises returned from calling the functions in `tasks` are fulfilled, or rejects if any of the promises reject. The fulfilled value is the value returned from the last task.
  13. @example
  14. ```
  15. import pWaterfall = require('p-waterfall');
  16. (async () => {
  17. const tasks = [
  18. initialValue => getEmoji(initialValue),
  19. previousValue => `I ❤️ ${previousValue}`
  20. ];
  21. console.log(await pWaterfall(tasks, 'unicorn'));
  22. //=> 'I ❤️ 🦄'
  23. })();
  24. ```
  25. */
  26. <ReturnType>(
  27. tasks: readonly [
  28. pWaterfall.InitialTask<ReturnType>
  29. ]
  30. ): Promise<ReturnType>;
  31. <ValueType1, ReturnType>(
  32. tasks: readonly [
  33. pWaterfall.InitialTask<ValueType1>,
  34. pWaterfall.Task<ValueType1, ReturnType>
  35. ]
  36. ): Promise<ReturnType>;
  37. <ValueType1, ValueType2, ReturnType>(
  38. tasks: readonly [
  39. pWaterfall.InitialTask<ValueType1>,
  40. pWaterfall.Task<ValueType1, ValueType2>,
  41. pWaterfall.Task<ValueType2, ReturnType>
  42. ]
  43. ): Promise<ReturnType>;
  44. <ValueType1, ValueType2, ValueType3, ReturnType>(
  45. tasks: readonly [
  46. pWaterfall.InitialTask<ValueType1>,
  47. pWaterfall.Task<ValueType1, ValueType2>,
  48. pWaterfall.Task<ValueType2, ValueType3>,
  49. pWaterfall.Task<ValueType3, ReturnType>
  50. ]
  51. ): Promise<ReturnType>;
  52. <ValueType1, ValueType2, ValueType3, ValueType4, ReturnType>(
  53. tasks: readonly [
  54. pWaterfall.InitialTask<ValueType1>,
  55. pWaterfall.Task<ValueType1, ValueType2>,
  56. pWaterfall.Task<ValueType2, ValueType3>,
  57. pWaterfall.Task<ValueType3, ValueType4>,
  58. pWaterfall.Task<ValueType4, ReturnType>
  59. ]
  60. ): Promise<ReturnType>;
  61. <ValueType1, ValueType2, ValueType3, ValueType4, ValueType5, ReturnType>(
  62. tasks: readonly [
  63. pWaterfall.InitialTask<ValueType1>,
  64. pWaterfall.Task<ValueType1, ValueType2>,
  65. pWaterfall.Task<ValueType2, ValueType3>,
  66. pWaterfall.Task<ValueType3, ValueType4>,
  67. pWaterfall.Task<ValueType4, ValueType5>,
  68. pWaterfall.Task<ValueType5, ReturnType>
  69. ]
  70. ): Promise<ReturnType>;
  71. <
  72. ValueType1,
  73. ValueType2,
  74. ValueType3,
  75. ValueType4,
  76. ValueType5,
  77. ValueType6,
  78. ReturnType
  79. >(
  80. tasks: readonly [
  81. pWaterfall.InitialTask<ValueType1>,
  82. pWaterfall.Task<ValueType1, ValueType2>,
  83. pWaterfall.Task<ValueType2, ValueType3>,
  84. pWaterfall.Task<ValueType3, ValueType4>,
  85. pWaterfall.Task<ValueType4, ValueType5>,
  86. pWaterfall.Task<ValueType5, ValueType6>,
  87. pWaterfall.Task<ValueType6, ReturnType>
  88. ]
  89. ): Promise<ReturnType>;
  90. <
  91. ValueType1,
  92. ValueType2,
  93. ValueType3,
  94. ValueType4,
  95. ValueType5,
  96. ValueType6,
  97. ValueType7,
  98. ReturnType
  99. >(
  100. tasks: readonly [
  101. pWaterfall.InitialTask<ValueType1>,
  102. pWaterfall.Task<ValueType1, ValueType2>,
  103. pWaterfall.Task<ValueType2, ValueType3>,
  104. pWaterfall.Task<ValueType3, ValueType4>,
  105. pWaterfall.Task<ValueType4, ValueType5>,
  106. pWaterfall.Task<ValueType5, ValueType6>,
  107. pWaterfall.Task<ValueType6, ValueType7>,
  108. pWaterfall.Task<ValueType7, ReturnType>
  109. ]
  110. ): Promise<ReturnType>;
  111. <ValueType1, ReturnType>(
  112. tasks: readonly [
  113. pWaterfall.Task<ValueType1, ReturnType>
  114. ],
  115. initialValue: ValueType1
  116. ): Promise<ReturnType>;
  117. <ValueType1, ValueType2, ReturnType>(
  118. tasks: readonly [
  119. pWaterfall.Task<ValueType1, ValueType2>,
  120. pWaterfall.Task<ValueType2, ReturnType>
  121. ],
  122. initialValue: ValueType1
  123. ): Promise<ReturnType>;
  124. <ValueType1, ValueType2, ValueType3, ReturnType>(
  125. tasks: readonly [
  126. pWaterfall.Task<ValueType1, ValueType2>,
  127. pWaterfall.Task<ValueType2, ValueType3>,
  128. pWaterfall.Task<ValueType3, ReturnType>
  129. ],
  130. initialValue: ValueType1
  131. ): Promise<ReturnType>;
  132. <ValueType1, ValueType2, ValueType3, ValueType4, ReturnType>(
  133. tasks: readonly [
  134. pWaterfall.Task<ValueType1, ValueType2>,
  135. pWaterfall.Task<ValueType2, ValueType3>,
  136. pWaterfall.Task<ValueType3, ValueType4>,
  137. pWaterfall.Task<ValueType4, ReturnType>
  138. ],
  139. initialValue: ValueType1
  140. ): Promise<ReturnType>;
  141. <ValueType1, ValueType2, ValueType3, ValueType4, ValueType5, ReturnType>(
  142. tasks: readonly [
  143. pWaterfall.Task<ValueType1, ValueType2>,
  144. pWaterfall.Task<ValueType2, ValueType3>,
  145. pWaterfall.Task<ValueType3, ValueType4>,
  146. pWaterfall.Task<ValueType4, ValueType5>,
  147. pWaterfall.Task<ValueType5, ReturnType>
  148. ],
  149. initialValue: ValueType1
  150. ): Promise<ReturnType>;
  151. <
  152. ValueType1,
  153. ValueType2,
  154. ValueType3,
  155. ValueType4,
  156. ValueType5,
  157. ValueType6,
  158. ReturnType
  159. >(
  160. tasks: readonly [
  161. pWaterfall.Task<ValueType1, ValueType2>,
  162. pWaterfall.Task<ValueType2, ValueType3>,
  163. pWaterfall.Task<ValueType3, ValueType4>,
  164. pWaterfall.Task<ValueType4, ValueType5>,
  165. pWaterfall.Task<ValueType5, ValueType6>,
  166. pWaterfall.Task<ValueType6, ReturnType>
  167. ],
  168. initialValue: ValueType1
  169. ): Promise<ReturnType>;
  170. <
  171. ValueType1,
  172. ValueType2,
  173. ValueType3,
  174. ValueType4,
  175. ValueType5,
  176. ValueType6,
  177. ValueType7,
  178. ReturnType
  179. >(
  180. tasks: readonly [
  181. pWaterfall.Task<ValueType1, ValueType2>,
  182. pWaterfall.Task<ValueType2, ValueType3>,
  183. pWaterfall.Task<ValueType3, ValueType4>,
  184. pWaterfall.Task<ValueType4, ValueType5>,
  185. pWaterfall.Task<ValueType5, ValueType6>,
  186. pWaterfall.Task<ValueType6, ValueType7>,
  187. pWaterfall.Task<ValueType7, ReturnType>
  188. ],
  189. initialValue: ValueType1
  190. ): Promise<ReturnType>;
  191. <
  192. ValueType1,
  193. ValueType2,
  194. ValueType3,
  195. ValueType4,
  196. ValueType5,
  197. ValueType6,
  198. ValueType7,
  199. ValueType8,
  200. ReturnType
  201. >(
  202. tasks: readonly [
  203. pWaterfall.Task<ValueType1, ValueType2>,
  204. pWaterfall.Task<ValueType2, ValueType3>,
  205. pWaterfall.Task<ValueType3, ValueType4>,
  206. pWaterfall.Task<ValueType4, ValueType5>,
  207. pWaterfall.Task<ValueType5, ValueType6>,
  208. pWaterfall.Task<ValueType6, ValueType7>,
  209. pWaterfall.Task<ValueType7, ValueType8>,
  210. pWaterfall.Task<ValueType8, ReturnType>
  211. ],
  212. initialValue: ValueType1
  213. ): Promise<ReturnType>;
  214. (
  215. tasks: Iterable<pWaterfall.Task<unknown, unknown>>,
  216. initialValue?: unknown
  217. ): Promise<unknown>;
  218. // TODO: Remove this for the next major release
  219. default: typeof pWaterfall;
  220. };
  221. export = pWaterfall;