@aztec/foundation 0.0.0-test.0 → 0.0.1-commit.001888fc
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/dest/array/array.d.ts +6 -9
- package/dest/array/array.d.ts.map +1 -1
- package/dest/array/array.js +11 -11
- package/dest/array/index.d.ts +2 -1
- package/dest/array/index.d.ts.map +1 -1
- package/dest/array/index.js +1 -0
- package/dest/array/sorted_array.d.ts +15 -0
- package/dest/array/sorted_array.d.ts.map +1 -0
- package/dest/array/sorted_array.js +109 -0
- package/dest/async-map/index.d.ts +1 -1
- package/dest/async-pool/index.d.ts +1 -1
- package/dest/async-pool/index.d.ts.map +1 -1
- package/dest/async-pool/index.js +1 -0
- package/dest/bigint/index.d.ts +7 -0
- package/dest/bigint/index.d.ts.map +1 -0
- package/dest/bigint/index.js +15 -0
- package/dest/bigint-buffer/index.d.ts +1 -3
- package/dest/bigint-buffer/index.d.ts.map +1 -1
- package/dest/branded-types/block_number.d.ts +56 -0
- package/dest/branded-types/block_number.d.ts.map +1 -0
- package/dest/branded-types/block_number.js +78 -0
- package/dest/branded-types/checkpoint_number.d.ts +54 -0
- package/dest/branded-types/checkpoint_number.d.ts.map +1 -0
- package/dest/branded-types/checkpoint_number.js +77 -0
- package/dest/branded-types/epoch.d.ts +42 -0
- package/dest/branded-types/epoch.d.ts.map +1 -0
- package/dest/branded-types/epoch.js +59 -0
- package/dest/branded-types/index.d.ts +7 -0
- package/dest/branded-types/index.d.ts.map +1 -0
- package/dest/branded-types/index.js +5 -0
- package/dest/branded-types/index_within_checkpoint.d.ts +42 -0
- package/dest/branded-types/index_within_checkpoint.d.ts.map +1 -0
- package/dest/branded-types/index_within_checkpoint.js +59 -0
- package/dest/branded-types/slot.d.ts +42 -0
- package/dest/branded-types/slot.d.ts.map +1 -0
- package/dest/branded-types/slot.js +59 -0
- package/dest/branded-types/types.d.ts +5 -0
- package/dest/branded-types/types.d.ts.map +1 -0
- package/dest/branded-types/types.js +1 -0
- package/dest/buffer/buffer16.d.ts +80 -0
- package/dest/buffer/buffer16.d.ts.map +1 -0
- package/dest/buffer/buffer16.js +102 -0
- package/dest/buffer/buffer32.d.ts +5 -9
- package/dest/buffer/buffer32.d.ts.map +1 -1
- package/dest/buffer/buffer32.js +9 -7
- package/dest/buffer/index.d.ts +3 -1
- package/dest/buffer/index.d.ts.map +1 -1
- package/dest/buffer/index.js +2 -0
- package/dest/buffer/utils.d.ts +3 -0
- package/dest/buffer/utils.d.ts.map +1 -0
- package/dest/buffer/utils.js +7 -0
- package/dest/collection/array.d.ts +28 -4
- package/dest/collection/array.d.ts.map +1 -1
- package/dest/collection/array.js +108 -3
- package/dest/collection/index.d.ts +1 -1
- package/dest/collection/object.d.ts +17 -1
- package/dest/collection/object.d.ts.map +1 -1
- package/dest/collection/object.js +25 -0
- package/dest/committable/committable.d.ts +1 -1
- package/dest/committable/committable.d.ts.map +1 -1
- package/dest/committable/index.d.ts +1 -1
- package/dest/config/env_var.d.ts +2 -2
- package/dest/config/env_var.d.ts.map +1 -1
- package/dest/config/index.d.ts +62 -4
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +158 -12
- package/dest/config/network_config.d.ts +72 -0
- package/dest/config/network_config.d.ts.map +1 -0
- package/dest/config/network_config.js +14 -0
- package/dest/config/network_name.d.ts +3 -0
- package/dest/config/network_name.d.ts.map +1 -0
- package/dest/config/network_name.js +21 -0
- package/dest/config/parse-env.d.ts +3 -0
- package/dest/config/parse-env.d.ts.map +1 -0
- package/dest/config/parse-env.js +7 -0
- package/dest/config/secret_value.d.ts +28 -0
- package/dest/config/secret_value.d.ts.map +1 -0
- package/dest/config/secret_value.js +36 -0
- package/dest/crypto/aes128/index.d.ts +3 -5
- package/dest/crypto/aes128/index.d.ts.map +1 -1
- package/dest/crypto/aes128/index.js +19 -6
- package/dest/crypto/bls/bn254_keystore.d.ts +296 -0
- package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -0
- package/dest/crypto/bls/bn254_keystore.js +218 -0
- package/dest/crypto/bls/index.d.ts +13 -0
- package/dest/crypto/bls/index.d.ts.map +1 -0
- package/dest/crypto/bls/index.js +87 -0
- package/dest/crypto/bn254/index.d.ts +39 -0
- package/dest/crypto/bn254/index.d.ts.map +1 -0
- package/dest/crypto/bn254/index.js +56 -0
- package/dest/crypto/ecdsa/index.d.ts +3 -3
- package/dest/crypto/ecdsa/index.d.ts.map +1 -1
- package/dest/crypto/ecdsa/index.js +62 -48
- package/dest/crypto/ecdsa/signature.d.ts +3 -5
- package/dest/crypto/ecdsa/signature.d.ts.map +1 -1
- package/dest/crypto/ecdsa/signature.js +2 -2
- package/dest/crypto/grumpkin/index.d.ts +10 -15
- package/dest/crypto/grumpkin/index.d.ts.map +1 -1
- package/dest/crypto/grumpkin/index.js +61 -55
- package/dest/crypto/keccak/index.d.ts +3 -5
- package/dest/crypto/keccak/index.d.ts.map +1 -1
- package/dest/crypto/keys/index.d.ts +2 -4
- package/dest/crypto/keys/index.d.ts.map +1 -1
- package/dest/crypto/keys/index.js +8 -5
- package/dest/crypto/pedersen/index.d.ts +1 -1
- package/dest/crypto/pedersen/pedersen.noble.d.ts +3 -5
- package/dest/crypto/pedersen/pedersen.noble.d.ts.map +1 -1
- package/dest/crypto/pedersen/pedersen.wasm.d.ts +4 -6
- package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -1
- package/dest/crypto/pedersen/pedersen.wasm.js +24 -14
- package/dest/crypto/poseidon/index.d.ts +2 -5
- package/dest/crypto/poseidon/index.d.ts.map +1 -1
- package/dest/crypto/poseidon/index.js +27 -21
- package/dest/crypto/random/index.d.ts +2 -4
- package/dest/crypto/random/index.d.ts.map +1 -1
- package/dest/crypto/random/index.js +2 -34
- package/dest/crypto/random/randomness_singleton.d.ts +4 -5
- package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
- package/dest/crypto/random/randomness_singleton.js +5 -5
- package/dest/crypto/schnorr/index.d.ts +3 -2
- package/dest/crypto/schnorr/index.d.ts.map +1 -1
- package/dest/crypto/schnorr/index.js +30 -38
- package/dest/crypto/schnorr/signature.d.ts +5 -7
- package/dest/crypto/schnorr/signature.d.ts.map +1 -1
- package/dest/crypto/schnorr/signature.js +2 -2
- package/dest/crypto/secp256k1/index.d.ts +5 -7
- package/dest/crypto/secp256k1/index.d.ts.map +1 -1
- package/dest/crypto/secp256k1/index.js +23 -18
- package/dest/crypto/secp256k1-signer/index.d.ts +1 -1
- package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts +1 -1
- package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts.map +1 -1
- package/dest/crypto/secp256k1-signer/utils.d.ts +67 -5
- package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
- package/dest/crypto/secp256k1-signer/utils.js +118 -6
- package/dest/crypto/serialize.d.ts +5 -7
- package/dest/crypto/serialize.d.ts.map +1 -1
- package/dest/crypto/sha256/index.d.ts +23 -6
- package/dest/crypto/sha256/index.d.ts.map +1 -1
- package/dest/crypto/sha256/index.js +43 -1
- package/dest/crypto/sha512/index.d.ts +3 -5
- package/dest/crypto/sha512/index.d.ts.map +1 -1
- package/dest/crypto/sha512/index.js +1 -1
- package/dest/crypto/signature/index.d.ts +2 -4
- package/dest/crypto/signature/index.d.ts.map +1 -1
- package/dest/crypto/sync/index.d.ts +1 -1
- package/dest/crypto/sync/index.js +1 -1
- package/dest/crypto/sync/pedersen/index.d.ts +4 -6
- package/dest/crypto/sync/pedersen/index.d.ts.map +1 -1
- package/dest/crypto/sync/pedersen/index.js +18 -11
- package/dest/crypto/sync/poseidon/index.d.ts +2 -5
- package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
- package/dest/crypto/sync/poseidon/index.js +23 -16
- package/dest/curves/bls12/field.d.ts +148 -0
- package/dest/curves/bls12/field.d.ts.map +1 -0
- package/dest/curves/bls12/field.js +362 -0
- package/dest/curves/bls12/index.d.ts +3 -0
- package/dest/curves/bls12/index.d.ts.map +1 -0
- package/dest/curves/bls12/index.js +2 -0
- package/dest/curves/bls12/point.d.ts +229 -0
- package/dest/curves/bls12/point.d.ts.map +1 -0
- package/dest/curves/bls12/point.js +400 -0
- package/dest/curves/bn254/field.d.ts +181 -0
- package/dest/curves/bn254/field.d.ts.map +1 -0
- package/dest/{fields/fields.js → curves/bn254/field.js} +93 -62
- package/dest/curves/bn254/index.d.ts +3 -0
- package/dest/curves/bn254/index.d.ts.map +1 -0
- package/dest/curves/bn254/index.js +2 -0
- package/dest/curves/bn254/point.d.ts +54 -0
- package/dest/curves/bn254/point.d.ts.map +1 -0
- package/dest/curves/bn254/point.js +143 -0
- package/dest/curves/grumpkin/index.d.ts +10 -0
- package/dest/curves/grumpkin/index.d.ts.map +1 -0
- package/dest/curves/grumpkin/index.js +3 -0
- package/dest/{fields → curves/grumpkin}/point.d.ts +14 -7
- package/dest/curves/grumpkin/point.d.ts.map +1 -0
- package/dest/{fields → curves/grumpkin}/point.js +27 -10
- package/dest/decorators/index.d.ts +1 -1
- package/dest/decorators/memoize.d.ts +1 -1
- package/dest/decorators/memoize.d.ts.map +1 -1
- package/dest/error/index.d.ts +1 -1
- package/dest/eth-address/index.d.ts +18 -9
- package/dest/eth-address/index.d.ts.map +1 -1
- package/dest/eth-address/index.js +31 -2
- package/dest/eth-signature/eth_signature.d.ts +18 -15
- package/dest/eth-signature/eth_signature.d.ts.map +1 -1
- package/dest/eth-signature/eth_signature.js +37 -18
- package/dest/eth-signature/index.d.ts +1 -1
- package/dest/fs/index.d.ts +2 -1
- package/dest/fs/index.d.ts.map +1 -1
- package/dest/fs/index.js +1 -0
- package/dest/fs/run_in_dir.d.ts +1 -1
- package/dest/fs/try_rm_dir.d.ts +3 -0
- package/dest/fs/try_rm_dir.d.ts.map +1 -0
- package/dest/fs/try_rm_dir.js +16 -0
- package/dest/iterable/all.d.ts +1 -1
- package/dest/iterable/filter.d.ts +1 -1
- package/dest/iterable/filter.js +1 -1
- package/dest/iterable/index.d.ts +1 -1
- package/dest/iterable/isAsyncIt.d.ts +1 -1
- package/dest/iterable/map.d.ts +1 -1
- package/dest/iterable/map.js +1 -1
- package/dest/iterable/peek.d.ts +1 -1
- package/dest/iterable/sort.d.ts +1 -1
- package/dest/iterable/take.d.ts +1 -1
- package/dest/iterable/toArray.d.ts +1 -1
- package/dest/iterator/filter.d.ts +3 -0
- package/dest/iterator/filter.d.ts.map +1 -0
- package/dest/iterator/filter.js +7 -0
- package/dest/iterator/index.d.ts +2 -0
- package/dest/iterator/index.d.ts.map +1 -0
- package/dest/iterator/index.js +1 -0
- package/dest/jest/env.js +48 -0
- package/dest/jest/setup.js +28 -1
- package/dest/jest/setupAfterEnv.js +3 -0
- package/dest/json-rpc/client/fetch.d.ts +3 -3
- package/dest/json-rpc/client/fetch.d.ts.map +1 -1
- package/dest/json-rpc/client/fetch.js +16 -30
- package/dest/json-rpc/client/index.d.ts +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +11 -4
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.js +173 -13
- package/dest/json-rpc/client/undici.d.ts +1 -1
- package/dest/json-rpc/client/undici.d.ts.map +1 -1
- package/dest/json-rpc/client/undici.js +27 -11
- package/dest/json-rpc/convert.d.ts +3 -10
- package/dest/json-rpc/convert.d.ts.map +1 -1
- package/dest/json-rpc/convert.js +1 -9
- package/dest/json-rpc/errors.d.ts +4 -0
- package/dest/json-rpc/errors.d.ts.map +1 -0
- package/dest/json-rpc/errors.js +6 -0
- package/dest/json-rpc/fixtures/class_a.d.ts +6 -4
- package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -1
- package/dest/json-rpc/fixtures/class_b.d.ts +6 -4
- package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -1
- package/dest/json-rpc/fixtures/test_state.d.ts +1 -1
- package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
- package/dest/json-rpc/index.d.ts +3 -2
- package/dest/json-rpc/index.d.ts.map +1 -1
- package/dest/json-rpc/index.js +2 -1
- package/dest/json-rpc/js_utils.d.ts +1 -1
- package/dest/json-rpc/js_utils.d.ts.map +1 -1
- package/dest/json-rpc/server/api_key_auth.d.ts +19 -0
- package/dest/json-rpc/server/api_key_auth.d.ts.map +1 -0
- package/dest/json-rpc/server/api_key_auth.js +57 -0
- package/dest/json-rpc/server/index.d.ts +2 -1
- package/dest/json-rpc/server/index.d.ts.map +1 -1
- package/dest/json-rpc/server/index.js +1 -0
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts +22 -23
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
- package/dest/json-rpc/server/safe_json_rpc_server.js +161 -56
- package/dest/json-rpc/test/index.d.ts +1 -1
- package/dest/json-rpc/test/integration.d.ts +2 -3
- package/dest/json-rpc/test/integration.d.ts.map +1 -1
- package/dest/log/bigint-utils.d.ts +5 -0
- package/dest/log/bigint-utils.d.ts.map +1 -0
- package/dest/log/bigint-utils.js +21 -0
- package/dest/log/console.d.ts +1 -1
- package/dest/log/console.d.ts.map +1 -1
- package/dest/log/gcloud-logger-config.d.ts +1 -2
- package/dest/log/gcloud-logger-config.d.ts.map +1 -1
- package/dest/log/gcloud-logger-config.js +4 -9
- package/dest/log/index.d.ts +5 -5
- package/dest/log/index.d.ts.map +1 -1
- package/dest/log/index.js +4 -4
- package/dest/log/libp2p_logger.d.ts +5 -2
- package/dest/log/libp2p_logger.d.ts.map +1 -1
- package/dest/log/libp2p_logger.js +27 -6
- package/dest/log/log-filters.d.ts +17 -4
- package/dest/log/log-filters.d.ts.map +1 -1
- package/dest/log/log-filters.js +26 -12
- package/dest/log/log-levels.d.ts +1 -1
- package/dest/log/log_fn.d.ts +2 -2
- package/dest/log/log_fn.d.ts.map +1 -1
- package/dest/log/noir_debug_log_util.d.ts +14 -0
- package/dest/log/noir_debug_log_util.d.ts.map +1 -0
- package/dest/log/noir_debug_log_util.js +14 -0
- package/dest/log/pino-logger-server.d.ts +9 -0
- package/dest/log/pino-logger-server.d.ts.map +1 -0
- package/dest/log/pino-logger-server.js +18 -0
- package/dest/log/pino-logger.d.ts +40 -11
- package/dest/log/pino-logger.d.ts.map +1 -1
- package/dest/log/pino-logger.js +149 -30
- package/dest/message/index.d.ts +1 -1
- package/dest/message/index.d.ts.map +1 -1
- package/dest/mutex/index.d.ts +1 -1
- package/dest/mutex/index.d.ts.map +1 -1
- package/dest/mutex/mutex_database.d.ts +1 -1
- package/dest/mutex/mutex_database.d.ts.map +1 -1
- package/dest/noir/index.d.ts +1 -1
- package/dest/noir/noir_package_config.d.ts +9 -9
- package/dest/number/index.d.ts +3 -0
- package/dest/number/index.d.ts.map +1 -0
- package/dest/number/index.js +12 -0
- package/dest/profiler/index.d.ts +2 -0
- package/dest/profiler/index.d.ts.map +1 -0
- package/dest/profiler/index.js +1 -0
- package/dest/profiler/profiler.d.ts +8 -0
- package/dest/profiler/profiler.d.ts.map +1 -0
- package/dest/profiler/profiler.js +97 -0
- package/dest/promise/index.d.ts +1 -1
- package/dest/promise/running-promise.d.ts +2 -2
- package/dest/promise/running-promise.d.ts.map +1 -1
- package/dest/promise/running-promise.js +2 -2
- package/dest/promise/utils.d.ts +1 -1
- package/dest/queue/base_memory_queue.d.ts +2 -2
- package/dest/queue/base_memory_queue.d.ts.map +1 -1
- package/dest/queue/batch_queue.d.ts +2 -2
- package/dest/queue/batch_queue.d.ts.map +1 -1
- package/dest/queue/batch_queue.js +1 -1
- package/dest/queue/bounded_serial_queue.d.ts +1 -1
- package/dest/queue/bounded_serial_queue.d.ts.map +1 -1
- package/dest/queue/fifo_memory_queue.d.ts +1 -1
- package/dest/queue/fifo_memory_queue.d.ts.map +1 -1
- package/dest/queue/index.d.ts +1 -1
- package/dest/queue/priority_memory_queue.d.ts +1 -1
- package/dest/queue/priority_memory_queue.d.ts.map +1 -1
- package/dest/queue/priority_queue.d.ts +1 -1
- package/dest/queue/priority_queue.d.ts.map +1 -1
- package/dest/queue/semaphore.d.ts +5 -1
- package/dest/queue/semaphore.d.ts.map +1 -1
- package/dest/queue/serial_queue.d.ts +3 -3
- package/dest/queue/serial_queue.d.ts.map +1 -1
- package/dest/queue/serial_queue.js +7 -5
- package/dest/retry/index.d.ts +14 -3
- package/dest/retry/index.d.ts.map +1 -1
- package/dest/retry/index.js +13 -2
- package/dest/running-promise/index.d.ts +1 -1
- package/dest/schemas/api.d.ts +1 -1
- package/dest/schemas/api.d.ts.map +1 -1
- package/dest/schemas/index.d.ts +1 -1
- package/dest/schemas/parse.d.ts +1 -1
- package/dest/schemas/parse.js +1 -1
- package/dest/schemas/schemas.d.ts +21 -20
- package/dest/schemas/schemas.d.ts.map +1 -1
- package/dest/schemas/schemas.js +29 -11
- package/dest/schemas/types.d.ts +31 -1
- package/dest/schemas/types.d.ts.map +1 -1
- package/dest/schemas/types.js +25 -1
- package/dest/schemas/utils.d.ts +4 -6
- package/dest/schemas/utils.d.ts.map +1 -1
- package/dest/schemas/utils.js +15 -5
- package/dest/serialize/buffer_reader.d.ts +41 -6
- package/dest/serialize/buffer_reader.d.ts.map +1 -1
- package/dest/serialize/buffer_reader.js +70 -6
- package/dest/serialize/field_reader.d.ts +12 -3
- package/dest/serialize/field_reader.d.ts.map +1 -1
- package/dest/serialize/field_reader.js +19 -2
- package/dest/serialize/free_funcs.d.ts +25 -23
- package/dest/serialize/free_funcs.d.ts.map +1 -1
- package/dest/serialize/free_funcs.js +22 -28
- package/dest/serialize/index.d.ts +1 -1
- package/dest/serialize/serialize.d.ts +24 -7
- package/dest/serialize/serialize.d.ts.map +1 -1
- package/dest/serialize/serialize.js +32 -1
- package/dest/serialize/type_registry.d.ts +1 -1
- package/dest/serialize/type_registry.d.ts.map +1 -1
- package/dest/serialize/types.d.ts +1 -1
- package/dest/sleep/index.d.ts +4 -1
- package/dest/sleep/index.d.ts.map +1 -1
- package/dest/sleep/index.js +14 -1
- package/dest/string/index.d.ts +8 -3
- package/dest/string/index.d.ts.map +1 -1
- package/dest/string/index.js +27 -1
- package/dest/testing/files/index.d.ts +2 -3
- package/dest/testing/files/index.d.ts.map +1 -1
- package/dest/testing/files/index.js +3 -3
- package/dest/testing/formatting.d.ts +4 -0
- package/dest/testing/formatting.d.ts.map +1 -0
- package/dest/testing/formatting.js +3 -0
- package/dest/testing/index.d.ts +2 -1
- package/dest/testing/index.d.ts.map +1 -1
- package/dest/testing/index.js +1 -0
- package/dest/testing/port_allocator.d.ts +1 -1
- package/dest/testing/snapshot_serializer.d.ts +1 -1
- package/dest/testing/test_data.d.ts +1 -1
- package/dest/timer/date.d.ts +28 -2
- package/dest/timer/date.d.ts.map +1 -1
- package/dest/timer/date.js +41 -3
- package/dest/timer/elapsed.d.ts +1 -1
- package/dest/timer/index.d.ts +2 -2
- package/dest/timer/index.d.ts.map +1 -1
- package/dest/timer/index.js +1 -1
- package/dest/timer/timeout.d.ts +19 -6
- package/dest/timer/timeout.d.ts.map +1 -1
- package/dest/timer/timeout.js +43 -22
- package/dest/timer/timer.d.ts +1 -1
- package/dest/timer/timer.d.ts.map +1 -1
- package/dest/transport/dispatch/create_dispatch_fn.d.ts +1 -1
- package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -1
- package/dest/transport/dispatch/create_dispatch_proxy.d.ts +1 -1
- package/dest/transport/dispatch/messages.d.ts +1 -1
- package/dest/transport/index.d.ts +1 -2
- package/dest/transport/index.d.ts.map +1 -1
- package/dest/transport/index.js +0 -1
- package/dest/transport/interface/connector.d.ts +1 -1
- package/dest/transport/interface/connector.d.ts.map +1 -1
- package/dest/transport/interface/listener.d.ts +1 -2
- package/dest/transport/interface/listener.d.ts.map +1 -1
- package/dest/transport/interface/socket.d.ts +1 -1
- package/dest/transport/interface/socket.d.ts.map +1 -1
- package/dest/transport/interface/transferable.d.ts +1 -1
- package/dest/transport/node/index.d.ts +1 -1
- package/dest/transport/node/node_connector.d.ts +1 -2
- package/dest/transport/node/node_connector.d.ts.map +1 -1
- package/dest/transport/node/node_connector_socket.d.ts +1 -2
- package/dest/transport/node/node_connector_socket.d.ts.map +1 -1
- package/dest/transport/node/node_listener.d.ts +1 -2
- package/dest/transport/node/node_listener.d.ts.map +1 -1
- package/dest/transport/node/node_listener_socket.d.ts +1 -2
- package/dest/transport/node/node_listener_socket.d.ts.map +1 -1
- package/dest/transport/transport_client.d.ts +1 -2
- package/dest/transport/transport_client.d.ts.map +1 -1
- package/dest/transport/transport_client.js +2 -2
- package/dest/transport/transport_server.d.ts +1 -10
- package/dest/transport/transport_server.d.ts.map +1 -1
- package/dest/trees/balanced_merkle_tree_root.d.ts +17 -0
- package/dest/trees/balanced_merkle_tree_root.d.ts.map +1 -0
- package/dest/trees/balanced_merkle_tree_root.js +51 -0
- package/dest/trees/hasher.d.ts +7 -7
- package/dest/trees/hasher.d.ts.map +1 -1
- package/dest/trees/hasher.js +10 -5
- package/dest/trees/index.d.ts +5 -3
- package/dest/trees/index.d.ts.map +1 -1
- package/dest/trees/index.js +4 -2
- package/dest/trees/indexed_merkle_tree.d.ts +1 -3
- package/dest/trees/indexed_merkle_tree.d.ts.map +1 -1
- package/dest/trees/indexed_merkle_tree.js +1 -1
- package/dest/trees/indexed_merkle_tree_calculator.d.ts +2 -4
- package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/indexed_tree_leaf.d.ts +1 -3
- package/dest/trees/indexed_tree_leaf.d.ts.map +1 -1
- package/dest/trees/membership_witness.d.ts +10 -5
- package/dest/trees/membership_witness.d.ts.map +1 -1
- package/dest/trees/membership_witness.js +23 -1
- package/dest/trees/merkle_tree.d.ts +1 -3
- package/dest/trees/merkle_tree.d.ts.map +1 -1
- package/dest/trees/merkle_tree_calculator.d.ts +2 -4
- package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/merkle_tree_calculator.js +2 -2
- package/dest/trees/sibling_path.d.ts +6 -41
- package/dest/trees/sibling_path.d.ts.map +1 -1
- package/dest/trees/sibling_path.js +3 -3
- package/dest/trees/unbalanced_merkle_tree_calculator.d.ts +48 -0
- package/dest/trees/unbalanced_merkle_tree_calculator.d.ts.map +1 -0
- package/dest/trees/unbalanced_merkle_tree_calculator.js +154 -0
- package/dest/trees/unbalanced_merkle_tree_root.d.ts +28 -0
- package/dest/trees/unbalanced_merkle_tree_root.d.ts.map +1 -0
- package/dest/trees/unbalanced_merkle_tree_root.js +84 -0
- package/dest/trees/unbalanced_tree_store.d.ts +6 -1
- package/dest/trees/unbalanced_tree_store.d.ts.map +1 -1
- package/dest/trees/unbalanced_tree_store.js +55 -1
- package/dest/types/index.d.ts +30 -3
- package/dest/types/index.d.ts.map +1 -1
- package/dest/types/index.js +6 -0
- package/dest/url/index.d.ts +1 -1
- package/dest/url/index.d.ts.map +1 -1
- package/dest/url/index.js +1 -1
- package/dest/validation/index.d.ts +1 -1
- package/package.json +80 -45
- package/src/array/array.ts +13 -16
- package/src/array/index.ts +1 -0
- package/src/array/sorted_array.ts +138 -0
- package/src/async-pool/index.ts +1 -0
- package/src/bigint/index.ts +20 -0
- package/src/branded-types/block_number.ts +117 -0
- package/src/branded-types/checkpoint_number.ts +115 -0
- package/src/branded-types/epoch.ts +88 -0
- package/src/branded-types/index.ts +7 -0
- package/src/branded-types/index_within_checkpoint.ts +88 -0
- package/src/branded-types/slot.ts +88 -0
- package/src/branded-types/types.ts +2 -0
- package/src/buffer/buffer16.ts +133 -0
- package/src/buffer/buffer32.ts +10 -8
- package/src/buffer/index.ts +2 -0
- package/src/buffer/utils.ts +8 -0
- package/src/collection/array.ts +118 -4
- package/src/collection/object.ts +37 -0
- package/src/config/env_var.ts +227 -60
- package/src/config/index.ts +241 -10
- package/src/config/network_config.ts +21 -0
- package/src/config/network_name.ts +31 -0
- package/src/config/parse-env.ts +4 -0
- package/src/config/secret_value.ts +49 -0
- package/src/crypto/aes128/index.ts +19 -10
- package/src/crypto/bls/bn254_keystore.ts +287 -0
- package/src/crypto/bls/index.ts +77 -0
- package/src/crypto/bn254/index.ts +64 -0
- package/src/crypto/ecdsa/index.ts +41 -23
- package/src/crypto/ecdsa/signature.ts +2 -2
- package/src/crypto/grumpkin/index.ts +38 -46
- package/src/crypto/keys/index.ts +6 -6
- package/src/crypto/pedersen/pedersen.wasm.ts +23 -19
- package/src/crypto/poseidon/index.ts +27 -29
- package/src/crypto/random/index.ts +2 -40
- package/src/crypto/random/randomness_singleton.ts +6 -4
- package/src/crypto/schnorr/index.ts +22 -18
- package/src/crypto/schnorr/signature.ts +2 -2
- package/src/crypto/secp256k1/index.ts +15 -11
- package/src/crypto/secp256k1-signer/utils.ts +152 -7
- package/src/crypto/sha256/index.ts +48 -1
- package/src/crypto/sha512/index.ts +1 -1
- package/src/crypto/signature/index.ts +1 -1
- package/src/crypto/sync/index.ts +1 -1
- package/src/crypto/sync/pedersen/index.ts +17 -16
- package/src/crypto/sync/poseidon/index.ts +23 -27
- package/src/curves/bls12/field.ts +463 -0
- package/src/curves/bls12/index.ts +2 -0
- package/src/curves/bls12/point.ts +450 -0
- package/src/{fields/fields.ts → curves/bn254/field.ts} +88 -63
- package/src/curves/bn254/index.ts +2 -0
- package/src/curves/bn254/point.ts +170 -0
- package/src/curves/grumpkin/index.ts +11 -0
- package/src/{fields → curves/grumpkin}/point.ts +27 -10
- package/src/eth-address/index.ts +35 -3
- package/src/eth-signature/eth_signature.ts +50 -22
- package/src/fs/index.ts +1 -0
- package/src/fs/try_rm_dir.ts +15 -0
- package/src/iterable/filter.ts +1 -1
- package/src/iterable/map.ts +1 -1
- package/src/iterator/filter.ts +11 -0
- package/src/iterator/index.ts +1 -0
- package/src/jest/env.mjs +52 -0
- package/src/jest/setup.mjs +31 -1
- package/src/jest/setupAfterEnv.mjs +3 -0
- package/src/json-rpc/client/fetch.ts +14 -33
- package/src/json-rpc/client/safe_json_rpc_client.ts +228 -13
- package/src/json-rpc/client/undici.ts +29 -18
- package/src/json-rpc/convert.ts +3 -12
- package/src/json-rpc/errors.ts +6 -0
- package/src/json-rpc/fixtures/class_a.ts +4 -1
- package/src/json-rpc/fixtures/class_b.ts +4 -1
- package/src/json-rpc/index.ts +2 -1
- package/src/json-rpc/server/api_key_auth.ts +63 -0
- package/src/json-rpc/server/index.ts +1 -0
- package/src/json-rpc/server/safe_json_rpc_server.ts +141 -48
- package/src/json-rpc/test/integration.ts +1 -1
- package/src/log/bigint-utils.ts +25 -0
- package/src/log/console.ts +4 -1
- package/src/log/gcloud-logger-config.ts +8 -7
- package/src/log/index.ts +4 -4
- package/src/log/libp2p_logger.ts +33 -7
- package/src/log/log-filters.ts +29 -11
- package/src/log/log_fn.ts +1 -1
- package/src/log/noir_debug_log_util.ts +21 -0
- package/src/log/pino-logger-server.ts +25 -0
- package/src/log/pino-logger.ts +175 -39
- package/src/message/index.ts +5 -1
- package/src/mutex/mutex_database.ts +2 -3
- package/src/number/index.ts +14 -0
- package/src/profiler/index.ts +1 -0
- package/src/profiler/profiler.ts +125 -0
- package/src/promise/running-promise.ts +2 -2
- package/src/queue/base_memory_queue.ts +1 -1
- package/src/queue/batch_queue.ts +1 -1
- package/src/queue/bounded_serial_queue.ts +4 -1
- package/src/queue/semaphore.ts +5 -0
- package/src/queue/serial_queue.ts +5 -5
- package/src/retry/index.ts +28 -5
- package/src/schemas/api.ts +4 -4
- package/src/schemas/parse.ts +1 -1
- package/src/schemas/schemas.ts +42 -13
- package/src/schemas/types.ts +33 -0
- package/src/schemas/utils.ts +21 -8
- package/src/serialize/buffer_reader.ts +96 -12
- package/src/serialize/field_reader.ts +28 -4
- package/src/serialize/free_funcs.ts +26 -32
- package/src/serialize/serialize.ts +35 -1
- package/src/sleep/index.ts +16 -1
- package/src/string/index.ts +36 -1
- package/src/testing/files/index.ts +7 -3
- package/src/testing/formatting.ts +3 -0
- package/src/testing/index.ts +1 -0
- package/src/timer/date.ts +61 -3
- package/src/timer/index.ts +1 -1
- package/src/timer/timeout.ts +54 -19
- package/src/transport/index.ts +0 -1
- package/src/transport/interface/connector.ts +0 -1
- package/src/transport/interface/listener.ts +2 -3
- package/src/transport/interface/socket.ts +2 -3
- package/src/transport/transport_client.ts +5 -6
- package/src/transport/transport_server.ts +4 -1
- package/src/trees/balanced_merkle_tree_root.ts +68 -0
- package/src/trees/hasher.ts +13 -4
- package/src/trees/index.ts +4 -2
- package/src/trees/indexed_merkle_tree.ts +6 -2
- package/src/trees/indexed_merkle_tree_calculator.ts +2 -2
- package/src/trees/membership_witness.ts +22 -1
- package/src/trees/merkle_tree.ts +4 -1
- package/src/trees/merkle_tree_calculator.ts +10 -5
- package/src/trees/sibling_path.ts +3 -3
- package/src/trees/unbalanced_merkle_tree_calculator.ts +176 -0
- package/src/trees/unbalanced_merkle_tree_root.ts +115 -0
- package/src/trees/unbalanced_tree_store.ts +62 -3
- package/src/types/index.ts +35 -4
- package/src/url/index.ts +0 -1
- package/dest/crypto/index.d.ts +0 -15
- package/dest/crypto/index.d.ts.map +0 -1
- package/dest/crypto/index.js +0 -14
- package/dest/crypto/pedersen/pedersen.elliptic.d.ts +0 -13
- package/dest/crypto/pedersen/pedersen.elliptic.d.ts.map +0 -1
- package/dest/crypto/pedersen/pedersen.elliptic.js +0 -582
- package/dest/fields/coordinate.d.ts +0 -68
- package/dest/fields/coordinate.d.ts.map +0 -1
- package/dest/fields/coordinate.js +0 -96
- package/dest/fields/fields.d.ts +0 -176
- package/dest/fields/fields.d.ts.map +0 -1
- package/dest/fields/index.d.ts +0 -4
- package/dest/fields/index.d.ts.map +0 -1
- package/dest/fields/index.js +0 -3
- package/dest/fields/point.d.ts.map +0 -1
- package/dest/index.d.ts +0 -31
- package/dest/index.d.ts.map +0 -1
- package/dest/index.js +0 -31
- package/dest/json-rpc/server/telemetry.d.ts +0 -2
- package/dest/json-rpc/server/telemetry.d.ts.map +0 -1
- package/dest/json-rpc/server/telemetry.js +0 -0
- package/dest/log/debug.d.ts +0 -56
- package/dest/log/debug.d.ts.map +0 -1
- package/dest/log/debug.js +0 -75
- package/dest/log/log_history.d.ts +0 -31
- package/dest/log/log_history.d.ts.map +0 -1
- package/dest/log/log_history.js +0 -38
- package/dest/transport/browser/index.d.ts +0 -5
- package/dest/transport/browser/index.d.ts.map +0 -1
- package/dest/transport/browser/index.js +0 -4
- package/dest/transport/browser/message_port_socket.d.ts +0 -37
- package/dest/transport/browser/message_port_socket.d.ts.map +0 -1
- package/dest/transport/browser/message_port_socket.js +0 -42
- package/dest/transport/browser/shared_worker_connector.d.ts +0 -19
- package/dest/transport/browser/shared_worker_connector.d.ts.map +0 -1
- package/dest/transport/browser/shared_worker_connector.js +0 -19
- package/dest/transport/browser/shared_worker_listener.d.ts +0 -38
- package/dest/transport/browser/shared_worker_listener.d.ts.map +0 -1
- package/dest/transport/browser/shared_worker_listener.js +0 -33
- package/dest/transport/browser/worker_connector.d.ts +0 -26
- package/dest/transport/browser/worker_connector.d.ts.map +0 -1
- package/dest/transport/browser/worker_connector.js +0 -30
- package/dest/transport/browser/worker_listener.d.ts +0 -39
- package/dest/transport/browser/worker_listener.d.ts.map +0 -1
- package/dest/transport/browser/worker_listener.js +0 -35
- package/dest/trees/unbalanced_merkle_tree.d.ts +0 -17
- package/dest/trees/unbalanced_merkle_tree.d.ts.map +0 -1
- package/dest/trees/unbalanced_merkle_tree.js +0 -100
- package/dest/wasm/empty_wasi_sdk.d.ts +0 -130
- package/dest/wasm/empty_wasi_sdk.d.ts.map +0 -1
- package/dest/wasm/empty_wasi_sdk.js +0 -148
- package/dest/wasm/index.d.ts +0 -2
- package/dest/wasm/index.d.ts.map +0 -1
- package/dest/wasm/index.js +0 -1
- package/dest/wasm/wasm_module.d.ts +0 -136
- package/dest/wasm/wasm_module.d.ts.map +0 -1
- package/dest/wasm/wasm_module.js +0 -196
- package/dest/worker/browser/index.d.ts +0 -3
- package/dest/worker/browser/index.d.ts.map +0 -1
- package/dest/worker/browser/index.js +0 -2
- package/dest/worker/browser/start_web_module.d.ts +0 -7
- package/dest/worker/browser/start_web_module.d.ts.map +0 -1
- package/dest/worker/browser/start_web_module.js +0 -27
- package/dest/worker/browser/web_data_store.d.ts +0 -24
- package/dest/worker/browser/web_data_store.d.ts.map +0 -1
- package/dest/worker/browser/web_data_store.js +0 -29
- package/dest/worker/browser/web_worker.d.ts +0 -10
- package/dest/worker/browser/web_worker.d.ts.map +0 -1
- package/dest/worker/browser/web_worker.js +0 -25
- package/dest/worker/data_store.d.ts +0 -21
- package/dest/worker/data_store.d.ts.map +0 -1
- package/dest/worker/data_store.js +0 -3
- package/dest/worker/index.d.ts +0 -3
- package/dest/worker/index.d.ts.map +0 -1
- package/dest/worker/index.js +0 -1
- package/dest/worker/node/index.d.ts +0 -3
- package/dest/worker/node/index.d.ts.map +0 -1
- package/dest/worker/node/index.js +0 -2
- package/dest/worker/node/node_data_store.d.ts +0 -13
- package/dest/worker/node/node_data_store.d.ts.map +0 -1
- package/dest/worker/node/node_data_store.js +0 -20
- package/dest/worker/node/node_worker.d.ts +0 -6
- package/dest/worker/node/node_worker.d.ts.map +0 -1
- package/dest/worker/node/node_worker.js +0 -22
- package/dest/worker/node/start_node_module.d.ts +0 -7
- package/dest/worker/node/start_node_module.d.ts.map +0 -1
- package/dest/worker/node/start_node_module.js +0 -31
- package/dest/worker/wasm_worker.d.ts +0 -9
- package/dest/worker/wasm_worker.d.ts.map +0 -1
- package/dest/worker/wasm_worker.js +0 -3
- package/dest/worker/worker_pool.d.ts +0 -40
- package/dest/worker/worker_pool.d.ts.map +0 -1
- package/dest/worker/worker_pool.js +0 -51
- package/src/crypto/index.ts +0 -14
- package/src/crypto/pedersen/pedersen.elliptic.ts +0 -584
- package/src/fields/coordinate.ts +0 -104
- package/src/fields/index.ts +0 -3
- package/src/index.ts +0 -31
- package/src/json-rpc/server/telemetry.ts +0 -0
- package/src/log/debug.ts +0 -104
- package/src/log/log_history.ts +0 -44
- package/src/transport/browser/index.ts +0 -4
- package/src/transport/browser/message_port_socket.ts +0 -48
- package/src/transport/browser/shared_worker_connector.ts +0 -21
- package/src/transport/browser/shared_worker_listener.ts +0 -53
- package/src/transport/browser/worker_connector.ts +0 -30
- package/src/transport/browser/worker_listener.ts +0 -54
- package/src/trees/unbalanced_merkle_tree.ts +0 -103
- package/src/wasm/README.md +0 -6
- package/src/wasm/empty_wasi_sdk.ts +0 -166
- package/src/wasm/fixtures/gcd.wasm +0 -0
- package/src/wasm/fixtures/gcd.wat +0 -27
- package/src/wasm/index.ts +0 -1
- package/src/wasm/wasm_module.ts +0 -260
- package/src/worker/browser/index.ts +0 -2
- package/src/worker/browser/start_web_module.ts +0 -24
- package/src/worker/browser/web_data_store.ts +0 -38
- package/src/worker/browser/web_worker.ts +0 -25
- package/src/worker/data_store.ts +0 -19
- package/src/worker/index.ts +0 -2
- package/src/worker/node/index.ts +0 -2
- package/src/worker/node/node_data_store.ts +0 -27
- package/src/worker/node/node_worker.ts +0 -23
- package/src/worker/node/start_node_module.ts +0 -30
- package/src/worker/wasm_worker.ts +0 -7
- package/src/worker/worker_pool.ts +0 -73
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
import type { Branded } from './types.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A branded type representing an epoch number.
|
|
7
|
+
* Epochs are used in the Aztec protocol to group slots and manage validator committees.
|
|
8
|
+
*
|
|
9
|
+
* This is a nominal type backed by a number, but TypeScript will treat it as
|
|
10
|
+
* incompatible with plain numbers and other branded numeric types (like Slot, BlockNumber, etc.).
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const epoch = EpochNumber(5);
|
|
15
|
+
* const plainNumber: number = epoch; // OK - EpochNumber is assignable to number
|
|
16
|
+
* const epochFromNumber: EpochNumber = 5; // ERROR - number is not assignable to EpochNumber
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export type EpochNumber = Branded<number, 'EpochNumber'>;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Creates an EpochNumber from a number.
|
|
23
|
+
* @param value - The epoch number (must be a non-negative integer)
|
|
24
|
+
* @returns The branded EpochNumber value
|
|
25
|
+
* @throws If the value is negative or not an integer
|
|
26
|
+
*/
|
|
27
|
+
export function EpochNumber(value: number): EpochNumber {
|
|
28
|
+
if (!Number.isInteger(value)) {
|
|
29
|
+
throw new Error(`EpochNumber must be an integer, got ${value}`);
|
|
30
|
+
}
|
|
31
|
+
if (value < 0) {
|
|
32
|
+
throw new Error(`EpochNumber must be non-negative, got ${value}`);
|
|
33
|
+
}
|
|
34
|
+
return value as EpochNumber;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Creates an EpochNumber from a bigint.
|
|
39
|
+
* @param value - The epoch number as bigint (must be a non-negative integer within safe integer range)
|
|
40
|
+
* @returns The branded EpochNumber value
|
|
41
|
+
* @throws If the value is negative or exceeds Number.MAX_SAFE_INTEGER
|
|
42
|
+
*/
|
|
43
|
+
EpochNumber.fromBigInt = function (value: bigint): EpochNumber {
|
|
44
|
+
if (value < 0n) {
|
|
45
|
+
throw new Error(`EpochNumber must be non-negative, got ${value}`);
|
|
46
|
+
}
|
|
47
|
+
if (value > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
48
|
+
throw new Error(`EpochNumber ${value} exceeds MAX_SAFE_INTEGER`);
|
|
49
|
+
}
|
|
50
|
+
return Number(value) as EpochNumber;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Creates an EpochNumber from a string.
|
|
55
|
+
* @param value - The epoch number as a string
|
|
56
|
+
* @returns The branded EpochNumber value
|
|
57
|
+
* @throws If the string cannot be parsed as a valid epoch
|
|
58
|
+
*/
|
|
59
|
+
EpochNumber.fromString = function (value: string): EpochNumber {
|
|
60
|
+
const parsed = parseInt(value, 10);
|
|
61
|
+
if (isNaN(parsed)) {
|
|
62
|
+
throw new Error(`Cannot parse EpochNumber from string: ${value}`);
|
|
63
|
+
}
|
|
64
|
+
return EpochNumber(parsed);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Type guard to check if a value is a valid EpochNumber.
|
|
69
|
+
* Note: At runtime, an EpochNumber is just a number, so this checks if the value
|
|
70
|
+
* is a non-negative integer.
|
|
71
|
+
*/
|
|
72
|
+
EpochNumber.isValid = function (value: unknown): value is EpochNumber {
|
|
73
|
+
return typeof value === 'number' && Number.isInteger(value) && value >= 0;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The zero epoch value.
|
|
78
|
+
*/
|
|
79
|
+
EpochNumber.ZERO = EpochNumber(0);
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Zod schema for parsing and validating EpochNumber values.
|
|
83
|
+
* Accepts numbers, bigints, or strings and coerces them to EpochNumber.
|
|
84
|
+
*/
|
|
85
|
+
export const EpochNumberSchema = z
|
|
86
|
+
.union([z.number(), z.bigint(), z.string()])
|
|
87
|
+
.pipe(z.coerce.number().int().min(0))
|
|
88
|
+
.transform(value => EpochNumber(value));
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { BlockNumber, BlockNumberSchema, BlockNumberPositiveSchema } from './block_number.js';
|
|
2
|
+
export { CheckpointNumber, CheckpointNumberSchema, CheckpointNumberPositiveSchema } from './checkpoint_number.js';
|
|
3
|
+
export { EpochNumber, EpochNumberSchema } from './epoch.js';
|
|
4
|
+
export { IndexWithinCheckpoint, IndexWithinCheckpointSchema } from './index_within_checkpoint.js';
|
|
5
|
+
export { SlotNumber, SlotNumberSchema } from './slot.js';
|
|
6
|
+
|
|
7
|
+
export type { Branded } from './types.js';
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
import type { Branded } from './types.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A branded type representing the index of a block within a checkpoint.
|
|
7
|
+
* The first block in a checkpoint has index 0, the second has index 1, etc.
|
|
8
|
+
*
|
|
9
|
+
* This is a nominal type backed by a number, but TypeScript will treat it as
|
|
10
|
+
* incompatible with plain numbers and other branded numeric types.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const index = IndexWithinCheckpoint(0);
|
|
15
|
+
* const plainNumber: number = index; // OK - IndexWithinCheckpoint is assignable to number
|
|
16
|
+
* const indexFromNumber: IndexWithinCheckpoint = 0; // ERROR - number is not assignable to IndexWithinCheckpoint
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export type IndexWithinCheckpoint = Branded<number, 'IndexWithinCheckpoint'>;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Creates an IndexWithinCheckpoint from a number.
|
|
23
|
+
* @param value - The index (must be a non-negative integer)
|
|
24
|
+
* @returns The branded IndexWithinCheckpoint value
|
|
25
|
+
* @throws If the value is negative or not an integer
|
|
26
|
+
*/
|
|
27
|
+
export function IndexWithinCheckpoint(value: number): IndexWithinCheckpoint {
|
|
28
|
+
if (!Number.isInteger(value)) {
|
|
29
|
+
throw new Error(`IndexWithinCheckpoint must be an integer, got ${value}`);
|
|
30
|
+
}
|
|
31
|
+
if (value < 0) {
|
|
32
|
+
throw new Error(`IndexWithinCheckpoint must be non-negative, got ${value}`);
|
|
33
|
+
}
|
|
34
|
+
return value as IndexWithinCheckpoint;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Creates an IndexWithinCheckpoint from a bigint.
|
|
39
|
+
* @param value - The index as bigint (must be a non-negative integer within safe integer range)
|
|
40
|
+
* @returns The branded IndexWithinCheckpoint value
|
|
41
|
+
* @throws If the value is negative or exceeds Number.MAX_SAFE_INTEGER
|
|
42
|
+
*/
|
|
43
|
+
IndexWithinCheckpoint.fromBigInt = function (value: bigint): IndexWithinCheckpoint {
|
|
44
|
+
if (value < 0n) {
|
|
45
|
+
throw new Error(`IndexWithinCheckpoint must be non-negative, got ${value}`);
|
|
46
|
+
}
|
|
47
|
+
if (value > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
48
|
+
throw new Error(`IndexWithinCheckpoint ${value} exceeds MAX_SAFE_INTEGER`);
|
|
49
|
+
}
|
|
50
|
+
return Number(value) as IndexWithinCheckpoint;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Creates an IndexWithinCheckpoint from a string.
|
|
55
|
+
* @param value - The index as a string
|
|
56
|
+
* @returns The branded IndexWithinCheckpoint value
|
|
57
|
+
* @throws If the string cannot be parsed as a valid index
|
|
58
|
+
*/
|
|
59
|
+
IndexWithinCheckpoint.fromString = function (value: string): IndexWithinCheckpoint {
|
|
60
|
+
const parsed = parseInt(value, 10);
|
|
61
|
+
if (isNaN(parsed)) {
|
|
62
|
+
throw new Error(`Cannot parse IndexWithinCheckpoint from string: ${value}`);
|
|
63
|
+
}
|
|
64
|
+
return IndexWithinCheckpoint(parsed);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Type guard to check if a value is a valid IndexWithinCheckpoint.
|
|
69
|
+
* Note: At runtime, an IndexWithinCheckpoint is just a number, so this checks if the value
|
|
70
|
+
* is a non-negative integer.
|
|
71
|
+
*/
|
|
72
|
+
IndexWithinCheckpoint.isValid = function (value: unknown): value is IndexWithinCheckpoint {
|
|
73
|
+
return typeof value === 'number' && Number.isInteger(value) && value >= 0;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The zero index value (first block in checkpoint).
|
|
78
|
+
*/
|
|
79
|
+
IndexWithinCheckpoint.ZERO = IndexWithinCheckpoint(0);
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Zod schema for parsing and validating IndexWithinCheckpoint values.
|
|
83
|
+
* Accepts numbers, bigints, or strings and coerces them to IndexWithinCheckpoint.
|
|
84
|
+
*/
|
|
85
|
+
export const IndexWithinCheckpointSchema = z
|
|
86
|
+
.union([z.number(), z.bigint(), z.string()])
|
|
87
|
+
.pipe(z.coerce.number().int().min(0))
|
|
88
|
+
.transform(value => IndexWithinCheckpoint(value));
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
import type { Branded } from './types.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A branded type representing a slot number.
|
|
7
|
+
* Slots are the fundamental time unit in the Aztec protocol, with multiple slots comprising an epoch.
|
|
8
|
+
*
|
|
9
|
+
* This is a nominal type backed by a number, but TypeScript will treat it as
|
|
10
|
+
* incompatible with plain numbers and other branded numeric types (like EpochNumber, BlockNumber, etc.).
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const slot = SlotNumber(5);
|
|
15
|
+
* const plainNumber: number = slot; // OK - SlotNumber is assignable to number
|
|
16
|
+
* const slotFromNumber: SlotNumber = 5; // ERROR - number is not assignable to SlotNumber
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export type SlotNumber = Branded<number, 'SlotNumber'>;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Creates a SlotNumber from a number.
|
|
23
|
+
* @param value - The slot number (must be a non-negative integer)
|
|
24
|
+
* @returns The branded SlotNumber value
|
|
25
|
+
* @throws If the value is negative or not an integer
|
|
26
|
+
*/
|
|
27
|
+
export function SlotNumber(value: number): SlotNumber {
|
|
28
|
+
if (!Number.isInteger(value)) {
|
|
29
|
+
throw new Error(`SlotNumber must be an integer, got ${value}`);
|
|
30
|
+
}
|
|
31
|
+
if (value < 0) {
|
|
32
|
+
throw new Error(`SlotNumber must be non-negative, got ${value}`);
|
|
33
|
+
}
|
|
34
|
+
return value as SlotNumber;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Creates a SlotNumber from a bigint.
|
|
39
|
+
* @param value - The slot number as bigint (must be a non-negative integer within safe integer range)
|
|
40
|
+
* @returns The branded SlotNumber value
|
|
41
|
+
* @throws If the value is negative or exceeds Number.MAX_SAFE_INTEGER
|
|
42
|
+
*/
|
|
43
|
+
SlotNumber.fromBigInt = function (value: bigint): SlotNumber {
|
|
44
|
+
if (value < 0n) {
|
|
45
|
+
throw new Error(`SlotNumber must be non-negative, got ${value}`);
|
|
46
|
+
}
|
|
47
|
+
if (value > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
48
|
+
throw new Error(`SlotNumber ${value} exceeds MAX_SAFE_INTEGER`);
|
|
49
|
+
}
|
|
50
|
+
return Number(value) as SlotNumber;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Creates a SlotNumber from a string.
|
|
55
|
+
* @param value - The slot number as a string
|
|
56
|
+
* @returns The branded SlotNumber value
|
|
57
|
+
* @throws If the string cannot be parsed as a valid slot
|
|
58
|
+
*/
|
|
59
|
+
SlotNumber.fromString = function (value: string): SlotNumber {
|
|
60
|
+
const parsed = parseInt(value, 10);
|
|
61
|
+
if (isNaN(parsed)) {
|
|
62
|
+
throw new Error(`Cannot parse SlotNumber from string: ${value}`);
|
|
63
|
+
}
|
|
64
|
+
return SlotNumber(parsed);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Type guard to check if a value is a valid SlotNumber.
|
|
69
|
+
* Note: At runtime, a SlotNumber is just a number, so this checks if the value
|
|
70
|
+
* is a non-negative integer.
|
|
71
|
+
*/
|
|
72
|
+
SlotNumber.isValid = function (value: unknown): value is SlotNumber {
|
|
73
|
+
return typeof value === 'number' && Number.isInteger(value) && value >= 0;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The zero slot value.
|
|
78
|
+
*/
|
|
79
|
+
SlotNumber.ZERO = SlotNumber(0);
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Zod schema for parsing and validating SlotNumber values.
|
|
83
|
+
* Accepts numbers, bigints, or strings and coerces them to SlotNumber.
|
|
84
|
+
*/
|
|
85
|
+
export const SlotNumberSchema = z
|
|
86
|
+
.union([z.number(), z.bigint(), z.string()])
|
|
87
|
+
.pipe(z.coerce.number().int().min(0))
|
|
88
|
+
.transform(value => SlotNumber(value));
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
2
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
+
import { BufferReader, deserializeBigInt, serializeBigInt } from '@aztec/foundation/serialize';
|
|
4
|
+
|
|
5
|
+
import { inspect } from 'util';
|
|
6
|
+
|
|
7
|
+
import { bufferToHex } from '../string/index.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A class representing a 16 byte Buffer.
|
|
11
|
+
*/
|
|
12
|
+
export class Buffer16 {
|
|
13
|
+
/**
|
|
14
|
+
* The size of the hash in bytes.
|
|
15
|
+
*/
|
|
16
|
+
public static SIZE = 16;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Buffer16 with value zero.
|
|
20
|
+
*/
|
|
21
|
+
public static ZERO = new Buffer16(Buffer.alloc(Buffer16.SIZE));
|
|
22
|
+
|
|
23
|
+
constructor(
|
|
24
|
+
/**
|
|
25
|
+
* The buffer containing the hash.
|
|
26
|
+
*/
|
|
27
|
+
public buffer: Buffer,
|
|
28
|
+
) {
|
|
29
|
+
if (buffer.length !== Buffer16.SIZE) {
|
|
30
|
+
throw new Error(`Expected buffer to have length ${Buffer16.SIZE} but was ${buffer.length}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Returns the raw buffer of the hash.
|
|
36
|
+
* @returns The buffer containing the hash.
|
|
37
|
+
*/
|
|
38
|
+
public toBuffer() {
|
|
39
|
+
return this.buffer;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Creates a Buffer16 from a buffer.
|
|
44
|
+
* @param buffer - The buffer to create from.
|
|
45
|
+
* @returns A new Buffer16 object.
|
|
46
|
+
*/
|
|
47
|
+
public static fromBuffer(buffer: Buffer | BufferReader) {
|
|
48
|
+
const reader = BufferReader.asReader(buffer);
|
|
49
|
+
return new Buffer16(reader.readBytes(Buffer16.SIZE));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Checks if this hash and another hash are equal.
|
|
54
|
+
* @param hash - A hash to compare with.
|
|
55
|
+
* @returns True if the hashes are equal, false otherwise.
|
|
56
|
+
*/
|
|
57
|
+
public equals(hash: Buffer16): boolean {
|
|
58
|
+
return this.buffer.equals(hash.buffer);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Returns true if this hash is zero.
|
|
63
|
+
* @returns True if this hash is zero.
|
|
64
|
+
*/
|
|
65
|
+
public isZero(): boolean {
|
|
66
|
+
return this.buffer.equals(Buffer.alloc(16, 0));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Convert this hash to a hex string.
|
|
71
|
+
* @returns The hex string.
|
|
72
|
+
*/
|
|
73
|
+
public toString() {
|
|
74
|
+
return bufferToHex(this.buffer);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
[inspect.custom]() {
|
|
78
|
+
return `Buffer16<${this.toString()}>`;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
toJSON() {
|
|
82
|
+
return this.toString();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Convert this hash to a big int.
|
|
87
|
+
* @returns The big int.
|
|
88
|
+
*/
|
|
89
|
+
public toBigInt() {
|
|
90
|
+
return deserializeBigInt(this.buffer, 0, Buffer16.SIZE).elem;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Creates a Buffer16 from a bigint.
|
|
95
|
+
*/
|
|
96
|
+
public static fromBigInt(hash: bigint) {
|
|
97
|
+
return new Buffer16(serializeBigInt(hash, Buffer16.SIZE));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public static fromField(hash: Fr) {
|
|
101
|
+
return new Buffer16(serializeBigInt(hash.toBigInt()));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Converts a hex string into a Buffer16 object.
|
|
106
|
+
*/
|
|
107
|
+
public static fromString(str: string): Buffer16 {
|
|
108
|
+
if (str.startsWith('0x')) {
|
|
109
|
+
str = str.slice(2);
|
|
110
|
+
}
|
|
111
|
+
if (str.length !== this.SIZE * 2) {
|
|
112
|
+
throw new Error(`Expected string to be ${this.SIZE * 2} characters long, but was ${str.length}`);
|
|
113
|
+
}
|
|
114
|
+
return new Buffer16(Buffer.from(str, 'hex'));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Converts a number into a Buffer16 object.
|
|
119
|
+
* @param num - The number to convert.
|
|
120
|
+
* @returns A new Buffer16 object.
|
|
121
|
+
*/
|
|
122
|
+
public static fromNumber(num: number): Buffer16 {
|
|
123
|
+
return new Buffer16(serializeBigInt(BigInt(num), Buffer16.SIZE));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Generates a random Buffer16.
|
|
128
|
+
* @returns A new Buffer16 object.
|
|
129
|
+
*/
|
|
130
|
+
public static random(): Buffer16 {
|
|
131
|
+
return new Buffer16(Buffer.from(randomBytes(Buffer16.SIZE)));
|
|
132
|
+
}
|
|
133
|
+
}
|
package/src/buffer/buffer32.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { randomBytes } from '@aztec/foundation/crypto';
|
|
2
|
-
import type { Fr } from '@aztec/foundation/
|
|
1
|
+
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
2
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { BufferReader, deserializeBigInt, serializeBigInt } from '@aztec/foundation/serialize';
|
|
4
4
|
|
|
5
|
+
import { inspect } from 'util';
|
|
6
|
+
|
|
5
7
|
import { bufferToHex } from '../string/index.js';
|
|
6
8
|
|
|
7
9
|
/**
|
|
@@ -72,6 +74,10 @@ export class Buffer32 {
|
|
|
72
74
|
return bufferToHex(this.buffer);
|
|
73
75
|
}
|
|
74
76
|
|
|
77
|
+
[inspect.custom]() {
|
|
78
|
+
return `Buffer32<${this.toString()}>`;
|
|
79
|
+
}
|
|
80
|
+
|
|
75
81
|
toJSON() {
|
|
76
82
|
return this.toString();
|
|
77
83
|
}
|
|
@@ -85,8 +91,6 @@ export class Buffer32 {
|
|
|
85
91
|
}
|
|
86
92
|
/**
|
|
87
93
|
* Creates a Buffer32 from a bigint.
|
|
88
|
-
* @param hash - The tx hash as a big int.
|
|
89
|
-
* @returns The Buffer32.
|
|
90
94
|
*/
|
|
91
95
|
public static fromBigInt(hash: bigint) {
|
|
92
96
|
return new Buffer32(serializeBigInt(hash, Buffer32.SIZE));
|
|
@@ -112,15 +116,13 @@ export class Buffer32 {
|
|
|
112
116
|
|
|
113
117
|
/**
|
|
114
118
|
* Converts a string into a Buffer32 object.
|
|
115
|
-
* @param str - The TX hash in string format.
|
|
116
|
-
* @returns A new Buffer32 object.
|
|
117
119
|
*/
|
|
118
120
|
public static fromString(str: string): Buffer32 {
|
|
119
121
|
if (str.startsWith('0x')) {
|
|
120
122
|
str = str.slice(2);
|
|
121
123
|
}
|
|
122
|
-
if (str.length !==
|
|
123
|
-
throw new Error(`Expected string to be
|
|
124
|
+
if (str.length !== this.SIZE * 2) {
|
|
125
|
+
throw new Error(`Expected string to be ${this.SIZE * 2} characters long, but was ${str.length}`);
|
|
124
126
|
}
|
|
125
127
|
return new Buffer32(Buffer.from(str, 'hex'));
|
|
126
128
|
}
|
package/src/buffer/index.ts
CHANGED
package/src/collection/array.ts
CHANGED
|
@@ -89,6 +89,17 @@ export async function timesAsync<T>(n: number, fn: (i: number) => Promise<T>): P
|
|
|
89
89
|
return results;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Filters an array with an async predicate. Fires all predicate promises in parallel.
|
|
94
|
+
* @param arr - The array to filter.
|
|
95
|
+
* @param fn - The async function to determine if an item should be included.
|
|
96
|
+
* @returns A promise that resolves to the filtered array.
|
|
97
|
+
*/
|
|
98
|
+
export async function filterAsync<T>(arr: T[], fn: (item: T) => Promise<boolean>): Promise<T[]> {
|
|
99
|
+
const results = await Promise.all(arr.map(fn));
|
|
100
|
+
return arr.filter((_, i) => results[i]);
|
|
101
|
+
}
|
|
102
|
+
|
|
92
103
|
/**
|
|
93
104
|
* Executes the given async function n times in parallel and returns the results in an array.
|
|
94
105
|
* @param n - How many times to repeat.
|
|
@@ -157,7 +168,7 @@ export function areArraysEqual<T>(a: T[], b: T[], eq: (a: T, b: T) => boolean =
|
|
|
157
168
|
* @param arr - The array.
|
|
158
169
|
* @param fn - The function to get the value to compare.
|
|
159
170
|
*/
|
|
160
|
-
export function maxBy<T>(arr: T[], fn: (x: T) => number): T | undefined {
|
|
171
|
+
export function maxBy<T>(arr: T[], fn: (x: T) => number | bigint): T | undefined {
|
|
161
172
|
return arr.reduce((max, x) => (fn(x) > fn(max) ? x : max), arr[0]);
|
|
162
173
|
}
|
|
163
174
|
|
|
@@ -167,13 +178,25 @@ export function sum(arr: number[]): number {
|
|
|
167
178
|
}
|
|
168
179
|
|
|
169
180
|
/** Computes the median of a numeric array. Returns undefined if array is empty. */
|
|
170
|
-
export function median(arr: number[])
|
|
181
|
+
export function median(arr: number[]): number | undefined;
|
|
182
|
+
/** Computes the median of a bigint array. Returns undefined if array is empty. */
|
|
183
|
+
export function median(arr: bigint[]): bigint | undefined;
|
|
184
|
+
export function median(arr: number[] | bigint[]): number | bigint | undefined {
|
|
171
185
|
if (arr.length === 0) {
|
|
172
186
|
return undefined;
|
|
173
187
|
}
|
|
174
|
-
|
|
188
|
+
|
|
189
|
+
// Handle number array
|
|
190
|
+
if (typeof arr[0] === 'number') {
|
|
191
|
+
const sorted = [...(arr as number[])].sort((a, b) => a - b);
|
|
192
|
+
const mid = Math.floor(sorted.length / 2);
|
|
193
|
+
return sorted.length % 2 !== 0 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Handle bigint array
|
|
197
|
+
const sorted = [...(arr as bigint[])].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
175
198
|
const mid = Math.floor(sorted.length / 2);
|
|
176
|
-
return sorted.length % 2 !== 0 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) /
|
|
199
|
+
return sorted.length % 2 !== 0 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2n;
|
|
177
200
|
}
|
|
178
201
|
|
|
179
202
|
/** Computes the mean of a numeric array. Returns undefined if the array is empty. */
|
|
@@ -201,3 +224,94 @@ export function stdDev(values: number[]) {
|
|
|
201
224
|
}
|
|
202
225
|
return Math.sqrt(variance(values)!);
|
|
203
226
|
}
|
|
227
|
+
|
|
228
|
+
/** Counts how many items from the beginning of the array match the given predicate. */
|
|
229
|
+
export function countWhile<T>(collection: T[], predicate: (x: T) => boolean): number {
|
|
230
|
+
let count = 0;
|
|
231
|
+
for (const item of collection) {
|
|
232
|
+
if (predicate(item)) {
|
|
233
|
+
count++;
|
|
234
|
+
} else {
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return count;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/** Splits the given iterable into chunks of the given size. Last chunk may be of smaller than the requested size. */
|
|
242
|
+
export function chunk<T>(items: T[], chunkSize: number): T[][] {
|
|
243
|
+
if (chunkSize <= 0) {
|
|
244
|
+
throw new Error('Chunk size must be greater than 0');
|
|
245
|
+
}
|
|
246
|
+
const chunks: T[][] = [];
|
|
247
|
+
for (let i = 0; i < items.length; i += chunkSize) {
|
|
248
|
+
chunks.push(items.slice(i, i + chunkSize));
|
|
249
|
+
}
|
|
250
|
+
return chunks;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Splits the given array into chunks of the given size, wrapping around to the beginning
|
|
255
|
+
* if the last chunk would be smaller than the requested size.
|
|
256
|
+
* Returns empty array for empty input. Returns single chunk with all items if chunkSize <= 0.
|
|
257
|
+
*/
|
|
258
|
+
export function chunkWrapAround<T>(items: T[], chunkSize: number): T[][] {
|
|
259
|
+
if (items.length === 0) {
|
|
260
|
+
return [];
|
|
261
|
+
}
|
|
262
|
+
if (chunkSize <= 0 || items.length <= chunkSize) {
|
|
263
|
+
return [items];
|
|
264
|
+
}
|
|
265
|
+
const remainder = items.length % chunkSize;
|
|
266
|
+
if (remainder === 0) {
|
|
267
|
+
return chunk(items, chunkSize);
|
|
268
|
+
}
|
|
269
|
+
const wrapAroundCount = chunkSize - remainder;
|
|
270
|
+
const wrappedItems = [...items, ...items.slice(0, wrapAroundCount)];
|
|
271
|
+
return chunk(wrappedItems, chunkSize);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const UNINITIALIZED = Symbol('uninitialized');
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Splits the given iterable into chunks based on the key returned by the given function.
|
|
278
|
+
* Items must be contiguous to be included in the same chunk.
|
|
279
|
+
*/
|
|
280
|
+
export function chunkBy<T, U>(items: T[], fn: (item: T) => U): T[][] {
|
|
281
|
+
const chunks: T[][] = [];
|
|
282
|
+
let currentChunk: T[] = [];
|
|
283
|
+
let currentKey: U | typeof UNINITIALIZED = UNINITIALIZED;
|
|
284
|
+
|
|
285
|
+
for (const item of items) {
|
|
286
|
+
const key = fn(item);
|
|
287
|
+
if (currentKey === UNINITIALIZED || key !== currentKey) {
|
|
288
|
+
if (currentChunk.length > 0) {
|
|
289
|
+
chunks.push(currentChunk);
|
|
290
|
+
}
|
|
291
|
+
currentChunk = [item];
|
|
292
|
+
currentKey = key;
|
|
293
|
+
} else {
|
|
294
|
+
currentChunk.push(item);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (currentChunk.length > 0) {
|
|
299
|
+
chunks.push(currentChunk);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return chunks;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/** Partitions the given iterable into two arrays based on the predicate. */
|
|
306
|
+
export function partition<T>(items: T[], predicate: (item: T) => boolean): [T[], T[]] {
|
|
307
|
+
const pass: T[] = [];
|
|
308
|
+
const fail: T[] = [];
|
|
309
|
+
for (const item of items) {
|
|
310
|
+
if (predicate(item)) {
|
|
311
|
+
pass.push(item);
|
|
312
|
+
} else {
|
|
313
|
+
fail.push(item);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return [pass, fail];
|
|
317
|
+
}
|
package/src/collection/object.ts
CHANGED
|
@@ -50,3 +50,40 @@ export function omit<T extends object>(object: T, ...props: string[]): Partial<T
|
|
|
50
50
|
}
|
|
51
51
|
return obj;
|
|
52
52
|
}
|
|
53
|
+
|
|
54
|
+
/** Equivalent to Object.keys but preserves types. */
|
|
55
|
+
export function getKeys<T extends object>(obj: T): (keyof T)[] {
|
|
56
|
+
return Object.keys(obj) as (keyof T)[];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Equivalent to Object.entries but preserves types. */
|
|
60
|
+
export function getEntries<T extends Record<PropertyKey, unknown>>(obj: T): { [K in keyof T]: [K, T[K]] }[keyof T][] {
|
|
61
|
+
// See https://stackoverflow.com/a/76176570
|
|
62
|
+
return Object.entries(obj) as { [K in keyof T]: [K, T[K]] }[keyof T][];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Equivalent to Object.fromEntries but preserves types. */
|
|
66
|
+
export function fromEntries<const T extends ReadonlyArray<readonly [PropertyKey, unknown]>>(
|
|
67
|
+
entries: T,
|
|
68
|
+
): { [K in T[number] as K[0]]: K[1] } {
|
|
69
|
+
// See https://stackoverflow.com/a/76176570
|
|
70
|
+
return Object.fromEntries(entries) as { [K in T[number] as K[0]]: K[1] };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Asserts all values in object are not undefined. */
|
|
74
|
+
export function assertRequired<T extends object>(obj: T): Required<T> {
|
|
75
|
+
for (const key in obj) {
|
|
76
|
+
if (obj[key] === undefined) {
|
|
77
|
+
throw new Error(`Missing property ${key}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return obj as Required<T>;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Returns the result of merging two objects ignoring properties with undefined values. */
|
|
84
|
+
export function merge<T extends object, U extends object>(
|
|
85
|
+
obj1: T,
|
|
86
|
+
obj2: U | undefined,
|
|
87
|
+
): T & { [P in keyof U]+?: Exclude<U[P], undefined> } {
|
|
88
|
+
return { ...obj1, ...compact(obj2 ?? {}) };
|
|
89
|
+
}
|