All files / cbor / _common.ts

63.64% Branches 7/11
77.42% Lines 24/31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
 
 
 
x45
x55
x55
 
x55
x55
 
 
 
 
 
 
 
 
 
x45
x45
x45
 
x612
x612
x1163
x1163
x1704
 
 
x1163
x1164
x1163
x1172
x1163
x1163
x964
 
 
 
 
x612
x628
x612
x612





I





















I








I

I




// Copyright 2018-2025 the Deno authors. MIT license.

export type ReleaseLock = (value?: unknown) => void;

export function numberToArray(bytes: number, x: number | bigint): Uint8Array {
  const view = new DataView(new ArrayBuffer(8));
  if (typeof x === "bigint" || x % 1 === 0) view.setBigUint64(0, BigInt(x));
  else view.setFloat64(0, x);
  return new Uint8Array(view.buffer.slice(-bytes));
}

export function arrayToNumber(
  buffer: ArrayBufferLike & { BYTES_PER_ELEMENT?: never },
  isInteger: true,
): number | bigint;
export function arrayToNumber(
  buffer: ArrayBufferLike & { BYTES_PER_ELEMENT?: never },
  isInteger: false,
): number;
export function arrayToNumber(
  buffer: ArrayBufferLike & { BYTES_PER_ELEMENT?: never },
  isInteger: boolean,
): number | bigint {
  const view = new DataView(buffer);
  if (isInteger) {
    switch (buffer.byteLength) {
      case 1:
        return view.getUint8(0);
      case 2:
        return view.getUint16(0);
      case 4:
        return view.getUint32(0);
      default:
        return view.getBigUint64(0);
    }
  }
  switch (buffer.byteLength) {
    case 2:
      return view.getFloat16(0);
    case 4:
      return view.getFloat32(0);
    default:
      return view.getFloat64(0);
  }
}