@ipld/car 4.1.6 → 5.0.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/LICENSE +4 -0
- package/README.md +12 -4
- package/dist/index.min.js +5 -0
- package/{types → dist/src}/api.d.ts +19 -19
- package/dist/src/api.d.ts.map +1 -0
- package/{types/lib → dist/src}/buffer-writer.d.ts +10 -10
- package/{types/lib → dist/src}/buffer-writer.d.ts.map +1 -1
- package/dist/src/coding.d.ts +41 -0
- package/dist/src/coding.d.ts.map +1 -0
- package/{types/lib → dist/src}/decoder.d.ts +3 -3
- package/{types/lib → dist/src}/decoder.d.ts.map +1 -1
- package/{types/lib → dist/src}/encoder.d.ts +2 -2
- package/{types/lib → dist/src}/encoder.d.ts.map +1 -1
- package/{types/lib → dist/src}/header-validator.d.ts +0 -0
- package/dist/src/header-validator.d.ts.map +1 -0
- package/dist/src/index-browser.d.ts +8 -0
- package/dist/src/index-browser.d.ts.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.d.ts.map +1 -0
- package/{types/lib → dist/src}/indexed-reader-browser.d.ts +0 -0
- package/dist/src/indexed-reader-browser.d.ts.map +1 -0
- package/{types/lib → dist/src}/indexed-reader.d.ts +13 -13
- package/dist/src/indexed-reader.d.ts.map +1 -0
- package/{types/lib → dist/src}/indexer.d.ts +9 -9
- package/{types/lib → dist/src}/indexer.d.ts.map +1 -1
- package/{types/lib → dist/src}/iterator-channel.d.ts +0 -0
- package/{types/lib → dist/src}/iterator-channel.d.ts.map +1 -1
- package/{types/lib → dist/src}/iterator.d.ts +8 -8
- package/{types/lib → dist/src}/iterator.d.ts.map +1 -1
- package/{types/lib → dist/src}/reader-browser.d.ts +10 -10
- package/{types/lib → dist/src}/reader-browser.d.ts.map +1 -1
- package/{types/lib → dist/src}/reader.d.ts +5 -5
- package/{types/lib → dist/src}/reader.d.ts.map +1 -1
- package/{types/lib → dist/src}/writer-browser.d.ts +10 -10
- package/{types/lib → dist/src}/writer-browser.d.ts.map +1 -1
- package/{types/lib → dist/src}/writer.d.ts +4 -4
- package/{types/lib → dist/src}/writer.d.ts.map +1 -1
- package/package.json +102 -209
- package/{api.ts → src/api.ts} +14 -14
- package/{lib → src}/buffer-writer.js +5 -5
- package/src/coding.ts +56 -0
- package/{lib → src}/decoder.js +7 -7
- package/{lib → src}/encoder.js +1 -1
- package/src/header-validator.js +74 -0
- package/{lib → src}/header.ipldsch +0 -0
- package/src/index-browser.js +14 -0
- package/src/index.js +16 -0
- package/{lib → src}/indexed-reader-browser.js +0 -0
- package/{lib → src}/indexed-reader.js +9 -9
- package/{lib → src}/indexer.js +4 -4
- package/{lib → src}/iterator-channel.js +0 -0
- package/{lib → src}/iterator.js +4 -4
- package/{lib → src}/reader-browser.js +7 -7
- package/{lib → src}/reader.js +5 -5
- package/{lib → src}/writer-browser.js +7 -7
- package/{lib → src}/writer.js +3 -3
- package/LICENSE-APACHE +0 -13
- package/LICENSE-MIT +0 -7
- package/buffer-writer +0 -1
- package/car-browser.js +0 -14
- package/car.js +0 -16
- package/cjs/browser-test/common.js +0 -301
- package/cjs/browser-test/node-test-file-streams.js +0 -71
- package/cjs/browser-test/node-test-indexed-reader.js +0 -51
- package/cjs/browser-test/node-test-large.js +0 -135
- package/cjs/browser-test/node-test-raw.js +0 -68
- package/cjs/browser-test/node-test-updateroots.js +0 -78
- package/cjs/browser-test/test-buffer-writer.js +0 -330
- package/cjs/browser-test/test-errors.js +0 -90
- package/cjs/browser-test/test-indexer.js +0 -80
- package/cjs/browser-test/test-interface.js +0 -21
- package/cjs/browser-test/test-iterator.js +0 -83
- package/cjs/browser-test/test-reader.js +0 -278
- package/cjs/browser-test/test-writer.js +0 -286
- package/cjs/browser-test/verify-store-reader.js +0 -142
- package/cjs/car-browser.js +0 -18
- package/cjs/car.js +0 -20
- package/cjs/lib/buffer-writer.js +0 -164
- package/cjs/lib/decoder.js +0 -301
- package/cjs/lib/encoder.js +0 -44
- package/cjs/lib/header-validator.js +0 -29
- package/cjs/lib/indexed-reader-browser.js +0 -13
- package/cjs/lib/indexed-reader.js +0 -90
- package/cjs/lib/indexer.js +0 -41
- package/cjs/lib/iterator-channel.js +0 -77
- package/cjs/lib/iterator.js +0 -97
- package/cjs/lib/reader-browser.js +0 -62
- package/cjs/lib/reader.js +0 -38
- package/cjs/lib/writer-browser.js +0 -118
- package/cjs/lib/writer.js +0 -51
- package/cjs/node-test/common.js +0 -301
- package/cjs/node-test/node-test-file-streams.js +0 -71
- package/cjs/node-test/node-test-indexed-reader.js +0 -51
- package/cjs/node-test/node-test-large.js +0 -135
- package/cjs/node-test/node-test-raw.js +0 -68
- package/cjs/node-test/node-test-updateroots.js +0 -78
- package/cjs/node-test/test-buffer-writer.js +0 -330
- package/cjs/node-test/test-errors.js +0 -90
- package/cjs/node-test/test-indexer.js +0 -80
- package/cjs/node-test/test-interface.js +0 -21
- package/cjs/node-test/test-iterator.js +0 -83
- package/cjs/node-test/test-reader.js +0 -278
- package/cjs/node-test/test-writer.js +0 -286
- package/cjs/node-test/verify-store-reader.js +0 -142
- package/decoder +0 -1
- package/esm/browser-test/common.js +0 -274
- package/esm/browser-test/node-test-file-streams.js +0 -76
- package/esm/browser-test/node-test-indexed-reader.js +0 -53
- package/esm/browser-test/node-test-large.js +0 -109
- package/esm/browser-test/node-test-raw.js +0 -63
- package/esm/browser-test/node-test-updateroots.js +0 -76
- package/esm/browser-test/test-buffer-writer.js +0 -311
- package/esm/browser-test/test-errors.js +0 -91
- package/esm/browser-test/test-indexer.js +0 -85
- package/esm/browser-test/test-interface.js +0 -24
- package/esm/browser-test/test-iterator.js +0 -91
- package/esm/browser-test/test-reader.js +0 -270
- package/esm/browser-test/test-writer.js +0 -297
- package/esm/browser-test/verify-store-reader.js +0 -122
- package/esm/car-browser.js +0 -16
- package/esm/car.js +0 -18
- package/esm/lib/buffer-writer.js +0 -129
- package/esm/lib/decoder.js +0 -265
- package/esm/lib/encoder.js +0 -35
- package/esm/lib/header-validator.js +0 -23
- package/esm/lib/indexed-reader-browser.js +0 -6
- package/esm/lib/indexed-reader.js +0 -78
- package/esm/lib/indexer.js +0 -38
- package/esm/lib/iterator-channel.js +0 -71
- package/esm/lib/iterator.js +0 -92
- package/esm/lib/reader-browser.js +0 -57
- package/esm/lib/reader.js +0 -26
- package/esm/lib/writer-browser.js +0 -115
- package/esm/lib/writer.js +0 -42
- package/esm/node-test/common.js +0 -274
- package/esm/node-test/node-test-file-streams.js +0 -76
- package/esm/node-test/node-test-indexed-reader.js +0 -53
- package/esm/node-test/node-test-large.js +0 -109
- package/esm/node-test/node-test-raw.js +0 -63
- package/esm/node-test/node-test-updateroots.js +0 -76
- package/esm/node-test/test-buffer-writer.js +0 -311
- package/esm/node-test/test-errors.js +0 -91
- package/esm/node-test/test-indexer.js +0 -85
- package/esm/node-test/test-interface.js +0 -24
- package/esm/node-test/test-iterator.js +0 -91
- package/esm/node-test/test-reader.js +0 -270
- package/esm/node-test/test-writer.js +0 -297
- package/esm/node-test/verify-store-reader.js +0 -122
- package/esm/package.json +0 -9
- package/examples/car-to-fixture.js +0 -66
- package/examples/dump-car.js +0 -58
- package/examples/dump-index.js +0 -24
- package/examples/package.json +0 -27
- package/examples/round-trip.js +0 -45
- package/examples/test-examples.js +0 -115
- package/examples/verify-car.js +0 -87
- package/index.js +0 -1
- package/indexed-reader +0 -1
- package/indexer +0 -1
- package/iterator +0 -1
- package/lib/coding.ts +0 -56
- package/lib/header-validator.js +0 -33
- package/reader +0 -1
- package/test/_fixtures_to_js.mjs +0 -24
- package/test/common.js +0 -210
- package/test/go.car +0 -0
- package/test/go.carv2 +0 -0
- package/test/node-test-file-streams.js +0 -84
- package/test/node-test-indexed-reader.js +0 -45
- package/test/node-test-large.js +0 -112
- package/test/node-test-raw.js +0 -83
- package/test/node-test-updateroots.js +0 -89
- package/test/test-buffer-writer.js +0 -256
- package/test/test-errors.js +0 -98
- package/test/test-indexer.js +0 -87
- package/test/test-interface.js +0 -24
- package/test/test-iterator.js +0 -74
- package/test/test-reader.js +0 -245
- package/test/test-writer.js +0 -336
- package/test/verify-store-reader.js +0 -191
- package/tsconfig.json +0 -48
- package/types/api.d.ts.map +0 -1
- package/types/car-browser.d.ts +0 -8
- package/types/car-browser.d.ts.map +0 -1
- package/types/car.d.ts +0 -9
- package/types/car.d.ts.map +0 -1
- package/types/lib/coding.d.ts +0 -41
- package/types/lib/coding.d.ts.map +0 -1
- package/types/lib/header-validator.d.ts.map +0 -1
- package/types/lib/indexed-reader-browser.d.ts.map +0 -1
- package/types/lib/indexed-reader.d.ts.map +0 -1
- package/types/test/_fixtures_to_js.d.mts +0 -3
- package/types/test/_fixtures_to_js.d.mts.map +0 -1
- package/types/test/common.d.ts +0 -73
- package/types/test/common.d.ts.map +0 -1
- package/types/test/fixtures-expectations.d.ts +0 -63
- package/types/test/fixtures-expectations.d.ts.map +0 -1
- package/types/test/fixtures.d.ts +0 -3
- package/types/test/fixtures.d.ts.map +0 -1
- package/types/test/node-test-file-streams.d.ts +0 -3
- package/types/test/node-test-file-streams.d.ts.map +0 -1
- package/types/test/node-test-indexed-reader.d.ts +0 -2
- package/types/test/node-test-indexed-reader.d.ts.map +0 -1
- package/types/test/node-test-large.d.ts +0 -2
- package/types/test/node-test-large.d.ts.map +0 -1
- package/types/test/node-test-raw.d.ts +0 -2
- package/types/test/node-test-raw.d.ts.map +0 -1
- package/types/test/node-test-updateroots.d.ts +0 -2
- package/types/test/node-test-updateroots.d.ts.map +0 -1
- package/types/test/test-buffer-writer.d.ts +0 -2
- package/types/test/test-buffer-writer.d.ts.map +0 -1
- package/types/test/test-errors.d.ts +0 -2
- package/types/test/test-errors.d.ts.map +0 -1
- package/types/test/test-indexer.d.ts +0 -2
- package/types/test/test-indexer.d.ts.map +0 -1
- package/types/test/test-interface.d.ts +0 -2
- package/types/test/test-interface.d.ts.map +0 -1
- package/types/test/test-iterator.d.ts +0 -2
- package/types/test/test-iterator.d.ts.map +0 -1
- package/types/test/test-reader.d.ts +0 -2
- package/types/test/test-reader.d.ts.map +0 -1
- package/types/test/test-writer.d.ts +0 -2
- package/types/test/test-writer.d.ts.map +0 -1
- package/types/test/verify-store-reader.d.ts +0 -29
- package/types/test/verify-store-reader.d.ts.map +0 -1
- package/writer +0 -1
package/esm/lib/iterator.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
asyncIterableReader,
|
|
3
|
-
bytesReader,
|
|
4
|
-
createDecoder
|
|
5
|
-
} from './decoder.js';
|
|
6
|
-
export class CarIteratorBase {
|
|
7
|
-
constructor(version, roots, iterable) {
|
|
8
|
-
this._version = version;
|
|
9
|
-
this._roots = roots;
|
|
10
|
-
this._iterable = iterable;
|
|
11
|
-
this._decoded = false;
|
|
12
|
-
}
|
|
13
|
-
get version() {
|
|
14
|
-
return this._version;
|
|
15
|
-
}
|
|
16
|
-
async getRoots() {
|
|
17
|
-
return this._roots;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
export class CarBlockIterator extends CarIteratorBase {
|
|
21
|
-
[Symbol.asyncIterator]() {
|
|
22
|
-
if (this._decoded) {
|
|
23
|
-
throw new Error('Cannot decode more than once');
|
|
24
|
-
}
|
|
25
|
-
if (!this._iterable) {
|
|
26
|
-
throw new Error('Block iterable not found');
|
|
27
|
-
}
|
|
28
|
-
this._decoded = true;
|
|
29
|
-
return this._iterable[Symbol.asyncIterator]();
|
|
30
|
-
}
|
|
31
|
-
static async fromBytes(bytes) {
|
|
32
|
-
const {version, roots, iterator} = await fromBytes(bytes);
|
|
33
|
-
return new CarBlockIterator(version, roots, iterator);
|
|
34
|
-
}
|
|
35
|
-
static async fromIterable(asyncIterable) {
|
|
36
|
-
const {version, roots, iterator} = await fromIterable(asyncIterable);
|
|
37
|
-
return new CarBlockIterator(version, roots, iterator);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
export class CarCIDIterator extends CarIteratorBase {
|
|
41
|
-
[Symbol.asyncIterator]() {
|
|
42
|
-
if (this._decoded) {
|
|
43
|
-
throw new Error('Cannot decode more than once');
|
|
44
|
-
}
|
|
45
|
-
if (!this._iterable) {
|
|
46
|
-
throw new Error('Block iterable not found');
|
|
47
|
-
}
|
|
48
|
-
this._decoded = true;
|
|
49
|
-
const iterable = this._iterable[Symbol.asyncIterator]();
|
|
50
|
-
return {
|
|
51
|
-
async next() {
|
|
52
|
-
const next = await iterable.next();
|
|
53
|
-
if (next.done) {
|
|
54
|
-
return next;
|
|
55
|
-
}
|
|
56
|
-
return {
|
|
57
|
-
done: false,
|
|
58
|
-
value: next.value.cid
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
static async fromBytes(bytes) {
|
|
64
|
-
const {version, roots, iterator} = await fromBytes(bytes);
|
|
65
|
-
return new CarCIDIterator(version, roots, iterator);
|
|
66
|
-
}
|
|
67
|
-
static async fromIterable(asyncIterable) {
|
|
68
|
-
const {version, roots, iterator} = await fromIterable(asyncIterable);
|
|
69
|
-
return new CarCIDIterator(version, roots, iterator);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
async function fromBytes(bytes) {
|
|
73
|
-
if (!(bytes instanceof Uint8Array)) {
|
|
74
|
-
throw new TypeError('fromBytes() requires a Uint8Array');
|
|
75
|
-
}
|
|
76
|
-
return decodeIterator(bytesReader(bytes));
|
|
77
|
-
}
|
|
78
|
-
async function fromIterable(asyncIterable) {
|
|
79
|
-
if (!asyncIterable || !(typeof asyncIterable[Symbol.asyncIterator] === 'function')) {
|
|
80
|
-
throw new TypeError('fromIterable() requires an async iterable');
|
|
81
|
-
}
|
|
82
|
-
return decodeIterator(asyncIterableReader(asyncIterable));
|
|
83
|
-
}
|
|
84
|
-
async function decodeIterator(reader) {
|
|
85
|
-
const decoder = createDecoder(reader);
|
|
86
|
-
const {version, roots} = await decoder.header();
|
|
87
|
-
return {
|
|
88
|
-
version,
|
|
89
|
-
roots,
|
|
90
|
-
iterator: decoder.blocks()
|
|
91
|
-
};
|
|
92
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
asyncIterableReader,
|
|
3
|
-
bytesReader,
|
|
4
|
-
createDecoder
|
|
5
|
-
} from './decoder.js';
|
|
6
|
-
export class CarReader {
|
|
7
|
-
constructor(header, blocks) {
|
|
8
|
-
this._header = header;
|
|
9
|
-
this._blocks = blocks;
|
|
10
|
-
this._keys = blocks.map(b => b.cid.toString());
|
|
11
|
-
}
|
|
12
|
-
get version() {
|
|
13
|
-
return this._header.version;
|
|
14
|
-
}
|
|
15
|
-
async getRoots() {
|
|
16
|
-
return this._header.roots;
|
|
17
|
-
}
|
|
18
|
-
async has(key) {
|
|
19
|
-
return this._keys.indexOf(key.toString()) > -1;
|
|
20
|
-
}
|
|
21
|
-
async get(key) {
|
|
22
|
-
const index = this._keys.indexOf(key.toString());
|
|
23
|
-
return index > -1 ? this._blocks[index] : undefined;
|
|
24
|
-
}
|
|
25
|
-
async *blocks() {
|
|
26
|
-
for (const block of this._blocks) {
|
|
27
|
-
yield block;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
async *cids() {
|
|
31
|
-
for (const block of this._blocks) {
|
|
32
|
-
yield block.cid;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
static async fromBytes(bytes) {
|
|
36
|
-
if (!(bytes instanceof Uint8Array)) {
|
|
37
|
-
throw new TypeError('fromBytes() requires a Uint8Array');
|
|
38
|
-
}
|
|
39
|
-
return decodeReaderComplete(bytesReader(bytes));
|
|
40
|
-
}
|
|
41
|
-
static async fromIterable(asyncIterable) {
|
|
42
|
-
if (!asyncIterable || !(typeof asyncIterable[Symbol.asyncIterator] === 'function')) {
|
|
43
|
-
throw new TypeError('fromIterable() requires an async iterable');
|
|
44
|
-
}
|
|
45
|
-
return decodeReaderComplete(asyncIterableReader(asyncIterable));
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
export async function decodeReaderComplete(reader) {
|
|
49
|
-
const decoder = createDecoder(reader);
|
|
50
|
-
const header = await decoder.header();
|
|
51
|
-
const blocks = [];
|
|
52
|
-
for await (const block of decoder.blocks()) {
|
|
53
|
-
blocks.push(block);
|
|
54
|
-
}
|
|
55
|
-
return new CarReader(header, blocks);
|
|
56
|
-
}
|
|
57
|
-
export const __browser = true;
|
package/esm/lib/reader.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import { promisify } from 'util';
|
|
3
|
-
import { CarReader as BrowserCarReader } from './reader-browser.js';
|
|
4
|
-
const fsread = promisify(fs.read);
|
|
5
|
-
export class CarReader extends BrowserCarReader {
|
|
6
|
-
static async readRaw(fd, blockIndex) {
|
|
7
|
-
const {cid, blockLength, blockOffset} = blockIndex;
|
|
8
|
-
const bytes = new Uint8Array(blockLength);
|
|
9
|
-
let read;
|
|
10
|
-
if (typeof fd === 'number') {
|
|
11
|
-
read = (await fsread(fd, bytes, 0, blockLength, blockOffset)).bytesRead;
|
|
12
|
-
} else if (typeof fd === 'object' && typeof fd.read === 'function') {
|
|
13
|
-
read = (await fd.read(bytes, 0, blockLength, blockOffset)).bytesRead;
|
|
14
|
-
} else {
|
|
15
|
-
throw new TypeError('Bad fd');
|
|
16
|
-
}
|
|
17
|
-
if (read !== blockLength) {
|
|
18
|
-
throw new Error(`Failed to read entire block (${ read } instead of ${ blockLength })`);
|
|
19
|
-
}
|
|
20
|
-
return {
|
|
21
|
-
cid,
|
|
22
|
-
bytes
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
export const __browser = false;
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { CID } from 'multiformats/cid';
|
|
2
|
-
import {
|
|
3
|
-
createEncoder,
|
|
4
|
-
createHeader
|
|
5
|
-
} from './encoder.js';
|
|
6
|
-
import { create as iteratorChannel } from './iterator-channel.js';
|
|
7
|
-
import {
|
|
8
|
-
bytesReader,
|
|
9
|
-
readHeader
|
|
10
|
-
} from './decoder.js';
|
|
11
|
-
export class CarWriter {
|
|
12
|
-
constructor(roots, encoder) {
|
|
13
|
-
this._encoder = encoder;
|
|
14
|
-
this._mutex = encoder.setRoots(roots);
|
|
15
|
-
this._ended = false;
|
|
16
|
-
}
|
|
17
|
-
async put(block) {
|
|
18
|
-
if (!(block.bytes instanceof Uint8Array) || !block.cid) {
|
|
19
|
-
throw new TypeError('Can only write {cid, bytes} objects');
|
|
20
|
-
}
|
|
21
|
-
if (this._ended) {
|
|
22
|
-
throw new Error('Already closed');
|
|
23
|
-
}
|
|
24
|
-
const cid = CID.asCID(block.cid);
|
|
25
|
-
if (!cid) {
|
|
26
|
-
throw new TypeError('Can only write {cid, bytes} objects');
|
|
27
|
-
}
|
|
28
|
-
this._mutex = this._mutex.then(() => this._encoder.writeBlock({
|
|
29
|
-
cid,
|
|
30
|
-
bytes: block.bytes
|
|
31
|
-
}));
|
|
32
|
-
return this._mutex;
|
|
33
|
-
}
|
|
34
|
-
async close() {
|
|
35
|
-
if (this._ended) {
|
|
36
|
-
throw new Error('Already closed');
|
|
37
|
-
}
|
|
38
|
-
await this._mutex;
|
|
39
|
-
this._ended = true;
|
|
40
|
-
return this._encoder.close();
|
|
41
|
-
}
|
|
42
|
-
static create(roots) {
|
|
43
|
-
roots = toRoots(roots);
|
|
44
|
-
const {encoder, iterator} = encodeWriter();
|
|
45
|
-
const writer = new CarWriter(roots, encoder);
|
|
46
|
-
const out = new CarWriterOut(iterator);
|
|
47
|
-
return {
|
|
48
|
-
writer,
|
|
49
|
-
out
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
static createAppender() {
|
|
53
|
-
const {encoder, iterator} = encodeWriter();
|
|
54
|
-
encoder.setRoots = () => Promise.resolve();
|
|
55
|
-
const writer = new CarWriter([], encoder);
|
|
56
|
-
const out = new CarWriterOut(iterator);
|
|
57
|
-
return {
|
|
58
|
-
writer,
|
|
59
|
-
out
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
static async updateRootsInBytes(bytes, roots) {
|
|
63
|
-
const reader = bytesReader(bytes);
|
|
64
|
-
await readHeader(reader);
|
|
65
|
-
const newHeader = createHeader(roots);
|
|
66
|
-
if (Number(reader.pos) !== newHeader.length) {
|
|
67
|
-
throw new Error(`updateRoots() can only overwrite a header of the same length (old header is ${ reader.pos } bytes, new header is ${ newHeader.length } bytes)`);
|
|
68
|
-
}
|
|
69
|
-
bytes.set(newHeader, 0);
|
|
70
|
-
return bytes;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
export class CarWriterOut {
|
|
74
|
-
constructor(iterator) {
|
|
75
|
-
this._iterator = iterator;
|
|
76
|
-
}
|
|
77
|
-
[Symbol.asyncIterator]() {
|
|
78
|
-
if (this._iterating) {
|
|
79
|
-
throw new Error('Multiple iterator not supported');
|
|
80
|
-
}
|
|
81
|
-
this._iterating = true;
|
|
82
|
-
return this._iterator;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
function encodeWriter() {
|
|
86
|
-
const iw = iteratorChannel();
|
|
87
|
-
const {writer, iterator} = iw;
|
|
88
|
-
const encoder = createEncoder(writer);
|
|
89
|
-
return {
|
|
90
|
-
encoder,
|
|
91
|
-
iterator
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
function toRoots(roots) {
|
|
95
|
-
if (roots === undefined) {
|
|
96
|
-
return [];
|
|
97
|
-
}
|
|
98
|
-
if (!Array.isArray(roots)) {
|
|
99
|
-
const cid = CID.asCID(roots);
|
|
100
|
-
if (!cid) {
|
|
101
|
-
throw new TypeError('roots must be a single CID or an array of CIDs');
|
|
102
|
-
}
|
|
103
|
-
return [cid];
|
|
104
|
-
}
|
|
105
|
-
const _roots = [];
|
|
106
|
-
for (const root of roots) {
|
|
107
|
-
const _root = CID.asCID(root);
|
|
108
|
-
if (!_root) {
|
|
109
|
-
throw new TypeError('roots must be a single CID or an array of CIDs');
|
|
110
|
-
}
|
|
111
|
-
_roots.push(_root);
|
|
112
|
-
}
|
|
113
|
-
return _roots;
|
|
114
|
-
}
|
|
115
|
-
export const __browser = true;
|
package/esm/lib/writer.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import { promisify } from 'util';
|
|
3
|
-
import { CarWriter as BrowserCarWriter } from './writer-browser.js';
|
|
4
|
-
import {
|
|
5
|
-
readHeader,
|
|
6
|
-
chunkReader
|
|
7
|
-
} from './decoder.js';
|
|
8
|
-
import { createHeader } from './encoder.js';
|
|
9
|
-
const fsread = promisify(fs.read);
|
|
10
|
-
const fswrite = promisify(fs.write);
|
|
11
|
-
export class CarWriter extends BrowserCarWriter {
|
|
12
|
-
static async updateRootsInFile(fd, roots) {
|
|
13
|
-
const chunkSize = 256;
|
|
14
|
-
let bytes;
|
|
15
|
-
let offset = 0;
|
|
16
|
-
let readChunk;
|
|
17
|
-
if (typeof fd === 'number') {
|
|
18
|
-
readChunk = async () => (await fsread(fd, bytes, 0, chunkSize, offset)).bytesRead;
|
|
19
|
-
} else if (typeof fd === 'object' && typeof fd.read === 'function') {
|
|
20
|
-
readChunk = async () => (await fd.read(bytes, 0, chunkSize, offset)).bytesRead;
|
|
21
|
-
} else {
|
|
22
|
-
throw new TypeError('Bad fd');
|
|
23
|
-
}
|
|
24
|
-
const fdReader = chunkReader(async () => {
|
|
25
|
-
bytes = new Uint8Array(chunkSize);
|
|
26
|
-
const read = await readChunk();
|
|
27
|
-
offset += read;
|
|
28
|
-
return read < chunkSize ? bytes.subarray(0, read) : bytes;
|
|
29
|
-
});
|
|
30
|
-
await readHeader(fdReader);
|
|
31
|
-
const newHeader = createHeader(roots);
|
|
32
|
-
if (fdReader.pos !== newHeader.length) {
|
|
33
|
-
throw new Error(`updateRoots() can only overwrite a header of the same length (old header is ${ fdReader.pos } bytes, new header is ${ newHeader.length } bytes)`);
|
|
34
|
-
}
|
|
35
|
-
if (typeof fd === 'number') {
|
|
36
|
-
await fswrite(fd, newHeader, 0, newHeader.length, 0);
|
|
37
|
-
} else if (typeof fd === 'object' && typeof fd.read === 'function') {
|
|
38
|
-
await fd.write(newHeader, 0, newHeader.length, 0);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export const __browser = false;
|
package/esm/node-test/common.js
DELETED
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
bytes,
|
|
3
|
-
CID
|
|
4
|
-
} from 'multiformats';
|
|
5
|
-
import { sha256 } from 'multiformats/hashes/sha2';
|
|
6
|
-
import * as raw from 'multiformats/codecs/raw';
|
|
7
|
-
import * as dagCbor from '@ipld/dag-cbor';
|
|
8
|
-
import * as dagPb from '@ipld/dag-pb';
|
|
9
|
-
import chai from 'chai';
|
|
10
|
-
import chaiAsPromised from 'chai-as-promised';
|
|
11
|
-
class TestBlock {
|
|
12
|
-
constructor(bytes, cid, object) {
|
|
13
|
-
this.bytes = bytes;
|
|
14
|
-
this.cid = cid;
|
|
15
|
-
this.object = object;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
chai.use(chaiAsPromised);
|
|
19
|
-
const {assert} = chai;
|
|
20
|
-
let rawBlocks;
|
|
21
|
-
const pbBlocks = [];
|
|
22
|
-
const cborBlocks = [];
|
|
23
|
-
let allBlocks;
|
|
24
|
-
let allBlocksFlattened;
|
|
25
|
-
const rndCid = CID.parse('bafyreihyrpefhacm6kkp4ql6j6udakdit7g3dmkzfriqfykhjw6cad5lrm');
|
|
26
|
-
async function toBlock(object, codec, version = 1) {
|
|
27
|
-
const bytes = codec.encode(object);
|
|
28
|
-
const hash = await sha256.digest(bytes);
|
|
29
|
-
const cid = CID.create(version, codec.code, hash);
|
|
30
|
-
return new TestBlock(bytes, cid, object);
|
|
31
|
-
}
|
|
32
|
-
async function makeData() {
|
|
33
|
-
if (!rawBlocks) {
|
|
34
|
-
rawBlocks = await Promise.all('aaaa bbbb cccc zzzz'.split(' ').map(s => {
|
|
35
|
-
return toBlock(new TextEncoder().encode(s), raw);
|
|
36
|
-
}));
|
|
37
|
-
const toPbLink = (name, block) => {
|
|
38
|
-
let size = block.bytes.length;
|
|
39
|
-
if (block.cid.code === 112) {
|
|
40
|
-
const node = block.object;
|
|
41
|
-
size = node.Links.reduce((p, c) => p + (c.Tsize || 0), size);
|
|
42
|
-
}
|
|
43
|
-
return {
|
|
44
|
-
Name: name,
|
|
45
|
-
Tsize: size,
|
|
46
|
-
Hash: block.cid
|
|
47
|
-
};
|
|
48
|
-
};
|
|
49
|
-
pbBlocks.push(await toBlock({ Links: [toPbLink('cat', rawBlocks[0])] }, dagPb, 0));
|
|
50
|
-
pbBlocks.push(await toBlock({
|
|
51
|
-
Links: [
|
|
52
|
-
toPbLink('dog', rawBlocks[1]),
|
|
53
|
-
toPbLink('first', pbBlocks[0])
|
|
54
|
-
]
|
|
55
|
-
}, dagPb, 0));
|
|
56
|
-
pbBlocks.push(await toBlock({
|
|
57
|
-
Links: [
|
|
58
|
-
toPbLink('bear', rawBlocks[2]),
|
|
59
|
-
toPbLink('second', pbBlocks[1])
|
|
60
|
-
]
|
|
61
|
-
}, dagPb, 0));
|
|
62
|
-
const cbstructs = [
|
|
63
|
-
[
|
|
64
|
-
'blip',
|
|
65
|
-
pbBlocks[2].cid
|
|
66
|
-
],
|
|
67
|
-
[
|
|
68
|
-
'limbo',
|
|
69
|
-
null
|
|
70
|
-
]
|
|
71
|
-
];
|
|
72
|
-
for (const b of cbstructs) {
|
|
73
|
-
cborBlocks.push(await toBlock({
|
|
74
|
-
name: b[0],
|
|
75
|
-
link: b[1]
|
|
76
|
-
}, dagCbor));
|
|
77
|
-
}
|
|
78
|
-
allBlocks = [
|
|
79
|
-
[
|
|
80
|
-
'raw',
|
|
81
|
-
rawBlocks.slice(0, 3)
|
|
82
|
-
],
|
|
83
|
-
[
|
|
84
|
-
'pb',
|
|
85
|
-
pbBlocks
|
|
86
|
-
],
|
|
87
|
-
[
|
|
88
|
-
'cbor',
|
|
89
|
-
cborBlocks
|
|
90
|
-
]
|
|
91
|
-
];
|
|
92
|
-
allBlocksFlattened = allBlocks.reduce((p, c) => p.concat(c[1]), []);
|
|
93
|
-
}
|
|
94
|
-
return {
|
|
95
|
-
rawBlocks,
|
|
96
|
-
pbBlocks,
|
|
97
|
-
cborBlocks,
|
|
98
|
-
allBlocks,
|
|
99
|
-
allBlocksFlattened
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
function makeIterable(data, chunkSize) {
|
|
103
|
-
let pos = 0;
|
|
104
|
-
return {
|
|
105
|
-
[Symbol.asyncIterator]() {
|
|
106
|
-
return {
|
|
107
|
-
async next() {
|
|
108
|
-
await new Promise(resolve => setTimeout(resolve, 5));
|
|
109
|
-
if (pos >= data.length) {
|
|
110
|
-
return {
|
|
111
|
-
done: true,
|
|
112
|
-
value: undefined
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
const value = data.slice(pos, pos += chunkSize);
|
|
116
|
-
return {
|
|
117
|
-
done: false,
|
|
118
|
-
value
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
const carBytes = bytes.fromHex('63a265726f6f747382d82a58250001711220f88bc853804cf294fe417e4fa83028689fcdb1b1592c5102e1474dbc200fab8bd82a5825000171122069ea0740f9807a28f4d932c62e7c1c83be055e55072c90266ab3e79df63a365b6776657273696f6e01280155122061be55a8e2f6b4e172338bddf184d6dbee29c98853e0a0485ecee7f27b9af0b461616161280155122081cc5b17018674b401b42f35ba07bb79e211239c23bffe658da1577e3e646877626262622801551220b6fbd675f98e2abd22d4ed29fdc83150fedc48597e92dd1a7a24381d44a2745163636363511220e7dc486e97e6ebe5cdabab3e392bdad128b6e09acc94bb4e2aa2af7b986d24d0122d0a240155122061be55a8e2f6b4e172338bddf184d6dbee29c98853e0a0485ecee7f27b9af0b4120363617418048001122079a982de3c9907953d4d323cee1d0fb1ed8f45f8ef02870c0cb9e09246bd530a122d0a240155122081cc5b17018674b401b42f35ba07bb79e211239c23bffe658da1577e3e6468771203646f671804122d0a221220e7dc486e97e6ebe5cdabab3e392bdad128b6e09acc94bb4e2aa2af7b986d24d01205666972737418338301122002acecc5de2438ea4126a3010ecb1f8a599c8eff22fff1a1dcffe999b27fd3de122e0a2401551220b6fbd675f98e2abd22d4ed29fdc83150fedc48597e92dd1a7a24381d44a274511204626561721804122f0a22122079a982de3c9907953d4d323cee1d0fb1ed8f45f8ef02870c0cb9e09246bd530a12067365636f6e641895015b01711220f88bc853804cf294fe417e4fa83028689fcdb1b1592c5102e1474dbc200fab8ba2646c696e6bd82a582300122002acecc5de2438ea4126a3010ecb1f8a599c8eff22fff1a1dcffe999b27fd3de646e616d6564626c6970360171122069ea0740f9807a28f4d932c62e7c1c83be055e55072c90266ab3e79df63a365ba2646c696e6bf6646e616d65656c696d626f');
|
|
126
|
-
const goCarBytes = bytes.fromHex('63a265726f6f747382d82a58250001711220f88bc853804cf294fe417e4fa83028689fcdb1b1592c5102e1474dbc200fab8bd82a5825000171122069ea0740f9807a28f4d932c62e7c1c83be055e55072c90266ab3e79df63a365b6776657273696f6e015b01711220f88bc853804cf294fe417e4fa83028689fcdb1b1592c5102e1474dbc200fab8ba2646c696e6bd82a582300122002acecc5de2438ea4126a3010ecb1f8a599c8eff22fff1a1dcffe999b27fd3de646e616d6564626c69708301122002acecc5de2438ea4126a3010ecb1f8a599c8eff22fff1a1dcffe999b27fd3de122e0a2401551220b6fbd675f98e2abd22d4ed29fdc83150fedc48597e92dd1a7a24381d44a274511204626561721804122f0a22122079a982de3c9907953d4d323cee1d0fb1ed8f45f8ef02870c0cb9e09246bd530a12067365636f6e641895012801551220b6fbd675f98e2abd22d4ed29fdc83150fedc48597e92dd1a7a24381d44a27451636363638001122079a982de3c9907953d4d323cee1d0fb1ed8f45f8ef02870c0cb9e09246bd530a122d0a240155122081cc5b17018674b401b42f35ba07bb79e211239c23bffe658da1577e3e6468771203646f671804122d0a221220e7dc486e97e6ebe5cdabab3e392bdad128b6e09acc94bb4e2aa2af7b986d24d0120566697273741833280155122081cc5b17018674b401b42f35ba07bb79e211239c23bffe658da1577e3e64687762626262511220e7dc486e97e6ebe5cdabab3e392bdad128b6e09acc94bb4e2aa2af7b986d24d0122d0a240155122061be55a8e2f6b4e172338bddf184d6dbee29c98853e0a0485ecee7f27b9af0b412036361741804280155122061be55a8e2f6b4e172338bddf184d6dbee29c98853e0a0485ecee7f27b9af0b461616161360171122069ea0740f9807a28f4d932c62e7c1c83be055e55072c90266ab3e79df63a365ba2646c696e6bf6646e616d65656c696d626f');
|
|
127
|
-
const goCarRoots = [
|
|
128
|
-
CID.parse('bafyreihyrpefhacm6kkp4ql6j6udakdit7g3dmkzfriqfykhjw6cad5lrm'),
|
|
129
|
-
CID.parse('bafyreidj5idub6mapiupjwjsyyxhyhedxycv4vihfsicm2vt46o7morwlm')
|
|
130
|
-
];
|
|
131
|
-
const goCarIndex = [
|
|
132
|
-
{
|
|
133
|
-
cid: CID.parse('bafyreihyrpefhacm6kkp4ql6j6udakdit7g3dmkzfriqfykhjw6cad5lrm'),
|
|
134
|
-
offset: 100,
|
|
135
|
-
length: 92,
|
|
136
|
-
blockOffset: 137,
|
|
137
|
-
blockLength: 55
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
cid: CID.parse('QmNX6Tffavsya4xgBi2VJQnSuqy9GsxongxZZ9uZBqp16d'),
|
|
141
|
-
offset: 192,
|
|
142
|
-
length: 133,
|
|
143
|
-
blockOffset: 228,
|
|
144
|
-
blockLength: 97
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
cid: CID.parse('bafkreifw7plhl6mofk6sfvhnfh64qmkq73oeqwl6sloru6rehaoujituke'),
|
|
148
|
-
offset: 325,
|
|
149
|
-
length: 41,
|
|
150
|
-
blockOffset: 362,
|
|
151
|
-
blockLength: 4
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
cid: CID.parse('QmWXZxVQ9yZfhQxLD35eDR8LiMRsYtHxYqTFCBbJoiJVys'),
|
|
155
|
-
offset: 366,
|
|
156
|
-
length: 130,
|
|
157
|
-
blockOffset: 402,
|
|
158
|
-
blockLength: 94
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
cid: CID.parse('bafkreiebzrnroamgos2adnbpgw5apo3z4iishhbdx77gldnbk57d4zdio4'),
|
|
162
|
-
offset: 496,
|
|
163
|
-
length: 41,
|
|
164
|
-
blockOffset: 533,
|
|
165
|
-
blockLength: 4
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
cid: CID.parse('QmdwjhxpxzcMsR3qUuj7vUL8pbA7MgR3GAxWi2GLHjsKCT'),
|
|
169
|
-
offset: 537,
|
|
170
|
-
length: 82,
|
|
171
|
-
blockOffset: 572,
|
|
172
|
-
blockLength: 47
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
cid: CID.parse('bafkreidbxzk2ryxwwtqxem4l3xyyjvw35yu4tcct4cqeqxwo47zhxgxqwq'),
|
|
176
|
-
offset: 619,
|
|
177
|
-
length: 41,
|
|
178
|
-
blockOffset: 656,
|
|
179
|
-
blockLength: 4
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
cid: CID.parse('bafyreidj5idub6mapiupjwjsyyxhyhedxycv4vihfsicm2vt46o7morwlm'),
|
|
183
|
-
offset: 660,
|
|
184
|
-
length: 55,
|
|
185
|
-
blockOffset: 697,
|
|
186
|
-
blockLength: 18
|
|
187
|
-
}
|
|
188
|
-
];
|
|
189
|
-
const goCarV2Bytes = bytes.fromHex('0aa16776657273696f6e02000000000000000000000000000000003300000000000000c001000000000000f30100000000000038a265726f6f747381d82a5823001220fb16f5083412ef1371d031ed4aa239903d84efdadf1ba3cd678e6475b1a232f86776657273696f6e01511220fb16f5083412ef1371d031ed4aa239903d84efdadf1ba3cd678e6475b1a232f8122d0a221220d9c0d5376d26f1931f7ad52d7acc00fc1090d2edb0808bf61eeb0a152826f6261204f09f8da418a40185011220d9c0d5376d26f1931f7ad52d7acc00fc1090d2edb0808bf61eeb0a152826f62612310a221220d745b7757f5b4593eeab7820306c7bc64eb496a7410a0d07df7a34ffec4b97f1120962617272656c657965183a122e0a2401551220a2e1c40da1ae335d4dffe729eb4d5ca23b74b9e51fc535f4a804a261080c294d1204f09f90a11807581220d745b7757f5b4593eeab7820306c7bc64eb496a7410a0d07df7a34ffec4b97f112340a2401551220b474a99a2705e23cf905a484ec6d14ef58b56bbe62e9292783466ec363b5072d120a666973686d6f6e67657218042801551220b474a99a2705e23cf905a484ec6d14ef58b56bbe62e9292783466ec363b5072d666973682b01551220a2e1c40da1ae335d4dffe729eb4d5ca23b74b9e51fc535f4a804a261080c294d6c6f62737465720100000028000000c800000000000000a2e1c40da1ae335d4dffe729eb4d5ca23b74b9e51fc535f4a804a261080c294d9401000000000000b474a99a2705e23cf905a484ec6d14ef58b56bbe62e9292783466ec363b5072d6b01000000000000d745b7757f5b4593eeab7820306c7bc64eb496a7410a0d07df7a34ffec4b97f11201000000000000d9c0d5376d26f1931f7ad52d7acc00fc1090d2edb0808bf61eeb0a152826f6268b00000000000000fb16f5083412ef1371d031ed4aa239903d84efdadf1ba3cd678e6475b1a232f83900000000000000');
|
|
190
|
-
const goCarV2Roots = [CID.parse('QmfEoLyB5NndqeKieExd1rtJzTduQUPEV8TwAYcUiy3H5Z')];
|
|
191
|
-
const goCarV2Index = [
|
|
192
|
-
{
|
|
193
|
-
blockLength: 47,
|
|
194
|
-
blockOffset: 143,
|
|
195
|
-
cid: CID.parse('QmfEoLyB5NndqeKieExd1rtJzTduQUPEV8TwAYcUiy3H5Z'),
|
|
196
|
-
length: 82,
|
|
197
|
-
offset: 108
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
blockLength: 99,
|
|
201
|
-
blockOffset: 226,
|
|
202
|
-
cid: CID.parse('QmczfirA7VEH7YVvKPTPoU69XM3qY4DC39nnTsWd4K3SkM'),
|
|
203
|
-
length: 135,
|
|
204
|
-
offset: 190
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
blockLength: 54,
|
|
208
|
-
blockOffset: 360,
|
|
209
|
-
cid: CID.parse('Qmcpz2FHJD7VAhg1fxFXdYJKePtkx1BsHuCrAgWVnaHMTE'),
|
|
210
|
-
length: 89,
|
|
211
|
-
offset: 325
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
blockLength: 4,
|
|
215
|
-
blockOffset: 451,
|
|
216
|
-
cid: CID.parse('bafkreifuosuzujyf4i6psbneqtwg2fhplc2wxptc5euspa2gn3bwhnihfu'),
|
|
217
|
-
length: 41,
|
|
218
|
-
offset: 414
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
blockLength: 7,
|
|
222
|
-
blockOffset: 492,
|
|
223
|
-
cid: CID.parse('bafkreifc4hca3inognou377hfhvu2xfchn2ltzi7yu27jkaeujqqqdbjju'),
|
|
224
|
-
length: 44,
|
|
225
|
-
offset: 455
|
|
226
|
-
}
|
|
227
|
-
];
|
|
228
|
-
const goCarV2Contents = {
|
|
229
|
-
QmfEoLyB5NndqeKieExd1rtJzTduQUPEV8TwAYcUiy3H5Z: {
|
|
230
|
-
Links: [{
|
|
231
|
-
Hash: CID.parse('QmczfirA7VEH7YVvKPTPoU69XM3qY4DC39nnTsWd4K3SkM'),
|
|
232
|
-
Name: '\uD83C\uDF64',
|
|
233
|
-
Tsize: 164
|
|
234
|
-
}]
|
|
235
|
-
},
|
|
236
|
-
QmczfirA7VEH7YVvKPTPoU69XM3qY4DC39nnTsWd4K3SkM: {
|
|
237
|
-
Links: [
|
|
238
|
-
{
|
|
239
|
-
Hash: CID.parse('Qmcpz2FHJD7VAhg1fxFXdYJKePtkx1BsHuCrAgWVnaHMTE'),
|
|
240
|
-
Name: 'barreleye',
|
|
241
|
-
Tsize: 58
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
Hash: CID.parse('bafkreifc4hca3inognou377hfhvu2xfchn2ltzi7yu27jkaeujqqqdbjju'),
|
|
245
|
-
Name: '\uD83D\uDC21',
|
|
246
|
-
Tsize: 7
|
|
247
|
-
}
|
|
248
|
-
]
|
|
249
|
-
},
|
|
250
|
-
Qmcpz2FHJD7VAhg1fxFXdYJKePtkx1BsHuCrAgWVnaHMTE: {
|
|
251
|
-
Links: [{
|
|
252
|
-
Hash: CID.parse('bafkreifuosuzujyf4i6psbneqtwg2fhplc2wxptc5euspa2gn3bwhnihfu'),
|
|
253
|
-
Name: 'fishmonger',
|
|
254
|
-
Tsize: 4
|
|
255
|
-
}]
|
|
256
|
-
},
|
|
257
|
-
bafkreifuosuzujyf4i6psbneqtwg2fhplc2wxptc5euspa2gn3bwhnihfu: 'fish',
|
|
258
|
-
bafkreifc4hca3inognou377hfhvu2xfchn2ltzi7yu27jkaeujqqqdbjju: 'lobster'
|
|
259
|
-
};
|
|
260
|
-
export {
|
|
261
|
-
toBlock,
|
|
262
|
-
assert,
|
|
263
|
-
makeData,
|
|
264
|
-
makeIterable,
|
|
265
|
-
rndCid,
|
|
266
|
-
carBytes,
|
|
267
|
-
goCarBytes,
|
|
268
|
-
goCarRoots,
|
|
269
|
-
goCarIndex,
|
|
270
|
-
goCarV2Bytes,
|
|
271
|
-
goCarV2Roots,
|
|
272
|
-
goCarV2Index,
|
|
273
|
-
goCarV2Contents
|
|
274
|
-
};
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import { fileURLToPath } from 'url';
|
|
3
|
-
import fs from 'fs';
|
|
4
|
-
import {
|
|
5
|
-
Readable,
|
|
6
|
-
pipeline
|
|
7
|
-
} from 'stream';
|
|
8
|
-
import { promisify } from 'util';
|
|
9
|
-
import {
|
|
10
|
-
CarReader,
|
|
11
|
-
CarWriter
|
|
12
|
-
} from '../car.js';
|
|
13
|
-
import {
|
|
14
|
-
makeData,
|
|
15
|
-
assert
|
|
16
|
-
} from './common.js';
|
|
17
|
-
import {
|
|
18
|
-
verifyRoots,
|
|
19
|
-
verifyHas,
|
|
20
|
-
verifyGet,
|
|
21
|
-
verifyBlocks,
|
|
22
|
-
verifyCids
|
|
23
|
-
} from './verify-store-reader.js';
|
|
24
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
25
|
-
const __dirname = path.dirname(__filename);
|
|
26
|
-
const tmpCarPath = path.join(__dirname, 'tmp.car');
|
|
27
|
-
describe('Node Streams CarReader.fromIterable()', () => {
|
|
28
|
-
let allBlocksFlattened;
|
|
29
|
-
let roots;
|
|
30
|
-
before(async () => {
|
|
31
|
-
const data = await makeData();
|
|
32
|
-
const cborBlocks = data.cborBlocks;
|
|
33
|
-
allBlocksFlattened = data.allBlocksFlattened;
|
|
34
|
-
roots = [
|
|
35
|
-
cborBlocks[0].cid,
|
|
36
|
-
cborBlocks[1].cid
|
|
37
|
-
];
|
|
38
|
-
try {
|
|
39
|
-
await fs.promises.unlink(tmpCarPath);
|
|
40
|
-
} catch (e) {
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
it('from fixture file', async () => {
|
|
44
|
-
const inStream = fs.createReadStream(path.join(__dirname, './go.car'));
|
|
45
|
-
const reader = await CarReader.fromIterable(inStream);
|
|
46
|
-
await verifyRoots(reader);
|
|
47
|
-
await verifyHas(reader);
|
|
48
|
-
await verifyGet(reader);
|
|
49
|
-
await verifyBlocks(reader.blocks(), true);
|
|
50
|
-
await verifyCids(reader.cids(), true);
|
|
51
|
-
});
|
|
52
|
-
it('complete', async () => {
|
|
53
|
-
const {writer, out} = CarWriter.create(roots);
|
|
54
|
-
const pipe = promisify(pipeline)(Readable.from(out), fs.createWriteStream(tmpCarPath));
|
|
55
|
-
for (const block of allBlocksFlattened) {
|
|
56
|
-
await writer.put(block);
|
|
57
|
-
}
|
|
58
|
-
await writer.close();
|
|
59
|
-
await pipe;
|
|
60
|
-
const sizes = await Promise.all([
|
|
61
|
-
'go.car',
|
|
62
|
-
'tmp.car'
|
|
63
|
-
].map(async car => {
|
|
64
|
-
return (await fs.promises.stat(path.join(__dirname, car))).size;
|
|
65
|
-
}));
|
|
66
|
-
assert.strictEqual(sizes[0], sizes[1]);
|
|
67
|
-
const inStream = fs.createReadStream(tmpCarPath);
|
|
68
|
-
const reader = await CarReader.fromIterable(inStream);
|
|
69
|
-
await verifyRoots(reader);
|
|
70
|
-
await verifyHas(reader);
|
|
71
|
-
await verifyGet(reader);
|
|
72
|
-
await verifyBlocks(reader.blocks(), true);
|
|
73
|
-
await verifyCids(reader.cids(), true);
|
|
74
|
-
await fs.promises.unlink(tmpCarPath);
|
|
75
|
-
});
|
|
76
|
-
});
|