@ipld/car 4.1.5 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +4 -4
- 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/cjs/car-browser.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var readerBrowser = require('./lib/reader-browser.js');
|
|
6
|
-
var indexer = require('./lib/indexer.js');
|
|
7
|
-
var iterator = require('./lib/iterator.js');
|
|
8
|
-
var writerBrowser = require('./lib/writer-browser.js');
|
|
9
|
-
var indexedReaderBrowser = require('./lib/indexed-reader-browser.js');
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
exports.CarReader = readerBrowser.CarReader;
|
|
14
|
-
exports.CarIndexer = indexer.CarIndexer;
|
|
15
|
-
exports.CarBlockIterator = iterator.CarBlockIterator;
|
|
16
|
-
exports.CarCIDIterator = iterator.CarCIDIterator;
|
|
17
|
-
exports.CarWriter = writerBrowser.CarWriter;
|
|
18
|
-
exports.CarIndexedReader = indexedReaderBrowser.CarIndexedReader;
|
package/cjs/car.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var reader = require('./lib/reader.js');
|
|
6
|
-
var indexer = require('./lib/indexer.js');
|
|
7
|
-
var iterator = require('./lib/iterator.js');
|
|
8
|
-
var writer = require('./lib/writer.js');
|
|
9
|
-
var indexedReader = require('./lib/indexed-reader.js');
|
|
10
|
-
var bufferWriter = require('./lib/buffer-writer.js');
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
exports.CarReader = reader.CarReader;
|
|
15
|
-
exports.CarIndexer = indexer.CarIndexer;
|
|
16
|
-
exports.CarBlockIterator = iterator.CarBlockIterator;
|
|
17
|
-
exports.CarCIDIterator = iterator.CarCIDIterator;
|
|
18
|
-
exports.CarWriter = writer.CarWriter;
|
|
19
|
-
exports.CarIndexedReader = indexedReader.CarIndexedReader;
|
|
20
|
-
exports.CarBufferWriter = bufferWriter;
|
package/cjs/lib/buffer-writer.js
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var varint = require('varint');
|
|
6
|
-
var cborg = require('cborg');
|
|
7
|
-
var length = require('cborg/length');
|
|
8
|
-
var CBOR = require('@ipld/dag-cbor');
|
|
9
|
-
|
|
10
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
11
|
-
|
|
12
|
-
function _interopNamespace(e) {
|
|
13
|
-
if (e && e.__esModule) return e;
|
|
14
|
-
var n = Object.create(null);
|
|
15
|
-
if (e) {
|
|
16
|
-
Object.keys(e).forEach(function (k) {
|
|
17
|
-
if (k !== 'default') {
|
|
18
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
19
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
20
|
-
enumerable: true,
|
|
21
|
-
get: function () { return e[k]; }
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
n["default"] = e;
|
|
27
|
-
return Object.freeze(n);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
var varint__default = /*#__PURE__*/_interopDefaultLegacy(varint);
|
|
31
|
-
var CBOR__namespace = /*#__PURE__*/_interopNamespace(CBOR);
|
|
32
|
-
|
|
33
|
-
class CarBufferWriter {
|
|
34
|
-
constructor(bytes, headerSize) {
|
|
35
|
-
this.bytes = bytes;
|
|
36
|
-
this.byteOffset = headerSize;
|
|
37
|
-
this.roots = [];
|
|
38
|
-
this.headerSize = headerSize;
|
|
39
|
-
}
|
|
40
|
-
addRoot(root, options) {
|
|
41
|
-
addRoot(this, root, options);
|
|
42
|
-
return this;
|
|
43
|
-
}
|
|
44
|
-
write(block) {
|
|
45
|
-
addBlock(this, block);
|
|
46
|
-
return this;
|
|
47
|
-
}
|
|
48
|
-
close(options) {
|
|
49
|
-
return close(this, options);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const addRoot = (writer, root, options = {}) => {
|
|
53
|
-
const {
|
|
54
|
-
resize = false
|
|
55
|
-
} = options;
|
|
56
|
-
const {bytes, headerSize, byteOffset, roots} = writer;
|
|
57
|
-
writer.roots.push(root);
|
|
58
|
-
const size = headerLength(writer);
|
|
59
|
-
if (size > headerSize) {
|
|
60
|
-
if (size - headerSize + byteOffset < bytes.byteLength) {
|
|
61
|
-
if (resize) {
|
|
62
|
-
resizeHeader(writer, size);
|
|
63
|
-
} else {
|
|
64
|
-
roots.pop();
|
|
65
|
-
throw new RangeError(`Header of size ${ headerSize } has no capacity for new root ${ root }.
|
|
66
|
-
However there is a space in the buffer and you could call addRoot(root, { resize: root }) to resize header to make a space for this root.`);
|
|
67
|
-
}
|
|
68
|
-
} else {
|
|
69
|
-
roots.pop();
|
|
70
|
-
throw new RangeError(`Buffer has no capacity for a new root ${ root }`);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
const blockLength = ({cid, bytes}) => {
|
|
75
|
-
const size = cid.bytes.byteLength + bytes.byteLength;
|
|
76
|
-
return varint__default["default"].encodingLength(size) + size;
|
|
77
|
-
};
|
|
78
|
-
const addBlock = (writer, {cid, bytes}) => {
|
|
79
|
-
const byteLength = cid.bytes.byteLength + bytes.byteLength;
|
|
80
|
-
const size = varint__default["default"].encode(byteLength);
|
|
81
|
-
if (writer.byteOffset + size.length + byteLength > writer.bytes.byteLength) {
|
|
82
|
-
throw new RangeError('Buffer has no capacity for this block');
|
|
83
|
-
} else {
|
|
84
|
-
writeBytes(writer, size);
|
|
85
|
-
writeBytes(writer, cid.bytes);
|
|
86
|
-
writeBytes(writer, bytes);
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
const close = (writer, options = {}) => {
|
|
90
|
-
const {
|
|
91
|
-
resize = false
|
|
92
|
-
} = options;
|
|
93
|
-
const {roots, bytes, byteOffset, headerSize} = writer;
|
|
94
|
-
const headerBytes = CBOR__namespace.encode({
|
|
95
|
-
version: 1,
|
|
96
|
-
roots
|
|
97
|
-
});
|
|
98
|
-
const varintBytes = varint__default["default"].encode(headerBytes.length);
|
|
99
|
-
const size = varintBytes.length + headerBytes.byteLength;
|
|
100
|
-
const offset = headerSize - size;
|
|
101
|
-
if (offset === 0) {
|
|
102
|
-
writeHeader(writer, varintBytes, headerBytes);
|
|
103
|
-
return bytes.subarray(0, byteOffset);
|
|
104
|
-
} else if (resize) {
|
|
105
|
-
resizeHeader(writer, size);
|
|
106
|
-
writeHeader(writer, varintBytes, headerBytes);
|
|
107
|
-
return bytes.subarray(0, writer.byteOffset);
|
|
108
|
-
} else {
|
|
109
|
-
throw new RangeError(`Header size was overestimated.
|
|
110
|
-
You can use close({ resize: true }) to resize header`);
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
const resizeHeader = (writer, byteLength) => {
|
|
114
|
-
const {bytes, headerSize} = writer;
|
|
115
|
-
bytes.set(bytes.subarray(headerSize, writer.byteOffset), byteLength);
|
|
116
|
-
writer.byteOffset += byteLength - headerSize;
|
|
117
|
-
writer.headerSize = byteLength;
|
|
118
|
-
};
|
|
119
|
-
const writeBytes = (writer, bytes) => {
|
|
120
|
-
writer.bytes.set(bytes, writer.byteOffset);
|
|
121
|
-
writer.byteOffset += bytes.length;
|
|
122
|
-
};
|
|
123
|
-
const writeHeader = ({bytes}, varint, header) => {
|
|
124
|
-
bytes.set(varint);
|
|
125
|
-
bytes.set(header, varint.length);
|
|
126
|
-
};
|
|
127
|
-
const headerPreludeTokens = [
|
|
128
|
-
new cborg.Token(cborg.Type.map, 2),
|
|
129
|
-
new cborg.Token(cborg.Type.string, 'version'),
|
|
130
|
-
new cborg.Token(cborg.Type.uint, 1),
|
|
131
|
-
new cborg.Token(cborg.Type.string, 'roots')
|
|
132
|
-
];
|
|
133
|
-
const CID_TAG = new cborg.Token(cborg.Type.tag, 42);
|
|
134
|
-
const calculateHeaderLength = rootLengths => {
|
|
135
|
-
const tokens = [...headerPreludeTokens];
|
|
136
|
-
tokens.push(new cborg.Token(cborg.Type.array, rootLengths.length));
|
|
137
|
-
for (const rootLength of rootLengths) {
|
|
138
|
-
tokens.push(CID_TAG);
|
|
139
|
-
tokens.push(new cborg.Token(cborg.Type.bytes, { length: rootLength + 1 }));
|
|
140
|
-
}
|
|
141
|
-
const length$1 = length.tokensToLength(tokens);
|
|
142
|
-
return varint__default["default"].encodingLength(length$1) + length$1;
|
|
143
|
-
};
|
|
144
|
-
const headerLength = ({roots}) => calculateHeaderLength(roots.map(cid => cid.bytes.byteLength));
|
|
145
|
-
const estimateHeaderLength = (rootCount, rootByteLength = 36) => calculateHeaderLength(new Array(rootCount).fill(rootByteLength));
|
|
146
|
-
const createWriter = (buffer, options = {}) => {
|
|
147
|
-
const {roots = [], byteOffset = 0, byteLength = buffer.byteLength, headerSize = headerLength({ roots })} = options;
|
|
148
|
-
const bytes = new Uint8Array(buffer, byteOffset, byteLength);
|
|
149
|
-
const writer = new CarBufferWriter(bytes, headerSize);
|
|
150
|
-
for (const root of roots) {
|
|
151
|
-
writer.addRoot(root);
|
|
152
|
-
}
|
|
153
|
-
return writer;
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
exports.addBlock = addBlock;
|
|
157
|
-
exports.addRoot = addRoot;
|
|
158
|
-
exports.blockLength = blockLength;
|
|
159
|
-
exports.calculateHeaderLength = calculateHeaderLength;
|
|
160
|
-
exports.close = close;
|
|
161
|
-
exports.createWriter = createWriter;
|
|
162
|
-
exports.estimateHeaderLength = estimateHeaderLength;
|
|
163
|
-
exports.headerLength = headerLength;
|
|
164
|
-
exports.resizeHeader = resizeHeader;
|
package/cjs/lib/decoder.js
DELETED
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var varint = require('varint');
|
|
6
|
-
var cid = require('multiformats/cid');
|
|
7
|
-
var Digest = require('multiformats/hashes/digest');
|
|
8
|
-
var CBOR = require('@ipld/dag-cbor');
|
|
9
|
-
var headerValidator = require('./header-validator.js');
|
|
10
|
-
|
|
11
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
|
-
|
|
13
|
-
function _interopNamespace(e) {
|
|
14
|
-
if (e && e.__esModule) return e;
|
|
15
|
-
var n = Object.create(null);
|
|
16
|
-
if (e) {
|
|
17
|
-
Object.keys(e).forEach(function (k) {
|
|
18
|
-
if (k !== 'default') {
|
|
19
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
20
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
get: function () { return e[k]; }
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
n["default"] = e;
|
|
28
|
-
return Object.freeze(n);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
var varint__default = /*#__PURE__*/_interopDefaultLegacy(varint);
|
|
32
|
-
var Digest__namespace = /*#__PURE__*/_interopNamespace(Digest);
|
|
33
|
-
|
|
34
|
-
const CIDV0_BYTES = {
|
|
35
|
-
SHA2_256: 18,
|
|
36
|
-
LENGTH: 32,
|
|
37
|
-
DAG_PB: 112
|
|
38
|
-
};
|
|
39
|
-
const V2_HEADER_LENGTH = 16 + 8 + 8 + 8;
|
|
40
|
-
async function readVarint(reader) {
|
|
41
|
-
const bytes = await reader.upTo(8);
|
|
42
|
-
if (!bytes.length) {
|
|
43
|
-
throw new Error('Unexpected end of data');
|
|
44
|
-
}
|
|
45
|
-
const i = varint__default["default"].decode(bytes);
|
|
46
|
-
reader.seek(varint__default["default"].decode.bytes);
|
|
47
|
-
return i;
|
|
48
|
-
}
|
|
49
|
-
async function readV2Header(reader) {
|
|
50
|
-
const bytes = await reader.exactly(V2_HEADER_LENGTH);
|
|
51
|
-
const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
52
|
-
let offset = 0;
|
|
53
|
-
const header = {
|
|
54
|
-
version: 2,
|
|
55
|
-
characteristics: [
|
|
56
|
-
dv.getBigUint64(offset, true),
|
|
57
|
-
dv.getBigUint64(offset += 8, true)
|
|
58
|
-
],
|
|
59
|
-
dataOffset: Number(dv.getBigUint64(offset += 8, true)),
|
|
60
|
-
dataSize: Number(dv.getBigUint64(offset += 8, true)),
|
|
61
|
-
indexOffset: Number(dv.getBigUint64(offset += 8, true))
|
|
62
|
-
};
|
|
63
|
-
reader.seek(V2_HEADER_LENGTH);
|
|
64
|
-
return header;
|
|
65
|
-
}
|
|
66
|
-
async function readHeader(reader, strictVersion) {
|
|
67
|
-
const length = await readVarint(reader);
|
|
68
|
-
if (length === 0) {
|
|
69
|
-
throw new Error('Invalid CAR header (zero length)');
|
|
70
|
-
}
|
|
71
|
-
const header = await reader.exactly(length);
|
|
72
|
-
reader.seek(length);
|
|
73
|
-
const block = CBOR.decode(header);
|
|
74
|
-
if (!headerValidator.CarHeader(block)) {
|
|
75
|
-
throw new Error('Invalid CAR header format');
|
|
76
|
-
}
|
|
77
|
-
if (block.version !== 1 && block.version !== 2 || strictVersion !== undefined && block.version !== strictVersion) {
|
|
78
|
-
throw new Error(`Invalid CAR version: ${ block.version }${ strictVersion !== undefined ? ` (expected ${ strictVersion })` : '' }`);
|
|
79
|
-
}
|
|
80
|
-
const hasRoots = Array.isArray(block.roots);
|
|
81
|
-
if (block.version === 1 && !hasRoots || block.version === 2 && hasRoots) {
|
|
82
|
-
throw new Error('Invalid CAR header format');
|
|
83
|
-
}
|
|
84
|
-
if (block.version === 1) {
|
|
85
|
-
return block;
|
|
86
|
-
}
|
|
87
|
-
const v2Header = await readV2Header(reader);
|
|
88
|
-
reader.seek(v2Header.dataOffset - reader.pos);
|
|
89
|
-
const v1Header = await readHeader(reader, 1);
|
|
90
|
-
return Object.assign(v1Header, v2Header);
|
|
91
|
-
}
|
|
92
|
-
async function readMultihash(reader) {
|
|
93
|
-
const bytes = await reader.upTo(8);
|
|
94
|
-
varint__default["default"].decode(bytes);
|
|
95
|
-
const codeLength = varint__default["default"].decode.bytes;
|
|
96
|
-
const length = varint__default["default"].decode(bytes.subarray(varint__default["default"].decode.bytes));
|
|
97
|
-
const lengthLength = varint__default["default"].decode.bytes;
|
|
98
|
-
const mhLength = codeLength + lengthLength + length;
|
|
99
|
-
const multihash = await reader.exactly(mhLength);
|
|
100
|
-
reader.seek(mhLength);
|
|
101
|
-
return multihash;
|
|
102
|
-
}
|
|
103
|
-
async function readCid(reader) {
|
|
104
|
-
const first = await reader.exactly(2);
|
|
105
|
-
if (first[0] === CIDV0_BYTES.SHA2_256 && first[1] === CIDV0_BYTES.LENGTH) {
|
|
106
|
-
const bytes = await reader.exactly(34);
|
|
107
|
-
reader.seek(34);
|
|
108
|
-
const multihash = Digest__namespace.decode(bytes);
|
|
109
|
-
return cid.CID.create(0, CIDV0_BYTES.DAG_PB, multihash);
|
|
110
|
-
}
|
|
111
|
-
const version = await readVarint(reader);
|
|
112
|
-
if (version !== 1) {
|
|
113
|
-
throw new Error(`Unexpected CID version (${ version })`);
|
|
114
|
-
}
|
|
115
|
-
const codec = await readVarint(reader);
|
|
116
|
-
const bytes = await readMultihash(reader);
|
|
117
|
-
const multihash = Digest__namespace.decode(bytes);
|
|
118
|
-
return cid.CID.create(version, codec, multihash);
|
|
119
|
-
}
|
|
120
|
-
async function readBlockHead(reader) {
|
|
121
|
-
const start = reader.pos;
|
|
122
|
-
let length = await readVarint(reader);
|
|
123
|
-
if (length === 0) {
|
|
124
|
-
throw new Error('Invalid CAR section (zero length)');
|
|
125
|
-
}
|
|
126
|
-
length += reader.pos - start;
|
|
127
|
-
const cid = await readCid(reader);
|
|
128
|
-
const blockLength = length - Number(reader.pos - start);
|
|
129
|
-
return {
|
|
130
|
-
cid,
|
|
131
|
-
length,
|
|
132
|
-
blockLength
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
async function readBlock(reader) {
|
|
136
|
-
const {cid, blockLength} = await readBlockHead(reader);
|
|
137
|
-
const bytes = await reader.exactly(blockLength);
|
|
138
|
-
reader.seek(blockLength);
|
|
139
|
-
return {
|
|
140
|
-
bytes,
|
|
141
|
-
cid
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
async function readBlockIndex(reader) {
|
|
145
|
-
const offset = reader.pos;
|
|
146
|
-
const {cid, length, blockLength} = await readBlockHead(reader);
|
|
147
|
-
const index = {
|
|
148
|
-
cid,
|
|
149
|
-
length,
|
|
150
|
-
blockLength,
|
|
151
|
-
offset,
|
|
152
|
-
blockOffset: reader.pos
|
|
153
|
-
};
|
|
154
|
-
reader.seek(index.blockLength);
|
|
155
|
-
return index;
|
|
156
|
-
}
|
|
157
|
-
function createDecoder(reader) {
|
|
158
|
-
const headerPromise = (async () => {
|
|
159
|
-
const header = await readHeader(reader);
|
|
160
|
-
if (header.version === 2) {
|
|
161
|
-
const v1length = reader.pos - header.dataOffset;
|
|
162
|
-
reader = limitReader(reader, header.dataSize - v1length);
|
|
163
|
-
}
|
|
164
|
-
return header;
|
|
165
|
-
})();
|
|
166
|
-
return {
|
|
167
|
-
header: () => headerPromise,
|
|
168
|
-
async *blocks() {
|
|
169
|
-
await headerPromise;
|
|
170
|
-
while ((await reader.upTo(8)).length > 0) {
|
|
171
|
-
yield await readBlock(reader);
|
|
172
|
-
}
|
|
173
|
-
},
|
|
174
|
-
async *blocksIndex() {
|
|
175
|
-
await headerPromise;
|
|
176
|
-
while ((await reader.upTo(8)).length > 0) {
|
|
177
|
-
yield await readBlockIndex(reader);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
function bytesReader(bytes) {
|
|
183
|
-
let pos = 0;
|
|
184
|
-
return {
|
|
185
|
-
async upTo(length) {
|
|
186
|
-
return bytes.subarray(pos, pos + Math.min(length, bytes.length - pos));
|
|
187
|
-
},
|
|
188
|
-
async exactly(length) {
|
|
189
|
-
if (length > bytes.length - pos) {
|
|
190
|
-
throw new Error('Unexpected end of data');
|
|
191
|
-
}
|
|
192
|
-
return bytes.subarray(pos, pos + length);
|
|
193
|
-
},
|
|
194
|
-
seek(length) {
|
|
195
|
-
pos += length;
|
|
196
|
-
},
|
|
197
|
-
get pos() {
|
|
198
|
-
return pos;
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
function chunkReader(readChunk) {
|
|
203
|
-
let pos = 0;
|
|
204
|
-
let have = 0;
|
|
205
|
-
let offset = 0;
|
|
206
|
-
let currentChunk = new Uint8Array(0);
|
|
207
|
-
const read = async length => {
|
|
208
|
-
have = currentChunk.length - offset;
|
|
209
|
-
const bufa = [currentChunk.subarray(offset)];
|
|
210
|
-
while (have < length) {
|
|
211
|
-
const chunk = await readChunk();
|
|
212
|
-
if (chunk == null) {
|
|
213
|
-
break;
|
|
214
|
-
}
|
|
215
|
-
if (have < 0) {
|
|
216
|
-
if (chunk.length > have) {
|
|
217
|
-
bufa.push(chunk.subarray(-have));
|
|
218
|
-
}
|
|
219
|
-
} else {
|
|
220
|
-
bufa.push(chunk);
|
|
221
|
-
}
|
|
222
|
-
have += chunk.length;
|
|
223
|
-
}
|
|
224
|
-
currentChunk = new Uint8Array(bufa.reduce((p, c) => p + c.length, 0));
|
|
225
|
-
let off = 0;
|
|
226
|
-
for (const b of bufa) {
|
|
227
|
-
currentChunk.set(b, off);
|
|
228
|
-
off += b.length;
|
|
229
|
-
}
|
|
230
|
-
offset = 0;
|
|
231
|
-
};
|
|
232
|
-
return {
|
|
233
|
-
async upTo(length) {
|
|
234
|
-
if (currentChunk.length - offset < length) {
|
|
235
|
-
await read(length);
|
|
236
|
-
}
|
|
237
|
-
return currentChunk.subarray(offset, offset + Math.min(currentChunk.length - offset, length));
|
|
238
|
-
},
|
|
239
|
-
async exactly(length) {
|
|
240
|
-
if (currentChunk.length - offset < length) {
|
|
241
|
-
await read(length);
|
|
242
|
-
}
|
|
243
|
-
if (currentChunk.length - offset < length) {
|
|
244
|
-
throw new Error('Unexpected end of data');
|
|
245
|
-
}
|
|
246
|
-
return currentChunk.subarray(offset, offset + length);
|
|
247
|
-
},
|
|
248
|
-
seek(length) {
|
|
249
|
-
pos += length;
|
|
250
|
-
offset += length;
|
|
251
|
-
},
|
|
252
|
-
get pos() {
|
|
253
|
-
return pos;
|
|
254
|
-
}
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
function asyncIterableReader(asyncIterable) {
|
|
258
|
-
const iterator = asyncIterable[Symbol.asyncIterator]();
|
|
259
|
-
async function readChunk() {
|
|
260
|
-
const next = await iterator.next();
|
|
261
|
-
if (next.done) {
|
|
262
|
-
return null;
|
|
263
|
-
}
|
|
264
|
-
return next.value;
|
|
265
|
-
}
|
|
266
|
-
return chunkReader(readChunk);
|
|
267
|
-
}
|
|
268
|
-
function limitReader(reader, byteLimit) {
|
|
269
|
-
let bytesRead = 0;
|
|
270
|
-
return {
|
|
271
|
-
async upTo(length) {
|
|
272
|
-
let bytes = await reader.upTo(length);
|
|
273
|
-
if (bytes.length + bytesRead > byteLimit) {
|
|
274
|
-
bytes = bytes.subarray(0, byteLimit - bytesRead);
|
|
275
|
-
}
|
|
276
|
-
return bytes;
|
|
277
|
-
},
|
|
278
|
-
async exactly(length) {
|
|
279
|
-
const bytes = await reader.exactly(length);
|
|
280
|
-
if (bytes.length + bytesRead > byteLimit) {
|
|
281
|
-
throw new Error('Unexpected end of data');
|
|
282
|
-
}
|
|
283
|
-
return bytes;
|
|
284
|
-
},
|
|
285
|
-
seek(length) {
|
|
286
|
-
bytesRead += length;
|
|
287
|
-
reader.seek(length);
|
|
288
|
-
},
|
|
289
|
-
get pos() {
|
|
290
|
-
return reader.pos;
|
|
291
|
-
}
|
|
292
|
-
};
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
exports.asyncIterableReader = asyncIterableReader;
|
|
296
|
-
exports.bytesReader = bytesReader;
|
|
297
|
-
exports.chunkReader = chunkReader;
|
|
298
|
-
exports.createDecoder = createDecoder;
|
|
299
|
-
exports.limitReader = limitReader;
|
|
300
|
-
exports.readBlockHead = readBlockHead;
|
|
301
|
-
exports.readHeader = readHeader;
|
package/cjs/lib/encoder.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var varint = require('varint');
|
|
6
|
-
var CBOR = require('@ipld/dag-cbor');
|
|
7
|
-
|
|
8
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
9
|
-
|
|
10
|
-
var varint__default = /*#__PURE__*/_interopDefaultLegacy(varint);
|
|
11
|
-
|
|
12
|
-
function createHeader(roots) {
|
|
13
|
-
const headerBytes = CBOR.encode({
|
|
14
|
-
version: 1,
|
|
15
|
-
roots
|
|
16
|
-
});
|
|
17
|
-
const varintBytes = varint__default["default"].encode(headerBytes.length);
|
|
18
|
-
const header = new Uint8Array(varintBytes.length + headerBytes.length);
|
|
19
|
-
header.set(varintBytes, 0);
|
|
20
|
-
header.set(headerBytes, varintBytes.length);
|
|
21
|
-
return header;
|
|
22
|
-
}
|
|
23
|
-
function createEncoder(writer) {
|
|
24
|
-
return {
|
|
25
|
-
async setRoots(roots) {
|
|
26
|
-
const bytes = createHeader(roots);
|
|
27
|
-
await writer.write(bytes);
|
|
28
|
-
},
|
|
29
|
-
async writeBlock(block) {
|
|
30
|
-
const {cid, bytes} = block;
|
|
31
|
-
await writer.write(new Uint8Array(varint__default["default"].encode(cid.bytes.length + bytes.length)));
|
|
32
|
-
await writer.write(cid.bytes);
|
|
33
|
-
if (bytes.length) {
|
|
34
|
-
await writer.write(bytes);
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
async close() {
|
|
38
|
-
await writer.end();
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
exports.createEncoder = createEncoder;
|
|
44
|
-
exports.createHeader = createHeader;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
const Kinds = {
|
|
6
|
-
Null: obj => obj === null,
|
|
7
|
-
Int: obj => Number.isInteger(obj),
|
|
8
|
-
Float: obj => typeof obj === 'number' && Number.isFinite(obj),
|
|
9
|
-
String: obj => typeof obj === 'string',
|
|
10
|
-
Bool: obj => typeof obj === 'boolean',
|
|
11
|
-
Bytes: obj => obj instanceof Uint8Array,
|
|
12
|
-
Link: obj => !Kinds.Null(obj) && typeof obj === 'object' && obj.asCID === obj,
|
|
13
|
-
List: obj => Array.isArray(obj),
|
|
14
|
-
Map: obj => !Kinds.Null(obj) && typeof obj === 'object' && obj.asCID !== obj && !Kinds.List(obj) && !Kinds.Bytes(obj)
|
|
15
|
-
};
|
|
16
|
-
const Types = {
|
|
17
|
-
Int: Kinds.Int,
|
|
18
|
-
'CarHeader > version': obj => Types.Int(obj),
|
|
19
|
-
'CarHeader > roots (anon) > valueType (anon)': Kinds.Link,
|
|
20
|
-
'CarHeader > roots (anon)': obj => Kinds.List(obj) && Array.prototype.every.call(obj, Types['CarHeader > roots (anon) > valueType (anon)']),
|
|
21
|
-
'CarHeader > roots': obj => Types['CarHeader > roots (anon)'](obj),
|
|
22
|
-
CarHeader: obj => {
|
|
23
|
-
const keys = obj && Object.keys(obj);
|
|
24
|
-
return Kinds.Map(obj) && ['version'].every(k => keys.includes(k)) && Object.entries(obj).every(([name, value]) => Types['CarHeader > ' + name] && Types['CarHeader > ' + name](value));
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
const CarHeader = Types.CarHeader;
|
|
28
|
-
|
|
29
|
-
exports.CarHeader = CarHeader;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
class CarIndexedReader {
|
|
6
|
-
static async fromFile() {
|
|
7
|
-
throw new Error('Unsupported in this environment');
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
const __browser = true;
|
|
11
|
-
|
|
12
|
-
exports.CarIndexedReader = CarIndexedReader;
|
|
13
|
-
exports.__browser = __browser;
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var fs = require('fs');
|
|
6
|
-
var stream = require('stream');
|
|
7
|
-
var cid = require('multiformats/cid');
|
|
8
|
-
var indexer = require('./indexer.js');
|
|
9
|
-
var reader = require('./reader.js');
|
|
10
|
-
|
|
11
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
|
-
|
|
13
|
-
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
14
|
-
|
|
15
|
-
class CarIndexedReader {
|
|
16
|
-
constructor(version, path, roots, index, order) {
|
|
17
|
-
this._version = version;
|
|
18
|
-
this._path = path;
|
|
19
|
-
this._roots = roots;
|
|
20
|
-
this._index = index;
|
|
21
|
-
this._order = order;
|
|
22
|
-
this._fd = null;
|
|
23
|
-
}
|
|
24
|
-
get version() {
|
|
25
|
-
return this._version;
|
|
26
|
-
}
|
|
27
|
-
async getRoots() {
|
|
28
|
-
return this._roots;
|
|
29
|
-
}
|
|
30
|
-
async has(key) {
|
|
31
|
-
return this._index.has(key.toString());
|
|
32
|
-
}
|
|
33
|
-
async get(key) {
|
|
34
|
-
const blockIndex = this._index.get(key.toString());
|
|
35
|
-
if (!blockIndex) {
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
|
-
if (!this._fd) {
|
|
39
|
-
this._fd = await fs__default["default"].promises.open(this._path, 'r');
|
|
40
|
-
}
|
|
41
|
-
const readIndex = {
|
|
42
|
-
cid: key,
|
|
43
|
-
length: 0,
|
|
44
|
-
offset: 0,
|
|
45
|
-
blockLength: blockIndex.blockLength,
|
|
46
|
-
blockOffset: blockIndex.blockOffset
|
|
47
|
-
};
|
|
48
|
-
return reader.CarReader.readRaw(this._fd, readIndex);
|
|
49
|
-
}
|
|
50
|
-
async *blocks() {
|
|
51
|
-
for (const cidStr of this._order) {
|
|
52
|
-
const block = await this.get(cid.CID.parse(cidStr));
|
|
53
|
-
if (!block) {
|
|
54
|
-
throw new Error('Unexpected internal error');
|
|
55
|
-
}
|
|
56
|
-
yield block;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
async *cids() {
|
|
60
|
-
for (const cidStr of this._order) {
|
|
61
|
-
yield cid.CID.parse(cidStr);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
async close() {
|
|
65
|
-
if (this._fd) {
|
|
66
|
-
return this._fd.close();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
static async fromFile(path) {
|
|
70
|
-
if (typeof path !== 'string') {
|
|
71
|
-
throw new TypeError('fromFile() requires a file path string');
|
|
72
|
-
}
|
|
73
|
-
const iterable = await indexer.CarIndexer.fromIterable(stream.Readable.from(fs__default["default"].createReadStream(path)));
|
|
74
|
-
const index = new Map();
|
|
75
|
-
const order = [];
|
|
76
|
-
for await (const {cid, blockLength, blockOffset} of iterable) {
|
|
77
|
-
const cidStr = cid.toString();
|
|
78
|
-
index.set(cidStr, {
|
|
79
|
-
blockLength,
|
|
80
|
-
blockOffset
|
|
81
|
-
});
|
|
82
|
-
order.push(cidStr);
|
|
83
|
-
}
|
|
84
|
-
return new CarIndexedReader(iterable.version, path, await iterable.getRoots(), index, order);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
const __browser = false;
|
|
88
|
-
|
|
89
|
-
exports.CarIndexedReader = CarIndexedReader;
|
|
90
|
-
exports.__browser = __browser;
|