40 lines
1000 B
JavaScript
40 lines
1000 B
JavaScript
|
'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
|
||
|
}
|