Skip to content

Commit 2ea0393

Browse files
committed
fixup! fix: more generic BlockCodec, remove encoder & decoder props
1 parent 7cbce18 commit 2ea0393

File tree

4 files changed

+42
-5
lines changed

4 files changed

+42
-5
lines changed

src/codecs/codec.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
/**
44
* @template {number} Code
55
* @template T
6-
* @typedef {import('./interface').BlockCodec<Code, T>} BlockCodec
6+
* @typedef {import('./interface').CodecFeature<Code, T>} CodecFeature
77
*/
8+
89
/**
910
* @template {number} Code
1011
* @template T
1112
* @typedef {import('./interface').BlockEncoder<Code, T>} BlockEncoder
1213
*/
14+
1315
/**
1416
* @template {number} Code
1517
* @template T
@@ -25,7 +27,7 @@
2527
* @param {Code} options.code
2628
* @param {(data:T) => Uint8Array} options.encode
2729
* @param {(bytes:Uint8Array) => T} options.decode
28-
* @returns {BlockCodec<Code, T> & { encoder: BlockEncoder<Code, T>, decoder: BlockDecoder<Code, T> }}
30+
* @returns {CodecFeature<Code, T>}
2931
*/
3032
export const codec = ({ name, code, decode, encode }) => {
3133
const decoder = new Decoder(name, code, decode)

src/codecs/interface.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ export interface BlockDecoder<Code extends number, T> {
2222
*/
2323
export interface BlockCodec<Code extends number, T> extends BlockEncoder<Code, T>, BlockDecoder<Code, T> {}
2424

25+
/**
26+
* A roll-up type from which you can derive any of `BlockCodec`,
27+
* `BlockEncoder` or `BlockDecoder`. Intended as the interface exported
28+
* by codec implementations.
29+
*/
30+
export interface CodecFeature<Code extends number, T> extends BlockCodec<Code, T> {
31+
encoder: BlockEncoder<Code, T>,
32+
decoder: BlockDecoder<Code, T>
33+
}
2534

2635
// This just a hack to retain type information about the data that
2736
// is encoded `T` Because it's a union `data` field is never going

src/codecs/json.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
import { codec } from './codec.js'
44

5+
/**
6+
* @template {number} Code
7+
* @template T
8+
* @typedef {import('./interface').CodecFeature<Code, T>} CodecFeature
9+
*/
10+
11+
/**
12+
* @template T
13+
* @type {CodecFeature<0x0200, T>}
14+
*/
515
export const { name, code, decode, encode, decoder, encoder } = codec({
616
name: 'json',
717
code: 0x0200,

src/codecs/raw.js

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,25 @@
33
import { coerce } from '../bytes.js'
44
import { codec } from './codec.js'
55

6+
/**
7+
* @template {number} Code
8+
* @template T
9+
* @typedef {import('./interface').CodecFeature<Code, T>} CodecFeature
10+
*/
11+
12+
/**
13+
* @param {Uint8Array} bytes
14+
* @returns {Uint8Array}
15+
*/
16+
const raw = (bytes) => coerce(bytes)
17+
18+
/**
19+
* @template T
20+
* @type {CodecFeature<0x55, Uint8Array>}
21+
*/
622
export const { name, code, decode, encode, decoder, encoder } = codec({
723
name: 'raw',
8-
code: 85,
9-
decode: coerce,
10-
encode: coerce
24+
code: 0x55,
25+
decode: raw,
26+
encode: raw
1127
})

0 commit comments

Comments
 (0)