@atcute/cid 2.2.3 → 2.2.5
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/LICENSE +12 -15
- package/dist/cid-link.d.ts +3 -6
- package/dist/cid-link.d.ts.map +1 -0
- package/dist/cid-link.js +7 -5
- package/dist/cid-link.js.map +1 -1
- package/dist/codec.d.ts +8 -6
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +14 -4
- package/dist/codec.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/lib/cid-link.ts +10 -4
- package/lib/codec.ts +26 -10
- package/package.json +5 -5
package/LICENSE
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
3
|
-
in the Software without restriction, including without limitation the rights
|
|
4
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
5
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
6
|
-
furnished to do so, subject to the following conditions:
|
|
1
|
+
BSD Zero Clause License
|
|
7
2
|
|
|
8
|
-
|
|
9
|
-
copies or substantial portions of the Software.
|
|
3
|
+
Copyright (c) 2025 Mary
|
|
10
4
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted.
|
|
7
|
+
|
|
8
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
9
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
10
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
11
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
12
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
|
+
PERFORMANCE OF THIS SOFTWARE.
|
package/dist/cid-link.d.ts
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { type Cid } from './codec.js';
|
|
2
|
-
declare const CID_LINK_SYMBOL: unique symbol;
|
|
3
2
|
export interface CidLink {
|
|
4
3
|
$link: string;
|
|
5
4
|
}
|
|
6
5
|
export declare class CidLinkWrapper implements CidLink {
|
|
7
|
-
bytes: Uint8Array;
|
|
8
|
-
|
|
9
|
-
readonly [CID_LINK_SYMBOL] = true;
|
|
10
|
-
constructor(bytes: Uint8Array);
|
|
6
|
+
readonly bytes: Uint8Array;
|
|
7
|
+
constructor(bytes: Uint8Array, str?: string);
|
|
11
8
|
get $link(): string;
|
|
12
9
|
toJSON(): CidLink;
|
|
13
10
|
}
|
|
14
11
|
export declare const isCidLink: (value: unknown) => value is CidLink;
|
|
15
12
|
export declare const toCidLink: (cid: Cid) => CidLink;
|
|
16
13
|
export declare const fromCidLink: (link: CidLink) => Cid;
|
|
17
|
-
|
|
14
|
+
//# sourceMappingURL=cid-link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cid-link.d.ts","sourceRoot":"","sources":["../lib/cid-link.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAI1D,MAAM,WAAW,OAAO;IACvB,KAAK,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,cAAe,YAAW,OAAO;IAM7C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;gBAEf,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM;IAK3C,IAAI,KAAK,IAAI,MAAM,CAElB;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,OAEpC,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,MAAM,OAAO,KAAG,GAM3C,CAAC"}
|
package/dist/cid-link.js
CHANGED
|
@@ -2,15 +2,17 @@ import { toBase32 } from '@atcute/multibase';
|
|
|
2
2
|
import { decode, fromString } from './codec.js';
|
|
3
3
|
const CID_LINK_SYMBOL = Symbol.for('@atcute/cid-link-wrapper');
|
|
4
4
|
export class CidLinkWrapper {
|
|
5
|
-
bytes;
|
|
6
5
|
/** @internal */
|
|
7
6
|
[CID_LINK_SYMBOL] = true;
|
|
8
|
-
|
|
7
|
+
/** @internal */
|
|
8
|
+
_str;
|
|
9
|
+
bytes;
|
|
10
|
+
constructor(bytes, str) {
|
|
9
11
|
this.bytes = bytes;
|
|
12
|
+
this._str = str;
|
|
10
13
|
}
|
|
11
14
|
get $link() {
|
|
12
|
-
|
|
13
|
-
return `b${encoded}`;
|
|
15
|
+
return (this._str ??= `b${toBase32(this.bytes)}`);
|
|
14
16
|
}
|
|
15
17
|
toJSON() {
|
|
16
18
|
return { $link: this.$link };
|
|
@@ -22,7 +24,7 @@ export const isCidLink = (value) => {
|
|
|
22
24
|
(val !== null && typeof val === 'object' && typeof val.$link === 'string'));
|
|
23
25
|
};
|
|
24
26
|
export const toCidLink = (cid) => {
|
|
25
|
-
return new CidLinkWrapper(cid.bytes);
|
|
27
|
+
return new CidLinkWrapper(cid.bytes, cid._str);
|
|
26
28
|
};
|
|
27
29
|
export const fromCidLink = (link) => {
|
|
28
30
|
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;AAE1D,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAM/D,MAAM,OAAO,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,MAAM,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;AAE1D,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAM/D,MAAM,OAAO,cAAc;IAC1B,gBAAgB;IACP,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAClC,gBAAgB;IAChB,IAAI,CAAqB;IAEhB,KAAK,CAAa;IAE3B,YAAY,KAAiB,EAAE,GAAY;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,IAAI,KAAK;QACR,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnD,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,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAChD,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
CHANGED
|
@@ -9,18 +9,18 @@ export declare const CODEC_DCBOR = 113;
|
|
|
9
9
|
*/
|
|
10
10
|
export interface Cid {
|
|
11
11
|
/** CID version, this is always `1` for CIDv1 */
|
|
12
|
-
version: number;
|
|
12
|
+
readonly version: number;
|
|
13
13
|
/** Multicodec type for the data, can be `0x55` for raw data or `0x71` for DAG-CBOR */
|
|
14
|
-
codec: number;
|
|
14
|
+
readonly codec: number;
|
|
15
15
|
/** Digest contents */
|
|
16
|
-
digest: {
|
|
16
|
+
readonly digest: {
|
|
17
17
|
/** Multicodec type for the digest, this is always `0x12` for SHA-256 */
|
|
18
|
-
codec: number;
|
|
18
|
+
readonly codec: number;
|
|
19
19
|
/** Raw hash bytes */
|
|
20
|
-
contents: Uint8Array;
|
|
20
|
+
readonly contents: Uint8Array;
|
|
21
21
|
};
|
|
22
22
|
/** Raw CID bytes */
|
|
23
|
-
bytes: Uint8Array;
|
|
23
|
+
readonly bytes: Uint8Array;
|
|
24
24
|
}
|
|
25
25
|
export declare const create: (codec: 85 | 113, data: Uint8Array) => Promise<Cid>;
|
|
26
26
|
export declare const createEmpty: (codec: 85 | 113) => Cid;
|
|
@@ -30,3 +30,5 @@ export declare const fromString: (input: string) => Cid;
|
|
|
30
30
|
export declare const toString: (cid: Cid) => string;
|
|
31
31
|
export declare const fromBinary: (input: Uint8Array) => Cid;
|
|
32
32
|
export declare const toBinary: (cid: Cid) => Uint8Array;
|
|
33
|
+
export declare const equals: (a: Cid, b: Cid) => boolean;
|
|
34
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +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;AAEhC;;;;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;CAI3B;AAKD,eAAO,MAAM,MAAM,GAAU,OAAO,EAAI,GAAG,GAAI,EAAE,MAAM,UAAU,KAAG,OAAO,CAAC,GAAG,CA2B9E,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,EAAI,GAAG,GAAI,KAAG,GAgBhD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,UAAU,KAAG,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,CA4CnF,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,MAEnC,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,OAMvC,CAAC"}
|
package/dist/codec.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fromBase32, toBase32 } from '@atcute/multibase';
|
|
2
|
-
import { allocUnsafe, toSha256 } from '@atcute/uint8array';
|
|
2
|
+
import { allocUnsafe, toSha256, equals as isBufferEqual } from '@atcute/uint8array';
|
|
3
3
|
export const CID_VERSION = 1;
|
|
4
4
|
export const HASH_SHA256 = 0x12;
|
|
5
5
|
export const CODEC_RAW = 0x55;
|
|
@@ -25,6 +25,7 @@ export const create = async (codec, data) => {
|
|
|
25
25
|
contents: bytes.subarray(4, 36),
|
|
26
26
|
},
|
|
27
27
|
bytes: bytes,
|
|
28
|
+
_str: undefined,
|
|
28
29
|
};
|
|
29
30
|
return cid;
|
|
30
31
|
};
|
|
@@ -39,6 +40,7 @@ export const createEmpty = (codec) => {
|
|
|
39
40
|
contents: digest,
|
|
40
41
|
},
|
|
41
42
|
bytes: bytes,
|
|
43
|
+
_str: undefined,
|
|
42
44
|
};
|
|
43
45
|
return cid;
|
|
44
46
|
};
|
|
@@ -74,6 +76,7 @@ export const decodeFirst = (bytes) => {
|
|
|
74
76
|
contents: bytes.subarray(4, 4 + digestSize),
|
|
75
77
|
},
|
|
76
78
|
bytes: bytes.subarray(0, 4 + digestSize),
|
|
79
|
+
_str: undefined,
|
|
77
80
|
};
|
|
78
81
|
return [cid, bytes.subarray(4 + digestSize)];
|
|
79
82
|
};
|
|
@@ -94,11 +97,12 @@ export const fromString = (input) => {
|
|
|
94
97
|
throw new RangeError(`cid too short`);
|
|
95
98
|
}
|
|
96
99
|
const bytes = fromBase32(input.slice(1));
|
|
97
|
-
|
|
100
|
+
const cid = decode(bytes);
|
|
101
|
+
cid._str = input;
|
|
102
|
+
return cid;
|
|
98
103
|
};
|
|
99
104
|
export const toString = (cid) => {
|
|
100
|
-
|
|
101
|
-
return `b${encoded}`;
|
|
105
|
+
return (cid._str ??= `b${toBase32(cid.bytes)}`);
|
|
102
106
|
};
|
|
103
107
|
export const fromBinary = (input) => {
|
|
104
108
|
// 4 bytes + 1 byte for the 0x00 prefix
|
|
@@ -118,4 +122,10 @@ export const toBinary = (cid) => {
|
|
|
118
122
|
bytes.set(cid.bytes, 1);
|
|
119
123
|
return bytes;
|
|
120
124
|
};
|
|
125
|
+
export const equals = (a, b) => {
|
|
126
|
+
if (a._str !== undefined && b._str !== undefined) {
|
|
127
|
+
return a._str === b._str;
|
|
128
|
+
}
|
|
129
|
+
return isBufferEqual(a.bytes, b.bytes);
|
|
130
|
+
};
|
|
121
131
|
//# 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,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../lib/codec.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
package/lib/cid-link.ts
CHANGED
|
@@ -11,12 +11,18 @@ export interface CidLink {
|
|
|
11
11
|
export class CidLinkWrapper implements CidLink {
|
|
12
12
|
/** @internal */
|
|
13
13
|
readonly [CID_LINK_SYMBOL] = true;
|
|
14
|
+
/** @internal */
|
|
15
|
+
_str: string | undefined;
|
|
16
|
+
|
|
17
|
+
readonly bytes: Uint8Array;
|
|
14
18
|
|
|
15
|
-
constructor(
|
|
19
|
+
constructor(bytes: Uint8Array, str?: string) {
|
|
20
|
+
this.bytes = bytes;
|
|
21
|
+
this._str = str;
|
|
22
|
+
}
|
|
16
23
|
|
|
17
24
|
get $link(): string {
|
|
18
|
-
|
|
19
|
-
return `b${encoded}`;
|
|
25
|
+
return (this._str ??= `b${toBase32(this.bytes)}`);
|
|
20
26
|
}
|
|
21
27
|
|
|
22
28
|
toJSON(): CidLink {
|
|
@@ -34,7 +40,7 @@ export const isCidLink = (value: unknown): value is CidLink => {
|
|
|
34
40
|
};
|
|
35
41
|
|
|
36
42
|
export const toCidLink = (cid: Cid): CidLink => {
|
|
37
|
-
return new CidLinkWrapper(cid.bytes);
|
|
43
|
+
return new CidLinkWrapper(cid.bytes, cid._str);
|
|
38
44
|
};
|
|
39
45
|
|
|
40
46
|
export const fromCidLink = (link: CidLink): Cid => {
|
package/lib/codec.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fromBase32, toBase32 } from '@atcute/multibase';
|
|
2
|
-
import { allocUnsafe, toSha256 } from '@atcute/uint8array';
|
|
2
|
+
import { allocUnsafe, toSha256, equals as isBufferEqual } from '@atcute/uint8array';
|
|
3
3
|
|
|
4
4
|
export const CID_VERSION = 1;
|
|
5
5
|
export const HASH_SHA256 = 0x12;
|
|
@@ -14,18 +14,21 @@ export const CODEC_DCBOR = 0x71;
|
|
|
14
14
|
*/
|
|
15
15
|
export interface Cid {
|
|
16
16
|
/** CID version, this is always `1` for CIDv1 */
|
|
17
|
-
version: number;
|
|
17
|
+
readonly version: number;
|
|
18
18
|
/** Multicodec type for the data, can be `0x55` for raw data or `0x71` for DAG-CBOR */
|
|
19
|
-
codec: number;
|
|
19
|
+
readonly codec: number;
|
|
20
20
|
/** Digest contents */
|
|
21
|
-
digest: {
|
|
21
|
+
readonly digest: {
|
|
22
22
|
/** Multicodec type for the digest, this is always `0x12` for SHA-256 */
|
|
23
|
-
codec: number;
|
|
23
|
+
readonly codec: number;
|
|
24
24
|
/** Raw hash bytes */
|
|
25
|
-
contents: Uint8Array;
|
|
25
|
+
readonly contents: Uint8Array;
|
|
26
26
|
};
|
|
27
27
|
/** Raw CID bytes */
|
|
28
|
-
bytes: Uint8Array;
|
|
28
|
+
readonly bytes: Uint8Array;
|
|
29
|
+
|
|
30
|
+
/** @internal */
|
|
31
|
+
_str: string | undefined;
|
|
29
32
|
}
|
|
30
33
|
|
|
31
34
|
// a SHA-256 CIDv1 is always going to be 36 bytes, that's 4 bytes for the
|
|
@@ -54,6 +57,7 @@ export const create = async (codec: 0x55 | 0x71, data: Uint8Array): Promise<Cid>
|
|
|
54
57
|
contents: bytes.subarray(4, 36),
|
|
55
58
|
},
|
|
56
59
|
bytes: bytes,
|
|
60
|
+
_str: undefined,
|
|
57
61
|
};
|
|
58
62
|
|
|
59
63
|
return cid;
|
|
@@ -71,6 +75,7 @@ export const createEmpty = (codec: 0x55 | 0x71): Cid => {
|
|
|
71
75
|
contents: digest,
|
|
72
76
|
},
|
|
73
77
|
bytes: bytes,
|
|
78
|
+
_str: undefined,
|
|
74
79
|
};
|
|
75
80
|
|
|
76
81
|
return cid;
|
|
@@ -116,6 +121,7 @@ export const decodeFirst = (bytes: Uint8Array): [decoded: Cid, remainder: Uint8A
|
|
|
116
121
|
contents: bytes.subarray(4, 4 + digestSize),
|
|
117
122
|
},
|
|
118
123
|
bytes: bytes.subarray(0, 4 + digestSize),
|
|
124
|
+
_str: undefined,
|
|
119
125
|
};
|
|
120
126
|
|
|
121
127
|
return [cid, bytes.subarray(4 + digestSize)];
|
|
@@ -143,12 +149,14 @@ export const fromString = (input: string): Cid => {
|
|
|
143
149
|
}
|
|
144
150
|
|
|
145
151
|
const bytes = fromBase32(input.slice(1));
|
|
146
|
-
|
|
152
|
+
const cid = decode(bytes);
|
|
153
|
+
|
|
154
|
+
cid._str = input;
|
|
155
|
+
return cid;
|
|
147
156
|
};
|
|
148
157
|
|
|
149
158
|
export const toString = (cid: Cid): string => {
|
|
150
|
-
|
|
151
|
-
return `b${encoded}`;
|
|
159
|
+
return (cid._str ??= `b${toBase32(cid.bytes)}`);
|
|
152
160
|
};
|
|
153
161
|
|
|
154
162
|
export const fromBinary = (input: Uint8Array): Cid => {
|
|
@@ -173,3 +181,11 @@ export const toBinary = (cid: Cid): Uint8Array => {
|
|
|
173
181
|
|
|
174
182
|
return bytes;
|
|
175
183
|
};
|
|
184
|
+
|
|
185
|
+
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
|
+
return isBufferEqual(a.bytes, b.bytes);
|
|
191
|
+
};
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@atcute/cid",
|
|
4
|
-
"version": "2.2.
|
|
4
|
+
"version": "2.2.5",
|
|
5
5
|
"description": "lightweight DASL CID codec library for AT Protocol",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"atproto",
|
|
8
8
|
"dasl",
|
|
9
9
|
"cid"
|
|
10
10
|
],
|
|
11
|
-
"license": "
|
|
11
|
+
"license": "0BSD",
|
|
12
12
|
"repository": {
|
|
13
13
|
"url": "https://github.com/mary-ext/atcute",
|
|
14
14
|
"directory": "packages/utilities/cid"
|
|
@@ -25,11 +25,11 @@
|
|
|
25
25
|
},
|
|
26
26
|
"sideEffects": false,
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@types/bun": "^1.2.
|
|
28
|
+
"@types/bun": "^1.2.21"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@atcute/multibase": "^1.1.
|
|
32
|
-
"@atcute/uint8array": "^1.0.
|
|
31
|
+
"@atcute/multibase": "^1.1.6",
|
|
32
|
+
"@atcute/uint8array": "^1.0.5"
|
|
33
33
|
},
|
|
34
34
|
"scripts": {
|
|
35
35
|
"build": "tsc --project tsconfig.build.json",
|