bullmq 2.2.0 → 2.2.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 (234) hide show
  1. package/dist/cjs/classes/job.d.ts +1 -1
  2. package/dist/cjs/classes/redis-connection.d.ts +6 -2
  3. package/dist/cjs/classes/redis-connection.js +11 -5
  4. package/dist/cjs/classes/redis-connection.js.map +1 -1
  5. package/dist/cjs/scripts/addJob-8.d.ts +5 -0
  6. package/dist/{esm/commands/addJob-8.lua → cjs/scripts/addJob-8.js} +83 -31
  7. package/dist/cjs/scripts/addJob-8.js.map +1 -0
  8. package/dist/cjs/scripts/changeDelay-4.d.ts +5 -0
  9. package/dist/cjs/{commands/changeDelay-4.lua → scripts/changeDelay-4.js} +11 -11
  10. package/dist/cjs/scripts/changeDelay-4.js.map +1 -0
  11. package/dist/cjs/scripts/cleanJobsInSet-2.d.ts +5 -0
  12. package/dist/cjs/scripts/cleanJobsInSet-2.js +264 -0
  13. package/dist/cjs/scripts/cleanJobsInSet-2.js.map +1 -0
  14. package/dist/cjs/scripts/drain-4.d.ts +5 -0
  15. package/dist/cjs/{commands/includes/removeParentDependencyKey.lua → scripts/drain-4.js} +110 -10
  16. package/dist/cjs/scripts/drain-4.js.map +1 -0
  17. package/dist/cjs/scripts/extendLock-2.d.ts +5 -0
  18. package/dist/{esm/commands/extendLock-2.lua → cjs/scripts/extendLock-2.js} +11 -4
  19. package/dist/cjs/scripts/extendLock-2.js.map +1 -0
  20. package/dist/cjs/scripts/getState-7.d.ts +5 -0
  21. package/dist/{esm/commands/getState-7.lua → cjs/scripts/getState-7.js} +22 -12
  22. package/dist/cjs/scripts/getState-7.js.map +1 -0
  23. package/dist/cjs/scripts/getStateV2-7.d.ts +5 -0
  24. package/dist/cjs/{commands/getStateV2-7.lua → scripts/getStateV2-7.js} +11 -10
  25. package/dist/cjs/scripts/getStateV2-7.js.map +1 -0
  26. package/dist/cjs/scripts/index.d.ts +26 -0
  27. package/dist/cjs/scripts/index.js +30 -0
  28. package/dist/cjs/scripts/index.js.map +1 -0
  29. package/dist/cjs/scripts/isFinished-3.d.ts +5 -0
  30. package/dist/cjs/{commands/isFinished-3.lua → scripts/isFinished-3.js} +11 -10
  31. package/dist/cjs/scripts/isFinished-3.js.map +1 -0
  32. package/dist/cjs/scripts/isJobInList-1.d.ts +5 -0
  33. package/dist/cjs/scripts/isJobInList-1.js +32 -0
  34. package/dist/cjs/scripts/isJobInList-1.js.map +1 -0
  35. package/dist/cjs/scripts/moveStalledJobsToWait-8.d.ts +5 -0
  36. package/dist/cjs/scripts/moveStalledJobsToWait-8.js +291 -0
  37. package/dist/cjs/scripts/moveStalledJobsToWait-8.js.map +1 -0
  38. package/dist/cjs/scripts/moveToActive-9.d.ts +5 -0
  39. package/dist/cjs/scripts/moveToActive-9.js +207 -0
  40. package/dist/cjs/scripts/moveToActive-9.js.map +1 -0
  41. package/dist/cjs/scripts/moveToDelayed-5.d.ts +5 -0
  42. package/dist/cjs/{commands/moveToDelayed-5.lua → scripts/moveToDelayed-5.js} +11 -13
  43. package/dist/cjs/scripts/moveToDelayed-5.js.map +1 -0
  44. package/dist/cjs/scripts/moveToFinished-12.d.ts +5 -0
  45. package/dist/cjs/scripts/moveToFinished-12.js +538 -0
  46. package/dist/cjs/scripts/moveToFinished-12.js.map +1 -0
  47. package/dist/cjs/scripts/moveToWaitingChildren-4.d.ts +5 -0
  48. package/dist/cjs/{commands/moveToWaitingChildren-4.lua → scripts/moveToWaitingChildren-4.js} +11 -14
  49. package/dist/cjs/scripts/moveToWaitingChildren-4.js.map +1 -0
  50. package/dist/cjs/scripts/obliterate-2.d.ts +5 -0
  51. package/dist/cjs/scripts/obliterate-2.js +241 -0
  52. package/dist/cjs/scripts/obliterate-2.js.map +1 -0
  53. package/dist/cjs/scripts/pause-4.d.ts +5 -0
  54. package/dist/{esm/commands/pause-4.lua → cjs/scripts/pause-4.js} +11 -7
  55. package/dist/cjs/scripts/pause-4.js.map +1 -0
  56. package/dist/cjs/scripts/promote-6.d.ts +5 -0
  57. package/dist/cjs/{commands/promote-6.lua → scripts/promote-6.js} +22 -14
  58. package/dist/cjs/scripts/promote-6.js.map +1 -0
  59. package/dist/cjs/scripts/releaseLock-1.d.ts +5 -0
  60. package/dist/{esm/commands/releaseLock-1.lua → cjs/scripts/releaseLock-1.js} +11 -5
  61. package/dist/cjs/scripts/releaseLock-1.js.map +1 -0
  62. package/dist/cjs/scripts/removeJob-1.d.ts +5 -0
  63. package/dist/cjs/scripts/removeJob-1.js +206 -0
  64. package/dist/cjs/scripts/removeJob-1.js.map +1 -0
  65. package/dist/cjs/scripts/removeRepeatable-2.d.ts +5 -0
  66. package/dist/cjs/{commands/removeRepeatable-2.lua → scripts/removeRepeatable-2.js} +11 -7
  67. package/dist/cjs/scripts/removeRepeatable-2.js.map +1 -0
  68. package/dist/cjs/scripts/reprocessJob-4.d.ts +5 -0
  69. package/dist/{esm/commands/reprocessJob-4.lua → cjs/scripts/reprocessJob-4.js} +11 -5
  70. package/dist/cjs/scripts/reprocessJob-4.js.map +1 -0
  71. package/dist/cjs/scripts/retryJob-6.d.ts +5 -0
  72. package/dist/{esm/commands/retryJob-6.lua → cjs/scripts/retryJob-6.js} +22 -13
  73. package/dist/cjs/scripts/retryJob-6.js.map +1 -0
  74. package/dist/cjs/scripts/retryJobs-6.d.ts +5 -0
  75. package/dist/cjs/{commands/retryJobs-6.lua → scripts/retryJobs-6.js} +38 -15
  76. package/dist/cjs/scripts/retryJobs-6.js.map +1 -0
  77. package/dist/cjs/scripts/takeLock-1.d.ts +5 -0
  78. package/dist/cjs/{commands/takeLock-1.lua → scripts/takeLock-1.js} +11 -4
  79. package/dist/cjs/scripts/takeLock-1.js.map +1 -0
  80. package/dist/cjs/scripts/updateData-1.d.ts +5 -0
  81. package/dist/cjs/scripts/updateData-1.js +23 -0
  82. package/dist/cjs/scripts/updateData-1.js.map +1 -0
  83. package/dist/cjs/scripts/updateProgress-2.d.ts +5 -0
  84. package/dist/{esm/commands/updateProgress-2.lua → cjs/scripts/updateProgress-2.js} +11 -5
  85. package/dist/cjs/scripts/updateProgress-2.js.map +1 -0
  86. package/dist/esm/classes/job.d.ts +1 -1
  87. package/dist/esm/classes/redis-connection.d.ts +6 -2
  88. package/dist/esm/classes/redis-connection.js +11 -5
  89. package/dist/esm/classes/redis-connection.js.map +1 -1
  90. package/dist/esm/scripts/addJob-8.d.ts +5 -0
  91. package/dist/{cjs/commands/addJob-8.lua → esm/scripts/addJob-8.js} +80 -31
  92. package/dist/esm/scripts/addJob-8.js.map +1 -0
  93. package/dist/esm/scripts/changeDelay-4.d.ts +5 -0
  94. package/dist/esm/{commands/changeDelay-4.lua → scripts/changeDelay-4.js} +8 -11
  95. package/dist/esm/scripts/changeDelay-4.js.map +1 -0
  96. package/dist/esm/scripts/cleanJobsInSet-2.d.ts +5 -0
  97. package/dist/esm/scripts/cleanJobsInSet-2.js +261 -0
  98. package/dist/esm/scripts/cleanJobsInSet-2.js.map +1 -0
  99. package/dist/esm/scripts/drain-4.d.ts +5 -0
  100. package/dist/esm/{commands/includes/removeParentDependencyKey.lua → scripts/drain-4.js} +107 -10
  101. package/dist/esm/scripts/drain-4.js.map +1 -0
  102. package/dist/esm/scripts/extendLock-2.d.ts +5 -0
  103. package/dist/{cjs/commands/extendLock-2.lua → esm/scripts/extendLock-2.js} +8 -4
  104. package/dist/esm/scripts/extendLock-2.js.map +1 -0
  105. package/dist/esm/scripts/getState-7.d.ts +5 -0
  106. package/dist/{cjs/commands/getState-7.lua → esm/scripts/getState-7.js} +19 -12
  107. package/dist/esm/scripts/getState-7.js.map +1 -0
  108. package/dist/esm/scripts/getStateV2-7.d.ts +5 -0
  109. package/dist/esm/{commands/getStateV2-7.lua → scripts/getStateV2-7.js} +8 -10
  110. package/dist/esm/scripts/getStateV2-7.js.map +1 -0
  111. package/dist/esm/scripts/index.d.ts +26 -0
  112. package/dist/esm/scripts/index.js +27 -0
  113. package/dist/esm/scripts/index.js.map +1 -0
  114. package/dist/esm/scripts/isFinished-3.d.ts +5 -0
  115. package/dist/esm/{commands/isFinished-3.lua → scripts/isFinished-3.js} +8 -10
  116. package/dist/esm/scripts/isFinished-3.js.map +1 -0
  117. package/dist/esm/scripts/isJobInList-1.d.ts +5 -0
  118. package/dist/esm/scripts/isJobInList-1.js +29 -0
  119. package/dist/esm/scripts/isJobInList-1.js.map +1 -0
  120. package/dist/esm/scripts/moveStalledJobsToWait-8.d.ts +5 -0
  121. package/dist/esm/scripts/moveStalledJobsToWait-8.js +288 -0
  122. package/dist/esm/scripts/moveStalledJobsToWait-8.js.map +1 -0
  123. package/dist/esm/scripts/moveToActive-9.d.ts +5 -0
  124. package/dist/esm/scripts/moveToActive-9.js +204 -0
  125. package/dist/esm/scripts/moveToActive-9.js.map +1 -0
  126. package/dist/esm/scripts/moveToDelayed-5.d.ts +5 -0
  127. package/dist/esm/{commands/moveToDelayed-5.lua → scripts/moveToDelayed-5.js} +8 -13
  128. package/dist/esm/scripts/moveToDelayed-5.js.map +1 -0
  129. package/dist/esm/scripts/moveToFinished-12.d.ts +5 -0
  130. package/dist/esm/scripts/moveToFinished-12.js +535 -0
  131. package/dist/esm/scripts/moveToFinished-12.js.map +1 -0
  132. package/dist/esm/scripts/moveToWaitingChildren-4.d.ts +5 -0
  133. package/dist/esm/{commands/moveToWaitingChildren-4.lua → scripts/moveToWaitingChildren-4.js} +8 -14
  134. package/dist/esm/scripts/moveToWaitingChildren-4.js.map +1 -0
  135. package/dist/esm/scripts/obliterate-2.d.ts +5 -0
  136. package/dist/esm/scripts/obliterate-2.js +238 -0
  137. package/dist/esm/scripts/obliterate-2.js.map +1 -0
  138. package/dist/esm/scripts/pause-4.d.ts +5 -0
  139. package/dist/{cjs/commands/pause-4.lua → esm/scripts/pause-4.js} +8 -7
  140. package/dist/esm/scripts/pause-4.js.map +1 -0
  141. package/dist/esm/scripts/promote-6.d.ts +5 -0
  142. package/dist/esm/{commands/promote-6.lua → scripts/promote-6.js} +19 -14
  143. package/dist/esm/scripts/promote-6.js.map +1 -0
  144. package/dist/esm/scripts/releaseLock-1.d.ts +5 -0
  145. package/dist/{cjs/commands/releaseLock-1.lua → esm/scripts/releaseLock-1.js} +8 -5
  146. package/dist/esm/scripts/releaseLock-1.js.map +1 -0
  147. package/dist/esm/scripts/removeJob-1.d.ts +5 -0
  148. package/dist/esm/scripts/removeJob-1.js +203 -0
  149. package/dist/esm/scripts/removeJob-1.js.map +1 -0
  150. package/dist/esm/scripts/removeRepeatable-2.d.ts +5 -0
  151. package/dist/esm/{commands/removeRepeatable-2.lua → scripts/removeRepeatable-2.js} +8 -7
  152. package/dist/esm/scripts/removeRepeatable-2.js.map +1 -0
  153. package/dist/esm/scripts/reprocessJob-4.d.ts +5 -0
  154. package/dist/{cjs/commands/reprocessJob-4.lua → esm/scripts/reprocessJob-4.js} +8 -5
  155. package/dist/esm/scripts/reprocessJob-4.js.map +1 -0
  156. package/dist/esm/scripts/retryJob-6.d.ts +5 -0
  157. package/dist/{cjs/commands/retryJob-6.lua → esm/scripts/retryJob-6.js} +19 -13
  158. package/dist/esm/scripts/retryJob-6.js.map +1 -0
  159. package/dist/esm/scripts/retryJobs-6.d.ts +5 -0
  160. package/dist/esm/{commands/retryJobs-6.lua → scripts/retryJobs-6.js} +35 -15
  161. package/dist/esm/scripts/retryJobs-6.js.map +1 -0
  162. package/dist/esm/scripts/takeLock-1.d.ts +5 -0
  163. package/dist/esm/{commands/takeLock-1.lua → scripts/takeLock-1.js} +8 -4
  164. package/dist/esm/scripts/takeLock-1.js.map +1 -0
  165. package/dist/esm/scripts/updateData-1.d.ts +5 -0
  166. package/dist/esm/{commands/updateData-1.lua → scripts/updateData-1.js} +8 -4
  167. package/dist/esm/scripts/updateData-1.js.map +1 -0
  168. package/dist/esm/scripts/updateProgress-2.d.ts +5 -0
  169. package/dist/{cjs/commands/updateProgress-2.lua → esm/scripts/updateProgress-2.js} +8 -5
  170. package/dist/esm/scripts/updateProgress-2.js.map +1 -0
  171. package/package.json +4 -2
  172. package/dist/cjs/commands/cleanJobsInSet-2.lua +0 -46
  173. package/dist/cjs/commands/drain-4.lua +0 -25
  174. package/dist/cjs/commands/includes/addJobWithPriority.lua +0 -16
  175. package/dist/cjs/commands/includes/batches.lua +0 -18
  176. package/dist/cjs/commands/includes/checkItemInList.lua +0 -12
  177. package/dist/cjs/commands/includes/checkStalledJobs.lua +0 -137
  178. package/dist/cjs/commands/includes/cleanList.lua +0 -50
  179. package/dist/cjs/commands/includes/cleanSet.lua +0 -50
  180. package/dist/cjs/commands/includes/collectMetrics.lua +0 -46
  181. package/dist/cjs/commands/includes/destructureJobKey.lua +0 -12
  182. package/dist/cjs/commands/includes/getNextDelayedTimestamp.lua +0 -13
  183. package/dist/cjs/commands/includes/getTargetQueueList.lua +0 -12
  184. package/dist/cjs/commands/includes/getTimestamp.lua +0 -19
  185. package/dist/cjs/commands/includes/getZSetItems.lua +0 -7
  186. package/dist/cjs/commands/includes/isLocked.lua +0 -31
  187. package/dist/cjs/commands/includes/moveJobFromWaitToActive.lua +0 -84
  188. package/dist/cjs/commands/includes/moveParentFromWaitingChildrenToFailed.lua +0 -25
  189. package/dist/cjs/commands/includes/promoteDelayedJobs.lua +0 -49
  190. package/dist/cjs/commands/includes/removeJob.lua +0 -13
  191. package/dist/cjs/commands/includes/removeJobFromAnyState.lua +0 -26
  192. package/dist/cjs/commands/includes/removeJobs.lua +0 -38
  193. package/dist/cjs/commands/includes/removeJobsByMaxAge.lua +0 -15
  194. package/dist/cjs/commands/includes/removeJobsByMaxCount.lua +0 -15
  195. package/dist/cjs/commands/includes/trimEvents.lua +0 -12
  196. package/dist/cjs/commands/includes/updateParentDepsIfNeeded.lua +0 -28
  197. package/dist/cjs/commands/isJobInList-1.lua +0 -16
  198. package/dist/cjs/commands/moveStalledJobsToWait-8.lua +0 -24
  199. package/dist/cjs/commands/moveToActive-9.lua +0 -67
  200. package/dist/cjs/commands/moveToFinished-12.lua +0 -201
  201. package/dist/cjs/commands/obliterate-2.lua +0 -94
  202. package/dist/cjs/commands/removeJob-1.lua +0 -72
  203. package/dist/cjs/commands/updateData-1.lua +0 -16
  204. package/dist/esm/commands/cleanJobsInSet-2.lua +0 -46
  205. package/dist/esm/commands/drain-4.lua +0 -25
  206. package/dist/esm/commands/includes/addJobWithPriority.lua +0 -16
  207. package/dist/esm/commands/includes/batches.lua +0 -18
  208. package/dist/esm/commands/includes/checkItemInList.lua +0 -12
  209. package/dist/esm/commands/includes/checkStalledJobs.lua +0 -137
  210. package/dist/esm/commands/includes/cleanList.lua +0 -50
  211. package/dist/esm/commands/includes/cleanSet.lua +0 -50
  212. package/dist/esm/commands/includes/collectMetrics.lua +0 -46
  213. package/dist/esm/commands/includes/destructureJobKey.lua +0 -12
  214. package/dist/esm/commands/includes/getNextDelayedTimestamp.lua +0 -13
  215. package/dist/esm/commands/includes/getTargetQueueList.lua +0 -12
  216. package/dist/esm/commands/includes/getTimestamp.lua +0 -19
  217. package/dist/esm/commands/includes/getZSetItems.lua +0 -7
  218. package/dist/esm/commands/includes/isLocked.lua +0 -31
  219. package/dist/esm/commands/includes/moveJobFromWaitToActive.lua +0 -84
  220. package/dist/esm/commands/includes/moveParentFromWaitingChildrenToFailed.lua +0 -25
  221. package/dist/esm/commands/includes/promoteDelayedJobs.lua +0 -49
  222. package/dist/esm/commands/includes/removeJob.lua +0 -13
  223. package/dist/esm/commands/includes/removeJobFromAnyState.lua +0 -26
  224. package/dist/esm/commands/includes/removeJobs.lua +0 -38
  225. package/dist/esm/commands/includes/removeJobsByMaxAge.lua +0 -15
  226. package/dist/esm/commands/includes/removeJobsByMaxCount.lua +0 -15
  227. package/dist/esm/commands/includes/trimEvents.lua +0 -12
  228. package/dist/esm/commands/includes/updateParentDepsIfNeeded.lua +0 -28
  229. package/dist/esm/commands/isJobInList-1.lua +0 -16
  230. package/dist/esm/commands/moveStalledJobsToWait-8.lua +0 -24
  231. package/dist/esm/commands/moveToActive-9.lua +0 -67
  232. package/dist/esm/commands/moveToFinished-12.lua +0 -201
  233. package/dist/esm/commands/obliterate-2.lua +0 -94
  234. package/dist/esm/commands/removeJob-1.lua +0 -72
@@ -0,0 +1,535 @@
1
+ const content = `--[[
2
+ Move job from active to a finished status (completed o failed)
3
+ A job can only be moved to completed if it was active.
4
+ The job must be locked before it can be moved to a finished status,
5
+ and the lock must be released in this script.
6
+ Input:
7
+ KEYS[1] wait key
8
+ KEYS[2] active key
9
+ KEYS[3] priority key
10
+ KEYS[4] event stream key
11
+ KEYS[5] stalled key
12
+ -- Rate limiting
13
+ KEYS[6] rate limiter key
14
+ KEYS[7] delayed key
15
+ KEYS[8] paused key
16
+ KEYS[9] completed/failed key
17
+ KEYS[10] jobId key
18
+ KEYS[11] meta key
19
+ KEYS[12] metrics key
20
+ ARGV[1] jobId
21
+ ARGV[2] timestamp
22
+ ARGV[3] msg property returnvalue / failedReason
23
+ ARGV[4] return value / failed reason
24
+ ARGV[5] target (completed/failed)
25
+ ARGV[6] event data (? maybe just send jobid).
26
+ ARGV[7] fetch next?
27
+ ARGV[8] keys prefix
28
+ ARGV[9] opts
29
+ opts - token - lock token
30
+ opts - keepJobs
31
+ opts - lockDuration - lock duration in milliseconds
32
+ opts - parent - parent data
33
+ opts - parentKey
34
+ opts - attempts max attempts
35
+ opts - attemptsMade
36
+ opts - maxMetricsSize
37
+ opts - fpof - fail parent on fail
38
+ Output:
39
+ 0 OK
40
+ -1 Missing key.
41
+ -2 Missing lock.
42
+ -3 Job not in active set
43
+ -4 Job has pending dependencies
44
+ Events:
45
+ 'completed/failed'
46
+ ]]
47
+ local rcall = redis.call
48
+ --- Includes
49
+ --[[
50
+ Functions to collect metrics based on a current and previous count of jobs.
51
+ Granualarity is fixed at 1 minute.
52
+ ]]
53
+ --[[
54
+ Function to loop in batches.
55
+ Just a bit of warning, some commands as ZREM
56
+ could receive a maximum of 7000 parameters per call.
57
+ ]]
58
+ local function batches(n, batchSize)
59
+ local i = 0
60
+ return function()
61
+ local from = i * batchSize + 1
62
+ i = i + 1
63
+ if (from <= n) then
64
+ local to = math.min(from + batchSize - 1, n)
65
+ return from, to
66
+ end
67
+ end
68
+ end
69
+ local function collectMetrics(metaKey, dataPointsList, maxDataPoints,
70
+ timestamp)
71
+ -- Increment current count
72
+ local count = rcall("HINCRBY", metaKey, "count", 1) - 1
73
+ -- Compute how many data points we need to add to the list, N.
74
+ local prevTS = rcall("HGET", metaKey, "prevTS")
75
+ if not prevTS then
76
+ -- If prevTS is nil, set it to the current timestamp
77
+ rcall("HSET", metaKey, "prevTS", timestamp, "prevCount", 0)
78
+ return
79
+ end
80
+ local N = math.floor((timestamp - prevTS) / 60000)
81
+ if N > 0 then
82
+ local delta = count - rcall("HGET", metaKey, "prevCount")
83
+ -- If N > 1, add N-1 zeros to the list
84
+ if N > 1 then
85
+ local points = {}
86
+ points[1] = delta
87
+ for i = 2, N do
88
+ points[i] = 0
89
+ end
90
+ for from, to in batches(#points, 7000) do
91
+ rcall("LPUSH", dataPointsList, unpack(points, from, to))
92
+ end
93
+ else
94
+ -- LPUSH delta to the list
95
+ rcall("LPUSH", dataPointsList, delta)
96
+ end
97
+ -- LTRIM to keep list to its max size
98
+ rcall("LTRIM", dataPointsList, 0, maxDataPoints - 1)
99
+ -- update prev count with current count
100
+ rcall("HSET", metaKey, "prevCount", count, "prevTS", timestamp)
101
+ end
102
+ end
103
+ --[[
104
+ Function to return the next delayed job timestamp.
105
+ ]]
106
+ local function getNextDelayedTimestamp(delayedKey)
107
+ local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
108
+ if #result then
109
+ local nextTimestamp = tonumber(result[2])
110
+ if (nextTimestamp ~= nil) then
111
+ nextTimestamp = nextTimestamp / 0x1000
112
+ end
113
+ return nextTimestamp
114
+ end
115
+ end
116
+ --[[
117
+ Function to move job from wait state to active.
118
+ Input:
119
+ keys[1] wait key
120
+ keys[2] active key
121
+ keys[3] priority key
122
+ keys[4] stream events key
123
+ keys[5] stalled key
124
+ -- Rate limiting
125
+ keys[6] rate limiter key
126
+ keys[7] delayed key
127
+ opts - token - lock token
128
+ opts - lockDuration
129
+ opts - limiter
130
+ ]]
131
+ local function moveJobFromWaitToActive(keys, keyPrefix, jobId, processedOn, opts)
132
+ -- Check if we need to perform rate limiting.
133
+ local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max'])
134
+ if(maxJobs) then
135
+ local rateLimiterKey = keys[6];
136
+ local groupKey
137
+ local groupKeyOpt = opts['limiter'] and opts['limiter']['groupKey'] or ""
138
+ if groupKeyOpt ~= "" then
139
+ groupKey = string.match(jobId, "[^:]+$")
140
+ if groupKey ~= jobId then
141
+ rateLimiterKey = rateLimiterKey .. ":" .. groupKey
142
+ end
143
+ end
144
+ local jobCounter
145
+ if groupKey ~= nil then
146
+ if rateLimiterKey ~= keys[6] then
147
+ jobCounter = tonumber(rcall("INCR", rateLimiterKey))
148
+ end
149
+ else
150
+ jobCounter = tonumber(rcall("INCR", rateLimiterKey))
151
+ end
152
+ local limiterDuration = opts['limiter'] and opts['limiter']['duration']
153
+ -- check if rate limit hit
154
+ if jobCounter ~= nil and jobCounter > maxJobs then
155
+ local exceedingJobs = jobCounter - maxJobs
156
+ local expireTime = tonumber(rcall("PTTL", rateLimiterKey))
157
+ local delay = expireTime + ((exceedingJobs - 1) * limiterDuration) / maxJobs;
158
+ local timestamp = delay + tonumber(processedOn)
159
+ -- put job into delayed queue
160
+ rcall("ZADD", keys[7], timestamp * 0x1000 + bit.band(jobCounter, 0xfff), jobId);
161
+ rcall("XADD", keys[4], "*", "event", "delayed", "jobId", jobId, "delay", timestamp);
162
+ -- remove from active queue
163
+ rcall("LREM", keys[2], 1, jobId)
164
+ -- Return when we can process more jobs
165
+ return expireTime
166
+ else
167
+ if jobCounter == 1 then
168
+ rcall("PEXPIRE", rateLimiterKey, limiterDuration)
169
+ end
170
+ end
171
+ end
172
+ local jobKey = keyPrefix .. jobId
173
+ local lockKey = jobKey .. ':lock'
174
+ -- get a lock
175
+ if opts['token'] ~= "0" then
176
+ rcall("SET", lockKey, opts['token'], "PX", opts['lockDuration'])
177
+ end
178
+ rcall("ZREM", keys[3], jobId) -- remove from priority
179
+ rcall("XADD", keys[4], "*", "event", "active", "jobId", jobId, "prev", "waiting")
180
+ rcall("HSET", jobKey, "processedOn", processedOn)
181
+ rcall("HINCRBY", jobKey, "attemptsMade", 1)
182
+ return {rcall("HGETALL", jobKey), jobId} -- get job data
183
+ end
184
+ --[[
185
+ Function to recursively move from waitingChildren to failed.
186
+ ]]
187
+ local function moveParentFromWaitingChildrenToFailed( parentQueueKey, parentKey, parentId, jobId, timestamp)
188
+ if rcall("ZREM", parentQueueKey .. ":waiting-children", parentId) == 1 then
189
+ rcall("ZADD", parentQueueKey .. ":failed", timestamp, parentId)
190
+ rcall("HMSET", parentKey, "failedReason", "child " .. jobId .. " failed", "finishedOn", timestamp)
191
+ local rawParentData = rcall("HGET", parentKey, "parent")
192
+ if rawParentData ~= false then
193
+ local parentData = cjson.decode(rawParentData)
194
+ if parentData['fpof'] then
195
+ moveParentFromWaitingChildrenToFailed(
196
+ parentData['queueKey'],
197
+ parentData['queueKey'] .. ':' .. parentData['id'],
198
+ parentData['id'],
199
+ parentKey,
200
+ timestamp
201
+ )
202
+ end
203
+ end
204
+ end
205
+ end
206
+ --[[
207
+ Updates the delay set, by moving delayed jobs that should
208
+ be processed now to "wait".
209
+ Events:
210
+ 'waiting'
211
+ ]]
212
+ local rcall = redis.call
213
+ -- Includes
214
+ --[[
215
+ Function to add job considering priority.
216
+ ]]
217
+ local function addJobWithPriority(priorityKey, priority, targetKey, jobId)
218
+ rcall("ZADD", priorityKey, priority, jobId)
219
+ local count = rcall("ZCOUNT", priorityKey, 0, priority)
220
+ local len = rcall("LLEN", targetKey)
221
+ local id = rcall("LINDEX", targetKey, len - (count - 1))
222
+ if id then
223
+ rcall("LINSERT", targetKey, "BEFORE", id, jobId)
224
+ else
225
+ rcall("RPUSH", targetKey, jobId)
226
+ end
227
+ end
228
+ --[[
229
+ Function to check for the meta.paused key to decide if we are paused or not
230
+ (since an empty list and !EXISTS are not really the same).
231
+ ]]
232
+ local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
233
+ if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
234
+ return waitKey
235
+ else
236
+ return pausedKey
237
+ end
238
+ end
239
+ -- Try to get as much as 1000 jobs at once, and returns the nextTimestamp if
240
+ -- there are more delayed jobs to process.
241
+ local function promoteDelayedJobs(delayedKey, waitKey, priorityKey, pausedKey,
242
+ metaKey, eventStreamKey, prefix, timestamp)
243
+ local jobs = rcall("ZRANGEBYSCORE", delayedKey, 0, (timestamp + 1) * 0x1000, "LIMIT", 0, 1000)
244
+ if (#jobs > 0) then
245
+ rcall("ZREM", delayedKey, unpack(jobs))
246
+ -- check if we need to use push in paused instead of waiting
247
+ local target = getTargetQueueList(metaKey, waitKey, pausedKey)
248
+ for _, jobId in ipairs(jobs) do
249
+ local priority =
250
+ tonumber(rcall("HGET", prefix .. jobId, "priority")) or 0
251
+ if priority == 0 then
252
+ -- LIFO or FIFO
253
+ rcall("LPUSH", target, jobId)
254
+ else
255
+ addJobWithPriority(priorityKey, priority, target, jobId)
256
+ end
257
+ -- Emit waiting event
258
+ rcall("XADD", eventStreamKey, "*", "event", "waiting", "jobId",
259
+ jobId, "prev", "delayed")
260
+ rcall("HSET", prefix .. jobId, "delay", 0)
261
+ end
262
+ end
263
+ local nextTimestamp = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")[2]
264
+ if (nextTimestamp ~= nil) then
265
+ nextTimestamp = nextTimestamp / 0x1000
266
+ end
267
+ return nextTimestamp
268
+ end
269
+ --[[
270
+ Functions to remove jobs by max age.
271
+ ]]
272
+ -- Includes
273
+ --[[
274
+ Function to remove job.
275
+ ]]
276
+ -- Includes
277
+ --[[
278
+ Check if this job has a parent. If so we will just remove it from
279
+ the parent child list, but if it is the last child we should move the parent to "wait/paused"
280
+ which requires code from "moveToFinished"
281
+ ]]
282
+ --[[
283
+ Functions to destructure job key.
284
+ Just a bit of warning, these functions may be a bit slow and affect performance significantly.
285
+ ]]
286
+ local getJobIdFromKey = function (jobKey)
287
+ return string.match(jobKey, ".*:(.*)")
288
+ end
289
+ local getJobKeyPrefix = function (jobKey, jobId)
290
+ return string.sub(jobKey, 0, #jobKey - #jobId)
291
+ end
292
+ local function moveParentToWait(parentPrefix, parentId, emitEvent)
293
+ local parentTarget = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "wait", parentPrefix .. "paused")
294
+ rcall("RPUSH", parentTarget, parentId)
295
+ if emitEvent then
296
+ local parentEventStream = parentPrefix .. "events"
297
+ rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
298
+ end
299
+ end
300
+ local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey)
301
+ if parentKey then
302
+ local parentProcessedKey = parentKey .. ":processed"
303
+ rcall("HDEL", parentProcessedKey, jobKey)
304
+ local parentDependenciesKey = parentKey .. ":dependencies"
305
+ local result = rcall("SREM", parentDependenciesKey, jobKey)
306
+ if result > 0 then
307
+ local pendingDependencies = rcall("SCARD", parentDependenciesKey)
308
+ if pendingDependencies == 0 then
309
+ local parentId = getJobIdFromKey(parentKey)
310
+ local parentPrefix = getJobKeyPrefix(parentKey, parentId)
311
+ local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
312
+ if numRemovedElements == 1 then
313
+ if hard then
314
+ if parentPrefix == baseKey then
315
+ removeParentDependencyKey(parentKey, hard, nil, baseKey)
316
+ rcall("DEL", parentKey, parentKey .. ':logs',
317
+ parentKey .. ':dependencies', parentKey .. ':processed')
318
+ else
319
+ moveParentToWait(parentPrefix, parentId)
320
+ end
321
+ else
322
+ moveParentToWait(parentPrefix, parentId, true)
323
+ end
324
+ end
325
+ end
326
+ end
327
+ else
328
+ local missedParentKey = rcall("HGET", jobKey, "parentKey")
329
+ if( (type(missedParentKey) == "string") and missedParentKey ~= "" and (rcall("EXISTS", missedParentKey) == 1)) then
330
+ local parentProcessedKey = missedParentKey .. ":processed"
331
+ rcall("HDEL", parentProcessedKey, jobKey)
332
+ local parentDependenciesKey = missedParentKey .. ":dependencies"
333
+ local result = rcall("SREM", parentDependenciesKey, jobKey)
334
+ if result > 0 then
335
+ local pendingDependencies = rcall("SCARD", parentDependenciesKey)
336
+ if pendingDependencies == 0 then
337
+ local parentId = getJobIdFromKey(missedParentKey)
338
+ local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
339
+ local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
340
+ if numRemovedElements == 1 then
341
+ if hard then
342
+ if parentPrefix == baseKey then
343
+ removeParentDependencyKey(missedParentKey, hard, nil, baseKey)
344
+ rcall("DEL", missedParentKey, missedParentKey .. ':logs',
345
+ missedParentKey .. ':dependencies', missedParentKey .. ':processed')
346
+ else
347
+ moveParentToWait(parentPrefix, parentId)
348
+ end
349
+ else
350
+ moveParentToWait(parentPrefix, parentId, true)
351
+ end
352
+ end
353
+ end
354
+ end
355
+ end
356
+ end
357
+ end
358
+ local function removeJob(jobId, hard, baseKey)
359
+ local jobKey = baseKey .. jobId
360
+ removeParentDependencyKey(jobKey, hard, nil, baseKey)
361
+ rcall("DEL", jobKey, jobKey .. ':logs',
362
+ jobKey .. ':dependencies', jobKey .. ':processed')
363
+ end
364
+ local function removeJobsByMaxAge(timestamp, maxAge, targetSet, prefix)
365
+ local start = timestamp - maxAge * 1000
366
+ local jobIds = rcall("ZREVRANGEBYSCORE", targetSet, start, "-inf")
367
+ for i, jobId in ipairs(jobIds) do
368
+ removeJob(jobId, false, prefix)
369
+ end
370
+ rcall("ZREMRANGEBYSCORE", targetSet, "-inf", start)
371
+ end
372
+ --[[
373
+ Functions to remove jobs by max count.
374
+ ]]
375
+ -- Includes
376
+ local function removeJobsByMaxCount(maxCount, targetSet, prefix)
377
+ local start = maxCount
378
+ local jobIds = rcall("ZREVRANGE", targetSet, start, -1)
379
+ for i, jobId in ipairs(jobIds) do
380
+ removeJob(jobId, false, prefix)
381
+ end
382
+ rcall("ZREMRANGEBYRANK", targetSet, 0, -(maxCount + 1))
383
+ end
384
+ --[[
385
+ Function to trim events, default 10000.
386
+ ]]
387
+ local function trimEvents(metaKey, eventStreamKey)
388
+ local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
389
+ if maxEvents ~= false then
390
+ rcall("XTRIM", eventStreamKey, "MAXLEN", "~", maxEvents)
391
+ else
392
+ rcall("XTRIM", eventStreamKey, "MAXLEN", "~", 10000)
393
+ end
394
+ end
395
+ --[[
396
+ Validate and move or add dependencies to parent.
397
+ ]]
398
+ -- Includes
399
+ local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
400
+ parentId, jobIdKey, returnvalue )
401
+ local processedSet = parentKey .. ":processed"
402
+ rcall("HSET", processedSet, jobIdKey, returnvalue)
403
+ local activeParent = rcall("ZSCORE", parentQueueKey .. ":waiting-children", parentId)
404
+ if rcall("SCARD", parentDependenciesKey) == 0 and activeParent then
405
+ rcall("ZREM", parentQueueKey .. ":waiting-children", parentId)
406
+ local parentTarget = getTargetQueueList(parentQueueKey .. ":meta", parentQueueKey .. ":wait",
407
+ parentQueueKey .. ":paused")
408
+ local priority = tonumber(rcall("HGET", parentKey, "priority"))
409
+ -- Standard or priority add
410
+ if priority == 0 then
411
+ rcall("RPUSH", parentTarget, parentId)
412
+ else
413
+ addJobWithPriority(parentQueueKey .. ":priority", priority, parentTarget, parentId)
414
+ end
415
+ rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
416
+ end
417
+ end
418
+ local jobIdKey = KEYS[10]
419
+ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
420
+ local opts = cmsgpack.unpack(ARGV[9])
421
+ local token = opts['token']
422
+ local parentId = opts['parent'] and opts['parent']['id'] or ""
423
+ local parentQueueKey = opts['parent'] and opts['parent']['queue'] or ""
424
+ local parentKey = opts['parentKey'] or ""
425
+ local attempts = opts['attempts']
426
+ local attemptsMade = opts['attemptsMade']
427
+ local maxMetricsSize = opts['maxMetricsSize']
428
+ local maxCount = opts['keepJobs']['count']
429
+ local maxAge = opts['keepJobs']['age']
430
+ if token ~= "0" then
431
+ local lockKey = jobIdKey .. ':lock'
432
+ if rcall("GET", lockKey) == token then
433
+ rcall("DEL", lockKey)
434
+ rcall("SREM", KEYS[5], ARGV[1])
435
+ else
436
+ return -2
437
+ end
438
+ end
439
+ if rcall("SCARD", jobIdKey .. ":dependencies") ~= 0 then -- // Make sure it does not have pending dependencies
440
+ return -4
441
+ end
442
+ local jobId = ARGV[1]
443
+ local timestamp = ARGV[2]
444
+ -- Remove from active list (if not active we shall return error)
445
+ local numRemovedElements = rcall("LREM", KEYS[2], -1, jobId)
446
+ if (numRemovedElements < 1) then return -3 end
447
+ -- Trim events before emiting them to avoid trimming events emitted in this script
448
+ trimEvents(KEYS[11], KEYS[4])
449
+ -- If job has a parent we need to
450
+ -- 1) remove this job id from parents dependencies
451
+ -- 2) move the job Id to parent "processed" set
452
+ -- 3) push the results into parent "results" list
453
+ -- 4) if parent's dependencies is empty, then move parent to "wait/paused". Note it may be a different queue!.
454
+ if parentId == "" and parentKey ~= "" then
455
+ parentId = getJobIdFromKey(parentKey)
456
+ parentQueueKey = getJobKeyPrefix(parentKey, ":" .. parentId)
457
+ end
458
+ if parentId ~= "" then
459
+ if ARGV[5] == "completed" then
460
+ local dependenciesSet = parentKey .. ":dependencies"
461
+ if rcall("SREM", dependenciesSet, jobIdKey) == 1 then
462
+ updateParentDepsIfNeeded(parentKey, parentQueueKey, dependenciesSet,
463
+ parentId, jobIdKey, ARGV[4])
464
+ end
465
+ elseif opts['fpof'] then
466
+ moveParentFromWaitingChildrenToFailed(parentQueueKey, parentKey, parentId, jobIdKey, timestamp)
467
+ end
468
+ end
469
+ -- Remove job?
470
+ if maxCount ~= 0 then
471
+ local targetSet = KEYS[9]
472
+ -- Add to complete/failed set
473
+ rcall("ZADD", targetSet, timestamp, jobId)
474
+ rcall("HMSET", jobIdKey, ARGV[3], ARGV[4], "finishedOn", timestamp)
475
+ -- "returnvalue" / "failedReason" and "finishedOn"
476
+ -- Remove old jobs?
477
+ local prefix = ARGV[8]
478
+ if maxAge ~= nil then
479
+ removeJobsByMaxAge(timestamp, maxAge, targetSet, prefix)
480
+ end
481
+ if maxCount ~= nil and maxCount > 0 then
482
+ removeJobsByMaxCount(maxCount, targetSet, prefix)
483
+ end
484
+ else
485
+ rcall("DEL", jobIdKey, jobIdKey .. ':logs', jobIdKey .. ':processed')
486
+ end
487
+ rcall("XADD", KEYS[4], "*", "event", ARGV[5], "jobId", jobId, ARGV[3],
488
+ ARGV[4])
489
+ if ARGV[5] == "failed" then
490
+ if tonumber(attemptsMade) >= tonumber(attempts) then
491
+ rcall("XADD", KEYS[4], "*", "event", "retries-exhausted", "jobId",
492
+ jobId, "attemptsMade", attemptsMade)
493
+ end
494
+ end
495
+ -- Collect metrics
496
+ if maxMetricsSize ~= "" then
497
+ collectMetrics(KEYS[12], KEYS[12]..':data', maxMetricsSize, timestamp)
498
+ end
499
+ -- Try to get next job to avoid an extra roundtrip if the queue is not closing,
500
+ -- and not rate limited.
501
+ if (ARGV[7] == "1") then
502
+ -- Check if there are delayed jobs that can be promoted
503
+ promoteDelayedJobs(KEYS[7], KEYS[1], KEYS[3], KEYS[8], KEYS[11], KEYS[4], ARGV[8], timestamp)
504
+ jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2])
505
+ if jobId == "0" then
506
+ rcall("LREM", KEYS[2], 1, 0)
507
+ elseif jobId then
508
+ return moveJobFromWaitToActive(KEYS, ARGV[8], jobId, timestamp, opts)
509
+ end
510
+ -- Return the timestamp for the next delayed job if any.
511
+ local nextTimestamp = getNextDelayedTimestamp(KEYS[7])
512
+ if (nextTimestamp ~= nil) then
513
+ -- The result is guaranteed to be positive, since the
514
+ -- ZRANGEBYSCORE command would have return a job otherwise.
515
+ return nextTimestamp - timestamp
516
+ end
517
+ end
518
+ local waitLen = rcall("LLEN", KEYS[1])
519
+ if waitLen == 0 then
520
+ local activeLen = rcall("LLEN", KEYS[2])
521
+ if activeLen == 0 then
522
+ rcall("XADD", KEYS[4], "*", "event", "drained")
523
+ end
524
+ end
525
+ return 0
526
+ else
527
+ return -1
528
+ end
529
+ `;
530
+ export const moveToFinished = {
531
+ name: 'moveToFinished',
532
+ content,
533
+ keys: 12,
534
+ };
535
+ //# sourceMappingURL=moveToFinished-12.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moveToFinished-12.js","sourceRoot":"","sources":["../../../src/scripts/moveToFinished-12.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAghBf,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,EAAE;CACT,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const moveToWaitingChildren: {
2
+ name: string;
3
+ content: string;
4
+ keys: number;
5
+ };
@@ -1,17 +1,14 @@
1
- --[[
1
+ const content = `--[[
2
2
  Moves job from active to waiting children set.
3
-
4
3
  Input:
5
4
  KEYS[1] lock key
6
5
  KEYS[2] active key
7
6
  KEYS[3] waitChildrenKey key
8
7
  KEYS[4] job key
9
-
10
8
  ARGV[1] token
11
9
  ARGV[2] child key
12
10
  ARGV[3] timestamp
13
11
  ARGV[4] the id of the job
14
-
15
12
  Output:
16
13
  0 - OK
17
14
  1 - There are not pending dependencies.
@@ -20,7 +17,6 @@
20
17
  -3 - Job not in active set
21
18
  ]]
22
19
  local rcall = redis.call
23
-
24
20
  local function moveToWaitingChildren (activeKey, waitingChildrenKey, jobId, timestamp, lockKey, token)
25
21
  if token ~= "0" then
26
22
  if rcall("GET", lockKey) == token then
@@ -29,34 +25,32 @@ local function moveToWaitingChildren (activeKey, waitingChildrenKey, jobId, time
29
25
  return -2
30
26
  end
31
27
  end
32
-
33
28
  local score = tonumber(timestamp)
34
-
35
29
  local numRemovedElements = rcall("LREM", activeKey, -1, jobId)
36
-
37
30
  if(numRemovedElements < 1) then
38
31
  return -3
39
32
  end
40
-
41
33
  rcall("ZADD", waitingChildrenKey, score, jobId)
42
-
43
34
  return 0
44
35
  end
45
-
46
36
  if rcall("EXISTS", KEYS[4]) == 1 then
47
37
  if ARGV[2] ~= "" then
48
38
  if rcall("SISMEMBER", KEYS[4] .. ":dependencies", ARGV[2]) ~= 0 then
49
39
  return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3], KEYS[1], ARGV[1])
50
40
  end
51
-
52
41
  return 1
53
42
  else
54
43
  if rcall("SCARD", KEYS[4] .. ":dependencies") ~= 0 then
55
44
  return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3], KEYS[1], ARGV[1])
56
45
  end
57
-
58
46
  return 1
59
47
  end
60
48
  end
61
-
62
49
  return -1
50
+ `;
51
+ export const moveToWaitingChildren = {
52
+ name: 'moveToWaitingChildren',
53
+ content,
54
+ keys: 4,
55
+ };
56
+ //# sourceMappingURL=moveToWaitingChildren-4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moveToWaitingChildren-4.js","sourceRoot":"","sources":["../../../src/scripts/moveToWaitingChildren-4.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDf,CAAC;AACF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,uBAAuB;IAC7B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const obliterate: {
2
+ name: string;
3
+ content: string;
4
+ keys: number;
5
+ };