@ipld/car 4.1.5 → 5.0.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 (226) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +12 -4
  3. package/dist/index.min.js +5 -0
  4. package/{types → dist/src}/api.d.ts +19 -19
  5. package/dist/src/api.d.ts.map +1 -0
  6. package/{types/lib → dist/src}/buffer-writer.d.ts +10 -10
  7. package/{types/lib → dist/src}/buffer-writer.d.ts.map +1 -1
  8. package/dist/src/coding.d.ts +41 -0
  9. package/dist/src/coding.d.ts.map +1 -0
  10. package/{types/lib → dist/src}/decoder.d.ts +3 -3
  11. package/{types/lib → dist/src}/decoder.d.ts.map +1 -1
  12. package/{types/lib → dist/src}/encoder.d.ts +2 -2
  13. package/{types/lib → dist/src}/encoder.d.ts.map +1 -1
  14. package/{types/lib → dist/src}/header-validator.d.ts +0 -0
  15. package/dist/src/header-validator.d.ts.map +1 -0
  16. package/dist/src/index-browser.d.ts +8 -0
  17. package/dist/src/index-browser.d.ts.map +1 -0
  18. package/dist/src/index.d.ts +9 -0
  19. package/dist/src/index.d.ts.map +1 -0
  20. package/{types/lib → dist/src}/indexed-reader-browser.d.ts +0 -0
  21. package/dist/src/indexed-reader-browser.d.ts.map +1 -0
  22. package/{types/lib → dist/src}/indexed-reader.d.ts +13 -13
  23. package/dist/src/indexed-reader.d.ts.map +1 -0
  24. package/{types/lib → dist/src}/indexer.d.ts +9 -9
  25. package/{types/lib → dist/src}/indexer.d.ts.map +1 -1
  26. package/{types/lib → dist/src}/iterator-channel.d.ts +0 -0
  27. package/{types/lib → dist/src}/iterator-channel.d.ts.map +1 -1
  28. package/{types/lib → dist/src}/iterator.d.ts +8 -8
  29. package/{types/lib → dist/src}/iterator.d.ts.map +1 -1
  30. package/{types/lib → dist/src}/reader-browser.d.ts +10 -10
  31. package/{types/lib → dist/src}/reader-browser.d.ts.map +1 -1
  32. package/{types/lib → dist/src}/reader.d.ts +5 -5
  33. package/{types/lib → dist/src}/reader.d.ts.map +1 -1
  34. package/{types/lib → dist/src}/writer-browser.d.ts +10 -10
  35. package/{types/lib → dist/src}/writer-browser.d.ts.map +1 -1
  36. package/{types/lib → dist/src}/writer.d.ts +4 -4
  37. package/{types/lib → dist/src}/writer.d.ts.map +1 -1
  38. package/package.json +102 -209
  39. package/{api.ts → src/api.ts} +14 -14
  40. package/{lib → src}/buffer-writer.js +5 -5
  41. package/src/coding.ts +56 -0
  42. package/{lib → src}/decoder.js +4 -4
  43. package/{lib → src}/encoder.js +1 -1
  44. package/src/header-validator.js +74 -0
  45. package/{lib → src}/header.ipldsch +0 -0
  46. package/src/index-browser.js +14 -0
  47. package/src/index.js +16 -0
  48. package/{lib → src}/indexed-reader-browser.js +0 -0
  49. package/{lib → src}/indexed-reader.js +9 -9
  50. package/{lib → src}/indexer.js +4 -4
  51. package/{lib → src}/iterator-channel.js +0 -0
  52. package/{lib → src}/iterator.js +4 -4
  53. package/{lib → src}/reader-browser.js +7 -7
  54. package/{lib → src}/reader.js +5 -5
  55. package/{lib → src}/writer-browser.js +7 -7
  56. package/{lib → src}/writer.js +3 -3
  57. package/LICENSE-APACHE +0 -13
  58. package/LICENSE-MIT +0 -7
  59. package/buffer-writer +0 -1
  60. package/car-browser.js +0 -14
  61. package/car.js +0 -16
  62. package/cjs/browser-test/common.js +0 -301
  63. package/cjs/browser-test/node-test-file-streams.js +0 -71
  64. package/cjs/browser-test/node-test-indexed-reader.js +0 -51
  65. package/cjs/browser-test/node-test-large.js +0 -135
  66. package/cjs/browser-test/node-test-raw.js +0 -68
  67. package/cjs/browser-test/node-test-updateroots.js +0 -78
  68. package/cjs/browser-test/test-buffer-writer.js +0 -330
  69. package/cjs/browser-test/test-errors.js +0 -90
  70. package/cjs/browser-test/test-indexer.js +0 -80
  71. package/cjs/browser-test/test-interface.js +0 -21
  72. package/cjs/browser-test/test-iterator.js +0 -83
  73. package/cjs/browser-test/test-reader.js +0 -278
  74. package/cjs/browser-test/test-writer.js +0 -286
  75. package/cjs/browser-test/verify-store-reader.js +0 -142
  76. package/cjs/car-browser.js +0 -18
  77. package/cjs/car.js +0 -20
  78. package/cjs/lib/buffer-writer.js +0 -164
  79. package/cjs/lib/decoder.js +0 -301
  80. package/cjs/lib/encoder.js +0 -44
  81. package/cjs/lib/header-validator.js +0 -29
  82. package/cjs/lib/indexed-reader-browser.js +0 -13
  83. package/cjs/lib/indexed-reader.js +0 -90
  84. package/cjs/lib/indexer.js +0 -41
  85. package/cjs/lib/iterator-channel.js +0 -77
  86. package/cjs/lib/iterator.js +0 -97
  87. package/cjs/lib/reader-browser.js +0 -62
  88. package/cjs/lib/reader.js +0 -38
  89. package/cjs/lib/writer-browser.js +0 -118
  90. package/cjs/lib/writer.js +0 -51
  91. package/cjs/node-test/common.js +0 -301
  92. package/cjs/node-test/node-test-file-streams.js +0 -71
  93. package/cjs/node-test/node-test-indexed-reader.js +0 -51
  94. package/cjs/node-test/node-test-large.js +0 -135
  95. package/cjs/node-test/node-test-raw.js +0 -68
  96. package/cjs/node-test/node-test-updateroots.js +0 -78
  97. package/cjs/node-test/test-buffer-writer.js +0 -330
  98. package/cjs/node-test/test-errors.js +0 -90
  99. package/cjs/node-test/test-indexer.js +0 -80
  100. package/cjs/node-test/test-interface.js +0 -21
  101. package/cjs/node-test/test-iterator.js +0 -83
  102. package/cjs/node-test/test-reader.js +0 -278
  103. package/cjs/node-test/test-writer.js +0 -286
  104. package/cjs/node-test/verify-store-reader.js +0 -142
  105. package/decoder +0 -1
  106. package/esm/browser-test/common.js +0 -274
  107. package/esm/browser-test/node-test-file-streams.js +0 -76
  108. package/esm/browser-test/node-test-indexed-reader.js +0 -53
  109. package/esm/browser-test/node-test-large.js +0 -109
  110. package/esm/browser-test/node-test-raw.js +0 -63
  111. package/esm/browser-test/node-test-updateroots.js +0 -76
  112. package/esm/browser-test/test-buffer-writer.js +0 -311
  113. package/esm/browser-test/test-errors.js +0 -91
  114. package/esm/browser-test/test-indexer.js +0 -85
  115. package/esm/browser-test/test-interface.js +0 -24
  116. package/esm/browser-test/test-iterator.js +0 -91
  117. package/esm/browser-test/test-reader.js +0 -270
  118. package/esm/browser-test/test-writer.js +0 -297
  119. package/esm/browser-test/verify-store-reader.js +0 -122
  120. package/esm/car-browser.js +0 -16
  121. package/esm/car.js +0 -18
  122. package/esm/lib/buffer-writer.js +0 -129
  123. package/esm/lib/decoder.js +0 -265
  124. package/esm/lib/encoder.js +0 -35
  125. package/esm/lib/header-validator.js +0 -23
  126. package/esm/lib/indexed-reader-browser.js +0 -6
  127. package/esm/lib/indexed-reader.js +0 -78
  128. package/esm/lib/indexer.js +0 -38
  129. package/esm/lib/iterator-channel.js +0 -71
  130. package/esm/lib/iterator.js +0 -92
  131. package/esm/lib/reader-browser.js +0 -57
  132. package/esm/lib/reader.js +0 -26
  133. package/esm/lib/writer-browser.js +0 -115
  134. package/esm/lib/writer.js +0 -42
  135. package/esm/node-test/common.js +0 -274
  136. package/esm/node-test/node-test-file-streams.js +0 -76
  137. package/esm/node-test/node-test-indexed-reader.js +0 -53
  138. package/esm/node-test/node-test-large.js +0 -109
  139. package/esm/node-test/node-test-raw.js +0 -63
  140. package/esm/node-test/node-test-updateroots.js +0 -76
  141. package/esm/node-test/test-buffer-writer.js +0 -311
  142. package/esm/node-test/test-errors.js +0 -91
  143. package/esm/node-test/test-indexer.js +0 -85
  144. package/esm/node-test/test-interface.js +0 -24
  145. package/esm/node-test/test-iterator.js +0 -91
  146. package/esm/node-test/test-reader.js +0 -270
  147. package/esm/node-test/test-writer.js +0 -297
  148. package/esm/node-test/verify-store-reader.js +0 -122
  149. package/esm/package.json +0 -9
  150. package/examples/car-to-fixture.js +0 -66
  151. package/examples/dump-car.js +0 -58
  152. package/examples/dump-index.js +0 -24
  153. package/examples/package.json +0 -27
  154. package/examples/round-trip.js +0 -45
  155. package/examples/test-examples.js +0 -115
  156. package/examples/verify-car.js +0 -87
  157. package/index.js +0 -1
  158. package/indexed-reader +0 -1
  159. package/indexer +0 -1
  160. package/iterator +0 -1
  161. package/lib/coding.ts +0 -56
  162. package/lib/header-validator.js +0 -33
  163. package/reader +0 -1
  164. package/test/_fixtures_to_js.mjs +0 -24
  165. package/test/common.js +0 -210
  166. package/test/go.car +0 -0
  167. package/test/go.carv2 +0 -0
  168. package/test/node-test-file-streams.js +0 -84
  169. package/test/node-test-indexed-reader.js +0 -45
  170. package/test/node-test-large.js +0 -112
  171. package/test/node-test-raw.js +0 -83
  172. package/test/node-test-updateroots.js +0 -89
  173. package/test/test-buffer-writer.js +0 -256
  174. package/test/test-errors.js +0 -98
  175. package/test/test-indexer.js +0 -87
  176. package/test/test-interface.js +0 -24
  177. package/test/test-iterator.js +0 -74
  178. package/test/test-reader.js +0 -245
  179. package/test/test-writer.js +0 -336
  180. package/test/verify-store-reader.js +0 -191
  181. package/tsconfig.json +0 -48
  182. package/types/api.d.ts.map +0 -1
  183. package/types/car-browser.d.ts +0 -8
  184. package/types/car-browser.d.ts.map +0 -1
  185. package/types/car.d.ts +0 -9
  186. package/types/car.d.ts.map +0 -1
  187. package/types/lib/coding.d.ts +0 -41
  188. package/types/lib/coding.d.ts.map +0 -1
  189. package/types/lib/header-validator.d.ts.map +0 -1
  190. package/types/lib/indexed-reader-browser.d.ts.map +0 -1
  191. package/types/lib/indexed-reader.d.ts.map +0 -1
  192. package/types/test/_fixtures_to_js.d.mts +0 -3
  193. package/types/test/_fixtures_to_js.d.mts.map +0 -1
  194. package/types/test/common.d.ts +0 -73
  195. package/types/test/common.d.ts.map +0 -1
  196. package/types/test/fixtures-expectations.d.ts +0 -63
  197. package/types/test/fixtures-expectations.d.ts.map +0 -1
  198. package/types/test/fixtures.d.ts +0 -3
  199. package/types/test/fixtures.d.ts.map +0 -1
  200. package/types/test/node-test-file-streams.d.ts +0 -3
  201. package/types/test/node-test-file-streams.d.ts.map +0 -1
  202. package/types/test/node-test-indexed-reader.d.ts +0 -2
  203. package/types/test/node-test-indexed-reader.d.ts.map +0 -1
  204. package/types/test/node-test-large.d.ts +0 -2
  205. package/types/test/node-test-large.d.ts.map +0 -1
  206. package/types/test/node-test-raw.d.ts +0 -2
  207. package/types/test/node-test-raw.d.ts.map +0 -1
  208. package/types/test/node-test-updateroots.d.ts +0 -2
  209. package/types/test/node-test-updateroots.d.ts.map +0 -1
  210. package/types/test/test-buffer-writer.d.ts +0 -2
  211. package/types/test/test-buffer-writer.d.ts.map +0 -1
  212. package/types/test/test-errors.d.ts +0 -2
  213. package/types/test/test-errors.d.ts.map +0 -1
  214. package/types/test/test-indexer.d.ts +0 -2
  215. package/types/test/test-indexer.d.ts.map +0 -1
  216. package/types/test/test-interface.d.ts +0 -2
  217. package/types/test/test-interface.d.ts.map +0 -1
  218. package/types/test/test-iterator.d.ts +0 -2
  219. package/types/test/test-iterator.d.ts.map +0 -1
  220. package/types/test/test-reader.d.ts +0 -2
  221. package/types/test/test-reader.d.ts.map +0 -1
  222. package/types/test/test-writer.d.ts +0 -2
  223. package/types/test/test-writer.d.ts.map +0 -1
  224. package/types/test/verify-store-reader.d.ts +0 -29
  225. package/types/test/verify-store-reader.d.ts.map +0 -1
  226. package/writer +0 -1
@@ -1,336 +0,0 @@
1
- /* eslint-env mocha */
2
- /* globals describe, it */
3
-
4
- import { CarWriter } from '@ipld/car/writer'
5
- import { CarReader } from '@ipld/car/reader'
6
- import { bytes, CID } from 'multiformats'
7
- import { carBytes, makeData, assert, rndCid } from './common.js'
8
- import {
9
- verifyRoots,
10
- verifyHas,
11
- verifyGet,
12
- verifyBlocks,
13
- verifyCids
14
- } from './verify-store-reader.js'
15
-
16
- /**
17
- * @typedef {import('../api').Block} Block
18
- */
19
-
20
- const { toHex } = bytes
21
-
22
- /**
23
- * @param {Uint8Array[]} chunks
24
- */
25
- function concatBytes (chunks) {
26
- const length = chunks.reduce((p, c) => p + c.length, 0)
27
- const bytes = new Uint8Array(length)
28
- let off = 0
29
- for (const chunk of chunks) {
30
- bytes.set(chunk, off)
31
- off += chunk.length
32
- }
33
- return bytes
34
- }
35
-
36
- /**
37
- * @param {AsyncIterable<Uint8Array>} iterable
38
- */
39
- function collector (iterable) {
40
- const chunks = []
41
- const cfn = (async () => {
42
- for await (const chunk of iterable) {
43
- chunks.push(chunk)
44
- }
45
- return concatBytes(chunks)
46
- })()
47
- return cfn
48
- }
49
-
50
- const newRoots = [
51
- CID.parse('bafkreidbxzk2ryxwwtqxem4l3xyyjvw35yu4tcct4cqeqxwo47zhxgxqwq'),
52
- CID.parse('bafkreiebzrnroamgos2adnbpgw5apo3z4iishhbdx77gldnbk57d4zdio4')
53
- ]
54
-
55
- /**
56
- * @param {Uint8Array} bytes
57
- */
58
- async function verifyUpdateRoots (bytes) {
59
- const reader = await CarReader.fromBytes(bytes)
60
- await assert.isRejected(verifyRoots(reader)) // whoa, different roots? like magic
61
- assert.deepEqual(await reader.getRoots(), newRoots)
62
- await verifyHas(reader)
63
- await verifyGet(reader)
64
- await verifyBlocks(reader.blocks(), true)
65
- await verifyCids(reader.cids(), true)
66
- }
67
-
68
- describe('CarWriter', () => {
69
- /** @type {Block[]} */
70
- let cborBlocks
71
- /** @type {[string, Block[]][]} */
72
- let allBlocks
73
- /** @type {Block[]} */
74
- let allBlocksFlattened
75
- /** @type {CID[]} */
76
- let roots
77
-
78
- /**
79
- * @param {Uint8Array} actual
80
- */
81
- function assertCarData (actual) {
82
- assert.strictEqual(
83
- toHex(actual),
84
- toHex(carBytes),
85
- 'got expected bytes'
86
- )
87
- }
88
-
89
- before(async () => {
90
- const data = await makeData()
91
- cborBlocks = data.cborBlocks
92
- allBlocks = data.allBlocks
93
- allBlocksFlattened = data.allBlocksFlattened
94
- roots = [cborBlocks[0].cid, cborBlocks[1].cid]
95
- })
96
-
97
- it('complete', async () => {
98
- const { writer, out } = CarWriter.create(roots)
99
-
100
- // writer is async iterable
101
- assert.strictEqual(typeof out[Symbol.asyncIterator], 'function')
102
- const collection = collector(out)
103
-
104
- const writeQueue = []
105
- for (const block of allBlocksFlattened) {
106
- writeQueue.push(writer.put(block))
107
- }
108
- writeQueue.push(writer.close())
109
-
110
- let collected = false
111
- collection.then((bytes) => {
112
- collected = true
113
- assertCarData(bytes)
114
- })
115
- await Promise.all(writeQueue)
116
- assert.strictEqual(collected, true)
117
- })
118
-
119
- it('complete, deferred collection', async () => {
120
- const { writer, out } = CarWriter.create(roots)
121
-
122
- const writeQueue = []
123
- for (const block of allBlocksFlattened) {
124
- writeQueue.push(writer.put(block))
125
- }
126
- writeQueue.push(writer.close())
127
-
128
- // attach to the iterator after we've queued all the writing
129
- let collected = false
130
- collector(out).then((bytes) => {
131
- collected = true
132
- assertCarData(bytes)
133
- })
134
- await Promise.all(writeQueue)
135
- assert.strictEqual(collected, true)
136
- })
137
-
138
- it('complete, close after write', async () => {
139
- const { writer, out } = CarWriter.create(roots)
140
-
141
- assert.strictEqual(typeof out[Symbol.asyncIterator], 'function')
142
- const collection = collector(out)
143
-
144
- const writeQueue = []
145
- for (const block of allBlocksFlattened) {
146
- writeQueue.push(writer.put(block))
147
- }
148
- writeQueue.push(writer.close())
149
-
150
- let written = false
151
- Promise.all(writeQueue).then(() => {
152
- written = true
153
- })
154
- const bytes = await collection
155
- assert.strictEqual(written, false)
156
- await Promise.resolve()
157
- assertCarData(bytes)
158
- })
159
-
160
- it('complete, no queue', async () => {
161
- const { writer, out } = CarWriter.create(roots)
162
- const collection = collector(out)
163
-
164
- for (const block of allBlocksFlattened) {
165
- await writer.put(block)
166
- }
167
- await writer.close()
168
-
169
- const bytes = await collection
170
- assertCarData(bytes)
171
- })
172
-
173
- it('complete, slow drip', async () => {
174
- const { writer, out } = CarWriter.create(roots)
175
-
176
- // writer is async iterable
177
- assert.strictEqual(typeof out[Symbol.asyncIterator], 'function')
178
- const collection = collector(out)
179
-
180
- for (const block of allBlocksFlattened) {
181
- writer.put(block)
182
- await new Promise((resolve) => setTimeout(resolve, 100))
183
- }
184
- await writer.close()
185
-
186
- await new Promise((resolve) => setTimeout(resolve, 100))
187
-
188
- const bytes = await collection
189
- assertCarData(bytes)
190
- })
191
-
192
- it('complete, no queue, deferred collection', async () => {
193
- const { writer, out } = CarWriter.create(roots)
194
-
195
- for (const block of allBlocksFlattened) {
196
- writer.put(block)
197
- }
198
- writer.close()
199
-
200
- const collection = collector(out)
201
- const bytes = await collection
202
- assertCarData(bytes)
203
- })
204
-
205
- it('single root', async () => {
206
- const { writer, out } = CarWriter.create(roots[0])
207
- const collection = collector(out)
208
-
209
- for (const block of allBlocksFlattened) {
210
- await writer.put(block)
211
- }
212
- await writer.close()
213
-
214
- const bytes = await collection
215
-
216
- // test the start of the bytes to make sure we have the root def block we expect
217
- // { roots: [ CID(bafyreihyrpefhacm6kkp4ql6j6udakdit7g3dmkzfriqfykhjw6cad5lrm) ], version: 1 }
218
- const expectedRootDef = 'a265726f6f747381d82a58250001711220f88bc853804cf294fe417e4fa83028689fcdb1b1592c5102e1474dbc200fab8b6776657273696f6e01'
219
- const expectedStart = (expectedRootDef.length / 2).toString(16) + // length of root def block
220
- expectedRootDef +
221
- '28' // length of first raw block + CIDv0
222
-
223
- assert.strictEqual(toHex(bytes).substring(0, expectedStart.length), expectedStart)
224
- })
225
-
226
- it('no roots', async () => {
227
- const { writer, out } = CarWriter.create()
228
- const collection = collector(out)
229
-
230
- for (const block of allBlocksFlattened) {
231
- await writer.put(block)
232
- }
233
- await writer.close()
234
-
235
- const bytes = await collection
236
-
237
- // test the start of the bytes to make sure we have the root def block we expect
238
- // { roots: [], version: 1 }
239
- const expectedRootDef = 'a265726f6f7473806776657273696f6e01'
240
- const expectedStart = (expectedRootDef.length / 2).toString(16) + // length of root def block
241
- expectedRootDef +
242
- '28' // length of first raw block + CIDv0
243
-
244
- assert.strictEqual(toHex(bytes).substring(0, expectedStart.length), expectedStart)
245
- })
246
-
247
- it('appender', async () => {
248
- let writerOut = CarWriter.create(roots)
249
- let collection = collector(writerOut.out)
250
- await writerOut.writer.close()
251
- const headerBytes = await collection
252
-
253
- /** @param {number} index */
254
- const append = async (index) => {
255
- writerOut = CarWriter.createAppender()
256
- collection = collector(writerOut.out)
257
- for (const block of allBlocks[index][1]) {
258
- await writerOut.writer.put(block)
259
- }
260
- await writerOut.writer.close()
261
- return collection
262
- }
263
-
264
- const rawBytes = await append(0)
265
- const pbBytes = await append(1)
266
- const cborBytes = await append(2)
267
-
268
- assert.ok(rawBytes.length > 0)
269
- assert.ok(pbBytes.length > 0)
270
- assert.ok(cborBytes.length > 0)
271
-
272
- const reassembled = concatBytes([headerBytes, rawBytes, pbBytes, cborBytes])
273
-
274
- assert.strictEqual(toHex(reassembled), toHex(carBytes))
275
- })
276
-
277
- it('bad argument for create()', () => {
278
- for (const arg of [new Uint8Array(0), true, false, null, 'string', 100, { obj: 'nope' }, [false]]) {
279
- // @ts-ignore
280
- assert.throws(() => CarWriter.create(arg))
281
- }
282
- })
283
-
284
- it('bad argument for put()', async () => {
285
- const { writer } = CarWriter.create()
286
- for (const arg of [new Uint8Array(0), true, false, null, 'string', 100, { obj: 'nope' }, [false]]) {
287
- // @ts-ignore
288
- await assert.isRejected(writer.put(arg))
289
- }
290
-
291
- for (const arg of [true, false, null, 'string', 100, { obj: 'nope' }, [false]]) {
292
- // @ts-ignore
293
- await assert.isRejected(writer.put({ bytes: new Uint8Array(0), cid: arg }))
294
- }
295
-
296
- for (const arg of [true, false, null, 'string', 100, { obj: 'nope' }, [false]]) {
297
- // @ts-ignore
298
- await assert.isRejected(writer.put({ cid: rndCid, bytes: arg }))
299
- }
300
- })
301
-
302
- it('bad write after closed', async () => {
303
- const { writer, out } = CarWriter.create()
304
- const collection = collector(out)
305
- await writer.put(allBlocksFlattened[0])
306
- await writer.close()
307
- await assert.isRejected(writer.put(allBlocksFlattened[1]), /closed/)
308
- await collection
309
- })
310
-
311
- it('bad attempt to multiple iterate', async () => {
312
- const { out } = CarWriter.create()
313
- collector(out)
314
- await assert.isRejected(collector(out), /multiple iterator/i)
315
- })
316
-
317
- it('bad attempt to multiple close', async () => {
318
- const { writer, out } = CarWriter.create()
319
- collector(out)
320
- await writer.close()
321
- await assert.isRejected(writer.close(), /closed/i)
322
- })
323
-
324
- it('update roots (fd)', async () => {
325
- const bytes = carBytes.slice()
326
- await CarWriter.updateRootsInBytes(bytes, newRoots)
327
- await verifyUpdateRoots(bytes)
328
- })
329
-
330
- it('update roots error: wrong header size', async () => {
331
- const bytes = carBytes.slice()
332
- await assert.isRejected(CarWriter.updateRootsInBytes(bytes, [...newRoots, newRoots[0]]), /can only overwrite a header of the same length/)
333
- await assert.isRejected(CarWriter.updateRootsInBytes(bytes, [newRoots[0]]), /can only overwrite a header of the same length/)
334
- await assert.isRejected(CarWriter.updateRootsInBytes(bytes, []), /can only overwrite a header of the same length/)
335
- })
336
- })
@@ -1,191 +0,0 @@
1
- import { bytes } from 'multiformats'
2
- import * as raw from 'multiformats/codecs/raw'
3
- import { toBlock, assert, makeData } from './common.js'
4
-
5
- /**
6
- * @typedef {import('multiformats').CID} CID
7
- * @typedef {import('../api').Block} Block
8
- * @typedef {import('../api').RootsReader} RootsReader
9
- * @typedef {import('../api').BlockIterator} BlockIterator
10
- * @typedef {import('../api').CIDIterator} CIDIterator
11
- * @typedef {import('../api').BlockReader} BlockReader
12
- */
13
-
14
- /**
15
- * @param {Block} actual
16
- * @param {Block} expected
17
- * @param {string | void} id
18
- */
19
- function compareBlockData (actual, expected, id) {
20
- assert.strictEqual(
21
- bytes.toHex(actual.bytes),
22
- bytes.toHex(expected.bytes),
23
- `comparing block as hex ${id || ''}`
24
- )
25
- }
26
-
27
- /**
28
- * @param {CID} actual
29
- * @param {CID} expected
30
- */
31
- function compareCids (actual, expected) {
32
- assert.strictEqual(actual.toString(), expected.toString())
33
- }
34
-
35
- /**
36
- * @param {RootsReader} reader
37
- */
38
- async function verifyRoots (reader) {
39
- // using toString() for now, backing buffers in Uint8Arrays are getting in the way
40
- // in the browser
41
- const { cborBlocks } = await makeData()
42
-
43
- const expected = [cborBlocks[0].cid.toString(), cborBlocks[1].cid.toString()]
44
- assert.deepStrictEqual((await reader.getRoots()).map((c) => c.toString()), expected)
45
- }
46
-
47
- /**
48
- * @param {BlockReader} reader
49
- */
50
- async function verifyHas (reader) {
51
- const { allBlocks } = await makeData()
52
-
53
- /**
54
- * @param {CID} cid
55
- * @param {string} name
56
- */
57
- const verifyHas = async (cid, name) => {
58
- assert.ok(await reader.has(cid), `reader doesn't have expected key for ${name}`)
59
- }
60
-
61
- /**
62
- * @param {CID} cid
63
- * @param {string} name
64
- */
65
- const verifyHasnt = async (cid, name) => {
66
- assert.ok(!(await reader.has(cid)), `reader has unexpected key for ${name}`)
67
- assert.strictEqual(await reader.get(cid), undefined)
68
- }
69
-
70
- for (const [type, blocks] of allBlocks) {
71
- for (let i = 0; i < blocks.length; i++) {
72
- await verifyHas(blocks[i].cid, `block #${i} (${type} / ${blocks[i].cid})`)
73
- }
74
- }
75
-
76
- // not a block we have
77
- await verifyHasnt((await toBlock(new TextEncoder().encode('dddd'), raw)).cid, 'dddd')
78
- }
79
-
80
- /**
81
- * @param {BlockReader} reader
82
- */
83
- async function verifyGet (reader) {
84
- const { allBlocks } = await makeData()
85
-
86
- /**
87
- * @param {Block} expected
88
- * @param {number} index
89
- * @param {string} type
90
- */
91
- const verifyBlock = async (expected, index, type) => {
92
- let actual
93
- try {
94
- actual = await reader.get(expected.cid)
95
- assert.isDefined(actual)
96
- if (actual) {
97
- compareBlockData(actual, expected, `#${index} (${type})`)
98
- }
99
- } catch (err) {
100
- assert.ifError(err, `get block length #${index} (${type})`)
101
- }
102
- }
103
-
104
- for (const [type, blocks] of allBlocks) {
105
- for (let i = 0; i < blocks.length; i++) {
106
- await verifyBlock(blocks[i], i, type)
107
- }
108
- }
109
- }
110
-
111
- /**
112
- * @param {BlockIterator} iterator
113
- * @param {boolean | void} unordered
114
- */
115
- async function verifyBlocks (iterator, unordered) {
116
- const { allBlocksFlattened } = await makeData()
117
- if (!unordered) {
118
- const expected = allBlocksFlattened.slice()
119
- for await (const actual of iterator) {
120
- const next = expected.shift()
121
- assert.isDefined(next)
122
- if (next) {
123
- compareBlockData(actual, next)
124
- }
125
- }
126
- } else {
127
- /** @type {{[prop: string]: Block}} */
128
- const expected = {}
129
- for (const block of allBlocksFlattened) {
130
- expected[block.cid.toString()] = block
131
- }
132
-
133
- for await (const actual of iterator) {
134
- const { cid } = actual
135
- const exp = expected[cid.toString()]
136
- if (!exp) {
137
- throw new Error(`Unexpected block: ${cid.toString()}`)
138
- }
139
- compareBlockData(actual, exp)
140
- delete expected[cid.toString()]
141
- }
142
-
143
- if (Object.keys(expected).length) {
144
- throw new Error('Did not find all expected blocks')
145
- }
146
- }
147
- }
148
-
149
- /**
150
- * @param {CIDIterator} iterator
151
- * @param {boolean | void} unordered
152
- */
153
- async function verifyCids (iterator, unordered) {
154
- const { allBlocksFlattened } = await makeData()
155
- if (!unordered) {
156
- const expected = allBlocksFlattened.slice()
157
- for await (const actual of iterator) {
158
- const next = expected.shift()
159
- assert.isDefined(next)
160
- if (next) {
161
- compareCids(actual, next.cid)
162
- }
163
- }
164
- } else {
165
- /** @type {{[prop: string]: Block}} */
166
- const expected = {}
167
- for (const block of allBlocksFlattened) {
168
- expected[block.cid.toString()] = block
169
- }
170
-
171
- for await (const cid of iterator) {
172
- const exp = expected[cid.toString()]
173
- if (!exp) {
174
- throw new Error(`Unexpected cid: ${cid.toString()}`)
175
- }
176
- delete expected[cid.toString()]
177
- }
178
-
179
- if (Object.keys(expected).length) {
180
- throw new Error('Did not find all expected cids')
181
- }
182
- }
183
- }
184
-
185
- export {
186
- verifyRoots,
187
- verifyHas,
188
- verifyGet,
189
- verifyBlocks,
190
- verifyCids
191
- }
package/tsconfig.json DELETED
@@ -1,48 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "allowJs": true,
4
- "checkJs": true,
5
- "forceConsistentCasingInFileNames": true,
6
- "noImplicitReturns": false,
7
- "noImplicitAny": true,
8
- "noImplicitThis": true,
9
- "noFallthroughCasesInSwitch": true,
10
- "noUnusedLocals": true,
11
- "noUnusedParameters": true,
12
- "strictFunctionTypes": false,
13
- "strictNullChecks": true,
14
- "strictPropertyInitialization": true,
15
- "strictBindCallApply": true,
16
- "strict": true,
17
- "useUnknownInCatchVariables": false,
18
- "alwaysStrict": true,
19
- "esModuleInterop": true,
20
- "target": "ES2018",
21
- "module": "ESNext",
22
- "moduleResolution": "node",
23
- "declaration": true,
24
- "declarationMap": true,
25
- "outDir": "types",
26
- "skipLibCheck": true,
27
- "stripInternal": true,
28
- "resolveJsonModule": true,
29
- "emitDeclarationOnly": true,
30
- "baseUrl": ".",
31
- "paths": {
32
- "@ipld/car": [ "car.js", "car-browser.js", "lib/" ],
33
- "@ipld/car/writer": [ "./lib/writer.js" ],
34
- "@ipld/car/buffer-writer": ["./lib/buffer-writer.js"],
35
- "@ipld/car/reader": [ "./lib/reader.js" ],
36
- "@ipld/car/indexed-reader": [ "./lib/indexed-reader.js" ],
37
- "@ipld/car/iterator": [ "./lib/iterator.js" ],
38
- "@ipld/car/indexer": [ "./lib/indexer.js" ],
39
- "@ipld/car/decoder": [ "./lib/decoder.js" ],
40
- }
41
- },
42
- "exclude": [
43
- "node_modules",
44
- "dist",
45
- "examples"
46
- ],
47
- "compileOnSave": false
48
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAEtC,YAAY,EAAE,GAAG,EAAE,CAAA;AAGnB,oBAAY,KAAK,GAAG;IAClB,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,UAAU,CAAA;CAClB,CAAA;AAED,oBAAY,WAAW,GAAG;IACxB,GAAG,EAAE,GAAG,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,oBAAY,UAAU,GAAG,WAAW,GAAG;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa,CAAC,KAAK,CAAC;CAAG;AAE9D,MAAM,WAAW,WAAY,SAAQ,aAAa,CAAC,GAAG,CAAC;CAAG;AAE1D,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/B,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAA;IACzC,MAAM,IAAI,aAAa,CAAA;IACvB,IAAI,IAAI,WAAW,CAAA;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,IAAI,EAAC,GAAG,EAAE,OAAO,CAAC,EAAC;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAE,eAAe,CAAA;IAChE,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,CAAA;IACpC,KAAK,CAAC,OAAO,CAAC,EAAC;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,UAAU,CAAA;CACjD;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,SAAU,SAAQ,WAAW,EAAE,WAAW;CAAG"}
@@ -1,8 +0,0 @@
1
- import { CarReader } from "./lib/reader-browser.js";
2
- import { CarIndexer } from "./lib/indexer.js";
3
- import { CarBlockIterator } from "./lib/iterator.js";
4
- import { CarCIDIterator } from "./lib/iterator.js";
5
- import { CarWriter } from "./lib/writer-browser.js";
6
- import { CarIndexedReader } from "./lib/indexed-reader-browser.js";
7
- export { CarReader, CarIndexer, CarBlockIterator, CarCIDIterator, CarWriter, CarIndexedReader };
8
- //# sourceMappingURL=car-browser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"car-browser.d.ts","sourceRoot":"","sources":["../car-browser.js"],"names":[],"mappings":""}
package/types/car.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import { CarReader } from "./lib/reader.js";
2
- import { CarIndexer } from "./lib/indexer.js";
3
- import { CarBlockIterator } from "./lib/iterator.js";
4
- import { CarCIDIterator } from "./lib/iterator.js";
5
- import { CarWriter } from "./lib/writer.js";
6
- import { CarIndexedReader } from "./lib/indexed-reader.js";
7
- import * as CarBufferWriter from "./lib/buffer-writer.js";
8
- export { CarReader, CarIndexer, CarBlockIterator, CarCIDIterator, CarWriter, CarIndexedReader, CarBufferWriter };
9
- //# sourceMappingURL=car.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"car.d.ts","sourceRoot":"","sources":["../car.js"],"names":[],"mappings":""}
@@ -1,41 +0,0 @@
1
- import { CID } from 'multiformats/cid';
2
- import { Block, BlockIndex } from '../api';
3
- export interface CarEncoder {
4
- setRoots(roots: CID[]): Promise<void>;
5
- writeBlock(block: Block): Promise<void>;
6
- close(): Promise<void>;
7
- }
8
- export interface IteratorChannel_Writer<T> {
9
- write(chunk: T): Promise<void>;
10
- end(): Promise<void>;
11
- }
12
- export interface IteratorChannel<T> {
13
- writer: IteratorChannel_Writer<T>;
14
- iterator: AsyncIterator<T>;
15
- }
16
- export interface CarHeader {
17
- version: 1;
18
- roots: CID[];
19
- }
20
- export interface CarV2FixedHeader {
21
- characteristics: [bigint, bigint];
22
- dataOffset: number;
23
- dataSize: number;
24
- indexOffset: number;
25
- }
26
- export interface CarV2Header extends CarV2FixedHeader {
27
- version: 2;
28
- roots: CID[];
29
- }
30
- export interface CarDecoder {
31
- header(): Promise<CarHeader | CarV2Header>;
32
- blocks(): AsyncGenerator<Block>;
33
- blocksIndex(): AsyncGenerator<BlockIndex>;
34
- }
35
- export interface BytesReader {
36
- upTo(length: number): Promise<Uint8Array>;
37
- exactly(length: number): Promise<Uint8Array>;
38
- seek(length: number): void;
39
- pos: number;
40
- }
41
- //# sourceMappingURL=coding.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coding.d.ts","sourceRoot":"","sources":["../../lib/coding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAE1C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAErC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACrB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAA;IAEjC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,GAAG,EAAE,CAAA;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,WAAY,SAAQ,gBAAgB;IACnD,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,GAAG,EAAE,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,IAAI,OAAO,CAAC,SAAS,GAAC,WAAW,CAAC,CAAA;IAExC,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAAA;IAE/B,WAAW,IAAI,cAAc,CAAC,UAAU,CAAC,CAAA;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAEzC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAE5C,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAE1B,GAAG,EAAE,MAAM,CAAA;CACZ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"header-validator.d.ts","sourceRoot":"","sources":["../../lib/header-validator.js"],"names":[],"mappings":"AAsB4B,+BAAK,GAAG,GAAG,OAAO,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexed-reader-browser.d.ts","sourceRoot":"","sources":["../../lib/indexed-reader-browser.js"],"names":[],"mappings":"AAAA;IACE,iCAEC;CACF;AAED,6BAA6B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexed-reader.d.ts","sourceRoot":"","sources":["../../lib/indexed-reader.js"],"names":[],"mappings":";AAMA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH;IAyIE;;;;;;;;;;;;;;;OAeG;IACH,sBAHW,MAAM,GACJ,QAAQ,gBAAgB,CAAC,CAoBrC;IA1KD;;;;;;OAMG;IACH,qBANW,MAAM,QACN,MAAM,SACN,GAAG,EAAE,SACL,IAAI,MAAM,EAAE,WAAW,CAAC,SACxB,MAAM,EAAE,EASlB;IANC,iBAAuB;IACvB,cAAiB;IACjB,cAAmB;IACnB,iCAAmB;IACnB,iBAAmB;IACnB,mCAAe;IAGjB,sBAEC;IAED;;;;;;;;OAQG;IACH,YAFa,QAAQ,GAAG,EAAE,CAAC,CAM1B;IAED;;;;;;;;;OASG;IACH,SAHW,GAAG,GACD,QAAQ,OAAO,CAAC,CAM5B;IAED;;;;;;;;;OASG;IACH,SAHW,GAAG,GACD,QAAQ,KAAK,GAAG,SAAS,CAAC,CAoBtC;IAED;;;;;;;;;OASG;IACH,UAFa,eAAe,KAAK,CAAC,CAWjC;IAED;;;;;;;;;OASG;IACH,QAFa,eAAe,GAAG,CAAC,CAM/B;IAED;;;;;;;;;OASG;IACH,SAFa,QAAQ,IAAI,CAAC,CAQzB;CAqCF;AAED,8BAA8B;yBArNjB,OAAO,IAAI,EAAE,QAAQ,CAAC,UAAU;oBAChC,OAAO,QAAQ,EAAE,KAAK;yBACtB,OAAO,QAAQ,EAAE,UAAU;6BAC3B,OAAO,QAAQ,EAAE,SAAS;wBAC1B,OAAO,kBAAkB,EAAE,SAAS;0BACpC;IAAE,WAAW,EAAC,MAAM,CAAC;IAAC,WAAW,EAAC,MAAM,CAAA;CAAE"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=_fixtures_to_js.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_fixtures_to_js.d.mts","sourceRoot":"","sources":["../../test/_fixtures_to_js.mjs"],"names":[],"mappings":""}