@atcute/cid 2.2.5 → 2.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cid-link.d.ts +1 -1
- package/dist/cid-link.d.ts.map +1 -1
- package/dist/cid-link.js +16 -7
- package/dist/cid-link.js.map +1 -1
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +9 -8
- package/dist/codec.js.map +1 -1
- package/lib/cid-link.ts +21 -7
- package/lib/codec.ts +12 -12
- package/package.json +1 -1
package/dist/cid-link.d.ts
CHANGED
package/dist/cid-link.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cid-link.d.ts","sourceRoot":"","sources":["../lib/cid-link.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"cid-link.d.ts","sourceRoot":"","sources":["../lib/cid-link.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2C,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAO/E,MAAM,WAAW,OAAO;IACvB,KAAK,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,cAAe,YAAW,OAAO;IAI7C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;gBAEf,KAAK,EAAE,UAAU;IAI7B,IAAI,KAAK,IAAI,MAAM,CASlB;IAED,MAAM,IAAI,OAAO;CAGjB;AAED,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,OAOnD,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,KAAK,GAAG,KAAG,OASpC,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,MAAM,OAAO,KAAG,GAM3C,CAAC"}
|
package/dist/cid-link.js
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { toBase32 } from '@atcute/multibase';
|
|
2
|
-
import { decode, fromString } from './codec.js';
|
|
2
|
+
import { CID_STRINGIFY_CACHE, decode, fromString } from './codec.js';
|
|
3
3
|
const CID_LINK_SYMBOL = Symbol.for('@atcute/cid-link-wrapper');
|
|
4
|
+
/** @internal */
|
|
5
|
+
export const CIDLINK_STRINGIFY_CACHE = new WeakMap();
|
|
4
6
|
export class CidLinkWrapper {
|
|
5
7
|
/** @internal */
|
|
6
8
|
[CID_LINK_SYMBOL] = true;
|
|
7
|
-
/** @internal */
|
|
8
|
-
_str;
|
|
9
9
|
bytes;
|
|
10
|
-
constructor(bytes
|
|
10
|
+
constructor(bytes) {
|
|
11
11
|
this.bytes = bytes;
|
|
12
|
-
this._str = str;
|
|
13
12
|
}
|
|
14
13
|
get $link() {
|
|
15
|
-
|
|
14
|
+
let str = CIDLINK_STRINGIFY_CACHE.get(this);
|
|
15
|
+
if (str === undefined) {
|
|
16
|
+
str = `b${toBase32(this.bytes)}`;
|
|
17
|
+
CIDLINK_STRINGIFY_CACHE.set(this, str);
|
|
18
|
+
}
|
|
19
|
+
return str;
|
|
16
20
|
}
|
|
17
21
|
toJSON() {
|
|
18
22
|
return { $link: this.$link };
|
|
@@ -24,7 +28,12 @@ export const isCidLink = (value) => {
|
|
|
24
28
|
(val !== null && typeof val === 'object' && typeof val.$link === 'string'));
|
|
25
29
|
};
|
|
26
30
|
export const toCidLink = (cid) => {
|
|
27
|
-
|
|
31
|
+
const inst = new CidLinkWrapper(cid.bytes);
|
|
32
|
+
const str = CID_STRINGIFY_CACHE.get(cid);
|
|
33
|
+
if (str !== undefined) {
|
|
34
|
+
CIDLINK_STRINGIFY_CACHE.set(inst, str);
|
|
35
|
+
}
|
|
36
|
+
return inst;
|
|
28
37
|
};
|
|
29
38
|
export const fromCidLink = (link) => {
|
|
30
39
|
if (link instanceof CidLinkWrapper) {
|
package/dist/cid-link.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cid-link.js","sourceRoot":"","sources":["../lib/cid-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cid-link.js","sourceRoot":"","sources":["../lib/cid-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;AAE/E,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAE/D,gBAAgB;AAChB,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,OAAO,EAA0B,CAAC;AAM7E,MAAM,OAAO,cAAc;IAC1B,gBAAgB;IACP,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAEzB,KAAK,CAAa;IAE3B,YAAY,KAAiB;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,KAAK;QACR,IAAI,GAAG,GAAG,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACvB,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAEjC,uBAAuB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,MAAM;QACL,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;CACD;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAoB,EAAE;IAC7D,MAAM,GAAG,GAAG,KAAY,CAAC;IAEzB,OAAO,CACN,GAAG,YAAY,cAAc;QAC7B,CAAC,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAC1E,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAW,EAAE;IAC9C,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEzC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACvB,uBAAuB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAa,EAAO,EAAE;IACjD,IAAI,IAAI,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC,CAAC"}
|
package/dist/codec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../lib/codec.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,WAAW,KAAO,CAAC;AAEhC,eAAO,MAAM,SAAS,KAAO,CAAC;AAC9B,eAAO,MAAM,WAAW,MAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../lib/codec.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,WAAW,KAAO,CAAC;AAEhC,eAAO,MAAM,SAAS,KAAO,CAAC;AAC9B,eAAO,MAAM,WAAW,MAAO,CAAC;AAKhC;;;;GAIG;AACH,MAAM,WAAW,GAAG;IACnB,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sBAAsB;IACtB,QAAQ,CAAC,MAAM,EAAE;QAChB,wEAAwE;QACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,qBAAqB;QACrB,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;KAC9B,CAAC;IACF,oBAAoB;IACpB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC3B;AAKD,eAAO,MAAM,MAAM,GAAU,OAAO,EAAI,GAAG,GAAI,EAAE,MAAM,UAAU,KAAG,OAAO,CAAC,GAAG,CA0B9E,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,EAAI,GAAG,GAAI,KAAG,GAehD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,UAAU,KAAG,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,CA2CnF,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,OAAO,UAAU,KAAG,GAQ1C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,GAgB1C,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,KAAK,GAAG,KAAG,MASnC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,UAAU,KAAG,GAa9C,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,KAAK,GAAG,KAAG,UAMnC,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,GAAG,GAAG,EAAE,GAAG,GAAG,KAAG,OAEvC,CAAC"}
|
package/dist/codec.js
CHANGED
|
@@ -4,6 +4,8 @@ export const CID_VERSION = 1;
|
|
|
4
4
|
export const HASH_SHA256 = 0x12;
|
|
5
5
|
export const CODEC_RAW = 0x55;
|
|
6
6
|
export const CODEC_DCBOR = 0x71;
|
|
7
|
+
/** @internal */
|
|
8
|
+
export const CID_STRINGIFY_CACHE = new WeakMap();
|
|
7
9
|
// a SHA-256 CIDv1 is always going to be 36 bytes, that's 4 bytes for the
|
|
8
10
|
// header, and 32 bytes for the digest itself.
|
|
9
11
|
export const create = async (codec, data) => {
|
|
@@ -25,7 +27,6 @@ export const create = async (codec, data) => {
|
|
|
25
27
|
contents: bytes.subarray(4, 36),
|
|
26
28
|
},
|
|
27
29
|
bytes: bytes,
|
|
28
|
-
_str: undefined,
|
|
29
30
|
};
|
|
30
31
|
return cid;
|
|
31
32
|
};
|
|
@@ -40,7 +41,6 @@ export const createEmpty = (codec) => {
|
|
|
40
41
|
contents: digest,
|
|
41
42
|
},
|
|
42
43
|
bytes: bytes,
|
|
43
|
-
_str: undefined,
|
|
44
44
|
};
|
|
45
45
|
return cid;
|
|
46
46
|
};
|
|
@@ -76,7 +76,6 @@ export const decodeFirst = (bytes) => {
|
|
|
76
76
|
contents: bytes.subarray(4, 4 + digestSize),
|
|
77
77
|
},
|
|
78
78
|
bytes: bytes.subarray(0, 4 + digestSize),
|
|
79
|
-
_str: undefined,
|
|
80
79
|
};
|
|
81
80
|
return [cid, bytes.subarray(4 + digestSize)];
|
|
82
81
|
};
|
|
@@ -98,11 +97,16 @@ export const fromString = (input) => {
|
|
|
98
97
|
}
|
|
99
98
|
const bytes = fromBase32(input.slice(1));
|
|
100
99
|
const cid = decode(bytes);
|
|
101
|
-
cid
|
|
100
|
+
CID_STRINGIFY_CACHE.set(cid, input);
|
|
102
101
|
return cid;
|
|
103
102
|
};
|
|
104
103
|
export const toString = (cid) => {
|
|
105
|
-
|
|
104
|
+
let str = CID_STRINGIFY_CACHE.get(cid);
|
|
105
|
+
if (str === undefined) {
|
|
106
|
+
str = `b${toBase32(cid.bytes)}`;
|
|
107
|
+
CID_STRINGIFY_CACHE.set(cid, str);
|
|
108
|
+
}
|
|
109
|
+
return str;
|
|
106
110
|
};
|
|
107
111
|
export const fromBinary = (input) => {
|
|
108
112
|
// 4 bytes + 1 byte for the 0x00 prefix
|
|
@@ -123,9 +127,6 @@ export const toBinary = (cid) => {
|
|
|
123
127
|
return bytes;
|
|
124
128
|
};
|
|
125
129
|
export const equals = (a, b) => {
|
|
126
|
-
if (a._str !== undefined && b._str !== undefined) {
|
|
127
|
-
return a._str === b._str;
|
|
128
|
-
}
|
|
129
130
|
return isBufferEqual(a.bytes, b.bytes);
|
|
130
131
|
};
|
|
131
132
|
//# sourceMappingURL=codec.js.map
|
package/dist/codec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../lib/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEpF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAEhC,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../lib/codec.ts"],"names":[],"mappings":"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"}
|
package/lib/cid-link.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { toBase32 } from '@atcute/multibase';
|
|
2
2
|
|
|
3
|
-
import { decode, fromString, type Cid } from './codec.js';
|
|
3
|
+
import { CID_STRINGIFY_CACHE, decode, fromString, type Cid } from './codec.js';
|
|
4
4
|
|
|
5
5
|
const CID_LINK_SYMBOL = Symbol.for('@atcute/cid-link-wrapper');
|
|
6
6
|
|
|
7
|
+
/** @internal */
|
|
8
|
+
export const CIDLINK_STRINGIFY_CACHE = new WeakMap<CidLinkWrapper, string>();
|
|
9
|
+
|
|
7
10
|
export interface CidLink {
|
|
8
11
|
$link: string;
|
|
9
12
|
}
|
|
@@ -11,18 +14,22 @@ export interface CidLink {
|
|
|
11
14
|
export class CidLinkWrapper implements CidLink {
|
|
12
15
|
/** @internal */
|
|
13
16
|
readonly [CID_LINK_SYMBOL] = true;
|
|
14
|
-
/** @internal */
|
|
15
|
-
_str: string | undefined;
|
|
16
17
|
|
|
17
18
|
readonly bytes: Uint8Array;
|
|
18
19
|
|
|
19
|
-
constructor(bytes: Uint8Array
|
|
20
|
+
constructor(bytes: Uint8Array) {
|
|
20
21
|
this.bytes = bytes;
|
|
21
|
-
this._str = str;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
get $link(): string {
|
|
25
|
-
|
|
25
|
+
let str = CIDLINK_STRINGIFY_CACHE.get(this);
|
|
26
|
+
if (str === undefined) {
|
|
27
|
+
str = `b${toBase32(this.bytes)}`;
|
|
28
|
+
|
|
29
|
+
CIDLINK_STRINGIFY_CACHE.set(this, str);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return str;
|
|
26
33
|
}
|
|
27
34
|
|
|
28
35
|
toJSON(): CidLink {
|
|
@@ -40,7 +47,14 @@ export const isCidLink = (value: unknown): value is CidLink => {
|
|
|
40
47
|
};
|
|
41
48
|
|
|
42
49
|
export const toCidLink = (cid: Cid): CidLink => {
|
|
43
|
-
|
|
50
|
+
const inst = new CidLinkWrapper(cid.bytes);
|
|
51
|
+
const str = CID_STRINGIFY_CACHE.get(cid);
|
|
52
|
+
|
|
53
|
+
if (str !== undefined) {
|
|
54
|
+
CIDLINK_STRINGIFY_CACHE.set(inst, str);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return inst;
|
|
44
58
|
};
|
|
45
59
|
|
|
46
60
|
export const fromCidLink = (link: CidLink): Cid => {
|
package/lib/codec.ts
CHANGED
|
@@ -7,6 +7,9 @@ export const HASH_SHA256 = 0x12;
|
|
|
7
7
|
export const CODEC_RAW = 0x55;
|
|
8
8
|
export const CODEC_DCBOR = 0x71;
|
|
9
9
|
|
|
10
|
+
/** @internal */
|
|
11
|
+
export const CID_STRINGIFY_CACHE = new WeakMap<Cid, string>();
|
|
12
|
+
|
|
10
13
|
/**
|
|
11
14
|
* Represents a Content Identifier (CID), in particular, a limited subset of
|
|
12
15
|
* CIDv1 as described by DASL specifications.
|
|
@@ -26,9 +29,6 @@ export interface Cid {
|
|
|
26
29
|
};
|
|
27
30
|
/** Raw CID bytes */
|
|
28
31
|
readonly bytes: Uint8Array;
|
|
29
|
-
|
|
30
|
-
/** @internal */
|
|
31
|
-
_str: string | undefined;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
// a SHA-256 CIDv1 is always going to be 36 bytes, that's 4 bytes for the
|
|
@@ -57,7 +57,6 @@ export const create = async (codec: 0x55 | 0x71, data: Uint8Array): Promise<Cid>
|
|
|
57
57
|
contents: bytes.subarray(4, 36),
|
|
58
58
|
},
|
|
59
59
|
bytes: bytes,
|
|
60
|
-
_str: undefined,
|
|
61
60
|
};
|
|
62
61
|
|
|
63
62
|
return cid;
|
|
@@ -75,7 +74,6 @@ export const createEmpty = (codec: 0x55 | 0x71): Cid => {
|
|
|
75
74
|
contents: digest,
|
|
76
75
|
},
|
|
77
76
|
bytes: bytes,
|
|
78
|
-
_str: undefined,
|
|
79
77
|
};
|
|
80
78
|
|
|
81
79
|
return cid;
|
|
@@ -121,7 +119,6 @@ export const decodeFirst = (bytes: Uint8Array): [decoded: Cid, remainder: Uint8A
|
|
|
121
119
|
contents: bytes.subarray(4, 4 + digestSize),
|
|
122
120
|
},
|
|
123
121
|
bytes: bytes.subarray(0, 4 + digestSize),
|
|
124
|
-
_str: undefined,
|
|
125
122
|
};
|
|
126
123
|
|
|
127
124
|
return [cid, bytes.subarray(4 + digestSize)];
|
|
@@ -151,12 +148,19 @@ export const fromString = (input: string): Cid => {
|
|
|
151
148
|
const bytes = fromBase32(input.slice(1));
|
|
152
149
|
const cid = decode(bytes);
|
|
153
150
|
|
|
154
|
-
cid
|
|
151
|
+
CID_STRINGIFY_CACHE.set(cid, input);
|
|
155
152
|
return cid;
|
|
156
153
|
};
|
|
157
154
|
|
|
158
155
|
export const toString = (cid: Cid): string => {
|
|
159
|
-
|
|
156
|
+
let str = CID_STRINGIFY_CACHE.get(cid);
|
|
157
|
+
if (str === undefined) {
|
|
158
|
+
str = `b${toBase32(cid.bytes)}`;
|
|
159
|
+
|
|
160
|
+
CID_STRINGIFY_CACHE.set(cid, str);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return str;
|
|
160
164
|
};
|
|
161
165
|
|
|
162
166
|
export const fromBinary = (input: Uint8Array): Cid => {
|
|
@@ -183,9 +187,5 @@ export const toBinary = (cid: Cid): Uint8Array => {
|
|
|
183
187
|
};
|
|
184
188
|
|
|
185
189
|
export const equals = (a: Cid, b: Cid): boolean => {
|
|
186
|
-
if (a._str !== undefined && b._str !== undefined) {
|
|
187
|
-
return a._str === b._str;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
190
|
return isBufferEqual(a.bytes, b.bytes);
|
|
191
191
|
};
|