// Copyright 2021-2024 Buf Technologies, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. const symbol = Symbol.for("@bufbuild/protobuf/text-encoding"); /** * Protobuf-ES requires the Text Encoding API to convert UTF-8 from and to * binary. This WHATWG API is widely available, but it is not part of the * ECMAScript standard. On runtimes where it is not available, use this * function to provide your own implementation. * * Note that the Text Encoding API does not provide a way to validate UTF-8. * Our implementation falls back to use encodeURIComponent(). */ export function configureTextEncoding(textEncoding) { globalThis[symbol] = textEncoding; } export function getTextEncoding() { if (globalThis[symbol] == undefined) { const te = new globalThis.TextEncoder(); const td = new globalThis.TextDecoder(); globalThis[symbol] = { encodeUtf8(text) { return te.encode(text); }, decodeUtf8(bytes) { return td.decode(bytes); }, checkUtf8(text) { try { encodeURIComponent(text); return true; } catch (e) { return false; } }, }; } return globalThis[symbol]; }