{"record":{"id":"a9c0c72776266825","repo":"denoland/deno","slug":"err-out-of-range-a9c0c7","errorCode":"ERR_OUT_OF_RANGE","errorMessage":"The value of \"prevValue.user\" is out of range. It must be >= 0 && <= 2^53. Received ${prevValue.user}","messagePattern":"The value of \"prevValue\\.user\" is out of range\\. It must be >= 0 && <= 2\\^53\\. Received (.+?)","errorType":"exception","errorClass":"RangeError","httpStatus":null,"severity":"error","filePath":"ext/node/polyfills/worker_threads.ts","lineNumber":872,"sourceCode":"    this[privateWorkerRef](true);\n  }\n\n  unref() {\n    this[privateWorkerRef](false);\n  }\n\n  cpuUsage(prevValue?: { user: number; system: number }) {\n    if (prevValue != null && !NumberIsNaN(prevValue)) {\n      validateObject(prevValue, \"prevValue\");\n      if (typeof prevValue.user !== \"number\") {\n        throw new ERR_INVALID_ARG_TYPE(\n          \"prevValue.user\",\n          \"number\",\n          prevValue.user,\n        );\n      }\n      if (!NumberIsFinite(prevValue.user) || prevValue.user < 0) {\n        throw new ERR_OUT_OF_RANGE(\n          \"prevValue.user\",\n          \">= 0 && <= 2^53\",\n          prevValue.user,\n        );\n      }\n      if (typeof prevValue.system !== \"number\") {\n        throw new ERR_INVALID_ARG_TYPE(\n          \"prevValue.system\",\n          \"number\",\n          prevValue.system,\n        );\n      }\n      if (!NumberIsFinite(prevValue.system) || prevValue.system < 0) {\n        throw new ERR_OUT_OF_RANGE(\n          \"prevValue.system\",\n          \">= 0 && <= 2^53\",\n          prevValue.system,\n        );","sourceCodeStart":854,"sourceCodeEnd":890,"githubUrl":"https://github.com/denoland/deno/blob/9ad36f7a2cce60488e6ec52283efb32efddaf93a/ext/node/polyfills/worker_threads.ts#L854-L890","documentation":"Beyond the type check, prevValue.user must be a finite non-negative number (Node documents the range 0..2^53). NaN passes typeof but fails Number.isFinite; Infinity and negatives fail the >= 0 test — all throw ERR_OUT_OF_RANGE('prevValue.user', '>= 0 && <= 2^53', value).","triggerScenarios":"worker.cpuUsage({ user: -1, system: 0 }); worker.cpuUsage({ user: NaN, system: 0 }); worker.cpuUsage({ user: Infinity, system: 0 }).","commonSituations":"Hand-computed negative deltas from clock-source mismatches or counter resets; NaN produced by undefined arithmetic when a field is missing; telemetry sentinels like -1.","solutions":["Do not precompute deltas — pass the earlier sample and let the API subtract.","Sanitize before calling: Number.isFinite(v.user) && v.user >= 0, else omit prevValue.","Fix the upstream source producing NaN or negative values."],"exampleFix":"// before\nconst delta = worker.cpuUsage({ user: end.user - start.user, system: 0 }); // can go negative\n\n// after\nconst delta = worker.cpuUsage(start); // pass the earlier sample itself","handlingStrategy":"validation","validationCode":"const usable =\n  prev != null && Number.isFinite(prev.user) && prev.user >= 0 &&\n  Number.isFinite(prev.system) && prev.system >= 0;\nconst delta = worker.cpuUsage(usable ? prev : undefined);","typeGuard":"const isRangeOkCpuSample = (v: { user: number; system: number }) =>\n  Number.isFinite(v.user) && v.user >= 0 && Number.isFinite(v.system) && v.system >= 0;","tryCatchPattern":null,"preventionTips":["Never subtract timestamps yourself before calling cpuUsage.","Reject -1/NaN sentinels when ingesting metrics from other systems.","Unit-test boundary values (0, 2^53) once per wrapper."],"tags":["worker-threads","cpu-usage","range","validation"],"backgroundTag":"number-out-of-range","analyzedSha":"9ad36f7a2cce60488e6ec52283efb32efddaf93a","analyzedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}