@ipld/car 3.2.4 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +183 -2
  2. package/api.ts +22 -4
  3. package/buffer-writer +1 -0
  4. package/cjs/browser-test/common.js +78 -3
  5. package/cjs/browser-test/node-test-large.js +8 -8
  6. package/cjs/browser-test/test-buffer-writer.js +330 -0
  7. package/cjs/browser-test/test-errors.js +57 -34
  8. package/cjs/browser-test/test-indexer.js +12 -0
  9. package/cjs/browser-test/test-reader.js +83 -0
  10. package/cjs/browser-test/test-writer.js +3 -3
  11. package/cjs/lib/buffer-writer.js +161 -0
  12. package/cjs/lib/decoder.js +72 -15
  13. package/cjs/lib/encoder.js +2 -2
  14. package/cjs/lib/header-validator.js +29 -0
  15. package/cjs/lib/reader-browser.js +7 -7
  16. package/cjs/lib/writer-browser.js +1 -1
  17. package/cjs/node-test/common.js +78 -3
  18. package/cjs/node-test/node-test-large.js +8 -8
  19. package/cjs/node-test/test-buffer-writer.js +330 -0
  20. package/cjs/node-test/test-errors.js +57 -34
  21. package/cjs/node-test/test-indexer.js +12 -0
  22. package/cjs/node-test/test-reader.js +83 -0
  23. package/cjs/node-test/test-writer.js +3 -3
  24. package/esm/browser-test/common.js +76 -1
  25. package/esm/browser-test/test-buffer-writer.js +311 -0
  26. package/esm/browser-test/test-errors.js +57 -33
  27. package/esm/browser-test/test-indexer.js +15 -0
  28. package/esm/browser-test/test-reader.js +90 -1
  29. package/esm/browser-test/test-writer.js +3 -3
  30. package/esm/lib/buffer-writer.js +126 -0
  31. package/esm/lib/decoder.js +69 -13
  32. package/esm/lib/header-validator.js +23 -0
  33. package/esm/lib/reader-browser.js +7 -8
  34. package/esm/lib/writer-browser.js +1 -1
  35. package/esm/node-test/common.js +76 -1
  36. package/esm/node-test/test-buffer-writer.js +311 -0
  37. package/esm/node-test/test-errors.js +57 -33
  38. package/esm/node-test/test-indexer.js +15 -0
  39. package/esm/node-test/test-reader.js +90 -1
  40. package/esm/node-test/test-writer.js +3 -3
  41. package/examples/car-to-fixture.js +1 -4
  42. package/examples/dump-index.js +24 -0
  43. package/examples/test-examples.js +33 -0
  44. package/lib/buffer-writer.js +286 -0
  45. package/lib/coding.ts +17 -2
  46. package/lib/decoder.js +130 -14
  47. package/lib/header-validator.js +33 -0
  48. package/lib/header.ipldsch +6 -0
  49. package/lib/reader-browser.js +11 -11
  50. package/lib/writer-browser.js +1 -1
  51. package/package.json +16 -6
  52. package/test/_fixtures_to_js.mjs +24 -0
  53. package/test/common.js +49 -3
  54. package/test/go.carv2 +0 -0
  55. package/test/test-buffer-writer.js +256 -0
  56. package/test/test-errors.js +52 -30
  57. package/test/test-indexer.js +24 -1
  58. package/test/test-reader.js +94 -1
  59. package/test/test-writer.js +3 -3
  60. package/tsconfig.json +3 -1
  61. package/types/api.d.ts +16 -0
  62. package/types/api.d.ts.map +1 -1
  63. package/types/lib/buffer-writer.d.ts +86 -0
  64. package/types/lib/buffer-writer.d.ts.map +1 -0
  65. package/types/lib/coding.d.ts +14 -4
  66. package/types/lib/coding.d.ts.map +1 -1
  67. package/types/lib/decoder.d.ts +38 -2
  68. package/types/lib/decoder.d.ts.map +1 -1
  69. package/types/lib/header-validator.d.ts +2 -0
  70. package/types/lib/header-validator.d.ts.map +1 -0
  71. package/types/lib/reader-browser.d.ts +15 -7
  72. package/types/lib/reader-browser.d.ts.map +1 -1
  73. package/types/test/_fixtures_to_js.d.mts +3 -0
  74. package/types/test/_fixtures_to_js.d.mts.map +1 -0
  75. package/types/test/common.d.ts +13 -0
  76. package/types/test/common.d.ts.map +1 -1
  77. package/types/test/fixtures-expectations.d.ts +63 -0
  78. package/types/test/fixtures-expectations.d.ts.map +1 -0
  79. package/types/test/fixtures.d.ts +3 -0
  80. package/types/test/fixtures.d.ts.map +1 -0
  81. package/types/test/test-buffer-writer.d.ts +2 -0
  82. package/types/test/test-buffer-writer.d.ts.map +1 -0
@@ -2,10 +2,21 @@
2
2
 
3
3
  import { CarReader } from '@ipld/car/reader'
4
4
  import { CarWriter } from '@ipld/car/writer'
5
+ import { bytesReader, readHeader } from '@ipld/car/decoder'
5
6
  import * as Block from 'multiformats/block'
6
7
  import { sha256 } from 'multiformats/hashes/sha2'
7
8
  import * as raw from 'multiformats/codecs/raw'
8
- import { carBytes, makeIterable, assert } from './common.js'
9
+ import { base64 } from 'multiformats/bases/base64'
10
+ import * as dagPb from '@ipld/dag-pb'
11
+ import {
12
+ carBytes,
13
+ makeIterable,
14
+ assert,
15
+ goCarV2Bytes,
16
+ goCarV2Roots,
17
+ goCarV2Index,
18
+ goCarV2Contents
19
+ } from './common.js'
9
20
  import {
10
21
  verifyRoots,
11
22
  verifyHas,
@@ -13,6 +24,8 @@ import {
13
24
  verifyBlocks,
14
25
  verifyCids
15
26
  } from './verify-store-reader.js'
27
+ import { data as fixtures } from './fixtures.js'
28
+ import { expectations as fixtureExpectations } from './fixtures-expectations.js'
16
29
 
17
30
  describe('CarReader fromBytes()', () => {
18
31
  it('complete', async () => {
@@ -48,6 +61,30 @@ describe('CarReader fromBytes()', () => {
48
61
  })
49
62
  })
50
63
 
64
+ it('v2 complete', async () => {
65
+ const reader = await CarReader.fromBytes(goCarV2Bytes)
66
+ const roots = await reader.getRoots()
67
+ assert.strictEqual(roots.length, 1)
68
+ assert.ok(goCarV2Roots[0].equals(roots[0]))
69
+ assert.strictEqual(reader.version, 2)
70
+ for (const { cid } of goCarV2Index) {
71
+ const block = await reader.get(cid)
72
+ assert.isDefined(block)
73
+ if (block) {
74
+ assert.ok(cid.equals(block.cid))
75
+ let content
76
+ if (cid.code === dagPb.code) {
77
+ content = dagPb.decode(block.bytes)
78
+ } else if (cid.code === 85) { // raw
79
+ content = new TextDecoder().decode(block.bytes)
80
+ } else {
81
+ assert.fail('Unexpected codec')
82
+ }
83
+ assert.deepStrictEqual(content, goCarV2Contents[cid.toString()])
84
+ }
85
+ }
86
+ })
87
+
51
88
  it('decode error - trailing null bytes', async () => {
52
89
  const bytes = new Uint8Array(carBytes.length + 5)
53
90
  bytes.set(carBytes)
@@ -149,4 +186,60 @@ describe('CarReader fromIterable()', () => {
149
186
  message: 'Unexpected end of data'
150
187
  })
151
188
  })
189
+
190
+ it('v2 decode error - truncated', async () => {
191
+ const bytes = goCarV2Bytes.slice()
192
+ const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)
193
+ // dataSize is an 64-bit uint at byte offset 35 from the begining, we're shortening it
194
+ // by 10 to simulate a premature end of CARv1 content
195
+ dv.setBigUint64(35, BigInt(448 - 10), true)
196
+ await assert.isRejected(CarReader.fromIterable(makeIterable(bytes, 64)), {
197
+ name: 'Error',
198
+ message: 'Unexpected end of data'
199
+ })
200
+ })
201
+ })
202
+
203
+ describe('Shared fixtures', () => {
204
+ describe('Header', () => {
205
+ for (const [name, { version: expectedVersion, err: expectedError }] of Object.entries(fixtureExpectations)) {
206
+ it(name, async () => {
207
+ const data = base64.baseDecode(fixtures[name])
208
+ let header
209
+ try {
210
+ header = await readHeader(bytesReader(data))
211
+ } catch (err) {
212
+ if (expectedError != null) {
213
+ assert.equal(err.message, expectedError)
214
+ return
215
+ }
216
+ assert.ifError(err)
217
+ }
218
+ if (expectedError != null) {
219
+ assert.fail(`Expected error: ${expectedError}`)
220
+ }
221
+ assert.isDefined(header, 'did not decode header')
222
+ if (expectedVersion != null && header != null) {
223
+ assert.strictEqual(header.version, expectedVersion)
224
+ }
225
+ })
226
+ }
227
+ })
228
+
229
+ describe('Contents', () => {
230
+ for (const [name, { cids: expectedCids }] of Object.entries(fixtureExpectations)) {
231
+ if (expectedCids == null) {
232
+ continue
233
+ }
234
+ it(name, async () => {
235
+ const data = base64.baseDecode(fixtures[name])
236
+ const reader = await CarReader.fromBytes(data)
237
+ let i = 0
238
+ for await (const cid of reader.cids()) {
239
+ assert.strictEqual(cid.toString(), expectedCids[i++])
240
+ }
241
+ assert.strictEqual(i, expectedCids.length)
242
+ })
243
+ }
244
+ })
152
245
  })
@@ -265,9 +265,9 @@ describe('CarWriter', () => {
265
265
  const pbBytes = await append(1)
266
266
  const cborBytes = await append(2)
267
267
 
268
- assert(rawBytes.length > 0)
269
- assert(pbBytes.length > 0)
270
- assert(cborBytes.length > 0)
268
+ assert.ok(rawBytes.length > 0)
269
+ assert.ok(pbBytes.length > 0)
270
+ assert.ok(cborBytes.length > 0)
271
271
 
272
272
  const reassembled = concatBytes([headerBytes, rawBytes, pbBytes, cborBytes])
273
273
 
package/tsconfig.json CHANGED
@@ -31,10 +31,12 @@
31
31
  "paths": {
32
32
  "@ipld/car": [ "car.js", "car-browser.js", "lib/" ],
33
33
  "@ipld/car/writer": [ "./lib/writer.js" ],
34
+ "@ipld/car/buffer-writer": ["./lib/buffer-writer.js"],
34
35
  "@ipld/car/reader": [ "./lib/reader.js" ],
35
36
  "@ipld/car/indexed-reader": [ "./lib/indexed-reader.js" ],
36
37
  "@ipld/car/iterator": [ "./lib/iterator.js" ],
37
- "@ipld/car/indexer": [ "./lib/indexer.js" ]
38
+ "@ipld/car/indexer": [ "./lib/indexer.js" ],
39
+ "@ipld/car/decoder": [ "./lib/decoder.js" ],
38
40
  }
39
41
  },
40
42
  "exclude": [
package/types/api.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { CID } from 'multiformats/cid';
2
+ export type { CID };
2
3
  export declare type Block = {
3
4
  cid: CID;
4
5
  bytes: Uint8Array;
@@ -30,6 +31,21 @@ export interface BlockWriter {
30
31
  put(block: Block): Promise<void>;
31
32
  close(): Promise<void>;
32
33
  }
34
+ export interface CarBufferWriter {
35
+ addRoot(root: CID, options?: {
36
+ resize?: boolean;
37
+ }): CarBufferWriter;
38
+ write(block: Block): CarBufferWriter;
39
+ close(options?: {
40
+ resize?: boolean;
41
+ }): Uint8Array;
42
+ }
43
+ export interface CarBufferWriterOptions {
44
+ roots?: CID[];
45
+ byteOffset?: number;
46
+ byteLength?: number;
47
+ headerSize?: number;
48
+ }
33
49
  export interface WriterChannel {
34
50
  writer: BlockWriter;
35
51
  out: AsyncIterable<Uint8Array>;
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAItC,oBAAY,KAAK,GAAG;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAA;AAEnD,oBAAY,WAAW,GAAG;IACxB,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,oBAAY,UAAU,GAAG,WAAW,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,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,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
+ {"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"}
@@ -0,0 +1,86 @@
1
+ export function addRoot(writer: CarBufferWriter, root: CID, { resize }?: {
2
+ resize?: boolean | undefined;
3
+ } | undefined): void;
4
+ export function blockLength({ cid, bytes }: Block): number;
5
+ export function addBlock(writer: CarBufferWriter, { cid, bytes }: Block): void;
6
+ export function close(writer: CarBufferWriter, { resize }?: {
7
+ resize?: boolean | undefined;
8
+ } | undefined): Uint8Array;
9
+ export function resizeHeader(writer: CarBufferWriter, byteLength: number): void;
10
+ export function calculateHeaderLength(rootLengths: number[]): number;
11
+ export function headerLength({ roots }: {
12
+ roots: CID[];
13
+ }): number;
14
+ export function estimateHeaderLength(rootCount: number, rootByteLength?: number | undefined): number;
15
+ export function createWriter(buffer: ArrayBuffer, { roots, byteOffset, byteLength, headerSize }?: {
16
+ roots?: import("multiformats/cid").CID[] | undefined;
17
+ byteOffset?: number | undefined;
18
+ byteLength?: number | undefined;
19
+ headerSize?: number | undefined;
20
+ } | undefined): CarBufferWriter;
21
+ export type CID = import('../api').CID;
22
+ export type Block = import('../api').Block;
23
+ export type Writer = import('../api').CarBufferWriter;
24
+ export type Options = import('../api').CarBufferWriterOptions;
25
+ export type CarEncoder = import('./coding').CarEncoder;
26
+ /**
27
+ * @typedef {import('../api').CID} CID
28
+ * @typedef {import('../api').Block} Block
29
+ * @typedef {import('../api').CarBufferWriter} Writer
30
+ * @typedef {import('../api').CarBufferWriterOptions} Options
31
+ * @typedef {import('./coding').CarEncoder} CarEncoder
32
+ */
33
+ /**
34
+ * A simple CAR writer that writes to a pre-allocated buffer.
35
+ *
36
+ * @class
37
+ * @name CarBufferWriter
38
+ * @implements {Writer}
39
+ */
40
+ declare class CarBufferWriter implements Writer {
41
+ /**
42
+ * @param {Uint8Array} bytes
43
+ * @param {number} headerSize
44
+ */
45
+ constructor(bytes: Uint8Array, headerSize: number);
46
+ /** @readonly */
47
+ readonly bytes: Uint8Array;
48
+ byteOffset: number;
49
+ /**
50
+ * @readonly
51
+ * @type {CID[]}
52
+ */
53
+ readonly roots: CID[];
54
+ headerSize: number;
55
+ /**
56
+ * Add a root to this writer, to be used to create a header when the CAR is
57
+ * finalized with {@link CarBufferWriter.close `close()`}
58
+ *
59
+ * @param {CID} root
60
+ * @param {{resize?:boolean}} [options]
61
+ * @returns {CarBufferWriter}
62
+ */
63
+ addRoot(root: CID, options?: {
64
+ resize?: boolean | undefined;
65
+ } | undefined): CarBufferWriter;
66
+ /**
67
+ * Write a `Block` (a `{ cid:CID, bytes:Uint8Array }` pair) to the archive.
68
+ * Throws if there is not enough capacity.
69
+ *
70
+ * @param {Block} block A `{ cid:CID, bytes:Uint8Array }` pair.
71
+ * @returns {CarBufferWriter}
72
+ */
73
+ write(block: Block): CarBufferWriter;
74
+ /**
75
+ * Finalize the CAR and return it as a `Uint8Array`.
76
+ *
77
+ * @param {object} [options]
78
+ * @param {boolean} [options.resize]
79
+ * @returns {Uint8Array}
80
+ */
81
+ close(options?: {
82
+ resize?: boolean | undefined;
83
+ } | undefined): Uint8Array;
84
+ }
85
+ export {};
86
+ //# sourceMappingURL=buffer-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer-writer.d.ts","sourceRoot":"","sources":["../../lib/buffer-writer.js"],"names":[],"mappings":"AAgFO,gCAJI,eAAe,QACf,GAAG;;qBA0Bb;AAUM,4CAHI,KAAK,GACH,MAAM,CAKlB;AAMM,iCAHI,eAAe,kBACf,KAAK,QAYf;AAOM,8BAJI,eAAe;;2BA2BzB;AAMM,qCAHI,eAAe,cACf,MAAM,QAShB;AAqCM,mDAHI,MAAM,EAAE,GACN,MAAM,CAWlB;AAUM;IAHmB,KAAK,EAApB,GAAG,EAAE;IACH,MAAM,CAG4C;AAYxD,gDAJI,MAAM,wCAEJ,MAAM,CAG+C;AAuB3D,qCARI,WAAW;;;;;gBAMT,eAAe,CAmB3B;kBAvRY,OAAO,QAAQ,EAAE,GAAG;oBACpB,OAAO,QAAQ,EAAE,KAAK;qBACtB,OAAO,QAAQ,EAAE,eAAe;sBAChC,OAAO,QAAQ,EAAE,sBAAsB;yBACvC,OAAO,UAAU,EAAE,UAAU;AAL1C;;;;;;GAMG;AAEH;;;;;;GAMG;AACH;IACE;;;OAGG;IACH,mBAHW,UAAU,cACV,MAAM,EAahB;IAVC,gBAAgB;IAChB,2BAAkB;IAClB,mBAA4B;IAE5B;;;OAGG;IACH,gBAFU,GAAG,EAAE,CAEA;IACf,mBAA4B;IAG9B;;;;;;;OAOG;IACH,cAJW,GAAG;;oBAED,eAAe,CAK3B;IAED;;;;;;OAMG;IACH,aAHW,KAAK,GACH,eAAe,CAK3B;IAED;;;;;;OAMG;IACH;;oBAFa,UAAU,CAItB;CACF"}
@@ -13,12 +13,22 @@ export interface IteratorChannel<T> {
13
13
  writer: IteratorChannel_Writer<T>;
14
14
  iterator: AsyncIterator<T>;
15
15
  }
16
- export declare type CarHeader = {
17
- version: number;
16
+ export interface CarHeader {
17
+ version: 1;
18
18
  roots: CID[];
19
- };
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
+ }
20
30
  export interface CarDecoder {
21
- header(): Promise<CarHeader>;
31
+ header(): Promise<CarHeader | CarV2Header>;
22
32
  blocks(): AsyncGenerator<Block>;
23
33
  blocksIndex(): AsyncGenerator<BlockIndex>;
24
34
  }
@@ -1 +1 @@
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,oBAAY,SAAS,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,EAAE,CAAA;CAAE,CAAA;AAEzD,MAAM,WAAW,UAAU;IACzB,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,CAAA;IAE5B,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
+ {"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,19 +1,38 @@
1
1
  /**
2
+ * Reads header data from a `BytesReader`. The header may either be in the form
3
+ * of a `CarHeader` or `CarV2Header` depending on the CAR being read.
4
+ *
5
+ * @name async decoder.readHeader(reader)
2
6
  * @param {BytesReader} reader
3
- * @returns {Promise<CarHeader>}
7
+ * @param {number} [strictVersion]
8
+ * @returns {Promise<CarHeader|CarV2Header>}
4
9
  */
5
- export function readHeader(reader: BytesReader): Promise<CarHeader>;
10
+ export function readHeader(reader: BytesReader, strictVersion?: number | undefined): Promise<CarHeader | CarV2Header>;
6
11
  /**
12
+ * Reads the leading data of an individual block from CAR data from a
13
+ * `BytesReader`. Returns a `BlockHeader` object which contains
14
+ * `{ cid, length, blockLength }` which can be used to either index the block
15
+ * or read the block binary data.
16
+ *
17
+ * @name async decoder.readBlockHead(reader)
7
18
  * @param {BytesReader} reader
8
19
  * @returns {Promise<BlockHeader>}
9
20
  */
10
21
  export function readBlockHead(reader: BytesReader): Promise<BlockHeader>;
11
22
  /**
23
+ * Creates a `CarDecoder` from a `BytesReader`. The `CarDecoder` is as async
24
+ * interface that will consume the bytes from the `BytesReader` to yield a
25
+ * `header()` and either `blocks()` or `blocksIndex()` data.
26
+ *
27
+ * @name decoder.createDecoder(reader)
12
28
  * @param {BytesReader} reader
13
29
  * @returns {CarDecoder}
14
30
  */
15
31
  export function createDecoder(reader: BytesReader): CarDecoder;
16
32
  /**
33
+ * Creates a `BytesReader` from a `Uint8Array`.
34
+ *
35
+ * @name decoder.bytesReader(bytes)
17
36
  * @param {Uint8Array} bytes
18
37
  * @returns {BytesReader}
19
38
  */
@@ -28,14 +47,31 @@ export function bytesReader(bytes: Uint8Array): BytesReader;
28
47
  */
29
48
  export function chunkReader(readChunk: () => Promise<Uint8Array | null>): BytesReader;
30
49
  /**
50
+ * Creates a `BytesReader` from an `AsyncIterable<Uint8Array>`, which allows for
51
+ * consumption of CAR data from a streaming source.
52
+ *
53
+ * @name decoder.asyncIterableReader(asyncIterable)
31
54
  * @param {AsyncIterable<Uint8Array>} asyncIterable
32
55
  * @returns {BytesReader}
33
56
  */
34
57
  export function asyncIterableReader(asyncIterable: AsyncIterable<Uint8Array>): BytesReader;
58
+ /**
59
+ * Wraps a `BytesReader` in a limiting `BytesReader` which limits maximum read
60
+ * to `byteLimit` bytes. It _does not_ update `pos` of the original
61
+ * `BytesReader`.
62
+ *
63
+ * @name decoder.limitReader(reader, byteLimit)
64
+ * @param {BytesReader} reader
65
+ * @param {number} byteLimit
66
+ * @returns {BytesReader}
67
+ */
68
+ export function limitReader(reader: BytesReader, byteLimit: number): BytesReader;
35
69
  export type Block = import('../api').Block;
36
70
  export type BlockHeader = import('../api').BlockHeader;
37
71
  export type BlockIndex = import('../api').BlockIndex;
38
72
  export type BytesReader = import('./coding').BytesReader;
39
73
  export type CarHeader = import('./coding').CarHeader;
74
+ export type CarV2Header = import('./coding').CarV2Header;
75
+ export type CarV2FixedHeader = import('./coding').CarV2FixedHeader;
40
76
  export type CarDecoder = import('./coding').CarDecoder;
41
77
  //# sourceMappingURL=decoder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../lib/decoder.js"],"names":[],"mappings":"AAiCA;;;GAGG;AACH,mCAHW,WAAW,GACT,QAAQ,SAAS,CAAC,CA4B9B;AAkDD;;;GAGG;AACH,sCAHW,WAAW,GACT,QAAQ,WAAW,CAAC,CAiBhC;AA6BD;;;GAGG;AACH,sCAHW,WAAW,GACT,UAAU,CAsBtB;AAED;;;GAGG;AACH,mCAHW,UAAU,GACR,WAAW,CA8BvB;AAED;;;;;;;GAOG;AACH,uCAHW,MAAM,QAAQ,UAAU,GAAC,IAAI,CAAC,GAC5B,WAAW,CAsEvB;AAED;;;GAGG;AACH,mDAHW,cAAc,UAAU,CAAC,GACvB,WAAW,CAgBvB;oBAvTY,OAAO,QAAQ,EAAE,KAAK;0BACtB,OAAO,QAAQ,EAAE,WAAW;yBAC5B,OAAO,QAAQ,EAAE,UAAU;0BAC3B,OAAO,UAAU,EAAE,WAAW;wBAC9B,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU"}
1
+ {"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../lib/decoder.js"],"names":[],"mappings":"AAmEA;;;;;;;;GAQG;AACH,mCAJW,WAAW,uCAET,QAAQ,SAAS,GAAC,WAAW,CAAC,CAgC1C;AAkDD;;;;;;;;;GASG;AACH,sCAHW,WAAW,GACT,QAAQ,WAAW,CAAC,CAiBhC;AA6BD;;;;;;;;GAQG;AACH,sCAHW,WAAW,GACT,UAAU,CA+BtB;AAED;;;;;;GAMG;AACH,mCAHW,UAAU,GACR,WAAW,CA8BvB;AAED;;;;;;;GAOG;AACH,uCAHW,MAAM,QAAQ,UAAU,GAAC,IAAI,CAAC,GAC5B,WAAW,CAsEvB;AAED;;;;;;;GAOG;AACH,mDAHW,cAAc,UAAU,CAAC,GACvB,WAAW,CAgBvB;AAED;;;;;;;;;GASG;AACH,oCAJW,WAAW,aACX,MAAM,GACJ,WAAW,CAoCvB;oBA1aY,OAAO,QAAQ,EAAE,KAAK;0BACtB,OAAO,QAAQ,EAAE,WAAW;yBAC5B,OAAO,QAAQ,EAAE,UAAU;0BAC3B,OAAO,UAAU,EAAE,WAAW;wBAC9B,OAAO,UAAU,EAAE,SAAS;0BAC5B,OAAO,UAAU,EAAE,WAAW;+BAC9B,OAAO,UAAU,EAAE,gBAAgB;yBACnC,OAAO,UAAU,EAAE,UAAU"}
@@ -0,0 +1,2 @@
1
+ export function CarHeader(obj: any): boolean;
2
+ //# sourceMappingURL=header-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-validator.d.ts","sourceRoot":"","sources":["../../lib/header-validator.js"],"names":[],"mappings":"AAsB4B,+BAAK,GAAG,GAAG,OAAO,CAAA"}
@@ -1,8 +1,16 @@
1
+ /**
2
+ * @private
3
+ * @param {BytesReader} reader
4
+ * @returns {Promise<CarReader>}
5
+ */
6
+ export function decodeReaderComplete(reader: BytesReader): Promise<CarReader>;
1
7
  /**
2
8
  * @typedef {import('multiformats').CID} CID
3
9
  * @typedef {import('../api').Block} Block
4
10
  * @typedef {import('../api').CarReader} CarReaderIface
5
11
  * @typedef {import('./coding').BytesReader} BytesReader
12
+ * @typedef {import('./coding').CarHeader} CarHeader
13
+ * @typedef {import('./coding').CarV2Header} CarV2Header
6
14
  */
7
15
  /**
8
16
  * Provides blockstore-like access to a CAR.
@@ -23,7 +31,7 @@
23
31
  * @class
24
32
  * @implements {CarReaderIface}
25
33
  * @property {number} version The version number of the CAR referenced by this
26
- * reader (should be `1`).
34
+ * reader (should be `1` or `2`).
27
35
  */
28
36
  export class CarReader implements CarReaderIface {
29
37
  /**
@@ -57,13 +65,11 @@ export class CarReader implements CarReaderIface {
57
65
  static fromIterable(asyncIterable: AsyncIterable<Uint8Array>): Promise<CarReader>;
58
66
  /**
59
67
  * @constructs CarReader
60
- * @param {number} version
61
- * @param {CID[]} roots
68
+ * @param {CarHeader|CarV2Header} header
62
69
  * @param {Block[]} blocks
63
70
  */
64
- constructor(version: number, roots: CID[], blocks: Block[]);
65
- _version: number;
66
- _roots: import("multiformats").CID[];
71
+ constructor(header: CarHeader | CarV2Header, blocks: Block[]);
72
+ _header: import("./coding").CarHeader | import("./coding").CarV2Header;
67
73
  _blocks: import("../api").Block[];
68
74
  _keys: string[];
69
75
  /**
@@ -71,7 +77,7 @@ export class CarReader implements CarReaderIface {
71
77
  * @memberof CarReader
72
78
  * @instance
73
79
  */
74
- get version(): number;
80
+ get version(): 1 | 2;
75
81
  /**
76
82
  * Get the list of roots defined by the CAR referenced by this reader. May be
77
83
  * zero or more `CID`s.
@@ -140,4 +146,6 @@ export type CID = import('multiformats').CID;
140
146
  export type Block = import('../api').Block;
141
147
  export type CarReaderIface = import('../api').CarReader;
142
148
  export type BytesReader = import('./coding').BytesReader;
149
+ export type CarHeader = import('./coding').CarHeader;
150
+ export type CarV2Header = import('./coding').CarV2Header;
143
151
  //# sourceMappingURL=reader-browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reader-browser.d.ts","sourceRoot":"","sources":["../../lib/reader-browser.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IA+GE;;;;;;;;;;OAUG;IACH,wBAHW,UAAU,GACR,QAAQ,SAAS,CAAC,CAS9B;IAED;;;;;;;;;;;;;;;OAeG;IACH,mCAHW,cAAc,UAAU,CAAC,GACvB,QAAQ,SAAS,CAAC,CAS9B;IAzJD;;;;;OAKG;IACH,qBAJW,MAAM,SACN,GAAG,EAAE,UACL,KAAK,EAAE,EAOjB;IAJC,iBAAuB;IACvB,qCAAmB;IACnB,kCAAqB;IACrB,gBAAgD;IAGlD;;;;OAIG;IACH,sBAEC;IAED;;;;;;;;;OASG;IACH,YAFa,QAAQ,GAAG,EAAE,CAAC,CAM1B;IAED;;;;;;;;;;OAUG;IACH,SAHW,GAAG,GACD,QAAQ,OAAO,CAAC,CAM5B;IAED;;;;;;;;;;;;OAYG;IACH,SAHW,GAAG,GACD,QAAQ,KAAK,GAAG,SAAS,CAAC,CAOtC;IAED;;;;;;;;;;;OAWG;IACH,UAFa,eAAe,KAAK,CAAC,CAMjC;IAED;;;;;;;;;;OAUG;IACH,QAFa,eAAe,GAAG,CAAC,CAM/B;CA8CF;AAoBD,6BAA6B;kBA1MhB,OAAO,cAAc,EAAE,GAAG;oBAC1B,OAAO,QAAQ,EAAE,KAAK;6BACtB,OAAO,QAAQ,EAAE,SAAS;0BAC1B,OAAO,UAAU,EAAE,WAAW"}
1
+ {"version":3,"file":"reader-browser.d.ts","sourceRoot":"","sources":["../../lib/reader-browser.js"],"names":[],"mappings":"AA2LA;;;;GAIG;AACH,6CAHW,WAAW,GACT,QAAQ,SAAS,CAAC,CAa9B;AAzMD;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IA6GE;;;;;;;;;;OAUG;IACH,wBAHW,UAAU,GACR,QAAQ,SAAS,CAAC,CAS9B;IAED;;;;;;;;;;;;;;;OAeG;IACH,mCAHW,cAAc,UAAU,CAAC,GACvB,QAAQ,SAAS,CAAC,CAS9B;IAvJD;;;;OAIG;IACH,oBAHW,SAAS,GAAC,WAAW,UACrB,KAAK,EAAE,EAMjB;IAHC,uEAAqB;IACrB,kCAAqB;IACrB,gBAAgD;IAGlD;;;;OAIG;IACH,qBAEC;IAED;;;;;;;;;OASG;IACH,YAFa,QAAQ,GAAG,EAAE,CAAC,CAM1B;IAED;;;;;;;;;;OAUG;IACH,SAHW,GAAG,GACD,QAAQ,OAAO,CAAC,CAM5B;IAED;;;;;;;;;;;;OAYG;IACH,SAHW,GAAG,GACD,QAAQ,KAAK,GAAG,SAAS,CAAC,CAOtC;IAED;;;;;;;;;;;OAWG;IACH,UAFa,eAAe,KAAK,CAAC,CAMjC;IAED;;;;;;;;;;OAUG;IACH,QAFa,eAAe,GAAG,CAAC,CAM/B;CA8CF;AAoBD,6BAA6B;kBA1MhB,OAAO,cAAc,EAAE,GAAG;oBAC1B,OAAO,QAAQ,EAAE,KAAK;6BACtB,OAAO,QAAQ,EAAE,SAAS;0BAC1B,OAAO,UAAU,EAAE,WAAW;wBAC9B,OAAO,UAAU,EAAE,SAAS;0BAC5B,OAAO,UAAU,EAAE,WAAW"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=_fixtures_to_js.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_fixtures_to_js.d.mts","sourceRoot":"","sources":["../../test/_fixtures_to_js.mjs"],"names":[],"mappings":""}
@@ -37,6 +37,19 @@ export const goCarIndex: {
37
37
  blockOffset: number;
38
38
  blockLength: number;
39
39
  }[];
40
+ export const goCarV2Bytes: Uint8Array;
41
+ export const goCarV2Roots: CID[];
42
+ export const goCarV2Index: {
43
+ blockLength: number;
44
+ blockOffset: number;
45
+ cid: CID;
46
+ length: number;
47
+ offset: number;
48
+ }[];
49
+ /** @type {{[k in string]: any}} */
50
+ export const goCarV2Contents: {
51
+ [x: string]: any;
52
+ };
40
53
  /**
41
54
  * @typedef {import('../api').Block} Block
42
55
  * @typedef {import('@ipld/dag-pb').PBNode} PBNode
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../test/common.js"],"names":[],"mappings":"oBAUa,OAAO,QAAQ,EAAE,KAAK;qBACtB,OAAO,cAAc,EAAE,MAAM;AAmC1C;;;;;GAKG;AACH,gCALW,GAAG;UACI,MAAM;kBAAgB,GAAG,KAAK,UAAU;aAC/C,OAAO,kBAAkB,EAAE,UAAU,GACnC,QAAQ,SAAS,GAAG;IAAE,MAAM,EAAE,GAAG,CAAA;CAAE,CAAC,CAOhD;;AAED;;;;;;GAiDC;AAED;;;;GAIG;AACH,mCAJW,UAAU,aACV,MAAM,GACJ,cAAc,UAAU,CAAC,CAkBrC;AAvFD,yBAAuF;AAyFvF,kCAAw7C;AAEx7C,oCAA07C;AAE17C,+BAGC;AAED;;;;;;IASC;AA9ID;;;GAGG;AAEH;;GAEG;AACH;IACE;;;;OAIG;IACH,mBAJW,UAAU,OACV,GAAG,UACH,GAAG,EAMb;IAHC,kBAAkB;IAClB,SAAc;IACd,YAAoB;CAEvB"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../test/common.js"],"names":[],"mappings":"oBAUa,OAAO,QAAQ,EAAE,KAAK;qBACtB,OAAO,cAAc,EAAE,MAAM;AAmC1C;;;;;GAKG;AACH,gCALW,GAAG;UACI,MAAM;kBAAgB,GAAG,KAAK,UAAU;aAC/C,OAAO,kBAAkB,EAAE,UAAU,GACnC,QAAQ,SAAS,GAAG;IAAE,MAAM,EAAE,GAAG,CAAA;CAAE,CAAC,CAOhD;;AAED;;;;;;GAiDC;AAED;;;;GAIG;AACH,mCAJW,UAAU,aACV,MAAM,GACJ,cAAc,UAAU,CAAC,CAkBrC;AAvFD,yBAAuF;AAyFvF,kCAAw7C;AAGx7C,oCAA07C;AAC17C,+BAGC;AACD;;;;;;IASC;AAED,sCAA47C;AAC57C,iCAAkF;AAClF;;;;;;IAMC;AACD,mCAAmC;AACnC;;EA+BC;AAxLD;;;GAGG;AAEH;;GAEG;AACH;IACE;;;;OAIG;IACH,mBAJW,UAAU,OACV,GAAG,UACH,GAAG,EAMb;IAHC,kBAAkB;IAClB,SAAc;IACd,YAAoB;CAEvB"}
@@ -0,0 +1,63 @@
1
+ export const expectations: {
2
+ 'sample-v1.car': {
3
+ version: number;
4
+ err: null;
5
+ cids: string[];
6
+ };
7
+ 'sample-v1-noidentity.car': {
8
+ version: number;
9
+ err: null;
10
+ cids: string[];
11
+ };
12
+ 'sample-unixfs-v2.car': {
13
+ version: number;
14
+ err: null;
15
+ cids: string[];
16
+ };
17
+ 'sample-rw-bs-v2.car': {
18
+ version: number;
19
+ err: null;
20
+ cids: string[];
21
+ };
22
+ 'sample-v1-with-zero-len-section.car': {
23
+ version: number;
24
+ err: null;
25
+ cids: null;
26
+ };
27
+ 'sample-v1-with-zero-len-section2.car': {
28
+ version: number;
29
+ err: null;
30
+ cids: null;
31
+ };
32
+ 'sample-wrapped-v2.car': {
33
+ version: number;
34
+ err: null;
35
+ cids: string[];
36
+ };
37
+ 'sample-rootless-v42.car': {
38
+ version: null;
39
+ err: string;
40
+ cids: null;
41
+ };
42
+ 'sample-v1-tailing-corrupt-section.car': {
43
+ version: number;
44
+ err: null;
45
+ cids: null;
46
+ };
47
+ 'sample-v2-corrupt-data-and-index.car': {
48
+ version: number;
49
+ err: string;
50
+ cids: null;
51
+ };
52
+ 'sample-corrupt-pragma.car': {
53
+ version: null;
54
+ err: string;
55
+ cids: null;
56
+ };
57
+ 'sample-v2-indexless.car': {
58
+ version: number;
59
+ err: null;
60
+ cids: string[];
61
+ };
62
+ };
63
+ //# sourceMappingURL=fixtures-expectations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures-expectations.d.ts","sourceRoot":"","sources":["../../test/fixtures-expectations.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuqIC"}
@@ -0,0 +1,3 @@
1
+ /** @type {Record<string, string>} */
2
+ export const data: Record<string, string>;
3
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../test/fixtures.js"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,mBADW,OAAO,MAAM,EAAE,MAAM,CAAC,CAgBhC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-buffer-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-buffer-writer.d.ts","sourceRoot":"","sources":["../../test/test-buffer-writer.js"],"names":[],"mappings":""}