diff --git a/library/src/actions/maxBytes/maxBytes.ts b/library/src/actions/maxBytes/maxBytes.ts index a91872ab4..d00ff8b0a 100644 --- a/library/src/actions/maxBytes/maxBytes.ts +++ b/library/src/actions/maxBytes/maxBytes.ts @@ -105,6 +105,8 @@ export function maxBytes( number, ErrorMessage> | undefined > { + let cachedTextEncoder: TextEncoder; + let cachedUint8Array: Uint8Array; return { kind: 'validation', type: 'max_bytes', @@ -115,8 +117,10 @@ export function maxBytes( message, _run(dataset, config) { if (dataset.typed) { - const length = new TextEncoder().encode(dataset.value).length; - if (length > this.requirement) { + cachedTextEncoder ??= new TextEncoder() + cachedUint8Array ??= new Uint8Array(requirement + 4) + const written = cachedTextEncoder.encodeInto(dataset.value, cachedUint8Array).written; + if (written > this.requirement) { _addIssue(this, 'bytes', dataset, config, { received: `${length}`, });