@dropthis/cli 0.1.5

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 (236) hide show
  1. package/README.md +171 -0
  2. package/dist/cli.cjs +1489 -0
  3. package/dist/cli.cjs.map +1 -0
  4. package/node_modules/@dropthis/node/README.md +90 -0
  5. package/node_modules/@dropthis/node/dist/index.cjs +1010 -0
  6. package/node_modules/@dropthis/node/dist/index.cjs.map +1 -0
  7. package/node_modules/@dropthis/node/dist/index.d.cts +408 -0
  8. package/node_modules/@dropthis/node/dist/index.d.ts +408 -0
  9. package/node_modules/@dropthis/node/dist/index.mjs +969 -0
  10. package/node_modules/@dropthis/node/dist/index.mjs.map +1 -0
  11. package/node_modules/@dropthis/node/package.json +55 -0
  12. package/node_modules/@nodelib/fs.scandir/LICENSE +21 -0
  13. package/node_modules/@nodelib/fs.scandir/README.md +171 -0
  14. package/node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts +20 -0
  15. package/node_modules/@nodelib/fs.scandir/out/adapters/fs.js +19 -0
  16. package/node_modules/@nodelib/fs.scandir/out/constants.d.ts +4 -0
  17. package/node_modules/@nodelib/fs.scandir/out/constants.js +17 -0
  18. package/node_modules/@nodelib/fs.scandir/out/index.d.ts +12 -0
  19. package/node_modules/@nodelib/fs.scandir/out/index.js +26 -0
  20. package/node_modules/@nodelib/fs.scandir/out/providers/async.d.ts +7 -0
  21. package/node_modules/@nodelib/fs.scandir/out/providers/async.js +104 -0
  22. package/node_modules/@nodelib/fs.scandir/out/providers/common.d.ts +1 -0
  23. package/node_modules/@nodelib/fs.scandir/out/providers/common.js +13 -0
  24. package/node_modules/@nodelib/fs.scandir/out/providers/sync.d.ts +5 -0
  25. package/node_modules/@nodelib/fs.scandir/out/providers/sync.js +54 -0
  26. package/node_modules/@nodelib/fs.scandir/out/settings.d.ts +20 -0
  27. package/node_modules/@nodelib/fs.scandir/out/settings.js +24 -0
  28. package/node_modules/@nodelib/fs.scandir/out/types/index.d.ts +20 -0
  29. package/node_modules/@nodelib/fs.scandir/out/types/index.js +2 -0
  30. package/node_modules/@nodelib/fs.scandir/out/utils/fs.d.ts +2 -0
  31. package/node_modules/@nodelib/fs.scandir/out/utils/fs.js +19 -0
  32. package/node_modules/@nodelib/fs.scandir/out/utils/index.d.ts +2 -0
  33. package/node_modules/@nodelib/fs.scandir/out/utils/index.js +5 -0
  34. package/node_modules/@nodelib/fs.scandir/package.json +44 -0
  35. package/node_modules/@nodelib/fs.stat/LICENSE +21 -0
  36. package/node_modules/@nodelib/fs.stat/README.md +126 -0
  37. package/node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts +13 -0
  38. package/node_modules/@nodelib/fs.stat/out/adapters/fs.js +17 -0
  39. package/node_modules/@nodelib/fs.stat/out/index.d.ts +12 -0
  40. package/node_modules/@nodelib/fs.stat/out/index.js +26 -0
  41. package/node_modules/@nodelib/fs.stat/out/providers/async.d.ts +4 -0
  42. package/node_modules/@nodelib/fs.stat/out/providers/async.js +36 -0
  43. package/node_modules/@nodelib/fs.stat/out/providers/sync.d.ts +3 -0
  44. package/node_modules/@nodelib/fs.stat/out/providers/sync.js +23 -0
  45. package/node_modules/@nodelib/fs.stat/out/settings.d.ts +16 -0
  46. package/node_modules/@nodelib/fs.stat/out/settings.js +16 -0
  47. package/node_modules/@nodelib/fs.stat/out/types/index.d.ts +4 -0
  48. package/node_modules/@nodelib/fs.stat/out/types/index.js +2 -0
  49. package/node_modules/@nodelib/fs.stat/package.json +37 -0
  50. package/node_modules/@nodelib/fs.walk/LICENSE +21 -0
  51. package/node_modules/@nodelib/fs.walk/README.md +215 -0
  52. package/node_modules/@nodelib/fs.walk/out/index.d.ts +14 -0
  53. package/node_modules/@nodelib/fs.walk/out/index.js +34 -0
  54. package/node_modules/@nodelib/fs.walk/out/providers/async.d.ts +12 -0
  55. package/node_modules/@nodelib/fs.walk/out/providers/async.js +30 -0
  56. package/node_modules/@nodelib/fs.walk/out/providers/index.d.ts +4 -0
  57. package/node_modules/@nodelib/fs.walk/out/providers/index.js +9 -0
  58. package/node_modules/@nodelib/fs.walk/out/providers/stream.d.ts +12 -0
  59. package/node_modules/@nodelib/fs.walk/out/providers/stream.js +34 -0
  60. package/node_modules/@nodelib/fs.walk/out/providers/sync.d.ts +10 -0
  61. package/node_modules/@nodelib/fs.walk/out/providers/sync.js +14 -0
  62. package/node_modules/@nodelib/fs.walk/out/readers/async.d.ts +30 -0
  63. package/node_modules/@nodelib/fs.walk/out/readers/async.js +97 -0
  64. package/node_modules/@nodelib/fs.walk/out/readers/common.d.ts +7 -0
  65. package/node_modules/@nodelib/fs.walk/out/readers/common.js +31 -0
  66. package/node_modules/@nodelib/fs.walk/out/readers/reader.d.ts +6 -0
  67. package/node_modules/@nodelib/fs.walk/out/readers/reader.js +11 -0
  68. package/node_modules/@nodelib/fs.walk/out/readers/sync.d.ts +15 -0
  69. package/node_modules/@nodelib/fs.walk/out/readers/sync.js +59 -0
  70. package/node_modules/@nodelib/fs.walk/out/settings.d.ts +30 -0
  71. package/node_modules/@nodelib/fs.walk/out/settings.js +26 -0
  72. package/node_modules/@nodelib/fs.walk/out/types/index.d.ts +8 -0
  73. package/node_modules/@nodelib/fs.walk/out/types/index.js +2 -0
  74. package/node_modules/@nodelib/fs.walk/package.json +44 -0
  75. package/node_modules/braces/LICENSE +21 -0
  76. package/node_modules/braces/README.md +586 -0
  77. package/node_modules/braces/index.js +170 -0
  78. package/node_modules/braces/lib/compile.js +60 -0
  79. package/node_modules/braces/lib/constants.js +57 -0
  80. package/node_modules/braces/lib/expand.js +113 -0
  81. package/node_modules/braces/lib/parse.js +331 -0
  82. package/node_modules/braces/lib/stringify.js +32 -0
  83. package/node_modules/braces/lib/utils.js +122 -0
  84. package/node_modules/braces/package.json +77 -0
  85. package/node_modules/fast-glob/LICENSE +21 -0
  86. package/node_modules/fast-glob/README.md +830 -0
  87. package/node_modules/fast-glob/out/index.d.ts +40 -0
  88. package/node_modules/fast-glob/out/index.js +102 -0
  89. package/node_modules/fast-glob/out/managers/tasks.d.ts +22 -0
  90. package/node_modules/fast-glob/out/managers/tasks.js +110 -0
  91. package/node_modules/fast-glob/out/providers/async.d.ts +9 -0
  92. package/node_modules/fast-glob/out/providers/async.js +23 -0
  93. package/node_modules/fast-glob/out/providers/filters/deep.d.ts +16 -0
  94. package/node_modules/fast-glob/out/providers/filters/deep.js +62 -0
  95. package/node_modules/fast-glob/out/providers/filters/entry.d.ts +17 -0
  96. package/node_modules/fast-glob/out/providers/filters/entry.js +85 -0
  97. package/node_modules/fast-glob/out/providers/filters/error.d.ts +8 -0
  98. package/node_modules/fast-glob/out/providers/filters/error.js +15 -0
  99. package/node_modules/fast-glob/out/providers/matchers/matcher.d.ts +33 -0
  100. package/node_modules/fast-glob/out/providers/matchers/matcher.js +45 -0
  101. package/node_modules/fast-glob/out/providers/matchers/partial.d.ts +4 -0
  102. package/node_modules/fast-glob/out/providers/matchers/partial.js +38 -0
  103. package/node_modules/fast-glob/out/providers/provider.d.ts +19 -0
  104. package/node_modules/fast-glob/out/providers/provider.js +48 -0
  105. package/node_modules/fast-glob/out/providers/stream.d.ts +11 -0
  106. package/node_modules/fast-glob/out/providers/stream.js +31 -0
  107. package/node_modules/fast-glob/out/providers/sync.d.ts +9 -0
  108. package/node_modules/fast-glob/out/providers/sync.js +23 -0
  109. package/node_modules/fast-glob/out/providers/transformers/entry.d.ts +8 -0
  110. package/node_modules/fast-glob/out/providers/transformers/entry.js +26 -0
  111. package/node_modules/fast-glob/out/readers/async.d.ts +10 -0
  112. package/node_modules/fast-glob/out/readers/async.js +35 -0
  113. package/node_modules/fast-glob/out/readers/reader.d.ts +15 -0
  114. package/node_modules/fast-glob/out/readers/reader.js +33 -0
  115. package/node_modules/fast-glob/out/readers/stream.d.ts +14 -0
  116. package/node_modules/fast-glob/out/readers/stream.js +55 -0
  117. package/node_modules/fast-glob/out/readers/sync.d.ts +12 -0
  118. package/node_modules/fast-glob/out/readers/sync.js +43 -0
  119. package/node_modules/fast-glob/out/settings.d.ts +164 -0
  120. package/node_modules/fast-glob/out/settings.js +59 -0
  121. package/node_modules/fast-glob/out/types/index.d.ts +31 -0
  122. package/node_modules/fast-glob/out/types/index.js +2 -0
  123. package/node_modules/fast-glob/out/utils/array.d.ts +2 -0
  124. package/node_modules/fast-glob/out/utils/array.js +22 -0
  125. package/node_modules/fast-glob/out/utils/errno.d.ts +2 -0
  126. package/node_modules/fast-glob/out/utils/errno.js +7 -0
  127. package/node_modules/fast-glob/out/utils/fs.d.ts +4 -0
  128. package/node_modules/fast-glob/out/utils/fs.js +19 -0
  129. package/node_modules/fast-glob/out/utils/index.d.ts +8 -0
  130. package/node_modules/fast-glob/out/utils/index.js +17 -0
  131. package/node_modules/fast-glob/out/utils/path.d.ts +13 -0
  132. package/node_modules/fast-glob/out/utils/path.js +68 -0
  133. package/node_modules/fast-glob/out/utils/pattern.d.ts +49 -0
  134. package/node_modules/fast-glob/out/utils/pattern.js +206 -0
  135. package/node_modules/fast-glob/out/utils/stream.d.ts +4 -0
  136. package/node_modules/fast-glob/out/utils/stream.js +17 -0
  137. package/node_modules/fast-glob/out/utils/string.d.ts +2 -0
  138. package/node_modules/fast-glob/out/utils/string.js +11 -0
  139. package/node_modules/fast-glob/package.json +81 -0
  140. package/node_modules/fastq/LICENSE +13 -0
  141. package/node_modules/fastq/README.md +310 -0
  142. package/node_modules/fastq/SECURITY.md +15 -0
  143. package/node_modules/fastq/bench.js +66 -0
  144. package/node_modules/fastq/eslint.config.js +11 -0
  145. package/node_modules/fastq/example.js +14 -0
  146. package/node_modules/fastq/example.mjs +9 -0
  147. package/node_modules/fastq/index.d.ts +59 -0
  148. package/node_modules/fastq/package.json +49 -0
  149. package/node_modules/fastq/queue.js +346 -0
  150. package/node_modules/fastq/test/example.ts +83 -0
  151. package/node_modules/fastq/test/promise.js +325 -0
  152. package/node_modules/fastq/test/test.js +733 -0
  153. package/node_modules/fastq/test/tsconfig.json +11 -0
  154. package/node_modules/fill-range/LICENSE +21 -0
  155. package/node_modules/fill-range/README.md +237 -0
  156. package/node_modules/fill-range/index.js +248 -0
  157. package/node_modules/fill-range/package.json +74 -0
  158. package/node_modules/glob-parent/LICENSE +15 -0
  159. package/node_modules/glob-parent/README.md +137 -0
  160. package/node_modules/glob-parent/index.js +42 -0
  161. package/node_modules/glob-parent/package.json +48 -0
  162. package/node_modules/ignore/LICENSE-MIT +21 -0
  163. package/node_modules/ignore/README.md +452 -0
  164. package/node_modules/ignore/index.d.ts +81 -0
  165. package/node_modules/ignore/index.js +784 -0
  166. package/node_modules/ignore/legacy.js +681 -0
  167. package/node_modules/ignore/package.json +87 -0
  168. package/node_modules/is-extglob/LICENSE +21 -0
  169. package/node_modules/is-extglob/README.md +107 -0
  170. package/node_modules/is-extglob/index.js +20 -0
  171. package/node_modules/is-extglob/package.json +69 -0
  172. package/node_modules/is-glob/LICENSE +21 -0
  173. package/node_modules/is-glob/README.md +206 -0
  174. package/node_modules/is-glob/index.js +150 -0
  175. package/node_modules/is-glob/package.json +81 -0
  176. package/node_modules/is-number/LICENSE +21 -0
  177. package/node_modules/is-number/README.md +187 -0
  178. package/node_modules/is-number/index.js +18 -0
  179. package/node_modules/is-number/package.json +82 -0
  180. package/node_modules/merge2/LICENSE +21 -0
  181. package/node_modules/merge2/README.md +144 -0
  182. package/node_modules/merge2/index.js +144 -0
  183. package/node_modules/merge2/package.json +43 -0
  184. package/node_modules/micromatch/LICENSE +21 -0
  185. package/node_modules/micromatch/README.md +1024 -0
  186. package/node_modules/micromatch/index.js +474 -0
  187. package/node_modules/micromatch/package.json +119 -0
  188. package/node_modules/mime-db/HISTORY.md +541 -0
  189. package/node_modules/mime-db/LICENSE +23 -0
  190. package/node_modules/mime-db/README.md +109 -0
  191. package/node_modules/mime-db/db.json +9342 -0
  192. package/node_modules/mime-db/index.js +12 -0
  193. package/node_modules/mime-db/package.json +56 -0
  194. package/node_modules/mime-types/HISTORY.md +421 -0
  195. package/node_modules/mime-types/LICENSE +23 -0
  196. package/node_modules/mime-types/README.md +126 -0
  197. package/node_modules/mime-types/index.js +211 -0
  198. package/node_modules/mime-types/mimeScore.js +52 -0
  199. package/node_modules/mime-types/package.json +45 -0
  200. package/node_modules/picomatch/LICENSE +21 -0
  201. package/node_modules/picomatch/README.md +716 -0
  202. package/node_modules/picomatch/index.js +3 -0
  203. package/node_modules/picomatch/lib/constants.js +184 -0
  204. package/node_modules/picomatch/lib/parse.js +1392 -0
  205. package/node_modules/picomatch/lib/picomatch.js +342 -0
  206. package/node_modules/picomatch/lib/scan.js +391 -0
  207. package/node_modules/picomatch/lib/utils.js +64 -0
  208. package/node_modules/picomatch/package.json +81 -0
  209. package/node_modules/queue-microtask/LICENSE +20 -0
  210. package/node_modules/queue-microtask/README.md +90 -0
  211. package/node_modules/queue-microtask/index.d.ts +2 -0
  212. package/node_modules/queue-microtask/index.js +9 -0
  213. package/node_modules/queue-microtask/package.json +55 -0
  214. package/node_modules/reusify/.github/dependabot.yml +7 -0
  215. package/node_modules/reusify/.github/workflows/ci.yml +96 -0
  216. package/node_modules/reusify/LICENSE +22 -0
  217. package/node_modules/reusify/README.md +139 -0
  218. package/node_modules/reusify/SECURITY.md +15 -0
  219. package/node_modules/reusify/benchmarks/createNoCodeFunction.js +30 -0
  220. package/node_modules/reusify/benchmarks/fib.js +13 -0
  221. package/node_modules/reusify/benchmarks/reuseNoCodeFunction.js +38 -0
  222. package/node_modules/reusify/eslint.config.js +14 -0
  223. package/node_modules/reusify/package.json +50 -0
  224. package/node_modules/reusify/reusify.d.ts +14 -0
  225. package/node_modules/reusify/reusify.js +33 -0
  226. package/node_modules/reusify/test.js +66 -0
  227. package/node_modules/reusify/tsconfig.json +11 -0
  228. package/node_modules/run-parallel/LICENSE +20 -0
  229. package/node_modules/run-parallel/README.md +85 -0
  230. package/node_modules/run-parallel/index.js +51 -0
  231. package/node_modules/run-parallel/package.json +58 -0
  232. package/node_modules/to-regex-range/LICENSE +21 -0
  233. package/node_modules/to-regex-range/README.md +305 -0
  234. package/node_modules/to-regex-range/index.js +288 -0
  235. package/node_modules/to-regex-range/package.json +88 -0
  236. package/package.json +53 -0
@@ -0,0 +1,733 @@
1
+ 'use strict'
2
+
3
+ /* eslint-disable no-var */
4
+
5
+ var test = require('tape')
6
+ var buildQueue = require('../')
7
+
8
+ test('concurrency', function (t) {
9
+ t.plan(6)
10
+ t.throws(buildQueue.bind(null, worker, 0))
11
+ t.throws(buildQueue.bind(null, worker, NaN))
12
+ t.doesNotThrow(buildQueue.bind(null, worker, 1))
13
+
14
+ var queue = buildQueue(worker, 1)
15
+ t.throws(function () {
16
+ queue.concurrency = 0
17
+ })
18
+ t.throws(function () {
19
+ queue.concurrency = NaN
20
+ })
21
+ t.doesNotThrow(function () {
22
+ queue.concurrency = 2
23
+ })
24
+
25
+ function worker (arg, cb) {
26
+ cb(null, true)
27
+ }
28
+ })
29
+
30
+ test('worker execution', function (t) {
31
+ t.plan(3)
32
+
33
+ var queue = buildQueue(worker, 1)
34
+
35
+ queue.push(42, function (err, result) {
36
+ t.error(err, 'no error')
37
+ t.equal(result, true, 'result matches')
38
+ })
39
+
40
+ function worker (arg, cb) {
41
+ t.equal(arg, 42)
42
+ cb(null, true)
43
+ }
44
+ })
45
+
46
+ test('limit', function (t) {
47
+ t.plan(4)
48
+
49
+ var expected = [10, 0]
50
+ var queue = buildQueue(worker, 1)
51
+
52
+ queue.push(10, result)
53
+ queue.push(0, result)
54
+
55
+ function result (err, arg) {
56
+ t.error(err, 'no error')
57
+ t.equal(arg, expected.shift(), 'the result matches')
58
+ }
59
+
60
+ function worker (arg, cb) {
61
+ setTimeout(cb, arg, null, arg)
62
+ }
63
+ })
64
+
65
+ test('multiple executions', function (t) {
66
+ t.plan(15)
67
+
68
+ var queue = buildQueue(worker, 1)
69
+ var toExec = [1, 2, 3, 4, 5]
70
+ var count = 0
71
+
72
+ toExec.forEach(function (task) {
73
+ queue.push(task, done)
74
+ })
75
+
76
+ function done (err, result) {
77
+ t.error(err, 'no error')
78
+ t.equal(result, toExec[count - 1], 'the result matches')
79
+ }
80
+
81
+ function worker (arg, cb) {
82
+ t.equal(arg, toExec[count], 'arg matches')
83
+ count++
84
+ setImmediate(cb, null, arg)
85
+ }
86
+ })
87
+
88
+ test('multiple executions, one after another', function (t) {
89
+ t.plan(15)
90
+
91
+ var queue = buildQueue(worker, 1)
92
+ var toExec = [1, 2, 3, 4, 5]
93
+ var count = 0
94
+
95
+ queue.push(toExec[0], done)
96
+
97
+ function done (err, result) {
98
+ t.error(err, 'no error')
99
+ t.equal(result, toExec[count - 1], 'the result matches')
100
+ if (count < toExec.length) {
101
+ queue.push(toExec[count], done)
102
+ }
103
+ }
104
+
105
+ function worker (arg, cb) {
106
+ t.equal(arg, toExec[count], 'arg matches')
107
+ count++
108
+ setImmediate(cb, null, arg)
109
+ }
110
+ })
111
+
112
+ test('set this', function (t) {
113
+ t.plan(3)
114
+
115
+ var that = {}
116
+ var queue = buildQueue(that, worker, 1)
117
+
118
+ queue.push(42, function (err, result) {
119
+ t.error(err, 'no error')
120
+ t.equal(this, that, 'this matches')
121
+ })
122
+
123
+ function worker (arg, cb) {
124
+ t.equal(this, that, 'this matches')
125
+ cb(null, true)
126
+ }
127
+ })
128
+
129
+ test('drain', function (t) {
130
+ t.plan(4)
131
+
132
+ var queue = buildQueue(worker, 1)
133
+ var worked = false
134
+
135
+ queue.push(42, function (err, result) {
136
+ t.error(err, 'no error')
137
+ t.equal(result, true, 'result matches')
138
+ })
139
+
140
+ queue.drain = function () {
141
+ t.equal(true, worked, 'drained')
142
+ }
143
+
144
+ function worker (arg, cb) {
145
+ t.equal(arg, 42)
146
+ worked = true
147
+ setImmediate(cb, null, true)
148
+ }
149
+ })
150
+
151
+ test('pause && resume', function (t) {
152
+ t.plan(13)
153
+
154
+ var queue = buildQueue(worker, 1)
155
+ var worked = false
156
+ var expected = [42, 24]
157
+
158
+ t.notOk(queue.paused, 'it should not be paused')
159
+
160
+ queue.pause()
161
+
162
+ queue.push(42, function (err, result) {
163
+ t.error(err, 'no error')
164
+ t.equal(result, true, 'result matches')
165
+ })
166
+
167
+ queue.push(24, function (err, result) {
168
+ t.error(err, 'no error')
169
+ t.equal(result, true, 'result matches')
170
+ })
171
+
172
+ t.notOk(worked, 'it should be paused')
173
+ t.ok(queue.paused, 'it should be paused')
174
+
175
+ queue.resume()
176
+ queue.pause()
177
+ queue.resume()
178
+ queue.resume() // second resume is a no-op
179
+
180
+ function worker (arg, cb) {
181
+ t.notOk(queue.paused, 'it should not be paused')
182
+ t.ok(queue.running() <= queue.concurrency, 'should respect the concurrency')
183
+ t.equal(arg, expected.shift())
184
+ worked = true
185
+ process.nextTick(function () { cb(null, true) })
186
+ }
187
+ })
188
+
189
+ test('pause in flight && resume', function (t) {
190
+ t.plan(16)
191
+
192
+ var queue = buildQueue(worker, 1)
193
+ var expected = [42, 24, 12]
194
+
195
+ t.notOk(queue.paused, 'it should not be paused')
196
+
197
+ queue.push(42, function (err, result) {
198
+ t.error(err, 'no error')
199
+ t.equal(result, true, 'result matches')
200
+ t.ok(queue.paused, 'it should be paused')
201
+ process.nextTick(function () {
202
+ queue.resume()
203
+ queue.pause()
204
+ queue.resume()
205
+ })
206
+ })
207
+
208
+ queue.push(24, function (err, result) {
209
+ t.error(err, 'no error')
210
+ t.equal(result, true, 'result matches')
211
+ t.notOk(queue.paused, 'it should not be paused')
212
+ })
213
+
214
+ queue.push(12, function (err, result) {
215
+ t.error(err, 'no error')
216
+ t.equal(result, true, 'result matches')
217
+ t.notOk(queue.paused, 'it should not be paused')
218
+ })
219
+
220
+ queue.pause()
221
+
222
+ function worker (arg, cb) {
223
+ t.ok(queue.running() <= queue.concurrency, 'should respect the concurrency')
224
+ t.equal(arg, expected.shift())
225
+ process.nextTick(function () { cb(null, true) })
226
+ }
227
+ })
228
+
229
+ test('altering concurrency', function (t) {
230
+ t.plan(24)
231
+
232
+ var queue = buildQueue(worker, 1)
233
+
234
+ queue.push(24, workDone)
235
+ queue.push(24, workDone)
236
+ queue.push(24, workDone)
237
+
238
+ queue.pause()
239
+
240
+ queue.concurrency = 3 // concurrency changes are ignored while paused
241
+ queue.concurrency = 2
242
+
243
+ queue.resume()
244
+
245
+ t.equal(queue.running(), 2, '2 jobs running')
246
+
247
+ queue.concurrency = 3
248
+
249
+ t.equal(queue.running(), 3, '3 jobs running')
250
+
251
+ queue.concurrency = 1
252
+
253
+ t.equal(queue.running(), 3, '3 jobs running') // running jobs can't be killed
254
+
255
+ queue.push(24, workDone)
256
+ queue.push(24, workDone)
257
+ queue.push(24, workDone)
258
+ queue.push(24, workDone)
259
+
260
+ function workDone (err, result) {
261
+ t.error(err, 'no error')
262
+ t.equal(result, true, 'result matches')
263
+ }
264
+
265
+ function worker (arg, cb) {
266
+ t.ok(queue.running() <= queue.concurrency, 'should respect the concurrency')
267
+ setImmediate(function () {
268
+ cb(null, true)
269
+ })
270
+ }
271
+ })
272
+
273
+ test('idle()', function (t) {
274
+ t.plan(12)
275
+
276
+ var queue = buildQueue(worker, 1)
277
+
278
+ t.ok(queue.idle(), 'queue is idle')
279
+
280
+ queue.push(42, function (err, result) {
281
+ t.error(err, 'no error')
282
+ t.equal(result, true, 'result matches')
283
+ t.notOk(queue.idle(), 'queue is not idle')
284
+ })
285
+
286
+ queue.push(42, function (err, result) {
287
+ t.error(err, 'no error')
288
+ t.equal(result, true, 'result matches')
289
+ // it will go idle after executing this function
290
+ setImmediate(function () {
291
+ t.ok(queue.idle(), 'queue is now idle')
292
+ })
293
+ })
294
+
295
+ t.notOk(queue.idle(), 'queue is not idle')
296
+
297
+ function worker (arg, cb) {
298
+ t.notOk(queue.idle(), 'queue is not idle')
299
+ t.equal(arg, 42)
300
+ setImmediate(cb, null, true)
301
+ }
302
+ })
303
+
304
+ test('saturated', function (t) {
305
+ t.plan(9)
306
+
307
+ var queue = buildQueue(worker, 1)
308
+ var preworked = 0
309
+ var worked = 0
310
+
311
+ queue.saturated = function () {
312
+ t.pass('saturated')
313
+ t.equal(preworked, 1, 'started 1 task')
314
+ t.equal(worked, 0, 'worked zero task')
315
+ }
316
+
317
+ queue.push(42, done)
318
+ queue.push(42, done)
319
+
320
+ function done (err, result) {
321
+ t.error(err, 'no error')
322
+ t.equal(result, true, 'result matches')
323
+ }
324
+
325
+ function worker (arg, cb) {
326
+ t.equal(arg, 42)
327
+ preworked++
328
+ setImmediate(function () {
329
+ worked++
330
+ cb(null, true)
331
+ })
332
+ }
333
+ })
334
+
335
+ test('length', function (t) {
336
+ t.plan(7)
337
+
338
+ var queue = buildQueue(worker, 1)
339
+
340
+ t.equal(queue.length(), 0, 'nothing waiting')
341
+ queue.push(42, done)
342
+ t.equal(queue.length(), 0, 'nothing waiting')
343
+ queue.push(42, done)
344
+ t.equal(queue.length(), 1, 'one task waiting')
345
+ queue.push(42, done)
346
+ t.equal(queue.length(), 2, 'two tasks waiting')
347
+
348
+ function done (err, result) {
349
+ t.error(err, 'no error')
350
+ }
351
+
352
+ function worker (arg, cb) {
353
+ setImmediate(function () {
354
+ cb(null, true)
355
+ })
356
+ }
357
+ })
358
+
359
+ test('getQueue', function (t) {
360
+ t.plan(10)
361
+
362
+ var queue = buildQueue(worker, 1)
363
+
364
+ t.equal(queue.getQueue().length, 0, 'nothing waiting')
365
+ queue.push(42, done)
366
+ t.equal(queue.getQueue().length, 0, 'nothing waiting')
367
+ queue.push(42, done)
368
+ t.equal(queue.getQueue().length, 1, 'one task waiting')
369
+ t.equal(queue.getQueue()[0], 42, 'should be equal')
370
+ queue.push(43, done)
371
+ t.equal(queue.getQueue().length, 2, 'two tasks waiting')
372
+ t.equal(queue.getQueue()[0], 42, 'should be equal')
373
+ t.equal(queue.getQueue()[1], 43, 'should be equal')
374
+
375
+ function done (err, result) {
376
+ t.error(err, 'no error')
377
+ }
378
+
379
+ function worker (arg, cb) {
380
+ setImmediate(function () {
381
+ cb(null, true)
382
+ })
383
+ }
384
+ })
385
+
386
+ test('unshift', function (t) {
387
+ t.plan(8)
388
+
389
+ var queue = buildQueue(worker, 1)
390
+ var expected = [1, 2, 3, 4]
391
+
392
+ queue.push(1, done)
393
+ queue.push(4, done)
394
+ queue.unshift(3, done)
395
+ queue.unshift(2, done)
396
+
397
+ function done (err, result) {
398
+ t.error(err, 'no error')
399
+ }
400
+
401
+ function worker (arg, cb) {
402
+ t.equal(expected.shift(), arg, 'tasks come in order')
403
+ setImmediate(function () {
404
+ cb(null, true)
405
+ })
406
+ }
407
+ })
408
+
409
+ test('unshift && empty', function (t) {
410
+ t.plan(2)
411
+
412
+ var queue = buildQueue(worker, 1)
413
+ var completed = false
414
+
415
+ queue.pause()
416
+
417
+ queue.empty = function () {
418
+ t.notOk(completed, 'the task has not completed yet')
419
+ }
420
+
421
+ queue.unshift(1, done)
422
+
423
+ queue.resume()
424
+
425
+ function done (err, result) {
426
+ completed = true
427
+ t.error(err, 'no error')
428
+ }
429
+
430
+ function worker (arg, cb) {
431
+ setImmediate(function () {
432
+ cb(null, true)
433
+ })
434
+ }
435
+ })
436
+
437
+ test('push && empty', function (t) {
438
+ t.plan(2)
439
+
440
+ var queue = buildQueue(worker, 1)
441
+ var completed = false
442
+
443
+ queue.pause()
444
+
445
+ queue.empty = function () {
446
+ t.notOk(completed, 'the task has not completed yet')
447
+ }
448
+
449
+ queue.push(1, done)
450
+
451
+ queue.resume()
452
+
453
+ function done (err, result) {
454
+ completed = true
455
+ t.error(err, 'no error')
456
+ }
457
+
458
+ function worker (arg, cb) {
459
+ setImmediate(function () {
460
+ cb(null, true)
461
+ })
462
+ }
463
+ })
464
+
465
+ test('kill', function (t) {
466
+ t.plan(5)
467
+
468
+ var queue = buildQueue(worker, 1)
469
+ var expected = [1]
470
+
471
+ var predrain = queue.drain
472
+
473
+ queue.drain = function drain () {
474
+ t.fail('drain should never be called')
475
+ }
476
+
477
+ queue.push(1, done)
478
+ queue.push(4, done)
479
+ queue.unshift(3, done)
480
+ queue.unshift(2, done)
481
+ queue.kill()
482
+
483
+ function done (err, result) {
484
+ t.error(err, 'no error')
485
+ setImmediate(function () {
486
+ t.equal(queue.length(), 0, 'no queued tasks')
487
+ t.equal(queue.running(), 0, 'no running tasks')
488
+ t.equal(queue.drain, predrain, 'drain is back to default')
489
+ })
490
+ }
491
+
492
+ function worker (arg, cb) {
493
+ t.equal(expected.shift(), arg, 'tasks come in order')
494
+ setImmediate(function () {
495
+ cb(null, true)
496
+ })
497
+ }
498
+ })
499
+
500
+ test('killAndDrain', function (t) {
501
+ t.plan(6)
502
+
503
+ var queue = buildQueue(worker, 1)
504
+ var expected = [1]
505
+
506
+ var predrain = queue.drain
507
+
508
+ queue.drain = function drain () {
509
+ t.pass('drain has been called')
510
+ }
511
+
512
+ queue.push(1, done)
513
+ queue.push(4, done)
514
+ queue.unshift(3, done)
515
+ queue.unshift(2, done)
516
+ queue.killAndDrain()
517
+
518
+ function done (err, result) {
519
+ t.error(err, 'no error')
520
+ setImmediate(function () {
521
+ t.equal(queue.length(), 0, 'no queued tasks')
522
+ t.equal(queue.running(), 0, 'no running tasks')
523
+ t.equal(queue.drain, predrain, 'drain is back to default')
524
+ })
525
+ }
526
+
527
+ function worker (arg, cb) {
528
+ t.equal(expected.shift(), arg, 'tasks come in order')
529
+ setImmediate(function () {
530
+ cb(null, true)
531
+ })
532
+ }
533
+ })
534
+
535
+ test('pause && idle', function (t) {
536
+ t.plan(11)
537
+
538
+ var queue = buildQueue(worker, 1)
539
+ var worked = false
540
+
541
+ t.notOk(queue.paused, 'it should not be paused')
542
+ t.ok(queue.idle(), 'should be idle')
543
+
544
+ queue.pause()
545
+
546
+ queue.push(42, function (err, result) {
547
+ t.error(err, 'no error')
548
+ t.equal(result, true, 'result matches')
549
+ })
550
+
551
+ t.notOk(worked, 'it should be paused')
552
+ t.ok(queue.paused, 'it should be paused')
553
+ t.notOk(queue.idle(), 'should not be idle')
554
+
555
+ queue.resume()
556
+
557
+ t.notOk(queue.paused, 'it should not be paused')
558
+ t.notOk(queue.idle(), 'it should not be idle')
559
+
560
+ function worker (arg, cb) {
561
+ t.equal(arg, 42)
562
+ worked = true
563
+ process.nextTick(cb.bind(null, null, true))
564
+ process.nextTick(function () {
565
+ t.ok(queue.idle(), 'is should be idle')
566
+ })
567
+ }
568
+ })
569
+
570
+ test('push without cb', function (t) {
571
+ t.plan(1)
572
+
573
+ var queue = buildQueue(worker, 1)
574
+
575
+ queue.push(42)
576
+
577
+ function worker (arg, cb) {
578
+ t.equal(arg, 42)
579
+ cb()
580
+ }
581
+ })
582
+
583
+ test('unshift without cb', function (t) {
584
+ t.plan(1)
585
+
586
+ var queue = buildQueue(worker, 1)
587
+
588
+ queue.unshift(42)
589
+
590
+ function worker (arg, cb) {
591
+ t.equal(arg, 42)
592
+ cb()
593
+ }
594
+ })
595
+
596
+ test('push with worker throwing error', function (t) {
597
+ t.plan(5)
598
+ var q = buildQueue(function (task, cb) {
599
+ cb(new Error('test error'), null)
600
+ }, 1)
601
+ q.error(function (err, task) {
602
+ t.ok(err instanceof Error, 'global error handler should catch the error')
603
+ t.match(err.message, /test error/, 'error message should be "test error"')
604
+ t.equal(task, 42, 'The task executed should be passed')
605
+ })
606
+ q.push(42, function (err) {
607
+ t.ok(err instanceof Error, 'push callback should catch the error')
608
+ t.match(err.message, /test error/, 'error message should be "test error"')
609
+ })
610
+ })
611
+
612
+ test('unshift with worker throwing error', function (t) {
613
+ t.plan(5)
614
+ var q = buildQueue(function (task, cb) {
615
+ cb(new Error('test error'), null)
616
+ }, 1)
617
+ q.error(function (err, task) {
618
+ t.ok(err instanceof Error, 'global error handler should catch the error')
619
+ t.match(err.message, /test error/, 'error message should be "test error"')
620
+ t.equal(task, 42, 'The task executed should be passed')
621
+ })
622
+ q.unshift(42, function (err) {
623
+ t.ok(err instanceof Error, 'unshift callback should catch the error')
624
+ t.match(err.message, /test error/, 'error message should be "test error"')
625
+ })
626
+ })
627
+
628
+ test('pause/resume should trigger drain event', function (t) {
629
+ t.plan(1)
630
+
631
+ var queue = buildQueue(worker, 1)
632
+ queue.pause()
633
+ queue.drain = function () {
634
+ t.pass('drain should be called')
635
+ }
636
+
637
+ function worker (arg, cb) {
638
+ cb(null, true)
639
+ }
640
+
641
+ queue.resume()
642
+ })
643
+
644
+ test('paused flag', function (t) {
645
+ t.plan(2)
646
+
647
+ var queue = buildQueue(function (arg, cb) {
648
+ cb(null)
649
+ }, 1)
650
+ t.equal(queue.paused, false)
651
+ queue.pause()
652
+ t.equal(queue.paused, true)
653
+ })
654
+
655
+ test('abort', function (t) {
656
+ t.plan(11)
657
+
658
+ var queue = buildQueue(worker, 1)
659
+ var abortedTasks = 0
660
+
661
+ var predrain = queue.drain
662
+
663
+ queue.drain = function drain () {
664
+ t.fail('drain should never be called')
665
+ }
666
+
667
+ // Pause queue to prevent tasks from starting
668
+ queue.pause()
669
+ queue.push(1, doneAborted)
670
+ queue.push(4, doneAborted)
671
+ queue.unshift(3, doneAborted)
672
+ queue.unshift(2, doneAborted)
673
+
674
+ // Abort all queued tasks
675
+ queue.abort()
676
+
677
+ // Verify state after abort
678
+ t.equal(queue.length(), 0, 'no queued tasks after abort')
679
+ t.equal(queue.drain, predrain, 'drain is back to default')
680
+
681
+ setImmediate(function () {
682
+ t.equal(abortedTasks, 4, 'all queued tasks were aborted')
683
+ })
684
+
685
+ function doneAborted (err) {
686
+ t.ok(err, 'error is present')
687
+ t.equal(err.message, 'abort', 'error message is abort')
688
+ abortedTasks++
689
+ }
690
+
691
+ function worker (arg, cb) {
692
+ t.fail('worker should not be called')
693
+ setImmediate(function () {
694
+ cb(null, true)
695
+ })
696
+ }
697
+ })
698
+
699
+ test('abort with error handler', function (t) {
700
+ t.plan(7)
701
+
702
+ var queue = buildQueue(worker, 1)
703
+ var errorHandlerCalled = 0
704
+
705
+ queue.error(function (err, task) {
706
+ t.equal(err.message, 'abort', 'error handler receives abort error')
707
+ t.ok(task !== null, 'error handler receives task value')
708
+ errorHandlerCalled++
709
+ })
710
+
711
+ // Pause queue to prevent tasks from starting
712
+ queue.pause()
713
+ queue.push(1, doneAborted)
714
+ queue.push(2, doneAborted)
715
+
716
+ // Abort all queued tasks
717
+ queue.abort()
718
+
719
+ setImmediate(function () {
720
+ t.equal(errorHandlerCalled, 2, 'error handler called for all aborted tasks')
721
+ })
722
+
723
+ function doneAborted (err) {
724
+ t.ok(err, 'callback receives error')
725
+ }
726
+
727
+ function worker (arg, cb) {
728
+ t.fail('worker should not be called')
729
+ setImmediate(function () {
730
+ cb(null, true)
731
+ })
732
+ }
733
+ })