diff options
Diffstat (limited to 'ext/node/polyfills')
-rw-r--r-- | ext/node/polyfills/buffer.ts | 2 | ||||
-rw-r--r-- | ext/node/polyfills/internal/buffer.mjs | 49 | ||||
-rw-r--r-- | ext/node/polyfills/internal/errors.ts | 7 |
3 files changed, 58 insertions, 0 deletions
diff --git a/ext/node/polyfills/buffer.ts b/ext/node/polyfills/buffer.ts index 5925475c4..c5a910cb4 100644 --- a/ext/node/polyfills/buffer.ts +++ b/ext/node/polyfills/buffer.ts @@ -7,6 +7,8 @@ export { Buffer, constants, default, + isAscii, + isUtf8, kMaxLength, kStringMaxLength, SlowBuffer, diff --git a/ext/node/polyfills/internal/buffer.mjs b/ext/node/polyfills/internal/buffer.mjs index 5c76a21a5..0521c56aa 100644 --- a/ext/node/polyfills/internal/buffer.mjs +++ b/ext/node/polyfills/internal/buffer.mjs @@ -6,6 +6,7 @@ // deno-lint-ignore-file prefer-primordials import { core } from "ext:core/mod.js"; +import { op_is_ascii, op_is_utf8 } from "ext:core/ops"; import { TextDecoder, TextEncoder } from "ext:deno_web/08_text_encoding.js"; import { codes } from "ext:deno_node/internal/error_codes.ts"; @@ -26,10 +27,12 @@ import { import { isAnyArrayBuffer, isArrayBufferView, + isTypedArray, } from "ext:deno_node/internal/util/types.ts"; import { normalizeEncoding } from "ext:deno_node/internal/util.mjs"; import { validateBuffer } from "ext:deno_node/internal/validators.mjs"; import { isUint8Array } from "ext:deno_node/internal/util/types.ts"; +import { ERR_INVALID_STATE } from "ext:deno_node/internal/errors.ts"; import { forgivingBase64Encode, forgivingBase64UrlEncode, @@ -2536,12 +2539,58 @@ export function writeU_Int24LE(buf, value, offset, min, max) { return offset; } +export function isUtf8(input) { + if (isTypedArray(input)) { + if (input.buffer.detached) { + throw new ERR_INVALID_STATE("Cannot validate on a detached buffer"); + } + return op_is_utf8(input); + } + + if (isAnyArrayBuffer(input)) { + if (input.detached) { + throw new ERR_INVALID_STATE("Cannot validate on a detached buffer"); + } + return op_is_utf8(new Uint8Array(input)); + } + + throw new codes.ERR_INVALID_ARG_TYPE("input", [ + "ArrayBuffer", + "Buffer", + "TypedArray", + ], input); +} + +export function isAscii(input) { + if (isTypedArray(input)) { + if (input.buffer.detached) { + throw new ERR_INVALID_STATE("Cannot validate on a detached buffer"); + } + return op_is_ascii(input); + } + + if (isAnyArrayBuffer(input)) { + if (input.detached) { + throw new ERR_INVALID_STATE("Cannot validate on a detached buffer"); + } + return op_is_ascii(new Uint8Array(input)); + } + + throw new codes.ERR_INVALID_ARG_TYPE("input", [ + "ArrayBuffer", + "Buffer", + "TypedArray", + ], input); +} + export default { atob, btoa, Blob, Buffer, constants, + isAscii, + isUtf8, kMaxLength, kStringMaxLength, SlowBuffer, diff --git a/ext/node/polyfills/internal/errors.ts b/ext/node/polyfills/internal/errors.ts index c3aeff8b2..a16656087 100644 --- a/ext/node/polyfills/internal/errors.ts +++ b/ext/node/polyfills/internal/errors.ts @@ -2564,6 +2564,12 @@ export class ERR_HTTP_SOCKET_ASSIGNED extends NodeError { } } +export class ERR_INVALID_STATE extends NodeError { + constructor(message: string) { + super("ERR_INVALID_STATE", `Invalid state: ${message}`); + } +} + interface UvExceptionContext { syscall: string; path?: string; @@ -2824,6 +2830,7 @@ export default { ERR_INVALID_RETURN_PROPERTY, ERR_INVALID_RETURN_PROPERTY_VALUE, ERR_INVALID_RETURN_VALUE, + ERR_INVALID_STATE, ERR_INVALID_SYNC_FORK_INPUT, ERR_INVALID_THIS, ERR_INVALID_TUPLE, |