11cb0ef41Sopenharmony_ci'use strict';
21cb0ef41Sopenharmony_ci
31cb0ef41Sopenharmony_ciconst {
41cb0ef41Sopenharmony_ci  MathFloor,
51cb0ef41Sopenharmony_ci  NumberIsInteger,
61cb0ef41Sopenharmony_ci} = primordials;
71cb0ef41Sopenharmony_ciconst { validateInteger } = require('internal/validators');
81cb0ef41Sopenharmony_ci
91cb0ef41Sopenharmony_ciconst { ERR_INVALID_ARG_VALUE } = require('internal/errors').codes;
101cb0ef41Sopenharmony_ci
111cb0ef41Sopenharmony_cilet defaultHighWaterMarkBytes = 16 * 1024;
121cb0ef41Sopenharmony_cilet defaultHighWaterMarkObjectMode = 16;
131cb0ef41Sopenharmony_ci
141cb0ef41Sopenharmony_cifunction highWaterMarkFrom(options, isDuplex, duplexKey) {
151cb0ef41Sopenharmony_ci  return options.highWaterMark != null ? options.highWaterMark :
161cb0ef41Sopenharmony_ci    isDuplex ? options[duplexKey] : null;
171cb0ef41Sopenharmony_ci}
181cb0ef41Sopenharmony_ci
191cb0ef41Sopenharmony_cifunction getDefaultHighWaterMark(objectMode) {
201cb0ef41Sopenharmony_ci  return objectMode ? defaultHighWaterMarkObjectMode : defaultHighWaterMarkBytes;
211cb0ef41Sopenharmony_ci}
221cb0ef41Sopenharmony_ci
231cb0ef41Sopenharmony_cifunction setDefaultHighWaterMark(objectMode, value) {
241cb0ef41Sopenharmony_ci  validateInteger(value, 'value', 0);
251cb0ef41Sopenharmony_ci  if (objectMode) {
261cb0ef41Sopenharmony_ci    defaultHighWaterMarkObjectMode = value;
271cb0ef41Sopenharmony_ci  } else {
281cb0ef41Sopenharmony_ci    defaultHighWaterMarkBytes = value;
291cb0ef41Sopenharmony_ci  }
301cb0ef41Sopenharmony_ci}
311cb0ef41Sopenharmony_ci
321cb0ef41Sopenharmony_cifunction getHighWaterMark(state, options, duplexKey, isDuplex) {
331cb0ef41Sopenharmony_ci  const hwm = highWaterMarkFrom(options, isDuplex, duplexKey);
341cb0ef41Sopenharmony_ci  if (hwm != null) {
351cb0ef41Sopenharmony_ci    if (!NumberIsInteger(hwm) || hwm < 0) {
361cb0ef41Sopenharmony_ci      const name = isDuplex ? `options.${duplexKey}` : 'options.highWaterMark';
371cb0ef41Sopenharmony_ci      throw new ERR_INVALID_ARG_VALUE(name, hwm);
381cb0ef41Sopenharmony_ci    }
391cb0ef41Sopenharmony_ci    return MathFloor(hwm);
401cb0ef41Sopenharmony_ci  }
411cb0ef41Sopenharmony_ci
421cb0ef41Sopenharmony_ci  // Default value
431cb0ef41Sopenharmony_ci  return getDefaultHighWaterMark(state.objectMode);
441cb0ef41Sopenharmony_ci}
451cb0ef41Sopenharmony_ci
461cb0ef41Sopenharmony_cimodule.exports = {
471cb0ef41Sopenharmony_ci  getHighWaterMark,
481cb0ef41Sopenharmony_ci  getDefaultHighWaterMark,
491cb0ef41Sopenharmony_ci  setDefaultHighWaterMark,
501cb0ef41Sopenharmony_ci};
51