@atcute/car 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atproto-repo.d.ts +35 -2
- package/dist/atproto-repo.js +59 -8
- package/dist/atproto-repo.js.map +1 -1
- package/dist/reader.js +1 -1
- package/dist/reader.js.map +1 -1
- package/dist/utilities/car.d.ts +6 -0
- package/dist/utilities/car.js +10 -0
- package/dist/utilities/car.js.map +1 -0
- package/dist/utilities/{byte-reader.js → sync-byte-reader.js} +4 -1
- package/dist/utilities/sync-byte-reader.js.map +1 -0
- package/dist/utilities/sync-car-reader.d.ts +1 -1
- package/dist/utilities/sync-car-reader.js +2 -8
- package/dist/utilities/sync-car-reader.js.map +1 -1
- package/lib/atproto-repo.ts +86 -13
- package/lib/reader.ts +1 -1
- package/lib/utilities/car.ts +16 -0
- package/lib/utilities/{byte-reader.ts → sync-byte-reader.ts} +4 -0
- package/lib/utilities/sync-car-reader.ts +3 -16
- package/package.json +6 -5
- package/dist/utilities/byte-reader.js.map +0 -1
- /package/dist/utilities/{byte-reader.d.ts → sync-byte-reader.d.ts} +0 -0
package/dist/atproto-repo.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as CBOR from '@atcute/cbor';
|
|
1
2
|
import * as CID from '@atcute/cid';
|
|
2
3
|
export declare class RepoEntry {
|
|
3
4
|
readonly collection: string;
|
|
@@ -5,8 +6,40 @@ export declare class RepoEntry {
|
|
|
5
6
|
readonly cid: CID.CidLink;
|
|
6
7
|
private blockmap;
|
|
7
8
|
constructor(collection: string, rkey: string, cid: CID.CidLink, blockmap: BlockMap);
|
|
9
|
+
get bytes(): Uint8Array;
|
|
8
10
|
get record(): unknown;
|
|
9
11
|
}
|
|
10
12
|
export declare function iterateAtpRepo(buf: Uint8Array): Generator<RepoEntry>;
|
|
11
|
-
|
|
12
|
-
export
|
|
13
|
+
export declare function walkMstEntries(map: BlockMap, pointer: CID.CidLink): Generator<NodeEntry>;
|
|
14
|
+
export type BlockMap = Map<string, Uint8Array>;
|
|
15
|
+
export interface Commit {
|
|
16
|
+
version: 3;
|
|
17
|
+
did: string;
|
|
18
|
+
data: CID.CidLink;
|
|
19
|
+
rev: string;
|
|
20
|
+
prev: CID.CidLink | null;
|
|
21
|
+
sig: CBOR.Bytes;
|
|
22
|
+
}
|
|
23
|
+
export declare const isCommit: (value: unknown) => value is Commit;
|
|
24
|
+
export interface TreeEntry {
|
|
25
|
+
/** count of bytes shared with previous TreeEntry in this Node (if any) */
|
|
26
|
+
p: number;
|
|
27
|
+
/** remainder of key for this TreeEntry, after "prefixlen" have been removed */
|
|
28
|
+
k: CBOR.Bytes;
|
|
29
|
+
/** link to a sub-tree Node at a lower level which has keys sorting after this TreeEntry's key (to the "right"), but before the next TreeEntry's key in this Node (if any) */
|
|
30
|
+
v: CID.CidLink;
|
|
31
|
+
/** next subtree (to the right of leaf) */
|
|
32
|
+
t: CID.CidLink | null;
|
|
33
|
+
}
|
|
34
|
+
export declare const isTreeEntry: (value: unknown) => value is TreeEntry;
|
|
35
|
+
export interface MstNode {
|
|
36
|
+
/** link to sub-tree Node on a lower level and with all keys sorting before keys at this node */
|
|
37
|
+
l: CID.CidLink | null;
|
|
38
|
+
/** ordered list of TreeEntry objects */
|
|
39
|
+
e: TreeEntry[];
|
|
40
|
+
}
|
|
41
|
+
export declare const isMstNode: (value: unknown) => value is MstNode;
|
|
42
|
+
export interface NodeEntry {
|
|
43
|
+
key: string;
|
|
44
|
+
cid: CID.CidLink;
|
|
45
|
+
}
|
package/dist/atproto-repo.js
CHANGED
|
@@ -13,8 +13,14 @@ export class RepoEntry {
|
|
|
13
13
|
this.cid = cid;
|
|
14
14
|
this.blockmap = blockmap;
|
|
15
15
|
}
|
|
16
|
+
get bytes() {
|
|
17
|
+
const cid = this.cid.$link;
|
|
18
|
+
const bytes = this.blockmap.get(cid);
|
|
19
|
+
assert(bytes != null, `cid not found in blockmap; cid=${cid}`);
|
|
20
|
+
return bytes;
|
|
21
|
+
}
|
|
16
22
|
get record() {
|
|
17
|
-
return
|
|
23
|
+
return CBOR.decode(this.bytes);
|
|
18
24
|
}
|
|
19
25
|
}
|
|
20
26
|
export function* iterateAtpRepo(buf) {
|
|
@@ -26,25 +32,26 @@ export function* iterateAtpRepo(buf) {
|
|
|
26
32
|
blockmap.set(CID.toString(entry.cid), entry.bytes);
|
|
27
33
|
}
|
|
28
34
|
// Read the head, then walk through the MST tree from there.
|
|
29
|
-
const commit = readObject(blockmap, roots[0]);
|
|
30
|
-
for (const { key, cid } of
|
|
35
|
+
const commit = readObject(blockmap, roots[0], isCommit);
|
|
36
|
+
for (const { key, cid } of walkMstEntries(blockmap, commit.data)) {
|
|
31
37
|
const [collection, rkey] = key.split('/');
|
|
32
38
|
yield new RepoEntry(collection, rkey, cid, blockmap);
|
|
33
39
|
}
|
|
34
40
|
}
|
|
35
|
-
function readObject(map, link) {
|
|
41
|
+
function readObject(map, link, validate) {
|
|
36
42
|
const cid = link.$link;
|
|
37
43
|
const bytes = map.get(cid);
|
|
38
44
|
assert(bytes != null, `cid not found in blockmap; cid=${cid}`);
|
|
39
45
|
const data = CBOR.decode(bytes);
|
|
46
|
+
assert(validate(data), `validation failed for cid=${cid}`);
|
|
40
47
|
return data;
|
|
41
48
|
}
|
|
42
|
-
function*
|
|
43
|
-
const data = readObject(map, pointer);
|
|
49
|
+
export function* walkMstEntries(map, pointer) {
|
|
50
|
+
const data = readObject(map, pointer, isMstNode);
|
|
44
51
|
const entries = data.e;
|
|
45
52
|
let lastKey = '';
|
|
46
53
|
if (data.l !== null) {
|
|
47
|
-
yield*
|
|
54
|
+
yield* walkMstEntries(map, data.l);
|
|
48
55
|
}
|
|
49
56
|
for (let i = 0, il = entries.length; i < il; i++) {
|
|
50
57
|
const entry = entries[i];
|
|
@@ -53,7 +60,7 @@ function* walkEntries(map, pointer) {
|
|
|
53
60
|
lastKey = key;
|
|
54
61
|
yield { key: key, cid: entry.v };
|
|
55
62
|
if (entry.t !== null) {
|
|
56
|
-
yield*
|
|
63
|
+
yield* walkMstEntries(map, entry.t);
|
|
57
64
|
}
|
|
58
65
|
}
|
|
59
66
|
}
|
|
@@ -62,4 +69,48 @@ function assert(condition, message) {
|
|
|
62
69
|
throw new Error(message);
|
|
63
70
|
}
|
|
64
71
|
}
|
|
72
|
+
const isCidLink = (value) => {
|
|
73
|
+
if (value instanceof CID.CidLinkWrapper) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
if (value === null || typeof value !== 'object') {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return '$link' in value && typeof value.$link === 'string';
|
|
80
|
+
};
|
|
81
|
+
const isBytes = (value) => {
|
|
82
|
+
if (value instanceof CBOR.BytesWrapper) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
if (value === null || typeof value !== 'object') {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
return '$bytes' in value && typeof value.$bytes === 'string';
|
|
89
|
+
};
|
|
90
|
+
export const isCommit = (value) => {
|
|
91
|
+
if (value === null || typeof value !== 'object') {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
const obj = value;
|
|
95
|
+
return (obj.version === 3 &&
|
|
96
|
+
typeof obj.did === 'string' &&
|
|
97
|
+
isCidLink(obj.data) &&
|
|
98
|
+
typeof obj.rev === 'string' &&
|
|
99
|
+
(obj.prev === null || isCidLink(obj.prev)) &&
|
|
100
|
+
isBytes(obj.sig));
|
|
101
|
+
};
|
|
102
|
+
export const isTreeEntry = (value) => {
|
|
103
|
+
if (value === null || typeof value !== 'object') {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
const obj = value;
|
|
107
|
+
return (typeof obj.p === 'number' && isBytes(obj.k) && isCidLink(obj.v) && (obj.t === null || isCidLink(obj.t)));
|
|
108
|
+
};
|
|
109
|
+
export const isMstNode = (value) => {
|
|
110
|
+
if (value === null || typeof value !== 'object') {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
const obj = value;
|
|
114
|
+
return (obj.l === null || isCidLink(obj.l)) && Array.isArray(obj.e) && obj.e.every(isTreeEntry);
|
|
115
|
+
};
|
|
65
116
|
//# sourceMappingURL=atproto-repo.js.map
|
package/dist/atproto-repo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atproto-repo.js","sourceRoot":"","sources":["../lib/atproto-repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC,MAAM,OAAO,SAAS;IAEJ;IACA;IACA;IACR;IAJT,YACiB,UAAkB,EAClB,IAAY,EACZ,GAAgB,EACxB,QAAkB;QAHV,eAAU,GAAV,UAAU,CAAQ;QAClB,SAAI,GAAJ,IAAI,CAAQ;QACZ,QAAG,GAAH,GAAG,CAAa;QACxB,aAAQ,GAAR,QAAQ,CAAU;IACxB,CAAC;IAEJ,IAAI,
|
|
1
|
+
{"version":3,"file":"atproto-repo.js","sourceRoot":"","sources":["../lib/atproto-repo.ts"],"names":[],"mappings":"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"}
|
package/dist/reader.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createUint8Reader } from './utilities/byte-reader.js';
|
|
1
|
+
import { createUint8Reader } from './utilities/sync-byte-reader.js';
|
|
2
2
|
import { createCarReader } from './utilities/sync-car-reader.js';
|
|
3
3
|
export const readCar = (buffer) => {
|
|
4
4
|
const reader = createUint8Reader(buffer);
|
package/dist/reader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../lib/reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../lib/reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAkB,EAAE,EAAE;IAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as CBOR from '@atcute/cbor';
|
|
2
|
+
import * as CID from '@atcute/cid';
|
|
3
|
+
export const isCarV1Header = (value) => {
|
|
4
|
+
if (value === null || typeof value !== 'object') {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
const { version, roots } = value;
|
|
8
|
+
return version === 1 && Array.isArray(roots) && roots.every((root) => root instanceof CBOR.CidLinkWrapper);
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=car.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"car.js","sourceRoot":"","sources":["../../lib/utilities/car.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAOnC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAwB,EAAE;IACrE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAoB,CAAC;IAChD,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,YAAY,IAAI,CAAC,cAAc,CAAC,CAAC;AAC5G,CAAC,CAAC"}
|
|
@@ -5,6 +5,9 @@ export const createUint8Reader = (buf) => {
|
|
|
5
5
|
return pos;
|
|
6
6
|
},
|
|
7
7
|
seek(size) {
|
|
8
|
+
if (size > buf.length - pos) {
|
|
9
|
+
throw new RangeError('unexpected end of data');
|
|
10
|
+
}
|
|
8
11
|
pos += size;
|
|
9
12
|
},
|
|
10
13
|
upto(size) {
|
|
@@ -22,4 +25,4 @@ export const createUint8Reader = (buf) => {
|
|
|
22
25
|
},
|
|
23
26
|
};
|
|
24
27
|
};
|
|
25
|
-
//# sourceMappingURL=byte-reader.js.map
|
|
28
|
+
//# sourceMappingURL=sync-byte-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-byte-reader.js","sourceRoot":"","sources":["../../lib/utilities/sync-byte-reader.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAe,EAAkB,EAAE;IACpE,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,OAAO;QACN,IAAI,GAAG;YACN,OAAO,GAAG,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,IAAI;YACR,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBAC7B,MAAM,IAAI,UAAU,CAAC,wBAAwB,CAAC,CAAC;YAChD,CAAC;YAED,GAAG,IAAI,IAAI,CAAC;QACb,CAAC;QACD,IAAI,CAAC,IAAI;YACR,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,IAAI;YACjB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBAC7B,MAAM,IAAI,UAAU,CAAC,wBAAwB,CAAC,CAAC;YAChD,CAAC;YAED,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;YAC5C,IAAI,IAAI,EAAE,CAAC;gBACV,GAAG,IAAI,IAAI,CAAC;YACb,CAAC;YAED,OAAO,KAAK,CAAC;QACd,CAAC;KACD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as CBOR from '@atcute/cbor';
|
|
2
2
|
import * as CID from '@atcute/cid';
|
|
3
|
-
import type { SyncByteReader } from './byte-reader.js';
|
|
3
|
+
import type { SyncByteReader } from './sync-byte-reader.js';
|
|
4
4
|
export declare const createCarReader: (reader: SyncByteReader) => {
|
|
5
5
|
roots: CBOR.CidLink[];
|
|
6
6
|
iterate(): Generator<{
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import * as CBOR from '@atcute/cbor';
|
|
2
2
|
import * as CID from '@atcute/cid';
|
|
3
3
|
import * as varint from '@atcute/varint';
|
|
4
|
-
|
|
5
|
-
if (value === null || typeof value !== 'object') {
|
|
6
|
-
return false;
|
|
7
|
-
}
|
|
8
|
-
const { version, roots } = value;
|
|
9
|
-
return version === 1 && Array.isArray(roots) && roots.every((root) => root instanceof CBOR.CidLinkWrapper);
|
|
10
|
-
};
|
|
4
|
+
import { isCarV1Header } from './car.js';
|
|
11
5
|
const readVarint = (reader, size) => {
|
|
12
6
|
const buf = reader.upto(size);
|
|
13
7
|
if (buf.length === 0) {
|
|
@@ -65,7 +59,7 @@ const readBlockHeader = (reader) => {
|
|
|
65
59
|
}
|
|
66
60
|
size += reader.pos - start;
|
|
67
61
|
const cid = readCid(reader);
|
|
68
|
-
const blockSize = size -
|
|
62
|
+
const blockSize = size - (reader.pos - start);
|
|
69
63
|
return { cid, blockSize };
|
|
70
64
|
};
|
|
71
65
|
export const createCarReader = (reader) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-car-reader.js","sourceRoot":"","sources":["../../lib/utilities/sync-car-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-car-reader.js","sourceRoot":"","sources":["../../lib/utilities/sync-car-reader.ts"],"names":[],"mappings":"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"}
|
package/lib/atproto-repo.ts
CHANGED
|
@@ -13,8 +13,17 @@ export class RepoEntry {
|
|
|
13
13
|
private blockmap: BlockMap,
|
|
14
14
|
) {}
|
|
15
15
|
|
|
16
|
+
get bytes(): Uint8Array {
|
|
17
|
+
const cid = this.cid.$link;
|
|
18
|
+
|
|
19
|
+
const bytes = this.blockmap.get(cid);
|
|
20
|
+
assert(bytes != null, `cid not found in blockmap; cid=${cid}`);
|
|
21
|
+
|
|
22
|
+
return bytes;
|
|
23
|
+
}
|
|
24
|
+
|
|
16
25
|
get record(): unknown {
|
|
17
|
-
return
|
|
26
|
+
return CBOR.decode(this.bytes);
|
|
18
27
|
}
|
|
19
28
|
}
|
|
20
29
|
|
|
@@ -29,33 +38,34 @@ export function* iterateAtpRepo(buf: Uint8Array): Generator<RepoEntry> {
|
|
|
29
38
|
}
|
|
30
39
|
|
|
31
40
|
// Read the head, then walk through the MST tree from there.
|
|
32
|
-
const commit = readObject(blockmap, roots[0])
|
|
33
|
-
for (const { key, cid } of
|
|
41
|
+
const commit = readObject(blockmap, roots[0], isCommit);
|
|
42
|
+
for (const { key, cid } of walkMstEntries(blockmap, commit.data)) {
|
|
34
43
|
const [collection, rkey] = key.split('/');
|
|
35
44
|
|
|
36
45
|
yield new RepoEntry(collection, rkey, cid, blockmap);
|
|
37
46
|
}
|
|
38
47
|
}
|
|
39
48
|
|
|
40
|
-
function readObject(map: BlockMap, link: CID.CidLink
|
|
49
|
+
function readObject<T>(map: BlockMap, link: CID.CidLink, validate: (value: unknown) => value is T): T {
|
|
41
50
|
const cid = link.$link;
|
|
42
51
|
|
|
43
52
|
const bytes = map.get(cid);
|
|
44
53
|
assert(bytes != null, `cid not found in blockmap; cid=${cid}`);
|
|
45
54
|
|
|
46
55
|
const data = CBOR.decode(bytes);
|
|
56
|
+
assert(validate(data), `validation failed for cid=${cid}`);
|
|
47
57
|
|
|
48
58
|
return data;
|
|
49
59
|
}
|
|
50
60
|
|
|
51
|
-
function*
|
|
52
|
-
const data = readObject(map, pointer)
|
|
61
|
+
export function* walkMstEntries(map: BlockMap, pointer: CID.CidLink): Generator<NodeEntry> {
|
|
62
|
+
const data = readObject(map, pointer, isMstNode);
|
|
53
63
|
const entries = data.e;
|
|
54
64
|
|
|
55
65
|
let lastKey = '';
|
|
56
66
|
|
|
57
67
|
if (data.l !== null) {
|
|
58
|
-
yield*
|
|
68
|
+
yield* walkMstEntries(map, data.l);
|
|
59
69
|
}
|
|
60
70
|
|
|
61
71
|
for (let i = 0, il = entries.length; i < il; i++) {
|
|
@@ -69,7 +79,7 @@ function* walkEntries(map: BlockMap, pointer: CID.CidLink): Generator<NodeEntry>
|
|
|
69
79
|
yield { key: key, cid: entry.v };
|
|
70
80
|
|
|
71
81
|
if (entry.t !== null) {
|
|
72
|
-
yield*
|
|
82
|
+
yield* walkMstEntries(map, entry.t);
|
|
73
83
|
}
|
|
74
84
|
}
|
|
75
85
|
}
|
|
@@ -80,9 +90,33 @@ function assert(condition: boolean, message: string): asserts condition {
|
|
|
80
90
|
}
|
|
81
91
|
}
|
|
82
92
|
|
|
83
|
-
type BlockMap = Map<string, Uint8Array>;
|
|
93
|
+
export type BlockMap = Map<string, Uint8Array>;
|
|
94
|
+
|
|
95
|
+
const isCidLink = (value: unknown): value is CID.CidLink => {
|
|
96
|
+
if (value instanceof CID.CidLinkWrapper) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (value === null || typeof value !== 'object') {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return '$link' in value && typeof value.$link === 'string';
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const isBytes = (value: unknown): value is CBOR.Bytes => {
|
|
108
|
+
if (value instanceof CBOR.BytesWrapper) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (value === null || typeof value !== 'object') {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return '$bytes' in value && typeof value.$bytes === 'string';
|
|
117
|
+
};
|
|
84
118
|
|
|
85
|
-
interface Commit {
|
|
119
|
+
export interface Commit {
|
|
86
120
|
version: 3;
|
|
87
121
|
did: string;
|
|
88
122
|
data: CID.CidLink;
|
|
@@ -91,7 +125,24 @@ interface Commit {
|
|
|
91
125
|
sig: CBOR.Bytes;
|
|
92
126
|
}
|
|
93
127
|
|
|
94
|
-
|
|
128
|
+
export const isCommit = (value: unknown): value is Commit => {
|
|
129
|
+
if (value === null || typeof value !== 'object') {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const obj = value as Record<string, unknown>;
|
|
134
|
+
|
|
135
|
+
return (
|
|
136
|
+
obj.version === 3 &&
|
|
137
|
+
typeof obj.did === 'string' &&
|
|
138
|
+
isCidLink(obj.data) &&
|
|
139
|
+
typeof obj.rev === 'string' &&
|
|
140
|
+
(obj.prev === null || isCidLink(obj.prev)) &&
|
|
141
|
+
isBytes(obj.sig)
|
|
142
|
+
);
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
export interface TreeEntry {
|
|
95
146
|
/** count of bytes shared with previous TreeEntry in this Node (if any) */
|
|
96
147
|
p: number;
|
|
97
148
|
/** remainder of key for this TreeEntry, after "prefixlen" have been removed */
|
|
@@ -102,14 +153,36 @@ interface TreeEntry {
|
|
|
102
153
|
t: CID.CidLink | null;
|
|
103
154
|
}
|
|
104
155
|
|
|
105
|
-
|
|
156
|
+
export const isTreeEntry = (value: unknown): value is TreeEntry => {
|
|
157
|
+
if (value === null || typeof value !== 'object') {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const obj = value as Record<string, unknown>;
|
|
162
|
+
|
|
163
|
+
return (
|
|
164
|
+
typeof obj.p === 'number' && isBytes(obj.k) && isCidLink(obj.v) && (obj.t === null || isCidLink(obj.t))
|
|
165
|
+
);
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
export interface MstNode {
|
|
106
169
|
/** link to sub-tree Node on a lower level and with all keys sorting before keys at this node */
|
|
107
170
|
l: CID.CidLink | null;
|
|
108
171
|
/** ordered list of TreeEntry objects */
|
|
109
172
|
e: TreeEntry[];
|
|
110
173
|
}
|
|
111
174
|
|
|
112
|
-
|
|
175
|
+
export const isMstNode = (value: unknown): value is MstNode => {
|
|
176
|
+
if (value === null || typeof value !== 'object') {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const obj = value as Record<string, unknown>;
|
|
181
|
+
|
|
182
|
+
return (obj.l === null || isCidLink(obj.l)) && Array.isArray(obj.e) && obj.e.every(isTreeEntry);
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
export interface NodeEntry {
|
|
113
186
|
key: string;
|
|
114
187
|
cid: CID.CidLink;
|
|
115
188
|
}
|
package/lib/reader.ts
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as CBOR from '@atcute/cbor';
|
|
2
|
+
import * as CID from '@atcute/cid';
|
|
3
|
+
|
|
4
|
+
export interface CarV1Header {
|
|
5
|
+
version: 1;
|
|
6
|
+
roots: CID.CidLink[];
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const isCarV1Header = (value: unknown): value is CarV1Header => {
|
|
10
|
+
if (value === null || typeof value !== 'object') {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const { version, roots } = value as CarV1Header;
|
|
15
|
+
return version === 1 && Array.isArray(roots) && roots.every((root) => root instanceof CBOR.CidLinkWrapper);
|
|
16
|
+
};
|
|
@@ -2,21 +2,8 @@ import * as CBOR from '@atcute/cbor';
|
|
|
2
2
|
import * as CID from '@atcute/cid';
|
|
3
3
|
import * as varint from '@atcute/varint';
|
|
4
4
|
|
|
5
|
-
import type
|
|
6
|
-
|
|
7
|
-
interface CarV1Header {
|
|
8
|
-
version: 1;
|
|
9
|
-
roots: CID.CidLink[];
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const isCarV1Header = (value: unknown): value is CarV1Header => {
|
|
13
|
-
if (value === null || typeof value !== 'object') {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const { version, roots } = value as CarV1Header;
|
|
18
|
-
return version === 1 && Array.isArray(roots) && roots.every((root) => root instanceof CBOR.CidLinkWrapper);
|
|
19
|
-
};
|
|
5
|
+
import { isCarV1Header, type CarV1Header } from './car.js';
|
|
6
|
+
import type { SyncByteReader } from './sync-byte-reader.js';
|
|
20
7
|
|
|
21
8
|
const readVarint = (reader: SyncByteReader, size: number): number => {
|
|
22
9
|
const buf = reader.upto(size);
|
|
@@ -93,7 +80,7 @@ const readBlockHeader = (reader: SyncByteReader): { cid: CID.Cid; blockSize: num
|
|
|
93
80
|
size += reader.pos - start;
|
|
94
81
|
|
|
95
82
|
const cid = readCid(reader);
|
|
96
|
-
const blockSize = size -
|
|
83
|
+
const blockSize = size - (reader.pos - start);
|
|
97
84
|
|
|
98
85
|
return { cid, blockSize };
|
|
99
86
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@atcute/car",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.3",
|
|
5
5
|
"description": "lightweight DASL CAR and atproto repository decoder for AT Protocol.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"atproto",
|
|
@@ -24,12 +24,13 @@
|
|
|
24
24
|
},
|
|
25
25
|
"sideEffects": false,
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@types/bun": "^1.1
|
|
27
|
+
"@types/bun": "^1.2.1",
|
|
28
|
+
"@atcute/multibase": "^1.1.2"
|
|
28
29
|
},
|
|
29
30
|
"dependencies": {
|
|
30
|
-
"@atcute/cbor": "^2.
|
|
31
|
-
"@atcute/
|
|
32
|
-
"@atcute/
|
|
31
|
+
"@atcute/cbor": "^2.1.3",
|
|
32
|
+
"@atcute/varint": "^1.0.2",
|
|
33
|
+
"@atcute/cid": "^2.1.0"
|
|
33
34
|
},
|
|
34
35
|
"scripts": {
|
|
35
36
|
"build": "tsc --project tsconfig.build.json",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"byte-reader.js","sourceRoot":"","sources":["../../lib/utilities/byte-reader.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAe,EAAkB,EAAE;IACpE,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,OAAO;QACN,IAAI,GAAG;YACN,OAAO,GAAG,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,IAAI;YACR,GAAG,IAAI,IAAI,CAAC;QACb,CAAC;QACD,IAAI,CAAC,IAAI;YACR,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,IAAI;YACjB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBAC7B,MAAM,IAAI,UAAU,CAAC,wBAAwB,CAAC,CAAC;YAChD,CAAC;YAED,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;YAC5C,IAAI,IAAI,EAAE,CAAC;gBACV,GAAG,IAAI,IAAI,CAAC;YACb,CAAC;YAED,OAAO,KAAK,CAAC;QACd,CAAC;KACD,CAAC;AACH,CAAC,CAAC"}
|
|
File without changes
|