All files / src/typers asyncRecord.ts

100% Statements 14/14
100% Branches 0/0
100% Functions 3/3
100% Lines 12/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25    19x       1x   1x 1x 1x 2x 2x       1x 1x 1x 2x   1x      
import { AsyncRecordMaker, TypeOf } from "../types";
 
export const asyncRecord: AsyncRecordMaker = (
  typer,
  header,
  keyer
) => ({
  async encode(ctx, data) {
    const { length } = Object.keys(data);
    header.encode(ctx, length);
    for (const key in data) {
      keyer.encode(ctx, key);
      await typer.encode(ctx, data[key]);
    }
  },
  async decode(ctx) {
    const length = header.decode(ctx);
    const data: TypeOf<typeof this> = {};
    for (let i = 0; i < length; i++) {
      data[keyer.decode(ctx)] = await typer.decode(ctx);
    }
    return data;
  }
});