• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

LukaJCB / ts-mls / 19402559753

16 Nov 2025 08:00AM UTC coverage: 94.103% (+0.07%) from 94.037%
19402559753

push

github

web-flow
Encoder overhaul (#141)

* WIP: Overhaul encoders

* Refactor to use new encoder but retain old encodeX functions

1150 of 1278 branches covered (89.98%)

Branch coverage included in aggregate %.

787 of 797 new or added lines in 49 files covered. (98.75%)

2 existing lines in 1 file now uncovered.

6669 of 7031 relevant lines covered (94.85%)

54388.0 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

80.65
/src/codec/tlsEncoder.ts
1
export type Encoder<T> = (t: T) => Uint8Array
2

3
export type BufferEncoder<T> = (t: T) => [number, (offset: number, buffer: ArrayBuffer) => void]
4

5
export function encode<T>(enc: BufferEncoder<T>): Encoder<T> {
1✔
6
  return (t: T) => {
482,934✔
7
    const [len, write] = enc(t)
501,231✔
8
    const buf = new ArrayBuffer(len)
501,231✔
9
    write(0, buf)
501,231✔
10
    return new Uint8Array(buf)
501,231✔
11
  }
501,231✔
12
}
482,934✔
13

14
export function composeBufferEncoder<T, U>(encT: BufferEncoder<T>, encU: BufferEncoder<U>): BufferEncoder<[T, U]> {
1✔
NEW
15
  return ([t, u]) => {
×
NEW
16
    const [lenT, writeT] = encT(t)
×
NEW
17
    const [lenU, writeU] = encU(u)
×
18

NEW
19
    return [
×
NEW
20
      lenT + lenU,
×
NEW
21
      (offset, buffer) => {
×
NEW
22
        writeT(offset, buffer)
×
NEW
23
        writeU(offset + lenT, buffer)
×
NEW
24
      },
×
NEW
25
    ]
×
UNCOV
26
  }
×
UNCOV
27
}
×
28

29
export function contramapBufferEncoder<T, U>(enc: BufferEncoder<T>, f: (u: U) => Readonly<T>): BufferEncoder<U> {
1✔
30
  return (u: U) => enc(f(u))
4,759✔
31
}
4,759✔
32

33
export function contramapBufferEncoders<T extends unknown[], R>(
1✔
34
  encoders: { [K in keyof T]: BufferEncoder<T[K]> },
35,924✔
35
  toTuple: (input: R) => T,
35,924✔
36
): BufferEncoder<R> {
35,924✔
37
  return (value: R) => {
35,924✔
38
    const values = toTuple(value)
1,880,022✔
39
    let totalLength = 0
1,880,022✔
40
    let writeTotal = (_offset: number, _buffer: ArrayBuffer) => {}
1,880,022✔
41
    for (let i = 0; i < encoders.length; i++) {
1,880,022✔
42
      const [len, write] = encoders[i]!(values[i])
6,002,534✔
43
      const oldFunc = writeTotal
6,002,534✔
44
      const currentLen = totalLength
6,002,534✔
45
      writeTotal = (offset: number, buffer: ArrayBuffer) => {
6,002,534✔
46
        oldFunc(offset, buffer)
6,002,534✔
47
        write(offset + currentLen, buffer)
6,002,534✔
48
      }
6,002,534✔
49
      totalLength += len
6,002,534✔
50
    }
6,002,534✔
51
    return [totalLength, writeTotal]
6,002,534✔
52
  }
1,880,022✔
53
}
35,924✔
54

55
export function composeBufferEncoders<T extends unknown[]>(encoders: {
1✔
56
  [K in keyof T]: BufferEncoder<T[K]>
57
}): BufferEncoder<T> {
129,235✔
58
  return (values: T) => contramapBufferEncoders(encoders, (t) => t as T)(values)
129,235✔
59
}
129,235✔
60

61
export const encVoid: [number, (offset: number, buffer: ArrayBuffer) => void] = [0, () => {}]
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc