/ packages / utils / codec.ts
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  }