@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.
Files changed (226) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +12 -4
  3. package/dist/index.min.js +5 -0
  4. package/{types → dist/src}/api.d.ts +19 -19
  5. package/dist/src/api.d.ts.map +1 -0
  6. package/{types/lib → dist/src}/buffer-writer.d.ts +10 -10
  7. package/{types/lib → dist/src}/buffer-writer.d.ts.map +1 -1
  8. package/dist/src/coding.d.ts +41 -0
  9. package/dist/src/coding.d.ts.map +1 -0
  10. package/{types/lib → dist/src}/decoder.d.ts +3 -3
  11. package/{types/lib → dist/src}/decoder.d.ts.map +1 -1
  12. package/{types/lib → dist/src}/encoder.d.ts +2 -2
  13. package/{types/lib → dist/src}/encoder.d.ts.map +1 -1
  14. package/{types/lib → dist/src}/header-validator.d.ts +0 -0
  15. package/dist/src/header-validator.d.ts.map +1 -0
  16. package/dist/src/index-browser.d.ts +8 -0
  17. package/dist/src/index-browser.d.ts.map +1 -0
  18. package/dist/src/index.d.ts +9 -0
  19. package/dist/src/index.d.ts.map +1 -0
  20. package/{types/lib → dist/src}/indexed-reader-browser.d.ts +0 -0
  21. package/dist/src/indexed-reader-browser.d.ts.map +1 -0
  22. package/{types/lib → dist/src}/indexed-reader.d.ts +13 -13
  23. package/dist/src/indexed-reader.d.ts.map +1 -0
  24. package/{types/lib → dist/src}/indexer.d.ts +9 -9
  25. package/{types/lib → dist/src}/indexer.d.ts.map +1 -1
  26. package/{types/lib → dist/src}/iterator-channel.d.ts +0 -0
  27. package/{types/lib → dist/src}/iterator-channel.d.ts.map +1 -1
  28. package/{types/lib → dist/src}/iterator.d.ts +8 -8
  29. package/{types/lib → dist/src}/iterator.d.ts.map +1 -1
  30. package/{types/lib → dist/src}/reader-browser.d.ts +10 -10
  31. package/{types/lib → dist/src}/reader-browser.d.ts.map +1 -1
  32. package/{types/lib → dist/src}/reader.d.ts +5 -5
  33. package/{types/lib → dist/src}/reader.d.ts.map +1 -1
  34. package/{types/lib → dist/src}/writer-browser.d.ts +10 -10
  35. package/{types/lib → dist/src}/writer-browser.d.ts.map +1 -1
  36. package/{types/lib → dist/src}/writer.d.ts +4 -4
  37. package/{types/lib → dist/src}/writer.d.ts.map +1 -1
  38. package/package.json +102 -209
  39. package/{api.ts → src/api.ts} +14 -14
  40. package/{lib → src}/buffer-writer.js +5 -5
  41. package/src/coding.ts +56 -0
  42. package/{lib → src}/decoder.js +4 -4
  43. package/{lib → src}/encoder.js +1 -1
  44. package/src/header-validator.js +74 -0
  45. package/{lib → src}/header.ipldsch +0 -0
  46. package/src/index-browser.js +14 -0
  47. package/src/index.js +16 -0
  48. package/{lib → src}/indexed-reader-browser.js +0 -0
  49. package/{lib → src}/indexed-reader.js +9 -9
  50. package/{lib → src}/indexer.js +4 -4
  51. package/{lib → src}/iterator-channel.js +0 -0
  52. package/{lib → src}/iterator.js +4 -4
  53. package/{lib → src}/reader-browser.js +7 -7
  54. package/{lib → src}/reader.js +5 -5
  55. package/{lib → src}/writer-browser.js +7 -7
  56. package/{lib → src}/writer.js +3 -3
  57. package/LICENSE-APACHE +0 -13
  58. package/LICENSE-MIT +0 -7
  59. package/buffer-writer +0 -1
  60. package/car-browser.js +0 -14
  61. package/car.js +0 -16
  62. package/cjs/browser-test/common.js +0 -301
  63. package/cjs/browser-test/node-test-file-streams.js +0 -71
  64. package/cjs/browser-test/node-test-indexed-reader.js +0 -51
  65. package/cjs/browser-test/node-test-large.js +0 -135
  66. package/cjs/browser-test/node-test-raw.js +0 -68
  67. package/cjs/browser-test/node-test-updateroots.js +0 -78
  68. package/cjs/browser-test/test-buffer-writer.js +0 -330
  69. package/cjs/browser-test/test-errors.js +0 -90
  70. package/cjs/browser-test/test-indexer.js +0 -80
  71. package/cjs/browser-test/test-interface.js +0 -21
  72. package/cjs/browser-test/test-iterator.js +0 -83
  73. package/cjs/browser-test/test-reader.js +0 -278
  74. package/cjs/browser-test/test-writer.js +0 -286
  75. package/cjs/browser-test/verify-store-reader.js +0 -142
  76. package/cjs/car-browser.js +0 -18
  77. package/cjs/car.js +0 -20
  78. package/cjs/lib/buffer-writer.js +0 -164
  79. package/cjs/lib/decoder.js +0 -301
  80. package/cjs/lib/encoder.js +0 -44
  81. package/cjs/lib/header-validator.js +0 -29
  82. package/cjs/lib/indexed-reader-browser.js +0 -13
  83. package/cjs/lib/indexed-reader.js +0 -90
  84. package/cjs/lib/indexer.js +0 -41
  85. package/cjs/lib/iterator-channel.js +0 -77
  86. package/cjs/lib/iterator.js +0 -97
  87. package/cjs/lib/reader-browser.js +0 -62
  88. package/cjs/lib/reader.js +0 -38
  89. package/cjs/lib/writer-browser.js +0 -118
  90. package/cjs/lib/writer.js +0 -51
  91. package/cjs/node-test/common.js +0 -301
  92. package/cjs/node-test/node-test-file-streams.js +0 -71
  93. package/cjs/node-test/node-test-indexed-reader.js +0 -51
  94. package/cjs/node-test/node-test-large.js +0 -135
  95. package/cjs/node-test/node-test-raw.js +0 -68
  96. package/cjs/node-test/node-test-updateroots.js +0 -78
  97. package/cjs/node-test/test-buffer-writer.js +0 -330
  98. package/cjs/node-test/test-errors.js +0 -90
  99. package/cjs/node-test/test-indexer.js +0 -80
  100. package/cjs/node-test/test-interface.js +0 -21
  101. package/cjs/node-test/test-iterator.js +0 -83
  102. package/cjs/node-test/test-reader.js +0 -278
  103. package/cjs/node-test/test-writer.js +0 -286
  104. package/cjs/node-test/verify-store-reader.js +0 -142
  105. package/decoder +0 -1
  106. package/esm/browser-test/common.js +0 -274
  107. package/esm/browser-test/node-test-file-streams.js +0 -76
  108. package/esm/browser-test/node-test-indexed-reader.js +0 -53
  109. package/esm/browser-test/node-test-large.js +0 -109
  110. package/esm/browser-test/node-test-raw.js +0 -63
  111. package/esm/browser-test/node-test-updateroots.js +0 -76
  112. package/esm/browser-test/test-buffer-writer.js +0 -311
  113. package/esm/browser-test/test-errors.js +0 -91
  114. package/esm/browser-test/test-indexer.js +0 -85
  115. package/esm/browser-test/test-interface.js +0 -24
  116. package/esm/browser-test/test-iterator.js +0 -91
  117. package/esm/browser-test/test-reader.js +0 -270
  118. package/esm/browser-test/test-writer.js +0 -297
  119. package/esm/browser-test/verify-store-reader.js +0 -122
  120. package/esm/car-browser.js +0 -16
  121. package/esm/car.js +0 -18
  122. package/esm/lib/buffer-writer.js +0 -129
  123. package/esm/lib/decoder.js +0 -265
  124. package/esm/lib/encoder.js +0 -35
  125. package/esm/lib/header-validator.js +0 -23
  126. package/esm/lib/indexed-reader-browser.js +0 -6
  127. package/esm/lib/indexed-reader.js +0 -78
  128. package/esm/lib/indexer.js +0 -38
  129. package/esm/lib/iterator-channel.js +0 -71
  130. package/esm/lib/iterator.js +0 -92
  131. package/esm/lib/reader-browser.js +0 -57
  132. package/esm/lib/reader.js +0 -26
  133. package/esm/lib/writer-browser.js +0 -115
  134. package/esm/lib/writer.js +0 -42
  135. package/esm/node-test/common.js +0 -274
  136. package/esm/node-test/node-test-file-streams.js +0 -76
  137. package/esm/node-test/node-test-indexed-reader.js +0 -53
  138. package/esm/node-test/node-test-large.js +0 -109
  139. package/esm/node-test/node-test-raw.js +0 -63
  140. package/esm/node-test/node-test-updateroots.js +0 -76
  141. package/esm/node-test/test-buffer-writer.js +0 -311
  142. package/esm/node-test/test-errors.js +0 -91
  143. package/esm/node-test/test-indexer.js +0 -85
  144. package/esm/node-test/test-interface.js +0 -24
  145. package/esm/node-test/test-iterator.js +0 -91
  146. package/esm/node-test/test-reader.js +0 -270
  147. package/esm/node-test/test-writer.js +0 -297
  148. package/esm/node-test/verify-store-reader.js +0 -122
  149. package/esm/package.json +0 -9
  150. package/examples/car-to-fixture.js +0 -66
  151. package/examples/dump-car.js +0 -58
  152. package/examples/dump-index.js +0 -24
  153. package/examples/package.json +0 -27
  154. package/examples/round-trip.js +0 -45
  155. package/examples/test-examples.js +0 -115
  156. package/examples/verify-car.js +0 -87
  157. package/index.js +0 -1
  158. package/indexed-reader +0 -1
  159. package/indexer +0 -1
  160. package/iterator +0 -1
  161. package/lib/coding.ts +0 -56
  162. package/lib/header-validator.js +0 -33
  163. package/reader +0 -1
  164. package/test/_fixtures_to_js.mjs +0 -24
  165. package/test/common.js +0 -210
  166. package/test/go.car +0 -0
  167. package/test/go.carv2 +0 -0
  168. package/test/node-test-file-streams.js +0 -84
  169. package/test/node-test-indexed-reader.js +0 -45
  170. package/test/node-test-large.js +0 -112
  171. package/test/node-test-raw.js +0 -83
  172. package/test/node-test-updateroots.js +0 -89
  173. package/test/test-buffer-writer.js +0 -256
  174. package/test/test-errors.js +0 -98
  175. package/test/test-indexer.js +0 -87
  176. package/test/test-interface.js +0 -24
  177. package/test/test-iterator.js +0 -74
  178. package/test/test-reader.js +0 -245
  179. package/test/test-writer.js +0 -336
  180. package/test/verify-store-reader.js +0 -191
  181. package/tsconfig.json +0 -48
  182. package/types/api.d.ts.map +0 -1
  183. package/types/car-browser.d.ts +0 -8
  184. package/types/car-browser.d.ts.map +0 -1
  185. package/types/car.d.ts +0 -9
  186. package/types/car.d.ts.map +0 -1
  187. package/types/lib/coding.d.ts +0 -41
  188. package/types/lib/coding.d.ts.map +0 -1
  189. package/types/lib/header-validator.d.ts.map +0 -1
  190. package/types/lib/indexed-reader-browser.d.ts.map +0 -1
  191. package/types/lib/indexed-reader.d.ts.map +0 -1
  192. package/types/test/_fixtures_to_js.d.mts +0 -3
  193. package/types/test/_fixtures_to_js.d.mts.map +0 -1
  194. package/types/test/common.d.ts +0 -73
  195. package/types/test/common.d.ts.map +0 -1
  196. package/types/test/fixtures-expectations.d.ts +0 -63
  197. package/types/test/fixtures-expectations.d.ts.map +0 -1
  198. package/types/test/fixtures.d.ts +0 -3
  199. package/types/test/fixtures.d.ts.map +0 -1
  200. package/types/test/node-test-file-streams.d.ts +0 -3
  201. package/types/test/node-test-file-streams.d.ts.map +0 -1
  202. package/types/test/node-test-indexed-reader.d.ts +0 -2
  203. package/types/test/node-test-indexed-reader.d.ts.map +0 -1
  204. package/types/test/node-test-large.d.ts +0 -2
  205. package/types/test/node-test-large.d.ts.map +0 -1
  206. package/types/test/node-test-raw.d.ts +0 -2
  207. package/types/test/node-test-raw.d.ts.map +0 -1
  208. package/types/test/node-test-updateroots.d.ts +0 -2
  209. package/types/test/node-test-updateroots.d.ts.map +0 -1
  210. package/types/test/test-buffer-writer.d.ts +0 -2
  211. package/types/test/test-buffer-writer.d.ts.map +0 -1
  212. package/types/test/test-errors.d.ts +0 -2
  213. package/types/test/test-errors.d.ts.map +0 -1
  214. package/types/test/test-indexer.d.ts +0 -2
  215. package/types/test/test-indexer.d.ts.map +0 -1
  216. package/types/test/test-interface.d.ts +0 -2
  217. package/types/test/test-interface.d.ts.map +0 -1
  218. package/types/test/test-iterator.d.ts +0 -2
  219. package/types/test/test-iterator.d.ts.map +0 -1
  220. package/types/test/test-reader.d.ts +0 -2
  221. package/types/test/test-reader.d.ts.map +0 -1
  222. package/types/test/test-writer.d.ts +0 -2
  223. package/types/test/test-writer.d.ts.map +0 -1
  224. package/types/test/verify-store-reader.d.ts +0 -29
  225. package/types/test/verify-store-reader.d.ts.map +0 -1
  226. package/writer +0 -1
@@ -1,41 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var decoder = require('./decoder.js');
6
-
7
- class CarIndexer {
8
- constructor(version, roots, iterator) {
9
- this._version = version;
10
- this._roots = roots;
11
- this._iterator = iterator;
12
- }
13
- get version() {
14
- return this._version;
15
- }
16
- async getRoots() {
17
- return this._roots;
18
- }
19
- [Symbol.asyncIterator]() {
20
- return this._iterator;
21
- }
22
- static async fromBytes(bytes) {
23
- if (!(bytes instanceof Uint8Array)) {
24
- throw new TypeError('fromBytes() requires a Uint8Array');
25
- }
26
- return decodeIndexerComplete(decoder.bytesReader(bytes));
27
- }
28
- static async fromIterable(asyncIterable) {
29
- if (!asyncIterable || !(typeof asyncIterable[Symbol.asyncIterator] === 'function')) {
30
- throw new TypeError('fromIterable() requires an async iterable');
31
- }
32
- return decodeIndexerComplete(decoder.asyncIterableReader(asyncIterable));
33
- }
34
- }
35
- async function decodeIndexerComplete(reader) {
36
- const decoder$1 = decoder.createDecoder(reader);
37
- const {version, roots} = await decoder$1.header();
38
- return new CarIndexer(version, roots, decoder$1.blocksIndex());
39
- }
40
-
41
- exports.CarIndexer = CarIndexer;
@@ -1,77 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- function noop() {
6
- }
7
- function create() {
8
- const chunkQueue = [];
9
- let drainer = null;
10
- let drainerResolver = noop;
11
- let ended = false;
12
- let outWait = null;
13
- let outWaitResolver = noop;
14
- const makeDrainer = () => {
15
- if (!drainer) {
16
- drainer = new Promise(resolve => {
17
- drainerResolver = () => {
18
- drainer = null;
19
- drainerResolver = noop;
20
- resolve();
21
- };
22
- });
23
- }
24
- return drainer;
25
- };
26
- const writer = {
27
- write(chunk) {
28
- chunkQueue.push(chunk);
29
- const drainer = makeDrainer();
30
- outWaitResolver();
31
- return drainer;
32
- },
33
- async end() {
34
- ended = true;
35
- const drainer = makeDrainer();
36
- outWaitResolver();
37
- await drainer;
38
- }
39
- };
40
- const iterator = {
41
- async next() {
42
- const chunk = chunkQueue.shift();
43
- if (chunk) {
44
- if (chunkQueue.length === 0) {
45
- drainerResolver();
46
- }
47
- return {
48
- done: false,
49
- value: chunk
50
- };
51
- }
52
- if (ended) {
53
- drainerResolver();
54
- return {
55
- done: true,
56
- value: undefined
57
- };
58
- }
59
- if (!outWait) {
60
- outWait = new Promise(resolve => {
61
- outWaitResolver = () => {
62
- outWait = null;
63
- outWaitResolver = noop;
64
- return resolve(iterator.next());
65
- };
66
- });
67
- }
68
- return outWait;
69
- }
70
- };
71
- return {
72
- writer,
73
- iterator
74
- };
75
- }
76
-
77
- exports.create = create;
@@ -1,97 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var decoder = require('./decoder.js');
6
-
7
- class CarIteratorBase {
8
- constructor(version, roots, iterable) {
9
- this._version = version;
10
- this._roots = roots;
11
- this._iterable = iterable;
12
- this._decoded = false;
13
- }
14
- get version() {
15
- return this._version;
16
- }
17
- async getRoots() {
18
- return this._roots;
19
- }
20
- }
21
- class CarBlockIterator extends CarIteratorBase {
22
- [Symbol.asyncIterator]() {
23
- if (this._decoded) {
24
- throw new Error('Cannot decode more than once');
25
- }
26
- if (!this._iterable) {
27
- throw new Error('Block iterable not found');
28
- }
29
- this._decoded = true;
30
- return this._iterable[Symbol.asyncIterator]();
31
- }
32
- static async fromBytes(bytes) {
33
- const {version, roots, iterator} = await fromBytes(bytes);
34
- return new CarBlockIterator(version, roots, iterator);
35
- }
36
- static async fromIterable(asyncIterable) {
37
- const {version, roots, iterator} = await fromIterable(asyncIterable);
38
- return new CarBlockIterator(version, roots, iterator);
39
- }
40
- }
41
- class CarCIDIterator extends CarIteratorBase {
42
- [Symbol.asyncIterator]() {
43
- if (this._decoded) {
44
- throw new Error('Cannot decode more than once');
45
- }
46
- if (!this._iterable) {
47
- throw new Error('Block iterable not found');
48
- }
49
- this._decoded = true;
50
- const iterable = this._iterable[Symbol.asyncIterator]();
51
- return {
52
- async next() {
53
- const next = await iterable.next();
54
- if (next.done) {
55
- return next;
56
- }
57
- return {
58
- done: false,
59
- value: next.value.cid
60
- };
61
- }
62
- };
63
- }
64
- static async fromBytes(bytes) {
65
- const {version, roots, iterator} = await fromBytes(bytes);
66
- return new CarCIDIterator(version, roots, iterator);
67
- }
68
- static async fromIterable(asyncIterable) {
69
- const {version, roots, iterator} = await fromIterable(asyncIterable);
70
- return new CarCIDIterator(version, roots, iterator);
71
- }
72
- }
73
- async function fromBytes(bytes) {
74
- if (!(bytes instanceof Uint8Array)) {
75
- throw new TypeError('fromBytes() requires a Uint8Array');
76
- }
77
- return decodeIterator(decoder.bytesReader(bytes));
78
- }
79
- async function fromIterable(asyncIterable) {
80
- if (!asyncIterable || !(typeof asyncIterable[Symbol.asyncIterator] === 'function')) {
81
- throw new TypeError('fromIterable() requires an async iterable');
82
- }
83
- return decodeIterator(decoder.asyncIterableReader(asyncIterable));
84
- }
85
- async function decodeIterator(reader) {
86
- const decoder$1 = decoder.createDecoder(reader);
87
- const {version, roots} = await decoder$1.header();
88
- return {
89
- version,
90
- roots,
91
- iterator: decoder$1.blocks()
92
- };
93
- }
94
-
95
- exports.CarBlockIterator = CarBlockIterator;
96
- exports.CarCIDIterator = CarCIDIterator;
97
- exports.CarIteratorBase = CarIteratorBase;
@@ -1,62 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var decoder = require('./decoder.js');
6
-
7
- class CarReader {
8
- constructor(header, blocks) {
9
- this._header = header;
10
- this._blocks = blocks;
11
- this._keys = blocks.map(b => b.cid.toString());
12
- }
13
- get version() {
14
- return this._header.version;
15
- }
16
- async getRoots() {
17
- return this._header.roots;
18
- }
19
- async has(key) {
20
- return this._keys.indexOf(key.toString()) > -1;
21
- }
22
- async get(key) {
23
- const index = this._keys.indexOf(key.toString());
24
- return index > -1 ? this._blocks[index] : undefined;
25
- }
26
- async *blocks() {
27
- for (const block of this._blocks) {
28
- yield block;
29
- }
30
- }
31
- async *cids() {
32
- for (const block of this._blocks) {
33
- yield block.cid;
34
- }
35
- }
36
- static async fromBytes(bytes) {
37
- if (!(bytes instanceof Uint8Array)) {
38
- throw new TypeError('fromBytes() requires a Uint8Array');
39
- }
40
- return decodeReaderComplete(decoder.bytesReader(bytes));
41
- }
42
- static async fromIterable(asyncIterable) {
43
- if (!asyncIterable || !(typeof asyncIterable[Symbol.asyncIterator] === 'function')) {
44
- throw new TypeError('fromIterable() requires an async iterable');
45
- }
46
- return decodeReaderComplete(decoder.asyncIterableReader(asyncIterable));
47
- }
48
- }
49
- async function decodeReaderComplete(reader) {
50
- const decoder$1 = decoder.createDecoder(reader);
51
- const header = await decoder$1.header();
52
- const blocks = [];
53
- for await (const block of decoder$1.blocks()) {
54
- blocks.push(block);
55
- }
56
- return new CarReader(header, blocks);
57
- }
58
- const __browser = true;
59
-
60
- exports.CarReader = CarReader;
61
- exports.__browser = __browser;
62
- exports.decodeReaderComplete = decodeReaderComplete;
package/cjs/lib/reader.js DELETED
@@ -1,38 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var fs = require('fs');
6
- var util = require('util');
7
- var readerBrowser = require('./reader-browser.js');
8
-
9
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
-
11
- var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
12
-
13
- const fsread = util.promisify(fs__default["default"].read);
14
- class CarReader extends readerBrowser.CarReader {
15
- static async readRaw(fd, blockIndex) {
16
- const {cid, blockLength, blockOffset} = blockIndex;
17
- const bytes = new Uint8Array(blockLength);
18
- let read;
19
- if (typeof fd === 'number') {
20
- read = (await fsread(fd, bytes, 0, blockLength, blockOffset)).bytesRead;
21
- } else if (typeof fd === 'object' && typeof fd.read === 'function') {
22
- read = (await fd.read(bytes, 0, blockLength, blockOffset)).bytesRead;
23
- } else {
24
- throw new TypeError('Bad fd');
25
- }
26
- if (read !== blockLength) {
27
- throw new Error(`Failed to read entire block (${ read } instead of ${ blockLength })`);
28
- }
29
- return {
30
- cid,
31
- bytes
32
- };
33
- }
34
- }
35
- const __browser = false;
36
-
37
- exports.CarReader = CarReader;
38
- exports.__browser = __browser;
@@ -1,118 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var cid = require('multiformats/cid');
6
- var encoder = require('./encoder.js');
7
- var iteratorChannel = require('./iterator-channel.js');
8
- var decoder = require('./decoder.js');
9
-
10
- class CarWriter {
11
- constructor(roots, encoder) {
12
- this._encoder = encoder;
13
- this._mutex = encoder.setRoots(roots);
14
- this._ended = false;
15
- }
16
- async put(block) {
17
- if (!(block.bytes instanceof Uint8Array) || !block.cid) {
18
- throw new TypeError('Can only write {cid, bytes} objects');
19
- }
20
- if (this._ended) {
21
- throw new Error('Already closed');
22
- }
23
- const cid$1 = cid.CID.asCID(block.cid);
24
- if (!cid$1) {
25
- throw new TypeError('Can only write {cid, bytes} objects');
26
- }
27
- this._mutex = this._mutex.then(() => this._encoder.writeBlock({
28
- cid: cid$1,
29
- bytes: block.bytes
30
- }));
31
- return this._mutex;
32
- }
33
- async close() {
34
- if (this._ended) {
35
- throw new Error('Already closed');
36
- }
37
- await this._mutex;
38
- this._ended = true;
39
- return this._encoder.close();
40
- }
41
- static create(roots) {
42
- roots = toRoots(roots);
43
- const {encoder, iterator} = encodeWriter();
44
- const writer = new CarWriter(roots, encoder);
45
- const out = new CarWriterOut(iterator);
46
- return {
47
- writer,
48
- out
49
- };
50
- }
51
- static createAppender() {
52
- const {encoder, iterator} = encodeWriter();
53
- encoder.setRoots = () => Promise.resolve();
54
- const writer = new CarWriter([], encoder);
55
- const out = new CarWriterOut(iterator);
56
- return {
57
- writer,
58
- out
59
- };
60
- }
61
- static async updateRootsInBytes(bytes, roots) {
62
- const reader = decoder.bytesReader(bytes);
63
- await decoder.readHeader(reader);
64
- const newHeader = encoder.createHeader(roots);
65
- if (Number(reader.pos) !== newHeader.length) {
66
- 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)`);
67
- }
68
- bytes.set(newHeader, 0);
69
- return bytes;
70
- }
71
- }
72
- class CarWriterOut {
73
- constructor(iterator) {
74
- this._iterator = iterator;
75
- }
76
- [Symbol.asyncIterator]() {
77
- if (this._iterating) {
78
- throw new Error('Multiple iterator not supported');
79
- }
80
- this._iterating = true;
81
- return this._iterator;
82
- }
83
- }
84
- function encodeWriter() {
85
- const iw = iteratorChannel.create();
86
- const {writer, iterator} = iw;
87
- const encoder$1 = encoder.createEncoder(writer);
88
- return {
89
- encoder: encoder$1,
90
- iterator
91
- };
92
- }
93
- function toRoots(roots) {
94
- if (roots === undefined) {
95
- return [];
96
- }
97
- if (!Array.isArray(roots)) {
98
- const cid$1 = cid.CID.asCID(roots);
99
- if (!cid$1) {
100
- throw new TypeError('roots must be a single CID or an array of CIDs');
101
- }
102
- return [cid$1];
103
- }
104
- const _roots = [];
105
- for (const root of roots) {
106
- const _root = cid.CID.asCID(root);
107
- if (!_root) {
108
- throw new TypeError('roots must be a single CID or an array of CIDs');
109
- }
110
- _roots.push(_root);
111
- }
112
- return _roots;
113
- }
114
- const __browser = true;
115
-
116
- exports.CarWriter = CarWriter;
117
- exports.CarWriterOut = CarWriterOut;
118
- exports.__browser = __browser;
package/cjs/lib/writer.js DELETED
@@ -1,51 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var fs = require('fs');
6
- var util = require('util');
7
- var writerBrowser = require('./writer-browser.js');
8
- var decoder = require('./decoder.js');
9
- var encoder = require('./encoder.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
- const fsread = util.promisify(fs__default["default"].read);
16
- const fswrite = util.promisify(fs__default["default"].write);
17
- class CarWriter extends writerBrowser.CarWriter {
18
- static async updateRootsInFile(fd, roots) {
19
- const chunkSize = 256;
20
- let bytes;
21
- let offset = 0;
22
- let readChunk;
23
- if (typeof fd === 'number') {
24
- readChunk = async () => (await fsread(fd, bytes, 0, chunkSize, offset)).bytesRead;
25
- } else if (typeof fd === 'object' && typeof fd.read === 'function') {
26
- readChunk = async () => (await fd.read(bytes, 0, chunkSize, offset)).bytesRead;
27
- } else {
28
- throw new TypeError('Bad fd');
29
- }
30
- const fdReader = decoder.chunkReader(async () => {
31
- bytes = new Uint8Array(chunkSize);
32
- const read = await readChunk();
33
- offset += read;
34
- return read < chunkSize ? bytes.subarray(0, read) : bytes;
35
- });
36
- await decoder.readHeader(fdReader);
37
- const newHeader = encoder.createHeader(roots);
38
- if (fdReader.pos !== newHeader.length) {
39
- 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)`);
40
- }
41
- if (typeof fd === 'number') {
42
- await fswrite(fd, newHeader, 0, newHeader.length, 0);
43
- } else if (typeof fd === 'object' && typeof fd.read === 'function') {
44
- await fd.write(newHeader, 0, newHeader.length, 0);
45
- }
46
- }
47
- }
48
- const __browser = false;
49
-
50
- exports.CarWriter = CarWriter;
51
- exports.__browser = __browser;