{"record":{"id":"73d515f200b64498","repo":"denoland/deno","slug":"err-invalid-arg-value-73d515","errorCode":"ERR_INVALID_ARG_VALUE","errorMessage":"The property 'strategy.highWaterMark' is invalid. Received ${inspected}","messagePattern":"The property 'strategy\\.highWaterMark' is invalid\\. Received (.+?)","errorType":"error_code","errorClass":"RangeError","httpStatus":null,"severity":"error","filePath":"ext/node/polyfills/internal/webstreams/util.js","lineNumber":50,"sourceCode":"\nconst webStreams = core.loadExtScript(\"ext:deno_web/06_streams.js\");\n\nconst kState = webStreams.kNodeWebStreamsState;\nconst kType = webStreams.kNodeWebStreamsType;\n\nconst AsyncIterator = {\n  __proto__: Object.getPrototypeOf(\n    Object.getPrototypeOf(Object.getPrototypeOf((async function* () {})())),\n  ),\n  next: undefined,\n  return: undefined,\n};\n\nfunction extractHighWaterMark(value, defaultHWM) {\n  if (value === undefined) return defaultHWM;\n  value = +value;\n  if (typeof value !== \"number\" || NumberIsNaN(value) || value < 0) {\n    throw new ERR_INVALID_ARG_VALUE.RangeError(\n      \"strategy.highWaterMark\",\n      value,\n    );\n  }\n  return value;\n}\n\nfunction extractSizeAlgorithm(size) {\n  if (size === undefined) return () => 1;\n  validateFunction(size, \"strategy.size\");\n  return size;\n}\n\nfunction customInspect(depth, options, name, data) {\n  if (depth < 0) return this;\n  const opts = {\n    ...options,\n    depth: options.depth == null ? null : options.depth - 1,","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/denoland/deno/blob/9ad36f7a2cce60488e6ec52283efb32efddaf93a/ext/node/polyfills/internal/webstreams/util.js#L32-L68","documentation":"Shared web-stream queuing-strategy validation in ext/node/polyfills/internal/webstreams/util.js, used by node:stream/web stream constructors and the node adapters. extractHighWaterMark coerces the value with unary + and requires the result to be a number that is not NaN and not negative; otherwise it throws ERR_INVALID_ARG_VALUE as a RangeError. Strings like '10' pass via coercion, while {} or 'abc' coerce to NaN and throw.","triggerScenarios":"new ReadableStream(..., { highWaterMark: -1 }); { highWaterMark: NaN } from arithmetic on config values; { highWaterMark: 'abc' } or { highWaterMark: {} } which coerce to NaN; TransformStream(..., { highWaterMark: Number('auto') }).","commonSituations":"HWM computed from user config or environment variables that can be unset (NaN), zero-crossing math producing negatives, or porting code that passed strings/objects assuming strict validation would coerce them.","solutions":["Pass a non-negative finite number (0 is valid) or omit highWaterMark entirely to take the default","Clamp computed values: highWaterMark: Math.max(0, Number(value) || 0)","Pre-check with Number.isFinite(Number(value)) && Number(value) >= 0 before constructing the strategy"],"exampleFix":"// before\nnew ReadableStream(src, { highWaterMark: config.hwm }); // config.hwm = -1 or 'abc'\n\n// after\nconst hwm = Number(config.hwm);\nnew ReadableStream(src, {\n  highWaterMark: Number.isFinite(hwm) && hwm >= 0 ? hwm : undefined,\n});","handlingStrategy":"validation","validationCode":"const hwm = Number(strategy?.highWaterMark);\nconst safeHwm = Number.isFinite(hwm) && hwm >= 0 ? hwm : undefined;\nconst rs = new ReadableStream(src, { ...strategy, highWaterMark: safeHwm });","typeGuard":"function isValidHighWaterMark(v: unknown): v is number {\n  const n = Number(v);\n  return typeof n === 'number' && !Number.isNaN(n) && n >= 0 && n !== Infinity || v === undefined;\n}","tryCatchPattern":null,"preventionTips":["Clamp config-derived HWM: Math.max(0, Number(value) || 0)","Treat 'not set' as undefined — never null, NaN, or an empty string","Remember strings like '10' coerce successfully but objects and 'abc' become NaN"],"tags":["web-streams","queuing-strategy","validation","backpressure"],"backgroundTag":"invalid-high-water-mark","analyzedSha":"9ad36f7a2cce60488e6ec52283efb32efddaf93a","analyzedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-08-31T09:17:48.483Z"}