@atproto/repo 0.10.3 → 0.10.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.
Files changed (64) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/block-map.d.ts +1 -1
  3. package/dist/block-map.d.ts.map +1 -1
  4. package/dist/block-map.js.map +1 -1
  5. package/dist/car.d.ts +2 -2
  6. package/dist/car.d.ts.map +1 -1
  7. package/dist/car.js.map +1 -1
  8. package/dist/cid-set.d.ts +1 -1
  9. package/dist/cid-set.d.ts.map +1 -1
  10. package/dist/cid-set.js.map +1 -1
  11. package/dist/data-diff.d.ts +2 -2
  12. package/dist/data-diff.d.ts.map +1 -1
  13. package/dist/data-diff.js.map +1 -1
  14. package/dist/error.d.ts +1 -1
  15. package/dist/error.d.ts.map +1 -1
  16. package/dist/error.js.map +1 -1
  17. package/dist/mst/diff.d.ts +1 -1
  18. package/dist/mst/diff.d.ts.map +1 -1
  19. package/dist/mst/diff.js.map +1 -1
  20. package/dist/mst/mst.d.ts +3 -3
  21. package/dist/mst/mst.d.ts.map +1 -1
  22. package/dist/mst/mst.js.map +1 -1
  23. package/dist/mst/util.d.ts +3 -3
  24. package/dist/mst/util.d.ts.map +1 -1
  25. package/dist/mst/util.js +1 -1
  26. package/dist/mst/util.js.map +1 -1
  27. package/dist/mst/walker.d.ts +1 -1
  28. package/dist/mst/walker.d.ts.map +1 -1
  29. package/dist/mst/walker.js.map +1 -1
  30. package/dist/parse.d.ts +3 -3
  31. package/dist/parse.d.ts.map +1 -1
  32. package/dist/parse.js.map +1 -1
  33. package/dist/readable-repo.d.ts +3 -3
  34. package/dist/readable-repo.d.ts.map +1 -1
  35. package/dist/readable-repo.js.map +1 -1
  36. package/dist/repo.d.ts +4 -4
  37. package/dist/repo.d.ts.map +1 -1
  38. package/dist/repo.js.map +1 -1
  39. package/dist/storage/memory-blockstore.d.ts +3 -3
  40. package/dist/storage/memory-blockstore.d.ts.map +1 -1
  41. package/dist/storage/memory-blockstore.js.map +1 -1
  42. package/dist/storage/readable-blockstore.d.ts +3 -3
  43. package/dist/storage/readable-blockstore.d.ts.map +1 -1
  44. package/dist/storage/readable-blockstore.js.map +1 -1
  45. package/dist/storage/sync-storage.d.ts +2 -2
  46. package/dist/storage/sync-storage.d.ts.map +1 -1
  47. package/dist/storage/sync-storage.js.map +1 -1
  48. package/dist/storage/types.d.ts +4 -4
  49. package/dist/storage/types.d.ts.map +1 -1
  50. package/dist/storage/types.js.map +1 -1
  51. package/dist/sync/consumer.d.ts +3 -3
  52. package/dist/sync/consumer.d.ts.map +1 -1
  53. package/dist/sync/consumer.js.map +1 -1
  54. package/dist/sync/provider.d.ts +3 -3
  55. package/dist/sync/provider.d.ts.map +1 -1
  56. package/dist/sync/provider.js.map +1 -1
  57. package/dist/types.d.ts +4 -4
  58. package/dist/types.d.ts.map +1 -1
  59. package/dist/types.js.map +1 -1
  60. package/dist/util.d.ts +4 -4
  61. package/dist/util.d.ts.map +1 -1
  62. package/dist/util.js +1 -1
  63. package/dist/util.js.map +1 -1
  64. package/package.json +7 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @atproto/repo
2
2
 
3
+ ## 0.10.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [#5197](https://github.com/bluesky-social/atproto/pull/5197) [`a0c49d9`](https://github.com/bluesky-social/atproto/commit/a0c49d9e8bc685c5a747a8d3b2775c73c63fdb6f) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Rewrite import statements to be compatible with TypeScript's `verbatimModuleSyntax` config.
8
+
9
+ - Updated dependencies [[`a0c49d9`](https://github.com/bluesky-social/atproto/commit/a0c49d9e8bc685c5a747a8d3b2775c73c63fdb6f), [`cc6b901`](https://github.com/bluesky-social/atproto/commit/cc6b901496f607c0b477e48a23c94e6f727396c9), [`cc6b901`](https://github.com/bluesky-social/atproto/commit/cc6b901496f607c0b477e48a23c94e6f727396c9), [`cc6b901`](https://github.com/bluesky-social/atproto/commit/cc6b901496f607c0b477e48a23c94e6f727396c9)]:
10
+ - @atproto/lex-cbor@0.1.4
11
+ - @atproto/lex-data@0.1.5
12
+ - @atproto/common-web@0.5.5
13
+ - @atproto/common@0.7.1
14
+ - @atproto/crypto@0.5.4
15
+ - @atproto/syntax@0.7.1
16
+
17
+ ## 0.10.4
18
+
19
+ ### Patch Changes
20
+
21
+ - Updated dependencies [[`d1be0ce`](https://github.com/bluesky-social/atproto/commit/d1be0cead444ef95e64cac5ea5318edbec9d8112), [`d1be0ce`](https://github.com/bluesky-social/atproto/commit/d1be0cead444ef95e64cac5ea5318edbec9d8112), [`d79f6d5`](https://github.com/bluesky-social/atproto/commit/d79f6d59a073c05cc37bd0d1482beeea482b67ed)]:
22
+ - @atproto/syntax@0.7.0
23
+ - @atproto/common@0.7.0
24
+ - @atproto/common-web@0.5.4
25
+
3
26
  ## 0.10.3
4
27
 
5
28
  ### Patch Changes
@@ -1,4 +1,4 @@
1
- import { Cid, LexValue } from '@atproto/lex-data';
1
+ import { type Cid, type LexValue } from '@atproto/lex-data';
2
2
  export declare class BlockMap implements Iterable<[cid: Cid, bytes: Uint8Array]> {
3
3
  private map;
4
4
  constructor(entries?: Iterable<readonly [cid: Cid, bytes: Uint8Array]>);
@@ -1 +1 @@
1
- {"version":3,"file":"block-map.d.ts","sourceRoot":"","sources":["../src/block-map.ts"],"names":[],"mappings":"AACA,OAAO,EACL,GAAG,EACH,QAAQ,EAIT,MAAM,mBAAmB,CAAA;AAE1B,qBAAa,QAAS,YAAW,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAqC;IAEhD,YAAY,OAAO,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,EAMrE;IAEK,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAKvC;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,GAAG,QAAQ,CAGzC;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,UAAU,GAAG,SAAS,CAEpC;IAED,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,CAGzB;IAED,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,GAAG,EAAE,CAAA;KAAE,CAYzD;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAErB;IAED,KAAK,IAAI,IAAI,CAEZ;IAED,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAEvD;IAED,OAAO,IAAI,KAAK,EAAE,CAEjB;IAED,IAAI,IAAI,GAAG,EAAE,CAEZ;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAGhC;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,QAAQ,IAAI,MAAM,CAIrB;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAY/B;IAEA,IAAI,IAAI,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAIrC;IAEA,MAAM,IAAI,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAE9C;IAEA,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAIhE;CACF;AAMD,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,UAAU,CAAA;CAClB,CAAA;eAEc,QAAQ"}
1
+ {"version":3,"file":"block-map.d.ts","sourceRoot":"","sources":["../src/block-map.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,GAAG,EACR,KAAK,QAAQ,EAId,MAAM,mBAAmB,CAAA;AAE1B,qBAAa,QAAS,YAAW,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAqC;IAEhD,YAAY,OAAO,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,EAMrE;IAEK,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAKvC;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,GAAG,QAAQ,CAGzC;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,UAAU,GAAG,SAAS,CAEpC;IAED,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,CAGzB;IAED,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,GAAG,EAAE,CAAA;KAAE,CAYzD;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAErB;IAED,KAAK,IAAI,IAAI,CAEZ;IAED,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAEvD;IAED,OAAO,IAAI,KAAK,EAAE,CAEjB;IAED,IAAI,IAAI,GAAG,EAAE,CAEZ;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAGhC;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,QAAQ,IAAI,MAAM,CAIrB;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAY/B;IAEA,IAAI,IAAI,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAIrC;IAEA,MAAM,IAAI,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAE9C;IAEA,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAIhE;CACF;AAMD,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,UAAU,CAAA;CAClB,CAAA;eAEc,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"block-map.js","sourceRoot":"","sources":["../src/block-map.ts"],"names":[],"mappings":"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","sourcesContent":["import { encode } from '@atproto/lex-cbor'\nimport {\n Cid,\n LexValue,\n cidForCbor,\n parseCid,\n ui8Equals,\n} from '@atproto/lex-data'\n\nexport class BlockMap implements Iterable<[cid: Cid, bytes: Uint8Array]> {\n private map: Map<string, Uint8Array> = new Map()\n\n constructor(entries?: Iterable<readonly [cid: Cid, bytes: Uint8Array]>) {\n if (entries) {\n for (const [cid, bytes] of entries) {\n this.set(cid, bytes)\n }\n }\n }\n\n async add(value: LexValue): Promise<Cid> {\n const bytes = encode(value)\n const cid = await cidForCbor(bytes)\n this.set(cid, bytes)\n return cid\n }\n\n set(cid: Cid, bytes: Uint8Array): BlockMap {\n this.map.set(cid.toString(), bytes)\n return this\n }\n\n get(cid: Cid): Uint8Array | undefined {\n return this.map.get(cid.toString())\n }\n\n delete(cid: Cid): BlockMap {\n this.map.delete(cid.toString())\n return this\n }\n\n getMany(cids: Cid[]): { blocks: BlockMap; missing: Cid[] } {\n const missing: Cid[] = []\n const blocks = new BlockMap()\n for (const cid of cids) {\n const got = this.map.get(cid.toString())\n if (got) {\n blocks.set(cid, got)\n } else {\n missing.push(cid)\n }\n }\n return { blocks, missing }\n }\n\n has(cid: Cid): boolean {\n return this.map.has(cid.toString())\n }\n\n clear(): void {\n this.map.clear()\n }\n\n forEach(cb: (bytes: Uint8Array, cid: Cid) => void): void {\n for (const [cid, bytes] of this) cb(bytes, cid)\n }\n\n entries(): Entry[] {\n return Array.from(this, toEntry)\n }\n\n cids(): Cid[] {\n return Array.from(this.keys())\n }\n\n addMap(toAdd: BlockMap): BlockMap {\n for (const [cid, bytes] of toAdd) this.set(cid, bytes)\n return this\n }\n\n get size(): number {\n return this.map.size\n }\n\n get byteSize(): number {\n let size = 0\n for (const bytes of this.values()) size += bytes.length\n return size\n }\n\n equals(other: BlockMap): boolean {\n if (this.size !== other.size) {\n return false\n }\n for (const [cid, bytes] of this) {\n const otherBytes = other.get(cid)\n if (!otherBytes) return false\n if (!ui8Equals(bytes, otherBytes)) {\n return false\n }\n }\n return true\n }\n\n *keys(): Generator<Cid, void, unknown> {\n for (const key of this.map.keys()) {\n yield parseCid(key)\n }\n }\n\n *values(): Generator<Uint8Array, void, unknown> {\n yield* this.map.values()\n }\n\n *[Symbol.iterator](): Generator<[Cid, Uint8Array], void, unknown> {\n for (const [key, value] of this.map) {\n yield [parseCid(key), value]\n }\n }\n}\n\nfunction toEntry([cid, bytes]: readonly [Cid, Uint8Array]): Entry {\n return { cid, bytes }\n}\n\ntype Entry = {\n cid: Cid\n bytes: Uint8Array\n}\n\nexport default BlockMap\n"]}
1
+ {"version":3,"file":"block-map.js","sourceRoot":"","sources":["../src/block-map.ts"],"names":[],"mappings":"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","sourcesContent":["import { encode } from '@atproto/lex-cbor'\nimport {\n type Cid,\n type LexValue,\n cidForCbor,\n parseCid,\n ui8Equals,\n} from '@atproto/lex-data'\n\nexport class BlockMap implements Iterable<[cid: Cid, bytes: Uint8Array]> {\n private map: Map<string, Uint8Array> = new Map()\n\n constructor(entries?: Iterable<readonly [cid: Cid, bytes: Uint8Array]>) {\n if (entries) {\n for (const [cid, bytes] of entries) {\n this.set(cid, bytes)\n }\n }\n }\n\n async add(value: LexValue): Promise<Cid> {\n const bytes = encode(value)\n const cid = await cidForCbor(bytes)\n this.set(cid, bytes)\n return cid\n }\n\n set(cid: Cid, bytes: Uint8Array): BlockMap {\n this.map.set(cid.toString(), bytes)\n return this\n }\n\n get(cid: Cid): Uint8Array | undefined {\n return this.map.get(cid.toString())\n }\n\n delete(cid: Cid): BlockMap {\n this.map.delete(cid.toString())\n return this\n }\n\n getMany(cids: Cid[]): { blocks: BlockMap; missing: Cid[] } {\n const missing: Cid[] = []\n const blocks = new BlockMap()\n for (const cid of cids) {\n const got = this.map.get(cid.toString())\n if (got) {\n blocks.set(cid, got)\n } else {\n missing.push(cid)\n }\n }\n return { blocks, missing }\n }\n\n has(cid: Cid): boolean {\n return this.map.has(cid.toString())\n }\n\n clear(): void {\n this.map.clear()\n }\n\n forEach(cb: (bytes: Uint8Array, cid: Cid) => void): void {\n for (const [cid, bytes] of this) cb(bytes, cid)\n }\n\n entries(): Entry[] {\n return Array.from(this, toEntry)\n }\n\n cids(): Cid[] {\n return Array.from(this.keys())\n }\n\n addMap(toAdd: BlockMap): BlockMap {\n for (const [cid, bytes] of toAdd) this.set(cid, bytes)\n return this\n }\n\n get size(): number {\n return this.map.size\n }\n\n get byteSize(): number {\n let size = 0\n for (const bytes of this.values()) size += bytes.length\n return size\n }\n\n equals(other: BlockMap): boolean {\n if (this.size !== other.size) {\n return false\n }\n for (const [cid, bytes] of this) {\n const otherBytes = other.get(cid)\n if (!otherBytes) return false\n if (!ui8Equals(bytes, otherBytes)) {\n return false\n }\n }\n return true\n }\n\n *keys(): Generator<Cid, void, unknown> {\n for (const key of this.map.keys()) {\n yield parseCid(key)\n }\n }\n\n *values(): Generator<Uint8Array, void, unknown> {\n yield* this.map.values()\n }\n\n *[Symbol.iterator](): Generator<[Cid, Uint8Array], void, unknown> {\n for (const [key, value] of this.map) {\n yield [parseCid(key), value]\n }\n }\n}\n\nfunction toEntry([cid, bytes]: readonly [Cid, Uint8Array]): Entry {\n return { cid, bytes }\n}\n\ntype Entry = {\n cid: Cid\n bytes: Uint8Array\n}\n\nexport default BlockMap\n"]}
package/dist/car.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { Cid } from '@atproto/lex-data';
1
+ import { type Cid } from '@atproto/lex-data';
2
2
  import { BlockMap } from './block-map.js';
3
- import { CarBlock } from './types.js';
3
+ import { type CarBlock } from './types.js';
4
4
  export declare function writeCarStream(root: Cid | null, blocks: AsyncIterable<CarBlock>): AsyncIterable<Uint8Array>;
5
5
  export declare function blocksToCarFile(root: Cid | null, blocks: BlockMap): Promise<Uint8Array>;
6
6
  export declare const blocksToCarStream: (root: Cid | null, blocks: BlockMap) => AsyncIterable<Uint8Array>;
package/dist/car.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"car.d.ts","sourceRoot":"","sources":["../src/car.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAA4B,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAU,MAAM,YAAY,CAAA;AAG7C,wBAAuB,cAAc,CACnC,IAAI,EAAE,GAAG,GAAG,IAAI,EAChB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC9B,aAAa,CAAC,UAAU,CAAC,CAgB3B;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,GAAG,GAAG,IAAI,EAChB,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,UAAU,CAAC,CAErB;AAED,eAAO,MAAM,iBAAiB,SACtB,GAAG,GAAG,IAAI,UACR,QAAQ,KACf,aAAa,CAAC,UAAU,CAE1B,CAAA;AAQD,MAAM,MAAM,cAAc,GAAG;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,OAAO,UACX,UAAU,SACV,cAAc,KACpB,OAAO,CAAC;IAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,CAO5C,CAAA;AAED,eAAO,MAAM,eAAe,UACnB,UAAU,SACV,cAAc,KACpB,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,CAUzC,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG;IACvE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,aAAa,QACnB,QAAQ,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,SAC9C,cAAc,KACpB,OAAO,CAAC;IACT,KAAK,EAAE,GAAG,EAAE,CAAA;IACZ,MAAM,EAAE,gBAAgB,CAAA;CACzB,CAEA,CAAA;AAED,eAAO,MAAM,aAAa,WAChB,WAAW,SACZ,cAAc,KACpB,OAAO,CAAC;IACT,KAAK,EAAE,GAAG,EAAE,CAAA;IACZ,MAAM,EAAE,gBAAgB,CAAA;CACzB,CAoBA,CAAA;AAoDD,wBAAuB,uBAAuB,CAC5C,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC3B,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAOzC;AAuBD,UAAU,WAAW;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB"}
1
+ {"version":3,"file":"car.d.ts","sourceRoot":"","sources":["../src/car.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,GAAG,EAA4B,MAAM,mBAAmB,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,KAAK,QAAQ,EAAU,MAAM,YAAY,CAAA;AAGlD,wBAAuB,cAAc,CACnC,IAAI,EAAE,GAAG,GAAG,IAAI,EAChB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC9B,aAAa,CAAC,UAAU,CAAC,CAgB3B;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,GAAG,GAAG,IAAI,EAChB,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,UAAU,CAAC,CAErB;AAED,eAAO,MAAM,iBAAiB,SACtB,GAAG,GAAG,IAAI,UACR,QAAQ,KACf,aAAa,CAAC,UAAU,CAE1B,CAAA;AAQD,MAAM,MAAM,cAAc,GAAG;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,OAAO,UACX,UAAU,SACV,cAAc,KACpB,OAAO,CAAC;IAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,CAO5C,CAAA;AAED,eAAO,MAAM,eAAe,UACnB,UAAU,SACV,cAAc,KACpB,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,CAUzC,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG;IACvE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,aAAa,QACnB,QAAQ,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,SAC9C,cAAc,KACpB,OAAO,CAAC;IACT,KAAK,EAAE,GAAG,EAAE,CAAA;IACZ,MAAM,EAAE,gBAAgB,CAAA;CACzB,CAEA,CAAA;AAED,eAAO,MAAM,aAAa,WAChB,WAAW,SACZ,cAAc,KACpB,OAAO,CAAC;IACT,KAAK,EAAE,GAAG,EAAE,CAAA;IACZ,MAAM,EAAE,gBAAgB,CAAA;CACzB,CAoBA,CAAA;AAoDD,wBAAuB,uBAAuB,CAC5C,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC3B,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAOzC;AAuBD,UAAU,WAAW;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB"}
package/dist/car.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"car.js","sourceRoot":"","sources":["../src/car.ts"],"names":[],"mappings":"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","sourcesContent":["import { setImmediate } from 'node:timers/promises'\n// eslint-disable-next-line import/default, import/no-named-as-default-member\nimport varint from 'varint'\nimport * as cbor from '@atproto/lex-cbor'\nimport { Cid, decodeCid, isCidForBytes } from '@atproto/lex-data'\nimport { BlockMap } from './block-map.js'\nimport { CarBlock, schema } from './types.js'\nimport { concatBytesAsync } from './util.js'\n\nexport async function* writeCarStream(\n root: Cid | null,\n blocks: AsyncIterable<CarBlock>,\n): AsyncIterable<Uint8Array> {\n const header = new Uint8Array(\n cbor.encode({\n version: 1,\n roots: root ? [root] : [],\n }),\n )\n yield new Uint8Array(varint.encode(header.byteLength))\n yield header\n for await (const block of blocks) {\n yield new Uint8Array(\n varint.encode(block.cid.bytes.byteLength + block.bytes.byteLength),\n )\n yield block.cid.bytes\n yield block.bytes\n }\n}\n\nexport async function blocksToCarFile(\n root: Cid | null,\n blocks: BlockMap,\n): Promise<Uint8Array> {\n return concatBytesAsync(blocksToCarStream(root, blocks))\n}\n\nexport const blocksToCarStream = (\n root: Cid | null,\n blocks: BlockMap,\n): AsyncIterable<Uint8Array> => {\n return writeCarStream(root, iterateBlocks(blocks))\n}\n\nasync function* iterateBlocks(blocks: BlockMap) {\n for (const entry of blocks.entries()) {\n yield { cid: entry.cid, bytes: entry.bytes }\n }\n}\n\nexport type ReadCarOptions = {\n /**\n * When true, does not verify CID-to-content mapping within CAR.\n */\n skipCidVerification?: boolean\n}\n\nexport const readCar = async (\n bytes: Uint8Array,\n opts?: ReadCarOptions,\n): Promise<{ roots: Cid[]; blocks: BlockMap }> => {\n const { roots, blocks } = await readCarReader(new Ui8Reader(bytes), opts)\n const blockMap = new BlockMap()\n for await (const block of blocks) {\n blockMap.set(block.cid, block.bytes)\n }\n return { roots, blocks: blockMap }\n}\n\nexport const readCarWithRoot = async (\n bytes: Uint8Array,\n opts?: ReadCarOptions,\n): Promise<{ root: Cid; blocks: BlockMap }> => {\n const { roots, blocks } = await readCar(bytes, opts)\n if (roots.length !== 1) {\n throw new Error(`Expected one root, got ${roots.length}`)\n }\n const root = roots[0]\n return {\n root,\n blocks,\n }\n}\nexport type CarBlockIterable = AsyncGenerator<CarBlock, void, unknown> & {\n dump: () => Promise<void>\n}\n\nexport const readCarStream = async (\n car: Iterable<Uint8Array> | AsyncIterable<Uint8Array>,\n opts?: ReadCarOptions,\n): Promise<{\n roots: Cid[]\n blocks: CarBlockIterable\n}> => {\n return readCarReader(new BufferedReader(car), opts)\n}\n\nexport const readCarReader = async (\n reader: BytesReader,\n opts?: ReadCarOptions,\n): Promise<{\n roots: Cid[]\n blocks: CarBlockIterable\n}> => {\n try {\n const headerSize = await readVarint(reader)\n if (headerSize === null) {\n throw new Error('Could not parse CAR header')\n }\n const headerBytes = await reader.read(headerSize)\n const header = cbor.decode(headerBytes)\n const result = schema.carHeader.safeParse(header)\n if (!result.success) {\n throw new Error('Could not parse CAR header', { cause: result.error })\n }\n return {\n roots: result.data.roots,\n blocks: readCarBlocksIter(reader, opts),\n }\n } catch (err) {\n await reader.close()\n throw err\n }\n}\n\nconst readCarBlocksIter = (\n reader: BytesReader,\n opts?: ReadCarOptions,\n): CarBlockIterable => {\n let generator = readCarBlocksIterGenerator(reader)\n if (!opts?.skipCidVerification) {\n generator = verifyIncomingCarBlocks(generator)\n }\n return Object.assign(generator, {\n async dump() {\n // try/finally to ensure that reader.close is called even if blocks.return throws.\n try {\n // Prevent the iterator from being started after this method is called.\n await generator.return()\n } finally {\n // @NOTE the \"finally\" block of the async generator won't be called\n // if the iteration was never started so we need to manually close here.\n await reader.close()\n }\n },\n })\n}\n\nasync function* readCarBlocksIterGenerator(\n reader: BytesReader,\n): AsyncGenerator<CarBlock, void, unknown> {\n let blocks = 0\n try {\n while (!reader.isDone) {\n const blockSize = await readVarint(reader)\n if (blockSize === null) {\n break\n }\n const blockBytes = await reader.read(blockSize)\n const cid = decodeCid(blockBytes.subarray(0, 36))\n const bytes = blockBytes.subarray(36)\n yield { cid, bytes }\n\n // yield to the event loop every 25 blocks\n // in the case the incoming CAR is synchronous, this can end up jamming up the thread\n blocks++\n if (blocks % 25 === 0) {\n await setImmediate()\n }\n }\n } finally {\n await reader.close()\n }\n}\n\nexport async function* verifyIncomingCarBlocks(\n car: AsyncIterable<CarBlock>,\n): AsyncGenerator<CarBlock, void, unknown> {\n for await (const block of car) {\n if (!(await isCidForBytes(block.cid, block.bytes))) {\n throw new Error(`Not a valid CID for bytes (${block.cid.toString()})`)\n }\n yield block\n }\n}\n\nconst readVarint = async (reader: BytesReader): Promise<number | null> => {\n let done = false\n const bytes: Uint8Array[] = []\n while (!done) {\n const byte = await reader.read(1)\n if (byte.byteLength === 0) {\n if (bytes.length > 0) {\n throw new Error('could not parse varint')\n } else {\n return null\n }\n }\n bytes.push(byte)\n if (byte[0] < 128) {\n done = true\n }\n }\n const concatted = Buffer.concat(bytes)\n return varint.decode(concatted)\n}\n\ninterface BytesReader {\n isDone: boolean\n read(bytesToRead: number): Promise<Uint8Array>\n close(): Promise<void>\n}\n\nclass Ui8Reader implements BytesReader {\n idx = 0\n isDone = false\n\n constructor(public bytes: Uint8Array) {}\n\n async read(bytesToRead: number): Promise<Uint8Array> {\n const value = this.bytes.subarray(this.idx, this.idx + bytesToRead)\n this.idx += bytesToRead\n if (this.idx >= this.bytes.length) {\n this.isDone = true\n }\n return value\n }\n\n async close(): Promise<void> {}\n}\n\n/**\n * This code was optimized for performance. See\n * {@link https://github.com/bluesky-social/atproto/pull/4729 #4729} for more details\n * and benchmarks.\n */\nclass BufferedReader implements BytesReader {\n iterator: Iterator<Uint8Array> | AsyncIterator<Uint8Array>\n isDone = false\n\n /** fifo list of chunks to consume */\n private chunks: Uint8Array[] = []\n\n constructor(stream: Iterable<Uint8Array> | AsyncIterable<Uint8Array>) {\n this.iterator =\n Symbol.asyncIterator in stream\n ? stream[Symbol.asyncIterator]()\n : stream[Symbol.iterator]()\n }\n\n /** Number of bytes currently buffered and available for reading */\n get bufferedByteLength() {\n let total = 0\n for (let i = 0; i < this.chunks.length; i++) {\n total += this.chunks[i].byteLength\n }\n return total\n }\n\n /**\n * @note concurrent reads are **NOT** supported by the current implementation\n * and would require call to readUntilBuffered to be using a fifo lock for\n * read()s to be processed in fifo order.\n */\n async read(bytesToRead: number): Promise<Uint8Array> {\n const bytesNeeded = bytesToRead - this.bufferedByteLength\n if (bytesNeeded > 0 && !this.isDone) {\n await this.readUntilBuffered(bytesNeeded)\n }\n\n const resultLength = Math.min(bytesToRead, this.bufferedByteLength)\n if (resultLength <= 0) return new Uint8Array()\n\n const firstChunk = this.consumeChunk(resultLength)\n if (firstChunk.byteLength === resultLength) {\n // If the data consumed from the first chunk contains all we need, return\n // it as-is. This allows to avoid any copy operation.\n return firstChunk\n }\n\n // The first chunk does not have all the data we need. We have to copy\n // multiple chunks into a larger buffer\n const result = new Uint8Array(resultLength)\n let resultWriteIndex = 0\n\n // Copy the first chunk into the result buffer\n result.set(firstChunk, resultWriteIndex)\n resultWriteIndex += firstChunk.byteLength\n\n // Copy more chunks as needed (we use do-while because we *know* we need\n // more than one chunk)\n do {\n const missingLength = resultLength - resultWriteIndex\n const currentChunk = this.consumeChunk(missingLength)\n\n result.set(currentChunk, resultWriteIndex)\n resultWriteIndex += currentChunk.byteLength\n } while (resultWriteIndex < resultLength)\n\n return result\n }\n\n private async readUntilBuffered(bytesNeeded: number) {\n let bytesRead = 0\n while (bytesRead < bytesNeeded) {\n const next = await this.iterator.next()\n if (next.done) {\n this.isDone = true\n break\n } else {\n this.chunks.push(next.value)\n bytesRead += next.value.byteLength\n }\n }\n return bytesRead\n }\n\n private consumeChunk(bytesToConsume: number) {\n const firstChunk = this.chunks[0]!\n if (bytesToConsume < firstChunk.byteLength) {\n // return a sub-view of the data being read and replace the first chunk\n // with a sub-view that does not contain that data.\n\n // @NOTE for some reason, subarray() revealed to be 7-8% slower in NodeJS\n // benchmarks.\n\n // this.chunks[0] = firstChunk.subarray(bytesToConsume)\n // return firstChunk.subarray(0, bytesToConsume)\n\n this.chunks[0] = new Uint8Array(\n firstChunk.buffer,\n firstChunk.byteOffset + bytesToConsume,\n firstChunk.byteLength - bytesToConsume,\n )\n return new Uint8Array(\n firstChunk.buffer,\n firstChunk.byteOffset,\n bytesToConsume,\n )\n } else {\n // First chunk is being read in full, discard it\n this.chunks.shift()\n return firstChunk\n }\n }\n\n async close(): Promise<void> {\n try {\n if (!this.isDone && this.iterator.return) {\n await this.iterator.return()\n }\n } finally {\n this.isDone = true\n this.chunks.length = 0\n }\n }\n}\n"]}
1
+ {"version":3,"file":"car.js","sourceRoot":"","sources":["../src/car.ts"],"names":[],"mappings":"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","sourcesContent":["import { setImmediate } from 'node:timers/promises'\n// eslint-disable-next-line import/default, import/no-named-as-default-member\nimport varint from 'varint'\nimport * as cbor from '@atproto/lex-cbor'\nimport { type Cid, decodeCid, isCidForBytes } from '@atproto/lex-data'\nimport { BlockMap } from './block-map.js'\nimport { type CarBlock, schema } from './types.js'\nimport { concatBytesAsync } from './util.js'\n\nexport async function* writeCarStream(\n root: Cid | null,\n blocks: AsyncIterable<CarBlock>,\n): AsyncIterable<Uint8Array> {\n const header = new Uint8Array(\n cbor.encode({\n version: 1,\n roots: root ? [root] : [],\n }),\n )\n yield new Uint8Array(varint.encode(header.byteLength))\n yield header\n for await (const block of blocks) {\n yield new Uint8Array(\n varint.encode(block.cid.bytes.byteLength + block.bytes.byteLength),\n )\n yield block.cid.bytes\n yield block.bytes\n }\n}\n\nexport async function blocksToCarFile(\n root: Cid | null,\n blocks: BlockMap,\n): Promise<Uint8Array> {\n return concatBytesAsync(blocksToCarStream(root, blocks))\n}\n\nexport const blocksToCarStream = (\n root: Cid | null,\n blocks: BlockMap,\n): AsyncIterable<Uint8Array> => {\n return writeCarStream(root, iterateBlocks(blocks))\n}\n\nasync function* iterateBlocks(blocks: BlockMap) {\n for (const entry of blocks.entries()) {\n yield { cid: entry.cid, bytes: entry.bytes }\n }\n}\n\nexport type ReadCarOptions = {\n /**\n * When true, does not verify CID-to-content mapping within CAR.\n */\n skipCidVerification?: boolean\n}\n\nexport const readCar = async (\n bytes: Uint8Array,\n opts?: ReadCarOptions,\n): Promise<{ roots: Cid[]; blocks: BlockMap }> => {\n const { roots, blocks } = await readCarReader(new Ui8Reader(bytes), opts)\n const blockMap = new BlockMap()\n for await (const block of blocks) {\n blockMap.set(block.cid, block.bytes)\n }\n return { roots, blocks: blockMap }\n}\n\nexport const readCarWithRoot = async (\n bytes: Uint8Array,\n opts?: ReadCarOptions,\n): Promise<{ root: Cid; blocks: BlockMap }> => {\n const { roots, blocks } = await readCar(bytes, opts)\n if (roots.length !== 1) {\n throw new Error(`Expected one root, got ${roots.length}`)\n }\n const root = roots[0]\n return {\n root,\n blocks,\n }\n}\nexport type CarBlockIterable = AsyncGenerator<CarBlock, void, unknown> & {\n dump: () => Promise<void>\n}\n\nexport const readCarStream = async (\n car: Iterable<Uint8Array> | AsyncIterable<Uint8Array>,\n opts?: ReadCarOptions,\n): Promise<{\n roots: Cid[]\n blocks: CarBlockIterable\n}> => {\n return readCarReader(new BufferedReader(car), opts)\n}\n\nexport const readCarReader = async (\n reader: BytesReader,\n opts?: ReadCarOptions,\n): Promise<{\n roots: Cid[]\n blocks: CarBlockIterable\n}> => {\n try {\n const headerSize = await readVarint(reader)\n if (headerSize === null) {\n throw new Error('Could not parse CAR header')\n }\n const headerBytes = await reader.read(headerSize)\n const header = cbor.decode(headerBytes)\n const result = schema.carHeader.safeParse(header)\n if (!result.success) {\n throw new Error('Could not parse CAR header', { cause: result.error })\n }\n return {\n roots: result.data.roots,\n blocks: readCarBlocksIter(reader, opts),\n }\n } catch (err) {\n await reader.close()\n throw err\n }\n}\n\nconst readCarBlocksIter = (\n reader: BytesReader,\n opts?: ReadCarOptions,\n): CarBlockIterable => {\n let generator = readCarBlocksIterGenerator(reader)\n if (!opts?.skipCidVerification) {\n generator = verifyIncomingCarBlocks(generator)\n }\n return Object.assign(generator, {\n async dump() {\n // try/finally to ensure that reader.close is called even if blocks.return throws.\n try {\n // Prevent the iterator from being started after this method is called.\n await generator.return()\n } finally {\n // @NOTE the \"finally\" block of the async generator won't be called\n // if the iteration was never started so we need to manually close here.\n await reader.close()\n }\n },\n })\n}\n\nasync function* readCarBlocksIterGenerator(\n reader: BytesReader,\n): AsyncGenerator<CarBlock, void, unknown> {\n let blocks = 0\n try {\n while (!reader.isDone) {\n const blockSize = await readVarint(reader)\n if (blockSize === null) {\n break\n }\n const blockBytes = await reader.read(blockSize)\n const cid = decodeCid(blockBytes.subarray(0, 36))\n const bytes = blockBytes.subarray(36)\n yield { cid, bytes }\n\n // yield to the event loop every 25 blocks\n // in the case the incoming CAR is synchronous, this can end up jamming up the thread\n blocks++\n if (blocks % 25 === 0) {\n await setImmediate()\n }\n }\n } finally {\n await reader.close()\n }\n}\n\nexport async function* verifyIncomingCarBlocks(\n car: AsyncIterable<CarBlock>,\n): AsyncGenerator<CarBlock, void, unknown> {\n for await (const block of car) {\n if (!(await isCidForBytes(block.cid, block.bytes))) {\n throw new Error(`Not a valid CID for bytes (${block.cid.toString()})`)\n }\n yield block\n }\n}\n\nconst readVarint = async (reader: BytesReader): Promise<number | null> => {\n let done = false\n const bytes: Uint8Array[] = []\n while (!done) {\n const byte = await reader.read(1)\n if (byte.byteLength === 0) {\n if (bytes.length > 0) {\n throw new Error('could not parse varint')\n } else {\n return null\n }\n }\n bytes.push(byte)\n if (byte[0] < 128) {\n done = true\n }\n }\n const concatted = Buffer.concat(bytes)\n return varint.decode(concatted)\n}\n\ninterface BytesReader {\n isDone: boolean\n read(bytesToRead: number): Promise<Uint8Array>\n close(): Promise<void>\n}\n\nclass Ui8Reader implements BytesReader {\n idx = 0\n isDone = false\n\n constructor(public bytes: Uint8Array) {}\n\n async read(bytesToRead: number): Promise<Uint8Array> {\n const value = this.bytes.subarray(this.idx, this.idx + bytesToRead)\n this.idx += bytesToRead\n if (this.idx >= this.bytes.length) {\n this.isDone = true\n }\n return value\n }\n\n async close(): Promise<void> {}\n}\n\n/**\n * This code was optimized for performance. See\n * {@link https://github.com/bluesky-social/atproto/pull/4729 #4729} for more details\n * and benchmarks.\n */\nclass BufferedReader implements BytesReader {\n iterator: Iterator<Uint8Array> | AsyncIterator<Uint8Array>\n isDone = false\n\n /** fifo list of chunks to consume */\n private chunks: Uint8Array[] = []\n\n constructor(stream: Iterable<Uint8Array> | AsyncIterable<Uint8Array>) {\n this.iterator =\n Symbol.asyncIterator in stream\n ? stream[Symbol.asyncIterator]()\n : stream[Symbol.iterator]()\n }\n\n /** Number of bytes currently buffered and available for reading */\n get bufferedByteLength() {\n let total = 0\n for (let i = 0; i < this.chunks.length; i++) {\n total += this.chunks[i].byteLength\n }\n return total\n }\n\n /**\n * @note concurrent reads are **NOT** supported by the current implementation\n * and would require call to readUntilBuffered to be using a fifo lock for\n * read()s to be processed in fifo order.\n */\n async read(bytesToRead: number): Promise<Uint8Array> {\n const bytesNeeded = bytesToRead - this.bufferedByteLength\n if (bytesNeeded > 0 && !this.isDone) {\n await this.readUntilBuffered(bytesNeeded)\n }\n\n const resultLength = Math.min(bytesToRead, this.bufferedByteLength)\n if (resultLength <= 0) return new Uint8Array()\n\n const firstChunk = this.consumeChunk(resultLength)\n if (firstChunk.byteLength === resultLength) {\n // If the data consumed from the first chunk contains all we need, return\n // it as-is. This allows to avoid any copy operation.\n return firstChunk\n }\n\n // The first chunk does not have all the data we need. We have to copy\n // multiple chunks into a larger buffer\n const result = new Uint8Array(resultLength)\n let resultWriteIndex = 0\n\n // Copy the first chunk into the result buffer\n result.set(firstChunk, resultWriteIndex)\n resultWriteIndex += firstChunk.byteLength\n\n // Copy more chunks as needed (we use do-while because we *know* we need\n // more than one chunk)\n do {\n const missingLength = resultLength - resultWriteIndex\n const currentChunk = this.consumeChunk(missingLength)\n\n result.set(currentChunk, resultWriteIndex)\n resultWriteIndex += currentChunk.byteLength\n } while (resultWriteIndex < resultLength)\n\n return result\n }\n\n private async readUntilBuffered(bytesNeeded: number) {\n let bytesRead = 0\n while (bytesRead < bytesNeeded) {\n const next = await this.iterator.next()\n if (next.done) {\n this.isDone = true\n break\n } else {\n this.chunks.push(next.value)\n bytesRead += next.value.byteLength\n }\n }\n return bytesRead\n }\n\n private consumeChunk(bytesToConsume: number) {\n const firstChunk = this.chunks[0]!\n if (bytesToConsume < firstChunk.byteLength) {\n // return a sub-view of the data being read and replace the first chunk\n // with a sub-view that does not contain that data.\n\n // @NOTE for some reason, subarray() revealed to be 7-8% slower in NodeJS\n // benchmarks.\n\n // this.chunks[0] = firstChunk.subarray(bytesToConsume)\n // return firstChunk.subarray(0, bytesToConsume)\n\n this.chunks[0] = new Uint8Array(\n firstChunk.buffer,\n firstChunk.byteOffset + bytesToConsume,\n firstChunk.byteLength - bytesToConsume,\n )\n return new Uint8Array(\n firstChunk.buffer,\n firstChunk.byteOffset,\n bytesToConsume,\n )\n } else {\n // First chunk is being read in full, discard it\n this.chunks.shift()\n return firstChunk\n }\n }\n\n async close(): Promise<void> {\n try {\n if (!this.isDone && this.iterator.return) {\n await this.iterator.return()\n }\n } finally {\n this.isDone = true\n this.chunks.length = 0\n }\n }\n}\n"]}
package/dist/cid-set.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Cid } from '@atproto/lex-data';
1
+ import { type Cid } from '@atproto/lex-data';
2
2
  export declare class CidSet implements Iterable<Cid> {
3
3
  private set;
4
4
  constructor(arr?: Cid[]);
@@ -1 +1 @@
1
- {"version":3,"file":"cid-set.d.ts","sourceRoot":"","sources":["../src/cid-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,mBAAmB,CAAA;AAEjD,qBAAa,MAAO,YAAW,QAAQ,CAAC,GAAG,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAa;IAExB,YAAY,GAAG,GAAE,GAAG,EAAO,EAG1B;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAGpB;IAED,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG9B;IAED,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGtC;IAED,MAAM,CAAC,GAAG,EAAE,GAAG,QAGd;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAErB;IAED,IAAI,IAAI,MAAM,CAEb;IAED,KAAK,IAAI,MAAM,CAGd;IAED,MAAM,IAAI,GAAG,EAAE,CAEd;IAEA,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAIlD;CACF;eAEc,MAAM"}
1
+ {"version":3,"file":"cid-set.d.ts","sourceRoot":"","sources":["../src/cid-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAY,MAAM,mBAAmB,CAAA;AAEtD,qBAAa,MAAO,YAAW,QAAQ,CAAC,GAAG,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAa;IAExB,YAAY,GAAG,GAAE,GAAG,EAAO,EAG1B;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAGpB;IAED,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG9B;IAED,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGtC;IAED,MAAM,CAAC,GAAG,EAAE,GAAG,QAGd;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAErB;IAED,IAAI,IAAI,MAAM,CAEb;IAED,KAAK,IAAI,MAAM,CAGd;IAED,MAAM,IAAI,GAAG,EAAE,CAEd;IAEA,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAIlD;CACF;eAEc,MAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"cid-set.js","sourceRoot":"","sources":["../src/cid-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,MAAM,OAAO,MAAM;IAGjB,YAAY,GAAG,GAAU,EAAE;QACzB,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;IAED,GAAG,CAAC,GAAQ;QACV,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,WAAW,CAAC,UAAkB;QAC5B,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAClD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,GAAQ;QACb,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAC,GAAQ;QACV,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAA;IACtB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;CACF;AAED,eAAe,MAAM,CAAA","sourcesContent":["import { Cid, parseCid } from '@atproto/lex-data'\n\nexport class CidSet implements Iterable<Cid> {\n private set: Set<string>\n\n constructor(arr: Cid[] = []) {\n const strArr = arr.map((c) => c.toString())\n this.set = new Set(strArr)\n }\n\n add(cid: Cid): CidSet {\n this.set.add(cid.toString())\n return this\n }\n\n addSet(toMerge: CidSet): CidSet {\n for (const c of toMerge.set) this.set.add(c)\n return this\n }\n\n subtractSet(toSubtract: CidSet): CidSet {\n for (const c of toSubtract.set) this.set.delete(c)\n return this\n }\n\n delete(cid: Cid) {\n this.set.delete(cid.toString())\n return this\n }\n\n has(cid: Cid): boolean {\n return this.set.has(cid.toString())\n }\n\n size(): number {\n return this.set.size\n }\n\n clear(): CidSet {\n this.set.clear()\n return this\n }\n\n toList(): Cid[] {\n return Array.from(this)\n }\n\n *[Symbol.iterator](): Generator<Cid, void, unknown> {\n for (const c of this.set) {\n yield parseCid(c)\n }\n }\n}\n\nexport default CidSet\n"]}
1
+ {"version":3,"file":"cid-set.js","sourceRoot":"","sources":["../src/cid-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEtD,MAAM,OAAO,MAAM;IAGjB,YAAY,GAAG,GAAU,EAAE;QACzB,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;IAED,GAAG,CAAC,GAAQ;QACV,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,WAAW,CAAC,UAAkB;QAC5B,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAClD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,GAAQ;QACb,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAC,GAAQ;QACV,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAA;IACtB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;CACF;AAED,eAAe,MAAM,CAAA","sourcesContent":["import { type Cid, parseCid } from '@atproto/lex-data'\n\nexport class CidSet implements Iterable<Cid> {\n private set: Set<string>\n\n constructor(arr: Cid[] = []) {\n const strArr = arr.map((c) => c.toString())\n this.set = new Set(strArr)\n }\n\n add(cid: Cid): CidSet {\n this.set.add(cid.toString())\n return this\n }\n\n addSet(toMerge: CidSet): CidSet {\n for (const c of toMerge.set) this.set.add(c)\n return this\n }\n\n subtractSet(toSubtract: CidSet): CidSet {\n for (const c of toSubtract.set) this.set.delete(c)\n return this\n }\n\n delete(cid: Cid) {\n this.set.delete(cid.toString())\n return this\n }\n\n has(cid: Cid): boolean {\n return this.set.has(cid.toString())\n }\n\n size(): number {\n return this.set.size\n }\n\n clear(): CidSet {\n this.set.clear()\n return this\n }\n\n toList(): Cid[] {\n return Array.from(this)\n }\n\n *[Symbol.iterator](): Generator<Cid, void, unknown> {\n for (const c of this.set) {\n yield parseCid(c)\n }\n }\n}\n\nexport default CidSet\n"]}
@@ -1,7 +1,7 @@
1
- import { Cid } from '@atproto/lex-data';
1
+ import type { Cid } from '@atproto/lex-data';
2
2
  import { BlockMap } from './block-map.js';
3
3
  import { CidSet } from './cid-set.js';
4
- import { MST, NodeEntry } from './mst/index.js';
4
+ import { type MST, type NodeEntry } from './mst/index.js';
5
5
  export declare class DataDiff {
6
6
  adds: Record<string, DataAdd>;
7
7
  updates: Record<string, DataUpdate>;
@@ -1 +1 @@
1
- {"version":3,"file":"data-diff.d.ts","sourceRoot":"","sources":["../src/data-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAW,MAAM,gBAAgB,CAAA;AAExD,qBAAa,QAAQ;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAK;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAK;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAK;IAExC,YAAY,EAAE,QAAQ,CAAiB;IACvC,WAAW,EAAE,MAAM,CAAe;IAClC,WAAW,EAAE,MAAM,CAAe;IAElC,OAAa,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAE9D;IAEK,OAAO,CAAC,IAAI,EAAE,SAAS,iBAO5B;IAEK,UAAU,CAAC,IAAI,EAAE,SAAS,iBAU/B;IAED,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,QAO5B;IAED,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAK1C;IAED,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,QAO/B;IAED,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,QAMlC;IAED,UAAU,CAAC,GAAG,EAAE,GAAG,QAMlB;IAED,OAAO,IAAI,OAAO,EAAE,CAEnB;IAED,UAAU,IAAI,UAAU,EAAE,CAEzB;IAED,UAAU,IAAI,UAAU,EAAE,CAEzB;IAED,WAAW,IAAI,MAAM,EAAE,CAOtB;CACF;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,GAAG,CAAA;IACT,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,GAAG,CAAA;CACT,CAAA"}
1
+ {"version":3,"file":"data-diff.d.ts","sourceRoot":"","sources":["../src/data-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAW,MAAM,gBAAgB,CAAA;AAElE,qBAAa,QAAQ;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAK;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAK;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAK;IAExC,YAAY,EAAE,QAAQ,CAAiB;IACvC,WAAW,EAAE,MAAM,CAAe;IAClC,WAAW,EAAE,MAAM,CAAe;IAElC,OAAa,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAE9D;IAEK,OAAO,CAAC,IAAI,EAAE,SAAS,iBAO5B;IAEK,UAAU,CAAC,IAAI,EAAE,SAAS,iBAU/B;IAED,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,QAO5B;IAED,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAK1C;IAED,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,QAO/B;IAED,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,QAMlC;IAED,UAAU,CAAC,GAAG,EAAE,GAAG,QAMlB;IAED,OAAO,IAAI,OAAO,EAAE,CAEnB;IAED,UAAU,IAAI,UAAU,EAAE,CAEzB;IAED,UAAU,IAAI,UAAU,EAAE,CAEzB;IAED,WAAW,IAAI,MAAM,EAAE,CAOtB;CACF;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,GAAG,CAAA;IACT,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,GAAG,CAAA;CACT,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-diff.js","sourceRoot":"","sources":["../src/data-diff.ts"],"names":[],"mappings":"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","sourcesContent":["import { Cid } from '@atproto/lex-data'\nimport { BlockMap } from './block-map.js'\nimport { CidSet } from './cid-set.js'\nimport { MST, NodeEntry, mstDiff } from './mst/index.js'\n\nexport class DataDiff {\n adds: Record<string, DataAdd> = {}\n updates: Record<string, DataUpdate> = {}\n deletes: Record<string, DataDelete> = {}\n\n newMstBlocks: BlockMap = new BlockMap()\n newLeafCids: CidSet = new CidSet()\n removedCids: CidSet = new CidSet()\n\n static async of(curr: MST, prev: MST | null): Promise<DataDiff> {\n return mstDiff(curr, prev)\n }\n\n async nodeAdd(node: NodeEntry) {\n if (node.isLeaf()) {\n this.leafAdd(node.key, node.value)\n } else {\n const data = await node.serialize()\n this.treeAdd(data.cid, data.bytes)\n }\n }\n\n async nodeDelete(node: NodeEntry) {\n if (node.isLeaf()) {\n const key = node.key\n const cid = node.value\n this.deletes[key] = { key, cid }\n this.removedCids.add(cid)\n } else {\n const cid = await node.getPointer()\n this.treeDelete(cid)\n }\n }\n\n leafAdd(key: string, cid: Cid) {\n this.adds[key] = { key, cid }\n if (this.removedCids.has(cid)) {\n this.removedCids.delete(cid)\n } else {\n this.newLeafCids.add(cid)\n }\n }\n\n leafUpdate(key: string, prev: Cid, cid: Cid) {\n if (prev.equals(cid)) return\n this.updates[key] = { key, prev, cid }\n this.removedCids.add(prev)\n this.newLeafCids.add(cid)\n }\n\n leafDelete(key: string, cid: Cid) {\n this.deletes[key] = { key, cid }\n if (this.newLeafCids.has(cid)) {\n this.newLeafCids.delete(cid)\n } else {\n this.removedCids.add(cid)\n }\n }\n\n treeAdd(cid: Cid, bytes: Uint8Array) {\n if (this.removedCids.has(cid)) {\n this.removedCids.delete(cid)\n } else {\n this.newMstBlocks.set(cid, bytes)\n }\n }\n\n treeDelete(cid: Cid) {\n if (this.newMstBlocks.has(cid)) {\n this.newMstBlocks.delete(cid)\n } else {\n this.removedCids.add(cid)\n }\n }\n\n addList(): DataAdd[] {\n return Object.values(this.adds)\n }\n\n updateList(): DataUpdate[] {\n return Object.values(this.updates)\n }\n\n deleteList(): DataDelete[] {\n return Object.values(this.deletes)\n }\n\n updatedKeys(): string[] {\n const keys = [\n ...Object.keys(this.adds),\n ...Object.keys(this.updates),\n ...Object.keys(this.deletes),\n ]\n return [...new Set(keys)]\n }\n}\n\nexport type DataAdd = {\n key: string\n cid: Cid\n}\n\nexport type DataUpdate = {\n key: string\n prev: Cid\n cid: Cid\n}\n\nexport type DataDelete = {\n key: string\n cid: Cid\n}\n"]}
1
+ {"version":3,"file":"data-diff.js","sourceRoot":"","sources":["../src/data-diff.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Cid } from '@atproto/lex-data'\nimport { BlockMap } from './block-map.js'\nimport { CidSet } from './cid-set.js'\nimport { type MST, type NodeEntry, mstDiff } from './mst/index.js'\n\nexport class DataDiff {\n adds: Record<string, DataAdd> = {}\n updates: Record<string, DataUpdate> = {}\n deletes: Record<string, DataDelete> = {}\n\n newMstBlocks: BlockMap = new BlockMap()\n newLeafCids: CidSet = new CidSet()\n removedCids: CidSet = new CidSet()\n\n static async of(curr: MST, prev: MST | null): Promise<DataDiff> {\n return mstDiff(curr, prev)\n }\n\n async nodeAdd(node: NodeEntry) {\n if (node.isLeaf()) {\n this.leafAdd(node.key, node.value)\n } else {\n const data = await node.serialize()\n this.treeAdd(data.cid, data.bytes)\n }\n }\n\n async nodeDelete(node: NodeEntry) {\n if (node.isLeaf()) {\n const key = node.key\n const cid = node.value\n this.deletes[key] = { key, cid }\n this.removedCids.add(cid)\n } else {\n const cid = await node.getPointer()\n this.treeDelete(cid)\n }\n }\n\n leafAdd(key: string, cid: Cid) {\n this.adds[key] = { key, cid }\n if (this.removedCids.has(cid)) {\n this.removedCids.delete(cid)\n } else {\n this.newLeafCids.add(cid)\n }\n }\n\n leafUpdate(key: string, prev: Cid, cid: Cid) {\n if (prev.equals(cid)) return\n this.updates[key] = { key, prev, cid }\n this.removedCids.add(prev)\n this.newLeafCids.add(cid)\n }\n\n leafDelete(key: string, cid: Cid) {\n this.deletes[key] = { key, cid }\n if (this.newLeafCids.has(cid)) {\n this.newLeafCids.delete(cid)\n } else {\n this.removedCids.add(cid)\n }\n }\n\n treeAdd(cid: Cid, bytes: Uint8Array) {\n if (this.removedCids.has(cid)) {\n this.removedCids.delete(cid)\n } else {\n this.newMstBlocks.set(cid, bytes)\n }\n }\n\n treeDelete(cid: Cid) {\n if (this.newMstBlocks.has(cid)) {\n this.newMstBlocks.delete(cid)\n } else {\n this.removedCids.add(cid)\n }\n }\n\n addList(): DataAdd[] {\n return Object.values(this.adds)\n }\n\n updateList(): DataUpdate[] {\n return Object.values(this.updates)\n }\n\n deleteList(): DataDelete[] {\n return Object.values(this.deletes)\n }\n\n updatedKeys(): string[] {\n const keys = [\n ...Object.keys(this.adds),\n ...Object.keys(this.updates),\n ...Object.keys(this.deletes),\n ]\n return [...new Set(keys)]\n }\n}\n\nexport type DataAdd = {\n key: string\n cid: Cid\n}\n\nexport type DataUpdate = {\n key: string\n prev: Cid\n cid: Cid\n}\n\nexport type DataDelete = {\n key: string\n cid: Cid\n}\n"]}
package/dist/error.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Cid } from '@atproto/lex-data';
1
+ import type { Cid } from '@atproto/lex-data';
2
2
  export declare class MissingBlockError extends Error {
3
3
  cid: Cid;
4
4
  constructor(cid: Cid, def?: string);
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAEvC,qBAAa,iBAAkB,SAAQ,KAAK;IAEjC,GAAG,EAAE,GAAG;IADjB,YACS,GAAG,EAAE,GAAG,EACf,GAAG,CAAC,EAAE,MAAM,EAOb;CACF;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAElC,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,GAAG,EAAE;IAFpB,YACS,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,GAAG,EAAE,EAInB;CACF;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAExC,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,GAAG,EAAE;IAFpB,YACS,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,GAAG,EAAE,EAInB;CACF;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAErC,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,MAAM;IAFpB,YACS,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,MAAM,EAGnB;CACF"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAE5C,qBAAa,iBAAkB,SAAQ,KAAK;IAEjC,GAAG,EAAE,GAAG;IADjB,YACS,GAAG,EAAE,GAAG,EACf,GAAG,CAAC,EAAE,MAAM,EAOb;CACF;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAElC,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,GAAG,EAAE;IAFpB,YACS,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,GAAG,EAAE,EAInB;CACF;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAExC,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,GAAG,EAAE;IAFpB,YACS,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,GAAG,EAAE,EAInB;CACF;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAErC,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,MAAM;IAFpB,YACS,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,MAAM,EAGnB;CACF"}
package/dist/error.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YACS,GAAQ,EACf,GAAY;QAEZ,IAAI,GAAG,GAAG,oBAAoB,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAA;QAC9C,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,IAAI,oBAAoB,GAAG,EAAE,CAAA;QAClC,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,CAAA;mBAPH,GAAG;IAQZ,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YACS,OAAe,EACf,IAAW;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5C,KAAK,CAAC,WAAW,OAAO,YAAY,MAAM,EAAE,CAAC,CAAA;uBAJtC,OAAO;oBACP,IAAI;IAIb,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YACS,MAAW,EACX,IAAW;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5C,KAAK,CAAC,6BAA6B,MAAM,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC,CAAA;sBAJ3D,MAAM;oBACN,IAAI;IAIb,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YACS,GAAQ,EACR,GAAW;QAElB,KAAK,CAAC,wBAAwB,GAAG,CAAC,QAAQ,EAAE,eAAe,GAAG,EAAE,CAAC,CAAA;mBAH1D,GAAG;mBACH,GAAG;IAGZ,CAAC;CACF","sourcesContent":["import { Cid } from '@atproto/lex-data'\n\nexport class MissingBlockError extends Error {\n constructor(\n public cid: Cid,\n def?: string,\n ) {\n let msg = `block not found: ${cid.toString()}`\n if (def) {\n msg += `, expected type: ${def}`\n }\n super(msg)\n }\n}\n\nexport class MissingBlocksError extends Error {\n constructor(\n public context: string,\n public cids: Cid[],\n ) {\n const cidStr = cids.map((c) => c.toString())\n super(`missing ${context} blocks: ${cidStr}`)\n }\n}\n\nexport class MissingCommitBlocksError extends Error {\n constructor(\n public commit: Cid,\n public cids: Cid[],\n ) {\n const cidStr = cids.map((c) => c.toString())\n super(`missing blocks for commit ${commit.toString()}: ${cidStr}`)\n }\n}\n\nexport class UnexpectedObjectError extends Error {\n constructor(\n public cid: Cid,\n public def: string,\n ) {\n super(`unexpected object at ${cid.toString()}, expected: ${def}`)\n }\n}\n"]}
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YACS,GAAQ,EACf,GAAY;QAEZ,IAAI,GAAG,GAAG,oBAAoB,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAA;QAC9C,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,IAAI,oBAAoB,GAAG,EAAE,CAAA;QAClC,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,CAAA;mBAPH,GAAG;IAQZ,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YACS,OAAe,EACf,IAAW;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5C,KAAK,CAAC,WAAW,OAAO,YAAY,MAAM,EAAE,CAAC,CAAA;uBAJtC,OAAO;oBACP,IAAI;IAIb,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YACS,MAAW,EACX,IAAW;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5C,KAAK,CAAC,6BAA6B,MAAM,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC,CAAA;sBAJ3D,MAAM;oBACN,IAAI;IAIb,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YACS,GAAQ,EACR,GAAW;QAElB,KAAK,CAAC,wBAAwB,GAAG,CAAC,QAAQ,EAAE,eAAe,GAAG,EAAE,CAAC,CAAA;mBAH1D,GAAG;mBACH,GAAG;IAGZ,CAAC;CACF","sourcesContent":["import type { Cid } from '@atproto/lex-data'\n\nexport class MissingBlockError extends Error {\n constructor(\n public cid: Cid,\n def?: string,\n ) {\n let msg = `block not found: ${cid.toString()}`\n if (def) {\n msg += `, expected type: ${def}`\n }\n super(msg)\n }\n}\n\nexport class MissingBlocksError extends Error {\n constructor(\n public context: string,\n public cids: Cid[],\n ) {\n const cidStr = cids.map((c) => c.toString())\n super(`missing ${context} blocks: ${cidStr}`)\n }\n}\n\nexport class MissingCommitBlocksError extends Error {\n constructor(\n public commit: Cid,\n public cids: Cid[],\n ) {\n const cidStr = cids.map((c) => c.toString())\n super(`missing blocks for commit ${commit.toString()}: ${cidStr}`)\n }\n}\n\nexport class UnexpectedObjectError extends Error {\n constructor(\n public cid: Cid,\n public def: string,\n ) {\n super(`unexpected object at ${cid.toString()}, expected: ${def}`)\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { DataDiff } from '../data-diff.js';
2
- import { MST } from './mst.js';
2
+ import type { MST } from './mst.js';
3
3
  export declare const nullDiff: (tree: MST) => Promise<DataDiff>;
4
4
  export declare const mstDiff: (curr: MST, prev: MST | null) => Promise<DataDiff>;
5
5
  //# sourceMappingURL=diff.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/mst/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG9B,eAAO,MAAM,QAAQ,SAAgB,GAAG,KAAG,OAAO,CAAC,QAAQ,CAM1D,CAAA;AAED,eAAO,MAAM,OAAO,SACZ,GAAG,QACH,GAAG,GAAG,IAAI,KACf,OAAO,CAAC,QAAQ,CAkGlB,CAAA"}
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/mst/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAGnC,eAAO,MAAM,QAAQ,SAAgB,GAAG,KAAG,OAAO,CAAC,QAAQ,CAM1D,CAAA;AAED,eAAO,MAAM,OAAO,SACZ,GAAG,QACH,GAAG,GAAG,IAAI,KACf,OAAO,CAAC,QAAQ,CAkGlB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/mst/diff.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataDiff } from '../data-diff.js'\nimport { MST } from './mst.js'\nimport { MstWalker } from './walker.js'\n\nexport const nullDiff = async (tree: MST): Promise<DataDiff> => {\n const diff = new DataDiff()\n for await (const entry of tree.walk()) {\n await diff.nodeAdd(entry)\n }\n return diff\n}\n\nexport const mstDiff = async (\n curr: MST,\n prev: MST | null,\n): Promise<DataDiff> => {\n await curr.getPointer()\n if (prev === null) {\n return nullDiff(curr)\n }\n\n await prev.getPointer()\n const diff = new DataDiff()\n\n const leftWalker = new MstWalker(prev)\n const rightWalker = new MstWalker(curr)\n while (!leftWalker.status.done || !rightWalker.status.done) {\n // if one walker is finished, continue walking the other & logging all nodes\n if (leftWalker.status.done && !rightWalker.status.done) {\n await diff.nodeAdd(rightWalker.status.curr)\n await rightWalker.advance()\n continue\n } else if (!leftWalker.status.done && rightWalker.status.done) {\n await diff.nodeDelete(leftWalker.status.curr)\n await leftWalker.advance()\n continue\n }\n if (leftWalker.status.done || rightWalker.status.done) break\n const left = leftWalker.status.curr\n const right = rightWalker.status.curr\n if (left === null || right === null) break\n\n // if both pointers are leaves, record an update & advance both or record the lowest key and advance that pointer\n if (left.isLeaf() && right.isLeaf()) {\n if (left.key === right.key) {\n if (!left.value.equals(right.value)) {\n diff.leafUpdate(left.key, left.value, right.value)\n }\n await leftWalker.advance()\n await rightWalker.advance()\n } else if (left.key < right.key) {\n diff.leafDelete(left.key, left.value)\n await leftWalker.advance()\n } else {\n diff.leafAdd(right.key, right.value)\n await rightWalker.advance()\n }\n continue\n }\n\n // next, ensure that we're on the same layer\n // if one walker is at a higher layer than the other, we need to do one of two things\n // if the higher walker is pointed at a tree, step into that tree to try to catch up with the lower\n // if the higher walker is pointed at a leaf, then advance the lower walker to try to catch up the higher\n if (leftWalker.layer() > rightWalker.layer()) {\n if (left.isLeaf()) {\n await diff.nodeAdd(right)\n await rightWalker.advance()\n } else {\n await diff.nodeDelete(left)\n await leftWalker.stepInto()\n }\n continue\n } else if (leftWalker.layer() < rightWalker.layer()) {\n if (right.isLeaf()) {\n await diff.nodeDelete(left)\n await leftWalker.advance()\n } else {\n await diff.nodeAdd(right)\n await rightWalker.stepInto()\n }\n continue\n }\n\n // if we're on the same level, and both pointers are trees, do a comparison\n // if they're the same, step over. if they're different, step in to find the subdiff\n if (left.isTree() && right.isTree()) {\n if (left.pointer.equals(right.pointer)) {\n await leftWalker.stepOver()\n await rightWalker.stepOver()\n } else {\n await diff.nodeAdd(right)\n await diff.nodeDelete(left)\n await leftWalker.stepInto()\n await rightWalker.stepInto()\n }\n continue\n }\n\n // finally, if one pointer is a tree and the other is a leaf, simply step into the tree\n if (left.isLeaf() && right.isTree()) {\n await diff.nodeAdd(right)\n await rightWalker.stepInto()\n continue\n } else if (left.isTree() && right.isLeaf()) {\n await diff.nodeDelete(left)\n await leftWalker.stepInto()\n continue\n }\n\n throw new Error('Unidentifiable case in diff walk')\n }\n return diff\n}\n"]}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/mst/diff.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataDiff } from '../data-diff.js'\nimport type { MST } from './mst.js'\nimport { MstWalker } from './walker.js'\n\nexport const nullDiff = async (tree: MST): Promise<DataDiff> => {\n const diff = new DataDiff()\n for await (const entry of tree.walk()) {\n await diff.nodeAdd(entry)\n }\n return diff\n}\n\nexport const mstDiff = async (\n curr: MST,\n prev: MST | null,\n): Promise<DataDiff> => {\n await curr.getPointer()\n if (prev === null) {\n return nullDiff(curr)\n }\n\n await prev.getPointer()\n const diff = new DataDiff()\n\n const leftWalker = new MstWalker(prev)\n const rightWalker = new MstWalker(curr)\n while (!leftWalker.status.done || !rightWalker.status.done) {\n // if one walker is finished, continue walking the other & logging all nodes\n if (leftWalker.status.done && !rightWalker.status.done) {\n await diff.nodeAdd(rightWalker.status.curr)\n await rightWalker.advance()\n continue\n } else if (!leftWalker.status.done && rightWalker.status.done) {\n await diff.nodeDelete(leftWalker.status.curr)\n await leftWalker.advance()\n continue\n }\n if (leftWalker.status.done || rightWalker.status.done) break\n const left = leftWalker.status.curr\n const right = rightWalker.status.curr\n if (left === null || right === null) break\n\n // if both pointers are leaves, record an update & advance both or record the lowest key and advance that pointer\n if (left.isLeaf() && right.isLeaf()) {\n if (left.key === right.key) {\n if (!left.value.equals(right.value)) {\n diff.leafUpdate(left.key, left.value, right.value)\n }\n await leftWalker.advance()\n await rightWalker.advance()\n } else if (left.key < right.key) {\n diff.leafDelete(left.key, left.value)\n await leftWalker.advance()\n } else {\n diff.leafAdd(right.key, right.value)\n await rightWalker.advance()\n }\n continue\n }\n\n // next, ensure that we're on the same layer\n // if one walker is at a higher layer than the other, we need to do one of two things\n // if the higher walker is pointed at a tree, step into that tree to try to catch up with the lower\n // if the higher walker is pointed at a leaf, then advance the lower walker to try to catch up the higher\n if (leftWalker.layer() > rightWalker.layer()) {\n if (left.isLeaf()) {\n await diff.nodeAdd(right)\n await rightWalker.advance()\n } else {\n await diff.nodeDelete(left)\n await leftWalker.stepInto()\n }\n continue\n } else if (leftWalker.layer() < rightWalker.layer()) {\n if (right.isLeaf()) {\n await diff.nodeDelete(left)\n await leftWalker.advance()\n } else {\n await diff.nodeAdd(right)\n await rightWalker.stepInto()\n }\n continue\n }\n\n // if we're on the same level, and both pointers are trees, do a comparison\n // if they're the same, step over. if they're different, step in to find the subdiff\n if (left.isTree() && right.isTree()) {\n if (left.pointer.equals(right.pointer)) {\n await leftWalker.stepOver()\n await rightWalker.stepOver()\n } else {\n await diff.nodeAdd(right)\n await diff.nodeDelete(left)\n await leftWalker.stepInto()\n await rightWalker.stepInto()\n }\n continue\n }\n\n // finally, if one pointer is a tree and the other is a leaf, simply step into the tree\n if (left.isLeaf() && right.isTree()) {\n await diff.nodeAdd(right)\n await rightWalker.stepInto()\n continue\n } else if (left.isTree() && right.isLeaf()) {\n await diff.nodeDelete(left)\n await leftWalker.stepInto()\n continue\n }\n\n throw new Error('Unidentifiable case in diff walk')\n }\n return diff\n}\n"]}
package/dist/mst/mst.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { z } from 'zod';
2
- import { Cid } from '@atproto/lex-data';
2
+ import { type Cid } from '@atproto/lex-data';
3
3
  import { BlockMap } from '../block-map.js';
4
4
  import { CidSet } from '../cid-set.js';
5
- import { ReadableBlockstore } from '../storage/index.js';
6
- import { CarBlock } from '../types.js';
5
+ import type { ReadableBlockstore } from '../storage/index.js';
6
+ import { type CarBlock } from '../types.js';
7
7
  declare const nodeData: z.ZodObject<{
8
8
  l: z.ZodNullable<z.ZodEffects<z.ZodUnknown, Cid<0 | 1, number, number>, unknown>>;
9
9
  e: z.ZodArray<z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"mst.d.ts","sourceRoot":"","sources":["../../src/mst/mst.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mst.d.ts","sourceRoot":"","sources":["../../src/mst/mst.ts"],"names":[],"mappings":"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"}