UNPKG

string-byte-slice

Version:
53 lines (33 loc) 1.14 kB
import{getByteEnd,getByteStart}from"./bytes.js"; export const textEncoderSlice=(input,byteStart,byteEnd)=>{ const{textEncoder,textDecoder}=getEncoderDecoder(); const buffer=getBuffer(input); const{written}=textEncoder.encodeInto(input,buffer); const byteStartA=getByteStart(buffer,written,byteStart); const byteEndA=getByteEnd(buffer,written,byteEnd); const byteEndB= byteEndA===undefined?written:Math.min(byteEndA,written); const bufferA=buffer.subarray(byteStartA,byteEndB); return textDecoder.decode(bufferA) }; const getEncoderDecoder=()=>{ if(textEncoderCache===undefined){ textEncoderCache=new globalThis.TextEncoder; textDecoderCache=new globalThis.TextDecoder("utf8",{fatal:false}) } return{textEncoder:textEncoderCache,textDecoder:textDecoderCache} }; let textEncoderCache; let textDecoderCache; const getBuffer=(input)=>{ const size=input.length*3; if(size>CACHE_MAX_MEMORY){ return new Uint8Array(size) } if(cachedEncoderBuffer===undefined||cachedEncoderBuffer.length<size){ cachedEncoderBuffer=new Uint8Array(size) } return cachedEncoderBuffer }; export const CACHE_MAX_MEMORY=1e5; let cachedEncoderBuffer;