std/encoding/_validate_binary_like.ts

30 lines
819 B
TypeScript
Raw Normal View History

// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
const encoder = new TextEncoder();
function getTypeName(value: unknown): string {
const type = typeof value;
if (type !== "object") {
return type;
} else if (value === null) {
return "null";
} else {
return value?.constructor?.name ?? "object";
}
}
export function validateBinaryLike(source: unknown): Uint8Array {
if (typeof source === "string") {
return encoder.encode(source);
} else if (source instanceof Uint8Array) {
return source;
} else if (source instanceof ArrayBuffer) {
return new Uint8Array(source);
}
throw new TypeError(
`Cannot validate the input as it must be a Uint8Array, a string, or an ArrayBuffer: received a value of the type ${
getTypeName(source)
}`,
);
}