@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.
- package/README.md +183 -2
- package/api.ts +22 -4
- package/buffer-writer +1 -0
- package/cjs/browser-test/common.js +78 -3
- package/cjs/browser-test/node-test-large.js +8 -8
- package/cjs/browser-test/test-buffer-writer.js +330 -0
- package/cjs/browser-test/test-errors.js +57 -34
- package/cjs/browser-test/test-indexer.js +12 -0
- package/cjs/browser-test/test-reader.js +83 -0
- package/cjs/browser-test/test-writer.js +3 -3
- package/cjs/lib/buffer-writer.js +161 -0
- package/cjs/lib/decoder.js +72 -15
- package/cjs/lib/encoder.js +2 -2
- package/cjs/lib/header-validator.js +29 -0
- package/cjs/lib/reader-browser.js +7 -7
- package/cjs/lib/writer-browser.js +1 -1
- package/cjs/node-test/common.js +78 -3
- package/cjs/node-test/node-test-large.js +8 -8
- package/cjs/node-test/test-buffer-writer.js +330 -0
- package/cjs/node-test/test-errors.js +57 -34
- package/cjs/node-test/test-indexer.js +12 -0
- package/cjs/node-test/test-reader.js +83 -0
- package/cjs/node-test/test-writer.js +3 -3
- package/esm/browser-test/common.js +76 -1
- package/esm/browser-test/test-buffer-writer.js +311 -0
- package/esm/browser-test/test-errors.js +57 -33
- package/esm/browser-test/test-indexer.js +15 -0
- package/esm/browser-test/test-reader.js +90 -1
- package/esm/browser-test/test-writer.js +3 -3
- package/esm/lib/buffer-writer.js +126 -0
- package/esm/lib/decoder.js +69 -13
- package/esm/lib/header-validator.js +23 -0
- package/esm/lib/reader-browser.js +7 -8
- package/esm/lib/writer-browser.js +1 -1
- package/esm/node-test/common.js +76 -1
- package/esm/node-test/test-buffer-writer.js +311 -0
- package/esm/node-test/test-errors.js +57 -33
- package/esm/node-test/test-indexer.js +15 -0
- package/esm/node-test/test-reader.js +90 -1
- package/esm/node-test/test-writer.js +3 -3
- package/examples/car-to-fixture.js +1 -4
- package/examples/dump-index.js +24 -0
- package/examples/test-examples.js +33 -0
- package/lib/buffer-writer.js +286 -0
- package/lib/coding.ts +17 -2
- package/lib/decoder.js +130 -14
- package/lib/header-validator.js +33 -0
- package/lib/header.ipldsch +6 -0
- package/lib/reader-browser.js +11 -11
- package/lib/writer-browser.js +1 -1
- package/package.json +16 -6
- package/test/_fixtures_to_js.mjs +24 -0
- package/test/common.js +49 -3
- package/test/go.carv2 +0 -0
- package/test/test-buffer-writer.js +256 -0
- package/test/test-errors.js +52 -30
- package/test/test-indexer.js +24 -1
- package/test/test-reader.js +94 -1
- package/test/test-writer.js +3 -3
- package/tsconfig.json +3 -1
- package/types/api.d.ts +16 -0
- package/types/api.d.ts.map +1 -1
- package/types/lib/buffer-writer.d.ts +86 -0
- package/types/lib/buffer-writer.d.ts.map +1 -0
- package/types/lib/coding.d.ts +14 -4
- package/types/lib/coding.d.ts.map +1 -1
- package/types/lib/decoder.d.ts +38 -2
- package/types/lib/decoder.d.ts.map +1 -1
- package/types/lib/header-validator.d.ts +2 -0
- package/types/lib/header-validator.d.ts.map +1 -0
- package/types/lib/reader-browser.d.ts +15 -7
- package/types/lib/reader-browser.d.ts.map +1 -1
- package/types/test/_fixtures_to_js.d.mts +3 -0
- package/types/test/_fixtures_to_js.d.mts.map +1 -0
- package/types/test/common.d.ts +13 -0
- package/types/test/common.d.ts.map +1 -1
- package/types/test/fixtures-expectations.d.ts +63 -0
- package/types/test/fixtures-expectations.d.ts.map +1 -0
- package/types/test/fixtures.d.ts +3 -0
- package/types/test/fixtures.d.ts.map +1 -0
- package/types/test/test-buffer-writer.d.ts +2 -0
- package/types/test/test-buffer-writer.d.ts.map +1 -0
package/README.md
CHANGED
|
@@ -240,6 +240,21 @@ be directly fed to a
|
|
|
240
240
|
* [`async CarWriter.createAppender()`](#CarWriter__createAppender)
|
|
241
241
|
* [`async CarWriter.updateRootsInBytes(bytes, roots)`](#CarWriter__updateRootsInBytes)
|
|
242
242
|
* [`async CarWriter.updateRootsInFile(fd, roots)`](#CarWriter__updateRootsInFile)
|
|
243
|
+
* [`class CarBufferWriter`](#CarBufferWriter)
|
|
244
|
+
* [`CarBufferWriter#addRoot(root, options)`](#CarBufferWriter_addRoot)
|
|
245
|
+
* [`CarBufferWriter#write(block)`](#CarBufferWriter_write)
|
|
246
|
+
* [`CarBufferWriter#close([options])`](#CarBufferWriter_close)
|
|
247
|
+
* [`CarBufferWriter.blockLength(Block)`](#CarBufferWriter__blockLength__Block__)
|
|
248
|
+
* [`CarBufferWriter.calculateHeaderLength(rootLengths)`](#CarBufferWriter__calculateHeaderLength__rootLengths__)
|
|
249
|
+
* [`CarBufferWriter.headerLength({ roots })`](#CarBufferWriter__headerLength______roots______)
|
|
250
|
+
* [`CarBufferWriter.estimateHeaderLength(rootCount[, rootByteLength])`](#CarBufferWriter__estimateHeaderLength__rootCount______rootByteLength____)
|
|
251
|
+
* [`CarBufferWriter.createWriter(buffer[, options])`](#CarBufferWriter__createWriter__buffer______options____)
|
|
252
|
+
* [`async decoder.readHeader(reader)`](#async__decoder__readHeader__reader__)
|
|
253
|
+
* [`async decoder.readBlockHead(reader)`](#async__decoder__readBlockHead__reader__)
|
|
254
|
+
* [`decoder.createDecoder(reader)`](#decoder__createDecoder__reader__)
|
|
255
|
+
* [`decoder.bytesReader(bytes)`](#decoder__bytesReader__bytes__)
|
|
256
|
+
* [`decoder.asyncIterableReader(asyncIterable)`](#decoder__asyncIterableReader__asyncIterable__)
|
|
257
|
+
* [`decoder.limitReader(reader, byteLimit)`](#decoder__limitReader__reader____byteLimit__)
|
|
243
258
|
|
|
244
259
|
<a name="CarReader"></a>
|
|
245
260
|
### `class CarReader`
|
|
@@ -247,7 +262,7 @@ be directly fed to a
|
|
|
247
262
|
Properties:
|
|
248
263
|
|
|
249
264
|
* `version` `(number)`: The version number of the CAR referenced by this
|
|
250
|
-
reader (should be `1`).
|
|
265
|
+
reader (should be `1` or `2`).
|
|
251
266
|
|
|
252
267
|
Provides blockstore-like access to a CAR.
|
|
253
268
|
|
|
@@ -748,7 +763,8 @@ upon successful modification.
|
|
|
748
763
|
|
|
749
764
|
Update the list of roots in the header of an existing CAR file. The first
|
|
750
765
|
argument must be a file descriptor for CAR file that is open in read and
|
|
751
|
-
write mode (not append).
|
|
766
|
+
write mode (not append), e.g. `fs.open` or `fs.promises.open` with `'r+'`
|
|
767
|
+
mode.
|
|
752
768
|
|
|
753
769
|
This operation is an _overwrite_, the total length of the CAR will not be
|
|
754
770
|
modified. A rejection will occur if the new header will not be the same
|
|
@@ -759,6 +775,171 @@ replaced encode as the same length as the new roots.
|
|
|
759
775
|
This function is **only available in Node.js** and not a browser
|
|
760
776
|
environment.
|
|
761
777
|
|
|
778
|
+
<a name="CarBufferWriter"></a>
|
|
779
|
+
### `class CarBufferWriter`
|
|
780
|
+
|
|
781
|
+
A simple CAR writer that writes to a pre-allocated buffer.
|
|
782
|
+
|
|
783
|
+
<a name="CarBufferWriter_addRoot"></a>
|
|
784
|
+
### `CarBufferWriter#addRoot(root, options)`
|
|
785
|
+
|
|
786
|
+
* `root` `(CID)`
|
|
787
|
+
* `options`
|
|
788
|
+
|
|
789
|
+
* Returns: `CarBufferWriter`
|
|
790
|
+
|
|
791
|
+
Add a root to this writer, to be used to create a header when the CAR is
|
|
792
|
+
finalized with [`close()`](#CarBufferWriter__close)
|
|
793
|
+
|
|
794
|
+
<a name="CarBufferWriter_write"></a>
|
|
795
|
+
### `CarBufferWriter#write(block)`
|
|
796
|
+
|
|
797
|
+
* `block` `(Block)`: A `{ cid:CID, bytes:Uint8Array }` pair.
|
|
798
|
+
|
|
799
|
+
* Returns: `CarBufferWriter`
|
|
800
|
+
|
|
801
|
+
Write a `Block` (a `{ cid:CID, bytes:Uint8Array }` pair) to the archive.
|
|
802
|
+
Throws if there is not enough capacity.
|
|
803
|
+
|
|
804
|
+
<a name="CarBufferWriter_close"></a>
|
|
805
|
+
### `CarBufferWriter#close([options])`
|
|
806
|
+
|
|
807
|
+
* `options` `(object, optional)`
|
|
808
|
+
* `options.resize` `(boolean, optional)`
|
|
809
|
+
|
|
810
|
+
* Returns: `Uint8Array`
|
|
811
|
+
|
|
812
|
+
Finalize the CAR and return it as a `Uint8Array`.
|
|
813
|
+
|
|
814
|
+
<a name="CarBufferWriter__blockLength__Block__"></a>
|
|
815
|
+
### `CarBufferWriter.blockLength(Block)`
|
|
816
|
+
|
|
817
|
+
* `block` `(Block)`
|
|
818
|
+
|
|
819
|
+
* Returns: `number`
|
|
820
|
+
|
|
821
|
+
Calculates number of bytes required for storing given block in CAR. Useful in
|
|
822
|
+
estimating size of an `ArrayBuffer` for the `CarBufferWriter`.
|
|
823
|
+
|
|
824
|
+
<a name="CarBufferWriter__calculateHeaderLength__rootLengths__"></a>
|
|
825
|
+
### `CarBufferWriter.calculateHeaderLength(rootLengths)`
|
|
826
|
+
|
|
827
|
+
* `rootLengths` `(number[])`
|
|
828
|
+
|
|
829
|
+
* Returns: `number`
|
|
830
|
+
|
|
831
|
+
Calculates header size given the array of byteLength for roots.
|
|
832
|
+
|
|
833
|
+
<a name="CarBufferWriter__headerLength______roots______"></a>
|
|
834
|
+
### `CarBufferWriter.headerLength({ roots })`
|
|
835
|
+
|
|
836
|
+
* `options` `(object)`
|
|
837
|
+
* `options.roots` `(CID[])`
|
|
838
|
+
|
|
839
|
+
* Returns: `number`
|
|
840
|
+
|
|
841
|
+
Calculates header size given the array of roots.
|
|
842
|
+
|
|
843
|
+
<a name="CarBufferWriter__estimateHeaderLength__rootCount______rootByteLength____"></a>
|
|
844
|
+
### `CarBufferWriter.estimateHeaderLength(rootCount[, rootByteLength])`
|
|
845
|
+
|
|
846
|
+
* `rootCount` `(number)`
|
|
847
|
+
* `rootByteLength` `(number, optional)`
|
|
848
|
+
|
|
849
|
+
* Returns: `number`
|
|
850
|
+
|
|
851
|
+
Estimates header size given a count of the roots and the expected byte length
|
|
852
|
+
of the root CIDs. The default length works for a standard CIDv1 with a
|
|
853
|
+
single-byte multihash code, such as SHA2-256 (i.e. the most common CIDv1).
|
|
854
|
+
|
|
855
|
+
<a name="CarBufferWriter__createWriter__buffer______options____"></a>
|
|
856
|
+
### `CarBufferWriter.createWriter(buffer[, options])`
|
|
857
|
+
|
|
858
|
+
* `buffer` `(ArrayBuffer)`
|
|
859
|
+
* `options` `(object, optional)`
|
|
860
|
+
* `options.roots` `(CID[], optional)`
|
|
861
|
+
* `options.byteOffset` `(number, optional)`
|
|
862
|
+
* `options.byteLength` `(number, optional)`
|
|
863
|
+
* `options.headerSize` `(number, optional)`
|
|
864
|
+
|
|
865
|
+
* Returns: `CarBufferWriter`
|
|
866
|
+
|
|
867
|
+
Creates synchronous CAR writer that can be used to encode blocks into a given
|
|
868
|
+
buffer. Optionally you could pass `byteOffset` and `byteLength` to specify a
|
|
869
|
+
range inside buffer to write into. If car file is going to have `roots` you
|
|
870
|
+
need to either pass them under `options.roots` (from which header size will
|
|
871
|
+
be calculated) or provide `options.headerSize` to allocate required space
|
|
872
|
+
in the buffer. You may also provide known `roots` and `headerSize` to
|
|
873
|
+
allocate space for the roots that may not be known ahead of time.
|
|
874
|
+
|
|
875
|
+
Note: Incorrect `headerSize` may lead to copying bytes inside a buffer
|
|
876
|
+
which will have a negative impact on performance.
|
|
877
|
+
|
|
878
|
+
<a name="async__decoder__readHeader__reader__"></a>
|
|
879
|
+
### `async decoder.readHeader(reader)`
|
|
880
|
+
|
|
881
|
+
* `reader` `(BytesReader)`
|
|
882
|
+
* `strictVersion` `(number, optional)`
|
|
883
|
+
|
|
884
|
+
* Returns: `Promise<(CarHeader|CarV2Header)>`
|
|
885
|
+
|
|
886
|
+
Reads header data from a `BytesReader`. The header may either be in the form
|
|
887
|
+
of a `CarHeader` or `CarV2Header` depending on the CAR being read.
|
|
888
|
+
|
|
889
|
+
<a name="async__decoder__readBlockHead__reader__"></a>
|
|
890
|
+
### `async decoder.readBlockHead(reader)`
|
|
891
|
+
|
|
892
|
+
* `reader` `(BytesReader)`
|
|
893
|
+
|
|
894
|
+
* Returns: `Promise<BlockHeader>`
|
|
895
|
+
|
|
896
|
+
Reads the leading data of an individual block from CAR data from a
|
|
897
|
+
`BytesReader`. Returns a `BlockHeader` object which contains
|
|
898
|
+
`{ cid, length, blockLength }` which can be used to either index the block
|
|
899
|
+
or read the block binary data.
|
|
900
|
+
|
|
901
|
+
<a name="decoder__createDecoder__reader__"></a>
|
|
902
|
+
### `decoder.createDecoder(reader)`
|
|
903
|
+
|
|
904
|
+
* `reader` `(BytesReader)`
|
|
905
|
+
|
|
906
|
+
* Returns: `CarDecoder`
|
|
907
|
+
|
|
908
|
+
Creates a `CarDecoder` from a `BytesReader`. The `CarDecoder` is as async
|
|
909
|
+
interface that will consume the bytes from the `BytesReader` to yield a
|
|
910
|
+
`header()` and either `blocks()` or `blocksIndex()` data.
|
|
911
|
+
|
|
912
|
+
<a name="decoder__bytesReader__bytes__"></a>
|
|
913
|
+
### `decoder.bytesReader(bytes)`
|
|
914
|
+
|
|
915
|
+
* `bytes` `(Uint8Array)`
|
|
916
|
+
|
|
917
|
+
* Returns: `BytesReader`
|
|
918
|
+
|
|
919
|
+
Creates a `BytesReader` from a `Uint8Array`.
|
|
920
|
+
|
|
921
|
+
<a name="decoder__asyncIterableReader__asyncIterable__"></a>
|
|
922
|
+
### `decoder.asyncIterableReader(asyncIterable)`
|
|
923
|
+
|
|
924
|
+
* `asyncIterable` `(AsyncIterable<Uint8Array>)`
|
|
925
|
+
|
|
926
|
+
* Returns: `BytesReader`
|
|
927
|
+
|
|
928
|
+
Creates a `BytesReader` from an `AsyncIterable<Uint8Array>`, which allows for
|
|
929
|
+
consumption of CAR data from a streaming source.
|
|
930
|
+
|
|
931
|
+
<a name="decoder__limitReader__reader____byteLimit__"></a>
|
|
932
|
+
### `decoder.limitReader(reader, byteLimit)`
|
|
933
|
+
|
|
934
|
+
* `reader` `(BytesReader)`
|
|
935
|
+
* `byteLimit` `(number)`
|
|
936
|
+
|
|
937
|
+
* Returns: `BytesReader`
|
|
938
|
+
|
|
939
|
+
Wraps a `BytesReader` in a limiting `BytesReader` which limits maximum read
|
|
940
|
+
to `byteLimit` bytes. It _does not_ update `pos` of the original
|
|
941
|
+
`BytesReader`.
|
|
942
|
+
|
|
762
943
|
## License
|
|
763
944
|
|
|
764
945
|
Licensed under either of
|
package/api.ts
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { CID } from 'multiformats/cid'
|
|
2
2
|
|
|
3
|
+
export type { CID }
|
|
3
4
|
/* Generic types for interfacing with block storage */
|
|
4
5
|
|
|
5
|
-
export type Block = {
|
|
6
|
+
export type Block = {
|
|
7
|
+
cid: CID
|
|
8
|
+
bytes: Uint8Array
|
|
9
|
+
}
|
|
6
10
|
|
|
7
11
|
export type BlockHeader = {
|
|
8
|
-
cid: CID
|
|
9
|
-
length: number
|
|
12
|
+
cid: CID
|
|
13
|
+
length: number
|
|
10
14
|
blockLength: number
|
|
11
15
|
}
|
|
12
16
|
|
|
13
17
|
export type BlockIndex = BlockHeader & {
|
|
14
|
-
offset: number
|
|
18
|
+
offset: number
|
|
15
19
|
blockOffset: number
|
|
16
20
|
}
|
|
17
21
|
|
|
@@ -36,6 +40,20 @@ export interface BlockWriter {
|
|
|
36
40
|
close(): Promise<void>
|
|
37
41
|
}
|
|
38
42
|
|
|
43
|
+
export interface CarBufferWriter {
|
|
44
|
+
addRoot(root:CID, options?:{ resize?: boolean }):CarBufferWriter
|
|
45
|
+
write(block: Block): CarBufferWriter
|
|
46
|
+
close(options?:{ resize?: boolean }): Uint8Array
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface CarBufferWriterOptions {
|
|
50
|
+
roots?: CID[] // defaults to []
|
|
51
|
+
byteOffset?: number // defaults to 0
|
|
52
|
+
byteLength?: number // defaults to buffer.byteLength
|
|
53
|
+
|
|
54
|
+
headerSize?: number // defaults to size needed for provided roots
|
|
55
|
+
}
|
|
56
|
+
|
|
39
57
|
export interface WriterChannel {
|
|
40
58
|
writer: BlockWriter
|
|
41
59
|
out: AsyncIterable<Uint8Array>
|
package/buffer-writer
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./cjs/lib/buffer-writer.js')
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var multiformats = require('multiformats');
|
|
6
6
|
var sha2 = require('multiformats/hashes/sha2');
|
|
7
7
|
var raw = require('multiformats/codecs/raw');
|
|
8
|
-
var
|
|
8
|
+
var CBOR = require('@ipld/dag-cbor');
|
|
9
9
|
var dagPb = require('@ipld/dag-pb');
|
|
10
10
|
var chai = require('chai');
|
|
11
11
|
var chaiAsPromised = require('chai-as-promised');
|
|
@@ -31,7 +31,7 @@ function _interopNamespace(e) {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
var raw__namespace = /*#__PURE__*/_interopNamespace(raw);
|
|
34
|
-
var
|
|
34
|
+
var CBOR__namespace = /*#__PURE__*/_interopNamespace(CBOR);
|
|
35
35
|
var dagPb__namespace = /*#__PURE__*/_interopNamespace(dagPb);
|
|
36
36
|
var chai__default = /*#__PURE__*/_interopDefaultLegacy(chai);
|
|
37
37
|
var chaiAsPromised__default = /*#__PURE__*/_interopDefaultLegacy(chaiAsPromised);
|
|
@@ -101,7 +101,7 @@ async function makeData() {
|
|
|
101
101
|
cborBlocks.push(await toBlock({
|
|
102
102
|
name: b[0],
|
|
103
103
|
link: b[1]
|
|
104
|
-
},
|
|
104
|
+
}, CBOR__namespace));
|
|
105
105
|
}
|
|
106
106
|
allBlocks = [
|
|
107
107
|
[
|
|
@@ -214,12 +214,87 @@ const goCarIndex = [
|
|
|
214
214
|
blockLength: 18
|
|
215
215
|
}
|
|
216
216
|
];
|
|
217
|
+
const goCarV2Bytes = multiformats.bytes.fromHex('0aa16776657273696f6e02000000000000000000000000000000003300000000000000c001000000000000f30100000000000038a265726f6f747381d82a5823001220fb16f5083412ef1371d031ed4aa239903d84efdadf1ba3cd678e6475b1a232f86776657273696f6e01511220fb16f5083412ef1371d031ed4aa239903d84efdadf1ba3cd678e6475b1a232f8122d0a221220d9c0d5376d26f1931f7ad52d7acc00fc1090d2edb0808bf61eeb0a152826f6261204f09f8da418a40185011220d9c0d5376d26f1931f7ad52d7acc00fc1090d2edb0808bf61eeb0a152826f62612310a221220d745b7757f5b4593eeab7820306c7bc64eb496a7410a0d07df7a34ffec4b97f1120962617272656c657965183a122e0a2401551220a2e1c40da1ae335d4dffe729eb4d5ca23b74b9e51fc535f4a804a261080c294d1204f09f90a11807581220d745b7757f5b4593eeab7820306c7bc64eb496a7410a0d07df7a34ffec4b97f112340a2401551220b474a99a2705e23cf905a484ec6d14ef58b56bbe62e9292783466ec363b5072d120a666973686d6f6e67657218042801551220b474a99a2705e23cf905a484ec6d14ef58b56bbe62e9292783466ec363b5072d666973682b01551220a2e1c40da1ae335d4dffe729eb4d5ca23b74b9e51fc535f4a804a261080c294d6c6f62737465720100000028000000c800000000000000a2e1c40da1ae335d4dffe729eb4d5ca23b74b9e51fc535f4a804a261080c294d9401000000000000b474a99a2705e23cf905a484ec6d14ef58b56bbe62e9292783466ec363b5072d6b01000000000000d745b7757f5b4593eeab7820306c7bc64eb496a7410a0d07df7a34ffec4b97f11201000000000000d9c0d5376d26f1931f7ad52d7acc00fc1090d2edb0808bf61eeb0a152826f6268b00000000000000fb16f5083412ef1371d031ed4aa239903d84efdadf1ba3cd678e6475b1a232f83900000000000000');
|
|
218
|
+
const goCarV2Roots = [multiformats.CID.parse('QmfEoLyB5NndqeKieExd1rtJzTduQUPEV8TwAYcUiy3H5Z')];
|
|
219
|
+
const goCarV2Index = [
|
|
220
|
+
{
|
|
221
|
+
blockLength: 47,
|
|
222
|
+
blockOffset: 143,
|
|
223
|
+
cid: multiformats.CID.parse('QmfEoLyB5NndqeKieExd1rtJzTduQUPEV8TwAYcUiy3H5Z'),
|
|
224
|
+
length: 82,
|
|
225
|
+
offset: 108
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
blockLength: 99,
|
|
229
|
+
blockOffset: 226,
|
|
230
|
+
cid: multiformats.CID.parse('QmczfirA7VEH7YVvKPTPoU69XM3qY4DC39nnTsWd4K3SkM'),
|
|
231
|
+
length: 135,
|
|
232
|
+
offset: 190
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
blockLength: 54,
|
|
236
|
+
blockOffset: 360,
|
|
237
|
+
cid: multiformats.CID.parse('Qmcpz2FHJD7VAhg1fxFXdYJKePtkx1BsHuCrAgWVnaHMTE'),
|
|
238
|
+
length: 89,
|
|
239
|
+
offset: 325
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
blockLength: 4,
|
|
243
|
+
blockOffset: 451,
|
|
244
|
+
cid: multiformats.CID.parse('bafkreifuosuzujyf4i6psbneqtwg2fhplc2wxptc5euspa2gn3bwhnihfu'),
|
|
245
|
+
length: 41,
|
|
246
|
+
offset: 414
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
blockLength: 7,
|
|
250
|
+
blockOffset: 492,
|
|
251
|
+
cid: multiformats.CID.parse('bafkreifc4hca3inognou377hfhvu2xfchn2ltzi7yu27jkaeujqqqdbjju'),
|
|
252
|
+
length: 44,
|
|
253
|
+
offset: 455
|
|
254
|
+
}
|
|
255
|
+
];
|
|
256
|
+
const goCarV2Contents = {
|
|
257
|
+
QmfEoLyB5NndqeKieExd1rtJzTduQUPEV8TwAYcUiy3H5Z: {
|
|
258
|
+
Links: [{
|
|
259
|
+
Hash: multiformats.CID.parse('QmczfirA7VEH7YVvKPTPoU69XM3qY4DC39nnTsWd4K3SkM'),
|
|
260
|
+
Name: '\uD83C\uDF64',
|
|
261
|
+
Tsize: 164
|
|
262
|
+
}]
|
|
263
|
+
},
|
|
264
|
+
QmczfirA7VEH7YVvKPTPoU69XM3qY4DC39nnTsWd4K3SkM: {
|
|
265
|
+
Links: [
|
|
266
|
+
{
|
|
267
|
+
Hash: multiformats.CID.parse('Qmcpz2FHJD7VAhg1fxFXdYJKePtkx1BsHuCrAgWVnaHMTE'),
|
|
268
|
+
Name: 'barreleye',
|
|
269
|
+
Tsize: 58
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
Hash: multiformats.CID.parse('bafkreifc4hca3inognou377hfhvu2xfchn2ltzi7yu27jkaeujqqqdbjju'),
|
|
273
|
+
Name: '\uD83D\uDC21',
|
|
274
|
+
Tsize: 7
|
|
275
|
+
}
|
|
276
|
+
]
|
|
277
|
+
},
|
|
278
|
+
Qmcpz2FHJD7VAhg1fxFXdYJKePtkx1BsHuCrAgWVnaHMTE: {
|
|
279
|
+
Links: [{
|
|
280
|
+
Hash: multiformats.CID.parse('bafkreifuosuzujyf4i6psbneqtwg2fhplc2wxptc5euspa2gn3bwhnihfu'),
|
|
281
|
+
Name: 'fishmonger',
|
|
282
|
+
Tsize: 4
|
|
283
|
+
}]
|
|
284
|
+
},
|
|
285
|
+
bafkreifuosuzujyf4i6psbneqtwg2fhplc2wxptc5euspa2gn3bwhnihfu: 'fish',
|
|
286
|
+
bafkreifc4hca3inognou377hfhvu2xfchn2ltzi7yu27jkaeujqqqdbjju: 'lobster'
|
|
287
|
+
};
|
|
217
288
|
|
|
218
289
|
exports.assert = assert;
|
|
219
290
|
exports.carBytes = carBytes;
|
|
220
291
|
exports.goCarBytes = goCarBytes;
|
|
221
292
|
exports.goCarIndex = goCarIndex;
|
|
222
293
|
exports.goCarRoots = goCarRoots;
|
|
294
|
+
exports.goCarV2Bytes = goCarV2Bytes;
|
|
295
|
+
exports.goCarV2Contents = goCarV2Contents;
|
|
296
|
+
exports.goCarV2Index = goCarV2Index;
|
|
297
|
+
exports.goCarV2Roots = goCarV2Roots;
|
|
223
298
|
exports.makeData = makeData;
|
|
224
299
|
exports.makeIterable = makeIterable;
|
|
225
300
|
exports.rndCid = rndCid;
|
|
@@ -4,7 +4,7 @@ var fs = require('fs');
|
|
|
4
4
|
var stream = require('stream');
|
|
5
5
|
var ipldGarbage = require('ipld-garbage');
|
|
6
6
|
var varint = require('varint');
|
|
7
|
-
var
|
|
7
|
+
var CBOR = require('@ipld/dag-cbor');
|
|
8
8
|
var sha2 = require('multiformats/hashes/sha2');
|
|
9
9
|
var cid = require('multiformats/cid');
|
|
10
10
|
require('../car-browser.js');
|
|
@@ -36,7 +36,7 @@ function _interopNamespace(e) {
|
|
|
36
36
|
|
|
37
37
|
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
38
38
|
var varint__default = /*#__PURE__*/_interopDefaultLegacy(varint);
|
|
39
|
-
var
|
|
39
|
+
var CBOR__namespace = /*#__PURE__*/_interopNamespace(CBOR);
|
|
40
40
|
|
|
41
41
|
describe('Large CAR', () => {
|
|
42
42
|
const objects = [];
|
|
@@ -45,7 +45,7 @@ describe('Large CAR', () => {
|
|
|
45
45
|
it('create, no roots', async () => {
|
|
46
46
|
const {writer, out} = writerBrowser.CarWriter.create([]);
|
|
47
47
|
stream.Readable.from(out).pipe(fs__default["default"].createWriteStream('./test.car'));
|
|
48
|
-
let offset =
|
|
48
|
+
let offset = CBOR__namespace.encode({
|
|
49
49
|
version: 1,
|
|
50
50
|
roots: []
|
|
51
51
|
}).length;
|
|
@@ -53,9 +53,9 @@ describe('Large CAR', () => {
|
|
|
53
53
|
for (let i = 0; i < 500; i++) {
|
|
54
54
|
const obj = ipldGarbage.garbage(1000);
|
|
55
55
|
objects.push(obj);
|
|
56
|
-
const bytes =
|
|
56
|
+
const bytes = CBOR__namespace.encode(obj);
|
|
57
57
|
const hash = await sha2.sha256.digest(bytes);
|
|
58
|
-
const cid$1 = cid.CID.create(1,
|
|
58
|
+
const cid$1 = cid.CID.create(1, CBOR__namespace.code, hash);
|
|
59
59
|
cids.push(cid$1.toString());
|
|
60
60
|
const blockLength = bytes.length;
|
|
61
61
|
let length = cid$1.bytes.length + blockLength;
|
|
@@ -101,7 +101,7 @@ describe('Large CAR', () => {
|
|
|
101
101
|
let i = 0;
|
|
102
102
|
for await (const {cid, bytes} of reader.blocks()) {
|
|
103
103
|
common.assert.strictEqual(cid.toString(), cids[i], `cid #${ i } ${ cid } <> ${ cids[i] }`);
|
|
104
|
-
const obj =
|
|
104
|
+
const obj = CBOR__namespace.decode(bytes);
|
|
105
105
|
common.assert.deepStrictEqual(obj, objects[i], `object #${ i }`);
|
|
106
106
|
i++;
|
|
107
107
|
}
|
|
@@ -112,7 +112,7 @@ describe('Large CAR', () => {
|
|
|
112
112
|
let i = 0;
|
|
113
113
|
for await (const {cid, bytes} of reader.blocks()) {
|
|
114
114
|
common.assert.strictEqual(cid.toString(), cids[i], `cid #${ i } ${ cid } <> ${ cids[i] }`);
|
|
115
|
-
const obj =
|
|
115
|
+
const obj = CBOR__namespace.decode(bytes);
|
|
116
116
|
common.assert.deepStrictEqual(obj, objects[i], `object #${ i }`);
|
|
117
117
|
i++;
|
|
118
118
|
}
|
|
@@ -123,7 +123,7 @@ describe('Large CAR', () => {
|
|
|
123
123
|
let i = 0;
|
|
124
124
|
for await (const {cid, bytes} of reader.blocks()) {
|
|
125
125
|
common.assert.strictEqual(cid.toString(), cids[i], `cid #${ i } ${ cid } <> ${ cids[i] }`);
|
|
126
|
-
const obj =
|
|
126
|
+
const obj = CBOR__namespace.decode(bytes);
|
|
127
127
|
common.assert.deepStrictEqual(obj, objects[i], `object #${ i }`);
|
|
128
128
|
i++;
|
|
129
129
|
}
|