@atproto/repo 0.9.1 → 0.10.0-next.0

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 (127) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/block-map.js +10 -19
  3. package/dist/block-map.js.map +1 -1
  4. package/dist/car.d.ts +2 -2
  5. package/dist/car.d.ts.map +1 -1
  6. package/dist/car.js +30 -104
  7. package/dist/car.js.map +1 -1
  8. package/dist/cid-set.js +4 -14
  9. package/dist/cid-set.js.map +1 -1
  10. package/dist/data-diff.d.ts +3 -3
  11. package/dist/data-diff.d.ts.map +1 -1
  12. package/dist/data-diff.js +11 -45
  13. package/dist/data-diff.js.map +1 -1
  14. package/dist/error.js +11 -53
  15. package/dist/error.js.map +1 -1
  16. package/dist/index.d.ts +11 -11
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +11 -27
  19. package/dist/index.js.map +1 -1
  20. package/dist/logger.js +3 -6
  21. package/dist/logger.js.map +1 -1
  22. package/dist/mst/diff.d.ts +2 -2
  23. package/dist/mst/diff.d.ts.map +1 -1
  24. package/dist/mst/diff.js +9 -14
  25. package/dist/mst/diff.js.map +1 -1
  26. package/dist/mst/index.d.ts +4 -4
  27. package/dist/mst/index.d.ts.map +1 -1
  28. package/dist/mst/index.js +4 -43
  29. package/dist/mst/index.js.map +1 -1
  30. package/dist/mst/mst.d.ts +14 -14
  31. package/dist/mst/mst.d.ts.map +1 -1
  32. package/dist/mst/mst.js +41 -118
  33. package/dist/mst/mst.js.map +1 -1
  34. package/dist/mst/util.d.ts +2 -2
  35. package/dist/mst/util.d.ts.map +1 -1
  36. package/dist/mst/util.js +29 -47
  37. package/dist/mst/util.js.map +1 -1
  38. package/dist/mst/walker.d.ts +1 -1
  39. package/dist/mst/walker.d.ts.map +1 -1
  40. package/dist/mst/walker.js +3 -23
  41. package/dist/mst/walker.js.map +1 -1
  42. package/dist/parse.d.ts +1 -1
  43. package/dist/parse.d.ts.map +1 -1
  44. package/dist/parse.js +12 -18
  45. package/dist/parse.js.map +1 -1
  46. package/dist/readable-repo.d.ts +3 -3
  47. package/dist/readable-repo.d.ts.map +1 -1
  48. package/dist/readable-repo.js +13 -77
  49. package/dist/readable-repo.js.map +1 -1
  50. package/dist/repo.d.ts +6 -6
  51. package/dist/repo.d.ts.map +1 -1
  52. package/dist/repo.js +31 -77
  53. package/dist/repo.js.map +1 -1
  54. package/dist/storage/index.d.ts +4 -4
  55. package/dist/storage/index.d.ts.map +1 -1
  56. package/dist/storage/index.js +4 -20
  57. package/dist/storage/index.js.map +1 -1
  58. package/dist/storage/memory-blockstore.d.ts +4 -4
  59. package/dist/storage/memory-blockstore.d.ts.map +1 -1
  60. package/dist/storage/memory-blockstore.js +7 -27
  61. package/dist/storage/memory-blockstore.js.map +1 -1
  62. package/dist/storage/readable-blockstore.d.ts +1 -1
  63. package/dist/storage/readable-blockstore.d.ts.map +1 -1
  64. package/dist/storage/readable-blockstore.js +9 -13
  65. package/dist/storage/readable-blockstore.js.map +1 -1
  66. package/dist/storage/sync-storage.d.ts +2 -2
  67. package/dist/storage/sync-storage.d.ts.map +1 -1
  68. package/dist/storage/sync-storage.js +5 -19
  69. package/dist/storage/sync-storage.js.map +1 -1
  70. package/dist/storage/types.d.ts +2 -2
  71. package/dist/storage/types.d.ts.map +1 -1
  72. package/dist/storage/types.js +1 -5
  73. package/dist/storage/types.js.map +1 -1
  74. package/dist/sync/consumer.d.ts +3 -3
  75. package/dist/sync/consumer.d.ts.map +1 -1
  76. package/dist/sync/consumer.js +32 -75
  77. package/dist/sync/consumer.js.map +1 -1
  78. package/dist/sync/index.d.ts +2 -2
  79. package/dist/sync/index.d.ts.map +1 -1
  80. package/dist/sync/index.js +2 -18
  81. package/dist/sync/index.js.map +1 -1
  82. package/dist/sync/provider.d.ts +2 -2
  83. package/dist/sync/provider.d.ts.map +1 -1
  84. package/dist/sync/provider.js +17 -55
  85. package/dist/sync/provider.js.map +1 -1
  86. package/dist/types.d.ts +39 -39
  87. package/dist/types.d.ts.map +1 -1
  88. package/dist/types.js +41 -44
  89. package/dist/types.js.map +1 -1
  90. package/dist/util.d.ts +2 -2
  91. package/dist/util.d.ts.map +1 -1
  92. package/dist/util.js +28 -75
  93. package/dist/util.js.map +1 -1
  94. package/jest.config.cjs +17 -0
  95. package/package.json +19 -14
  96. package/src/car.ts +5 -4
  97. package/src/data-diff.ts +3 -3
  98. package/src/index.ts +11 -11
  99. package/src/mst/diff.ts +3 -3
  100. package/src/mst/index.ts +4 -4
  101. package/src/mst/mst.ts +7 -7
  102. package/src/mst/util.ts +3 -3
  103. package/src/mst/walker.ts +1 -1
  104. package/src/parse.ts +3 -3
  105. package/src/readable-repo.ts +7 -7
  106. package/src/repo.ts +9 -9
  107. package/src/storage/index.ts +4 -4
  108. package/src/storage/memory-blockstore.ts +4 -4
  109. package/src/storage/readable-blockstore.ts +4 -4
  110. package/src/storage/sync-storage.ts +2 -2
  111. package/src/storage/types.ts +2 -2
  112. package/src/sync/consumer.ts +12 -8
  113. package/src/sync/index.ts +2 -2
  114. package/src/sync/provider.ts +7 -7
  115. package/src/types.ts +7 -7
  116. package/src/util.ts +2 -2
  117. package/tests/_util.ts +4 -4
  118. package/tests/car.test.ts +2 -2
  119. package/tests/commit-data.test.ts +7 -2
  120. package/tests/commit-proofs.test.ts +4 -4
  121. package/tests/covering-proofs.test.ts +4 -4
  122. package/tests/mst.test.ts +5 -5
  123. package/tests/proofs.test.ts +4 -4
  124. package/tests/repo.test.ts +4 -4
  125. package/tests/sync.test.ts +4 -4
  126. package/tsconfig.build.tsbuildinfo +1 -1
  127. package/jest.config.js +0 -7
package/dist/mst/util.js CHANGED
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InvalidMstKeyError = exports.ensureValidMstKey = exports.isValidChars = exports.validCharsRegex = exports.isValidMstKey = exports.cidForEntries = exports.countPrefixLen = exports.serializeNodeData = exports.deserializeNodeData = exports.layerForEntries = exports.leadingZerosOnHash = void 0;
4
- const crypto_1 = require("@atproto/crypto");
5
- const lex_cbor_1 = require("@atproto/lex-cbor");
6
- const mst_1 = require("./mst");
1
+ import { sha256 } from '@atproto/crypto';
2
+ import { cidForLex } from '@atproto/lex-cbor';
3
+ import { Leaf, MST } from './mst.js';
7
4
  function toAscii(bytes) {
8
5
  let string = '';
9
6
  for (let i = 0; i < bytes.length; i++) {
@@ -18,8 +15,8 @@ function fromAscii(str) {
18
15
  }
19
16
  return bytes;
20
17
  }
21
- const leadingZerosOnHash = async (key) => {
22
- const hash = await (0, crypto_1.sha256)(key);
18
+ export const leadingZerosOnHash = async (key) => {
19
+ const hash = await sha256(key);
23
20
  let leadingZeros = 0;
24
21
  for (let i = 0; i < hash.length; i++) {
25
22
  const byte = hash[i];
@@ -38,19 +35,17 @@ const leadingZerosOnHash = async (key) => {
38
35
  }
39
36
  return leadingZeros;
40
37
  };
41
- exports.leadingZerosOnHash = leadingZerosOnHash;
42
- const layerForEntries = async (entries) => {
38
+ export const layerForEntries = async (entries) => {
43
39
  const firstLeaf = entries.find((entry) => entry.isLeaf());
44
40
  if (!firstLeaf || firstLeaf.isTree())
45
41
  return null;
46
- return await (0, exports.leadingZerosOnHash)(firstLeaf.key);
42
+ return await leadingZerosOnHash(firstLeaf.key);
47
43
  };
48
- exports.layerForEntries = layerForEntries;
49
- const deserializeNodeData = async (storage, data, opts) => {
44
+ export const deserializeNodeData = async (storage, data, opts) => {
50
45
  const { layer } = opts || {};
51
46
  const entries = [];
52
47
  if (data.l !== null) {
53
- entries.push(await mst_1.MST.load(storage, data.l, {
48
+ entries.push(await MST.load(storage, data.l, {
54
49
  layer: layer ? layer - 1 : undefined,
55
50
  }));
56
51
  }
@@ -58,19 +53,18 @@ const deserializeNodeData = async (storage, data, opts) => {
58
53
  for (const entry of data.e) {
59
54
  const keyStr = toAscii(entry.k);
60
55
  const key = `${lastKey.slice(0, entry.p)}${keyStr}`;
61
- (0, exports.ensureValidMstKey)(key);
62
- entries.push(new mst_1.Leaf(key, entry.v));
56
+ ensureValidMstKey(key);
57
+ entries.push(new Leaf(key, entry.v));
63
58
  lastKey = key;
64
59
  if (entry.t !== null) {
65
- entries.push(await mst_1.MST.load(storage, entry.t, {
60
+ entries.push(await MST.load(storage, entry.t, {
66
61
  layer: layer ? layer - 1 : undefined,
67
62
  }));
68
63
  }
69
64
  }
70
65
  return entries;
71
66
  };
72
- exports.deserializeNodeData = deserializeNodeData;
73
- const serializeNodeData = (entries) => {
67
+ export const serializeNodeData = (entries) => {
74
68
  const data = {
75
69
  l: null,
76
70
  e: [],
@@ -93,8 +87,8 @@ const serializeNodeData = (entries) => {
93
87
  subtree = next.pointer;
94
88
  i++;
95
89
  }
96
- (0, exports.ensureValidMstKey)(leaf.key);
97
- const prefixLen = (0, exports.countPrefixLen)(lastKey, leaf.key);
90
+ ensureValidMstKey(leaf.key);
91
+ const prefixLen = countPrefixLen(lastKey, leaf.key);
98
92
  data.e.push({
99
93
  p: prefixLen,
100
94
  k: fromAscii(leaf.key.slice(prefixLen)),
@@ -105,8 +99,7 @@ const serializeNodeData = (entries) => {
105
99
  }
106
100
  return data;
107
101
  };
108
- exports.serializeNodeData = serializeNodeData;
109
- const countPrefixLen = (a, b) => {
102
+ export const countPrefixLen = (a, b) => {
110
103
  let i;
111
104
  for (i = 0; i < a.length; i++) {
112
105
  if (a[i] !== b[i]) {
@@ -115,43 +108,32 @@ const countPrefixLen = (a, b) => {
115
108
  }
116
109
  return i;
117
110
  };
118
- exports.countPrefixLen = countPrefixLen;
119
- const cidForEntries = async (entries) => {
120
- const data = (0, exports.serializeNodeData)(entries);
121
- return (0, lex_cbor_1.cidForLex)(data);
111
+ export const cidForEntries = async (entries) => {
112
+ const data = serializeNodeData(entries);
113
+ return cidForLex(data);
122
114
  };
123
- exports.cidForEntries = cidForEntries;
124
- const isValidMstKey = (str) => {
115
+ export const isValidMstKey = (str) => {
125
116
  const split = str.split('/');
126
117
  return (str.length <= 1024 &&
127
118
  split.length === 2 &&
128
119
  split[0].length > 0 &&
129
120
  split[1].length > 0 &&
130
- (0, exports.isValidChars)(split[0]) &&
131
- (0, exports.isValidChars)(split[1]));
121
+ isValidChars(split[0]) &&
122
+ isValidChars(split[1]));
132
123
  };
133
- exports.isValidMstKey = isValidMstKey;
134
- exports.validCharsRegex = /^[a-zA-Z0-9_~\-:.]*$/;
135
- const isValidChars = (str) => {
136
- return str.match(exports.validCharsRegex) !== null;
124
+ export const validCharsRegex = /^[a-zA-Z0-9_~\-:.]*$/;
125
+ export const isValidChars = (str) => {
126
+ return str.match(validCharsRegex) !== null;
137
127
  };
138
- exports.isValidChars = isValidChars;
139
- const ensureValidMstKey = (str) => {
140
- if (!(0, exports.isValidMstKey)(str)) {
128
+ export const ensureValidMstKey = (str) => {
129
+ if (!isValidMstKey(str)) {
141
130
  throw new InvalidMstKeyError(str);
142
131
  }
143
132
  };
144
- exports.ensureValidMstKey = ensureValidMstKey;
145
- class InvalidMstKeyError extends Error {
133
+ export class InvalidMstKeyError extends Error {
146
134
  constructor(key) {
147
135
  super(`Not a valid MST key: ${key}`);
148
- Object.defineProperty(this, "key", {
149
- enumerable: true,
150
- configurable: true,
151
- writable: true,
152
- value: key
153
- });
136
+ this.key = key;
154
137
  }
155
138
  }
156
- exports.InvalidMstKeyError = InvalidMstKeyError;
157
139
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/mst/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { sha256 } from '@atproto/crypto'\nimport { cidForLex } from '@atproto/lex-cbor'\nimport { Cid } from '@atproto/lex-data'\nimport { ReadableBlockstore } from '../storage'\nimport { Leaf, MST, MstOpts, NodeData, NodeEntry } from './mst'\n\nfunction toAscii(bytes: Uint8Array): string {\n let string = ''\n for (let i = 0; i < bytes.length; i++) {\n string += String.fromCharCode(bytes[i])\n }\n return string\n}\n\nfunction fromAscii(str: string): Uint8Array {\n const bytes = new Uint8Array(str.length)\n for (let i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i)\n }\n return bytes\n}\n\nexport const leadingZerosOnHash = async (key: string | Uint8Array) => {\n const hash = await sha256(key)\n let leadingZeros = 0\n for (let i = 0; i < hash.length; i++) {\n const byte = hash[i]\n if (byte < 64) leadingZeros++\n if (byte < 16) leadingZeros++\n if (byte < 4) leadingZeros++\n if (byte === 0) {\n leadingZeros++\n } else {\n break\n }\n }\n return leadingZeros\n}\n\nexport const layerForEntries = async (\n entries: NodeEntry[],\n): Promise<number | null> => {\n const firstLeaf = entries.find((entry) => entry.isLeaf())\n if (!firstLeaf || firstLeaf.isTree()) return null\n return await leadingZerosOnHash(firstLeaf.key)\n}\n\nexport const deserializeNodeData = async (\n storage: ReadableBlockstore,\n data: NodeData,\n opts?: Partial<MstOpts>,\n): Promise<NodeEntry[]> => {\n const { layer } = opts || {}\n const entries: NodeEntry[] = []\n if (data.l !== null) {\n entries.push(\n await MST.load(storage, data.l, {\n layer: layer ? layer - 1 : undefined,\n }),\n )\n }\n let lastKey = ''\n for (const entry of data.e) {\n const keyStr = toAscii(entry.k)\n const key = `${lastKey.slice(0, entry.p)}${keyStr}`\n ensureValidMstKey(key)\n entries.push(new Leaf(key, entry.v))\n lastKey = key\n if (entry.t !== null) {\n entries.push(\n await MST.load(storage, entry.t, {\n layer: layer ? layer - 1 : undefined,\n }),\n )\n }\n }\n return entries\n}\n\nexport const serializeNodeData = (entries: NodeEntry[]): NodeData => {\n const data: NodeData = {\n l: null,\n e: [],\n }\n let i = 0\n if (entries[0]?.isTree()) {\n i++\n data.l = entries[0].pointer\n }\n let lastKey = ''\n while (i < entries.length) {\n const leaf = entries[i]\n const next = entries[i + 1]\n if (!leaf.isLeaf()) {\n throw new Error('Not a valid node: two subtrees next to each other')\n }\n i++\n let subtree: Cid | null = null\n if (next?.isTree()) {\n subtree = next.pointer\n i++\n }\n ensureValidMstKey(leaf.key)\n const prefixLen = countPrefixLen(lastKey, leaf.key)\n data.e.push({\n p: prefixLen,\n k: fromAscii(leaf.key.slice(prefixLen)),\n v: leaf.value,\n t: subtree,\n })\n\n lastKey = leaf.key\n }\n return data\n}\n\nexport const countPrefixLen = (a: string, b: string): number => {\n let i\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n break\n }\n }\n return i\n}\n\nexport const cidForEntries = async (entries: NodeEntry[]): Promise<Cid> => {\n const data = serializeNodeData(entries)\n return cidForLex(data)\n}\n\nexport const isValidMstKey = (str: string): boolean => {\n const split = str.split('/')\n return (\n str.length <= 1024 &&\n split.length === 2 &&\n split[0].length > 0 &&\n split[1].length > 0 &&\n isValidChars(split[0]) &&\n isValidChars(split[1])\n )\n}\n\nexport const validCharsRegex = /^[a-zA-Z0-9_~\\-:.]*$/\n\nexport const isValidChars = (str: string): boolean => {\n return str.match(validCharsRegex) !== null\n}\n\nexport const ensureValidMstKey = (str: string) => {\n if (!isValidMstKey(str)) {\n throw new InvalidMstKeyError(str)\n }\n}\n\nexport class InvalidMstKeyError extends Error {\n constructor(public key: string) {\n super(`Not a valid MST key: ${key}`)\n }\n}\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/mst/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { sha256 } from '@atproto/crypto'\nimport { cidForLex } from '@atproto/lex-cbor'\nimport { Cid } from '@atproto/lex-data'\nimport { ReadableBlockstore } from '../storage/index.js'\nimport { Leaf, MST, MstOpts, NodeData, NodeEntry } from './mst.js'\n\nfunction toAscii(bytes: Uint8Array): string {\n let string = ''\n for (let i = 0; i < bytes.length; i++) {\n string += String.fromCharCode(bytes[i])\n }\n return string\n}\n\nfunction fromAscii(str: string): Uint8Array<ArrayBuffer> {\n const bytes = new Uint8Array(str.length)\n for (let i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i)\n }\n return bytes\n}\n\nexport const leadingZerosOnHash = async (key: string | Uint8Array) => {\n const hash = await sha256(key)\n let leadingZeros = 0\n for (let i = 0; i < hash.length; i++) {\n const byte = hash[i]\n if (byte < 64) leadingZeros++\n if (byte < 16) leadingZeros++\n if (byte < 4) leadingZeros++\n if (byte === 0) {\n leadingZeros++\n } else {\n break\n }\n }\n return leadingZeros\n}\n\nexport const layerForEntries = async (\n entries: NodeEntry[],\n): Promise<number | null> => {\n const firstLeaf = entries.find((entry) => entry.isLeaf())\n if (!firstLeaf || firstLeaf.isTree()) return null\n return await leadingZerosOnHash(firstLeaf.key)\n}\n\nexport const deserializeNodeData = async (\n storage: ReadableBlockstore,\n data: NodeData,\n opts?: Partial<MstOpts>,\n): Promise<NodeEntry[]> => {\n const { layer } = opts || {}\n const entries: NodeEntry[] = []\n if (data.l !== null) {\n entries.push(\n await MST.load(storage, data.l, {\n layer: layer ? layer - 1 : undefined,\n }),\n )\n }\n let lastKey = ''\n for (const entry of data.e) {\n const keyStr = toAscii(entry.k)\n const key = `${lastKey.slice(0, entry.p)}${keyStr}`\n ensureValidMstKey(key)\n entries.push(new Leaf(key, entry.v))\n lastKey = key\n if (entry.t !== null) {\n entries.push(\n await MST.load(storage, entry.t, {\n layer: layer ? layer - 1 : undefined,\n }),\n )\n }\n }\n return entries\n}\n\nexport const serializeNodeData = (entries: NodeEntry[]): NodeData => {\n const data: NodeData = {\n l: null,\n e: [],\n }\n let i = 0\n if (entries[0]?.isTree()) {\n i++\n data.l = entries[0].pointer\n }\n let lastKey = ''\n while (i < entries.length) {\n const leaf = entries[i]\n const next = entries[i + 1]\n if (!leaf.isLeaf()) {\n throw new Error('Not a valid node: two subtrees next to each other')\n }\n i++\n let subtree: Cid | null = null\n if (next?.isTree()) {\n subtree = next.pointer\n i++\n }\n ensureValidMstKey(leaf.key)\n const prefixLen = countPrefixLen(lastKey, leaf.key)\n data.e.push({\n p: prefixLen,\n k: fromAscii(leaf.key.slice(prefixLen)),\n v: leaf.value,\n t: subtree,\n })\n\n lastKey = leaf.key\n }\n return data\n}\n\nexport const countPrefixLen = (a: string, b: string): number => {\n let i\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n break\n }\n }\n return i\n}\n\nexport const cidForEntries = async (entries: NodeEntry[]): Promise<Cid> => {\n const data = serializeNodeData(entries)\n return cidForLex(data)\n}\n\nexport const isValidMstKey = (str: string): boolean => {\n const split = str.split('/')\n return (\n str.length <= 1024 &&\n split.length === 2 &&\n split[0].length > 0 &&\n split[1].length > 0 &&\n isValidChars(split[0]) &&\n isValidChars(split[1])\n )\n}\n\nexport const validCharsRegex = /^[a-zA-Z0-9_~\\-:.]*$/\n\nexport const isValidChars = (str: string): boolean => {\n return str.match(validCharsRegex) !== null\n}\n\nexport const ensureValidMstKey = (str: string) => {\n if (!isValidMstKey(str)) {\n throw new InvalidMstKeyError(str)\n }\n}\n\nexport class InvalidMstKeyError extends Error {\n constructor(public key: string) {\n super(`Not a valid MST key: ${key}`)\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { MST, NodeEntry } from './mst';
1
+ import { MST, NodeEntry } from './mst.js';
2
2
  type WalkerStatusDone = {
3
3
  done: true;
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/mst/walker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,KAAK,CAAA;IACX,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,GAAG,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,KAAK,YAAY,GAAG,gBAAgB,GAAG,oBAAoB,CAAA;AAE3D,qBAAa,SAAS;IAID,IAAI,EAAE,GAAG;IAH5B,KAAK,EAAE,YAAY,EAAE,CAAK;IAC1B,MAAM,EAAE,YAAY,CAAA;gBAED,IAAI,EAAE,GAAG;IAU5B,KAAK,IAAI,MAAM;IAeT,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAuCzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ/B"}
1
+ {"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/mst/walker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,KAAK,CAAA;IACX,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,GAAG,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,KAAK,YAAY,GAAG,gBAAgB,GAAG,oBAAoB,CAAA;AAE3D,qBAAa,SAAS;IAID,IAAI,EAAE,GAAG;IAH5B,KAAK,EAAE,YAAY,EAAE,CAAK;IAC1B,MAAM,EAAE,YAAY,CAAA;gBAED,IAAI,EAAE,GAAG;IAU5B,KAAK,IAAI,MAAM;IAeT,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAuCzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ/B"}
@@ -1,26 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MstWalker = void 0;
4
- class MstWalker {
1
+ export class MstWalker {
5
2
  constructor(root) {
6
- Object.defineProperty(this, "root", {
7
- enumerable: true,
8
- configurable: true,
9
- writable: true,
10
- value: root
11
- });
12
- Object.defineProperty(this, "stack", {
13
- enumerable: true,
14
- configurable: true,
15
- writable: true,
16
- value: []
17
- });
18
- Object.defineProperty(this, "status", {
19
- enumerable: true,
20
- configurable: true,
21
- writable: true,
22
- value: void 0
23
- });
3
+ this.root = root;
4
+ this.stack = [];
24
5
  this.status = {
25
6
  done: false,
26
7
  curr: root,
@@ -118,5 +99,4 @@ class MstWalker {
118
99
  }
119
100
  }
120
101
  }
121
- exports.MstWalker = MstWalker;
122
102
  //# sourceMappingURL=walker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"walker.js","sourceRoot":"","sources":["../../src/mst/walker.ts"],"names":[],"mappings":"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","sourcesContent":["import { MST, NodeEntry } from './mst'\n\ntype WalkerStatusDone = {\n done: true\n}\n\ntype WalkerStatusProgress = {\n done: false\n curr: NodeEntry\n walking: MST | null // walking set to null if `curr` is the root of the tree\n index: number\n}\n\ntype WalkerStatus = WalkerStatusDone | WalkerStatusProgress\n\nexport class MstWalker {\n stack: WalkerStatus[] = []\n status: WalkerStatus\n\n constructor(public root: MST) {\n this.status = {\n done: false,\n curr: root,\n walking: null,\n index: 0,\n }\n }\n\n // return the current layer of the node you are walking\n layer(): number {\n if (this.status.done) {\n throw new Error('Walk is done')\n }\n if (this.status.walking) {\n return this.status.walking.layer ?? 0\n }\n // if curr is the root of the tree, add 1\n if (this.status.curr.isTree()) {\n return (this.status.curr.layer ?? 0) + 1\n }\n throw new Error('Could not identify layer of walk')\n }\n\n // move to the next node in the subtree, skipping over the subtree\n async stepOver(): Promise<void> {\n if (this.status.done) return\n // if stepping over the root of the node, we're done\n if (this.status.walking === null) {\n this.status = { done: true }\n return\n }\n const entries = await this.status.walking.getEntries()\n this.status.index++\n const next = entries[this.status.index]\n if (!next) {\n const popped = this.stack.pop()\n if (!popped) {\n this.status = { done: true }\n return\n } else {\n this.status = popped\n await this.stepOver()\n return\n }\n } else {\n this.status.curr = next\n }\n }\n\n // step into a subtree, throws if currently pointed at a leaf\n async stepInto(): Promise<void> {\n if (this.status.done) return\n // edge case for very start of walk\n if (this.status.walking === null) {\n if (!this.status.curr.isTree()) {\n throw new Error('The root of the tree cannot be a leaf')\n }\n const next = await this.status.curr.atIndex(0)\n if (!next) {\n this.status = { done: true }\n } else {\n this.status = {\n done: false,\n walking: this.status.curr,\n curr: next,\n index: 0,\n }\n }\n return\n }\n if (!this.status.curr.isTree()) {\n throw new Error('No tree at pointer, cannot step into')\n }\n\n const next = await this.status.curr.atIndex(0)\n if (!next) {\n throw new Error(\n 'Tried to step into a node with 0 entries which is invalid',\n )\n }\n\n this.stack.push({ ...this.status })\n this.status.walking = this.status.curr\n this.status.curr = next\n this.status.index = 0\n }\n\n // advance the pointer to the next node in the tree,\n // stepping into the current node if necessary\n async advance(): Promise<void> {\n if (this.status.done) return\n if (this.status.curr.isLeaf()) {\n await this.stepOver()\n } else {\n await this.stepInto()\n }\n }\n}\n"]}
1
+ {"version":3,"file":"walker.js","sourceRoot":"","sources":["../../src/mst/walker.ts"],"names":[],"mappings":"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","sourcesContent":["import { MST, NodeEntry } from './mst.js'\n\ntype WalkerStatusDone = {\n done: true\n}\n\ntype WalkerStatusProgress = {\n done: false\n curr: NodeEntry\n walking: MST | null // walking set to null if `curr` is the root of the tree\n index: number\n}\n\ntype WalkerStatus = WalkerStatusDone | WalkerStatusProgress\n\nexport class MstWalker {\n stack: WalkerStatus[] = []\n status: WalkerStatus\n\n constructor(public root: MST) {\n this.status = {\n done: false,\n curr: root,\n walking: null,\n index: 0,\n }\n }\n\n // return the current layer of the node you are walking\n layer(): number {\n if (this.status.done) {\n throw new Error('Walk is done')\n }\n if (this.status.walking) {\n return this.status.walking.layer ?? 0\n }\n // if curr is the root of the tree, add 1\n if (this.status.curr.isTree()) {\n return (this.status.curr.layer ?? 0) + 1\n }\n throw new Error('Could not identify layer of walk')\n }\n\n // move to the next node in the subtree, skipping over the subtree\n async stepOver(): Promise<void> {\n if (this.status.done) return\n // if stepping over the root of the node, we're done\n if (this.status.walking === null) {\n this.status = { done: true }\n return\n }\n const entries = await this.status.walking.getEntries()\n this.status.index++\n const next = entries[this.status.index]\n if (!next) {\n const popped = this.stack.pop()\n if (!popped) {\n this.status = { done: true }\n return\n } else {\n this.status = popped\n await this.stepOver()\n return\n }\n } else {\n this.status.curr = next\n }\n }\n\n // step into a subtree, throws if currently pointed at a leaf\n async stepInto(): Promise<void> {\n if (this.status.done) return\n // edge case for very start of walk\n if (this.status.walking === null) {\n if (!this.status.curr.isTree()) {\n throw new Error('The root of the tree cannot be a leaf')\n }\n const next = await this.status.curr.atIndex(0)\n if (!next) {\n this.status = { done: true }\n } else {\n this.status = {\n done: false,\n walking: this.status.curr,\n curr: next,\n index: 0,\n }\n }\n return\n }\n if (!this.status.curr.isTree()) {\n throw new Error('No tree at pointer, cannot step into')\n }\n\n const next = await this.status.curr.atIndex(0)\n if (!next) {\n throw new Error(\n 'Tried to step into a node with 0 entries which is invalid',\n )\n }\n\n this.stack.push({ ...this.status })\n this.status.walking = this.status.curr\n this.status.curr = next\n this.status.index = 0\n }\n\n // advance the pointer to the next node in the tree,\n // stepping into the current node if necessary\n async advance(): Promise<void> {\n if (this.status.done) return\n if (this.status.curr.isLeaf()) {\n await this.stepOver()\n } else {\n await this.stepInto()\n }\n }\n}\n"]}
package/dist/parse.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { check } from '@atproto/common-web';
2
2
  import { Cid, LexMap } from '@atproto/lex-data';
3
- import { BlockMap } from './block-map';
3
+ import { BlockMap } from './block-map.js';
4
4
  export declare const getAndParseRecord: (blocks: BlockMap, cid: Cid) => Promise<{
5
5
  record: LexMap;
6
6
  bytes: Uint8Array;
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAE3C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAItC,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,QAAQ,EAChB,KAAK,GAAG,KACP,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAO/C,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,CAAC,EACtC,QAAQ,QAAQ,EAChB,KAAK,GAAG,EACR,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAChB,OAAO,CAAC;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAMvC,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,CAAC,EAC7B,OAAO,UAAU,EACjB,KAAK,GAAG,EACR,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAChB;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAQ7B,CAAA"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAE3C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAIzC,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,QAAQ,EAChB,KAAK,GAAG,KACP,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAO/C,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,CAAC,EACtC,QAAQ,QAAQ,EAChB,KAAK,GAAG,EACR,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAChB,OAAO,CAAC;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAMvC,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,CAAC,EAC7B,OAAO,UAAU,EACjB,KAAK,GAAG,EACR,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAChB;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAQ7B,CAAA"}
package/dist/parse.js CHANGED
@@ -1,35 +1,29 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseObjByDef = exports.getAndParseByDef = exports.getAndParseRecord = void 0;
4
- const lex_cbor_1 = require("@atproto/lex-cbor");
5
- const error_1 = require("./error");
6
- const util_1 = require("./util");
7
- const getAndParseRecord = async (blocks, cid) => {
1
+ import { decode } from '@atproto/lex-cbor';
2
+ import { MissingBlockError, UnexpectedObjectError } from './error.js';
3
+ import { cborToLexRecord } from './util.js';
4
+ export const getAndParseRecord = async (blocks, cid) => {
8
5
  const bytes = blocks.get(cid);
9
6
  if (!bytes) {
10
- throw new error_1.MissingBlockError(cid, 'record');
7
+ throw new MissingBlockError(cid, 'record');
11
8
  }
12
- const record = (0, util_1.cborToLexRecord)(bytes);
9
+ const record = cborToLexRecord(bytes);
13
10
  return { record, bytes };
14
11
  };
15
- exports.getAndParseRecord = getAndParseRecord;
16
- const getAndParseByDef = async (blocks, cid, def) => {
12
+ export const getAndParseByDef = async (blocks, cid, def) => {
17
13
  const bytes = blocks.get(cid);
18
14
  if (!bytes) {
19
- throw new error_1.MissingBlockError(cid, def.name);
15
+ throw new MissingBlockError(cid, def.name);
20
16
  }
21
- return (0, exports.parseObjByDef)(bytes, cid, def);
17
+ return parseObjByDef(bytes, cid, def);
22
18
  };
23
- exports.getAndParseByDef = getAndParseByDef;
24
- const parseObjByDef = (bytes, cid, def) => {
25
- const obj = (0, lex_cbor_1.decode)(bytes);
19
+ export const parseObjByDef = (bytes, cid, def) => {
20
+ const obj = decode(bytes);
26
21
  const res = def.schema.safeParse(obj);
27
22
  if (res.success) {
28
23
  return { obj: res.data, bytes };
29
24
  }
30
25
  else {
31
- throw new error_1.UnexpectedObjectError(cid, def.name);
26
+ throw new UnexpectedObjectError(cid, def.name);
32
27
  }
33
28
  };
34
- exports.parseObjByDef = parseObjByDef;
35
29
  //# sourceMappingURL=parse.js.map
package/dist/parse.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":";;;AACA,gDAA0C;AAG1C,mCAAkE;AAClE,iCAAwC;AAEjC,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAAgB,EAChB,GAAQ,EACwC,EAAE;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,yBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC5C,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,sBAAe,EAAC,KAAK,CAAC,CAAA;IACrC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AAC1B,CAAC,CAAA;AAVY,QAAA,iBAAiB,qBAU7B;AAEM,MAAM,gBAAgB,GAAG,KAAK,EACnC,MAAgB,EAChB,GAAQ,EACR,GAAiB,EACuB,EAAE;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,yBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,IAAA,qBAAa,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AACvC,CAAC,CAAA;AAVY,QAAA,gBAAgB,oBAU5B;AAEM,MAAM,aAAa,GAAG,CAC3B,KAAiB,EACjB,GAAQ,EACR,GAAiB,EACc,EAAE;IACjC,MAAM,GAAG,GAAG,IAAA,iBAAM,EAAC,KAAK,CAAC,CAAA;IACzB,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;IACjC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,6BAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;AACH,CAAC,CAAA;AAZY,QAAA,aAAa,iBAYzB","sourcesContent":["import { check } from '@atproto/common-web'\nimport { decode } from '@atproto/lex-cbor'\nimport { Cid, LexMap } from '@atproto/lex-data'\nimport { BlockMap } from './block-map'\nimport { MissingBlockError, UnexpectedObjectError } from './error'\nimport { cborToLexRecord } from './util'\n\nexport const getAndParseRecord = async (\n blocks: BlockMap,\n cid: Cid,\n): Promise<{ record: LexMap; bytes: Uint8Array }> => {\n const bytes = blocks.get(cid)\n if (!bytes) {\n throw new MissingBlockError(cid, 'record')\n }\n const record = cborToLexRecord(bytes)\n return { record, bytes }\n}\n\nexport const getAndParseByDef = async <T>(\n blocks: BlockMap,\n cid: Cid,\n def: check.Def<T>,\n): Promise<{ obj: T; bytes: Uint8Array }> => {\n const bytes = blocks.get(cid)\n if (!bytes) {\n throw new MissingBlockError(cid, def.name)\n }\n return parseObjByDef(bytes, cid, def)\n}\n\nexport const parseObjByDef = <T>(\n bytes: Uint8Array,\n cid: Cid,\n def: check.Def<T>,\n): { obj: T; bytes: Uint8Array } => {\n const obj = decode(bytes)\n const res = def.schema.safeParse(obj)\n if (res.success) {\n return { obj: res.data, bytes }\n } else {\n throw new UnexpectedObjectError(cid, def.name)\n }\n}\n"]}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAAgB,EAChB,GAAQ,EACwC,EAAE;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC5C,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IACrC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,MAAgB,EAChB,GAAQ,EACR,GAAiB,EACuB,EAAE;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AACvC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,KAAiB,EACjB,GAAQ,EACR,GAAiB,EACc,EAAE;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACzB,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;IACjC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;AACH,CAAC,CAAA","sourcesContent":["import { check } from '@atproto/common-web'\nimport { decode } from '@atproto/lex-cbor'\nimport { Cid, LexMap } from '@atproto/lex-data'\nimport { BlockMap } from './block-map.js'\nimport { MissingBlockError, UnexpectedObjectError } from './error.js'\nimport { cborToLexRecord } from './util.js'\n\nexport const getAndParseRecord = async (\n blocks: BlockMap,\n cid: Cid,\n): Promise<{ record: LexMap; bytes: Uint8Array }> => {\n const bytes = blocks.get(cid)\n if (!bytes) {\n throw new MissingBlockError(cid, 'record')\n }\n const record = cborToLexRecord(bytes)\n return { record, bytes }\n}\n\nexport const getAndParseByDef = async <T>(\n blocks: BlockMap,\n cid: Cid,\n def: check.Def<T>,\n): Promise<{ obj: T; bytes: Uint8Array }> => {\n const bytes = blocks.get(cid)\n if (!bytes) {\n throw new MissingBlockError(cid, def.name)\n }\n return parseObjByDef(bytes, cid, def)\n}\n\nexport const parseObjByDef = <T>(\n bytes: Uint8Array,\n cid: Cid,\n def: check.Def<T>,\n): { obj: T; bytes: Uint8Array } => {\n const obj = decode(bytes)\n const res = def.schema.safeParse(obj)\n if (res.success) {\n return { obj: res.data, bytes }\n } else {\n throw new UnexpectedObjectError(cid, def.name)\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { Cid, LexMap } from '@atproto/lex-data';
2
- import { MST } from './mst';
3
- import { ReadableBlockstore } from './storage';
4
- import { Commit, RepoContents } from './types';
2
+ import { MST } from './mst/index.js';
3
+ import { ReadableBlockstore } from './storage/index.js';
4
+ import { Commit, RepoContents } from './types.js';
5
5
  type Params = {
6
6
  storage: ReadableBlockstore;
7
7
  data: MST;
@@ -1 +1 @@
1
- {"version":3,"file":"readable-repo.d.ts","sourceRoot":"","sources":["../src/readable-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAE3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAO,MAAM,SAAS,CAAA;AAGnD,KAAK,MAAM,GAAG;IACZ,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,qBAAa,YAAY;IACvB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,GAAG,CAAA;gBAEI,MAAM,EAAE,MAAM;WAOb,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,GAAG;IAY7D,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAEM,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;QAC/C,UAAU,EAAE,MAAM,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,EAAE,GAAG,CAAA;QACR,MAAM,EAAE,MAAM,CAAA;KACf,CAAC;IAQI,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAOpE,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC;CAgB3C"}
1
+ {"version":3,"file":"readable-repo.d.ts","sourceRoot":"","sources":["../src/readable-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAO,MAAM,YAAY,CAAA;AAGtD,KAAK,MAAM,GAAG;IACZ,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,qBAAa,YAAY;IACvB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,GAAG,CAAA;gBAEI,MAAM,EAAE,MAAM;WAOb,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,GAAG;IAY7D,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAEM,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;QAC/C,UAAU,EAAE,MAAM,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,EAAE,GAAG,CAAA;QACR,MAAM,EAAE,MAAM,CAAA;KACf,CAAC;IAQI,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAOpE,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC;CAgB3C"}
@@ -1,83 +1,20 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.ReadableRepo = void 0;
40
- const error_1 = require("./error");
41
- const logger_1 = __importDefault(require("./logger"));
42
- const mst_1 = require("./mst");
43
- const parse = __importStar(require("./parse"));
44
- const types_1 = require("./types");
45
- const util = __importStar(require("./util"));
46
- class ReadableRepo {
1
+ import { MissingBlocksError } from './error.js';
2
+ import log from './logger.js';
3
+ import { MST } from './mst/index.js';
4
+ import * as parse from './parse.js';
5
+ import { def } from './types.js';
6
+ import * as util from './util.js';
7
+ export class ReadableRepo {
47
8
  constructor(params) {
48
- Object.defineProperty(this, "storage", {
49
- enumerable: true,
50
- configurable: true,
51
- writable: true,
52
- value: void 0
53
- });
54
- Object.defineProperty(this, "data", {
55
- enumerable: true,
56
- configurable: true,
57
- writable: true,
58
- value: void 0
59
- });
60
- Object.defineProperty(this, "commit", {
61
- enumerable: true,
62
- configurable: true,
63
- writable: true,
64
- value: void 0
65
- });
66
- Object.defineProperty(this, "cid", {
67
- enumerable: true,
68
- configurable: true,
69
- writable: true,
70
- value: void 0
71
- });
72
9
  this.storage = params.storage;
73
10
  this.data = params.data;
74
11
  this.commit = params.commit;
75
12
  this.cid = params.cid;
76
13
  }
77
14
  static async load(storage, commitCid) {
78
- const commit = await storage.readObj(commitCid, types_1.def.versionedCommit);
79
- const data = await mst_1.MST.load(storage, commit.data);
80
- logger_1.default.info({ did: commit.did }, 'loaded repo for');
15
+ const commit = await storage.readObj(commitCid, def.versionedCommit);
16
+ const data = await MST.load(storage, commit.data);
17
+ log.info({ did: commit.did }, 'loaded repo for');
81
18
  return new ReadableRepo({
82
19
  storage,
83
20
  data,
@@ -103,24 +40,23 @@ class ReadableRepo {
103
40
  const cid = await this.data.get(dataKey);
104
41
  if (!cid)
105
42
  return null;
106
- return this.storage.readObj(cid, types_1.def.unknown);
43
+ return this.storage.readObj(cid, def.unknown);
107
44
  }
108
45
  async getContents() {
109
46
  const entries = await this.data.list();
110
47
  const cids = entries.map((e) => e.value);
111
48
  const { blocks, missing } = await this.storage.getBlocks(cids);
112
49
  if (missing.length > 0) {
113
- throw new error_1.MissingBlocksError('getContents record', missing);
50
+ throw new MissingBlocksError('getContents record', missing);
114
51
  }
115
52
  const contents = {};
116
53
  for (const entry of entries) {
117
54
  const { collection, rkey } = util.parseDataKey(entry.key);
118
- contents[collection] ?? (contents[collection] = {});
55
+ contents[collection] ??= {};
119
56
  const parsed = await parse.getAndParseRecord(blocks, entry.value);
120
57
  contents[collection][rkey] = parsed.record;
121
58
  }
122
59
  return contents;
123
60
  }
124
61
  }
125
- exports.ReadableRepo = ReadableRepo;
126
62
  //# sourceMappingURL=readable-repo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"readable-repo.js","sourceRoot":"","sources":["../src/readable-repo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Cid, LexMap } from '@atproto/lex-data'\nimport { MissingBlocksError } from './error'\nimport log from './logger'\nimport { MST } from './mst'\nimport * as parse from './parse'\nimport { ReadableBlockstore } from './storage'\nimport { Commit, RepoContents, def } from './types'\nimport * as util from './util'\n\ntype Params = {\n storage: ReadableBlockstore\n data: MST\n commit: Commit\n cid: Cid\n}\n\nexport class ReadableRepo {\n storage: ReadableBlockstore\n data: MST\n commit: Commit\n cid: Cid\n\n constructor(params: Params) {\n this.storage = params.storage\n this.data = params.data\n this.commit = params.commit\n this.cid = params.cid\n }\n\n static async load(storage: ReadableBlockstore, commitCid: Cid) {\n const commit = await storage.readObj(commitCid, def.versionedCommit)\n const data = await MST.load(storage, commit.data)\n log.info({ did: commit.did }, 'loaded repo for')\n return new ReadableRepo({\n storage,\n data,\n commit: util.ensureV3Commit(commit),\n cid: commitCid,\n })\n }\n\n get did(): string {\n return this.commit.did\n }\n\n get version(): number {\n return this.commit.version\n }\n\n async *walkRecords(from?: string): AsyncIterable<{\n collection: string\n rkey: string\n cid: Cid\n record: LexMap\n }> {\n for await (const leaf of this.data.walkLeavesFrom(from ?? '')) {\n const { collection, rkey } = util.parseDataKey(leaf.key)\n const record = await this.storage.readRecord(leaf.value)\n yield { collection, rkey, cid: leaf.value, record }\n }\n }\n\n async getRecord(collection: string, rkey: string): Promise<unknown | null> {\n const dataKey = collection + '/' + rkey\n const cid = await this.data.get(dataKey)\n if (!cid) return null\n return this.storage.readObj(cid, def.unknown)\n }\n\n async getContents(): Promise<RepoContents> {\n const entries = await this.data.list()\n const cids = entries.map((e) => e.value)\n const { blocks, missing } = await this.storage.getBlocks(cids)\n if (missing.length > 0) {\n throw new MissingBlocksError('getContents record', missing)\n }\n const contents: RepoContents = {}\n for (const entry of entries) {\n const { collection, rkey } = util.parseDataKey(entry.key)\n contents[collection] ??= {}\n const parsed = await parse.getAndParseRecord(blocks, entry.value)\n contents[collection][rkey] = parsed.record\n }\n return contents\n }\n}\n"]}
1
+ {"version":3,"file":"readable-repo.js","sourceRoot":"","sources":["../src/readable-repo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Cid, LexMap } from '@atproto/lex-data'\nimport { MissingBlocksError } from './error.js'\nimport log from './logger.js'\nimport { MST } from './mst/index.js'\nimport * as parse from './parse.js'\nimport { ReadableBlockstore } from './storage/index.js'\nimport { Commit, RepoContents, def } from './types.js'\nimport * as util from './util.js'\n\ntype Params = {\n storage: ReadableBlockstore\n data: MST\n commit: Commit\n cid: Cid\n}\n\nexport class ReadableRepo {\n storage: ReadableBlockstore\n data: MST\n commit: Commit\n cid: Cid\n\n constructor(params: Params) {\n this.storage = params.storage\n this.data = params.data\n this.commit = params.commit\n this.cid = params.cid\n }\n\n static async load(storage: ReadableBlockstore, commitCid: Cid) {\n const commit = await storage.readObj(commitCid, def.versionedCommit)\n const data = await MST.load(storage, commit.data)\n log.info({ did: commit.did }, 'loaded repo for')\n return new ReadableRepo({\n storage,\n data,\n commit: util.ensureV3Commit(commit),\n cid: commitCid,\n })\n }\n\n get did(): string {\n return this.commit.did\n }\n\n get version(): number {\n return this.commit.version\n }\n\n async *walkRecords(from?: string): AsyncIterable<{\n collection: string\n rkey: string\n cid: Cid\n record: LexMap\n }> {\n for await (const leaf of this.data.walkLeavesFrom(from ?? '')) {\n const { collection, rkey } = util.parseDataKey(leaf.key)\n const record = await this.storage.readRecord(leaf.value)\n yield { collection, rkey, cid: leaf.value, record }\n }\n }\n\n async getRecord(collection: string, rkey: string): Promise<unknown | null> {\n const dataKey = collection + '/' + rkey\n const cid = await this.data.get(dataKey)\n if (!cid) return null\n return this.storage.readObj(cid, def.unknown)\n }\n\n async getContents(): Promise<RepoContents> {\n const entries = await this.data.list()\n const cids = entries.map((e) => e.value)\n const { blocks, missing } = await this.storage.getBlocks(cids)\n if (missing.length > 0) {\n throw new MissingBlocksError('getContents record', missing)\n }\n const contents: RepoContents = {}\n for (const entry of entries) {\n const { collection, rkey } = util.parseDataKey(entry.key)\n contents[collection] ??= {}\n const parsed = await parse.getAndParseRecord(blocks, entry.value)\n contents[collection][rkey] = parsed.record\n }\n return contents\n }\n}\n"]}
package/dist/repo.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import * as crypto from '@atproto/crypto';
2
2
  import { Cid } from '@atproto/lex-data';
3
- import { BlockMap } from './block-map';
4
- import { CidSet } from './cid-set';
5
- import { MST } from './mst';
6
- import { ReadableRepo } from './readable-repo';
7
- import { RepoStorage } from './storage';
8
- import { Commit, CommitData, RecordCreateOp, RecordWriteOp } from './types';
3
+ import { BlockMap } from './block-map.js';
4
+ import { CidSet } from './cid-set.js';
5
+ import { MST } from './mst/index.js';
6
+ import { ReadableRepo } from './readable-repo.js';
7
+ import { RepoStorage } from './storage/index.js';
8
+ import { Commit, CommitData, RecordCreateOp, RecordWriteOp } from './types.js';
9
9
  type Params = {
10
10
  storage: RepoStorage;
11
11
  data: MST;
@@ -1 +1 @@
1
- {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../src/repo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAEzC,OAAO,EAAE,GAAG,EAAc,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAGlC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EACL,MAAM,EACN,UAAU,EACV,cAAc,EACd,aAAa,EAGd,MAAM,SAAS,CAAA;AAGhB,KAAK,MAAM,GAAG;IACZ,OAAO,EAAE,WAAW,CAAA;IACpB,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,qBAAa,IAAK,SAAQ,YAAY;IACpC,OAAO,EAAE,WAAW,CAAA;gBAER,MAAM,EAAE,MAAM;WAKb,gBAAgB,CAC3B,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,aAAa,GAAE,cAAc,EAAO,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,UAAU,CAAC;WAoCT,gBAAgB,CAC3B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,IAAI,CAAC;WAKH,MAAM,CACjB,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,aAAa,GAAE,cAAc,EAAO,GACnC,OAAO,CAAC,IAAI,CAAC;WAUH,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG;IAgB3C,YAAY,CAChB,OAAO,EAAE,aAAa,GAAG,aAAa,EAAE,EACxC,OAAO,EAAE,MAAM,CAAC,OAAO,GACtB,OAAO,CAAC,UAAU,CAAC;IAwEhB,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,WAAW,CACf,OAAO,EAAE,aAAa,GAAG,aAAa,EAAE,EACxC,OAAO,EAAE,MAAM,CAAC,OAAO,GACtB,OAAO,CAAC,IAAI,CAAC;IAKV,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;;;;;;;;;IAwBvD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;CAIxD;AAED,eAAe,IAAI,CAAA"}
1
+ {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../src/repo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAEzC,OAAO,EAAE,GAAG,EAAc,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAGrC,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EACL,MAAM,EACN,UAAU,EACV,cAAc,EACd,aAAa,EAGd,MAAM,YAAY,CAAA;AAGnB,KAAK,MAAM,GAAG;IACZ,OAAO,EAAE,WAAW,CAAA;IACpB,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,qBAAa,IAAK,SAAQ,YAAY;IACpC,OAAO,EAAE,WAAW,CAAA;gBAER,MAAM,EAAE,MAAM;WAKb,gBAAgB,CAC3B,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,aAAa,GAAE,cAAc,EAAO,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,UAAU,CAAC;WAoCT,gBAAgB,CAC3B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,IAAI,CAAC;WAKH,MAAM,CACjB,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,aAAa,GAAE,cAAc,EAAO,GACnC,OAAO,CAAC,IAAI,CAAC;WAUH,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG;IAgB3C,YAAY,CAChB,OAAO,EAAE,aAAa,GAAG,aAAa,EAAE,EACxC,OAAO,EAAE,MAAM,CAAC,OAAO,GACtB,OAAO,CAAC,UAAU,CAAC;IAwEhB,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,WAAW,CACf,OAAO,EAAE,aAAa,GAAG,aAAa,EAAE,EACxC,OAAO,EAAE,MAAM,CAAC,OAAO,GACtB,OAAO,CAAC,IAAI,CAAC;IAKV,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;;;;;;;;;IAwBvD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;CAIxD;AAED,eAAe,IAAI,CAAA"}