@atcute/cid 2.3.0 → 2.4.1

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/README.md CHANGED
@@ -13,74 +13,33 @@ their contents.
13
13
 
14
14
  ## usage
15
15
 
16
- ### creating CIDs
17
-
18
16
  ```ts
19
17
  import * as CID from '@atcute/cid';
18
+ import { toCidLink, fromCidLink, isCidLink } from '@atcute/cid';
20
19
 
21
- // create a CID from DAG-CBOR data
20
+ // create a CID by hashing data (0x71 for DAG-CBOR, 0x55 for raw)
22
21
  const cid = await CID.create(0x71, cborBytes);
23
- // -> { version: 1, codec: 113, digest: { ... }, bytes: Uint8Array(36) }
24
-
25
- // create from raw data
26
- const rawCid = await CID.create(0x55, rawBytes);
27
-
28
- // create an empty CID (zero-length digest)
29
- const empty = CID.createEmpty(0x71);
30
- ```
31
-
32
- ### parsing CIDs
33
-
34
- ```ts
35
- import * as CID from '@atcute/cid';
22
+ // -> { version: 1, codec: 113, digest: { codec: 18, contents: Uint8Array(32) }, bytes: Uint8Array(36) }
36
23
 
37
24
  // parse from base32 string
38
- const cid = CID.fromString('bafyreihffx5a2e7k5uwrmmgofbvzujc5cmw5h4espouwuxt3liqoflx3ee');
39
-
40
- // parse from binary (with 0x00 prefix)
41
- const cid = CID.fromBinary(bytes);
42
-
43
- // parse from raw CID bytes
44
- const cid = CID.decode(cidBytes);
45
- ```
46
-
47
- ### serializing CIDs
48
-
49
- ```ts
50
- import * as CID from '@atcute/cid';
51
-
52
- // to base32 string
53
- CID.toString(cid);
54
- // -> "bafyreihffx5a2e7k5uwrmmgofbvzujc5cmw5h4espouwuxt3liqoflx3ee"
55
-
56
- // to binary (with 0x00 prefix)
57
- CID.toBinary(cid);
58
- // -> Uint8Array(37)
59
- ```
60
-
61
- ### comparing CIDs
62
-
63
- ```ts
64
- import * as CID from '@atcute/cid';
65
-
66
- CID.equals(cidA, cidB); // true if same content hash
67
- ```
25
+ const parsed = CID.fromString('bafyreihffx5a2e7k5uwrmmgofbvzujc5cmw5h4espouwuxt3liqoflx3ee');
68
26
 
69
- ### CidLink wrapper
27
+ // parse from binary (with 0x00 prefix) or raw CID bytes
28
+ const fromBin = CID.fromBinary(binaryBytes);
29
+ const fromRaw = CID.decode(cidBytes);
70
30
 
71
- for JSON serialization compatible with atproto's data model:
72
-
73
- ```ts
74
- import { toCidLink, fromCidLink, isCidLink } from '@atcute/cid';
31
+ // serialize to base32 string or binary format
32
+ CID.toString(cid); // -> "bafyreihffx5a2e7k5uwrmmgofbvzujc5cmw5h4espouwuxt3liqoflx3ee"
33
+ CID.toBinary(cid); // -> Uint8Array(37) with 0x00 prefix
75
34
 
76
- // convert Cid to CidLink (has $link property)
77
- const link = toCidLink(cid);
78
- // -> { $link: "bafyrei..." }
35
+ // compare two CIDs
36
+ CID.equals(cidA, cidB); // -> true if identical
79
37
 
80
- // convert back to Cid
81
- const cid = fromCidLink(link);
38
+ // convert to CidLink for JSON serialization (atproto data model)
39
+ const link = toCidLink(cid); // -> { $link: "bafyrei..." }
40
+ const back = fromCidLink(link);
82
41
 
83
- // type guard
42
+ // type guard for CidLink
84
43
  if (isCidLink(value)) {
85
44
  console.log(value.$link);
86
45
  }
@@ -1,4 +1,4 @@
1
- import { type Cid } from './codec.js';
1
+ import { type Cid } from './codec.ts';
2
2
  export interface CidLink {
3
3
  $link: string;
4
4
  }
@@ -1 +1 @@
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;IAE3B,YAAY,KAAK,EAAE,UAAU,EAE5B;IAED,IAAI,KAAK,IAAI,MAAM,CASlB;IAED,MAAM,IAAI,OAAO,CAEhB;CACD;AAED,eAAO,MAAM,SAAS,sCAOrB,CAAC;AAEF,eAAO,MAAM,SAAS,uBASrB,CAAC;AAEF,eAAO,MAAM,WAAW,wBAMvB,CAAC"}
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;IAI7C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAE3B,YAAY,KAAK,EAAE,UAAU,EAE5B;IAED,IAAI,KAAK,IAAI,MAAM,CAQlB;IAED,MAAM,IAAI,OAAO,CAEhB;CACD;AAED,eAAO,MAAM,SAAS,sCAOrB,CAAC;AAEF,eAAO,MAAM,SAAS,uBAErB,CAAC;AAEF,eAAO,MAAM,WAAW,wBAMvB,CAAC"}
package/dist/cid-link.js CHANGED
@@ -1,8 +1,6 @@
1
1
  import { toBase32 } from '@atcute/multibase';
2
- import { CID_STRINGIFY_CACHE, decode, fromString } from './codec.js';
2
+ import { 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();
6
4
  export class CidLinkWrapper {
7
5
  /** @internal */
8
6
  [CID_LINK_SYMBOL] = true;
@@ -11,12 +9,12 @@ export class CidLinkWrapper {
11
9
  this.bytes = bytes;
12
10
  }
13
11
  get $link() {
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;
12
+ const link = `b${toBase32(this.bytes)}`;
13
+ Object.defineProperty(this, '$link', {
14
+ value: link,
15
+ enumerable: true,
16
+ });
17
+ return link;
20
18
  }
21
19
  toJSON() {
22
20
  return { $link: this.$link };
@@ -28,12 +26,7 @@ export const isCidLink = (value) => {
28
26
  (val !== null && typeof val === 'object' && typeof val.$link === 'string'));
29
27
  };
30
28
  export const toCidLink = (cid) => {
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;
29
+ return new CidLinkWrapper(cid.bytes);
37
30
  };
38
31
  export const fromCidLink = (link) => {
39
32
  if (link instanceof CidLinkWrapper) {
@@ -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,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,EAAE;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAAA,CACnB;IAED,IAAI,KAAK,GAAW;QACnB,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;IAAA,CACX;IAED,MAAM,GAAY;QACjB,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAAA,CAC7B;CACD;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAoB,EAAE,CAAC;IAC9D,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;AAAA,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAW,EAAE,CAAC;IAC/C,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;AAAA,CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAa,EAAO,EAAE,CAAC;IAClD,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;AAAA,CAC9B,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;IAEzB,KAAK,CAAa;IAE3B,YAAY,KAAiB,EAAE;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAAA,CACnB;IAED,IAAI,KAAK,GAAW;QACnB,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;YACpC,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAAA,CACZ;IAED,MAAM,GAAY;QACjB,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAAA,CAC7B;CACD;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAoB,EAAE,CAAC;IAC9D,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;AAAA,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAW,EAAE,CAAC;IAC/C,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAAA,CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAa,EAAO,EAAE,CAAC;IAClD,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;AAAA,CAC9B,CAAC"}
package/dist/codec.d.ts CHANGED
@@ -7,7 +7,7 @@ export declare const CODEC_RAW = 85;
7
7
  /** multicodec for DAG-CBOR encoded data */
8
8
  export declare const CODEC_DCBOR = 113;
9
9
  /**
10
- * Represents a Content Identifier (CID), in particular, a limited subset of
10
+ * represents a Content Identifier (CID), in particular, a limited subset of
11
11
  * CIDv1 as described by DASL specifications.
12
12
  * https://dasl.ing/cid.html
13
13
  */
@@ -39,13 +39,7 @@ export declare const fromDigest: (codec: 85 | 113, digest: Uint8Array<ArrayBuffe
39
39
  * @param data raw data to hash
40
40
  * @returns CID object
41
41
  */
42
- export declare const create: (codec: 85 | 113, data: Uint8Array<ArrayBufferLike>) => Promise<Cid>;
43
- /**
44
- * creates an empty CID with a zero-length digest
45
- * @param codec multicodec type for the data
46
- * @returns CID object with empty digest
47
- */
48
- export declare const createEmpty: (codec: 85 | 113) => Cid;
42
+ export declare const create: (codec: 85 | 113, data: Uint8Array<ArrayBuffer>) => Promise<Cid>;
49
43
  /**
50
44
  * decodes a CID from bytes, returning the CID and any remaining bytes
51
45
  * @param bytes raw CID bytes
@@ -1 +1 @@
1
- {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../lib/codec.ts"],"names":[],"mappings":"AAGA,wCAAwC;AACxC,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,kCAAkC;AAClC,eAAO,MAAM,WAAW,KAAO,CAAC;AAEhC,qCAAqC;AACrC,eAAO,MAAM,SAAS,KAAO,CAAC;AAC9B,2CAA2C;AAC3C,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;;;;;GAKG;AACH,eAAO,MAAM,UAAU,+DAuBtB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,sEAGlB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,0BAevB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,gGA2CvB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,6CAQlB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,wBAgBtB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,sBASpB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,6CAatB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,2CAMpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,6BAElB,CAAC"}
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../lib/codec.ts"],"names":[],"mappings":"AAGA,wCAAwC;AACxC,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,kCAAkC;AAClC,eAAO,MAAM,WAAW,KAAO,CAAC;AAEhC,qCAAqC;AACrC,eAAO,MAAM,SAAS,KAAO,CAAC;AAC9B,2CAA2C;AAC3C,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;CAC3B;AAKD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,+DAuBtB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,kEAGlB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,gGAqCvB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,6CAQlB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,wBAQtB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,sBAEpB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,6CAOtB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,2CAMpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,6BAElB,CAAC"}
package/dist/codec.js CHANGED
@@ -8,8 +8,6 @@ export const HASH_SHA256 = 0x12;
8
8
  export const CODEC_RAW = 0x55;
9
9
  /** multicodec for DAG-CBOR encoded data */
10
10
  export const CODEC_DCBOR = 0x71;
11
- /** @internal */
12
- export const CID_STRINGIFY_CACHE = new WeakMap();
13
11
  // a SHA-256 CIDv1 is always going to be 36 bytes, that's 4 bytes for the
14
12
  // header, and 32 bytes for the digest itself.
15
13
  /**
@@ -48,25 +46,6 @@ export const create = async (codec, data) => {
48
46
  const digest = await toSha256(data);
49
47
  return fromDigest(codec, digest);
50
48
  };
51
- /**
52
- * creates an empty CID with a zero-length digest
53
- * @param codec multicodec type for the data
54
- * @returns CID object with empty digest
55
- */
56
- export const createEmpty = (codec) => {
57
- const bytes = Uint8Array.from([CID_VERSION, codec, HASH_SHA256, 0]);
58
- const digest = bytes.subarray(4);
59
- const cid = {
60
- version: CID_VERSION,
61
- codec: codec,
62
- digest: {
63
- codec: HASH_SHA256,
64
- contents: digest,
65
- },
66
- bytes: bytes,
67
- };
68
- return cid;
69
- };
70
49
  /**
71
50
  * decodes a CID from bytes, returning the CID and any remaining bytes
72
51
  * @param bytes raw CID bytes
@@ -74,8 +53,7 @@ export const createEmpty = (codec) => {
74
53
  * @throws {RangeError} if the bytes are too short or contain invalid values
75
54
  */
76
55
  export const decodeFirst = (bytes) => {
77
- const length = bytes.length;
78
- if (length < 4) {
56
+ if (bytes.length < 36) {
79
57
  throw new RangeError(`cid too short`);
80
58
  }
81
59
  const version = bytes[0];
@@ -91,22 +69,19 @@ export const decodeFirst = (bytes) => {
91
69
  if (digestType !== HASH_SHA256) {
92
70
  throw new RangeError(`incorrect cid digest codec (got 0x${digestType.toString(16)})`);
93
71
  }
94
- if (digestSize !== 32 && digestSize !== 0) {
72
+ if (digestSize !== 32) {
95
73
  throw new RangeError(`incorrect cid digest size (got ${digestSize})`);
96
74
  }
97
- if (length < 4 + digestSize) {
98
- throw new RangeError(`cid too short`);
99
- }
100
75
  const cid = {
101
76
  version: CID_VERSION,
102
77
  codec: codec,
103
78
  digest: {
104
79
  codec: digestType,
105
- contents: bytes.subarray(4, 4 + digestSize),
80
+ contents: bytes.subarray(4, 36),
106
81
  },
107
- bytes: bytes.subarray(0, 4 + digestSize),
82
+ bytes: bytes.subarray(0, 36),
108
83
  };
109
- return [cid, bytes.subarray(4 + digestSize)];
84
+ return [cid, bytes.subarray(36)];
110
85
  };
111
86
  /**
112
87
  * decodes a CID from bytes, expecting no remainder
@@ -129,18 +104,12 @@ export const decode = (bytes) => {
129
104
  * @throws {RangeError} if the string length is invalid
130
105
  */
131
106
  export const fromString = (input) => {
132
- if (input.length < 2 || input[0] !== 'b') {
133
- throw new SyntaxError(`not a multibase base32 string`);
134
- }
135
- // 4 bytes in base32 = 7 characters + 1 character for the prefix
136
107
  // 36 bytes in base32 = 58 characters + 1 character for the prefix
137
- if (input.length !== 59 && input.length !== 8) {
138
- throw new RangeError(`cid too short`);
108
+ if (input.length !== 59 || input[0] !== 'b') {
109
+ throw new SyntaxError(`not a valid cid string`);
139
110
  }
140
111
  const bytes = fromBase32(input.slice(1));
141
- const cid = decode(bytes);
142
- CID_STRINGIFY_CACHE.set(cid, input);
143
- return cid;
112
+ return decode(bytes);
144
113
  };
145
114
  /**
146
115
  * encodes a CID to a multibase base32 string
@@ -148,12 +117,7 @@ export const fromString = (input) => {
148
117
  * @returns base32-encoded string with 'b' prefix
149
118
  */
150
119
  export const toString = (cid) => {
151
- let str = CID_STRINGIFY_CACHE.get(cid);
152
- if (str === undefined) {
153
- str = `b${toBase32(cid.bytes)}`;
154
- CID_STRINGIFY_CACHE.set(cid, str);
155
- }
156
- return str;
120
+ return `b${toBase32(cid.bytes)}`;
157
121
  };
158
122
  /**
159
123
  * parses a CID from binary format (with 0x00 prefix)
@@ -163,16 +127,11 @@ export const toString = (cid) => {
163
127
  * @throws {SyntaxError} if the prefix byte is not 0x00
164
128
  */
165
129
  export const fromBinary = (input) => {
166
- // 4 bytes + 1 byte for the 0x00 prefix
167
130
  // 36 bytes + 1 byte for the 0x00 prefix
168
- if (input.length !== 37 && input.length !== 5) {
169
- throw new RangeError(`cid bytes too short`);
131
+ if (input.length !== 37 || input[0] !== 0) {
132
+ throw new SyntaxError(`invalid binary cid`);
170
133
  }
171
- if (input[0] !== 0) {
172
- throw new SyntaxError(`incorrect binary cid`);
173
- }
174
- const bytes = input.subarray(1);
175
- return decode(bytes);
134
+ return decode(input.subarray(1));
176
135
  };
177
136
  /**
178
137
  * encodes a CID to binary format (with 0x00 prefix)
package/dist/codec.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"codec.js","sourceRoot":"","sources":["../lib/codec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../lib/codec.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export * from './cid-link.js';
2
- export * from './codec.js';
1
+ export * from './cid-link.ts';
2
+ export * from './codec.ts';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAEA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ // implements github:darobin/dasl.ing@cc66c35 (2025-10-20)
1
2
  export * from './cid-link.js';
2
3
  export * from './codec.js';
3
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
package/lib/cid-link.ts CHANGED
@@ -1,12 +1,9 @@
1
1
  import { toBase32 } from '@atcute/multibase';
2
2
 
3
- import { CID_STRINGIFY_CACHE, decode, fromString, type Cid } from './codec.js';
3
+ import { decode, fromString, type Cid } from './codec.ts';
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
-
10
7
  export interface CidLink {
11
8
  $link: string;
12
9
  }
@@ -22,14 +19,13 @@ export class CidLinkWrapper implements CidLink {
22
19
  }
23
20
 
24
21
  get $link(): string {
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
- }
22
+ const link = `b${toBase32(this.bytes)}`;
23
+ Object.defineProperty(this, '$link', {
24
+ value: link,
25
+ enumerable: true,
26
+ });
31
27
 
32
- return str;
28
+ return link;
33
29
  }
34
30
 
35
31
  toJSON(): CidLink {
@@ -47,14 +43,7 @@ export const isCidLink = (value: unknown): value is CidLink => {
47
43
  };
48
44
 
49
45
  export const toCidLink = (cid: Cid): CidLink => {
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;
46
+ return new CidLinkWrapper(cid.bytes);
58
47
  };
59
48
 
60
49
  export const fromCidLink = (link: CidLink): Cid => {
package/lib/codec.ts CHANGED
@@ -11,11 +11,8 @@ export const CODEC_RAW = 0x55;
11
11
  /** multicodec for DAG-CBOR encoded data */
12
12
  export const CODEC_DCBOR = 0x71;
13
13
 
14
- /** @internal */
15
- export const CID_STRINGIFY_CACHE = new WeakMap<Cid, string>();
16
-
17
14
  /**
18
- * Represents a Content Identifier (CID), in particular, a limited subset of
15
+ * represents a Content Identifier (CID), in particular, a limited subset of
19
16
  * CIDv1 as described by DASL specifications.
20
17
  * https://dasl.ing/cid.html
21
18
  */
@@ -75,33 +72,11 @@ export const fromDigest = (codec: 0x55 | 0x71, digest: Uint8Array): Cid => {
75
72
  * @param data raw data to hash
76
73
  * @returns CID object
77
74
  */
78
- export const create = async (codec: 0x55 | 0x71, data: Uint8Array): Promise<Cid> => {
75
+ export const create = async (codec: 0x55 | 0x71, data: Uint8Array<ArrayBuffer>): Promise<Cid> => {
79
76
  const digest = await toSha256(data);
80
77
  return fromDigest(codec, digest);
81
78
  };
82
79
 
83
- /**
84
- * creates an empty CID with a zero-length digest
85
- * @param codec multicodec type for the data
86
- * @returns CID object with empty digest
87
- */
88
- export const createEmpty = (codec: 0x55 | 0x71): Cid => {
89
- const bytes = Uint8Array.from([CID_VERSION, codec, HASH_SHA256, 0]);
90
- const digest = bytes.subarray(4);
91
-
92
- const cid: Cid = {
93
- version: CID_VERSION,
94
- codec: codec,
95
- digest: {
96
- codec: HASH_SHA256,
97
- contents: digest,
98
- },
99
- bytes: bytes,
100
- };
101
-
102
- return cid;
103
- };
104
-
105
80
  /**
106
81
  * decodes a CID from bytes, returning the CID and any remaining bytes
107
82
  * @param bytes raw CID bytes
@@ -109,9 +84,7 @@ export const createEmpty = (codec: 0x55 | 0x71): Cid => {
109
84
  * @throws {RangeError} if the bytes are too short or contain invalid values
110
85
  */
111
86
  export const decodeFirst = (bytes: Uint8Array): [decoded: Cid, remainder: Uint8Array] => {
112
- const length = bytes.length;
113
-
114
- if (length < 4) {
87
+ if (bytes.length < 36) {
115
88
  throw new RangeError(`cid too short`);
116
89
  }
117
90
 
@@ -132,25 +105,21 @@ export const decodeFirst = (bytes: Uint8Array): [decoded: Cid, remainder: Uint8A
132
105
  throw new RangeError(`incorrect cid digest codec (got 0x${digestType.toString(16)})`);
133
106
  }
134
107
 
135
- if (digestSize !== 32 && digestSize !== 0) {
108
+ if (digestSize !== 32) {
136
109
  throw new RangeError(`incorrect cid digest size (got ${digestSize})`);
137
110
  }
138
111
 
139
- if (length < 4 + digestSize) {
140
- throw new RangeError(`cid too short`);
141
- }
142
-
143
112
  const cid: Cid = {
144
113
  version: CID_VERSION,
145
114
  codec: codec,
146
115
  digest: {
147
116
  codec: digestType,
148
- contents: bytes.subarray(4, 4 + digestSize),
117
+ contents: bytes.subarray(4, 36),
149
118
  },
150
- bytes: bytes.subarray(0, 4 + digestSize),
119
+ bytes: bytes.subarray(0, 36),
151
120
  };
152
121
 
153
- return [cid, bytes.subarray(4 + digestSize)];
122
+ return [cid, bytes.subarray(36)];
154
123
  };
155
124
 
156
125
  /**
@@ -177,21 +146,13 @@ export const decode = (bytes: Uint8Array): Cid => {
177
146
  * @throws {RangeError} if the string length is invalid
178
147
  */
179
148
  export const fromString = (input: string): Cid => {
180
- if (input.length < 2 || input[0] !== 'b') {
181
- throw new SyntaxError(`not a multibase base32 string`);
182
- }
183
-
184
- // 4 bytes in base32 = 7 characters + 1 character for the prefix
185
149
  // 36 bytes in base32 = 58 characters + 1 character for the prefix
186
- if (input.length !== 59 && input.length !== 8) {
187
- throw new RangeError(`cid too short`);
150
+ if (input.length !== 59 || input[0] !== 'b') {
151
+ throw new SyntaxError(`not a valid cid string`);
188
152
  }
189
153
 
190
154
  const bytes = fromBase32(input.slice(1));
191
- const cid = decode(bytes);
192
-
193
- CID_STRINGIFY_CACHE.set(cid, input);
194
- return cid;
155
+ return decode(bytes);
195
156
  };
196
157
 
197
158
  /**
@@ -200,14 +161,7 @@ export const fromString = (input: string): Cid => {
200
161
  * @returns base32-encoded string with 'b' prefix
201
162
  */
202
163
  export const toString = (cid: Cid): string => {
203
- let str = CID_STRINGIFY_CACHE.get(cid);
204
- if (str === undefined) {
205
- str = `b${toBase32(cid.bytes)}`;
206
-
207
- CID_STRINGIFY_CACHE.set(cid, str);
208
- }
209
-
210
- return str;
164
+ return `b${toBase32(cid.bytes)}`;
211
165
  };
212
166
 
213
167
  /**
@@ -218,18 +172,12 @@ export const toString = (cid: Cid): string => {
218
172
  * @throws {SyntaxError} if the prefix byte is not 0x00
219
173
  */
220
174
  export const fromBinary = (input: Uint8Array): Cid => {
221
- // 4 bytes + 1 byte for the 0x00 prefix
222
175
  // 36 bytes + 1 byte for the 0x00 prefix
223
- if (input.length !== 37 && input.length !== 5) {
224
- throw new RangeError(`cid bytes too short`);
225
- }
226
-
227
- if (input[0] !== 0) {
228
- throw new SyntaxError(`incorrect binary cid`);
176
+ if (input.length !== 37 || input[0] !== 0) {
177
+ throw new SyntaxError(`invalid binary cid`);
229
178
  }
230
179
 
231
- const bytes = input.subarray(1);
232
- return decode(bytes);
180
+ return decode(input.subarray(1));
233
181
  };
234
182
 
235
183
  /**
package/lib/index.ts CHANGED
@@ -1,2 +1,4 @@
1
- export * from './cid-link.js';
2
- export * from './codec.js';
1
+ // implements github:darobin/dasl.ing@cc66c35 (2025-10-20)
2
+
3
+ export * from './cid-link.ts';
4
+ export * from './codec.ts';
package/package.json CHANGED
@@ -1,39 +1,39 @@
1
1
  {
2
- "type": "module",
3
2
  "name": "@atcute/cid",
4
- "version": "2.3.0",
3
+ "version": "2.4.1",
5
4
  "description": "lightweight DASL CID codec library for AT Protocol",
6
5
  "keywords": [
7
6
  "atproto",
8
- "dasl",
9
- "cid"
7
+ "cid",
8
+ "dasl"
10
9
  ],
11
10
  "license": "0BSD",
12
11
  "repository": {
13
12
  "url": "https://github.com/mary-ext/atcute",
14
13
  "directory": "packages/utilities/cid"
15
14
  },
16
- "publishConfig": {
17
- "access": "public"
18
- },
19
15
  "files": [
20
16
  "dist/",
21
17
  "lib/",
22
18
  "!lib/**/*.bench.ts",
23
19
  "!lib/**/*.test.ts"
24
20
  ],
21
+ "type": "module",
22
+ "sideEffects": false,
25
23
  "exports": {
26
24
  ".": "./dist/index.js",
27
25
  "./cid-link": "./dist/cid-link.js"
28
26
  },
29
- "sideEffects": false,
30
- "devDependencies": {
31
- "@vitest/coverage-v8": "^4.0.16",
32
- "vitest": "^4.0.16"
27
+ "publishConfig": {
28
+ "access": "public"
33
29
  },
34
30
  "dependencies": {
35
- "@atcute/multibase": "^1.1.6",
36
- "@atcute/uint8array": "^1.0.6"
31
+ "@atcute/multibase": "^1.1.8",
32
+ "@atcute/uint8array": "^1.1.1"
33
+ },
34
+ "devDependencies": {
35
+ "@vitest/coverage-v8": "^4.0.18",
36
+ "vitest": "^4.0.18"
37
37
  },
38
38
  "scripts": {
39
39
  "build": "tsgo --project tsconfig.build.json",