codec.ts
1 import { Decoder, Encoder } from "cbor-x"; 2 3 const options = { 4 variableMapSize: true, 5 useRecords: false, 6 mapsAsObjects: false, 7 tagUint8Array: false, 8 } as const; 9 10 const encoder = new Encoder(options); 11 const decoder = new Decoder(options); 12 13 export type CodecKey = 14 | string 15 | number 16 | bigint 17 | ArrayLike<number>; 18 19 export type CodecValue = 20 | CodecKey 21 | Date 22 | null 23 | boolean 24 | ArrayBufferLike 25 | Array<CodecValue> 26 | Map<CodecKey, CodecValue>; 27 28 export type Path = CodecKey[]; 29 30 export function encode(val: CodecValue) { 31 return new Uint8Array(encoder.encode(val)); 32 } 33 34 export function decode(data: Uint8Array): CodecValue { 35 return decoder.decode(data); 36 }