state.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. 'use strict'
  2. const { MathFloor, NumberIsInteger } = require('../../ours/primordials')
  3. const { validateInteger } = require('../validators')
  4. const { ERR_INVALID_ARG_VALUE } = require('../../ours/errors').codes
  5. let defaultHighWaterMarkBytes = 16 * 1024
  6. let defaultHighWaterMarkObjectMode = 16
  7. function highWaterMarkFrom(options, isDuplex, duplexKey) {
  8. return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null
  9. }
  10. function getDefaultHighWaterMark(objectMode) {
  11. return objectMode ? defaultHighWaterMarkObjectMode : defaultHighWaterMarkBytes
  12. }
  13. function setDefaultHighWaterMark(objectMode, value) {
  14. validateInteger(value, 'value', 0)
  15. if (objectMode) {
  16. defaultHighWaterMarkObjectMode = value
  17. } else {
  18. defaultHighWaterMarkBytes = value
  19. }
  20. }
  21. function getHighWaterMark(state, options, duplexKey, isDuplex) {
  22. const hwm = highWaterMarkFrom(options, isDuplex, duplexKey)
  23. if (hwm != null) {
  24. if (!NumberIsInteger(hwm) || hwm < 0) {
  25. const name = isDuplex ? `options.${duplexKey}` : 'options.highWaterMark'
  26. throw new ERR_INVALID_ARG_VALUE(name, hwm)
  27. }
  28. return MathFloor(hwm)
  29. }
  30. // Default value
  31. return getDefaultHighWaterMark(state.objectMode)
  32. }
  33. module.exports = {
  34. getHighWaterMark,
  35. getDefaultHighWaterMark,
  36. setDefaultHighWaterMark
  37. }