@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
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var path = require('path');
|
|
4
|
-
var url = require('url');
|
|
5
|
-
var fs = require('fs');
|
|
6
|
-
var util = require('util');
|
|
7
|
-
var cid = require('multiformats/cid');
|
|
8
|
-
var reader = require('../lib/reader.js');
|
|
9
|
-
var writer = require('../lib/writer.js');
|
|
10
|
-
var verifyStoreReader = require('./verify-store-reader.js');
|
|
11
|
-
var common = require('./common.js');
|
|
12
|
-
|
|
13
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
14
|
-
|
|
15
|
-
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
|
|
16
|
-
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
17
|
-
|
|
18
|
-
const fsopen = util.promisify(fs__default["default"].open);
|
|
19
|
-
const fsclose = util.promisify(fs__default["default"].close);
|
|
20
|
-
const __filename$1 = url.fileURLToPath((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('node-test/node-test-updateroots.js', document.baseURI).href)));
|
|
21
|
-
const __dirname$1 = path__default["default"].dirname(__filename$1);
|
|
22
|
-
const goCarPath = path__default["default"].join(__dirname$1, 'go.car');
|
|
23
|
-
const tmpCarPath = path__default["default"].join(__dirname$1, 'tmp.car');
|
|
24
|
-
const newRoots = [
|
|
25
|
-
cid.CID.parse('bafkreidbxzk2ryxwwtqxem4l3xyyjvw35yu4tcct4cqeqxwo47zhxgxqwq'),
|
|
26
|
-
cid.CID.parse('bafkreiebzrnroamgos2adnbpgw5apo3z4iishhbdx77gldnbk57d4zdio4')
|
|
27
|
-
];
|
|
28
|
-
async function verify() {
|
|
29
|
-
const reader$1 = await reader.CarReader.fromIterable(fs__default["default"].createReadStream(tmpCarPath));
|
|
30
|
-
await common.assert.isRejected(verifyStoreReader.verifyRoots(reader$1));
|
|
31
|
-
common.assert.deepEqual(await reader$1.getRoots(), newRoots);
|
|
32
|
-
await verifyStoreReader.verifyHas(reader$1);
|
|
33
|
-
await verifyStoreReader.verifyGet(reader$1);
|
|
34
|
-
await verifyStoreReader.verifyBlocks(reader$1.blocks(), true);
|
|
35
|
-
await verifyStoreReader.verifyCids(reader$1.cids(), true);
|
|
36
|
-
}
|
|
37
|
-
describe('Node CarWriter.updateHeader()', () => {
|
|
38
|
-
before(async () => {
|
|
39
|
-
try {
|
|
40
|
-
await fs__default["default"].promises.unlink(tmpCarPath);
|
|
41
|
-
} catch (e) {
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
beforeEach(async () => {
|
|
45
|
-
await fs__default["default"].promises.copyFile(goCarPath, tmpCarPath);
|
|
46
|
-
});
|
|
47
|
-
afterEach(async () => {
|
|
48
|
-
await fs__default["default"].promises.unlink(tmpCarPath);
|
|
49
|
-
});
|
|
50
|
-
it('update roots (fd)', async () => {
|
|
51
|
-
const fd = await fsopen(tmpCarPath, 'r+');
|
|
52
|
-
await writer.CarWriter.updateRootsInFile(fd, newRoots);
|
|
53
|
-
await fsclose(fd);
|
|
54
|
-
await verify();
|
|
55
|
-
});
|
|
56
|
-
it('update roots (FileHandle)', async () => {
|
|
57
|
-
const fd = await fs__default["default"].promises.open(tmpCarPath, 'r+');
|
|
58
|
-
await writer.CarWriter.updateRootsInFile(fd, newRoots);
|
|
59
|
-
await fd.close();
|
|
60
|
-
await verify();
|
|
61
|
-
});
|
|
62
|
-
it('error: bad fd', async () => {
|
|
63
|
-
await common.assert.isRejected(writer.CarWriter.updateRootsInFile(true, newRoots), {
|
|
64
|
-
name: 'TypeError',
|
|
65
|
-
message: 'Bad fd'
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
it('error: wrong header size', async () => {
|
|
69
|
-
const fd = await fs__default["default"].promises.open(tmpCarPath, 'r+');
|
|
70
|
-
await common.assert.isRejected(writer.CarWriter.updateRootsInFile(fd, [
|
|
71
|
-
...newRoots,
|
|
72
|
-
newRoots[0]
|
|
73
|
-
]), /can only overwrite a header of the same length/);
|
|
74
|
-
await common.assert.isRejected(writer.CarWriter.updateRootsInFile(fd, [newRoots[0]]), /can only overwrite a header of the same length/);
|
|
75
|
-
await common.assert.isRejected(writer.CarWriter.updateRootsInFile(fd, []), /can only overwrite a header of the same length/);
|
|
76
|
-
await fd.close();
|
|
77
|
-
});
|
|
78
|
-
});
|
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var bufferWriter = require('../lib/buffer-writer.js');
|
|
4
|
-
var reader = require('../lib/reader.js');
|
|
5
|
-
var encoder = require('../lib/encoder.js');
|
|
6
|
-
var common = require('./common.js');
|
|
7
|
-
var multiformats = require('multiformats');
|
|
8
|
-
var CBOR = require('@ipld/dag-cbor');
|
|
9
|
-
var sha2 = require('multiformats/hashes/sha2');
|
|
10
|
-
var identity = require('multiformats/hashes/identity');
|
|
11
|
-
var raw = require('multiformats/codecs/raw');
|
|
12
|
-
var Block = require('multiformats/block');
|
|
13
|
-
|
|
14
|
-
function _interopNamespace(e) {
|
|
15
|
-
if (e && e.__esModule) return e;
|
|
16
|
-
var n = Object.create(null);
|
|
17
|
-
if (e) {
|
|
18
|
-
Object.keys(e).forEach(function (k) {
|
|
19
|
-
if (k !== 'default') {
|
|
20
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
21
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
get: function () { return e[k]; }
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
n["default"] = e;
|
|
29
|
-
return Object.freeze(n);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
var CBOR__namespace = /*#__PURE__*/_interopNamespace(CBOR);
|
|
33
|
-
var raw__namespace = /*#__PURE__*/_interopNamespace(raw);
|
|
34
|
-
var Block__namespace = /*#__PURE__*/_interopNamespace(Block);
|
|
35
|
-
|
|
36
|
-
describe('CarBufferWriter', () => {
|
|
37
|
-
const cid = multiformats.CID.parse('bafkreifuosuzujyf4i6psbneqtwg2fhplc2wxptc5euspa2gn3bwhnihfu');
|
|
38
|
-
describe('calculateHeaderLength', async () => {
|
|
39
|
-
for (const count of [
|
|
40
|
-
0,
|
|
41
|
-
1,
|
|
42
|
-
10,
|
|
43
|
-
18,
|
|
44
|
-
24,
|
|
45
|
-
48,
|
|
46
|
-
124,
|
|
47
|
-
255,
|
|
48
|
-
258,
|
|
49
|
-
65536 - 1,
|
|
50
|
-
65536
|
|
51
|
-
]) {
|
|
52
|
-
it(`calculateHeaderLength(new Array(${ count }).fill(36))`, () => {
|
|
53
|
-
const roots = new Array(count).fill(cid);
|
|
54
|
-
const sizes = new Array(count).fill(cid.bytes.byteLength);
|
|
55
|
-
common.assert.deepEqual(bufferWriter.calculateHeaderLength(sizes), encoder.createHeader(roots).byteLength);
|
|
56
|
-
});
|
|
57
|
-
it(`calculateHeaderLength(new Array(${ count }).fill(36))`, () => {
|
|
58
|
-
const roots = new Array(count).fill(cid);
|
|
59
|
-
const rootLengths = roots.map(c => c.bytes.byteLength);
|
|
60
|
-
common.assert.deepEqual(bufferWriter.calculateHeaderLength(rootLengths), encoder.createHeader(roots).byteLength);
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
it('estimate on large CIDs', () => {
|
|
64
|
-
const largeCID = multiformats.CID.parse(`bafkqbbac${ 'a'.repeat(416) }`);
|
|
65
|
-
common.assert.equal(bufferWriter.calculateHeaderLength([
|
|
66
|
-
cid.bytes.byteLength,
|
|
67
|
-
largeCID.bytes.byteLength
|
|
68
|
-
]), encoder.createHeader([
|
|
69
|
-
cid,
|
|
70
|
-
largeCID
|
|
71
|
-
]).byteLength);
|
|
72
|
-
});
|
|
73
|
-
it('estimate on large CIDs 2', () => {
|
|
74
|
-
const largeCID = multiformats.CID.createV1(raw__namespace.code, identity.identity.digest(new Uint8Array(512).fill(1)));
|
|
75
|
-
common.assert.equal(bufferWriter.calculateHeaderLength([
|
|
76
|
-
cid.bytes.byteLength,
|
|
77
|
-
largeCID.bytes.byteLength
|
|
78
|
-
]), encoder.createHeader([
|
|
79
|
-
cid,
|
|
80
|
-
largeCID
|
|
81
|
-
]).byteLength);
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
describe('writer', () => {
|
|
85
|
-
it('estimate header and write blocks', async () => {
|
|
86
|
-
const headerSize = bufferWriter.estimateHeaderLength(1);
|
|
87
|
-
const dataSize = 256;
|
|
88
|
-
const buffer = new ArrayBuffer(headerSize + dataSize);
|
|
89
|
-
const writer = bufferWriter.createWriter(buffer, { headerSize });
|
|
90
|
-
const b1 = await Block__namespace.encode({
|
|
91
|
-
value: { hello: 'world' },
|
|
92
|
-
codec: CBOR__namespace,
|
|
93
|
-
hasher: sha2.sha256
|
|
94
|
-
});
|
|
95
|
-
writer.write(b1);
|
|
96
|
-
const b2 = await Block__namespace.encode({
|
|
97
|
-
value: { bye: 'world' },
|
|
98
|
-
codec: CBOR__namespace,
|
|
99
|
-
hasher: sha2.sha256
|
|
100
|
-
});
|
|
101
|
-
writer.write(b2);
|
|
102
|
-
writer.addRoot(b1.cid);
|
|
103
|
-
const bytes = writer.close();
|
|
104
|
-
const reader$1 = await reader.CarReader.fromBytes(bytes);
|
|
105
|
-
common.assert.deepEqual(await reader$1.getRoots(), [b1.cid]);
|
|
106
|
-
common.assert.deepEqual(reader$1._blocks, [
|
|
107
|
-
{
|
|
108
|
-
cid: b1.cid,
|
|
109
|
-
bytes: b1.bytes
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
cid: b2.cid,
|
|
113
|
-
bytes: b2.bytes
|
|
114
|
-
}
|
|
115
|
-
]);
|
|
116
|
-
});
|
|
117
|
-
it('overestimate header', async () => {
|
|
118
|
-
const headerSize = bufferWriter.estimateHeaderLength(2);
|
|
119
|
-
const dataSize = 256;
|
|
120
|
-
const buffer = new ArrayBuffer(headerSize + dataSize);
|
|
121
|
-
const writer = bufferWriter.createWriter(buffer, { headerSize });
|
|
122
|
-
const b1 = await Block__namespace.encode({
|
|
123
|
-
value: { hello: 'world' },
|
|
124
|
-
codec: CBOR__namespace,
|
|
125
|
-
hasher: sha2.sha256
|
|
126
|
-
});
|
|
127
|
-
writer.write(b1);
|
|
128
|
-
const b2 = await Block__namespace.encode({
|
|
129
|
-
value: { bye: 'world' },
|
|
130
|
-
codec: CBOR__namespace,
|
|
131
|
-
hasher: sha2.sha256
|
|
132
|
-
});
|
|
133
|
-
writer.write(b2);
|
|
134
|
-
writer.addRoot(b1.cid);
|
|
135
|
-
common.assert.throws(() => writer.close(), /Header size was overestimate/);
|
|
136
|
-
const bytes = writer.close({ resize: true });
|
|
137
|
-
const reader$1 = await reader.CarReader.fromBytes(bytes);
|
|
138
|
-
common.assert.deepEqual(await reader$1.getRoots(), [b1.cid]);
|
|
139
|
-
common.assert.deepEqual(reader$1._blocks, [
|
|
140
|
-
{
|
|
141
|
-
cid: b1.cid,
|
|
142
|
-
bytes: b1.bytes
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
cid: b2.cid,
|
|
146
|
-
bytes: b2.bytes
|
|
147
|
-
}
|
|
148
|
-
]);
|
|
149
|
-
});
|
|
150
|
-
it('underestimate header', async () => {
|
|
151
|
-
const headerSize = bufferWriter.estimateHeaderLength(2);
|
|
152
|
-
const dataSize = 300;
|
|
153
|
-
const buffer = new ArrayBuffer(headerSize + dataSize);
|
|
154
|
-
const writer = bufferWriter.createWriter(buffer, { headerSize });
|
|
155
|
-
const b1 = await Block__namespace.encode({
|
|
156
|
-
value: { hello: 'world' },
|
|
157
|
-
codec: CBOR__namespace,
|
|
158
|
-
hasher: sha2.sha256
|
|
159
|
-
});
|
|
160
|
-
writer.write(b1);
|
|
161
|
-
writer.addRoot(b1.cid);
|
|
162
|
-
const b2 = await Block__namespace.encode({
|
|
163
|
-
value: { bye: 'world' },
|
|
164
|
-
codec: CBOR__namespace,
|
|
165
|
-
hasher: sha2.sha512
|
|
166
|
-
});
|
|
167
|
-
writer.write(b2);
|
|
168
|
-
common.assert.throws(() => writer.addRoot(b2.cid), /has no capacity/);
|
|
169
|
-
writer.addRoot(b2.cid, { resize: true });
|
|
170
|
-
const bytes = writer.close();
|
|
171
|
-
const reader$1 = await reader.CarReader.fromBytes(bytes);
|
|
172
|
-
common.assert.deepEqual(await reader$1.getRoots(), [
|
|
173
|
-
b1.cid,
|
|
174
|
-
b2.cid
|
|
175
|
-
]);
|
|
176
|
-
common.assert.deepEqual(reader$1._blocks, [
|
|
177
|
-
{
|
|
178
|
-
cid: b1.cid,
|
|
179
|
-
bytes: b1.bytes
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
cid: b2.cid,
|
|
183
|
-
bytes: b2.bytes
|
|
184
|
-
}
|
|
185
|
-
]);
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
it('has no space for the root', async () => {
|
|
189
|
-
const headerSize = bufferWriter.estimateHeaderLength(1);
|
|
190
|
-
const dataSize = 100;
|
|
191
|
-
const buffer = new ArrayBuffer(headerSize + dataSize);
|
|
192
|
-
const writer = bufferWriter.createWriter(buffer, { headerSize });
|
|
193
|
-
const b1 = await Block__namespace.encode({
|
|
194
|
-
value: { hello: 'world' },
|
|
195
|
-
codec: CBOR__namespace,
|
|
196
|
-
hasher: sha2.sha256
|
|
197
|
-
});
|
|
198
|
-
writer.write(b1);
|
|
199
|
-
writer.addRoot(b1.cid);
|
|
200
|
-
const b2 = await Block__namespace.encode({
|
|
201
|
-
value: { bye: 'world' },
|
|
202
|
-
codec: CBOR__namespace,
|
|
203
|
-
hasher: sha2.sha256
|
|
204
|
-
});
|
|
205
|
-
writer.write(b2);
|
|
206
|
-
common.assert.throws(() => writer.addRoot(b2.cid), /Buffer has no capacity for a new root/);
|
|
207
|
-
common.assert.throws(() => writer.addRoot(b2.cid, { resize: true }), /Buffer has no capacity for a new root/);
|
|
208
|
-
const bytes = writer.close();
|
|
209
|
-
const reader$1 = await reader.CarReader.fromBytes(bytes);
|
|
210
|
-
common.assert.deepEqual(await reader$1.getRoots(), [b1.cid]);
|
|
211
|
-
common.assert.deepEqual(reader$1._blocks, [
|
|
212
|
-
{
|
|
213
|
-
cid: b1.cid,
|
|
214
|
-
bytes: b1.bytes
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
cid: b2.cid,
|
|
218
|
-
bytes: b2.bytes
|
|
219
|
-
}
|
|
220
|
-
]);
|
|
221
|
-
});
|
|
222
|
-
it('has no space for the block', async () => {
|
|
223
|
-
const headerSize = bufferWriter.estimateHeaderLength(1);
|
|
224
|
-
const dataSize = 58;
|
|
225
|
-
const buffer = new ArrayBuffer(headerSize + dataSize);
|
|
226
|
-
const writer = bufferWriter.createWriter(buffer, { headerSize });
|
|
227
|
-
const b1 = await Block__namespace.encode({
|
|
228
|
-
value: { hello: 'world' },
|
|
229
|
-
codec: CBOR__namespace,
|
|
230
|
-
hasher: sha2.sha256
|
|
231
|
-
});
|
|
232
|
-
writer.write(b1);
|
|
233
|
-
writer.addRoot(b1.cid);
|
|
234
|
-
const b2 = await Block__namespace.encode({
|
|
235
|
-
value: { bye: 'world' },
|
|
236
|
-
codec: CBOR__namespace,
|
|
237
|
-
hasher: sha2.sha256
|
|
238
|
-
});
|
|
239
|
-
common.assert.throws(() => writer.write(b2), /Buffer has no capacity for this block/);
|
|
240
|
-
const bytes = writer.close();
|
|
241
|
-
const reader$1 = await reader.CarReader.fromBytes(bytes);
|
|
242
|
-
common.assert.deepEqual(await reader$1.getRoots(), [b1.cid]);
|
|
243
|
-
common.assert.deepEqual(reader$1._blocks, [{
|
|
244
|
-
cid: b1.cid,
|
|
245
|
-
bytes: b1.bytes
|
|
246
|
-
}]);
|
|
247
|
-
});
|
|
248
|
-
it('provide roots', async () => {
|
|
249
|
-
const b1 = await Block__namespace.encode({
|
|
250
|
-
value: { hello: 'world' },
|
|
251
|
-
codec: CBOR__namespace,
|
|
252
|
-
hasher: sha2.sha256
|
|
253
|
-
});
|
|
254
|
-
const b2 = await Block__namespace.encode({
|
|
255
|
-
value: { bye: 'world' },
|
|
256
|
-
codec: CBOR__namespace,
|
|
257
|
-
hasher: sha2.sha512
|
|
258
|
-
});
|
|
259
|
-
const buffer = new ArrayBuffer(300);
|
|
260
|
-
const writer = bufferWriter.createWriter(buffer, {
|
|
261
|
-
roots: [
|
|
262
|
-
b1.cid,
|
|
263
|
-
b2.cid
|
|
264
|
-
]
|
|
265
|
-
});
|
|
266
|
-
writer.write(b1);
|
|
267
|
-
writer.write(b2);
|
|
268
|
-
const bytes = writer.close();
|
|
269
|
-
const reader$1 = await reader.CarReader.fromBytes(bytes);
|
|
270
|
-
common.assert.deepEqual(await reader$1.getRoots(), [
|
|
271
|
-
b1.cid,
|
|
272
|
-
b2.cid
|
|
273
|
-
]);
|
|
274
|
-
common.assert.deepEqual(reader$1._blocks, [
|
|
275
|
-
{
|
|
276
|
-
cid: b1.cid,
|
|
277
|
-
bytes: b1.bytes
|
|
278
|
-
},
|
|
279
|
-
{
|
|
280
|
-
cid: b2.cid,
|
|
281
|
-
bytes: b2.bytes
|
|
282
|
-
}
|
|
283
|
-
]);
|
|
284
|
-
});
|
|
285
|
-
it('provide large CID root', async () => {
|
|
286
|
-
const bytes = new Uint8Array(512).fill(1);
|
|
287
|
-
const b1 = await Block__namespace.encode({
|
|
288
|
-
value: { hello: 'world' },
|
|
289
|
-
codec: CBOR__namespace,
|
|
290
|
-
hasher: sha2.sha256
|
|
291
|
-
});
|
|
292
|
-
const b2 = {
|
|
293
|
-
cid: multiformats.CID.createV1(raw__namespace.code, identity.identity.digest(bytes)),
|
|
294
|
-
bytes
|
|
295
|
-
};
|
|
296
|
-
const headerSize = CBOR__namespace.encode({
|
|
297
|
-
version: 1,
|
|
298
|
-
roots: [
|
|
299
|
-
b1.cid,
|
|
300
|
-
b2.cid
|
|
301
|
-
]
|
|
302
|
-
}).byteLength;
|
|
303
|
-
const bodySize = bufferWriter.blockLength(b1) + bufferWriter.blockLength(b2);
|
|
304
|
-
const varintSize = multiformats.varint.encodingLength(headerSize);
|
|
305
|
-
const writer = bufferWriter.createWriter(new ArrayBuffer(varintSize + headerSize + bodySize), {
|
|
306
|
-
roots: [
|
|
307
|
-
b1.cid,
|
|
308
|
-
b2.cid
|
|
309
|
-
]
|
|
310
|
-
});
|
|
311
|
-
writer.write(b1);
|
|
312
|
-
writer.write(b2);
|
|
313
|
-
const car = writer.close();
|
|
314
|
-
const reader$1 = await reader.CarReader.fromBytes(car);
|
|
315
|
-
common.assert.deepEqual(await reader$1.getRoots(), [
|
|
316
|
-
b1.cid,
|
|
317
|
-
b2.cid
|
|
318
|
-
]);
|
|
319
|
-
common.assert.deepEqual(reader$1._blocks, [
|
|
320
|
-
{
|
|
321
|
-
cid: b1.cid,
|
|
322
|
-
bytes: b1.bytes
|
|
323
|
-
},
|
|
324
|
-
{
|
|
325
|
-
cid: b2.cid,
|
|
326
|
-
bytes: b2.bytes
|
|
327
|
-
}
|
|
328
|
-
]);
|
|
329
|
-
});
|
|
330
|
-
});
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var multiformats = require('multiformats');
|
|
4
|
-
var CBOR = require('@ipld/dag-cbor');
|
|
5
|
-
var varint = require('varint');
|
|
6
|
-
var reader = require('../lib/reader.js');
|
|
7
|
-
var common = require('./common.js');
|
|
8
|
-
|
|
9
|
-
function makeHeader(block) {
|
|
10
|
-
const u = CBOR.encode(block);
|
|
11
|
-
const l = varint.encode(u.length);
|
|
12
|
-
const u2 = new Uint8Array(u.length + l.length);
|
|
13
|
-
u2.set(l, 0);
|
|
14
|
-
u2.set(u, l.length);
|
|
15
|
-
return u2;
|
|
16
|
-
}
|
|
17
|
-
describe('Misc errors', () => {
|
|
18
|
-
const buf = common.carBytes.slice();
|
|
19
|
-
it('decode errors', async () => {
|
|
20
|
-
const buf2 = new Uint8Array(buf.length);
|
|
21
|
-
buf2.set(buf, 0);
|
|
22
|
-
buf2[101] = 0;
|
|
23
|
-
await common.assert.isRejected(reader.CarReader.fromBytes(buf2), {
|
|
24
|
-
name: 'Error',
|
|
25
|
-
message: 'Unexpected CID version (0)'
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
it('bad version', async () => {
|
|
29
|
-
const buf2 = multiformats.bytes.fromHex('0aa16776657273696f6e03');
|
|
30
|
-
common.assert.strictEqual(multiformats.bytes.toHex(makeHeader({ version: 3 })), '0aa16776657273696f6e03');
|
|
31
|
-
await common.assert.isRejected(reader.CarReader.fromBytes(buf2), Error, 'Invalid CAR version: 3');
|
|
32
|
-
});
|
|
33
|
-
describe('bad header', async () => {
|
|
34
|
-
it('sanity check', async () => {
|
|
35
|
-
const buf2 = makeHeader({
|
|
36
|
-
version: 1,
|
|
37
|
-
roots: []
|
|
38
|
-
});
|
|
39
|
-
await common.assert.isFulfilled(reader.CarReader.fromBytes(buf2));
|
|
40
|
-
});
|
|
41
|
-
it('no \'version\' array', async () => {
|
|
42
|
-
const buf2 = makeHeader({ roots: [] });
|
|
43
|
-
await common.assert.isRejected(reader.CarReader.fromBytes(buf2), Error, 'Invalid CAR header format');
|
|
44
|
-
});
|
|
45
|
-
it('bad \'version\' type', async () => {
|
|
46
|
-
const buf2 = makeHeader({
|
|
47
|
-
version: '1',
|
|
48
|
-
roots: []
|
|
49
|
-
});
|
|
50
|
-
await common.assert.isRejected(reader.CarReader.fromBytes(buf2), Error, 'Invalid CAR header format');
|
|
51
|
-
});
|
|
52
|
-
it('no \'roots\' array', async () => {
|
|
53
|
-
const buf2 = makeHeader({ version: 1 });
|
|
54
|
-
await common.assert.isRejected(reader.CarReader.fromBytes(buf2), Error, 'Invalid CAR header format');
|
|
55
|
-
});
|
|
56
|
-
it('bad \'roots\' type', async () => {
|
|
57
|
-
const buf2 = makeHeader({
|
|
58
|
-
version: 1,
|
|
59
|
-
roots: {}
|
|
60
|
-
});
|
|
61
|
-
await common.assert.isRejected(reader.CarReader.fromBytes(buf2), Error, 'Invalid CAR header format');
|
|
62
|
-
});
|
|
63
|
-
it('extraneous properties', async () => {
|
|
64
|
-
const buf2 = makeHeader({
|
|
65
|
-
version: 1,
|
|
66
|
-
roots: [],
|
|
67
|
-
blip: true
|
|
68
|
-
});
|
|
69
|
-
await common.assert.isRejected(reader.CarReader.fromBytes(buf2), Error, 'Invalid CAR header format');
|
|
70
|
-
});
|
|
71
|
-
it('not an object', async () => {
|
|
72
|
-
const buf2 = makeHeader([
|
|
73
|
-
1,
|
|
74
|
-
[]
|
|
75
|
-
]);
|
|
76
|
-
await common.assert.isRejected(reader.CarReader.fromBytes(buf2), Error, 'Invalid CAR header format');
|
|
77
|
-
});
|
|
78
|
-
it('not an object', async () => {
|
|
79
|
-
const buf2 = makeHeader(null);
|
|
80
|
-
await common.assert.isRejected(reader.CarReader.fromBytes(buf2), Error, 'Invalid CAR header format');
|
|
81
|
-
});
|
|
82
|
-
it('recursive v2 header', async () => {
|
|
83
|
-
const v2Header = common.goCarV2Bytes.slice(0, 51);
|
|
84
|
-
const buf2 = new Uint8Array(51 * 2);
|
|
85
|
-
buf2.set(v2Header, 0);
|
|
86
|
-
buf2.set(v2Header, 51);
|
|
87
|
-
await common.assert.isRejected(reader.CarReader.fromBytes(buf2), Error, 'Invalid CAR version: 2 (expected 1)');
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
});
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var indexer = require('../lib/indexer.js');
|
|
4
|
-
var common = require('./common.js');
|
|
5
|
-
var verifyStoreReader = require('./verify-store-reader.js');
|
|
6
|
-
|
|
7
|
-
describe('CarIndexer fromBytes()', () => {
|
|
8
|
-
it('complete', async () => {
|
|
9
|
-
const indexer$1 = await indexer.CarIndexer.fromBytes(common.goCarBytes);
|
|
10
|
-
await verifyStoreReader.verifyRoots(indexer$1);
|
|
11
|
-
common.assert.strictEqual(indexer$1.version, 1);
|
|
12
|
-
const indexData = [];
|
|
13
|
-
for await (const index of indexer$1) {
|
|
14
|
-
indexData.push(index);
|
|
15
|
-
}
|
|
16
|
-
common.assert.deepStrictEqual(indexData, common.goCarIndex);
|
|
17
|
-
});
|
|
18
|
-
it('v2 complete', async () => {
|
|
19
|
-
const indexer$1 = await indexer.CarIndexer.fromBytes(common.goCarV2Bytes);
|
|
20
|
-
const roots = await indexer$1.getRoots();
|
|
21
|
-
common.assert.strictEqual(roots.length, 1);
|
|
22
|
-
common.assert.ok(common.goCarV2Roots[0].equals(roots[0]));
|
|
23
|
-
common.assert.strictEqual(indexer$1.version, 2);
|
|
24
|
-
const indexData = [];
|
|
25
|
-
for await (const index of indexer$1) {
|
|
26
|
-
indexData.push(index);
|
|
27
|
-
}
|
|
28
|
-
common.assert.deepStrictEqual(indexData, common.goCarV2Index);
|
|
29
|
-
});
|
|
30
|
-
it('bad argument', async () => {
|
|
31
|
-
for (const arg of [
|
|
32
|
-
true,
|
|
33
|
-
false,
|
|
34
|
-
null,
|
|
35
|
-
undefined,
|
|
36
|
-
'string',
|
|
37
|
-
100,
|
|
38
|
-
{ obj: 'nope' }
|
|
39
|
-
]) {
|
|
40
|
-
await common.assert.isRejected(indexer.CarIndexer.fromBytes(arg));
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
describe('CarIndexer fromIterable()', () => {
|
|
45
|
-
async function verifyIndexer(indexer) {
|
|
46
|
-
await verifyStoreReader.verifyRoots(indexer);
|
|
47
|
-
common.assert.strictEqual(indexer.version, 1);
|
|
48
|
-
const indexData = [];
|
|
49
|
-
for await (const index of indexer) {
|
|
50
|
-
indexData.push(index);
|
|
51
|
-
}
|
|
52
|
-
common.assert.deepStrictEqual(indexData, common.goCarIndex);
|
|
53
|
-
}
|
|
54
|
-
it('complete (single chunk)', async () => {
|
|
55
|
-
const indexer$1 = await indexer.CarIndexer.fromIterable(common.makeIterable(common.goCarBytes, common.goCarBytes.length));
|
|
56
|
-
return verifyIndexer(indexer$1);
|
|
57
|
-
});
|
|
58
|
-
it('complete (101-byte chunks)', async () => {
|
|
59
|
-
const indexer$1 = await indexer.CarIndexer.fromIterable(common.makeIterable(common.goCarBytes, 101));
|
|
60
|
-
return verifyIndexer(indexer$1);
|
|
61
|
-
});
|
|
62
|
-
it('complete (32-byte chunks)', async () => {
|
|
63
|
-
const indexer$1 = await indexer.CarIndexer.fromIterable(common.makeIterable(common.goCarBytes, 32));
|
|
64
|
-
return verifyIndexer(indexer$1);
|
|
65
|
-
});
|
|
66
|
-
it('bad argument', async () => {
|
|
67
|
-
for (const arg of [
|
|
68
|
-
new Uint8Array(0),
|
|
69
|
-
true,
|
|
70
|
-
false,
|
|
71
|
-
null,
|
|
72
|
-
undefined,
|
|
73
|
-
'string',
|
|
74
|
-
100,
|
|
75
|
-
{ obj: 'nope' }
|
|
76
|
-
]) {
|
|
77
|
-
await common.assert.isRejected(indexer.CarIndexer.fromIterable(arg));
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
});
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
require('../car.js');
|
|
4
|
-
var reader = require('../lib/reader.js');
|
|
5
|
-
var indexer = require('../lib/indexer.js');
|
|
6
|
-
var iterator = require('../lib/iterator.js');
|
|
7
|
-
var writer = require('../lib/writer.js');
|
|
8
|
-
var common = require('./common.js');
|
|
9
|
-
|
|
10
|
-
describe('Interface', () => {
|
|
11
|
-
it('exports match', () => {
|
|
12
|
-
common.assert.strictEqual(reader.CarReader, reader.CarReader);
|
|
13
|
-
common.assert.strictEqual(indexer.CarIndexer, indexer.CarIndexer);
|
|
14
|
-
common.assert.strictEqual(iterator.CarBlockIterator, iterator.CarBlockIterator);
|
|
15
|
-
common.assert.strictEqual(iterator.CarCIDIterator, iterator.CarCIDIterator);
|
|
16
|
-
common.assert.strictEqual(writer.CarWriter, writer.CarWriter);
|
|
17
|
-
});
|
|
18
|
-
it('browser exports', () => {
|
|
19
|
-
common.assert.strictEqual(reader.__browser, globalThis.process === undefined);
|
|
20
|
-
});
|
|
21
|
-
});
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var iterator = require('../lib/iterator.js');
|
|
4
|
-
var common = require('./common.js');
|
|
5
|
-
var verifyStoreReader = require('./verify-store-reader.js');
|
|
6
|
-
|
|
7
|
-
async function verifyBlockIterator(iter) {
|
|
8
|
-
await verifyStoreReader.verifyRoots(iter);
|
|
9
|
-
await verifyStoreReader.verifyBlocks(iter);
|
|
10
|
-
common.assert.strictEqual(iter.version, 1);
|
|
11
|
-
return iter;
|
|
12
|
-
}
|
|
13
|
-
async function verifyCIDIterator(iter) {
|
|
14
|
-
await verifyStoreReader.verifyRoots(iter);
|
|
15
|
-
await verifyStoreReader.verifyCids(iter);
|
|
16
|
-
common.assert.strictEqual(iter.version, 1);
|
|
17
|
-
return iter;
|
|
18
|
-
}
|
|
19
|
-
for (const type of [
|
|
20
|
-
'Block',
|
|
21
|
-
'CID'
|
|
22
|
-
]) {
|
|
23
|
-
describe(`Car${ type }Iterator`, () => {
|
|
24
|
-
it('fromBytes()', async () => {
|
|
25
|
-
if (type === 'Block') {
|
|
26
|
-
await verifyBlockIterator(await iterator.CarBlockIterator.fromBytes(common.carBytes));
|
|
27
|
-
} else {
|
|
28
|
-
await verifyCIDIterator(await iterator.CarCIDIterator.fromBytes(common.carBytes));
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
it('fromBytes() bad double read', async () => {
|
|
32
|
-
if (type === 'Block') {
|
|
33
|
-
const iter = await verifyBlockIterator(await iterator.CarBlockIterator.fromBytes(common.carBytes));
|
|
34
|
-
await common.assert.isRejected(verifyStoreReader.verifyBlocks(iter), /more than once/i);
|
|
35
|
-
} else {
|
|
36
|
-
const iter = await verifyCIDIterator(await iterator.CarCIDIterator.fromBytes(common.carBytes));
|
|
37
|
-
await common.assert.isRejected(verifyStoreReader.verifyCids(iter), /more than once/i);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
it('fromBytes() bad argument', async () => {
|
|
41
|
-
for (const arg of [
|
|
42
|
-
true,
|
|
43
|
-
false,
|
|
44
|
-
null,
|
|
45
|
-
undefined,
|
|
46
|
-
'string',
|
|
47
|
-
100,
|
|
48
|
-
{ obj: 'nope' }
|
|
49
|
-
]) {
|
|
50
|
-
await common.assert.isRejected((type === 'Block' ? iterator.CarBlockIterator : iterator.CarCIDIterator).fromBytes(arg));
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
it('fromIterable() bad argument', async () => {
|
|
54
|
-
for (const arg of [
|
|
55
|
-
new Uint8Array(0),
|
|
56
|
-
true,
|
|
57
|
-
false,
|
|
58
|
-
null,
|
|
59
|
-
undefined,
|
|
60
|
-
'string',
|
|
61
|
-
100,
|
|
62
|
-
{ obj: 'nope' }
|
|
63
|
-
]) {
|
|
64
|
-
await common.assert.isRejected((type === 'Block' ? iterator.CarBlockIterator : iterator.CarCIDIterator).fromIterable(arg));
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
for (const chunkSize of [
|
|
68
|
-
common.carBytes.length,
|
|
69
|
-
100,
|
|
70
|
-
64,
|
|
71
|
-
32
|
|
72
|
-
]) {
|
|
73
|
-
const chunkDesc = chunkSize === common.carBytes.length ? 'single chunk' : `${ chunkSize } bytes`;
|
|
74
|
-
it(`fromIterable() blocks (${ chunkDesc })`, async () => {
|
|
75
|
-
if (type === 'Block') {
|
|
76
|
-
await verifyBlockIterator(await iterator.CarBlockIterator.fromIterable(common.makeIterable(common.carBytes, chunkSize)));
|
|
77
|
-
} else {
|
|
78
|
-
await verifyCIDIterator(await iterator.CarCIDIterator.fromIterable(common.makeIterable(common.carBytes, chunkSize)));
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
}
|