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,241 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.obliterate = void 0;
4
+ const content = `--[[
5
+ Completely obliterates a queue and all of its contents
6
+ Input:
7
+ KEYS[1] meta
8
+ KEYS[2] base
9
+ ARGV[1] count
10
+ ARGV[2] force
11
+ ]]
12
+ -- This command completely destroys a queue including all of its jobs, current or past
13
+ -- leaving no trace of its existence. Since this script needs to iterate to find all the job
14
+ -- keys, consider that this call may be slow for very large queues.
15
+ -- The queue needs to be "paused" or it will return an error
16
+ -- If the queue has currently active jobs then the script by default will return error,
17
+ -- however this behaviour can be overrided using the 'force' option.
18
+ local maxCount = tonumber(ARGV[1])
19
+ local baseKey = KEYS[2]
20
+ local rcall = redis.call
21
+ --[[
22
+ Functions to remove jobs.
23
+ ]]
24
+ -- Includes
25
+ --[[
26
+ Function to loop in batches.
27
+ Just a bit of warning, some commands as ZREM
28
+ could receive a maximum of 7000 parameters per call.
29
+ ]]
30
+ local function batches(n, batchSize)
31
+ local i = 0
32
+ return function()
33
+ local from = i * batchSize + 1
34
+ i = i + 1
35
+ if (from <= n) then
36
+ local to = math.min(from + batchSize - 1, n)
37
+ return from, to
38
+ end
39
+ end
40
+ end
41
+ local function getListItems(keyName, max)
42
+ return rcall('LRANGE', keyName, 0, max - 1)
43
+ end
44
+ --[[
45
+ Function to get ZSet items.
46
+ ]]
47
+ local function getZSetItems(keyName, max)
48
+ return rcall('ZRANGE', keyName, 0, max - 1)
49
+ end
50
+ --[[
51
+ Function to remove job.
52
+ ]]
53
+ -- Includes
54
+ --[[
55
+ Check if this job has a parent. If so we will just remove it from
56
+ the parent child list, but if it is the last child we should move the parent to "wait/paused"
57
+ which requires code from "moveToFinished"
58
+ ]]
59
+ --[[
60
+ Functions to destructure job key.
61
+ Just a bit of warning, these functions may be a bit slow and affect performance significantly.
62
+ ]]
63
+ local getJobIdFromKey = function (jobKey)
64
+ return string.match(jobKey, ".*:(.*)")
65
+ end
66
+ local getJobKeyPrefix = function (jobKey, jobId)
67
+ return string.sub(jobKey, 0, #jobKey - #jobId)
68
+ end
69
+ --[[
70
+ Function to check for the meta.paused key to decide if we are paused or not
71
+ (since an empty list and !EXISTS are not really the same).
72
+ ]]
73
+ local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
74
+ if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
75
+ return waitKey
76
+ else
77
+ return pausedKey
78
+ end
79
+ end
80
+ local function moveParentToWait(parentPrefix, parentId, emitEvent)
81
+ local parentTarget = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "wait", parentPrefix .. "paused")
82
+ rcall("RPUSH", parentTarget, parentId)
83
+ if emitEvent then
84
+ local parentEventStream = parentPrefix .. "events"
85
+ rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
86
+ end
87
+ end
88
+ local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey)
89
+ if parentKey then
90
+ local parentProcessedKey = parentKey .. ":processed"
91
+ rcall("HDEL", parentProcessedKey, jobKey)
92
+ local parentDependenciesKey = parentKey .. ":dependencies"
93
+ local result = rcall("SREM", parentDependenciesKey, jobKey)
94
+ if result > 0 then
95
+ local pendingDependencies = rcall("SCARD", parentDependenciesKey)
96
+ if pendingDependencies == 0 then
97
+ local parentId = getJobIdFromKey(parentKey)
98
+ local parentPrefix = getJobKeyPrefix(parentKey, parentId)
99
+ local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
100
+ if numRemovedElements == 1 then
101
+ if hard then
102
+ if parentPrefix == baseKey then
103
+ removeParentDependencyKey(parentKey, hard, nil, baseKey)
104
+ rcall("DEL", parentKey, parentKey .. ':logs',
105
+ parentKey .. ':dependencies', parentKey .. ':processed')
106
+ else
107
+ moveParentToWait(parentPrefix, parentId)
108
+ end
109
+ else
110
+ moveParentToWait(parentPrefix, parentId, true)
111
+ end
112
+ end
113
+ end
114
+ end
115
+ else
116
+ local missedParentKey = rcall("HGET", jobKey, "parentKey")
117
+ if( (type(missedParentKey) == "string") and missedParentKey ~= "" and (rcall("EXISTS", missedParentKey) == 1)) then
118
+ local parentProcessedKey = missedParentKey .. ":processed"
119
+ rcall("HDEL", parentProcessedKey, jobKey)
120
+ local parentDependenciesKey = missedParentKey .. ":dependencies"
121
+ local result = rcall("SREM", parentDependenciesKey, jobKey)
122
+ if result > 0 then
123
+ local pendingDependencies = rcall("SCARD", parentDependenciesKey)
124
+ if pendingDependencies == 0 then
125
+ local parentId = getJobIdFromKey(missedParentKey)
126
+ local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
127
+ local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
128
+ if numRemovedElements == 1 then
129
+ if hard then
130
+ if parentPrefix == baseKey then
131
+ removeParentDependencyKey(missedParentKey, hard, nil, baseKey)
132
+ rcall("DEL", missedParentKey, missedParentKey .. ':logs',
133
+ missedParentKey .. ':dependencies', missedParentKey .. ':processed')
134
+ else
135
+ moveParentToWait(parentPrefix, parentId)
136
+ end
137
+ else
138
+ moveParentToWait(parentPrefix, parentId, true)
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
146
+ local function removeJob(jobId, hard, baseKey)
147
+ local jobKey = baseKey .. jobId
148
+ removeParentDependencyKey(jobKey, hard, nil, baseKey)
149
+ rcall("DEL", jobKey, jobKey .. ':logs',
150
+ jobKey .. ':dependencies', jobKey .. ':processed')
151
+ end
152
+ local function removeJobs(keys, hard, baseKey, max)
153
+ for i, key in ipairs(keys) do
154
+ removeJob(key, hard, baseKey)
155
+ end
156
+ return max - #keys
157
+ end
158
+ local function removeListJobs(keyName, hard, baseKey, max)
159
+ local jobs = getListItems(keyName, max)
160
+ local count = removeJobs(jobs, hard, baseKey, max)
161
+ rcall("LTRIM", keyName, #jobs, -1)
162
+ return count
163
+ end
164
+ local function removeZSetJobs(keyName, hard, baseKey, max)
165
+ local jobs = getZSetItems(keyName, max)
166
+ local count = removeJobs(jobs, hard, baseKey, max)
167
+ if(#jobs > 0) then
168
+ for from, to in batches(#jobs, 7000) do
169
+ rcall("ZREM", keyName, unpack(jobs))
170
+ end
171
+ end
172
+ return count
173
+ end
174
+ local function removeLockKeys(keys)
175
+ for i, key in ipairs(keys) do
176
+ rcall("DEL", baseKey .. key .. ':lock')
177
+ end
178
+ end
179
+ -- 1) Check if paused, if not return with error.
180
+ if rcall("HEXISTS", KEYS[1], "paused") ~= 1 then
181
+ return -1 -- Error, NotPaused
182
+ end
183
+ -- 2) Check if there are active jobs, if there are and not "force" return error.
184
+ local activeKey = baseKey .. 'active'
185
+ local activeJobs = getListItems(activeKey, maxCount)
186
+ if (#activeJobs > 0) then
187
+ if(ARGV[2] == "") then
188
+ return -2 -- Error, ExistActiveJobs
189
+ end
190
+ end
191
+ removeLockKeys(activeJobs)
192
+ maxCount = removeJobs(activeJobs, true, baseKey, maxCount)
193
+ rcall("LTRIM", activeKey, #activeJobs, -1)
194
+ if(maxCount <= 0) then
195
+ return 1
196
+ end
197
+ local delayedKey = baseKey .. 'delayed'
198
+ maxCount = removeZSetJobs(delayedKey, true, baseKey, maxCount)
199
+ if(maxCount <= 0) then
200
+ return 1
201
+ end
202
+ local completedKey = baseKey .. 'completed'
203
+ maxCount = removeZSetJobs(completedKey, true, baseKey, maxCount)
204
+ if(maxCount <= 0) then
205
+ return 1
206
+ end
207
+ local waitKey = baseKey .. 'paused'
208
+ maxCount = removeListJobs(waitKey, true, baseKey, maxCount)
209
+ if(maxCount <= 0) then
210
+ return 1
211
+ end
212
+ local failedKey = baseKey .. 'failed'
213
+ maxCount = removeZSetJobs(failedKey, true, baseKey, maxCount)
214
+ if(maxCount <= 0) then
215
+ return 1
216
+ end
217
+ if(maxCount > 0) then
218
+ rcall("DEL",
219
+ baseKey .. 'priority',
220
+ baseKey .. 'events',
221
+ baseKey .. 'delay',
222
+ baseKey .. 'stalled-check',
223
+ baseKey .. 'stalled',
224
+ baseKey .. 'id',
225
+ baseKey .. 'meta',
226
+ baseKey .. 'repeat',
227
+ baseKey .. 'metrics:completed',
228
+ baseKey .. 'metrics:completed:data',
229
+ baseKey .. 'metrics:failed',
230
+ baseKey .. 'metrics:failed:data')
231
+ return 0
232
+ else
233
+ return 1
234
+ end
235
+ `;
236
+ exports.obliterate = {
237
+ name: 'obliterate',
238
+ content,
239
+ keys: 2,
240
+ };
241
+ //# sourceMappingURL=obliterate-2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obliterate-2.js","sourceRoot":"","sources":["../../../src/scripts/obliterate-2.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuOf,CAAC;AACW,QAAA,UAAU,GAAG;IACxB,IAAI,EAAE,YAAY;IAClB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const pause: {
2
+ name: string;
3
+ content: string;
4
+ keys: number;
5
+ };
@@ -1,27 +1,31 @@
1
- --[[
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pause = void 0;
4
+ const content = `--[[
2
5
  Pauses or resumes a queue globably.
3
-
4
6
  Input:
5
7
  KEYS[1] 'wait' or 'paused''
6
8
  KEYS[2] 'paused' or 'wait'
7
9
  KEYS[3] 'meta'
8
10
  KEYS[4] events stream key
9
-
10
11
  ARGV[1] 'paused' or 'resumed'
11
-
12
12
  Event:
13
13
  publish paused or resumed event.
14
14
  ]]
15
15
  local rcall = redis.call
16
-
17
16
  if rcall("EXISTS", KEYS[1]) == 1 then
18
17
  rcall("RENAME", KEYS[1], KEYS[2])
19
18
  end
20
-
21
19
  if ARGV[1] == "paused" then
22
20
  rcall("HSET", KEYS[3], "paused", 1)
23
21
  else
24
22
  rcall("HDEL", KEYS[3], "paused")
25
23
  end
26
-
27
24
  rcall("XADD", KEYS[4], "*", "event", ARGV[1]);
25
+ `;
26
+ exports.pause = {
27
+ name: 'pause',
28
+ content,
29
+ keys: 4,
30
+ };
31
+ //# sourceMappingURL=pause-4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pause-4.js","sourceRoot":"","sources":["../../../src/scripts/pause-4.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBf,CAAC;AACW,QAAA,KAAK,GAAG;IACnB,IAAI,EAAE,OAAO;IACb,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const promote: {
2
+ name: string;
3
+ content: string;
4
+ keys: number;
5
+ };
@@ -1,6 +1,8 @@
1
- --[[
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.promote = void 0;
4
+ const content = `--[[
2
5
  Promotes a job that is currently "delayed" to the "waiting" state
3
-
4
6
  Input:
5
7
  KEYS[1] 'delayed'
6
8
  KEYS[2] 'wait'
@@ -8,29 +10,33 @@
8
10
  KEYS[4] 'meta'
9
11
  KEYS[5] 'priority'
10
12
  KEYS[6] 'event stream'
11
-
12
13
  ARGV[1] queue.toKey('')
13
14
  ARGV[2] jobId
14
-
15
15
  Events:
16
16
  'waiting'
17
17
  ]]
18
18
  local rcall = redis.call;
19
19
  local jobId = ARGV[2]
20
-
21
20
  -- Includes
22
- --- @include "includes/getTargetQueueList"
23
-
21
+ --[[
22
+ Function to check for the meta.paused key to decide if we are paused or not
23
+ (since an empty list and !EXISTS are not really the same).
24
+ ]]
25
+ local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
26
+ if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
27
+ return waitKey
28
+ else
29
+ return pausedKey
30
+ end
31
+ end
24
32
  if rcall("ZREM", KEYS[1], jobId) == 1 then
25
33
  local priority = tonumber(rcall("HGET", ARGV[1] .. jobId, "priority")) or 0
26
34
  local target = getTargetQueueList(KEYS[4], KEYS[2], KEYS[3])
27
-
28
35
  -- Remove delayed "marker" from the wait list if there is any.
29
36
  -- Since we are adding a job we do not need the marker anymore.
30
37
  if rcall("LINDEX", target, 0) == "0" then
31
38
  rcall("LPOP", target)
32
39
  end
33
-
34
40
  if priority == 0 then
35
41
  -- LIFO or FIFO
36
42
  rcall("LPUSH", target, jobId)
@@ -38,7 +44,6 @@ if rcall("ZREM", KEYS[1], jobId) == 1 then
38
44
  -- Priority add
39
45
  rcall("ZADD", KEYS[5], priority, jobId)
40
46
  local count = rcall("ZCOUNT", KEYS[5], 0, priority)
41
-
42
47
  local len = rcall("LLEN", target)
43
48
  local id = rcall("LINDEX", target, len - (count - 1))
44
49
  if id then
@@ -47,13 +52,16 @@ if rcall("ZREM", KEYS[1], jobId) == 1 then
47
52
  rcall("RPUSH", target, jobId)
48
53
  end
49
54
  end
50
-
51
55
  -- Emit waiting event (wait..ing@token)
52
56
  rcall("XADD", KEYS[6], "*", "event", "waiting", "jobId", jobId, "prev", "delayed");
53
-
54
57
  rcall("HSET", ARGV[1] .. jobId, "delay", 0)
55
-
56
58
  return 0
57
59
  else
58
60
  return -3
59
- end
61
+ end`;
62
+ exports.promote = {
63
+ name: 'promote',
64
+ content,
65
+ keys: 6,
66
+ };
67
+ //# sourceMappingURL=promote-6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promote-6.js","sourceRoot":"","sources":["../../../src/scripts/promote-6.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyDZ,CAAC;AACQ,QAAA,OAAO,GAAG;IACrB,IAAI,EAAE,SAAS;IACf,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const releaseLock: {
2
+ name: string;
3
+ content: string;
4
+ keys: number;
5
+ };
@@ -1,19 +1,25 @@
1
- --[[
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.releaseLock = void 0;
4
+ const content = `--[[
2
5
  Release lock
3
-
4
6
  Input:
5
7
  KEYS[1] 'lock',
6
-
7
8
  ARGV[1] token
8
9
  ARGV[2] lock duration in milliseconds
9
-
10
10
  Output:
11
11
  "OK" if lock extented succesfully.
12
12
  ]]
13
13
  local rcall = redis.call
14
-
15
14
  if rcall("GET", KEYS[1]) == ARGV[1] then
16
15
  return rcall("DEL", KEYS[1])
17
16
  else
18
17
  return 0
19
18
  end
19
+ `;
20
+ exports.releaseLock = {
21
+ name: 'releaseLock',
22
+ content,
23
+ keys: 1,
24
+ };
25
+ //# sourceMappingURL=releaseLock-1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releaseLock-1.js","sourceRoot":"","sources":["../../../src/scripts/releaseLock-1.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;CAef,CAAC;AACW,QAAA,WAAW,GAAG;IACzB,IAAI,EAAE,aAAa;IACnB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const removeJob: {
2
+ name: string;
3
+ content: string;
4
+ keys: number;
5
+ };
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.removeJob = void 0;
4
+ const content = `--[[
5
+ Remove a job from all the queues it may be in as well as all its data.
6
+ In order to be able to remove a job, it cannot be active.
7
+ Input:
8
+ KEYS[1] queue prefix
9
+ ARGV[1] jobId
10
+ Events:
11
+ 'removed'
12
+ ]]
13
+ local rcall = redis.call
14
+ -- Includes
15
+ --[[
16
+ Functions to destructure job key.
17
+ Just a bit of warning, these functions may be a bit slow and affect performance significantly.
18
+ ]]
19
+ local getJobIdFromKey = function (jobKey)
20
+ return string.match(jobKey, ".*:(.*)")
21
+ end
22
+ local getJobKeyPrefix = function (jobKey, jobId)
23
+ return string.sub(jobKey, 0, #jobKey - #jobId)
24
+ end
25
+ --[[
26
+ Function to recursively check if there are no locks
27
+ on the jobs to be removed.
28
+ returns:
29
+ boolean
30
+ ]]
31
+ local function isLocked( prefix, jobId)
32
+ local jobKey = prefix .. jobId;
33
+ -- Check if this job is locked
34
+ local lockKey = jobKey .. ':lock'
35
+ local lock = rcall("GET", lockKey)
36
+ if not lock then
37
+ local dependencies = rcall("SMEMBERS", jobKey .. ":dependencies")
38
+ if (#dependencies > 0) then
39
+ for i, childJobKey in ipairs(dependencies) do
40
+ -- We need to get the jobId for this job.
41
+ local childJobId = getJobIdFromKey(childJobKey)
42
+ local childJobPrefix = getJobKeyPrefix(childJobKey, childJobId)
43
+ local result = isLocked( childJobPrefix, childJobId )
44
+ if result then
45
+ return true
46
+ end
47
+ end
48
+ end
49
+ return false
50
+ end
51
+ return true
52
+ end
53
+ --[[
54
+ Function to remove from any state.
55
+ returns:
56
+ prev state
57
+ ]]
58
+ local function removeJobFromAnyState( prefix, jobId)
59
+ if rcall("LREM", prefix .. "wait", 0, jobId) == 1 then
60
+ return "wait"
61
+ elseif rcall("LREM", prefix .. "paused", 0, jobId) == 1 then
62
+ return "paused"
63
+ elseif rcall("LREM", prefix .. "active", 0, jobId) == 1 then
64
+ return "active"
65
+ elseif rcall("ZREM", prefix .. "waiting-children", jobId) == 1 then
66
+ return "waiting-children"
67
+ elseif rcall("ZREM", prefix .. "delayed", jobId) == 1 then
68
+ return "delayed"
69
+ elseif rcall("ZREM", prefix .. "completed", jobId) == 1 then
70
+ return "completed"
71
+ elseif rcall("ZREM", prefix .. "failed", jobId) == 1 then
72
+ return "failed"
73
+ end
74
+ return "unknown"
75
+ end
76
+ --[[
77
+ Check if this job has a parent. If so we will just remove it from
78
+ the parent child list, but if it is the last child we should move the parent to "wait/paused"
79
+ which requires code from "moveToFinished"
80
+ ]]
81
+ --[[
82
+ Function to check for the meta.paused key to decide if we are paused or not
83
+ (since an empty list and !EXISTS are not really the same).
84
+ ]]
85
+ local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
86
+ if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
87
+ return waitKey
88
+ else
89
+ return pausedKey
90
+ end
91
+ end
92
+ local function moveParentToWait(parentPrefix, parentId, emitEvent)
93
+ local parentTarget = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "wait", parentPrefix .. "paused")
94
+ rcall("RPUSH", parentTarget, parentId)
95
+ if emitEvent then
96
+ local parentEventStream = parentPrefix .. "events"
97
+ rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
98
+ end
99
+ end
100
+ local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey)
101
+ if parentKey then
102
+ local parentProcessedKey = parentKey .. ":processed"
103
+ rcall("HDEL", parentProcessedKey, jobKey)
104
+ local parentDependenciesKey = parentKey .. ":dependencies"
105
+ local result = rcall("SREM", parentDependenciesKey, jobKey)
106
+ if result > 0 then
107
+ local pendingDependencies = rcall("SCARD", parentDependenciesKey)
108
+ if pendingDependencies == 0 then
109
+ local parentId = getJobIdFromKey(parentKey)
110
+ local parentPrefix = getJobKeyPrefix(parentKey, parentId)
111
+ local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
112
+ if numRemovedElements == 1 then
113
+ if hard then
114
+ if parentPrefix == baseKey then
115
+ removeParentDependencyKey(parentKey, hard, nil, baseKey)
116
+ rcall("DEL", parentKey, parentKey .. ':logs',
117
+ parentKey .. ':dependencies', parentKey .. ':processed')
118
+ else
119
+ moveParentToWait(parentPrefix, parentId)
120
+ end
121
+ else
122
+ moveParentToWait(parentPrefix, parentId, true)
123
+ end
124
+ end
125
+ end
126
+ end
127
+ else
128
+ local missedParentKey = rcall("HGET", jobKey, "parentKey")
129
+ if( (type(missedParentKey) == "string") and missedParentKey ~= "" and (rcall("EXISTS", missedParentKey) == 1)) then
130
+ local parentProcessedKey = missedParentKey .. ":processed"
131
+ rcall("HDEL", parentProcessedKey, jobKey)
132
+ local parentDependenciesKey = missedParentKey .. ":dependencies"
133
+ local result = rcall("SREM", parentDependenciesKey, jobKey)
134
+ if result > 0 then
135
+ local pendingDependencies = rcall("SCARD", parentDependenciesKey)
136
+ if pendingDependencies == 0 then
137
+ local parentId = getJobIdFromKey(missedParentKey)
138
+ local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
139
+ local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
140
+ if numRemovedElements == 1 then
141
+ if hard then
142
+ if parentPrefix == baseKey then
143
+ removeParentDependencyKey(missedParentKey, hard, nil, baseKey)
144
+ rcall("DEL", missedParentKey, missedParentKey .. ':logs',
145
+ missedParentKey .. ':dependencies', missedParentKey .. ':processed')
146
+ else
147
+ moveParentToWait(parentPrefix, parentId)
148
+ end
149
+ else
150
+ moveParentToWait(parentPrefix, parentId, true)
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
158
+ local function removeJob( prefix, jobId, parentKey)
159
+ local jobKey = prefix .. jobId;
160
+ removeParentDependencyKey(jobKey, false, parentKey)
161
+ -- Check if this job has children
162
+ -- If so, we are going to try to remove the children recursively in deep first way because
163
+ -- if some job is locked we must exit with and error.
164
+ --local countProcessed = rcall("HLEN", jobKey .. ":processed")
165
+ local processed = rcall("HGETALL", jobKey .. ":processed")
166
+ if (#processed > 0) then
167
+ for i = 1, #processed, 2 do
168
+ local childJobId = getJobIdFromKey(processed[i])
169
+ local childJobPrefix = getJobKeyPrefix(processed[i], childJobId)
170
+ removeJob( childJobPrefix, childJobId, jobKey )
171
+ end
172
+ end
173
+ local dependencies = rcall("SMEMBERS", jobKey .. ":dependencies")
174
+ if (#dependencies > 0) then
175
+ for i, childJobKey in ipairs(dependencies) do
176
+ -- We need to get the jobId for this job.
177
+ local childJobId = getJobIdFromKey(childJobKey)
178
+ local childJobPrefix = getJobKeyPrefix(childJobKey, childJobId)
179
+ removeJob( childJobPrefix, childJobId, jobKey )
180
+ end
181
+ end
182
+ local prev = removeJobFromAnyState(prefix, jobId)
183
+ rcall("ZREM", prefix .. "priority", jobId)
184
+ rcall("DEL", jobKey, jobKey .. ":logs", jobKey .. ":dependencies", jobKey .. ":processed")
185
+ -- -- delete keys related to rate limiter
186
+ -- local limiterIndexTable = KEYS[10] .. ":index"
187
+ -- local limitedSetKey = rcall("HGET", limiterIndexTable, jobId)
188
+ -- if limitedSetKey then
189
+ -- rcall("SREM", limitedSetKey, jobId)
190
+ -- rcall("HDEL", limiterIndexTable, jobId)
191
+ -- end
192
+ rcall("XADD", prefix .. "events", "*", "event", "removed", "jobId", jobId, "prev", prev);
193
+ end
194
+ local prefix = KEYS[1]
195
+ if not isLocked(prefix, ARGV[1]) then
196
+ removeJob(prefix, ARGV[1])
197
+ return 1
198
+ end
199
+ return 0
200
+ `;
201
+ exports.removeJob = {
202
+ name: 'removeJob',
203
+ content,
204
+ keys: 1,
205
+ };
206
+ //# sourceMappingURL=removeJob-1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeJob-1.js","sourceRoot":"","sources":["../../../src/scripts/removeJob-1.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoMf,CAAC;AACW,QAAA,SAAS,GAAG;IACvB,IAAI,EAAE,WAAW;IACjB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const removeRepeatable: {
2
+ name: string;
3
+ content: string;
4
+ keys: number;
5
+ };