```ts
/**
 * Decodes a list of byte values into a sequence of unsigned base-128 varints.
 * @param data - An array of integers representing byte values.
 * @returns An array of decoded numbers.
 */
export function decodeVarints(data: number[]): number[] {
  if (!Array.isArray(data)) {
    throw new Error("Input must be an array");
  }

  const result: number[] = [];
  let currentNumber = 0;
  let shift = 0;

  for (let i = 0; i < data.length; i++) {
    const byte = data[i];

    if (
      typeof byte !== "number" ||
      byte < 0 ||
      byte > 255 ||
      !Number.isInteger(byte)
    ) {
      throw new Error("Invalid byte value");
    }

    currentNumber |= (byte & 0x7f) << shift;
    shift += 7;

    if ((byte & 0x80) === 0) {
      // If the high bit is not set, this is the last byte of the current varint
      result.push(currentNumber);
      currentNumber = 0;
      shift = 0;
    } else if (i === data.length - 1) {
      // If the high bit is set but it's the last byte, the encoding is overlong
      throw new Error("Overlong encoding");
    }
  }

  if (shift !== 0) {
    // If there are remaining bits to shift, the encoding was incomplete
    throw new Error("Incomplete varint encoding");
  }

  return result;
}
```