@aztec/foundation 0.0.0-test.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/README.md +1 -0
- package/dest/array/array.d.ts +71 -0
- package/dest/array/array.d.ts.map +1 -0
- package/dest/array/array.js +100 -0
- package/dest/array/index.d.ts +2 -0
- package/dest/array/index.d.ts.map +1 -0
- package/dest/array/index.js +1 -0
- package/dest/async-map/index.d.ts +13 -0
- package/dest/async-map/index.d.ts.map +1 -0
- package/dest/async-map/index.js +17 -0
- package/dest/async-pool/index.d.ts +3 -0
- package/dest/async-pool/index.d.ts.map +1 -0
- package/dest/async-pool/index.js +47 -0
- package/dest/bigint-buffer/index.d.ts +42 -0
- package/dest/bigint-buffer/index.d.ts.map +1 -0
- package/dest/bigint-buffer/index.js +76 -0
- package/dest/buffer/buffer32.d.ts +91 -0
- package/dest/buffer/buffer32.d.ts.map +1 -0
- package/dest/buffer/buffer32.js +115 -0
- package/dest/buffer/index.d.ts +2 -0
- package/dest/buffer/index.d.ts.map +1 -0
- package/dest/buffer/index.js +1 -0
- package/dest/collection/array.d.ts +101 -0
- package/dest/collection/array.d.ts.map +1 -0
- package/dest/collection/array.js +164 -0
- package/dest/collection/index.d.ts +3 -0
- package/dest/collection/index.d.ts.map +1 -0
- package/dest/collection/index.js +2 -0
- package/dest/collection/object.d.ts +14 -0
- package/dest/collection/object.d.ts.map +1 -0
- package/dest/collection/object.js +32 -0
- package/dest/committable/committable.d.ts +28 -0
- package/dest/committable/committable.d.ts.map +1 -0
- package/dest/committable/committable.js +36 -0
- package/dest/committable/index.d.ts +2 -0
- package/dest/committable/index.d.ts.map +1 -0
- package/dest/committable/index.js +1 -0
- package/dest/config/env_var.d.ts +2 -0
- package/dest/config/env_var.d.ts.map +1 -0
- package/dest/config/env_var.js +1 -0
- package/dest/config/index.d.ts +66 -0
- package/dest/config/index.d.ts.map +1 -0
- package/dest/config/index.js +125 -0
- package/dest/crypto/aes128/index.d.ts +34 -0
- package/dest/crypto/aes128/index.d.ts.map +1 -0
- package/dest/crypto/aes128/index.js +49 -0
- package/dest/crypto/ecdsa/index.d.ts +39 -0
- package/dest/crypto/ecdsa/index.d.ts.map +1 -0
- package/dest/crypto/ecdsa/index.js +88 -0
- package/dest/crypto/ecdsa/signature.d.ts +71 -0
- package/dest/crypto/ecdsa/signature.d.ts.map +1 -0
- package/dest/crypto/ecdsa/signature.js +92 -0
- package/dest/crypto/grumpkin/index.d.ts +47 -0
- package/dest/crypto/grumpkin/index.d.ts.map +1 -0
- package/dest/crypto/grumpkin/index.js +154 -0
- package/dest/crypto/index.d.ts +15 -0
- package/dest/crypto/index.d.ts.map +1 -0
- package/dest/crypto/index.js +14 -0
- package/dest/crypto/keccak/index.d.ts +28 -0
- package/dest/crypto/keccak/index.d.ts.map +1 -0
- package/dest/crypto/keccak/index.js +248 -0
- package/dest/crypto/keys/index.d.ts +5 -0
- package/dest/crypto/keys/index.d.ts.map +1 -0
- package/dest/crypto/keys/index.js +7 -0
- package/dest/crypto/pedersen/index.d.ts +2 -0
- package/dest/crypto/pedersen/index.d.ts.map +1 -0
- package/dest/crypto/pedersen/index.js +1 -0
- package/dest/crypto/pedersen/pedersen.elliptic.d.ts +13 -0
- package/dest/crypto/pedersen/pedersen.elliptic.d.ts.map +1 -0
- package/dest/crypto/pedersen/pedersen.elliptic.js +582 -0
- package/dest/crypto/pedersen/pedersen.noble.d.ts +11 -0
- package/dest/crypto/pedersen/pedersen.noble.d.ts.map +1 -0
- package/dest/crypto/pedersen/pedersen.noble.js +558 -0
- package/dest/crypto/pedersen/pedersen.wasm.d.ts +21 -0
- package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -0
- package/dest/crypto/pedersen/pedersen.wasm.js +41 -0
- package/dest/crypto/poseidon/index.d.ts +26 -0
- package/dest/crypto/poseidon/index.d.ts.map +1 -0
- package/dest/crypto/poseidon/index.js +58 -0
- package/dest/crypto/random/index.d.ts +25 -0
- package/dest/crypto/random/index.d.ts.map +1 -0
- package/dest/crypto/random/index.js +70 -0
- package/dest/crypto/random/randomness_singleton.d.ts +25 -0
- package/dest/crypto/random/randomness_singleton.d.ts.map +1 -0
- package/dest/crypto/random/randomness_singleton.js +55 -0
- package/dest/crypto/schnorr/index.d.ts +30 -0
- package/dest/crypto/schnorr/index.d.ts.map +1 -0
- package/dest/crypto/schnorr/index.js +68 -0
- package/dest/crypto/schnorr/signature.d.ts +70 -0
- package/dest/crypto/schnorr/signature.d.ts.map +1 -0
- package/dest/crypto/schnorr/signature.js +93 -0
- package/dest/crypto/secp256k1/index.d.ts +32 -0
- package/dest/crypto/secp256k1/index.d.ts.map +1 -0
- package/dest/crypto/secp256k1/index.js +116 -0
- package/dest/crypto/secp256k1-signer/index.d.ts +3 -0
- package/dest/crypto/secp256k1-signer/index.d.ts.map +1 -0
- package/dest/crypto/secp256k1-signer/index.js +2 -0
- package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts +24 -0
- package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts.map +1 -0
- package/dest/crypto/secp256k1-signer/secp256k1_signer.js +30 -0
- package/dest/crypto/secp256k1-signer/utils.d.ts +40 -0
- package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -0
- package/dest/crypto/secp256k1-signer/utils.js +84 -0
- package/dest/crypto/serialize.d.ts +53 -0
- package/dest/crypto/serialize.d.ts.map +1 -0
- package/dest/crypto/serialize.js +68 -0
- package/dest/crypto/sha256/index.d.ts +20 -0
- package/dest/crypto/sha256/index.d.ts.map +1 -0
- package/dest/crypto/sha256/index.js +166 -0
- package/dest/crypto/sha512/index.d.ts +11 -0
- package/dest/crypto/sha512/index.d.ts.map +1 -0
- package/dest/crypto/sha512/index.js +12 -0
- package/dest/crypto/signature/index.d.ts +19 -0
- package/dest/crypto/signature/index.d.ts.map +1 -0
- package/dest/crypto/signature/index.js +3 -0
- package/dest/crypto/sync/index.d.ts +3 -0
- package/dest/crypto/sync/index.d.ts.map +1 -0
- package/dest/crypto/sync/index.js +4 -0
- package/dest/crypto/sync/pedersen/index.d.ts +21 -0
- package/dest/crypto/sync/pedersen/index.d.ts.map +1 -0
- package/dest/crypto/sync/pedersen/index.js +38 -0
- package/dest/crypto/sync/poseidon/index.d.ts +26 -0
- package/dest/crypto/sync/poseidon/index.d.ts.map +1 -0
- package/dest/crypto/sync/poseidon/index.js +53 -0
- package/dest/decorators/index.d.ts +2 -0
- package/dest/decorators/index.d.ts.map +1 -0
- package/dest/decorators/index.js +1 -0
- package/dest/decorators/memoize.d.ts +2 -0
- package/dest/decorators/memoize.d.ts.map +1 -0
- package/dest/decorators/memoize.js +11 -0
- package/dest/error/index.d.ts +21 -0
- package/dest/error/index.d.ts.map +1 -0
- package/dest/error/index.js +17 -0
- package/dest/eth-address/index.d.ts +134 -0
- package/dest/eth-address/index.d.ts.map +1 -0
- package/dest/eth-address/index.js +198 -0
- package/dest/eth-signature/eth_signature.d.ts +62 -0
- package/dest/eth-signature/eth_signature.d.ts.map +1 -0
- package/dest/eth-signature/eth_signature.js +91 -0
- package/dest/eth-signature/index.d.ts +2 -0
- package/dest/eth-signature/index.d.ts.map +1 -0
- package/dest/eth-signature/index.js +1 -0
- package/dest/fields/coordinate.d.ts +68 -0
- package/dest/fields/coordinate.d.ts.map +1 -0
- package/dest/fields/coordinate.js +96 -0
- package/dest/fields/fields.d.ts +176 -0
- package/dest/fields/fields.d.ts.map +1 -0
- package/dest/fields/fields.js +383 -0
- package/dest/fields/index.d.ts +4 -0
- package/dest/fields/index.d.ts.map +1 -0
- package/dest/fields/index.js +3 -0
- package/dest/fields/point.d.ts +175 -0
- package/dest/fields/point.d.ts.map +1 -0
- package/dest/fields/point.js +260 -0
- package/dest/fs/index.d.ts +2 -0
- package/dest/fs/index.d.ts.map +1 -0
- package/dest/fs/index.js +1 -0
- package/dest/fs/run_in_dir.d.ts +2 -0
- package/dest/fs/run_in_dir.d.ts.map +1 -0
- package/dest/fs/run_in_dir.js +31 -0
- package/dest/index.d.ts +31 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +31 -0
- package/dest/iterable/all.d.ts +9 -0
- package/dest/iterable/all.d.ts.map +1 -0
- package/dest/iterable/all.js +18 -0
- package/dest/iterable/filter.d.ts +10 -0
- package/dest/iterable/filter.d.ts.map +1 -0
- package/dest/iterable/filter.js +48 -0
- package/dest/iterable/index.d.ts +8 -0
- package/dest/iterable/index.d.ts.map +1 -0
- package/dest/iterable/index.js +7 -0
- package/dest/iterable/isAsyncIt.d.ts +7 -0
- package/dest/iterable/isAsyncIt.d.ts.map +1 -0
- package/dest/iterable/isAsyncIt.js +7 -0
- package/dest/iterable/map.d.ts +12 -0
- package/dest/iterable/map.d.ts.map +1 -0
- package/dest/iterable/map.js +36 -0
- package/dest/iterable/peek.d.ts +19 -0
- package/dest/iterable/peek.d.ts.map +1 -0
- package/dest/iterable/peek.js +33 -0
- package/dest/iterable/sort.d.ts +14 -0
- package/dest/iterable/sort.d.ts.map +1 -0
- package/dest/iterable/sort.js +15 -0
- package/dest/iterable/take.d.ts +10 -0
- package/dest/iterable/take.d.ts.map +1 -0
- package/dest/iterable/take.js +32 -0
- package/dest/iterable/toArray.d.ts +2 -0
- package/dest/iterable/toArray.d.ts.map +1 -0
- package/dest/iterable/toArray.js +7 -0
- package/dest/jest/setup.js +7 -0
- package/dest/json-rpc/client/fetch.d.ts +32 -0
- package/dest/json-rpc/client/fetch.d.ts.map +1 -0
- package/dest/json-rpc/client/fetch.js +77 -0
- package/dest/json-rpc/client/index.d.ts +3 -0
- package/dest/json-rpc/client/index.d.ts.map +1 -0
- package/dest/json-rpc/client/index.js +2 -0
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +26 -0
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -0
- package/dest/json-rpc/client/safe_json_rpc_client.js +57 -0
- package/dest/json-rpc/client/undici.d.ts +5 -0
- package/dest/json-rpc/client/undici.d.ts.map +1 -0
- package/dest/json-rpc/client/undici.js +63 -0
- package/dest/json-rpc/convert.d.ts +27 -0
- package/dest/json-rpc/convert.d.ts.map +1 -0
- package/dest/json-rpc/convert.js +48 -0
- package/dest/json-rpc/fixtures/class_a.d.ts +11 -0
- package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -0
- package/dest/json-rpc/fixtures/class_a.js +20 -0
- package/dest/json-rpc/fixtures/class_b.d.ts +11 -0
- package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -0
- package/dest/json-rpc/fixtures/class_b.js +20 -0
- package/dest/json-rpc/fixtures/test_state.d.ts +89 -0
- package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -0
- package/dest/json-rpc/fixtures/test_state.js +131 -0
- package/dest/json-rpc/index.d.ts +2 -0
- package/dest/json-rpc/index.d.ts.map +1 -0
- package/dest/json-rpc/index.js +1 -0
- package/dest/json-rpc/js_utils.d.ts +13 -0
- package/dest/json-rpc/js_utils.d.ts.map +1 -0
- package/dest/json-rpc/js_utils.js +16 -0
- package/dest/json-rpc/server/index.d.ts +2 -0
- package/dest/json-rpc/server/index.d.ts.map +1 -0
- package/dest/json-rpc/server/index.js +1 -0
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts +140 -0
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -0
- package/dest/json-rpc/server/safe_json_rpc_server.js +346 -0
- package/dest/json-rpc/server/telemetry.d.ts +2 -0
- package/dest/json-rpc/server/telemetry.d.ts.map +1 -0
- package/dest/json-rpc/server/telemetry.js +0 -0
- package/dest/json-rpc/test/index.d.ts +2 -0
- package/dest/json-rpc/test/index.d.ts.map +1 -0
- package/dest/json-rpc/test/index.js +1 -0
- package/dest/json-rpc/test/integration.d.ts +15 -0
- package/dest/json-rpc/test/integration.d.ts.map +1 -0
- package/dest/json-rpc/test/integration.js +21 -0
- package/dest/log/console.d.ts +11 -0
- package/dest/log/console.d.ts.map +1 -0
- package/dest/log/console.js +36 -0
- package/dest/log/debug.d.ts +56 -0
- package/dest/log/debug.d.ts.map +1 -0
- package/dest/log/debug.js +75 -0
- package/dest/log/gcloud-logger-config.d.ts +14 -0
- package/dest/log/gcloud-logger-config.d.ts.map +1 -0
- package/dest/log/gcloud-logger-config.js +66 -0
- package/dest/log/index.d.ts +7 -0
- package/dest/log/index.d.ts.map +1 -0
- package/dest/log/index.js +6 -0
- package/dest/log/libp2p_logger.d.ts +7 -0
- package/dest/log/libp2p_logger.d.ts.map +1 -0
- package/dest/log/libp2p_logger.js +55 -0
- package/dest/log/log-filters.d.ts +7 -0
- package/dest/log/log-filters.d.ts.map +1 -0
- package/dest/log/log-filters.js +59 -0
- package/dest/log/log-levels.d.ts +3 -0
- package/dest/log/log-levels.d.ts.map +1 -0
- package/dest/log/log-levels.js +10 -0
- package/dest/log/log_fn.d.ts +7 -0
- package/dest/log/log_fn.d.ts.map +1 -0
- package/dest/log/log_fn.js +1 -0
- package/dest/log/log_history.d.ts +31 -0
- package/dest/log/log_history.d.ts.map +1 -0
- package/dest/log/log_history.js +38 -0
- package/dest/log/pino-logger.d.ts +57 -0
- package/dest/log/pino-logger.d.ts.map +1 -0
- package/dest/log/pino-logger.js +207 -0
- package/dest/message/index.d.ts +32 -0
- package/dest/message/index.d.ts.map +1 -0
- package/dest/message/index.js +27 -0
- package/dest/mutex/index.d.ts +53 -0
- package/dest/mutex/index.d.ts.map +1 -0
- package/dest/mutex/index.js +78 -0
- package/dest/mutex/mutex_database.d.ts +10 -0
- package/dest/mutex/mutex_database.d.ts.map +1 -0
- package/dest/mutex/mutex_database.js +4 -0
- package/dest/noir/index.d.ts +2 -0
- package/dest/noir/index.d.ts.map +1 -0
- package/dest/noir/index.js +1 -0
- package/dest/noir/noir_package_config.d.ts +129 -0
- package/dest/noir/noir_package_config.d.ts.map +1 -0
- package/dest/noir/noir_package_config.js +36 -0
- package/dest/promise/index.d.ts +3 -0
- package/dest/promise/index.d.ts.map +1 -0
- package/dest/promise/index.js +2 -0
- package/dest/promise/running-promise.d.ts +47 -0
- package/dest/promise/running-promise.d.ts.map +1 -0
- package/dest/promise/running-promise.js +110 -0
- package/dest/promise/utils.d.ts +12 -0
- package/dest/promise/utils.d.ts.map +1 -0
- package/dest/promise/utils.js +20 -0
- package/dest/queue/base_memory_queue.d.ts +65 -0
- package/dest/queue/base_memory_queue.d.ts.map +1 -0
- package/dest/queue/base_memory_queue.js +116 -0
- package/dest/queue/batch_queue.d.ts +47 -0
- package/dest/queue/batch_queue.d.ts.map +1 -0
- package/dest/queue/batch_queue.js +105 -0
- package/dest/queue/bounded_serial_queue.d.ts +56 -0
- package/dest/queue/bounded_serial_queue.d.ts.map +1 -0
- package/dest/queue/bounded_serial_queue.js +84 -0
- package/dest/queue/fifo_memory_queue.d.ts +21 -0
- package/dest/queue/fifo_memory_queue.d.ts.map +1 -0
- package/dest/queue/fifo_memory_queue.js +29 -0
- package/dest/queue/index.d.ts +7 -0
- package/dest/queue/index.d.ts.map +1 -0
- package/dest/queue/index.js +6 -0
- package/dest/queue/priority_memory_queue.d.ts +13 -0
- package/dest/queue/priority_memory_queue.d.ts.map +1 -0
- package/dest/queue/priority_memory_queue.js +16 -0
- package/dest/queue/priority_queue.d.ts +14 -0
- package/dest/queue/priority_queue.d.ts.map +1 -0
- package/dest/queue/priority_queue.js +29 -0
- package/dest/queue/semaphore.d.ts +23 -0
- package/dest/queue/semaphore.d.ts.map +1 -0
- package/dest/queue/semaphore.js +26 -0
- package/dest/queue/serial_queue.d.ts +49 -0
- package/dest/queue/serial_queue.d.ts.map +1 -0
- package/dest/queue/serial_queue.js +72 -0
- package/dest/retry/index.d.ts +44 -0
- package/dest/retry/index.d.ts.map +1 -0
- package/dest/retry/index.js +93 -0
- package/dest/running-promise/index.d.ts +2 -0
- package/dest/running-promise/index.d.ts.map +1 -0
- package/dest/running-promise/index.js +1 -0
- package/dest/schemas/api.d.ts +21 -0
- package/dest/schemas/api.d.ts.map +1 -0
- package/dest/schemas/api.js +3 -0
- package/dest/schemas/index.d.ts +6 -0
- package/dest/schemas/index.d.ts.map +1 -0
- package/dest/schemas/index.js +5 -0
- package/dest/schemas/parse.d.ts +9 -0
- package/dest/schemas/parse.d.ts.map +1 -0
- package/dest/schemas/parse.js +22 -0
- package/dest/schemas/schemas.d.ts +45 -0
- package/dest/schemas/schemas.d.ts.map +1 -0
- package/dest/schemas/schemas.js +38 -0
- package/dest/schemas/types.d.ts +3 -0
- package/dest/schemas/types.d.ts.map +1 -0
- package/dest/schemas/types.js +1 -0
- package/dest/schemas/utils.d.ts +53 -0
- package/dest/schemas/utils.d.ts.map +1 -0
- package/dest/schemas/utils.js +60 -0
- package/dest/serialize/buffer_reader.d.ts +239 -0
- package/dest/serialize/buffer_reader.d.ts.map +1 -0
- package/dest/serialize/buffer_reader.js +290 -0
- package/dest/serialize/field_reader.d.ts +112 -0
- package/dest/serialize/field_reader.d.ts.map +1 -0
- package/dest/serialize/field_reader.js +147 -0
- package/dest/serialize/free_funcs.d.ts +105 -0
- package/dest/serialize/free_funcs.d.ts.map +1 -0
- package/dest/serialize/free_funcs.js +189 -0
- package/dest/serialize/index.d.ts +7 -0
- package/dest/serialize/index.d.ts.map +1 -0
- package/dest/serialize/index.js +6 -0
- package/dest/serialize/serialize.d.ts +182 -0
- package/dest/serialize/serialize.d.ts.map +1 -0
- package/dest/serialize/serialize.js +248 -0
- package/dest/serialize/type_registry.d.ts +23 -0
- package/dest/serialize/type_registry.d.ts.map +1 -0
- package/dest/serialize/type_registry.js +61 -0
- package/dest/serialize/types.d.ts +33 -0
- package/dest/serialize/types.d.ts.map +1 -0
- package/dest/serialize/types.js +21 -0
- package/dest/sleep/index.d.ts +51 -0
- package/dest/sleep/index.d.ts.map +1 -0
- package/dest/sleep/index.js +67 -0
- package/dest/string/index.d.ts +11 -0
- package/dest/string/index.d.ts.map +1 -0
- package/dest/string/index.js +24 -0
- package/dest/testing/files/index.d.ts +20 -0
- package/dest/testing/files/index.d.ts.map +1 -0
- package/dest/testing/files/index.js +58 -0
- package/dest/testing/index.d.ts +4 -0
- package/dest/testing/index.d.ts.map +1 -0
- package/dest/testing/index.js +3 -0
- package/dest/testing/port_allocator.d.ts +10 -0
- package/dest/testing/port_allocator.d.ts.map +1 -0
- package/dest/testing/port_allocator.js +29 -0
- package/dest/testing/snapshot_serializer.d.ts +5 -0
- package/dest/testing/snapshot_serializer.d.ts.map +1 -0
- package/dest/testing/snapshot_serializer.js +32 -0
- package/dest/testing/test_data.d.ts +7 -0
- package/dest/testing/test_data.d.ts.map +1 -0
- package/dest/testing/test_data.js +29 -0
- package/dest/timer/date.d.ts +13 -0
- package/dest/timer/date.d.ts.map +1 -0
- package/dest/timer/date.js +24 -0
- package/dest/timer/elapsed.d.ts +13 -0
- package/dest/timer/elapsed.d.ts.map +1 -0
- package/dest/timer/elapsed.js +25 -0
- package/dest/timer/index.d.ts +5 -0
- package/dest/timer/index.d.ts.map +1 -0
- package/dest/timer/index.js +4 -0
- package/dest/timer/timeout.d.ts +41 -0
- package/dest/timer/timeout.d.ts.map +1 -0
- package/dest/timer/timeout.js +66 -0
- package/dest/timer/timer.d.ts +37 -0
- package/dest/timer/timer.d.ts.map +1 -0
- package/dest/timer/timer.js +40 -0
- package/dest/transport/browser/index.d.ts +5 -0
- package/dest/transport/browser/index.d.ts.map +1 -0
- package/dest/transport/browser/index.js +4 -0
- package/dest/transport/browser/message_port_socket.d.ts +37 -0
- package/dest/transport/browser/message_port_socket.d.ts.map +1 -0
- package/dest/transport/browser/message_port_socket.js +42 -0
- package/dest/transport/browser/shared_worker_connector.d.ts +19 -0
- package/dest/transport/browser/shared_worker_connector.d.ts.map +1 -0
- package/dest/transport/browser/shared_worker_connector.js +19 -0
- package/dest/transport/browser/shared_worker_listener.d.ts +38 -0
- package/dest/transport/browser/shared_worker_listener.d.ts.map +1 -0
- package/dest/transport/browser/shared_worker_listener.js +33 -0
- package/dest/transport/browser/worker_connector.d.ts +26 -0
- package/dest/transport/browser/worker_connector.d.ts.map +1 -0
- package/dest/transport/browser/worker_connector.js +30 -0
- package/dest/transport/browser/worker_listener.d.ts +39 -0
- package/dest/transport/browser/worker_listener.d.ts.map +1 -0
- package/dest/transport/browser/worker_listener.js +35 -0
- package/dest/transport/dispatch/create_dispatch_fn.d.ts +25 -0
- package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -0
- package/dest/transport/dispatch/create_dispatch_fn.js +17 -0
- package/dest/transport/dispatch/create_dispatch_proxy.d.ts +102 -0
- package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -0
- package/dest/transport/dispatch/create_dispatch_proxy.js +59 -0
- package/dest/transport/dispatch/messages.d.ts +52 -0
- package/dest/transport/dispatch/messages.d.ts.map +1 -0
- package/dest/transport/dispatch/messages.js +13 -0
- package/dest/transport/index.d.ts +12 -0
- package/dest/transport/index.d.ts.map +1 -0
- package/dest/transport/index.js +11 -0
- package/dest/transport/interface/connector.d.ts +8 -0
- package/dest/transport/interface/connector.d.ts.map +1 -0
- package/dest/transport/interface/connector.js +3 -0
- package/dest/transport/interface/listener.d.ts +13 -0
- package/dest/transport/interface/listener.d.ts.map +1 -0
- package/dest/transport/interface/listener.js +4 -0
- package/dest/transport/interface/socket.d.ts +13 -0
- package/dest/transport/interface/socket.d.ts.map +1 -0
- package/dest/transport/interface/socket.js +7 -0
- package/dest/transport/interface/transferable.d.ts +68 -0
- package/dest/transport/interface/transferable.d.ts.map +1 -0
- package/dest/transport/interface/transferable.js +63 -0
- package/dest/transport/node/index.d.ts +3 -0
- package/dest/transport/node/index.d.ts.map +1 -0
- package/dest/transport/node/index.js +2 -0
- package/dest/transport/node/node_connector.d.ts +28 -0
- package/dest/transport/node/node_connector.d.ts.map +1 -0
- package/dest/transport/node/node_connector.js +26 -0
- package/dest/transport/node/node_connector_socket.d.ts +42 -0
- package/dest/transport/node/node_connector_socket.d.ts.map +1 -0
- package/dest/transport/node/node_connector_socket.js +44 -0
- package/dest/transport/node/node_listener.d.ts +26 -0
- package/dest/transport/node/node_listener.d.ts.map +1 -0
- package/dest/transport/node/node_listener.js +26 -0
- package/dest/transport/node/node_listener_socket.d.ts +37 -0
- package/dest/transport/node/node_listener_socket.d.ts.map +1 -0
- package/dest/transport/node/node_listener_socket.js +40 -0
- package/dest/transport/transport_client.d.ts +61 -0
- package/dest/transport/transport_client.d.ts.map +1 -0
- package/dest/transport/transport_client.js +96 -0
- package/dest/transport/transport_server.d.ts +56 -0
- package/dest/transport/transport_server.d.ts.map +1 -0
- package/dest/transport/transport_server.js +114 -0
- package/dest/trees/hasher.d.ts +39 -0
- package/dest/trees/hasher.d.ts.map +1 -0
- package/dest/trees/hasher.js +5 -0
- package/dest/trees/index.d.ts +11 -0
- package/dest/trees/index.d.ts.map +1 -0
- package/dest/trees/index.js +10 -0
- package/dest/trees/indexed_merkle_tree.d.ts +13 -0
- package/dest/trees/indexed_merkle_tree.d.ts.map +1 -0
- package/dest/trees/indexed_merkle_tree.js +27 -0
- package/dest/trees/indexed_merkle_tree_calculator.d.ts +23 -0
- package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -0
- package/dest/trees/indexed_merkle_tree_calculator.js +83 -0
- package/dest/trees/indexed_tree_leaf.d.ts +57 -0
- package/dest/trees/indexed_tree_leaf.d.ts.map +1 -0
- package/dest/trees/indexed_tree_leaf.js +5 -0
- package/dest/trees/membership_witness.d.ts +62 -0
- package/dest/trees/membership_witness.d.ts.map +1 -0
- package/dest/trees/membership_witness.js +70 -0
- package/dest/trees/merkle_tree.d.ts +18 -0
- package/dest/trees/merkle_tree.d.ts.map +1 -0
- package/dest/trees/merkle_tree.js +58 -0
- package/dest/trees/merkle_tree_calculator.d.ts +16 -0
- package/dest/trees/merkle_tree_calculator.d.ts.map +1 -0
- package/dest/trees/merkle_tree_calculator.js +61 -0
- package/dest/trees/sibling_path.d.ts +132 -0
- package/dest/trees/sibling_path.d.ts.map +1 -0
- package/dest/trees/sibling_path.js +144 -0
- package/dest/trees/unbalanced_merkle_tree.d.ts +17 -0
- package/dest/trees/unbalanced_merkle_tree.d.ts.map +1 -0
- package/dest/trees/unbalanced_merkle_tree.js +100 -0
- package/dest/trees/unbalanced_tree_store.d.ts +19 -0
- package/dest/trees/unbalanced_tree_store.d.ts.map +1 -0
- package/dest/trees/unbalanced_tree_store.js +94 -0
- package/dest/types/index.d.ts +19 -0
- package/dest/types/index.d.ts.map +1 -0
- package/dest/types/index.js +3 -0
- package/dest/url/index.d.ts +9 -0
- package/dest/url/index.d.ts.map +1 -0
- package/dest/url/index.js +62 -0
- package/dest/validation/index.d.ts +9 -0
- package/dest/validation/index.d.ts.map +1 -0
- package/dest/validation/index.js +15 -0
- package/dest/wasm/empty_wasi_sdk.d.ts +130 -0
- package/dest/wasm/empty_wasi_sdk.d.ts.map +1 -0
- package/dest/wasm/empty_wasi_sdk.js +148 -0
- package/dest/wasm/index.d.ts +2 -0
- package/dest/wasm/index.d.ts.map +1 -0
- package/dest/wasm/index.js +1 -0
- package/dest/wasm/wasm_module.d.ts +136 -0
- package/dest/wasm/wasm_module.d.ts.map +1 -0
- package/dest/wasm/wasm_module.js +196 -0
- package/dest/worker/browser/index.d.ts +3 -0
- package/dest/worker/browser/index.d.ts.map +1 -0
- package/dest/worker/browser/index.js +2 -0
- package/dest/worker/browser/start_web_module.d.ts +7 -0
- package/dest/worker/browser/start_web_module.d.ts.map +1 -0
- package/dest/worker/browser/start_web_module.js +27 -0
- package/dest/worker/browser/web_data_store.d.ts +24 -0
- package/dest/worker/browser/web_data_store.d.ts.map +1 -0
- package/dest/worker/browser/web_data_store.js +29 -0
- package/dest/worker/browser/web_worker.d.ts +10 -0
- package/dest/worker/browser/web_worker.d.ts.map +1 -0
- package/dest/worker/browser/web_worker.js +25 -0
- package/dest/worker/data_store.d.ts +21 -0
- package/dest/worker/data_store.d.ts.map +1 -0
- package/dest/worker/data_store.js +3 -0
- package/dest/worker/index.d.ts +3 -0
- package/dest/worker/index.d.ts.map +1 -0
- package/dest/worker/index.js +1 -0
- package/dest/worker/node/index.d.ts +3 -0
- package/dest/worker/node/index.d.ts.map +1 -0
- package/dest/worker/node/index.js +2 -0
- package/dest/worker/node/node_data_store.d.ts +13 -0
- package/dest/worker/node/node_data_store.d.ts.map +1 -0
- package/dest/worker/node/node_data_store.js +20 -0
- package/dest/worker/node/node_worker.d.ts +6 -0
- package/dest/worker/node/node_worker.d.ts.map +1 -0
- package/dest/worker/node/node_worker.js +22 -0
- package/dest/worker/node/start_node_module.d.ts +7 -0
- package/dest/worker/node/start_node_module.d.ts.map +1 -0
- package/dest/worker/node/start_node_module.js +31 -0
- package/dest/worker/wasm_worker.d.ts +9 -0
- package/dest/worker/wasm_worker.d.ts.map +1 -0
- package/dest/worker/wasm_worker.js +3 -0
- package/dest/worker/worker_pool.d.ts +40 -0
- package/dest/worker/worker_pool.d.ts.map +1 -0
- package/dest/worker/worker_pool.js +51 -0
- package/package.json +176 -0
- package/src/array/array.ts +150 -0
- package/src/array/index.ts +1 -0
- package/src/async-map/index.ts +18 -0
- package/src/async-pool/index.ts +50 -0
- package/src/bigint-buffer/index.ts +87 -0
- package/src/buffer/buffer32.ts +144 -0
- package/src/buffer/index.ts +1 -0
- package/src/collection/array.ts +203 -0
- package/src/collection/index.ts +2 -0
- package/src/collection/object.ts +52 -0
- package/src/committable/committable.ts +46 -0
- package/src/committable/index.ts +1 -0
- package/src/config/env_var.ts +207 -0
- package/src/config/index.ts +167 -0
- package/src/crypto/aes128/index.ts +59 -0
- package/src/crypto/ecdsa/index.ts +70 -0
- package/src/crypto/ecdsa/signature.ts +100 -0
- package/src/crypto/grumpkin/index.ts +97 -0
- package/src/crypto/index.ts +14 -0
- package/src/crypto/keccak/index.ts +283 -0
- package/src/crypto/keys/index.ts +10 -0
- package/src/crypto/pedersen/index.ts +1 -0
- package/src/crypto/pedersen/pedersen.elliptic.ts +584 -0
- package/src/crypto/pedersen/pedersen.noble.ts +573 -0
- package/src/crypto/pedersen/pedersen.wasm.ts +48 -0
- package/src/crypto/poseidon/index.ts +77 -0
- package/src/crypto/random/index.ts +85 -0
- package/src/crypto/random/randomness_singleton.ts +62 -0
- package/src/crypto/schnorr/index.ts +55 -0
- package/src/crypto/schnorr/signature.ts +116 -0
- package/src/crypto/secp256k1/index.ts +57 -0
- package/src/crypto/secp256k1-signer/index.ts +2 -0
- package/src/crypto/secp256k1-signer/secp256k1_signer.ts +38 -0
- package/src/crypto/secp256k1-signer/utils.ts +99 -0
- package/src/crypto/serialize.ts +85 -0
- package/src/crypto/sha256/index.ts +147 -0
- package/src/crypto/sha512/index.ts +16 -0
- package/src/crypto/signature/index.ts +17 -0
- package/src/crypto/sync/index.ts +6 -0
- package/src/crypto/sync/pedersen/index.ts +45 -0
- package/src/crypto/sync/poseidon/index.ts +76 -0
- package/src/decorators/index.ts +1 -0
- package/src/decorators/memoize.ts +11 -0
- package/src/error/index.ts +22 -0
- package/src/eth-address/index.ts +241 -0
- package/src/eth-signature/eth_signature.ts +128 -0
- package/src/eth-signature/index.ts +1 -0
- package/src/fields/coordinate.ts +104 -0
- package/src/fields/fields.ts +505 -0
- package/src/fields/index.ts +3 -0
- package/src/fields/point.ts +300 -0
- package/src/fs/index.ts +1 -0
- package/src/fs/run_in_dir.ts +33 -0
- package/src/index.ts +31 -0
- package/src/iterable/all.ts +32 -0
- package/src/iterable/filter.ts +77 -0
- package/src/iterable/index.ts +7 -0
- package/src/iterable/isAsyncIt.ts +8 -0
- package/src/iterable/map.ts +66 -0
- package/src/iterable/peek.ts +58 -0
- package/src/iterable/sort.ts +39 -0
- package/src/iterable/take.ts +54 -0
- package/src/iterable/toArray.ts +9 -0
- package/src/jest/setup.mjs +9 -0
- package/src/json-rpc/README.md +55 -0
- package/src/json-rpc/client/fetch.ts +103 -0
- package/src/json-rpc/client/index.ts +2 -0
- package/src/json-rpc/client/safe_json_rpc_client.ts +67 -0
- package/src/json-rpc/client/undici.ts +75 -0
- package/src/json-rpc/convert.ts +61 -0
- package/src/json-rpc/fixtures/class_a.ts +15 -0
- package/src/json-rpc/fixtures/class_b.ts +15 -0
- package/src/json-rpc/fixtures/test_state.ts +143 -0
- package/src/json-rpc/index.ts +1 -0
- package/src/json-rpc/js_utils.ts +21 -0
- package/src/json-rpc/server/index.ts +1 -0
- package/src/json-rpc/server/safe_json_rpc_server.ts +376 -0
- package/src/json-rpc/server/telemetry.ts +0 -0
- package/src/json-rpc/test/index.ts +1 -0
- package/src/json-rpc/test/integration.ts +35 -0
- package/src/log/console.ts +39 -0
- package/src/log/debug.ts +104 -0
- package/src/log/gcloud-logger-config.ts +71 -0
- package/src/log/index.ts +6 -0
- package/src/log/libp2p_logger.ts +67 -0
- package/src/log/log-filters.ts +63 -0
- package/src/log/log-levels.ts +3 -0
- package/src/log/log_fn.ts +5 -0
- package/src/log/log_history.ts +44 -0
- package/src/log/pino-logger.ts +243 -0
- package/src/message/index.ts +43 -0
- package/src/mutex/index.ts +84 -0
- package/src/mutex/mutex_database.ts +12 -0
- package/src/noir/index.ts +1 -0
- package/src/noir/noir_package_config.ts +54 -0
- package/src/promise/index.ts +2 -0
- package/src/promise/running-promise.ts +125 -0
- package/src/promise/utils.ts +29 -0
- package/src/queue/base_memory_queue.ts +138 -0
- package/src/queue/batch_queue.ts +120 -0
- package/src/queue/bounded_serial_queue.ts +100 -0
- package/src/queue/fifo_memory_queue.ts +39 -0
- package/src/queue/index.ts +6 -0
- package/src/queue/priority_memory_queue.ts +20 -0
- package/src/queue/priority_queue.ts +34 -0
- package/src/queue/semaphore.ts +33 -0
- package/src/queue/serial_queue.ts +86 -0
- package/src/retry/index.ts +100 -0
- package/src/running-promise/index.ts +1 -0
- package/src/schemas/api.ts +47 -0
- package/src/schemas/index.ts +5 -0
- package/src/schemas/parse.ts +29 -0
- package/src/schemas/schemas.ts +64 -0
- package/src/schemas/types.ts +3 -0
- package/src/schemas/utils.ts +112 -0
- package/src/serialize/buffer_reader.ts +383 -0
- package/src/serialize/field_reader.ts +184 -0
- package/src/serialize/free_funcs.ts +204 -0
- package/src/serialize/index.ts +6 -0
- package/src/serialize/serialize.ts +336 -0
- package/src/serialize/type_registry.ts +75 -0
- package/src/serialize/types.ts +40 -0
- package/src/sleep/index.ts +75 -0
- package/src/string/index.ts +31 -0
- package/src/testing/files/index.ts +69 -0
- package/src/testing/index.ts +3 -0
- package/src/testing/port_allocator.ts +31 -0
- package/src/testing/snapshot_serializer.ts +33 -0
- package/src/testing/test_data.ts +36 -0
- package/src/timer/date.ts +24 -0
- package/src/timer/elapsed.ts +23 -0
- package/src/timer/index.ts +4 -0
- package/src/timer/timeout.ts +70 -0
- package/src/timer/timer.ts +48 -0
- package/src/transport/browser/index.ts +4 -0
- package/src/transport/browser/message_port_socket.ts +48 -0
- package/src/transport/browser/shared_worker_connector.ts +21 -0
- package/src/transport/browser/shared_worker_listener.ts +53 -0
- package/src/transport/browser/worker_connector.ts +30 -0
- package/src/transport/browser/worker_listener.ts +54 -0
- package/src/transport/dispatch/create_dispatch_fn.ts +35 -0
- package/src/transport/dispatch/create_dispatch_proxy.ts +141 -0
- package/src/transport/dispatch/messages.ts +58 -0
- package/src/transport/index.ts +11 -0
- package/src/transport/interface/connector.ts +9 -0
- package/src/transport/interface/listener.ts +16 -0
- package/src/transport/interface/socket.ts +15 -0
- package/src/transport/interface/transferable.ts +125 -0
- package/src/transport/node/index.ts +2 -0
- package/src/transport/node/node_connector.ts +30 -0
- package/src/transport/node/node_connector_socket.ts +52 -0
- package/src/transport/node/node_listener.ts +34 -0
- package/src/transport/node/node_listener_socket.ts +48 -0
- package/src/transport/transport_client.ts +131 -0
- package/src/transport/transport_server.ts +108 -0
- package/src/trees/hasher.ts +39 -0
- package/src/trees/index.ts +10 -0
- package/src/trees/indexed_merkle_tree.ts +36 -0
- package/src/trees/indexed_merkle_tree_calculator.ts +94 -0
- package/src/trees/indexed_tree_leaf.ts +56 -0
- package/src/trees/membership_witness.ts +99 -0
- package/src/trees/merkle_tree.ts +72 -0
- package/src/trees/merkle_tree_calculator.ts +67 -0
- package/src/trees/sibling_path.ts +183 -0
- package/src/trees/unbalanced_merkle_tree.ts +103 -0
- package/src/trees/unbalanced_tree_store.ts +102 -0
- package/src/types/index.ts +25 -0
- package/src/url/index.ts +73 -0
- package/src/validation/index.ts +18 -0
- package/src/wasm/README.md +6 -0
- package/src/wasm/empty_wasi_sdk.ts +166 -0
- package/src/wasm/fixtures/gcd.wasm +0 -0
- package/src/wasm/fixtures/gcd.wat +27 -0
- package/src/wasm/index.ts +1 -0
- package/src/wasm/wasm_module.ts +260 -0
- package/src/worker/browser/index.ts +2 -0
- package/src/worker/browser/start_web_module.ts +24 -0
- package/src/worker/browser/web_data_store.ts +38 -0
- package/src/worker/browser/web_worker.ts +25 -0
- package/src/worker/data_store.ts +19 -0
- package/src/worker/index.ts +2 -0
- package/src/worker/node/index.ts +2 -0
- package/src/worker/node/node_data_store.ts +27 -0
- package/src/worker/node/node_worker.ts +23 -0
- package/src/worker/node/start_node_module.ts +30 -0
- package/src/worker/wasm_worker.ts +7 -0
- package/src/worker/worker_pool.ts +73 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { pedersenHash } from '@aztec/foundation/crypto';
|
|
2
|
+
|
|
3
|
+
import type { AsyncHasher } from './hasher.js';
|
|
4
|
+
import { MerkleTree } from './merkle_tree.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Merkle tree calculator.
|
|
8
|
+
*/
|
|
9
|
+
export class MerkleTreeCalculator {
|
|
10
|
+
private constructor(private height: number, private zeroHashes: Buffer[], private hasher: AsyncHasher['hash']) {
|
|
11
|
+
this.hasher = hasher;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
static async create(
|
|
15
|
+
height: number,
|
|
16
|
+
zeroLeaf = Buffer.alloc(32),
|
|
17
|
+
hasher = async (left: Buffer, right: Buffer) => (await pedersenHash([left, right])).toBuffer(),
|
|
18
|
+
) {
|
|
19
|
+
const zeroHashes = [zeroLeaf];
|
|
20
|
+
for (let i = 0; i < height; i++) {
|
|
21
|
+
zeroHashes.push(await hasher(zeroHashes[i], zeroHashes[i]));
|
|
22
|
+
}
|
|
23
|
+
return new MerkleTreeCalculator(height, zeroHashes, hasher);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async computeTree(leaves: Buffer[] = []): Promise<MerkleTree> {
|
|
27
|
+
if (leaves.length === 0) {
|
|
28
|
+
leaves = new Array(2 ** this.height).fill(this.zeroHashes[0]);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let result = leaves.slice();
|
|
32
|
+
|
|
33
|
+
for (let i = 0; i < this.height; ++i) {
|
|
34
|
+
const numLeaves = 2 ** (this.height - i);
|
|
35
|
+
const newLeaves: Buffer[] = [];
|
|
36
|
+
for (let j = 0; j < leaves.length / 2; ++j) {
|
|
37
|
+
const l = leaves[j * 2];
|
|
38
|
+
const r = leaves[j * 2 + 1] || this.zeroHashes[i];
|
|
39
|
+
newLeaves[j] = await this.hasher(l, r);
|
|
40
|
+
}
|
|
41
|
+
result = result.concat(new Array(numLeaves - leaves.length).fill(this.zeroHashes[i]), newLeaves);
|
|
42
|
+
leaves = newLeaves;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return new MerkleTree(this.height, result);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async computeTreeRoot(leaves: Buffer[] = []): Promise<Buffer> {
|
|
49
|
+
if (leaves.length === 0) {
|
|
50
|
+
return this.zeroHashes[this.zeroHashes.length - 1];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
leaves = leaves.slice();
|
|
54
|
+
|
|
55
|
+
for (let i = 0; i < this.height; ++i) {
|
|
56
|
+
let j = 0;
|
|
57
|
+
for (; j < leaves.length / 2; ++j) {
|
|
58
|
+
const l = leaves[j * 2];
|
|
59
|
+
const r = leaves[j * 2 + 1] || this.zeroHashes[i];
|
|
60
|
+
leaves[j] = await this.hasher(l, r);
|
|
61
|
+
}
|
|
62
|
+
leaves = leaves.slice(0, j);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return leaves[0];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { makeTuple } from '../array/array.js';
|
|
2
|
+
import { pedersenHash } from '../crypto/index.js';
|
|
3
|
+
import { Fr } from '../fields/index.js';
|
|
4
|
+
import { schemas } from '../schemas/index.js';
|
|
5
|
+
import {
|
|
6
|
+
type Tuple,
|
|
7
|
+
assertLength,
|
|
8
|
+
deserializeArrayFromVector,
|
|
9
|
+
serializeArrayOfBufferableToVector,
|
|
10
|
+
} from '../serialize/index.js';
|
|
11
|
+
import { bufferToHex, hexToBuffer } from '../string/index.js';
|
|
12
|
+
import type { Hasher } from './hasher.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Contains functionality to compute and serialize/deserialize a sibling path.
|
|
16
|
+
* E.g. Sibling path for a leaf at index 3 in a tree of depth 3 consists of:
|
|
17
|
+
* d0: [ root ]
|
|
18
|
+
* d1: [ ] [*]
|
|
19
|
+
* d2: [*] [ ] [ ] [ ]
|
|
20
|
+
* d3: [ ] [ ] [*] [ ] [ ] [ ] [ ] [ ].
|
|
21
|
+
*
|
|
22
|
+
* And the elements would be ordered as: [ leaf_at_index_2, node_at_level_2_index_0, node_at_level_1_index_1 ].
|
|
23
|
+
*/
|
|
24
|
+
export class SiblingPath<N extends number> {
|
|
25
|
+
private data: Tuple<Buffer, N>;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Constructor.
|
|
29
|
+
* @param pathSize - The size of the sibling path.
|
|
30
|
+
* @param path - The sibling path data.
|
|
31
|
+
*/
|
|
32
|
+
constructor(
|
|
33
|
+
/** Size of the sibling path (number of fields it contains). */
|
|
34
|
+
public pathSize: N,
|
|
35
|
+
/** The sibling path data. */
|
|
36
|
+
path: Buffer[],
|
|
37
|
+
) {
|
|
38
|
+
this.data = assertLength(path, pathSize);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
static get schema() {
|
|
42
|
+
return schemas.Buffer.transform(b => SiblingPath.fromBuffer(b));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static schemaFor<N extends number>(size: N) {
|
|
46
|
+
return schemas.Buffer.transform(b => SiblingPath.fromBuffer(b) as SiblingPath<N>).refine(
|
|
47
|
+
path => path.pathSize === size,
|
|
48
|
+
path => ({ message: `Expected sibling path size ${size} but got ${path.pathSize}` }),
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
toJSON() {
|
|
53
|
+
return this.toBuffer();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Returns sibling path hashed up from the a element.
|
|
58
|
+
* @param size - The number of elements in a given path.
|
|
59
|
+
* @param zeroElement - Value of the zero element.
|
|
60
|
+
* @param hasher - Implementation of a hasher interface.
|
|
61
|
+
* @returns A sibling path hashed up from a zero element.
|
|
62
|
+
*/
|
|
63
|
+
public static ZERO<N extends number>(size: N, zeroElement: Buffer, hasher: Hasher): SiblingPath<N> {
|
|
64
|
+
const bufs: Buffer[] = [];
|
|
65
|
+
let current = zeroElement;
|
|
66
|
+
for (let i = 0; i < size; ++i) {
|
|
67
|
+
bufs.push(current);
|
|
68
|
+
current = hasher.hash(current, current);
|
|
69
|
+
}
|
|
70
|
+
return new SiblingPath(size, bufs);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
static random<N extends number>(number: N) {
|
|
74
|
+
const data = Array.from({ length: number }, () => Fr.random().toBuffer());
|
|
75
|
+
return new SiblingPath(number, data);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Serializes this SiblingPath object to a buffer.
|
|
80
|
+
* @returns The buffer representation of this object.
|
|
81
|
+
*/
|
|
82
|
+
public toBuffer(): Buffer {
|
|
83
|
+
return serializeArrayOfBufferableToVector(this.data);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Returns the path buffer underlying the sibling path.
|
|
88
|
+
* @returns The Buffer array representation of this object.
|
|
89
|
+
*/
|
|
90
|
+
public toBufferArray(): Buffer[] {
|
|
91
|
+
return this.data;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Convert the Sibling Path object into an array of field elements.
|
|
96
|
+
* @returns The field array representation of this object.
|
|
97
|
+
*/
|
|
98
|
+
public toFields(): Fr[] {
|
|
99
|
+
return this.data.map(buf => Fr.fromBuffer(buf));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Convert Sibling Path object into a tuple of field elements.
|
|
104
|
+
* @returns A tuple representation of the sibling path.
|
|
105
|
+
*/
|
|
106
|
+
public toTuple(): Tuple<Fr, N> {
|
|
107
|
+
const array = this.toFields();
|
|
108
|
+
return makeTuple(array.length as N, i => array[i], 0);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Deserializes a SiblingPath from a buffer.
|
|
113
|
+
* @param buf - A buffer containing the buffer representation of SiblingPath.
|
|
114
|
+
* @param offset - An offset to start deserializing from.
|
|
115
|
+
* @returns A SiblingPath object.
|
|
116
|
+
*/
|
|
117
|
+
static fromBuffer<N extends number>(buf: Buffer, offset = 0): SiblingPath<N> {
|
|
118
|
+
const { elem } = SiblingPath.deserialize<N>(buf, offset);
|
|
119
|
+
return elem;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Deserializes a SiblingPath object from a slice of a part of a buffer and returns the amount of bytes advanced.
|
|
124
|
+
* @param buf - A buffer representation of the sibling path.
|
|
125
|
+
* @param offset - An offset to start deserializing from.
|
|
126
|
+
* @returns The deserialized sibling path and the number of bytes advanced.
|
|
127
|
+
*/
|
|
128
|
+
static deserialize<N extends number>(buf: Buffer, offset = 0) {
|
|
129
|
+
const deserializePath = (buf: Buffer, offset: number) => ({
|
|
130
|
+
elem: buf.slice(offset, offset + 32),
|
|
131
|
+
adv: 32,
|
|
132
|
+
});
|
|
133
|
+
const { elem, adv } = deserializeArrayFromVector(deserializePath, buf, offset);
|
|
134
|
+
const size = elem.length;
|
|
135
|
+
return { elem: new SiblingPath<N>(size as N, elem), adv };
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Serializes this SiblingPath object to a hex string representation.
|
|
140
|
+
* @returns A hex string representation of the sibling path.
|
|
141
|
+
*/
|
|
142
|
+
public toString(): string {
|
|
143
|
+
return bufferToHex(this.toBuffer());
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Deserializes a SiblingPath object from a hex string representation.
|
|
148
|
+
* @param repr - A hex string representation of the sibling path.
|
|
149
|
+
* @returns A SiblingPath object.
|
|
150
|
+
*/
|
|
151
|
+
public static fromString<N extends number>(repr: string): SiblingPath<N> {
|
|
152
|
+
return SiblingPath.fromBuffer<N>(hexToBuffer(repr));
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Generate a subtree path from the current sibling path.
|
|
157
|
+
* @param subtreeHeight - The size of the subtree that we are getting the path for.
|
|
158
|
+
* @returns A new sibling path that is the for the requested subtree.
|
|
159
|
+
*/
|
|
160
|
+
public getSubtreeSiblingPath<SubtreeHeight extends number, SubtreeSiblingPathHeight extends number>(
|
|
161
|
+
subtreeHeight: SubtreeHeight,
|
|
162
|
+
): SiblingPath<SubtreeSiblingPathHeight> {
|
|
163
|
+
// Drop the size of the subtree from the path, and return the rest.
|
|
164
|
+
const subtreeData = this.data.slice(subtreeHeight);
|
|
165
|
+
const subtreePathSize = (this.pathSize - subtreeHeight) as SubtreeSiblingPathHeight;
|
|
166
|
+
return new SiblingPath(subtreePathSize, subtreeData);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** Computes the expected root of a merkle tree given a leaf and its sibling path. */
|
|
171
|
+
export async function computeRootFromSiblingPath(
|
|
172
|
+
leaf: Buffer,
|
|
173
|
+
siblingPath: Buffer[],
|
|
174
|
+
index: number,
|
|
175
|
+
hasher = async (left: Buffer, right: Buffer) => (await pedersenHash([left, right])).toBuffer(),
|
|
176
|
+
) {
|
|
177
|
+
let result = leaf;
|
|
178
|
+
for (const sibling of siblingPath) {
|
|
179
|
+
result = index & 1 ? await hasher(sibling, result) : await hasher(result, sibling);
|
|
180
|
+
index >>= 1;
|
|
181
|
+
}
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { padArrayEnd } from '../collection/array.js';
|
|
2
|
+
import { sha256Trunc } from '../crypto/sha256/index.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Computes the merkle root for an unbalanced tree.
|
|
6
|
+
*
|
|
7
|
+
* @dev Adapted from unbalanced_tree.ts.
|
|
8
|
+
* Calculates the tree upwards layer by layer until we reach the root.
|
|
9
|
+
* The L1 calculation instead computes the tree from right to left (slightly cheaper gas).
|
|
10
|
+
* TODO: A more thorough investigation of which method is cheaper, then use that method everywhere.
|
|
11
|
+
*/
|
|
12
|
+
export function computeUnbalancedMerkleRoot(leaves: Buffer[], emptyLeaf?: Buffer, hasher = sha256Trunc): Buffer {
|
|
13
|
+
// Pad leaves to 2
|
|
14
|
+
if (leaves.length < 2) {
|
|
15
|
+
if (emptyLeaf === undefined) {
|
|
16
|
+
throw new Error('Cannot compute a Merkle root with less than 2 leaves');
|
|
17
|
+
} else {
|
|
18
|
+
leaves = padArrayEnd(leaves, emptyLeaf, 2);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const depth = Math.ceil(Math.log2(leaves.length));
|
|
23
|
+
let [layerWidth, nodeToShift] =
|
|
24
|
+
leaves.length & 1 ? [leaves.length - 1, leaves[leaves.length - 1]] : [leaves.length, Buffer.alloc(0)];
|
|
25
|
+
// Allocate this layer's leaves and init the next layer up
|
|
26
|
+
let thisLayer = leaves.slice(0, layerWidth);
|
|
27
|
+
let nextLayer = [];
|
|
28
|
+
for (let i = 0; i < depth; i++) {
|
|
29
|
+
for (let j = 0; j < layerWidth; j += 2) {
|
|
30
|
+
// Store the hash of each pair one layer up
|
|
31
|
+
nextLayer[j / 2] = hasher(Buffer.concat([thisLayer[j], thisLayer[j + 1]]));
|
|
32
|
+
}
|
|
33
|
+
layerWidth /= 2;
|
|
34
|
+
if (layerWidth & 1) {
|
|
35
|
+
if (nodeToShift.length) {
|
|
36
|
+
// If the next layer has odd length, and we have a node that needs to be shifted up, add it here
|
|
37
|
+
nextLayer.push(nodeToShift);
|
|
38
|
+
layerWidth += 1;
|
|
39
|
+
nodeToShift = Buffer.alloc(0);
|
|
40
|
+
} else {
|
|
41
|
+
// If we don't have a node waiting to be shifted, store the next layer's final node to be shifted
|
|
42
|
+
layerWidth -= 1;
|
|
43
|
+
nodeToShift = nextLayer[layerWidth];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// reset the layers
|
|
47
|
+
thisLayer = nextLayer;
|
|
48
|
+
nextLayer = [];
|
|
49
|
+
}
|
|
50
|
+
// return the root
|
|
51
|
+
return thisLayer[0];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function getMaxBalancedTreeDepth(numLeaves: number) {
|
|
55
|
+
return Math.floor(Math.log2(numLeaves));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function getMaxUnbalancedTreeDepth(numLeaves: number) {
|
|
59
|
+
return Math.ceil(Math.log2(numLeaves));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function findPosition(
|
|
63
|
+
rootLevel: number,
|
|
64
|
+
leafLevel: number,
|
|
65
|
+
numLeaves: number,
|
|
66
|
+
indexOffset: number,
|
|
67
|
+
targetIndex: number,
|
|
68
|
+
): { level: number; indexAtLevel: number } {
|
|
69
|
+
if (numLeaves <= 1) {
|
|
70
|
+
// Single leaf.
|
|
71
|
+
return { level: rootLevel, indexAtLevel: indexOffset };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// The largest balanced tree that can be created with the given number of leaves.
|
|
75
|
+
const maxBalancedTreeDepth = getMaxBalancedTreeDepth(numLeaves);
|
|
76
|
+
const numBalancedLeaves = 2 ** maxBalancedTreeDepth;
|
|
77
|
+
const numRemainingLeaves = numLeaves - numBalancedLeaves;
|
|
78
|
+
|
|
79
|
+
if (targetIndex < numBalancedLeaves) {
|
|
80
|
+
// Target is in the balanced tree.
|
|
81
|
+
|
|
82
|
+
// - If numRemainingLeaves is 0: this balanced tree is grown from the current root.
|
|
83
|
+
// - If numRemainingLeaves is not 0: the remaining leaves will form another tree, which will become the right child of the root.
|
|
84
|
+
// And the balanced tree will be the left child of the root.
|
|
85
|
+
// There will be an extra level between the root of the balanced tree and the current root.
|
|
86
|
+
const extraLevel = numRemainingLeaves ? 1 : 0;
|
|
87
|
+
|
|
88
|
+
return { level: rootLevel + maxBalancedTreeDepth + extraLevel, indexAtLevel: indexOffset + targetIndex };
|
|
89
|
+
} else {
|
|
90
|
+
// Target is in the right branch.
|
|
91
|
+
const rightBranchMaxLevel = getMaxUnbalancedTreeDepth(numRemainingLeaves);
|
|
92
|
+
const shiftedUp = leafLevel - rootLevel - rightBranchMaxLevel - 1;
|
|
93
|
+
const nextLeafLevel = leafLevel - shiftedUp;
|
|
94
|
+
const newIndexOffset = (indexOffset + numBalancedLeaves) >> shiftedUp;
|
|
95
|
+
const shiftedTargetIndex = targetIndex - numBalancedLeaves;
|
|
96
|
+
return findPosition(rootLevel + 1, nextLeafLevel, numRemainingLeaves, newIndexOffset, shiftedTargetIndex);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function findLeafLevelAndIndex(numLeaves: number, leafIndex: number) {
|
|
101
|
+
const maxLevel = getMaxUnbalancedTreeDepth(numLeaves);
|
|
102
|
+
return findPosition(0, maxLevel, numLeaves, 0, leafIndex);
|
|
103
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { findLeafLevelAndIndex } from './unbalanced_merkle_tree.js';
|
|
2
|
+
|
|
3
|
+
export interface TreeNodeLocation {
|
|
4
|
+
level: number;
|
|
5
|
+
index: number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface TreeNode<T> {
|
|
9
|
+
value: T;
|
|
10
|
+
location: TreeNodeLocation;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class UnbalancedTreeStore<T> {
|
|
14
|
+
#nodeMapping: Map<string, TreeNode<T>> = new Map();
|
|
15
|
+
readonly #numLeaves: number;
|
|
16
|
+
|
|
17
|
+
constructor(numLeaves: number) {
|
|
18
|
+
this.#numLeaves = numLeaves;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
setLeaf(leafIndex: number, value: T): TreeNodeLocation {
|
|
22
|
+
if (leafIndex >= this.#numLeaves) {
|
|
23
|
+
throw new Error(`Expected at most ${this.#numLeaves} leaves. Received a leaf at index ${leafIndex}.`);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const { level, indexAtLevel } = findLeafLevelAndIndex(this.#numLeaves, leafIndex);
|
|
27
|
+
const location = {
|
|
28
|
+
level,
|
|
29
|
+
index: indexAtLevel,
|
|
30
|
+
};
|
|
31
|
+
this.#nodeMapping.set(this.#getKey(location), {
|
|
32
|
+
location,
|
|
33
|
+
value,
|
|
34
|
+
});
|
|
35
|
+
return location;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
setNode({ level, index }: TreeNodeLocation, value: T) {
|
|
39
|
+
const location = {
|
|
40
|
+
level,
|
|
41
|
+
index,
|
|
42
|
+
};
|
|
43
|
+
this.#nodeMapping.set(this.#getKey(location), {
|
|
44
|
+
location,
|
|
45
|
+
value,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
getParentLocation({ level, index }: TreeNodeLocation): TreeNodeLocation {
|
|
50
|
+
if (level === 0) {
|
|
51
|
+
throw new Error('Tree root does not have a parent.');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return { level: level - 1, index: Math.floor(index / 2) };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
getSiblingLocation({ level, index }: TreeNodeLocation): TreeNodeLocation {
|
|
58
|
+
if (level === 0) {
|
|
59
|
+
throw new Error('Tree root does not have a sibling.');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return { level, index: index % 2 ? index - 1 : index + 1 };
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
getChildLocations({ level, index }: TreeNodeLocation): [TreeNodeLocation, TreeNodeLocation] {
|
|
66
|
+
const left = { level: level + 1, index: index * 2 };
|
|
67
|
+
const right = { level: level + 1, index: index * 2 + 1 };
|
|
68
|
+
return [left, right];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
getLeaf(leafIndex: number) {
|
|
72
|
+
const { level, indexAtLevel } = findLeafLevelAndIndex(this.#numLeaves, leafIndex);
|
|
73
|
+
const location = {
|
|
74
|
+
level,
|
|
75
|
+
index: indexAtLevel,
|
|
76
|
+
};
|
|
77
|
+
return this.getNode(location);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
getNode(location: TreeNodeLocation): T | undefined {
|
|
81
|
+
return this.#nodeMapping.get(this.#getKey(location))?.value;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
getParent(location: TreeNodeLocation): T | undefined {
|
|
85
|
+
const parentLocation = this.getParentLocation(location);
|
|
86
|
+
return this.getNode(parentLocation);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
getSibling(location: TreeNodeLocation): T | undefined {
|
|
90
|
+
const siblingLocation = this.getSiblingLocation(location);
|
|
91
|
+
return this.getNode(siblingLocation);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
getChildren(location: TreeNodeLocation): [T | undefined, T | undefined] {
|
|
95
|
+
const [left, right] = this.getChildLocations(location);
|
|
96
|
+
return [this.getNode(left), this.getNode(right)];
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
#getKey(location: TreeNodeLocation) {
|
|
100
|
+
return `${location.level}-${location.index}`;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Strips methods of a type. */
|
|
2
|
+
export type FieldsOf<T> = {
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
4
|
+
[P in keyof T as T[P] extends Function ? never : P]: T[P];
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
/** Extracts methods of a type. */
|
|
8
|
+
export type FunctionsOf<T> = {
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
10
|
+
[P in keyof T as T[P] extends Function ? P : never]: T[P];
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/** Marks a set of properties of a type as optional. */
|
|
14
|
+
export type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
15
|
+
|
|
16
|
+
/** Removes readonly modifiers for a type. */
|
|
17
|
+
export type Writeable<T> = { -readonly [P in keyof T]: T[P] };
|
|
18
|
+
|
|
19
|
+
/** Removes readonly modifiers for an object. */
|
|
20
|
+
export function unfreeze<T>(obj: T): Writeable<T> {
|
|
21
|
+
return obj as Writeable<T>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Maybe exists, maybe not. */
|
|
25
|
+
export type Maybe<T extends object> = T | unknown;
|
package/src/url/index.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>
|
|
3
|
+
// Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
// a copy of this software and associated documentation files (the
|
|
5
|
+
// 'Software'), to deal in the Software without restriction, including
|
|
6
|
+
// without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
// distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
// permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
// the following conditions:
|
|
10
|
+
// The above copyright notice and this permission notice shall be
|
|
11
|
+
// included in all copies or substantial portions of the Software.
|
|
12
|
+
// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
13
|
+
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
14
|
+
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
15
|
+
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
16
|
+
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
17
|
+
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
18
|
+
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
19
|
+
import { sep } from 'path';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* File URI to Path function.
|
|
23
|
+
*
|
|
24
|
+
* @param {String} uri
|
|
25
|
+
* @return {String} path
|
|
26
|
+
* @api public
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
export function fileURLToPath(uri: string): string {
|
|
30
|
+
if (typeof uri !== 'string' || uri.length <= 7 || uri.substring(0, 7) !== 'file://') {
|
|
31
|
+
throw new TypeError('must pass in a file:// URI to convert to a file path');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const rest = decodeURI(uri.substring(7));
|
|
35
|
+
const firstSlash = rest.indexOf('/');
|
|
36
|
+
let host = rest.substring(0, firstSlash);
|
|
37
|
+
let path = rest.substring(firstSlash + 1);
|
|
38
|
+
|
|
39
|
+
// 2. Scheme Definition
|
|
40
|
+
// As a special case, <host> can be the string "localhost" or the empty
|
|
41
|
+
// string; this is interpreted as "the machine from which the URL is
|
|
42
|
+
// being interpreted".
|
|
43
|
+
if (host === 'localhost') {
|
|
44
|
+
host = '';
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (host) {
|
|
48
|
+
host = sep + sep + host;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// 3.2 Drives, drive letters, mount points, file system root
|
|
52
|
+
// Drive letters are mapped into the top of a file URI in various ways,
|
|
53
|
+
// depending on the implementation; some applications substitute
|
|
54
|
+
// vertical bar ("|") for the colon after the drive letter, yielding
|
|
55
|
+
// "file:///c|/tmp/test.txt". In some cases, the colon is left
|
|
56
|
+
// unchanged, as in "file:///c:/tmp/test.txt". In other cases, the
|
|
57
|
+
// colon is simply omitted, as in "file:///c/tmp/test.txt".
|
|
58
|
+
path = path.replace(/^(.+)\|/, '$1:');
|
|
59
|
+
|
|
60
|
+
// for Windows, we need to invert the path separators from what a URI uses
|
|
61
|
+
if (sep === '\\') {
|
|
62
|
+
path = path.replace(/\//g, '\\');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (/^.+:/.test(path)) {
|
|
66
|
+
// has Windows drive at beginning of path
|
|
67
|
+
} else {
|
|
68
|
+
// unix path…
|
|
69
|
+
path = sep + path;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return host + path;
|
|
73
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Utility function to throw an error if a required value is missing. */
|
|
2
|
+
export function required<T>(value: T | undefined, errMsg?: string): T {
|
|
3
|
+
if (value === undefined) {
|
|
4
|
+
throw new Error(errMsg || 'Value is required');
|
|
5
|
+
}
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Helper function to assert a condition is truthy
|
|
11
|
+
* @param x - A boolean condition to assert.
|
|
12
|
+
* @param err - Error message to throw if x isn't met.
|
|
13
|
+
*/
|
|
14
|
+
export function assert(x: any, err: string): asserts x {
|
|
15
|
+
if (!x) {
|
|
16
|
+
throw new Error(err);
|
|
17
|
+
}
|
|
18
|
+
}
|