@nest-batch/core 0.2.0

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 (476) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +368 -0
  3. package/dist/src/adapters/in-process.adapter.d.ts +140 -0
  4. package/dist/src/adapters/in-process.adapter.d.ts.map +1 -0
  5. package/dist/src/adapters/in-process.adapter.js +86 -0
  6. package/dist/src/adapters/in-process.adapter.js.map +1 -0
  7. package/dist/src/adapters/index.d.ts +18 -0
  8. package/dist/src/adapters/index.d.ts.map +1 -0
  9. package/dist/src/adapters/index.js +35 -0
  10. package/dist/src/adapters/index.js.map +1 -0
  11. package/dist/src/builder/batch-builder.d.ts +26 -0
  12. package/dist/src/builder/batch-builder.d.ts.map +1 -0
  13. package/dist/src/builder/batch-builder.js +25 -0
  14. package/dist/src/builder/batch-builder.js.map +1 -0
  15. package/dist/src/builder/flow-builder.d.ts +59 -0
  16. package/dist/src/builder/flow-builder.d.ts.map +1 -0
  17. package/dist/src/builder/flow-builder.js +115 -0
  18. package/dist/src/builder/flow-builder.js.map +1 -0
  19. package/dist/src/builder/index.d.ts +5 -0
  20. package/dist/src/builder/index.d.ts.map +1 -0
  21. package/dist/src/builder/index.js +23 -0
  22. package/dist/src/builder/index.js.map +1 -0
  23. package/dist/src/builder/job-builder.d.ts +76 -0
  24. package/dist/src/builder/job-builder.d.ts.map +1 -0
  25. package/dist/src/builder/job-builder.js +166 -0
  26. package/dist/src/builder/job-builder.js.map +1 -0
  27. package/dist/src/builder/step-builder.d.ts +74 -0
  28. package/dist/src/builder/step-builder.d.ts.map +1 -0
  29. package/dist/src/builder/step-builder.js +144 -0
  30. package/dist/src/builder/step-builder.js.map +1 -0
  31. package/dist/src/compiler/builder-types.d.ts +20 -0
  32. package/dist/src/compiler/builder-types.d.ts.map +1 -0
  33. package/dist/src/compiler/builder-types.js +6 -0
  34. package/dist/src/compiler/builder-types.js.map +1 -0
  35. package/dist/src/compiler/definition-compiler.d.ts +99 -0
  36. package/dist/src/compiler/definition-compiler.d.ts.map +1 -0
  37. package/dist/src/compiler/definition-compiler.js +257 -0
  38. package/dist/src/compiler/definition-compiler.js.map +1 -0
  39. package/dist/src/compiler/index.d.ts +3 -0
  40. package/dist/src/compiler/index.d.ts.map +1 -0
  41. package/dist/src/compiler/index.js +21 -0
  42. package/dist/src/compiler/index.js.map +1 -0
  43. package/dist/src/core/errors.d.ts +77 -0
  44. package/dist/src/core/errors.d.ts.map +1 -0
  45. package/dist/src/core/errors.js +170 -0
  46. package/dist/src/core/errors.js.map +1 -0
  47. package/dist/src/core/execution-context/index.d.ts +4 -0
  48. package/dist/src/core/execution-context/index.d.ts.map +1 -0
  49. package/dist/src/core/execution-context/index.js +22 -0
  50. package/dist/src/core/execution-context/index.js.map +1 -0
  51. package/dist/src/core/execution-context/json-value.d.ts +5 -0
  52. package/dist/src/core/execution-context/json-value.d.ts.map +1 -0
  53. package/dist/src/core/execution-context/json-value.js +6 -0
  54. package/dist/src/core/execution-context/json-value.js.map +1 -0
  55. package/dist/src/core/execution-context/serializer.d.ts +4 -0
  56. package/dist/src/core/execution-context/serializer.d.ts.map +1 -0
  57. package/dist/src/core/execution-context/serializer.js +34 -0
  58. package/dist/src/core/execution-context/serializer.js.map +1 -0
  59. package/dist/src/core/execution-context/validator.d.ts +18 -0
  60. package/dist/src/core/execution-context/validator.d.ts.map +1 -0
  61. package/dist/src/core/execution-context/validator.js +90 -0
  62. package/dist/src/core/execution-context/validator.js.map +1 -0
  63. package/dist/src/core/index.d.ts +8 -0
  64. package/dist/src/core/index.d.ts.map +1 -0
  65. package/dist/src/core/index.js +26 -0
  66. package/dist/src/core/index.js.map +1 -0
  67. package/dist/src/core/ir/decider-definition.d.ts +20 -0
  68. package/dist/src/core/ir/decider-definition.d.ts.map +1 -0
  69. package/dist/src/core/ir/decider-definition.js +6 -0
  70. package/dist/src/core/ir/decider-definition.js.map +1 -0
  71. package/dist/src/core/ir/index.d.ts +8 -0
  72. package/dist/src/core/ir/index.d.ts.map +1 -0
  73. package/dist/src/core/ir/index.js +26 -0
  74. package/dist/src/core/ir/index.js.map +1 -0
  75. package/dist/src/core/ir/job-definition.d.ts +15 -0
  76. package/dist/src/core/ir/job-definition.d.ts.map +1 -0
  77. package/dist/src/core/ir/job-definition.js +6 -0
  78. package/dist/src/core/ir/job-definition.js.map +1 -0
  79. package/dist/src/core/ir/listener-definition.d.ts +10 -0
  80. package/dist/src/core/ir/listener-definition.d.ts.map +1 -0
  81. package/dist/src/core/ir/listener-definition.js +6 -0
  82. package/dist/src/core/ir/listener-definition.js.map +1 -0
  83. package/dist/src/core/ir/policy-config.d.ts +24 -0
  84. package/dist/src/core/ir/policy-config.d.ts.map +1 -0
  85. package/dist/src/core/ir/policy-config.js +6 -0
  86. package/dist/src/core/ir/policy-config.js.map +1 -0
  87. package/dist/src/core/ir/refs.d.ts +42 -0
  88. package/dist/src/core/ir/refs.d.ts.map +1 -0
  89. package/dist/src/core/ir/refs.js +18 -0
  90. package/dist/src/core/ir/refs.js.map +1 -0
  91. package/dist/src/core/ir/step-definition.d.ts +59 -0
  92. package/dist/src/core/ir/step-definition.d.ts.map +1 -0
  93. package/dist/src/core/ir/step-definition.js +6 -0
  94. package/dist/src/core/ir/step-definition.js.map +1 -0
  95. package/dist/src/core/ir/transition-definition.d.ts +8 -0
  96. package/dist/src/core/ir/transition-definition.d.ts.map +1 -0
  97. package/dist/src/core/ir/transition-definition.js +6 -0
  98. package/dist/src/core/ir/transition-definition.js.map +1 -0
  99. package/dist/src/core/item/index.d.ts +2 -0
  100. package/dist/src/core/item/index.d.ts.map +1 -0
  101. package/dist/src/core/item/index.js +20 -0
  102. package/dist/src/core/item/index.js.map +1 -0
  103. package/dist/src/core/item/interfaces.d.ts +64 -0
  104. package/dist/src/core/item/interfaces.d.ts.map +1 -0
  105. package/dist/src/core/item/interfaces.js +6 -0
  106. package/dist/src/core/item/interfaces.js.map +1 -0
  107. package/dist/src/core/repository/index.d.ts +3 -0
  108. package/dist/src/core/repository/index.d.ts.map +1 -0
  109. package/dist/src/core/repository/index.js +21 -0
  110. package/dist/src/core/repository/index.js.map +1 -0
  111. package/dist/src/core/repository/job-repository.d.ts +60 -0
  112. package/dist/src/core/repository/job-repository.d.ts.map +1 -0
  113. package/dist/src/core/repository/job-repository.js +27 -0
  114. package/dist/src/core/repository/job-repository.js.map +1 -0
  115. package/dist/src/core/repository/types.d.ts +84 -0
  116. package/dist/src/core/repository/types.d.ts.map +1 -0
  117. package/dist/src/core/repository/types.js +6 -0
  118. package/dist/src/core/repository/types.js.map +1 -0
  119. package/dist/src/core/status.d.ts +29 -0
  120. package/dist/src/core/status.d.ts.map +1 -0
  121. package/dist/src/core/status.js +58 -0
  122. package/dist/src/core/status.js.map +1 -0
  123. package/dist/src/core/transaction/index.d.ts +2 -0
  124. package/dist/src/core/transaction/index.d.ts.map +1 -0
  125. package/dist/src/core/transaction/index.js +20 -0
  126. package/dist/src/core/transaction/index.js.map +1 -0
  127. package/dist/src/core/transaction/transaction-manager.d.ts +8 -0
  128. package/dist/src/core/transaction/transaction-manager.d.ts.map +1 -0
  129. package/dist/src/core/transaction/transaction-manager.js +14 -0
  130. package/dist/src/core/transaction/transaction-manager.js.map +1 -0
  131. package/dist/src/core/validation/definition-validator.d.ts +46 -0
  132. package/dist/src/core/validation/definition-validator.d.ts.map +1 -0
  133. package/dist/src/core/validation/definition-validator.js +177 -0
  134. package/dist/src/core/validation/definition-validator.js.map +1 -0
  135. package/dist/src/core/validation/index.d.ts +2 -0
  136. package/dist/src/core/validation/index.d.ts.map +1 -0
  137. package/dist/src/core/validation/index.js +20 -0
  138. package/dist/src/core/validation/index.js.map +1 -0
  139. package/dist/src/decorators/constants.d.ts +10 -0
  140. package/dist/src/decorators/constants.d.ts.map +1 -0
  141. package/dist/src/decorators/constants.js +50 -0
  142. package/dist/src/decorators/constants.js.map +1 -0
  143. package/dist/src/decorators/flow.decorator.d.ts +25 -0
  144. package/dist/src/decorators/flow.decorator.d.ts.map +1 -0
  145. package/dist/src/decorators/flow.decorator.js +19 -0
  146. package/dist/src/decorators/flow.decorator.js.map +1 -0
  147. package/dist/src/decorators/index.d.ts +8 -0
  148. package/dist/src/decorators/index.d.ts.map +1 -0
  149. package/dist/src/decorators/index.js +26 -0
  150. package/dist/src/decorators/index.js.map +1 -0
  151. package/dist/src/decorators/item.decorators.d.ts +32 -0
  152. package/dist/src/decorators/item.decorators.d.ts.map +1 -0
  153. package/dist/src/decorators/item.decorators.js +40 -0
  154. package/dist/src/decorators/item.decorators.js.map +1 -0
  155. package/dist/src/decorators/job.decorator.d.ts +11 -0
  156. package/dist/src/decorators/job.decorator.d.ts.map +1 -0
  157. package/dist/src/decorators/job.decorator.js +17 -0
  158. package/dist/src/decorators/job.decorator.js.map +1 -0
  159. package/dist/src/decorators/listener.decorators.d.ts +56 -0
  160. package/dist/src/decorators/listener.decorators.d.ts.map +1 -0
  161. package/dist/src/decorators/listener.decorators.js +157 -0
  162. package/dist/src/decorators/listener.decorators.js.map +1 -0
  163. package/dist/src/decorators/step.decorator.d.ts +25 -0
  164. package/dist/src/decorators/step.decorator.d.ts.map +1 -0
  165. package/dist/src/decorators/step.decorator.js +21 -0
  166. package/dist/src/decorators/step.decorator.js.map +1 -0
  167. package/dist/src/decorators/tasklet.decorator.d.ts +7 -0
  168. package/dist/src/decorators/tasklet.decorator.d.ts.map +1 -0
  169. package/dist/src/decorators/tasklet.decorator.js +21 -0
  170. package/dist/src/decorators/tasklet.decorator.js.map +1 -0
  171. package/dist/src/execution/batch-worker-runner.d.ts +27 -0
  172. package/dist/src/execution/batch-worker-runner.d.ts.map +1 -0
  173. package/dist/src/execution/batch-worker-runner.js +147 -0
  174. package/dist/src/execution/batch-worker-runner.js.map +1 -0
  175. package/dist/src/execution/chunk-step-executor.d.ts +86 -0
  176. package/dist/src/execution/chunk-step-executor.d.ts.map +1 -0
  177. package/dist/src/execution/chunk-step-executor.js +482 -0
  178. package/dist/src/execution/chunk-step-executor.js.map +1 -0
  179. package/dist/src/execution/execution-strategy.d.ts +110 -0
  180. package/dist/src/execution/execution-strategy.d.ts.map +1 -0
  181. package/dist/src/execution/execution-strategy.js +13 -0
  182. package/dist/src/execution/execution-strategy.js.map +1 -0
  183. package/dist/src/execution/external-task-execution-strategy.d.ts +36 -0
  184. package/dist/src/execution/external-task-execution-strategy.d.ts.map +1 -0
  185. package/dist/src/execution/external-task-execution-strategy.js +97 -0
  186. package/dist/src/execution/external-task-execution-strategy.js.map +1 -0
  187. package/dist/src/execution/in-process-execution-strategy.d.ts +129 -0
  188. package/dist/src/execution/in-process-execution-strategy.d.ts.map +1 -0
  189. package/dist/src/execution/in-process-execution-strategy.js +141 -0
  190. package/dist/src/execution/in-process-execution-strategy.js.map +1 -0
  191. package/dist/src/execution/index.d.ts +14 -0
  192. package/dist/src/execution/index.d.ts.map +1 -0
  193. package/dist/src/execution/index.js +32 -0
  194. package/dist/src/execution/index.js.map +1 -0
  195. package/dist/src/execution/job-executor.d.ts +145 -0
  196. package/dist/src/execution/job-executor.d.ts.map +1 -0
  197. package/dist/src/execution/job-executor.js +475 -0
  198. package/dist/src/execution/job-executor.js.map +1 -0
  199. package/dist/src/execution/job-explorer.d.ts +15 -0
  200. package/dist/src/execution/job-explorer.d.ts.map +1 -0
  201. package/dist/src/execution/job-explorer.js +84 -0
  202. package/dist/src/execution/job-explorer.js.map +1 -0
  203. package/dist/src/execution/job-key.d.ts +3 -0
  204. package/dist/src/execution/job-key.d.ts.map +1 -0
  205. package/dist/src/execution/job-key.js +43 -0
  206. package/dist/src/execution/job-key.js.map +1 -0
  207. package/dist/src/execution/job-launcher.d.ts +75 -0
  208. package/dist/src/execution/job-launcher.d.ts.map +1 -0
  209. package/dist/src/execution/job-launcher.js +112 -0
  210. package/dist/src/execution/job-launcher.js.map +1 -0
  211. package/dist/src/execution/job-operator.d.ts +22 -0
  212. package/dist/src/execution/job-operator.d.ts.map +1 -0
  213. package/dist/src/execution/job-operator.js +125 -0
  214. package/dist/src/execution/job-operator.js.map +1 -0
  215. package/dist/src/execution/listener-invoker.d.ts +164 -0
  216. package/dist/src/execution/listener-invoker.d.ts.map +1 -0
  217. package/dist/src/execution/listener-invoker.js +246 -0
  218. package/dist/src/execution/listener-invoker.js.map +1 -0
  219. package/dist/src/execution/ref-resolver.d.ts +40 -0
  220. package/dist/src/execution/ref-resolver.d.ts.map +1 -0
  221. package/dist/src/execution/ref-resolver.js +41 -0
  222. package/dist/src/execution/ref-resolver.js.map +1 -0
  223. package/dist/src/execution/tasklet-step-executor.d.ts +79 -0
  224. package/dist/src/execution/tasklet-step-executor.d.ts.map +1 -0
  225. package/dist/src/execution/tasklet-step-executor.js +138 -0
  226. package/dist/src/execution/tasklet-step-executor.js.map +1 -0
  227. package/dist/src/explorer/batch-explorer.d.ts +138 -0
  228. package/dist/src/explorer/batch-explorer.d.ts.map +1 -0
  229. package/dist/src/explorer/batch-explorer.js +167 -0
  230. package/dist/src/explorer/batch-explorer.js.map +1 -0
  231. package/dist/src/explorer/index.d.ts +2 -0
  232. package/dist/src/explorer/index.d.ts.map +1 -0
  233. package/dist/src/explorer/index.js +20 -0
  234. package/dist/src/explorer/index.js.map +1 -0
  235. package/dist/src/flow/flow-evaluator.d.ts +30 -0
  236. package/dist/src/flow/flow-evaluator.d.ts.map +1 -0
  237. package/dist/src/flow/flow-evaluator.js +80 -0
  238. package/dist/src/flow/flow-evaluator.js.map +1 -0
  239. package/dist/src/flow/index.d.ts +2 -0
  240. package/dist/src/flow/index.d.ts.map +1 -0
  241. package/dist/src/flow/index.js +20 -0
  242. package/dist/src/flow/index.js.map +1 -0
  243. package/dist/src/index.d.ts +18 -0
  244. package/dist/src/index.d.ts.map +1 -0
  245. package/dist/src/index.js +90 -0
  246. package/dist/src/index.js.map +1 -0
  247. package/dist/src/io/checkpoint.d.ts +7 -0
  248. package/dist/src/io/checkpoint.d.ts.map +1 -0
  249. package/dist/src/io/checkpoint.js +56 -0
  250. package/dist/src/io/checkpoint.js.map +1 -0
  251. package/dist/src/io/database.d.ts +50 -0
  252. package/dist/src/io/database.d.ts.map +1 -0
  253. package/dist/src/io/database.js +108 -0
  254. package/dist/src/io/database.js.map +1 -0
  255. package/dist/src/io/file-readers.d.ts +54 -0
  256. package/dist/src/io/file-readers.d.ts.map +1 -0
  257. package/dist/src/io/file-readers.js +167 -0
  258. package/dist/src/io/file-readers.js.map +1 -0
  259. package/dist/src/io/file-writers.d.ts +31 -0
  260. package/dist/src/io/file-writers.d.ts.map +1 -0
  261. package/dist/src/io/file-writers.js +80 -0
  262. package/dist/src/io/file-writers.js.map +1 -0
  263. package/dist/src/io/index.d.ts +6 -0
  264. package/dist/src/io/index.d.ts.map +1 -0
  265. package/dist/src/io/index.js +24 -0
  266. package/dist/src/io/index.js.map +1 -0
  267. package/dist/src/io/s3.d.ts +50 -0
  268. package/dist/src/io/s3.d.ts.map +1 -0
  269. package/dist/src/io/s3.js +96 -0
  270. package/dist/src/io/s3.js.map +1 -0
  271. package/dist/src/listeners/builtin-listeners.d.ts +77 -0
  272. package/dist/src/listeners/builtin-listeners.d.ts.map +1 -0
  273. package/dist/src/listeners/builtin-listeners.js +108 -0
  274. package/dist/src/listeners/builtin-listeners.js.map +1 -0
  275. package/dist/src/listeners/index.d.ts +8 -0
  276. package/dist/src/listeners/index.d.ts.map +1 -0
  277. package/dist/src/listeners/index.js +25 -0
  278. package/dist/src/listeners/index.js.map +1 -0
  279. package/dist/src/module/adapter-options.d.ts +39 -0
  280. package/dist/src/module/adapter-options.d.ts.map +1 -0
  281. package/dist/src/module/adapter-options.js +34 -0
  282. package/dist/src/module/adapter-options.js.map +1 -0
  283. package/dist/src/module/adapter.d.ts +157 -0
  284. package/dist/src/module/adapter.d.ts.map +1 -0
  285. package/dist/src/module/adapter.js +80 -0
  286. package/dist/src/module/adapter.js.map +1 -0
  287. package/dist/src/module/batch-schedule-registry.d.ts +110 -0
  288. package/dist/src/module/batch-schedule-registry.d.ts.map +1 -0
  289. package/dist/src/module/batch-schedule-registry.js +0 -0
  290. package/dist/src/module/batch-schedule-registry.js.map +1 -0
  291. package/dist/src/module/index.d.ts +14 -0
  292. package/dist/src/module/index.d.ts.map +1 -0
  293. package/dist/src/module/index.js +31 -0
  294. package/dist/src/module/index.js.map +1 -0
  295. package/dist/src/module/nest-batch.module.d.ts +236 -0
  296. package/dist/src/module/nest-batch.module.d.ts.map +1 -0
  297. package/dist/src/module/nest-batch.module.js +475 -0
  298. package/dist/src/module/nest-batch.module.js.map +1 -0
  299. package/dist/src/module/tokens.d.ts +83 -0
  300. package/dist/src/module/tokens.d.ts.map +1 -0
  301. package/dist/src/module/tokens.js +58 -0
  302. package/dist/src/module/tokens.js.map +1 -0
  303. package/dist/src/observability/event-types.d.ts +55 -0
  304. package/dist/src/observability/event-types.d.ts.map +1 -0
  305. package/dist/src/observability/event-types.js +36 -0
  306. package/dist/src/observability/event-types.js.map +1 -0
  307. package/dist/src/observability/exporters.d.ts +35 -0
  308. package/dist/src/observability/exporters.d.ts.map +1 -0
  309. package/dist/src/observability/exporters.js +93 -0
  310. package/dist/src/observability/exporters.js.map +1 -0
  311. package/dist/src/observability/index.d.ts +3 -0
  312. package/dist/src/observability/index.d.ts.map +1 -0
  313. package/dist/src/observability/index.js +21 -0
  314. package/dist/src/observability/index.js.map +1 -0
  315. package/dist/src/partition-helpers.d.ts +127 -0
  316. package/dist/src/partition-helpers.d.ts.map +1 -0
  317. package/dist/src/partition-helpers.js +136 -0
  318. package/dist/src/partition-helpers.js.map +1 -0
  319. package/dist/src/policies/backoff.d.ts +3 -0
  320. package/dist/src/policies/backoff.d.ts.map +1 -0
  321. package/dist/src/policies/backoff.js +34 -0
  322. package/dist/src/policies/backoff.js.map +1 -0
  323. package/dist/src/policies/index.d.ts +4 -0
  324. package/dist/src/policies/index.d.ts.map +1 -0
  325. package/dist/src/policies/index.js +22 -0
  326. package/dist/src/policies/index.js.map +1 -0
  327. package/dist/src/policies/retry-policy.d.ts +13 -0
  328. package/dist/src/policies/retry-policy.d.ts.map +1 -0
  329. package/dist/src/policies/retry-policy.js +55 -0
  330. package/dist/src/policies/retry-policy.js.map +1 -0
  331. package/dist/src/policies/skip-policy.d.ts +12 -0
  332. package/dist/src/policies/skip-policy.d.ts.map +1 -0
  333. package/dist/src/policies/skip-policy.js +44 -0
  334. package/dist/src/policies/skip-policy.js.map +1 -0
  335. package/dist/src/registry/index.d.ts +2 -0
  336. package/dist/src/registry/index.d.ts.map +1 -0
  337. package/dist/src/registry/index.js +20 -0
  338. package/dist/src/registry/index.js.map +1 -0
  339. package/dist/src/registry/job-registry.d.ts +16 -0
  340. package/dist/src/registry/job-registry.d.ts.map +1 -0
  341. package/dist/src/registry/job-registry.js +50 -0
  342. package/dist/src/registry/job-registry.js.map +1 -0
  343. package/dist/src/repository/id-generator.d.ts +18 -0
  344. package/dist/src/repository/id-generator.d.ts.map +1 -0
  345. package/dist/src/repository/id-generator.js +37 -0
  346. package/dist/src/repository/id-generator.js.map +1 -0
  347. package/dist/src/repository/in-memory/in-memory-job-repository.d.ts +49 -0
  348. package/dist/src/repository/in-memory/in-memory-job-repository.d.ts.map +1 -0
  349. package/dist/src/repository/in-memory/in-memory-job-repository.js +291 -0
  350. package/dist/src/repository/in-memory/in-memory-job-repository.js.map +1 -0
  351. package/dist/src/repository/in-memory/index.d.ts +2 -0
  352. package/dist/src/repository/in-memory/index.d.ts.map +1 -0
  353. package/dist/src/repository/in-memory/index.js +20 -0
  354. package/dist/src/repository/in-memory/index.js.map +1 -0
  355. package/dist/src/repository/index.d.ts +4 -0
  356. package/dist/src/repository/index.d.ts.map +1 -0
  357. package/dist/src/repository/index.js +22 -0
  358. package/dist/src/repository/index.js.map +1 -0
  359. package/dist/src/repository/uuid-v7.d.ts +20 -0
  360. package/dist/src/repository/uuid-v7.d.ts.map +1 -0
  361. package/dist/src/repository/uuid-v7.js +31 -0
  362. package/dist/src/repository/uuid-v7.js.map +1 -0
  363. package/dist/src/scheduling/batch-scheduled.d.ts +87 -0
  364. package/dist/src/scheduling/batch-scheduled.d.ts.map +1 -0
  365. package/dist/src/scheduling/batch-scheduled.js +170 -0
  366. package/dist/src/scheduling/batch-scheduled.js.map +1 -0
  367. package/dist/src/transaction/in-memory-transaction-manager.d.ts +16 -0
  368. package/dist/src/transaction/in-memory-transaction-manager.d.ts.map +1 -0
  369. package/dist/src/transaction/in-memory-transaction-manager.js +33 -0
  370. package/dist/src/transaction/in-memory-transaction-manager.js.map +1 -0
  371. package/dist/src/transaction/index.d.ts +2 -0
  372. package/dist/src/transaction/index.d.ts.map +1 -0
  373. package/dist/src/transaction/index.js +20 -0
  374. package/dist/src/transaction/index.js.map +1 -0
  375. package/dist/tests/contracts/index.d.ts +26 -0
  376. package/dist/tests/contracts/index.d.ts.map +1 -0
  377. package/dist/tests/contracts/index.js +37 -0
  378. package/dist/tests/contracts/index.js.map +1 -0
  379. package/dist/tests/contracts/job-repository.contract.d.ts +46 -0
  380. package/dist/tests/contracts/job-repository.contract.d.ts.map +1 -0
  381. package/dist/tests/contracts/job-repository.contract.js +644 -0
  382. package/dist/tests/contracts/job-repository.contract.js.map +1 -0
  383. package/package.json +80 -0
  384. package/src/adapters/in-process.adapter.ts +182 -0
  385. package/src/adapters/index.ts +17 -0
  386. package/src/builder/batch-builder.ts +32 -0
  387. package/src/builder/flow-builder.ts +141 -0
  388. package/src/builder/index.ts +4 -0
  389. package/src/builder/job-builder.ts +206 -0
  390. package/src/builder/step-builder.ts +190 -0
  391. package/src/compiler/builder-types.ts +27 -0
  392. package/src/compiler/definition-compiler.ts +325 -0
  393. package/src/compiler/index.ts +2 -0
  394. package/src/core/errors.ts +125 -0
  395. package/src/core/execution-context/index.ts +3 -0
  396. package/src/core/execution-context/json-value.ts +3 -0
  397. package/src/core/execution-context/serializer.ts +21 -0
  398. package/src/core/execution-context/validator.ts +103 -0
  399. package/src/core/index.ts +7 -0
  400. package/src/core/ir/decider-definition.ts +25 -0
  401. package/src/core/ir/index.ts +7 -0
  402. package/src/core/ir/job-definition.ts +15 -0
  403. package/src/core/ir/listener-definition.ts +19 -0
  404. package/src/core/ir/policy-config.ts +19 -0
  405. package/src/core/ir/refs.ts +42 -0
  406. package/src/core/ir/step-definition.ts +62 -0
  407. package/src/core/ir/transition-definition.ts +9 -0
  408. package/src/core/item/index.ts +1 -0
  409. package/src/core/item/interfaces.ts +70 -0
  410. package/src/core/repository/index.ts +2 -0
  411. package/src/core/repository/job-repository.ts +100 -0
  412. package/src/core/repository/types.ts +91 -0
  413. package/src/core/status.ts +31 -0
  414. package/src/core/transaction/index.ts +1 -0
  415. package/src/core/transaction/transaction-manager.ts +8 -0
  416. package/src/core/validation/definition-validator.ts +215 -0
  417. package/src/core/validation/index.ts +1 -0
  418. package/src/decorators/constants.ts +9 -0
  419. package/src/decorators/flow.decorator.ts +31 -0
  420. package/src/decorators/index.ts +7 -0
  421. package/src/decorators/item.decorators.ts +51 -0
  422. package/src/decorators/job.decorator.ts +16 -0
  423. package/src/decorators/listener.decorators.ts +142 -0
  424. package/src/decorators/step.decorator.ts +33 -0
  425. package/src/decorators/tasklet.decorator.ts +14 -0
  426. package/src/execution/batch-worker-runner.ts +142 -0
  427. package/src/execution/chunk-step-executor.ts +594 -0
  428. package/src/execution/execution-strategy.ts +115 -0
  429. package/src/execution/external-task-execution-strategy.ts +104 -0
  430. package/src/execution/in-process-execution-strategy.ts +207 -0
  431. package/src/execution/index.ts +13 -0
  432. package/src/execution/job-executor.ts +553 -0
  433. package/src/execution/job-explorer.ts +73 -0
  434. package/src/execution/job-key.ts +35 -0
  435. package/src/execution/job-launcher.ts +132 -0
  436. package/src/execution/job-operator.ts +127 -0
  437. package/src/execution/listener-invoker.ts +389 -0
  438. package/src/execution/ref-resolver.ts +64 -0
  439. package/src/execution/tasklet-step-executor.ts +182 -0
  440. package/src/explorer/batch-explorer.ts +251 -0
  441. package/src/explorer/index.ts +1 -0
  442. package/src/flow/flow-evaluator.ts +89 -0
  443. package/src/flow/index.ts +1 -0
  444. package/src/index.ts +24 -0
  445. package/src/io/checkpoint.ts +47 -0
  446. package/src/io/database.ts +114 -0
  447. package/src/io/file-readers.ts +191 -0
  448. package/src/io/file-writers.ts +99 -0
  449. package/src/io/index.ts +5 -0
  450. package/src/io/s3.ts +117 -0
  451. package/src/listeners/builtin-listeners.ts +151 -0
  452. package/src/listeners/index.ts +7 -0
  453. package/src/module/adapter-options.ts +38 -0
  454. package/src/module/adapter.ts +160 -0
  455. package/src/module/batch-schedule-registry.ts +0 -0
  456. package/src/module/index.ts +13 -0
  457. package/src/module/nest-batch.module.ts +674 -0
  458. package/src/module/tokens.ts +95 -0
  459. package/src/observability/event-types.ts +61 -0
  460. package/src/observability/exporters.ts +96 -0
  461. package/src/observability/index.ts +2 -0
  462. package/src/partition-helpers.ts +204 -0
  463. package/src/policies/backoff.ts +22 -0
  464. package/src/policies/index.ts +3 -0
  465. package/src/policies/retry-policy.ts +57 -0
  466. package/src/policies/skip-policy.ts +51 -0
  467. package/src/registry/index.ts +1 -0
  468. package/src/registry/job-registry.ts +42 -0
  469. package/src/repository/id-generator.ts +25 -0
  470. package/src/repository/in-memory/in-memory-job-repository.ts +334 -0
  471. package/src/repository/in-memory/index.ts +1 -0
  472. package/src/repository/index.ts +3 -0
  473. package/src/repository/uuid-v7.ts +40 -0
  474. package/src/scheduling/batch-scheduled.ts +257 -0
  475. package/src/transaction/in-memory-transaction-manager.ts +23 -0
  476. package/src/transaction/index.ts +1 -0
@@ -0,0 +1,7 @@
1
+ export * from './constants';
2
+ export * from './job.decorator';
3
+ export * from './step.decorator';
4
+ export * from './tasklet.decorator';
5
+ export * from './item.decorators';
6
+ export * from './listener.decorators';
7
+ export * from './flow.decorator';
@@ -0,0 +1,51 @@
1
+ import 'reflect-metadata';
2
+ import {
3
+ BATCH_ITEM_READER_METADATA,
4
+ BATCH_ITEM_PROCESSOR_METADATA,
5
+ BATCH_ITEM_WRITER_METADATA,
6
+ } from './constants';
7
+
8
+ /**
9
+ * Marks a method as the `ItemReader.read()` handler for a chunk step.
10
+ *
11
+ * Contract:
12
+ * - Method may return `Promise<T | null>` (null = EOF) OR
13
+ * `AsyncIterable<T>` for streaming-style readers.
14
+ * - Exactly one `@ItemReader()` per chunk step.
15
+ * - Metadata stored on the prototype method under `BATCH_ITEM_READER_METADATA`
16
+ * so the DefinitionCompiler can resolve it to a `ReaderRef`.
17
+ */
18
+ export function ItemReader(): MethodDecorator {
19
+ return (target: object, propertyKey: string | symbol, _descriptor: PropertyDescriptor) => {
20
+ Reflect.defineMetadata(BATCH_ITEM_READER_METADATA, true, target, propertyKey);
21
+ };
22
+ }
23
+
24
+ /**
25
+ * Marks a method as the `ItemProcessor.process(item)` handler for a chunk step.
26
+ *
27
+ * Contract:
28
+ * - Receives a single item, returns the (possibly transformed) item.
29
+ * - Returning `null` or `undefined` filters the item out of the chunk.
30
+ * - Exactly one `@ItemProcessor()` per chunk step (or none — processor is optional).
31
+ * - Metadata stored on the prototype method under `BATCH_ITEM_PROCESSOR_METADATA`.
32
+ */
33
+ export function ItemProcessor(): MethodDecorator {
34
+ return (target: object, propertyKey: string | symbol, _descriptor: PropertyDescriptor) => {
35
+ Reflect.defineMetadata(BATCH_ITEM_PROCESSOR_METADATA, true, target, propertyKey);
36
+ };
37
+ }
38
+
39
+ /**
40
+ * Marks a method as the `ItemWriter.write(items)` handler for a chunk step.
41
+ *
42
+ * Contract:
43
+ * - Receives an array of items for the chunk, returns `Promise<void>`.
44
+ * - Exactly one `@ItemWriter()` per chunk step.
45
+ * - Metadata stored on the prototype method under `BATCH_ITEM_WRITER_METADATA`.
46
+ */
47
+ export function ItemWriter(): MethodDecorator {
48
+ return (target: object, propertyKey: string | symbol, _descriptor: PropertyDescriptor) => {
49
+ Reflect.defineMetadata(BATCH_ITEM_WRITER_METADATA, true, target, propertyKey);
50
+ };
51
+ }
@@ -0,0 +1,16 @@
1
+ import { SetMetadata } from '@nestjs/common';
2
+ import { BATCH_JOB_METADATA } from './constants';
3
+
4
+ export interface JobableOptions {
5
+ id: string;
6
+ restartable?: boolean;
7
+ allowDuplicateInstances?: boolean;
8
+ }
9
+
10
+ /**
11
+ * Class decorator that marks a class as a batch job.
12
+ * Metadata: { id, restartable, allowDuplicateInstances }
13
+ */
14
+ export function Jobable(options: JobableOptions): ClassDecorator {
15
+ return SetMetadata(BATCH_JOB_METADATA, options);
16
+ }
@@ -0,0 +1,142 @@
1
+ import 'reflect-metadata';
2
+ import { BATCH_LISTENER_METADATA } from './constants';
3
+ import type { ListenerKind, ListenerPhase } from '../core/ir/listener-definition';
4
+
5
+ /**
6
+ * Stored under `BATCH_LISTENER_METADATA` for each listener method.
7
+ * Mirrors `ListenerDefinition` minus the resolved `ref` (which the
8
+ * DefinitionCompiler fills in by walking the class).
9
+ *
10
+ * The `skip` kind is special: it has no before/after/on-error phase,
11
+ * it is a single fire-and-forget callback per skip event. We record
12
+ * `phase: 'after'` as a placeholder so the metadata shape stays uniform;
13
+ * the skip dispatch table is built in Task 25.
14
+ */
15
+ export interface ListenerOptions {
16
+ kind: ListenerKind;
17
+ phase: ListenerPhase;
18
+ nonCritical?: boolean;
19
+ }
20
+
21
+ function defineListener(
22
+ target: object,
23
+ propertyKey: string | symbol,
24
+ options: ListenerOptions,
25
+ ): void {
26
+ Reflect.defineMetadata(BATCH_LISTENER_METADATA, options, target, propertyKey);
27
+ }
28
+
29
+ function listenerDecorator(options: ListenerOptions): MethodDecorator {
30
+ return (target: object, propertyKey: string | symbol, _descriptor: PropertyDescriptor) => {
31
+ defineListener(target, propertyKey, options);
32
+ };
33
+ }
34
+
35
+ // ---------------------------------------------------------------------------
36
+ // Job-level listeners (2)
37
+ // ---------------------------------------------------------------------------
38
+
39
+ /** Fires before a job execution starts. */
40
+ export const BeforeJob = (): MethodDecorator =>
41
+ listenerDecorator({ kind: 'job', phase: 'before' });
42
+
43
+ /** Fires after a job execution finishes (regardless of status). */
44
+ export const AfterJob = (): MethodDecorator =>
45
+ listenerDecorator({ kind: 'job', phase: 'after' });
46
+
47
+ // ---------------------------------------------------------------------------
48
+ // Step-level listeners (2)
49
+ // ---------------------------------------------------------------------------
50
+
51
+ /** Fires before a step execution starts. */
52
+ export const BeforeStep = (): MethodDecorator =>
53
+ listenerDecorator({ kind: 'step', phase: 'before' });
54
+
55
+ /** Fires after a step execution finishes (regardless of status). */
56
+ export const AfterStep = (): MethodDecorator =>
57
+ listenerDecorator({ kind: 'step', phase: 'after' });
58
+
59
+ // ---------------------------------------------------------------------------
60
+ // Chunk-level listeners (3)
61
+ // ---------------------------------------------------------------------------
62
+
63
+ /** Fires before each chunk (read-process-write cycle) starts. */
64
+ export const BeforeChunk = (): MethodDecorator =>
65
+ listenerDecorator({ kind: 'chunk', phase: 'before' });
66
+
67
+ /** Fires after each chunk finishes successfully. */
68
+ export const AfterChunk = (): MethodDecorator =>
69
+ listenerDecorator({ kind: 'chunk', phase: 'after' });
70
+
71
+ /** Fires when a chunk throws (allows rollback hooks / telemetry). */
72
+ export const OnChunkError = (): MethodDecorator =>
73
+ listenerDecorator({ kind: 'chunk', phase: 'on-error' });
74
+
75
+ // ---------------------------------------------------------------------------
76
+ // ItemRead listeners (3)
77
+ // ---------------------------------------------------------------------------
78
+
79
+ /** Fires before each item is read. */
80
+ export const BeforeRead = (): MethodDecorator =>
81
+ listenerDecorator({ kind: 'item-read', phase: 'before' });
82
+
83
+ /** Fires after each item is successfully read. */
84
+ export const AfterRead = (): MethodDecorator =>
85
+ listenerDecorator({ kind: 'item-read', phase: 'after' });
86
+
87
+ /** Fires when the reader throws. */
88
+ export const OnReadError = (): MethodDecorator =>
89
+ listenerDecorator({ kind: 'item-read', phase: 'on-error' });
90
+
91
+ // ---------------------------------------------------------------------------
92
+ // ItemProcess listeners (3)
93
+ // ---------------------------------------------------------------------------
94
+
95
+ /** Fires before each item is processed. */
96
+ export const BeforeProcess = (): MethodDecorator =>
97
+ listenerDecorator({ kind: 'item-process', phase: 'before' });
98
+
99
+ /** Fires after each item is successfully processed. */
100
+ export const AfterProcess = (): MethodDecorator =>
101
+ listenerDecorator({ kind: 'item-process', phase: 'after' });
102
+
103
+ /** Fires when the processor throws. */
104
+ export const OnProcessError = (): MethodDecorator =>
105
+ listenerDecorator({ kind: 'item-process', phase: 'on-error' });
106
+
107
+ // ---------------------------------------------------------------------------
108
+ // ItemWrite listeners (3)
109
+ // ---------------------------------------------------------------------------
110
+
111
+ /** Fires before the writer receives a chunk. */
112
+ export const BeforeWrite = (): MethodDecorator =>
113
+ listenerDecorator({ kind: 'item-write', phase: 'before' });
114
+
115
+ /** Fires after the writer successfully writes a chunk. */
116
+ export const AfterWrite = (): MethodDecorator =>
117
+ listenerDecorator({ kind: 'item-write', phase: 'after' });
118
+
119
+ /** Fires when the writer throws. */
120
+ export const OnWriteError = (): MethodDecorator =>
121
+ listenerDecorator({ kind: 'item-write', phase: 'on-error' });
122
+
123
+ // ---------------------------------------------------------------------------
124
+ // Skip listeners (3)
125
+ //
126
+ // Skip listeners are not phase-based — each kind handles a distinct skip
127
+ // event emitted by the corresponding read/process/write. We store them
128
+ // under `kind: 'skip'` with `phase: 'after'` as a placeholder so the
129
+ // metadata shape is uniform; the dispatch table is built in Task 25.
130
+ // ---------------------------------------------------------------------------
131
+
132
+ /** Fires when a read is skipped (after the skip policy decides to skip). */
133
+ export const OnSkipRead = (): MethodDecorator =>
134
+ listenerDecorator({ kind: 'skip', phase: 'after' });
135
+
136
+ /** Fires when a processed item is skipped. */
137
+ export const OnSkipProcess = (): MethodDecorator =>
138
+ listenerDecorator({ kind: 'skip', phase: 'after' });
139
+
140
+ /** Fires when a write is skipped. */
141
+ export const OnSkipWrite = (): MethodDecorator =>
142
+ listenerDecorator({ kind: 'skip', phase: 'after' });
@@ -0,0 +1,33 @@
1
+ import 'reflect-metadata';
2
+ import { BATCH_STEP_METADATA } from './constants';
3
+ import type { ChunkPartitionConfig, RetryPolicyConfig, SkipPolicyConfig } from '../core/ir';
4
+
5
+ export interface StepableOptions {
6
+ id: string;
7
+ chunkSize?: number; // 0 or undefined = tasklet step
8
+ skipPolicy?: SkipPolicyConfig;
9
+ retryPolicy?: RetryPolicyConfig;
10
+ /**
11
+ * Optional partition configuration forwarded to the compiled
12
+ * `ChunkStepDefinition.partitions`. See `docs/RELEASE-0.2.0.md §6`
13
+ * and `packages/core/src/partition-helpers.ts` for the contract.
14
+ * Tasklet steps ignore this field.
15
+ */
16
+ partitions?: ChunkPartitionConfig;
17
+ }
18
+
19
+ /**
20
+ * Method decorator that marks a method as a batch step.
21
+ * When `chunkSize` is 0/undefined and `@Tasklet()` is also present, the step is a tasklet step.
22
+ * Otherwise, the method must NOT be marked with `@Tasklet()` and step is a chunk step (uses the class-level reader/processor/writer).
23
+ *
24
+ * NOTE: The actual chunk step is assembled by the `DefinitionCompiler` from
25
+ * class-level `@ItemReader`/`@ItemProcessor`/`@ItemWriter` methods.
26
+ */
27
+ export function Stepable(options: StepableOptions): MethodDecorator {
28
+ return (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
29
+ Reflect.defineMetadata(BATCH_STEP_METADATA, options, target, propertyKey);
30
+ // Also stash on the function itself so explorer can read both
31
+ Reflect.defineMetadata(BATCH_STEP_METADATA, options, descriptor.value as object);
32
+ };
33
+ }
@@ -0,0 +1,14 @@
1
+ import 'reflect-metadata';
2
+ import { BATCH_TASKLET_METADATA } from './constants';
3
+
4
+ /**
5
+ * Method decorator that marks a `@Stepable` method as a tasklet handler
6
+ * (single execution, not a chunk loop).
7
+ */
8
+ export function Tasklet(): MethodDecorator {
9
+ return (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
10
+ Reflect.defineMetadata(BATCH_TASKLET_METADATA, true, descriptor.value as object);
11
+ // Also stash on the prototype method so explorer can read both
12
+ Reflect.defineMetadata(BATCH_TASKLET_METADATA, true, target, propertyKey);
13
+ };
14
+ }
@@ -0,0 +1,142 @@
1
+ import { randomUUID } from 'node:crypto';
2
+
3
+ import { Injectable } from '@nestjs/common';
4
+
5
+ import {
6
+ InvalidJobOperationError,
7
+ JobExecutionNotFoundError,
8
+ JobInstanceNotFoundError,
9
+ } from '../core/errors';
10
+ import type { JobParameters, JobExecution } from '../core/repository';
11
+ import { JobRepository } from '../core/repository';
12
+ import { JobStatus } from '../core/status';
13
+ import { JobRegistry } from '../registry/job-registry';
14
+
15
+ import { JobExecutor } from './job-executor';
16
+ import { canonicalJobKey } from './job-key';
17
+
18
+ export interface BatchWorkerRunOptions {
19
+ readonly jobExecutionId?: string;
20
+ readonly executionId?: string;
21
+ readonly jobId?: string;
22
+ readonly params?: JobParameters;
23
+ readonly partitionIndex?: number;
24
+ readonly partitionCount?: number;
25
+ }
26
+
27
+ export interface BatchWorkerRunResult {
28
+ readonly jobExecution: JobExecution;
29
+ readonly status: JobStatus;
30
+ readonly processExitCode: number;
31
+ }
32
+
33
+ @Injectable()
34
+ export class BatchWorkerRunner {
35
+ constructor(
36
+ private readonly registry: JobRegistry,
37
+ private readonly repository: JobRepository,
38
+ private readonly jobExecutor: JobExecutor,
39
+ ) {}
40
+
41
+ async run(options: BatchWorkerRunOptions): Promise<BatchWorkerRunResult> {
42
+ const executionId = options.jobExecutionId ?? options.executionId;
43
+ const params = options.params ?? {};
44
+
45
+ let jobId = options.jobId;
46
+ let execution: JobExecution;
47
+
48
+ if (executionId !== undefined) {
49
+ const existing = await this.repository.getJobExecution(executionId);
50
+ if (existing === null) {
51
+ throw new JobExecutionNotFoundError(executionId);
52
+ }
53
+ execution = existing;
54
+ if (jobId === undefined) {
55
+ const instance = await this.repository.getJobInstance(existing.jobInstanceId);
56
+ if (instance === null) {
57
+ throw new JobInstanceNotFoundError(existing.jobInstanceId);
58
+ }
59
+ jobId = instance.jobName;
60
+ }
61
+ } else {
62
+ if (jobId === undefined) {
63
+ throw new InvalidJobOperationError(
64
+ 'worker-run',
65
+ 'BatchWorkerRunner requires either jobExecutionId or jobId',
66
+ );
67
+ }
68
+ const jobDef = this.registry.get(jobId);
69
+ const canonical = canonicalJobKey(params);
70
+ const jobKey = jobDef.allowDuplicateInstances
71
+ ? `${canonical}::${randomUUID()}`
72
+ : canonical;
73
+ execution = await this.repository.createExecutionAtomic(jobId, jobKey, params);
74
+ }
75
+
76
+ const jobDef = this.registry.get(jobId);
77
+ const jobExecution = await this.jobExecutor.execute(execution, jobDef, {
78
+ ...(options.partitionIndex !== undefined
79
+ ? { partitionIndex: options.partitionIndex }
80
+ : {}),
81
+ ...(options.partitionCount !== undefined
82
+ ? { partitionCount: options.partitionCount }
83
+ : {}),
84
+ });
85
+
86
+ return {
87
+ jobExecution,
88
+ status: jobExecution.status,
89
+ processExitCode: jobExecution.status === JobStatus.COMPLETED ? 0 : 1,
90
+ };
91
+ }
92
+ }
93
+
94
+ export function parseBatchWorkerArgs(argv: readonly string[]): BatchWorkerRunOptions {
95
+ const args = argv[0] === 'batch-worker' ? argv.slice(1) : argv;
96
+ const out: Record<string, string> = {};
97
+
98
+ for (let i = 0; i < args.length; i += 1) {
99
+ const arg = args[i]!;
100
+ if (!arg.startsWith('--')) continue;
101
+ const eq = arg.indexOf('=');
102
+ if (eq >= 0) {
103
+ out[arg.slice(2, eq)] = arg.slice(eq + 1);
104
+ continue;
105
+ }
106
+ const key = arg.slice(2);
107
+ const next = args[i + 1];
108
+ if (next === undefined || next.startsWith('--')) {
109
+ out[key] = 'true';
110
+ continue;
111
+ }
112
+ out[key] = next;
113
+ i += 1;
114
+ }
115
+
116
+ let params: JobParameters | undefined;
117
+ if (out['params-json'] !== undefined) {
118
+ const parsed = JSON.parse(out['params-json']) as unknown;
119
+ if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
120
+ throw new InvalidJobOperationError(
121
+ 'worker-args',
122
+ '--params-json must be a JSON object',
123
+ );
124
+ }
125
+ params = parsed as JobParameters;
126
+ }
127
+
128
+ return {
129
+ ...(out['execution-id'] !== undefined ? { jobExecutionId: out['execution-id'] } : {}),
130
+ ...(out['job-execution-id'] !== undefined
131
+ ? { jobExecutionId: out['job-execution-id'] }
132
+ : {}),
133
+ ...(out['job-id'] !== undefined ? { jobId: out['job-id'] } : {}),
134
+ ...(params !== undefined ? { params } : {}),
135
+ ...(out['partition-index'] !== undefined
136
+ ? { partitionIndex: Number(out['partition-index']) }
137
+ : {}),
138
+ ...(out['partition-count'] !== undefined
139
+ ? { partitionCount: Number(out['partition-count']) }
140
+ : {}),
141
+ };
142
+ }