Skip to content

Commit 88e29ea

Browse files
Gozalarvagg
authored andcommitted
feat: define Link interface for CID
1 parent a9a9347 commit 88e29ea

34 files changed

+1041
-437
lines changed

.github/workflows/typecheck.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ jobs:
2626
- name: Typecheck
2727
uses: gozala/typescript-error-reporter-action@v1.0.8
2828
with:
29-
project: test/tsconfig.json
29+
project: tsconfig.json

package.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@
4444
"./cid": {
4545
"import": "./src/cid.js"
4646
},
47+
"./link": {
48+
"import": "./src/link.js"
49+
},
4750
"./basics": {
4851
"import": "./src/basics.js"
4952
},
@@ -101,6 +104,12 @@
101104
},
102105
"./codecs/raw": {
103106
"import": "./src/codecs/raw.js"
107+
},
108+
"./interface": {
109+
"import": "./src/interface.js"
110+
},
111+
"./bytes": {
112+
"import": "./src/bytes.js"
104113
}
105114
},
106115
"devDependencies": {

src/bases/base.js

Lines changed: 25 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,8 @@
11
import basex from '../../vendor/base-x.js'
22
import { coerce } from '../bytes.js'
3-
4-
/**
5-
* @typedef {import('./interface').BaseEncoder} BaseEncoder
6-
* @typedef {import('./interface').BaseDecoder} BaseDecoder
7-
* @typedef {import('./interface').BaseCodec} BaseCodec
8-
*/
9-
10-
/**
11-
* @template {string} T
12-
* @typedef {import('./interface').Multibase<T>} Multibase
13-
*/
14-
/**
15-
* @template {string} T
16-
* @typedef {import('./interface').MultibaseEncoder<T>} MultibaseEncoder
17-
*/
3+
// Linter can't see that API is used in types.
4+
// eslint-disable-next-line
5+
import * as API from './interface.js'
186

197
/**
208
* Class represents both BaseEncoder and MultibaseEncoder meaning it
@@ -23,8 +11,8 @@ import { coerce } from '../bytes.js'
2311
* @class
2412
* @template {string} Base
2513
* @template {string} Prefix
26-
* @implements {MultibaseEncoder<Prefix>}
27-
* @implements {BaseEncoder}
14+
* @implements {API.MultibaseEncoder<Prefix>}
15+
* @implements {API.BaseEncoder}
2816
*/
2917
class Encoder {
3018
/**
@@ -40,7 +28,7 @@ class Encoder {
4028

4129
/**
4230
* @param {Uint8Array} bytes
43-
* @returns {Multibase<Prefix>}
31+
* @returns {API.Multibase<Prefix>}
4432
*/
4533
encode (bytes) {
4634
if (bytes instanceof Uint8Array) {
@@ -51,29 +39,18 @@ class Encoder {
5139
}
5240
}
5341

54-
/**
55-
* @template {string} Prefix
56-
* @typedef {import('./interface').MultibaseDecoder<Prefix>} MultibaseDecoder
57-
*/
58-
59-
/**
60-
* @template {string} Prefix
61-
* @typedef {import('./interface').UnibaseDecoder<Prefix>} UnibaseDecoder
62-
*/
63-
6442
/**
6543
* @template {string} Prefix
6644
*/
6745
/**
6846
* Class represents both BaseDecoder and MultibaseDecoder so it could be used
6947
* to decode multibases (with matching prefix) or just base decode strings
7048
* with corresponding base encoding.
71-
* @class
7249
* @template {string} Base
7350
* @template {string} Prefix
74-
* @implements {MultibaseDecoder<Prefix>}
75-
* @implements {UnibaseDecoder<Prefix>}
76-
* @implements {BaseDecoder}
51+
* @implements {API.MultibaseDecoder<Prefix>}
52+
* @implements {API.UnibaseDecoder<Prefix>}
53+
* @implements {API.BaseDecoder}
7754
*/
7855
class Decoder {
7956
/**
@@ -109,7 +86,7 @@ class Decoder {
10986

11087
/**
11188
* @template {string} OtherPrefix
112-
* @param {UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder
89+
* @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder
11390
* @returns {ComposedDecoder<Prefix|OtherPrefix>}
11491
*/
11592
or (decoder) {
@@ -119,30 +96,25 @@ class Decoder {
11996

12097
/**
12198
* @template {string} Prefix
122-
* @typedef {import('./interface').CombobaseDecoder<Prefix>} CombobaseDecoder
123-
*/
124-
125-
/**
126-
* @template {string} Prefix
127-
* @typedef {Record<Prefix, UnibaseDecoder<Prefix>>} Decoders
99+
* @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders
128100
*/
129101

130102
/**
131103
* @template {string} Prefix
132-
* @implements {MultibaseDecoder<Prefix>}
133-
* @implements {CombobaseDecoder<Prefix>}
104+
* @implements {API.MultibaseDecoder<Prefix>}
105+
* @implements {API.CombobaseDecoder<Prefix>}
134106
*/
135107
class ComposedDecoder {
136108
/**
137-
* @param {Record<Prefix, UnibaseDecoder<Prefix>>} decoders
109+
* @param {Decoders<Prefix>} decoders
138110
*/
139111
constructor (decoders) {
140112
this.decoders = decoders
141113
}
142114

143115
/**
144116
* @template {string} OtherPrefix
145-
* @param {UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder
117+
* @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder
146118
* @returns {ComposedDecoder<Prefix|OtherPrefix>}
147119
*/
148120
or (decoder) {
@@ -167,30 +139,25 @@ class ComposedDecoder {
167139
/**
168140
* @template {string} L
169141
* @template {string} R
170-
* @param {UnibaseDecoder<L>|CombobaseDecoder<L>} left
171-
* @param {UnibaseDecoder<R>|CombobaseDecoder<R>} right
142+
* @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left
143+
* @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right
172144
* @returns {ComposedDecoder<L|R>}
173145
*/
174146
export const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({
175-
...(left.decoders || { [/** @type UnibaseDecoder<L> */(left).prefix]: left }),
176-
...(right.decoders || { [/** @type UnibaseDecoder<R> */(right).prefix]: right })
147+
...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),
148+
...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })
177149
}))
178150

179-
/**
180-
* @template T
181-
* @typedef {import('./interface').MultibaseCodec<T>} MultibaseCodec
182-
*/
183-
184151
/**
185152
* @class
186153
* @template {string} Base
187154
* @template {string} Prefix
188-
* @implements {MultibaseCodec<Prefix>}
189-
* @implements {MultibaseEncoder<Prefix>}
190-
* @implements {MultibaseDecoder<Prefix>}
191-
* @implements {BaseCodec}
192-
* @implements {BaseEncoder}
193-
* @implements {BaseDecoder}
155+
* @implements {API.MultibaseCodec<Prefix>}
156+
* @implements {API.MultibaseEncoder<Prefix>}
157+
* @implements {API.MultibaseDecoder<Prefix>}
158+
* @implements {API.BaseCodec}
159+
* @implements {API.BaseEncoder}
160+
* @implements {API.BaseDecoder}
194161
*/
195162
export class Codec {
196163
/**

src/bases/interface.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// this is dummy module overlayed by interface.ts

src/bases/interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,4 @@ export interface UnibaseDecoder<Prefix extends string> extends MultibaseDecoder<
9797
export interface CombobaseDecoder<Prefix extends string> extends MultibaseDecoder<Prefix> {
9898
readonly decoders: Record<Prefix, UnibaseDecoder<Prefix>>
9999
}
100+

0 commit comments

Comments
 (0)