diff options
author | snek <the@snek.dev> | 2024-05-21 15:50:59 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-21 15:50:59 -0700 |
commit | 8f2d17140468512372ccd3aeebb0d505c607b977 (patch) | |
tree | b8a4e2d10a0cd3121d637e399b111b0c3dd8b32a /ext/node/polyfills/internal/buffer.mjs | |
parent | db82e8b557c9836481618a73cec7c014903ff256 (diff) |
feat(node): buffer isUtf8/isAscii (#23928)
Fixes: https://github.com/denoland/deno/issues/23657
Implements `isUtf8` and `isAscii` as ops.
Diffstat (limited to 'ext/node/polyfills/internal/buffer.mjs')
-rw-r--r-- | ext/node/polyfills/internal/buffer.mjs | 49 |
1 files changed, 49 insertions, 0 deletions
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, |