@fireproof/vendor 1.1.0 → 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.
- package/package.json +97 -4
- package/src/@ipld/car/LICENSE +4 -0
- package/src/@ipld/car/README.md +1132 -0
- package/src/@ipld/car/dist/index.min.js +5 -0
- package/src/@ipld/car/dist/src/api.d.ts +72 -0
- package/src/@ipld/car/dist/src/api.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/buffer-decoder.d.ts +67 -0
- package/src/@ipld/car/dist/src/buffer-decoder.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/buffer-reader-browser.d.ts +116 -0
- package/src/@ipld/car/dist/src/buffer-reader-browser.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/buffer-reader.d.ts +31 -0
- package/src/@ipld/car/dist/src/buffer-reader.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/buffer-writer.d.ts +86 -0
- package/src/@ipld/car/dist/src/buffer-writer.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/coding.d.ts +49 -0
- package/src/@ipld/car/dist/src/coding.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/decoder-common.d.ts +43 -0
- package/src/@ipld/car/dist/src/decoder-common.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/decoder.d.ts +87 -0
- package/src/@ipld/car/dist/src/decoder.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/encoder.d.ts +17 -0
- package/src/@ipld/car/dist/src/encoder.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/header-validator.d.ts +5 -0
- package/src/@ipld/car/dist/src/header-validator.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/index-browser.d.ts +10 -0
- package/src/@ipld/car/dist/src/index-browser.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/index.d.ts +11 -0
- package/src/@ipld/car/dist/src/index.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/indexed-reader-browser.d.ts +5 -0
- package/src/@ipld/car/dist/src/indexed-reader-browser.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/indexed-reader.d.ts +152 -0
- package/src/@ipld/car/dist/src/indexed-reader.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/indexer.d.ts +95 -0
- package/src/@ipld/car/dist/src/indexer.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/iterator-channel.d.ts +7 -0
- package/src/@ipld/car/dist/src/iterator-channel.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/iterator.d.ts +174 -0
- package/src/@ipld/car/dist/src/iterator.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/promise-fs-opts.d.ts +28 -0
- package/src/@ipld/car/dist/src/promise-fs-opts.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/reader-browser.d.ts +151 -0
- package/src/@ipld/car/dist/src/reader-browser.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/reader.d.ts +40 -0
- package/src/@ipld/car/dist/src/reader.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/writer-browser.d.ts +155 -0
- package/src/@ipld/car/dist/src/writer-browser.d.ts.map +1 -0
- package/src/@ipld/car/dist/src/writer.d.ts +45 -0
- package/src/@ipld/car/dist/src/writer.d.ts.map +1 -0
- package/src/@ipld/car/src/api.ts +90 -0
- package/src/@ipld/car/src/buffer-decoder.js +213 -0
- package/src/@ipld/car/src/buffer-reader-browser.js +144 -0
- package/src/@ipld/car/src/buffer-reader.js +51 -0
- package/src/@ipld/car/src/buffer-writer.js +286 -0
- package/src/@ipld/car/src/coding.ts +68 -0
- package/src/@ipld/car/src/decoder-common.js +82 -0
- package/src/@ipld/car/src/decoder.js +347 -0
- package/src/@ipld/car/src/encoder.js +76 -0
- package/src/@ipld/car/src/header-validator.js +214 -0
- package/src/@ipld/car/src/header.ipldsch +18 -0
- package/src/@ipld/car/src/index-browser.js +18 -0
- package/src/@ipld/car/src/index.js +21 -0
- package/src/@ipld/car/src/indexed-reader-browser.js +7 -0
- package/src/@ipld/car/src/indexed-reader.js +211 -0
- package/src/@ipld/car/src/indexer.js +130 -0
- package/src/@ipld/car/src/iterator-channel.js +91 -0
- package/src/@ipld/car/src/iterator.js +267 -0
- package/src/@ipld/car/src/promise-fs-opts.js +46 -0
- package/src/@ipld/car/src/reader-browser.js +194 -0
- package/src/@ipld/car/src/reader.js +54 -0
- package/src/@ipld/car/src/writer-browser.js +250 -0
- package/src/@ipld/car/src/writer.js +81 -0
- package/src/@ipld/dag-cbor/LICENSE +4 -0
- package/src/@ipld/dag-cbor/README.md +80 -0
- package/src/@ipld/dag-cbor/dist/index.min.js +3 -0
- package/src/@ipld/dag-cbor/dist/src/index.d.ts +67 -0
- package/src/@ipld/dag-cbor/dist/src/index.d.ts.map +1 -0
- package/src/@ipld/dag-cbor/src/index.js +147 -0
- package/src/@ipld/dag-json/LICENSE +4 -0
- package/src/@ipld/dag-json/README.md +58 -0
- package/src/@ipld/dag-json/dist/index.min.js +3 -0
- package/src/@ipld/dag-json/dist/src/index.d.ts +12 -0
- package/src/@ipld/dag-json/dist/src/index.d.ts.map +1 -0
- package/src/@ipld/dag-json/src/index.js +291 -0
- package/src/@web3-storage/pail/dist/src/batch/index.d.ts +53 -1
- package/src/@web3-storage/pail/dist/src/batch/index.d.ts.map +1 -1
- package/src/@web3-storage/pail/dist/src/batch/shard.d.ts +1 -1
- package/src/@web3-storage/pail/dist/src/batch/shard.d.ts.map +1 -1
- package/src/@web3-storage/pail/dist/src/block.d.ts +2 -2
- package/src/@web3-storage/pail/dist/src/block.d.ts.map +1 -1
- package/src/@web3-storage/pail/dist/src/clock/index.d.ts +2 -2
- package/src/@web3-storage/pail/dist/src/clock/index.d.ts.map +1 -1
- package/src/@web3-storage/pail/dist/src/crdt/batch/index.d.ts.map +1 -1
- package/src/@web3-storage/pail/dist/src/crdt/index.d.ts +2 -2
- package/src/@web3-storage/pail/dist/src/crdt/index.d.ts.map +1 -1
- package/src/@web3-storage/pail/dist/src/diff.d.ts +3 -3
- package/src/@web3-storage/pail/dist/src/diff.d.ts.map +1 -1
- package/src/@web3-storage/pail/dist/src/index.d.ts +1 -1
- package/src/@web3-storage/pail/dist/src/index.d.ts.map +1 -1
- package/src/@web3-storage/pail/dist/src/merge.d.ts.map +1 -1
- package/src/@web3-storage/pail/dist/src/shard.d.ts +4 -4
- package/src/@web3-storage/pail/dist/src/shard.d.ts.map +1 -1
- package/src/@web3-storage/pail/dist/tsconfig.tsbuildinfo +1 -1
- package/src/@web3-storage/pail/src/api.ts +1 -1
- package/src/@web3-storage/pail/src/clock/index.js +1 -1
- package/src/@web3-storage/pail/src/shard.js +1 -1
- package/src/cborg/.github/dependabot.yml +16 -0
- package/src/cborg/.github/workflows/test-and-release.yml +52 -0
- package/src/cborg/CHANGELOG.md +513 -0
- package/src/cborg/LICENSE +13 -0
- package/src/cborg/README.md +515 -0
- package/src/cborg/bench/bench.js +117 -0
- package/src/cborg/bench/json.js +124 -0
- package/src/cborg/bench/package.json +8 -0
- package/src/cborg/cborg/bin.js +189 -0
- package/src/cborg/cborg/common.js +28 -0
- package/src/cborg/cborg/decode.js +211 -0
- package/src/cborg/cborg/diagnostic.js +158 -0
- package/src/cborg/cborg/diagnostic_test.js +117 -0
- package/src/cborg/cborg/encode.js +466 -0
- package/src/cborg/cborg/index.js +33 -0
- package/src/cborg/cborg/is.js +106 -0
- package/src/cborg/cborg/length.js +62 -0
- package/src/cborg/example-bytestrings.js +180 -0
- package/src/cborg/example-json.js +6 -0
- package/src/cborg/example.js +5 -0
- package/src/cborg/interface.ts +59 -0
- package/src/cborg/json/decode.js +462 -0
- package/src/cborg/json/encode.js +302 -0
- package/src/cborg/json/json.js +4 -0
- package/src/cborg/taglib.js +75 -0
- package/src/cborg/test/appendix_a.js +647 -0
- package/src/cborg/test/common.js +18 -0
- package/src/cborg/test/node-test-bin.js +402 -0
- package/src/cborg/test/noop-bin-test.js +3 -0
- package/src/cborg/test/test-0uint.js +103 -0
- package/src/cborg/test/test-1negint.js +96 -0
- package/src/cborg/test/test-2bytes.js +198 -0
- package/src/cborg/test/test-3string.js +136 -0
- package/src/cborg/test/test-4array.js +93 -0
- package/src/cborg/test/test-5map.js +284 -0
- package/src/cborg/test/test-6tag.js +84 -0
- package/src/cborg/test/test-7float.js +131 -0
- package/src/cborg/test/test-bl.js +37 -0
- package/src/cborg/test/test-cbor-vectors.js +107 -0
- package/src/cborg/test/test-decode-errors.js +65 -0
- package/src/cborg/test/test-fuzz.js +42 -0
- package/src/cborg/test/test-json.js +219 -0
- package/src/cborg/test/test-length.js +65 -0
- package/src/cborg/test/test-partial.js +111 -0
- package/src/cborg/tsconfig.json +48 -0
- package/src/cborg/types/cborg/decode.d.ts +43 -0
- package/src/cborg/types/cborg/decode.d.ts.map +1 -0
- package/src/cborg/types/cborg/encode.d.ts +51 -0
- package/src/cborg/types/cborg/encode.d.ts.map +1 -0
- package/src/cborg/types/cborg/index.d.ts +26 -0
- package/src/cborg/types/cborg/index.d.ts.map +1 -0
- package/src/cborg/types/cborg/is.d.ts +6 -0
- package/src/cborg/types/cborg/is.d.ts.map +1 -0
- package/src/cborg/types/example.d.ts +2 -0
- package/src/cborg/types/example.d.ts.map +1 -0
- package/src/cborg/types/interface.d.ts +49 -0
- package/src/cborg/types/interface.d.ts.map +1 -0
- package/src/cborg/types/json/decode.d.ts +67 -0
- package/src/cborg/types/json/decode.d.ts.map +1 -0
- package/src/cborg/types/json/encode.d.ts +11 -0
- package/src/cborg/types/json/encode.d.ts.map +1 -0
- package/src/cborg/types/json/json.d.ts +6 -0
- package/src/cborg/types/json/json.d.ts.map +1 -0
- package/src/cborg/types/taglib.d.ts +18 -0
- package/src/cborg/types/taglib.d.ts.map +1 -0
- package/src/cborg/types/tsconfig.tsbuildinfo +1 -0
- package/src/cborg/types/utils/0uint.d.ts +102 -0
- package/src/cborg/types/utils/0uint.d.ts.map +1 -0
- package/src/cborg/types/utils/1negint.d.ts +59 -0
- package/src/cborg/types/utils/1negint.d.ts.map +1 -0
- package/src/cborg/types/utils/2bytes.d.ts +69 -0
- package/src/cborg/types/utils/2bytes.d.ts.map +1 -0
- package/src/cborg/types/utils/3string.d.ts +46 -0
- package/src/cborg/types/utils/3string.d.ts.map +1 -0
- package/src/cborg/types/utils/4array.d.ts +66 -0
- package/src/cborg/types/utils/4array.d.ts.map +1 -0
- package/src/cborg/types/utils/5map.d.ts +66 -0
- package/src/cborg/types/utils/5map.d.ts.map +1 -0
- package/src/cborg/types/utils/6tag.d.ts +62 -0
- package/src/cborg/types/utils/6tag.d.ts.map +1 -0
- package/src/cborg/types/utils/7float.d.ts +60 -0
- package/src/cborg/types/utils/7float.d.ts.map +1 -0
- package/src/cborg/types/utils/bl.d.ts +26 -0
- package/src/cborg/types/utils/bl.d.ts.map +1 -0
- package/src/cborg/types/utils/byte-utils.d.ts +53 -0
- package/src/cborg/types/utils/byte-utils.d.ts.map +1 -0
- package/src/cborg/types/utils/common.d.ts +8 -0
- package/src/cborg/types/utils/common.d.ts.map +1 -0
- package/src/cborg/types/utils/index.d.ts +13 -0
- package/src/cborg/types/utils/index.d.ts.map +1 -0
- package/src/cborg/types/utils/jump.d.ts +16 -0
- package/src/cborg/types/utils/jump.d.ts.map +1 -0
- package/src/cborg/types/utils/token.d.ts +59 -0
- package/src/cborg/types/utils/token.d.ts.map +1 -0
- package/src/cborg/utils/0uint.js +229 -0
- package/src/cborg/utils/1negint.js +111 -0
- package/src/cborg/utils/2bytes.js +135 -0
- package/src/cborg/utils/3string.js +90 -0
- package/src/cborg/utils/4array.js +114 -0
- package/src/cborg/utils/5map.js +113 -0
- package/src/cborg/utils/6tag.js +81 -0
- package/src/cborg/utils/7float.js +310 -0
- package/src/cborg/utils/bl.js +124 -0
- package/src/cborg/utils/byte-utils.js +417 -0
- package/src/cborg/utils/common.js +11 -0
- package/src/cborg/utils/index.js +12 -0
- package/src/cborg/utils/jump.js +222 -0
- package/src/cborg/utils/token.js +76 -0
- package/src/ipfs-unixfs-exporter/LICENSE +4 -0
- package/src/ipfs-unixfs-exporter/README.md +105 -0
- package/src/ipfs-unixfs-exporter/dist/index.min.js +3 -0
- package/src/ipfs-unixfs-exporter/dist/src/errors.d.ts +57 -0
- package/src/ipfs-unixfs-exporter/dist/src/errors.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/errors.js +73 -0
- package/src/ipfs-unixfs-exporter/dist/src/errors.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/index.d.ts +355 -0
- package/src/ipfs-unixfs-exporter/dist/src/index.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/index.js +197 -0
- package/src/ipfs-unixfs-exporter/dist/src/index.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-cbor.d.ts +4 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-cbor.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-cbor.js +9 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-cbor.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-json.d.ts +4 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-json.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-json.js +9 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/dag-json.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/identity.d.ts +4 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/identity.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/identity.js +38 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/identity.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/index.d.ts +4 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/index.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/index.js +30 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/index.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/json.d.ts +4 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/json.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/json.js +9 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/json.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/raw.d.ts +4 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/raw.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/raw.js +37 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/raw.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/directory.d.ts +4 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/directory.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/directory.js +29 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/directory.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/file.d.ts +4 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/file.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/file.js +153 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/file.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/hamt-sharded-directory.d.ts +4 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/hamt-sharded-directory.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/hamt-sharded-directory.js +59 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/hamt-sharded-directory.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/raw.d.ts +4 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/raw.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/raw.js +25 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/content/raw.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/index.d.ts +4 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/index.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/index.js +104 -0
- package/src/ipfs-unixfs-exporter/dist/src/resolvers/unixfs-v1/index.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/extract-data-from-block.d.ts +3 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/extract-data-from-block.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/extract-data-from-block.js +20 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/extract-data-from-block.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/find-cid-in-shard.d.ts +6 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/find-cid-in-shard.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/find-cid-in-shard.js +116 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/find-cid-in-shard.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/resolve-object-path.d.ts +4 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/resolve-object-path.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/resolve-object-path.js +57 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/resolve-object-path.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/validate-offset-and-length.d.ts +6 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/validate-offset-and-length.d.ts.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/validate-offset-and-length.js +30 -0
- package/src/ipfs-unixfs-exporter/dist/src/utils/validate-offset-and-length.js.map +1 -0
- package/src/ipfs-unixfs-exporter/dist/typedoc-urls.json +58 -0
- package/src/ipfs-unixfs-exporter/src/errors.ts +87 -0
- package/src/ipfs-unixfs-exporter/src/index.ts +498 -0
- package/src/ipfs-unixfs-exporter/src/resolvers/dag-cbor.ts +12 -0
- package/src/ipfs-unixfs-exporter/src/resolvers/dag-json.ts +12 -0
- package/src/ipfs-unixfs-exporter/src/resolvers/identity.ts +49 -0
- package/src/ipfs-unixfs-exporter/src/resolvers/index.ts +35 -0
- package/src/ipfs-unixfs-exporter/src/resolvers/json.ts +12 -0
- package/src/ipfs-unixfs-exporter/src/resolvers/raw.ts +49 -0
- package/src/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/directory.ts +39 -0
- package/src/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/file.ts +198 -0
- package/src/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/hamt-sharded-directory.ts +76 -0
- package/src/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/raw.ts +37 -0
- package/src/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/index.ts +121 -0
- package/src/ipfs-unixfs-exporter/src/utils/extract-data-from-block.ts +24 -0
- package/src/ipfs-unixfs-exporter/src/utils/find-cid-in-shard.ts +149 -0
- package/src/ipfs-unixfs-exporter/src/utils/resolve-object-path.ts +62 -0
- package/src/ipfs-unixfs-exporter/src/utils/validate-offset-and-length.ts +38 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/*
|
|
2
|
+
RFC 8746 defines a set of tags to use for typed arrays. Out of the box, cborg doesn't care about
|
|
3
|
+
tags and just squashes all concerns around byte arrays to Uint8Array with major type 2. This is
|
|
4
|
+
fine for most use cases, but it is lossy, you can't round-trip and retain your original type.
|
|
5
|
+
|
|
6
|
+
This example shows how to use cborg to round-trip a typed array with tags.
|
|
7
|
+
|
|
8
|
+
https://www.rfc-editor.org/rfc/rfc8746.html
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { encode, decode, Token, Tokenizer, Type } from 'cborg.js'
|
|
12
|
+
|
|
13
|
+
const tagUint8Array = 64
|
|
14
|
+
const tagUint64Array = 71
|
|
15
|
+
// etc... see https://www.rfc-editor.org/rfc/rfc8746.html#name-iana-considerations
|
|
16
|
+
|
|
17
|
+
/* ENCODERS */
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @param {any} obj
|
|
21
|
+
* @returns {[Token]}
|
|
22
|
+
*/
|
|
23
|
+
function uint8ArrayEncoder (obj) {
|
|
24
|
+
if (!(obj instanceof Uint8Array)) {
|
|
25
|
+
throw new Error('expected Uint8Array')
|
|
26
|
+
}
|
|
27
|
+
return [
|
|
28
|
+
new Token(Type.tag, tagUint8Array),
|
|
29
|
+
new Token(Type.bytes, obj)
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @param {any} obj
|
|
35
|
+
* @returns {[Token]}
|
|
36
|
+
*/
|
|
37
|
+
function uint64ArrayEncoder (obj) {
|
|
38
|
+
if (!(obj instanceof BigUint64Array)) {
|
|
39
|
+
throw new Error('expected BigUint64Array')
|
|
40
|
+
}
|
|
41
|
+
return [
|
|
42
|
+
new Token(Type.tag, tagUint64Array),
|
|
43
|
+
// BigUint64Array to a Uint8Array, but we have to pay attention to the possibility of it being
|
|
44
|
+
// a view of a larger ArrayBuffer.
|
|
45
|
+
new Token(Type.bytes, new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength))
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// etc...
|
|
50
|
+
|
|
51
|
+
const typeEncoders = {
|
|
52
|
+
Uint8Array: uint8ArrayEncoder,
|
|
53
|
+
BigUint64Array: uint64ArrayEncoder
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* DECODERS */
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @param {ArrayBuffer} bytes
|
|
60
|
+
* @returns {any}
|
|
61
|
+
*/
|
|
62
|
+
function uint8ArrayDecoder (bytes) {
|
|
63
|
+
if (!(bytes instanceof ArrayBuffer)) {
|
|
64
|
+
throw new Error('expected ArrayBuffer')
|
|
65
|
+
}
|
|
66
|
+
return new Uint8Array(bytes)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @param {ArrayBuffer} bytes
|
|
71
|
+
* @returns {any}
|
|
72
|
+
*/
|
|
73
|
+
function uint64ArrayDecoder (bytes) {
|
|
74
|
+
if (!(bytes instanceof ArrayBuffer)) {
|
|
75
|
+
throw new Error('expected ArrayBuffer')
|
|
76
|
+
}
|
|
77
|
+
return new BigUint64Array(bytes)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// etc...
|
|
81
|
+
|
|
82
|
+
const tags = []
|
|
83
|
+
tags[tagUint8Array] = uint8ArrayDecoder
|
|
84
|
+
tags[tagUint64Array] = uint64ArrayDecoder
|
|
85
|
+
|
|
86
|
+
/* TOKENIZER */
|
|
87
|
+
|
|
88
|
+
// We have to deal with the fact that cborg talks in Uint8Arrays but we now want it to treat major 2
|
|
89
|
+
// as ArrayBuffers, so we have to transform the token stream to replace the Uint8Array with an
|
|
90
|
+
// ArrayBuffer.
|
|
91
|
+
|
|
92
|
+
class ArrayBufferTransformingTokeniser extends Tokenizer {
|
|
93
|
+
next () {
|
|
94
|
+
const nextToken = super.next()
|
|
95
|
+
if (nextToken.type.equals(Type.bytes)) {
|
|
96
|
+
// Transform the (assumed) Uint8Array value to an ArrayBuffer of the same bytes, note though
|
|
97
|
+
// that all tags we care about are going to be <tag><bytes>, so we're also transforming those
|
|
98
|
+
// into ArrayBuffers, so our tag decoders need to also assume they are getting ArrayBuffers
|
|
99
|
+
// now. An alternative would be to watch the token stream for <tag> and not transform the next
|
|
100
|
+
// token if it's <bytes>, but that's a bit more complicated for demo purposes.
|
|
101
|
+
nextToken.value = nextToken.value.buffer
|
|
102
|
+
}
|
|
103
|
+
return nextToken
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Optional: a new decode() wrapper, mainly so we don't have to deal with the complications of\
|
|
108
|
+
// instantiating a Tokenizer which needs both data and the options.
|
|
109
|
+
function byteStringDecoder (data, options) {
|
|
110
|
+
options = Object.assign({}, options, {
|
|
111
|
+
tags,
|
|
112
|
+
tokenizer: new ArrayBufferTransformingTokeniser(data, options)
|
|
113
|
+
})
|
|
114
|
+
return decode(data, options)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* ROUND-TRIP */
|
|
118
|
+
|
|
119
|
+
const original = {
|
|
120
|
+
u8: new Uint8Array([1, 2, 3, 4, 5]),
|
|
121
|
+
u64: new BigUint64Array([10000000000000000n, 20000000000000000n, 30000000000000000n, 40000000000000000n, 50000000000000000n]),
|
|
122
|
+
ab: new Uint8Array([6, 7, 8, 9, 10]).buffer
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const encoded = encode(original, { typeEncoders })
|
|
126
|
+
|
|
127
|
+
const decoded = byteStringDecoder(encoded)
|
|
128
|
+
|
|
129
|
+
console.log('Original:', original)
|
|
130
|
+
console.log('Encoded:', Buffer.from(encoded).toString('hex')) // excuse the Buffer, sorry browser peeps
|
|
131
|
+
console.log('Decoded:', decoded)
|
|
132
|
+
|
|
133
|
+
/* Output:
|
|
134
|
+
|
|
135
|
+
Original: {
|
|
136
|
+
u8: Uint8Array(5) [ 1, 2, 3, 4, 5 ],
|
|
137
|
+
u64: BigUint64Array(5) [
|
|
138
|
+
10000000000000000n,
|
|
139
|
+
20000000000000000n,
|
|
140
|
+
30000000000000000n,
|
|
141
|
+
40000000000000000n,
|
|
142
|
+
50000000000000000n
|
|
143
|
+
],
|
|
144
|
+
ab: ArrayBuffer { [Uint8Contents]: <06 07 08 09 0a>, byteLength: 5 }
|
|
145
|
+
}
|
|
146
|
+
Encoded: a362616245060708090a627538d84045010203040563753634d84758280000c16ff2862300000082dfe40d47000000434fd7946a00000004bfc91b8e000000c52ebca2b100
|
|
147
|
+
Decoded: {
|
|
148
|
+
ab: ArrayBuffer { [Uint8Contents]: <06 07 08 09 0a>, byteLength: 5 },
|
|
149
|
+
u8: Uint8Array(5) [ 1, 2, 3, 4, 5 ],
|
|
150
|
+
u64: BigUint64Array(5) [
|
|
151
|
+
10000000000000000n,
|
|
152
|
+
20000000000000000n,
|
|
153
|
+
30000000000000000n,
|
|
154
|
+
40000000000000000n,
|
|
155
|
+
50000000000000000n
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
*/
|
|
160
|
+
|
|
161
|
+
/* Diagnostic:
|
|
162
|
+
|
|
163
|
+
$ cborg hex2diag a362616245060708090a627538d84045010203040563753634d84758280000c16ff2862300000082dfe40d47000000434fd7946a00000004bfc91b8e000000c52ebca2b100
|
|
164
|
+
a3 # map(3)
|
|
165
|
+
62 # string(2)
|
|
166
|
+
6162 # "ab"
|
|
167
|
+
45 # bytes(5)
|
|
168
|
+
060708090a # "\x06\x07\x08\x09\x0a"
|
|
169
|
+
62 # string(2)
|
|
170
|
+
7538 # "u8"
|
|
171
|
+
d8 40 # tag(64)
|
|
172
|
+
45 # bytes(5)
|
|
173
|
+
0102030405 # "\x01\x02\x03\x04\x05"
|
|
174
|
+
63 # string(3)
|
|
175
|
+
753634 # "u64"
|
|
176
|
+
d8 47 # tag(71)
|
|
177
|
+
58 28 # bytes(40)
|
|
178
|
+
0000c16ff2862300000082dfe40d47000000434fd7 # "\x00\x00Áoò\x86#\x00\x00\x00\x82ßä\x0dG\x00\x00\x00CO×"
|
|
179
|
+
946a00000004bfc91b8e000000c52ebca2b100 # "\x94j\x00\x00\x00\x04¿É\x1b\x8e\x00\x00\x00Å.¼¢±\x00
|
|
180
|
+
*/
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { encode, decode } from "@fireproof/vendor/cborg/json"
|
|
2
|
+
|
|
3
|
+
const decoded = decode(Buffer.from('7b2274686973223a7b226973223a224a534f4e21222c22796179223a747275657d7d', 'hex'))
|
|
4
|
+
console.log('decoded:', decoded)
|
|
5
|
+
console.log('encoded:', encode(decoded))
|
|
6
|
+
console.log('encoded (string):', Buffer.from(encode(decoded)).toString())
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Token, Bl } from "@fireproof/vendor/cborg/utils"
|
|
2
|
+
|
|
3
|
+
export type TokenOrNestedTokens = Token | Token[] | TokenOrNestedTokens[]
|
|
4
|
+
|
|
5
|
+
export interface Reference {
|
|
6
|
+
parent: Reference | undefined
|
|
7
|
+
obj: object | any[]
|
|
8
|
+
includes(obj: object | any[]): boolean
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type OptionalTypeEncoder = (data: any, typ: string, options: EncodeOptions, refStack?: Reference) => TokenOrNestedTokens | null
|
|
12
|
+
|
|
13
|
+
export type StrictTypeEncoder = (data: any, typ: string, options: EncodeOptions, refStack?: Reference) => TokenOrNestedTokens
|
|
14
|
+
|
|
15
|
+
export type TokenTypeEncoder = {
|
|
16
|
+
(buf: Bl, token: Token, options: EncodeOptions): void;
|
|
17
|
+
compareTokens(t1: Token, t2: Token): number;
|
|
18
|
+
// TODO: make this non-optional as a breaking change and remove the throw in length.js
|
|
19
|
+
encodedSize?(token: Token, options: EncodeOptions): number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type DecodeFunction = (data:Uint8Array, pos:number, minor:number, options:DecodeOptions) => any
|
|
23
|
+
|
|
24
|
+
export type MapSorter = (e1: (Token | Token[])[], e2: (Token | Token[])[]) => number
|
|
25
|
+
|
|
26
|
+
export type QuickEncodeToken = (token: Token) => Uint8Array | undefined
|
|
27
|
+
|
|
28
|
+
export interface DecodeTokenizer {
|
|
29
|
+
done(): boolean,
|
|
30
|
+
next(): Token,
|
|
31
|
+
pos(): number,
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type TagDecoder = (inner: any) => any
|
|
35
|
+
|
|
36
|
+
export interface DecodeOptions {
|
|
37
|
+
allowIndefinite?: boolean
|
|
38
|
+
allowUndefined?: boolean
|
|
39
|
+
coerceUndefinedToNull?: boolean
|
|
40
|
+
allowInfinity?: boolean
|
|
41
|
+
allowNaN?: boolean
|
|
42
|
+
allowBigInt?: boolean
|
|
43
|
+
strict?: boolean
|
|
44
|
+
useMaps?: boolean
|
|
45
|
+
rejectDuplicateMapKeys?: boolean
|
|
46
|
+
retainStringBytes?: boolean
|
|
47
|
+
tags?: TagDecoder[],
|
|
48
|
+
tokenizer?: DecodeTokenizer
|
|
49
|
+
decodeErrPrefix: string
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface EncodeOptions {
|
|
53
|
+
float64?: boolean,
|
|
54
|
+
addBreakTokens?: boolean,
|
|
55
|
+
mapSorter?: MapSorter,
|
|
56
|
+
quickEncodeToken?: QuickEncodeToken,
|
|
57
|
+
typeEncoders?: { [typeName: string]: OptionalTypeEncoder }
|
|
58
|
+
encodeErrPrefix: string
|
|
59
|
+
}
|