3
3
import CID from './cid.js'
4
4
5
5
/**
6
+ * @template {number} Code
6
7
* @template T
7
8
* @class
8
9
*/
9
10
export default class Block {
10
11
/**
11
12
* @param {CID|null } cid
12
- * @param {number } code
13
+ * @param {Code } code
13
14
* @param {T } data
14
15
* @param {Uint8Array } bytes
15
16
* @param {BlockConfig } config
@@ -56,30 +57,33 @@ export default class Block {
56
57
}
57
58
58
59
/**
60
+ * @template {number} Code
59
61
* @template T
60
- * @param {Encoder<T> } codec
62
+ * @param {Encoder<Code, T> } codec
61
63
* @param {BlockConfig } options
62
64
*/
63
65
static encoder ( codec , options ) {
64
66
return new BlockEncoder ( codec , options )
65
67
}
66
68
67
69
/**
70
+ * @template {number} Code
68
71
* @template T
69
- * @param {Decoder<T> } codec
72
+ * @param {Decoder<Code, T> } codec
70
73
* @param {BlockConfig } options
71
74
*/
72
75
static decoder ( codec , options ) {
73
76
return new BlockDecoder ( codec , options )
74
77
}
75
78
76
79
/**
80
+ * @template {number} Code
77
81
* @template T
78
82
* @param {Object } codec
79
- * @param {Encoder<T> } codec.encoder
80
- * @param {Decoder<T> } codec.decoder
81
- * @param {Object } [ options]
82
- * @returns {BlockCodec<T> }
83
+ * @param {Encoder<Code, T> } codec.encoder
84
+ * @param {Decoder<Code, T> } codec.decoder
85
+ * @param {BlockConfig } options
86
+ * @returns {BlockCodec<Code, T> }
83
87
*/
84
88
85
89
static codec ( { encoder, decoder } , options ) {
@@ -178,12 +182,13 @@ const createCID = async (hasher, bytes, code) => {
178
182
}
179
183
180
184
/**
185
+ * @template {number} Code
181
186
* @template T
182
187
*/
183
188
class BlockCodec {
184
189
/**
185
- * @param {Encoder<T> } encoder
186
- * @param {Decoder<T> } decoder
190
+ * @param {Encoder<Code, T> } encoder
191
+ * @param {Decoder<Code, T> } decoder
187
192
* @param {BlockConfig } config
188
193
*/
189
194
@@ -195,17 +200,17 @@ class BlockCodec {
195
200
196
201
/**
197
202
* @param {Uint8Array } bytes
198
- * @param {BlockConfig } [options]
199
- * @returns {Block<T> }
203
+ * @param {Partial< BlockConfig> } [options]
204
+ * @returns {Block<Code, T> }
200
205
*/
201
206
decode ( bytes , options ) {
202
207
return this . decoder . decode ( bytes , { ...this . config , ...options } )
203
208
}
204
209
205
210
/**
206
211
* @param {T } data
207
- * @param {BlockConfig } [options]
208
- * @returns {Block<T> }
212
+ * @param {Partial< BlockConfig> } [options]
213
+ * @returns {Block<Code, T> }
209
214
*/
210
215
encode ( data , options ) {
211
216
return this . encoder . encode ( data , { ...this . config , ...options } )
@@ -214,11 +219,12 @@ class BlockCodec {
214
219
215
220
/**
216
221
* @class
222
+ * @template {number} Code
217
223
* @template T
218
224
*/
219
225
class BlockEncoder {
220
226
/**
221
- * @param {Encoder<T> } codec
227
+ * @param {Encoder<Code, T> } codec
222
228
* @param {BlockConfig } config
223
229
*/
224
230
constructor ( codec , config ) {
@@ -228,8 +234,8 @@ class BlockEncoder {
228
234
229
235
/**
230
236
* @param {T } data
231
- * @param {BlockConfig } [options]
232
- * @returns {Block }
237
+ * @param {Partial< BlockConfig> } [options]
238
+ * @returns {Block<Code, T> }
233
239
*/
234
240
encode ( data , options ) {
235
241
const { codec } = this
@@ -240,11 +246,12 @@ class BlockEncoder {
240
246
241
247
/**
242
248
* @class
249
+ * @template {number} Code
243
250
* @template T
244
251
*/
245
252
class BlockDecoder {
246
253
/**
247
- * @param {Decoder<T> } codec
254
+ * @param {Decoder<Code, T> } codec
248
255
* @param {BlockConfig } config
249
256
*/
250
257
constructor ( codec , config ) {
@@ -255,7 +262,7 @@ class BlockDecoder {
255
262
/**
256
263
* @param {Uint8Array } bytes
257
264
* @param {Partial<BlockConfig> } [options]
258
- * @returns {Block }
265
+ * @returns {Block<Code, T> }
259
266
*/
260
267
decode ( bytes , options ) {
261
268
const data = this . codec . decode ( bytes )
@@ -283,16 +290,19 @@ class BlockDecoder {
283
290
*/
284
291
285
292
/**
293
+ * @template {number} Code
286
294
* @template T
287
- * @typedef {import('./codecs/interface').BlockEncoder<T> } Encoder
295
+ * @typedef {import('./codecs/interface').BlockEncoder<Code, T> } Encoder
288
296
*/
289
297
290
298
/**
299
+ * @template {number} Code
291
300
* @template T
292
- * @typedef {import('./codecs/interface').BlockDecoder } Decoder
301
+ * @typedef {import('./codecs/interface').BlockDecoder<Code, T> } Decoder
293
302
*/
294
303
295
304
/**
305
+ * @template {number} Code
296
306
* @template T
297
- * @typedef {import('./codecs/interface').BlockCodec } Codec
307
+ * @typedef {import('./codecs/interface').BlockCodec<Code, T> } Codec
298
308
*/
0 commit comments