wangzhibo
2026-05-09 53418655c061ac26f66058253f39200aced1ab1d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
'use strict'
 
const enqueue = require('./enqueue')
const flush = require('./flush')
const purge = require('./purge')
 
/**
 * Builds a request queue object and returns it.
 *
 * @param {object} [options]
 * @param {integer} [options.size] Maximum size of the request queue. Must be
 * a number greater than `0` if supplied. Default: `Infinity`.
 * @param {integer} [options.timeout] Time in milliseconds a queue has to
 * complete the requests it contains.
 *
 * @returns {object} A queue instance.
 */
module.exports = function requestQueueFactory (options) {
  const opts = Object.assign({}, options)
  const q = {
    size: (opts.size > 0) ? opts.size : Infinity,
    timeout: (opts.timeout > 0) ? opts.timeout : 0,
    _queue: new Set(),
    _timer: null,
    _frozen: false
  }
 
  q.enqueue = enqueue.bind(q)
  q.flush = flush.bind(q)
  q.purge = purge.bind(q)
  q.freeze = function freeze () {
    this._frozen = true
  }
  q.thaw = function thaw () {
    this._frozen = false
  }
 
  return q
}