denoland/deno · error · RangeError

ERR_OUT_OF_RANGE

ERR_OUT_OF_RANGE

Error message

The value of "prevValue.user" is out of range. It must be >= 0 && <= 2^53. Received ${prevValue.user}

What it means

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).

Source

Thrown at ext/node/polyfills/worker_threads.ts:872

    this[privateWorkerRef](true);
  }

  unref() {
    this[privateWorkerRef](false);
  }

  cpuUsage(prevValue?: { user: number; system: number }) {
    if (prevValue != null && !NumberIsNaN(prevValue)) {
      validateObject(prevValue, "prevValue");
      if (typeof prevValue.user !== "number") {
        throw new ERR_INVALID_ARG_TYPE(
          "prevValue.user",
          "number",
          prevValue.user,
        );
      }
      if (!NumberIsFinite(prevValue.user) || prevValue.user < 0) {
        throw new ERR_OUT_OF_RANGE(
          "prevValue.user",
          ">= 0 && <= 2^53",
          prevValue.user,
        );
      }
      if (typeof prevValue.system !== "number") {
        throw new ERR_INVALID_ARG_TYPE(
          "prevValue.system",
          "number",
          prevValue.system,
        );
      }
      if (!NumberIsFinite(prevValue.system) || prevValue.system < 0) {
        throw new ERR_OUT_OF_RANGE(
          "prevValue.system",
          ">= 0 && <= 2^53",
          prevValue.system,
        );

View on GitHub (pinned to 9ad36f7a2c)

Solutions

  1. Do not precompute deltas — pass the earlier sample and let the API subtract.
  2. Sanitize before calling: Number.isFinite(v.user) && v.user >= 0, else omit prevValue.
  3. Fix the upstream source producing NaN or negative values.

Example fix

// before
const delta = worker.cpuUsage({ user: end.user - start.user, system: 0 }); // can go negative

// after
const delta = worker.cpuUsage(start); // pass the earlier sample itself
Defensive patterns

Strategy: validation

Validate before calling

const usable =
  prev != null && Number.isFinite(prev.user) && prev.user >= 0 &&
  Number.isFinite(prev.system) && prev.system >= 0;
const delta = worker.cpuUsage(usable ? prev : undefined);

Type guard

const isRangeOkCpuSample = (v: { user: number; system: number }) =>
  Number.isFinite(v.user) && v.user >= 0 && Number.isFinite(v.system) && v.system >= 0;

Prevention

When it happens

Trigger: worker.cpuUsage({ user: -1, system: 0 }); worker.cpuUsage({ user: NaN, system: 0 }); worker.cpuUsage({ user: Infinity, system: 0 }).

Common situations: 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.

Related errors


AI-assisted analysis of denoland/deno@9ad36f7a2c (2026-08-20). Data as JSON: /api/errors/a9c0c72776266825. Report an issue: GitHub.