@fireproof/vendor 1.1.1 → 1.2.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 (302) hide show
  1. package/package.json +109 -19
  2. package/src/@ipld/car/LICENSE +4 -0
  3. package/src/@ipld/car/README.md +1132 -0
  4. package/src/@ipld/car/dist/index.min.js +5 -0
  5. package/src/@ipld/car/dist/src/api.d.ts +72 -0
  6. package/src/@ipld/car/dist/src/api.d.ts.map +1 -0
  7. package/src/@ipld/car/dist/src/buffer-decoder.d.ts +67 -0
  8. package/src/@ipld/car/dist/src/buffer-decoder.d.ts.map +1 -0
  9. package/src/@ipld/car/dist/src/buffer-reader-browser.d.ts +116 -0
  10. package/src/@ipld/car/dist/src/buffer-reader-browser.d.ts.map +1 -0
  11. package/src/@ipld/car/dist/src/buffer-reader.d.ts +31 -0
  12. package/src/@ipld/car/dist/src/buffer-reader.d.ts.map +1 -0
  13. package/src/@ipld/car/dist/src/buffer-writer.d.ts +86 -0
  14. package/src/@ipld/car/dist/src/buffer-writer.d.ts.map +1 -0
  15. package/src/@ipld/car/dist/src/coding.d.ts +49 -0
  16. package/src/@ipld/car/dist/src/coding.d.ts.map +1 -0
  17. package/src/@ipld/car/dist/src/decoder-common.d.ts +43 -0
  18. package/src/@ipld/car/dist/src/decoder-common.d.ts.map +1 -0
  19. package/src/@ipld/car/dist/src/decoder.d.ts +87 -0
  20. package/src/@ipld/car/dist/src/decoder.d.ts.map +1 -0
  21. package/src/@ipld/car/dist/src/encoder.d.ts +17 -0
  22. package/src/@ipld/car/dist/src/encoder.d.ts.map +1 -0
  23. package/src/@ipld/car/dist/src/header-validator.d.ts +5 -0
  24. package/src/@ipld/car/dist/src/header-validator.d.ts.map +1 -0
  25. package/src/@ipld/car/dist/src/index-browser.d.ts +10 -0
  26. package/src/@ipld/car/dist/src/index-browser.d.ts.map +1 -0
  27. package/src/@ipld/car/dist/src/index.d.ts +11 -0
  28. package/src/@ipld/car/dist/src/index.d.ts.map +1 -0
  29. package/src/@ipld/car/dist/src/indexed-reader-browser.d.ts +5 -0
  30. package/src/@ipld/car/dist/src/indexed-reader-browser.d.ts.map +1 -0
  31. package/src/@ipld/car/dist/src/indexed-reader.d.ts +152 -0
  32. package/src/@ipld/car/dist/src/indexed-reader.d.ts.map +1 -0
  33. package/src/@ipld/car/dist/src/indexer.d.ts +95 -0
  34. package/src/@ipld/car/dist/src/indexer.d.ts.map +1 -0
  35. package/src/@ipld/car/dist/src/iterator-channel.d.ts +7 -0
  36. package/src/@ipld/car/dist/src/iterator-channel.d.ts.map +1 -0
  37. package/src/@ipld/car/dist/src/iterator.d.ts +174 -0
  38. package/src/@ipld/car/dist/src/iterator.d.ts.map +1 -0
  39. package/src/@ipld/car/dist/src/promise-fs-opts.d.ts +28 -0
  40. package/src/@ipld/car/dist/src/promise-fs-opts.d.ts.map +1 -0
  41. package/src/@ipld/car/dist/src/reader-browser.d.ts +151 -0
  42. package/src/@ipld/car/dist/src/reader-browser.d.ts.map +1 -0
  43. package/src/@ipld/car/dist/src/reader.d.ts +40 -0
  44. package/src/@ipld/car/dist/src/reader.d.ts.map +1 -0
  45. package/src/@ipld/car/dist/src/writer-browser.d.ts +155 -0
  46. package/src/@ipld/car/dist/src/writer-browser.d.ts.map +1 -0
  47. package/src/@ipld/car/dist/src/writer.d.ts +45 -0
  48. package/src/@ipld/car/dist/src/writer.d.ts.map +1 -0
  49. package/src/@ipld/car/src/api.ts +90 -0
  50. package/src/@ipld/car/src/buffer-decoder.js +213 -0
  51. package/src/@ipld/car/src/buffer-reader-browser.js +144 -0
  52. package/src/@ipld/car/src/buffer-reader.js +51 -0
  53. package/src/@ipld/car/src/buffer-writer.js +286 -0
  54. package/src/@ipld/car/src/coding.ts +68 -0
  55. package/src/@ipld/car/src/decoder-common.js +82 -0
  56. package/src/@ipld/car/src/decoder.js +347 -0
  57. package/src/@ipld/car/src/encoder.js +76 -0
  58. package/src/@ipld/car/src/header-validator.js +214 -0
  59. package/src/@ipld/car/src/header.ipldsch +18 -0
  60. package/src/@ipld/car/src/index-browser.js +18 -0
  61. package/src/@ipld/car/src/index.js +21 -0
  62. package/src/@ipld/car/src/indexed-reader-browser.js +7 -0
  63. package/src/@ipld/car/src/indexed-reader.js +211 -0
  64. package/src/@ipld/car/src/indexer.js +130 -0
  65. package/src/@ipld/car/src/iterator-channel.js +91 -0
  66. package/src/@ipld/car/src/iterator.js +267 -0
  67. package/src/@ipld/car/src/promise-fs-opts.js +46 -0
  68. package/src/@ipld/car/src/reader-browser.js +194 -0
  69. package/src/@ipld/car/src/reader.js +54 -0
  70. package/src/@ipld/car/src/writer-browser.js +250 -0
  71. package/src/@ipld/car/src/writer.js +81 -0
  72. package/src/@ipld/dag-cbor/LICENSE +4 -0
  73. package/src/@ipld/dag-cbor/README.md +80 -0
  74. package/src/@ipld/dag-cbor/dist/index.min.js +3 -0
  75. package/src/@ipld/dag-cbor/dist/src/index.d.ts +67 -0
  76. package/src/@ipld/dag-cbor/dist/src/index.d.ts.map +1 -0
  77. package/src/@ipld/dag-cbor/src/index.js +147 -0
  78. package/src/@ipld/dag-json/LICENSE +4 -0
  79. package/src/@ipld/dag-json/README.md +58 -0
  80. package/src/@ipld/dag-json/dist/index.min.js +3 -0
  81. package/src/@ipld/dag-json/dist/src/index.d.ts +12 -0
  82. package/src/@ipld/dag-json/dist/src/index.d.ts.map +1 -0
  83. package/src/@ipld/dag-json/src/index.js +291 -0
  84. package/src/@web3-storage/pail/dist/src/batch/index.d.ts +53 -1
  85. package/src/@web3-storage/pail/dist/src/batch/index.d.ts.map +1 -1
  86. package/src/@web3-storage/pail/dist/src/batch/shard.d.ts +1 -1
  87. package/src/@web3-storage/pail/dist/src/batch/shard.d.ts.map +1 -1
  88. package/src/@web3-storage/pail/dist/src/block.d.ts +2 -2
  89. package/src/@web3-storage/pail/dist/src/block.d.ts.map +1 -1
  90. package/src/@web3-storage/pail/dist/src/clock/index.d.ts +2 -2
  91. package/src/@web3-storage/pail/dist/src/clock/index.d.ts.map +1 -1
  92. package/src/@web3-storage/pail/dist/src/crdt/batch/index.d.ts.map +1 -1
  93. package/src/@web3-storage/pail/dist/src/crdt/index.d.ts +2 -2
  94. package/src/@web3-storage/pail/dist/src/crdt/index.d.ts.map +1 -1
  95. package/src/@web3-storage/pail/dist/src/diff.d.ts +3 -3
  96. package/src/@web3-storage/pail/dist/src/diff.d.ts.map +1 -1
  97. package/src/@web3-storage/pail/dist/src/index.d.ts +1 -1
  98. package/src/@web3-storage/pail/dist/src/index.d.ts.map +1 -1
  99. package/src/@web3-storage/pail/dist/src/merge.d.ts.map +1 -1
  100. package/src/@web3-storage/pail/dist/src/shard.d.ts +4 -4
  101. package/src/@web3-storage/pail/dist/src/shard.d.ts.map +1 -1
  102. package/src/@web3-storage/pail/dist/tsconfig.tsbuildinfo +1 -1
  103. package/src/@web3-storage/pail/src/api.ts +1 -1
  104. package/src/@web3-storage/pail/src/clock/index.js +1 -1
  105. package/src/@web3-storage/pail/src/shard.js +1 -1
  106. package/src/cborg/.github/dependabot.yml +16 -0
  107. package/src/cborg/.github/workflows/test-and-release.yml +52 -0
  108. package/src/cborg/CHANGELOG.md +513 -0
  109. package/src/cborg/LICENSE +13 -0
  110. package/src/cborg/README.md +515 -0
  111. package/src/cborg/bench/bench.js +117 -0
  112. package/src/cborg/bench/json.js +124 -0
  113. package/src/cborg/bench/package.json +8 -0
  114. package/src/cborg/cborg/bin.js +189 -0
  115. package/src/cborg/cborg/common.js +28 -0
  116. package/src/cborg/cborg/decode.js +211 -0
  117. package/src/cborg/cborg/diagnostic.js +158 -0
  118. package/src/cborg/cborg/diagnostic_test.js +117 -0
  119. package/src/cborg/cborg/encode.js +466 -0
  120. package/src/cborg/cborg/index.js +33 -0
  121. package/src/cborg/cborg/is.js +106 -0
  122. package/src/cborg/cborg/length.js +62 -0
  123. package/src/cborg/example-bytestrings.js +180 -0
  124. package/src/cborg/example-json.js +6 -0
  125. package/src/cborg/example.js +5 -0
  126. package/src/cborg/interface.ts +59 -0
  127. package/src/cborg/json/decode.js +462 -0
  128. package/src/cborg/json/encode.js +302 -0
  129. package/src/cborg/json/json.js +4 -0
  130. package/src/cborg/taglib.js +75 -0
  131. package/src/cborg/test/appendix_a.js +647 -0
  132. package/src/cborg/test/common.js +18 -0
  133. package/src/cborg/test/node-test-bin.js +402 -0
  134. package/src/cborg/test/noop-bin-test.js +3 -0
  135. package/src/cborg/test/test-0uint.js +103 -0
  136. package/src/cborg/test/test-1negint.js +96 -0
  137. package/src/cborg/test/test-2bytes.js +198 -0
  138. package/src/cborg/test/test-3string.js +136 -0
  139. package/src/cborg/test/test-4array.js +93 -0
  140. package/src/cborg/test/test-5map.js +284 -0
  141. package/src/cborg/test/test-6tag.js +84 -0
  142. package/src/cborg/test/test-7float.js +131 -0
  143. package/src/cborg/test/test-bl.js +37 -0
  144. package/src/cborg/test/test-cbor-vectors.js +107 -0
  145. package/src/cborg/test/test-decode-errors.js +65 -0
  146. package/src/cborg/test/test-fuzz.js +42 -0
  147. package/src/cborg/test/test-json.js +219 -0
  148. package/src/cborg/test/test-length.js +65 -0
  149. package/src/cborg/test/test-partial.js +111 -0
  150. package/src/cborg/tsconfig.json +48 -0
  151. package/src/cborg/types/cborg/decode.d.ts +43 -0
  152. package/src/cborg/types/cborg/decode.d.ts.map +1 -0
  153. package/src/cborg/types/cborg/encode.d.ts +51 -0
  154. package/src/cborg/types/cborg/encode.d.ts.map +1 -0
  155. package/src/cborg/types/cborg/index.d.ts +26 -0
  156. package/src/cborg/types/cborg/index.d.ts.map +1 -0
  157. package/src/cborg/types/cborg/is.d.ts +6 -0
  158. package/src/cborg/types/cborg/is.d.ts.map +1 -0
  159. package/src/cborg/types/example.d.ts +2 -0
  160. package/src/cborg/types/example.d.ts.map +1 -0
  161. package/src/cborg/types/interface.d.ts +49 -0
  162. package/src/cborg/types/interface.d.ts.map +1 -0
  163. package/src/cborg/types/json/decode.d.ts +67 -0
  164. package/src/cborg/types/json/decode.d.ts.map +1 -0
  165. package/src/cborg/types/json/encode.d.ts +11 -0
  166. package/src/cborg/types/json/encode.d.ts.map +1 -0
  167. package/src/cborg/types/json/json.d.ts +6 -0
  168. package/src/cborg/types/json/json.d.ts.map +1 -0
  169. package/src/cborg/types/taglib.d.ts +18 -0
  170. package/src/cborg/types/taglib.d.ts.map +1 -0
  171. package/src/cborg/types/tsconfig.tsbuildinfo +1 -0
  172. package/src/cborg/types/utils/0uint.d.ts +102 -0
  173. package/src/cborg/types/utils/0uint.d.ts.map +1 -0
  174. package/src/cborg/types/utils/1negint.d.ts +59 -0
  175. package/src/cborg/types/utils/1negint.d.ts.map +1 -0
  176. package/src/cborg/types/utils/2bytes.d.ts +69 -0
  177. package/src/cborg/types/utils/2bytes.d.ts.map +1 -0
  178. package/src/cborg/types/utils/3string.d.ts +46 -0
  179. package/src/cborg/types/utils/3string.d.ts.map +1 -0
  180. package/src/cborg/types/utils/4array.d.ts +66 -0
  181. package/src/cborg/types/utils/4array.d.ts.map +1 -0
  182. package/src/cborg/types/utils/5map.d.ts +66 -0
  183. package/src/cborg/types/utils/5map.d.ts.map +1 -0
  184. package/src/cborg/types/utils/6tag.d.ts +62 -0
  185. package/src/cborg/types/utils/6tag.d.ts.map +1 -0
  186. package/src/cborg/types/utils/7float.d.ts +60 -0
  187. package/src/cborg/types/utils/7float.d.ts.map +1 -0
  188. package/src/cborg/types/utils/bl.d.ts +26 -0
  189. package/src/cborg/types/utils/bl.d.ts.map +1 -0
  190. package/src/cborg/types/utils/byte-utils.d.ts +53 -0
  191. package/src/cborg/types/utils/byte-utils.d.ts.map +1 -0
  192. package/src/cborg/types/utils/common.d.ts +8 -0
  193. package/src/cborg/types/utils/common.d.ts.map +1 -0
  194. package/src/cborg/types/utils/index.d.ts +13 -0
  195. package/src/cborg/types/utils/index.d.ts.map +1 -0
  196. package/src/cborg/types/utils/jump.d.ts +16 -0
  197. package/src/cborg/types/utils/jump.d.ts.map +1 -0
  198. package/src/cborg/types/utils/token.d.ts +59 -0
  199. package/src/cborg/types/utils/token.d.ts.map +1 -0
  200. package/src/cborg/utils/0uint.js +229 -0
  201. package/src/cborg/utils/1negint.js +111 -0
  202. package/src/cborg/utils/2bytes.js +135 -0
  203. package/src/cborg/utils/3string.js +90 -0
  204. package/src/cborg/utils/4array.js +114 -0
  205. package/src/cborg/utils/5map.js +113 -0
  206. package/src/cborg/utils/6tag.js +81 -0
  207. package/src/cborg/utils/7float.js +310 -0
  208. package/src/cborg/utils/bl.js +124 -0
  209. package/src/cborg/utils/byte-utils.js +417 -0
  210. package/src/cborg/utils/common.js +11 -0
  211. package/src/cborg/utils/index.js +12 -0
  212. package/src/cborg/utils/jump.js +222 -0
  213. package/src/cborg/utils/token.js +76 -0
  214. package/src/ipfs-unixfs-exporter/LICENSE +4 -0
  215. package/src/ipfs-unixfs-exporter/README.md +105 -0
  216. package/src/ipfs-unixfs-exporter/dist/index.min.js +3 -0
  217. package/src/ipfs-unixfs-exporter/dist/src/errors.d.ts +57 -0
  218. package/src/ipfs-unixfs-exporter/dist/src/errors.d.ts.map +1 -0
  219. package/src/ipfs-unixfs-exporter/dist/src/errors.js +73 -0
  220. package/src/ipfs-unixfs-exporter/dist/src/errors.js.map +1 -0
  221. package/src/ipfs-unixfs-exporter/dist/src/index.d.ts +355 -0
  222. package/src/ipfs-unixfs-exporter/dist/src/index.d.ts.map +1 -0
  223. package/src/ipfs-unixfs-exporter/dist/src/index.js +197 -0
  224. package/src/ipfs-unixfs-exporter/dist/src/index.js.map +1 -0
  225. package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-cbor.d.ts +4 -0
  226. package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-cbor.d.ts.map +1 -0
  227. package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-cbor.js +9 -0
  228. package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-cbor.js.map +1 -0
  229. package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-json.d.ts +4 -0
  230. package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-json.d.ts.map +1 -0
  231. package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-json.js +9 -0
  232. package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-json.js.map +1 -0
  233. package/src/ipfs-unixfs-exporter/dist/src/resolvers/identity.d.ts +4 -0
  234. package/src/ipfs-unixfs-exporter/dist/src/resolvers/identity.d.ts.map +1 -0
  235. package/src/ipfs-unixfs-exporter/dist/src/resolvers/identity.js +38 -0
  236. package/src/ipfs-unixfs-exporter/dist/src/resolvers/identity.js.map +1 -0
  237. package/src/ipfs-unixfs-exporter/dist/src/resolvers/index.d.ts +4 -0
  238. package/src/ipfs-unixfs-exporter/dist/src/resolvers/index.d.ts.map +1 -0
  239. package/src/ipfs-unixfs-exporter/dist/src/resolvers/index.js +30 -0
  240. package/src/ipfs-unixfs-exporter/dist/src/resolvers/index.js.map +1 -0
  241. package/src/ipfs-unixfs-exporter/dist/src/resolvers/json.d.ts +4 -0
  242. package/src/ipfs-unixfs-exporter/dist/src/resolvers/json.d.ts.map +1 -0
  243. package/src/ipfs-unixfs-exporter/dist/src/resolvers/json.js +9 -0
  244. package/src/ipfs-unixfs-exporter/dist/src/resolvers/json.js.map +1 -0
  245. package/src/ipfs-unixfs-exporter/dist/src/resolvers/raw.d.ts +4 -0
  246. package/src/ipfs-unixfs-exporter/dist/src/resolvers/raw.d.ts.map +1 -0
  247. package/src/ipfs-unixfs-exporter/dist/src/resolvers/raw.js +37 -0
  248. package/src/ipfs-unixfs-exporter/dist/src/resolvers/raw.js.map +1 -0
  249. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/directory.d.ts +4 -0
  250. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/directory.d.ts.map +1 -0
  251. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/directory.js +29 -0
  252. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/directory.js.map +1 -0
  253. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/file.d.ts +4 -0
  254. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/file.d.ts.map +1 -0
  255. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/file.js +153 -0
  256. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/file.js.map +1 -0
  257. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/hamt-sharded-directory.d.ts +4 -0
  258. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/hamt-sharded-directory.d.ts.map +1 -0
  259. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/hamt-sharded-directory.js +59 -0
  260. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/hamt-sharded-directory.js.map +1 -0
  261. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/raw.d.ts +4 -0
  262. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/raw.d.ts.map +1 -0
  263. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/raw.js +25 -0
  264. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/raw.js.map +1 -0
  265. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/index.d.ts +4 -0
  266. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/index.d.ts.map +1 -0
  267. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/index.js +104 -0
  268. package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/index.js.map +1 -0
  269. package/src/ipfs-unixfs-exporter/dist/src/utils/extract-data-from-block.d.ts +3 -0
  270. package/src/ipfs-unixfs-exporter/dist/src/utils/extract-data-from-block.d.ts.map +1 -0
  271. package/src/ipfs-unixfs-exporter/dist/src/utils/extract-data-from-block.js +20 -0
  272. package/src/ipfs-unixfs-exporter/dist/src/utils/extract-data-from-block.js.map +1 -0
  273. package/src/ipfs-unixfs-exporter/dist/src/utils/find-cid-in-shard.d.ts +6 -0
  274. package/src/ipfs-unixfs-exporter/dist/src/utils/find-cid-in-shard.d.ts.map +1 -0
  275. package/src/ipfs-unixfs-exporter/dist/src/utils/find-cid-in-shard.js +116 -0
  276. package/src/ipfs-unixfs-exporter/dist/src/utils/find-cid-in-shard.js.map +1 -0
  277. package/src/ipfs-unixfs-exporter/dist/src/utils/resolve-object-path.d.ts +4 -0
  278. package/src/ipfs-unixfs-exporter/dist/src/utils/resolve-object-path.d.ts.map +1 -0
  279. package/src/ipfs-unixfs-exporter/dist/src/utils/resolve-object-path.js +57 -0
  280. package/src/ipfs-unixfs-exporter/dist/src/utils/resolve-object-path.js.map +1 -0
  281. package/src/ipfs-unixfs-exporter/dist/src/utils/validate-offset-and-length.d.ts +6 -0
  282. package/src/ipfs-unixfs-exporter/dist/src/utils/validate-offset-and-length.d.ts.map +1 -0
  283. package/src/ipfs-unixfs-exporter/dist/src/utils/validate-offset-and-length.js +30 -0
  284. package/src/ipfs-unixfs-exporter/dist/src/utils/validate-offset-and-length.js.map +1 -0
  285. package/src/ipfs-unixfs-exporter/dist/typedoc-urls.json +58 -0
  286. package/src/ipfs-unixfs-exporter/src/errors.ts +87 -0
  287. package/src/ipfs-unixfs-exporter/src/index.ts +498 -0
  288. package/src/ipfs-unixfs-exporter/src/resolvers/dag-cbor.ts +12 -0
  289. package/src/ipfs-unixfs-exporter/src/resolvers/dag-json.ts +12 -0
  290. package/src/ipfs-unixfs-exporter/src/resolvers/identity.ts +49 -0
  291. package/src/ipfs-unixfs-exporter/src/resolvers/index.ts +35 -0
  292. package/src/ipfs-unixfs-exporter/src/resolvers/json.ts +12 -0
  293. package/src/ipfs-unixfs-exporter/src/resolvers/raw.ts +49 -0
  294. package/src/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/directory.ts +39 -0
  295. package/src/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/file.ts +198 -0
  296. package/src/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/hamt-sharded-directory.ts +76 -0
  297. package/src/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/raw.ts +37 -0
  298. package/src/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/index.ts +121 -0
  299. package/src/ipfs-unixfs-exporter/src/utils/extract-data-from-block.ts +24 -0
  300. package/src/ipfs-unixfs-exporter/src/utils/find-cid-in-shard.ts +149 -0
  301. package/src/ipfs-unixfs-exporter/src/utils/resolve-object-path.ts +62 -0
  302. package/src/ipfs-unixfs-exporter/src/utils/validate-offset-and-length.ts +38 -0
@@ -0,0 +1,68 @@
1
+ import type { Block, BlockIndex } from './api.js'
2
+ import type { CID } from 'multiformats/cid'
3
+
4
+ export interface CarEncoder {
5
+ setRoots(roots: CID[]): Promise<void>
6
+
7
+ writeBlock(block: Block): Promise<void>
8
+
9
+ close(): Promise<void>
10
+
11
+ version(): number
12
+ }
13
+
14
+ export interface IteratorChannel_Writer<T> {
15
+ write(chunk: T): Promise<void>
16
+ end(): Promise<void>
17
+ }
18
+
19
+ export interface IteratorChannel<T> {
20
+ writer: IteratorChannel_Writer<T>
21
+
22
+ iterator: AsyncIterator<T>
23
+ }
24
+
25
+ export interface CarHeader {
26
+ version: 1
27
+ roots: CID[]
28
+ }
29
+
30
+ export interface CarV2FixedHeader {
31
+ characteristics: [bigint, bigint]
32
+ dataOffset: number
33
+ dataSize: number
34
+ indexOffset: number
35
+ }
36
+
37
+ export interface CarV2Header extends CarV2FixedHeader {
38
+ version: 2
39
+ roots: CID[]
40
+ }
41
+
42
+ export interface CarDecoder {
43
+ header(): Promise<CarHeader | CarV2Header>
44
+
45
+ blocks(): AsyncGenerator<Block>
46
+
47
+ blocksIndex(): AsyncGenerator<BlockIndex>
48
+ }
49
+
50
+ export interface Seekable {
51
+ seek(length: number): void
52
+ }
53
+
54
+ export interface BytesReader extends Seekable {
55
+ upTo(length: number): Promise<Uint8Array>
56
+
57
+ exactly(length: number, seek?: boolean): Promise<Uint8Array>
58
+
59
+ pos: number
60
+ }
61
+
62
+ export interface BytesBufferReader extends Seekable {
63
+ upTo(length: number): Uint8Array
64
+
65
+ exactly(length: number, seek?: boolean): Uint8Array
66
+
67
+ pos: number
68
+ }
@@ -0,0 +1,82 @@
1
+ import varint from 'varint'
2
+
3
+ export const CIDV0_BYTES = {
4
+ SHA2_256: 0x12,
5
+ LENGTH: 0x20,
6
+ DAG_PB: 0x70
7
+ }
8
+
9
+ export const V2_HEADER_LENGTH = /* characteristics */ 16 /* v1 offset */ + 8 /* v1 size */ + 8 /* index offset */ + 8
10
+
11
+ /**
12
+ * Decodes varint and seeks the buffer
13
+ *
14
+ * ```js
15
+ * // needs bytes to be read first
16
+ * const bytes = reader.upTo(8) // maybe async
17
+ * ```
18
+ *
19
+ * @param {Uint8Array} bytes
20
+ * @param {import('./coding').Seekable} seeker
21
+ * @returns {number}
22
+ */
23
+ export function decodeVarint (bytes, seeker) {
24
+ if (!bytes.length) {
25
+ throw new Error('Unexpected end of data')
26
+ }
27
+ const i = varint.decode(bytes)
28
+ seeker.seek(/** @type {number} */(varint.decode.bytes))
29
+ return i
30
+ }
31
+
32
+ /**
33
+ * Decode v2 header
34
+ *
35
+ * ```js
36
+ * // needs bytes to be read first
37
+ * const bytes = reader.exactly(V2_HEADER_LENGTH, true) // maybe async
38
+ * ```
39
+ *
40
+ * @param {Uint8Array} bytes
41
+ * @returns {import('./coding').CarV2FixedHeader}
42
+ */
43
+ export function decodeV2Header (bytes) {
44
+ const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)
45
+ let offset = 0
46
+ const header = {
47
+ version: 2,
48
+ /** @type {[bigint, bigint]} */
49
+ characteristics: [
50
+ dv.getBigUint64(offset, true),
51
+ dv.getBigUint64(offset += 8, true)
52
+ ],
53
+ dataOffset: Number(dv.getBigUint64(offset += 8, true)),
54
+ dataSize: Number(dv.getBigUint64(offset += 8, true)),
55
+ indexOffset: Number(dv.getBigUint64(offset += 8, true))
56
+ }
57
+ return header
58
+ }
59
+
60
+ /**
61
+ * Checks the length of the multihash to be read afterwards
62
+ *
63
+ * ```js
64
+ * // needs bytes to be read first
65
+ * const bytes = reader.upTo(8) // maybe async
66
+ * ```
67
+ *
68
+ * @param {Uint8Array} bytes
69
+ */
70
+ export function getMultihashLength (bytes) {
71
+ // | code | length | .... |
72
+ // where both code and length are varints, so we have to decode
73
+ // them first before we can know total length
74
+
75
+ varint.decode(bytes) // code
76
+ const codeLength = /** @type {number} */(varint.decode.bytes)
77
+ const length = varint.decode(bytes.subarray(varint.decode.bytes))
78
+ const lengthLength = /** @type {number} */(varint.decode.bytes)
79
+ const mhLength = codeLength + lengthLength + length
80
+
81
+ return mhLength
82
+ }
@@ -0,0 +1,347 @@
1
+ import { decode as decodeDagCbor } from "@fireproof/vendor/@ipld/dag-cbor"
2
+ import { CID } from 'multiformats/cid'
3
+ import * as Digest from 'multiformats/hashes/digest'
4
+ import { CIDV0_BYTES, decodeV2Header, decodeVarint, getMultihashLength, V2_HEADER_LENGTH } from './decoder-common.js'
5
+ import { CarV1HeaderOrV2Pragma } from './header-validator.js'
6
+
7
+ /**
8
+ * @typedef {import('./api').Block} Block
9
+ * @typedef {import('./api').BlockHeader} BlockHeader
10
+ * @typedef {import('./api').BlockIndex} BlockIndex
11
+ * @typedef {import('./coding').BytesReader} BytesReader
12
+ * @typedef {import('./coding').CarHeader} CarHeader
13
+ * @typedef {import('./coding').CarV2Header} CarV2Header
14
+ * @typedef {import('./coding').CarV2FixedHeader} CarV2FixedHeader
15
+ * @typedef {import('./coding').CarDecoder} CarDecoder
16
+ */
17
+
18
+ /**
19
+ * Reads header data from a `BytesReader`. The header may either be in the form
20
+ * of a `CarHeader` or `CarV2Header` depending on the CAR being read.
21
+ *
22
+ * @name async decoder.readHeader(reader)
23
+ * @param {BytesReader} reader
24
+ * @param {number} [strictVersion]
25
+ * @returns {Promise<CarHeader|CarV2Header>}
26
+ */
27
+ export async function readHeader (reader, strictVersion) {
28
+ const length = decodeVarint(await reader.upTo(8), reader)
29
+ if (length === 0) {
30
+ throw new Error('Invalid CAR header (zero length)')
31
+ }
32
+ const header = await reader.exactly(length, true)
33
+ const block = decodeDagCbor(header)
34
+ if (CarV1HeaderOrV2Pragma.toTyped(block) === undefined) {
35
+ throw new Error('Invalid CAR header format')
36
+ }
37
+ if ((block.version !== 1 && block.version !== 2) || (strictVersion !== undefined && block.version !== strictVersion)) {
38
+ throw new Error(`Invalid CAR version: ${block.version}${strictVersion !== undefined ? ` (expected ${strictVersion})` : ''}`)
39
+ }
40
+ if (block.version === 1) {
41
+ // CarV1HeaderOrV2Pragma makes roots optional, let's make it mandatory
42
+ if (!Array.isArray(block.roots)) {
43
+ throw new Error('Invalid CAR header format')
44
+ }
45
+ return block
46
+ }
47
+ // version 2
48
+ if (block.roots !== undefined) {
49
+ throw new Error('Invalid CAR header format')
50
+ }
51
+ const v2Header = decodeV2Header(await reader.exactly(V2_HEADER_LENGTH, true))
52
+ reader.seek(v2Header.dataOffset - reader.pos)
53
+ const v1Header = await readHeader(reader, 1)
54
+ return Object.assign(v1Header, v2Header)
55
+ }
56
+
57
+ /**
58
+ * @param {BytesReader} reader
59
+ * @returns {Promise<CID>}
60
+ */
61
+ async function readCid (reader) {
62
+ const first = await reader.exactly(2, false)
63
+ if (first[0] === CIDV0_BYTES.SHA2_256 && first[1] === CIDV0_BYTES.LENGTH) {
64
+ // cidv0 32-byte sha2-256
65
+ const bytes = await reader.exactly(34, true)
66
+ const multihash = Digest.decode(bytes)
67
+ return CID.create(0, CIDV0_BYTES.DAG_PB, multihash)
68
+ }
69
+
70
+ const version = decodeVarint(await reader.upTo(8), reader)
71
+ if (version !== 1) {
72
+ throw new Error(`Unexpected CID version (${version})`)
73
+ }
74
+ const codec = decodeVarint(await reader.upTo(8), reader)
75
+ const bytes = await reader.exactly(getMultihashLength(await reader.upTo(8)), true)
76
+ const multihash = Digest.decode(bytes)
77
+ return CID.create(version, codec, multihash)
78
+ }
79
+
80
+ /**
81
+ * Reads the leading data of an individual block from CAR data from a
82
+ * `BytesReader`. Returns a `BlockHeader` object which contains
83
+ * `{ cid, length, blockLength }` which can be used to either index the block
84
+ * or read the block binary data.
85
+ *
86
+ * @name async decoder.readBlockHead(reader)
87
+ * @param {BytesReader} reader
88
+ * @returns {Promise<BlockHeader>}
89
+ */
90
+ export async function readBlockHead (reader) {
91
+ // length includes a CID + Binary, where CID has a variable length
92
+ // we have to deal with
93
+ const start = reader.pos
94
+ let length = decodeVarint(await reader.upTo(8), reader)
95
+ if (length === 0) {
96
+ throw new Error('Invalid CAR section (zero length)')
97
+ }
98
+ length += (reader.pos - start)
99
+ const cid = await readCid(reader)
100
+ const blockLength = length - Number(reader.pos - start) // subtract CID length
101
+
102
+ return { cid, length, blockLength }
103
+ }
104
+
105
+ /**
106
+ * @param {BytesReader} reader
107
+ * @returns {Promise<Block>}
108
+ */
109
+ async function readBlock (reader) {
110
+ const { cid, blockLength } = await readBlockHead(reader)
111
+ const bytes = await reader.exactly(blockLength, true)
112
+ return { bytes, cid }
113
+ }
114
+
115
+ /**
116
+ * @param {BytesReader} reader
117
+ * @returns {Promise<BlockIndex>}
118
+ */
119
+ async function readBlockIndex (reader) {
120
+ const offset = reader.pos
121
+ const { cid, length, blockLength } = await readBlockHead(reader)
122
+ const index = { cid, length, blockLength, offset, blockOffset: reader.pos }
123
+ reader.seek(index.blockLength)
124
+ return index
125
+ }
126
+
127
+ /**
128
+ * Creates a `CarDecoder` from a `BytesReader`. The `CarDecoder` is as async
129
+ * interface that will consume the bytes from the `BytesReader` to yield a
130
+ * `header()` and either `blocks()` or `blocksIndex()` data.
131
+ *
132
+ * @name decoder.createDecoder(reader)
133
+ * @param {BytesReader} reader
134
+ * @returns {CarDecoder}
135
+ */
136
+ export function createDecoder (reader) {
137
+ const headerPromise = (async () => {
138
+ const header = await readHeader(reader)
139
+ if (header.version === 2) {
140
+ const v1length = reader.pos - header.dataOffset
141
+ reader = limitReader(reader, header.dataSize - v1length)
142
+ }
143
+ return header
144
+ })()
145
+
146
+ return {
147
+ header: () => headerPromise,
148
+
149
+ async * blocks () {
150
+ await headerPromise
151
+ while ((await reader.upTo(8)).length > 0) {
152
+ yield await readBlock(reader)
153
+ }
154
+ },
155
+
156
+ async * blocksIndex () {
157
+ await headerPromise
158
+ while ((await reader.upTo(8)).length > 0) {
159
+ yield await readBlockIndex(reader)
160
+ }
161
+ }
162
+ }
163
+ }
164
+
165
+ /**
166
+ * Creates a `BytesReader` from a `Uint8Array`.
167
+ *
168
+ * @name decoder.bytesReader(bytes)
169
+ * @param {Uint8Array} bytes
170
+ * @returns {BytesReader}
171
+ */
172
+ export function bytesReader (bytes) {
173
+ let pos = 0
174
+
175
+ /** @type {BytesReader} */
176
+ return {
177
+ async upTo (length) {
178
+ const out = bytes.subarray(pos, pos + Math.min(length, bytes.length - pos))
179
+ return out
180
+ },
181
+
182
+ async exactly (length, seek = false) {
183
+ if (length > bytes.length - pos) {
184
+ throw new Error('Unexpected end of data')
185
+ }
186
+ const out = bytes.subarray(pos, pos + length)
187
+ if (seek) {
188
+ pos += length
189
+ }
190
+ return out
191
+ },
192
+
193
+ seek (length) {
194
+ pos += length
195
+ },
196
+
197
+ get pos () {
198
+ return pos
199
+ }
200
+ }
201
+ }
202
+
203
+ /**
204
+ * @ignore
205
+ * reusable reader for streams and files, we just need a way to read an
206
+ * additional chunk (of some undetermined size) and a way to close the
207
+ * reader when finished
208
+ * @param {() => Promise<Uint8Array|null>} readChunk
209
+ * @returns {BytesReader}
210
+ */
211
+ export function chunkReader (readChunk /*, closer */) {
212
+ let pos = 0
213
+ let have = 0
214
+ let offset = 0
215
+ let currentChunk = new Uint8Array(0)
216
+
217
+ const read = async (/** @type {number} */ length) => {
218
+ have = currentChunk.length - offset
219
+ const bufa = [currentChunk.subarray(offset)]
220
+ while (have < length) {
221
+ const chunk = await readChunk()
222
+ if (chunk == null) {
223
+ break
224
+ }
225
+ /* c8 ignore next 8 */
226
+ // undo this ignore ^ when we have a fd implementation that can seek()
227
+ if (have < 0) { // because of a seek()
228
+ /* c8 ignore next 4 */
229
+ // toohard to test the else
230
+ if (chunk.length > have) {
231
+ bufa.push(chunk.subarray(-have))
232
+ } // else discard
233
+ } else {
234
+ bufa.push(chunk)
235
+ }
236
+ have += chunk.length
237
+ }
238
+ currentChunk = new Uint8Array(bufa.reduce((p, c) => p + c.length, 0))
239
+ let off = 0
240
+ for (const b of bufa) {
241
+ currentChunk.set(b, off)
242
+ off += b.length
243
+ }
244
+ offset = 0
245
+ }
246
+
247
+ /** @type {BytesReader} */
248
+ return {
249
+ async upTo (length) {
250
+ if (currentChunk.length - offset < length) {
251
+ await read(length)
252
+ }
253
+ return currentChunk.subarray(offset, offset + Math.min(currentChunk.length - offset, length))
254
+ },
255
+
256
+ async exactly (length, seek = false) {
257
+ if (currentChunk.length - offset < length) {
258
+ await read(length)
259
+ }
260
+ if (currentChunk.length - offset < length) {
261
+ throw new Error('Unexpected end of data')
262
+ }
263
+ const out = currentChunk.subarray(offset, offset + length)
264
+ if (seek) {
265
+ pos += length
266
+ offset += length
267
+ }
268
+ return out
269
+ },
270
+
271
+ seek (length) {
272
+ pos += length
273
+ offset += length
274
+ },
275
+
276
+ get pos () {
277
+ return pos
278
+ }
279
+ }
280
+ }
281
+
282
+ /**
283
+ * Creates a `BytesReader` from an `AsyncIterable<Uint8Array>`, which allows for
284
+ * consumption of CAR data from a streaming source.
285
+ *
286
+ * @name decoder.asyncIterableReader(asyncIterable)
287
+ * @param {AsyncIterable<Uint8Array>} asyncIterable
288
+ * @returns {BytesReader}
289
+ */
290
+ export function asyncIterableReader (asyncIterable) {
291
+ const iterator = asyncIterable[Symbol.asyncIterator]()
292
+
293
+ async function readChunk () {
294
+ const next = await iterator.next()
295
+ if (next.done) {
296
+ return null
297
+ }
298
+ return next.value
299
+ }
300
+
301
+ return chunkReader(readChunk)
302
+ }
303
+
304
+ /**
305
+ * Wraps a `BytesReader` in a limiting `BytesReader` which limits maximum read
306
+ * to `byteLimit` bytes. It _does not_ update `pos` of the original
307
+ * `BytesReader`.
308
+ *
309
+ * @name decoder.limitReader(reader, byteLimit)
310
+ * @param {BytesReader} reader
311
+ * @param {number} byteLimit
312
+ * @returns {BytesReader}
313
+ */
314
+ export function limitReader (reader, byteLimit) {
315
+ let bytesRead = 0
316
+
317
+ /** @type {BytesReader} */
318
+ return {
319
+ async upTo (length) {
320
+ let bytes = await reader.upTo(length)
321
+ if (bytes.length + bytesRead > byteLimit) {
322
+ bytes = bytes.subarray(0, byteLimit - bytesRead)
323
+ }
324
+ return bytes
325
+ },
326
+
327
+ async exactly (length, seek = false) {
328
+ const bytes = await reader.exactly(length, seek)
329
+ if (bytes.length + bytesRead > byteLimit) {
330
+ throw new Error('Unexpected end of data')
331
+ }
332
+ if (seek) {
333
+ bytesRead += length
334
+ }
335
+ return bytes
336
+ },
337
+
338
+ seek (length) {
339
+ bytesRead += length
340
+ reader.seek(length)
341
+ },
342
+
343
+ get pos () {
344
+ return reader.pos
345
+ }
346
+ }
347
+ }
@@ -0,0 +1,76 @@
1
+ import { encode as dagCborEncode } from "@fireproof/vendor/@ipld/dag-cbor"
2
+ import varint from 'varint'
3
+
4
+ /**
5
+ * @typedef {import('multiformats').CID} CID
6
+ * @typedef {import('./api').Block} Block
7
+ * @typedef {import('./coding').CarEncoder} CarEncoder
8
+ * @typedef {import('./coding').IteratorChannel_Writer<Uint8Array>} IteratorChannel_Writer
9
+ */
10
+
11
+ const CAR_V1_VERSION = 1
12
+
13
+ /**
14
+ * Create a header from an array of roots.
15
+ *
16
+ * @param {CID[]} roots
17
+ * @returns {Uint8Array}
18
+ */
19
+ export function createHeader (roots) {
20
+ const headerBytes = dagCborEncode({ version: CAR_V1_VERSION, roots })
21
+ const varintBytes = varint.encode(headerBytes.length)
22
+ const header = new Uint8Array(varintBytes.length + headerBytes.length)
23
+ header.set(varintBytes, 0)
24
+ header.set(headerBytes, varintBytes.length)
25
+ return header
26
+ }
27
+
28
+ /**
29
+ * @param {IteratorChannel_Writer} writer
30
+ * @returns {CarEncoder}
31
+ */
32
+ function createEncoder (writer) {
33
+ // none of this is wrapped in a mutex, that needs to happen above this to
34
+ // avoid overwrites
35
+
36
+ return {
37
+ /**
38
+ * @param {CID[]} roots
39
+ * @returns {Promise<void>}
40
+ */
41
+ async setRoots (roots) {
42
+ const bytes = createHeader(roots)
43
+ await writer.write(bytes)
44
+ },
45
+
46
+ /**
47
+ * @param {Block} block
48
+ * @returns {Promise<void>}
49
+ */
50
+ async writeBlock (block) {
51
+ const { cid, bytes } = block
52
+ await writer.write(new Uint8Array(varint.encode(cid.bytes.length + bytes.length)))
53
+ await writer.write(cid.bytes)
54
+ if (bytes.length) {
55
+ // zero-length blocks are valid, but it'd be safer if we didn't write them
56
+ await writer.write(bytes)
57
+ }
58
+ },
59
+
60
+ /**
61
+ * @returns {Promise<void>}
62
+ */
63
+ async close () {
64
+ await writer.end()
65
+ },
66
+
67
+ /**
68
+ * @returns {number}
69
+ */
70
+ version () {
71
+ return CAR_V1_VERSION
72
+ }
73
+ }
74
+ }
75
+
76
+ export { createEncoder }