index.js 1000 B

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