@mikeatlast/ponder 0.16.1-fork.1
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/CHANGELOG.md +3415 -0
- package/README.md +186 -0
- package/dist/esm/bin/commands/codegen.js +46 -0
- package/dist/esm/bin/commands/codegen.js.map +1 -0
- package/dist/esm/bin/commands/createViews.js +196 -0
- package/dist/esm/bin/commands/createViews.js.map +1 -0
- package/dist/esm/bin/commands/dev.js +430 -0
- package/dist/esm/bin/commands/dev.js.map +1 -0
- package/dist/esm/bin/commands/list.js +148 -0
- package/dist/esm/bin/commands/list.js.map +1 -0
- package/dist/esm/bin/commands/prune.js +223 -0
- package/dist/esm/bin/commands/prune.js.map +1 -0
- package/dist/esm/bin/commands/serve.js +198 -0
- package/dist/esm/bin/commands/serve.js.map +1 -0
- package/dist/esm/bin/commands/start.js +253 -0
- package/dist/esm/bin/commands/start.js.map +1 -0
- package/dist/esm/bin/isolatedController.js +200 -0
- package/dist/esm/bin/isolatedController.js.map +1 -0
- package/dist/esm/bin/isolatedWorker.js +146 -0
- package/dist/esm/bin/isolatedWorker.js.map +1 -0
- package/dist/esm/bin/ponder.js +137 -0
- package/dist/esm/bin/ponder.js.map +1 -0
- package/dist/esm/bin/utils/codegen.js +25 -0
- package/dist/esm/bin/utils/codegen.js.map +1 -0
- package/dist/esm/bin/utils/exit.js +100 -0
- package/dist/esm/bin/utils/exit.js.map +1 -0
- package/dist/esm/build/config.js +745 -0
- package/dist/esm/build/config.js.map +1 -0
- package/dist/esm/build/factory.js +82 -0
- package/dist/esm/build/factory.js.map +1 -0
- package/dist/esm/build/index.js +567 -0
- package/dist/esm/build/index.js.map +1 -0
- package/dist/esm/build/plugin.js +53 -0
- package/dist/esm/build/plugin.js.map +1 -0
- package/dist/esm/build/pre.js +83 -0
- package/dist/esm/build/pre.js.map +1 -0
- package/dist/esm/build/schema.js +202 -0
- package/dist/esm/build/schema.js.map +1 -0
- package/dist/esm/build/stacktrace.js +137 -0
- package/dist/esm/build/stacktrace.js.map +1 -0
- package/dist/esm/client/index.js +441 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/config/address.js +2 -0
- package/dist/esm/config/address.js.map +1 -0
- package/dist/esm/config/eventFilter.js +2 -0
- package/dist/esm/config/eventFilter.js.map +1 -0
- package/dist/esm/config/index.js +2 -0
- package/dist/esm/config/index.js.map +1 -0
- package/dist/esm/config/utilityTypes.js +2 -0
- package/dist/esm/config/utilityTypes.js.map +1 -0
- package/dist/esm/database/actions.js +445 -0
- package/dist/esm/database/actions.js.map +1 -0
- package/dist/esm/database/index.js +604 -0
- package/dist/esm/database/index.js.map +1 -0
- package/dist/esm/database/queryBuilder.js +314 -0
- package/dist/esm/database/queryBuilder.js.map +1 -0
- package/dist/esm/drizzle/bigint.js +38 -0
- package/dist/esm/drizzle/bigint.js.map +1 -0
- package/dist/esm/drizzle/bytes.js +47 -0
- package/dist/esm/drizzle/bytes.js.map +1 -0
- package/dist/esm/drizzle/hex.js +40 -0
- package/dist/esm/drizzle/hex.js.map +1 -0
- package/dist/esm/drizzle/index.js +28 -0
- package/dist/esm/drizzle/index.js.map +1 -0
- package/dist/esm/drizzle/json.js +123 -0
- package/dist/esm/drizzle/json.js.map +1 -0
- package/dist/esm/drizzle/kit/index.js +927 -0
- package/dist/esm/drizzle/kit/index.js.map +1 -0
- package/dist/esm/drizzle/onchain.js +184 -0
- package/dist/esm/drizzle/onchain.js.map +1 -0
- package/dist/esm/drizzle/text.js +61 -0
- package/dist/esm/drizzle/text.js.map +1 -0
- package/dist/esm/graphql/graphiql.html.js +59 -0
- package/dist/esm/graphql/graphiql.html.js.map +1 -0
- package/dist/esm/graphql/index.js +934 -0
- package/dist/esm/graphql/index.js.map +1 -0
- package/dist/esm/graphql/json.js +42 -0
- package/dist/esm/graphql/json.js.map +1 -0
- package/dist/esm/graphql/middleware.js +83 -0
- package/dist/esm/graphql/middleware.js.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/indexing/addStackTrace.js +54 -0
- package/dist/esm/indexing/addStackTrace.js.map +1 -0
- package/dist/esm/indexing/client.js +675 -0
- package/dist/esm/indexing/client.js.map +1 -0
- package/dist/esm/indexing/index.js +663 -0
- package/dist/esm/indexing/index.js.map +1 -0
- package/dist/esm/indexing/profile.js +584 -0
- package/dist/esm/indexing/profile.js.map +1 -0
- package/dist/esm/indexing-store/cache.js +666 -0
- package/dist/esm/indexing-store/cache.js.map +1 -0
- package/dist/esm/indexing-store/index.js +461 -0
- package/dist/esm/indexing-store/index.js.map +1 -0
- package/dist/esm/indexing-store/profile.js +428 -0
- package/dist/esm/indexing-store/profile.js.map +1 -0
- package/dist/esm/indexing-store/utils.js +111 -0
- package/dist/esm/indexing-store/utils.js.map +1 -0
- package/dist/esm/internal/common.js +2 -0
- package/dist/esm/internal/common.js.map +1 -0
- package/dist/esm/internal/errors.js +300 -0
- package/dist/esm/internal/errors.js.map +1 -0
- package/dist/esm/internal/logger.js +178 -0
- package/dist/esm/internal/logger.js.map +1 -0
- package/dist/esm/internal/metrics.js +1049 -0
- package/dist/esm/internal/metrics.js.map +1 -0
- package/dist/esm/internal/options.js +73 -0
- package/dist/esm/internal/options.js.map +1 -0
- package/dist/esm/internal/shutdown.js +24 -0
- package/dist/esm/internal/shutdown.js.map +1 -0
- package/dist/esm/internal/telemetry.js +200 -0
- package/dist/esm/internal/telemetry.js.map +1 -0
- package/dist/esm/internal/types.js +2 -0
- package/dist/esm/internal/types.js.map +1 -0
- package/dist/esm/rpc/actions.js +988 -0
- package/dist/esm/rpc/actions.js.map +1 -0
- package/dist/esm/rpc/http.js +130 -0
- package/dist/esm/rpc/http.js.map +1 -0
- package/dist/esm/rpc/index.js +749 -0
- package/dist/esm/rpc/index.js.map +1 -0
- package/dist/esm/runtime/events.js +664 -0
- package/dist/esm/runtime/events.js.map +1 -0
- package/dist/esm/runtime/filter.js +476 -0
- package/dist/esm/runtime/filter.js.map +1 -0
- package/dist/esm/runtime/fragments.js +478 -0
- package/dist/esm/runtime/fragments.js.map +1 -0
- package/dist/esm/runtime/historical.js +954 -0
- package/dist/esm/runtime/historical.js.map +1 -0
- package/dist/esm/runtime/index.js +316 -0
- package/dist/esm/runtime/index.js.map +1 -0
- package/dist/esm/runtime/init.js +12 -0
- package/dist/esm/runtime/init.js.map +1 -0
- package/dist/esm/runtime/isolated.js +464 -0
- package/dist/esm/runtime/isolated.js.map +1 -0
- package/dist/esm/runtime/multichain.js +511 -0
- package/dist/esm/runtime/multichain.js.map +1 -0
- package/dist/esm/runtime/omnichain.js +546 -0
- package/dist/esm/runtime/omnichain.js.map +1 -0
- package/dist/esm/runtime/realtime.js +722 -0
- package/dist/esm/runtime/realtime.js.map +1 -0
- package/dist/esm/server/error.js +56 -0
- package/dist/esm/server/error.js.map +1 -0
- package/dist/esm/server/index.js +121 -0
- package/dist/esm/server/index.js.map +1 -0
- package/dist/esm/sync-historical/index.js +703 -0
- package/dist/esm/sync-historical/index.js.map +1 -0
- package/dist/esm/sync-realtime/bloom.js +76 -0
- package/dist/esm/sync-realtime/bloom.js.map +1 -0
- package/dist/esm/sync-realtime/index.js +918 -0
- package/dist/esm/sync-realtime/index.js.map +1 -0
- package/dist/esm/sync-store/encode.js +105 -0
- package/dist/esm/sync-store/encode.js.map +1 -0
- package/dist/esm/sync-store/index.js +885 -0
- package/dist/esm/sync-store/index.js.map +1 -0
- package/dist/esm/sync-store/migrations.js +1595 -0
- package/dist/esm/sync-store/migrations.js.map +1 -0
- package/dist/esm/sync-store/schema.js +181 -0
- package/dist/esm/sync-store/schema.js.map +1 -0
- package/dist/esm/types/db.js +2 -0
- package/dist/esm/types/db.js.map +1 -0
- package/dist/esm/types/eth.js +2 -0
- package/dist/esm/types/eth.js.map +1 -0
- package/dist/esm/types/utils.js +2 -0
- package/dist/esm/types/utils.js.map +1 -0
- package/dist/esm/types/virtual.js +2 -0
- package/dist/esm/types/virtual.js.map +1 -0
- package/dist/esm/ui/app.js +157 -0
- package/dist/esm/ui/app.js.map +1 -0
- package/dist/esm/ui/index.js +29 -0
- package/dist/esm/ui/index.js.map +1 -0
- package/dist/esm/ui/patch.js +140 -0
- package/dist/esm/ui/patch.js.map +1 -0
- package/dist/esm/utils/abi.js +55 -0
- package/dist/esm/utils/abi.js.map +1 -0
- package/dist/esm/utils/bigint.js +37 -0
- package/dist/esm/utils/bigint.js.map +1 -0
- package/dist/esm/utils/chains.js +21 -0
- package/dist/esm/utils/chains.js.map +1 -0
- package/dist/esm/utils/checkpoint.js +139 -0
- package/dist/esm/utils/checkpoint.js.map +1 -0
- package/dist/esm/utils/chunk.js +8 -0
- package/dist/esm/utils/chunk.js.map +1 -0
- package/dist/esm/utils/copy.js +129 -0
- package/dist/esm/utils/copy.js.map +1 -0
- package/dist/esm/utils/date.js +27 -0
- package/dist/esm/utils/date.js.map +1 -0
- package/dist/esm/utils/debug.js +2 -0
- package/dist/esm/utils/debug.js.map +1 -0
- package/dist/esm/utils/decodeAbiParameters.js +290 -0
- package/dist/esm/utils/decodeAbiParameters.js.map +1 -0
- package/dist/esm/utils/decodeEventLog.js +75 -0
- package/dist/esm/utils/decodeEventLog.js.map +1 -0
- package/dist/esm/utils/dedupe.js +29 -0
- package/dist/esm/utils/dedupe.js.map +1 -0
- package/dist/esm/utils/duplicates.js +19 -0
- package/dist/esm/utils/duplicates.js.map +1 -0
- package/dist/esm/utils/estimate.js +6 -0
- package/dist/esm/utils/estimate.js.map +1 -0
- package/dist/esm/utils/finality.js +38 -0
- package/dist/esm/utils/finality.js.map +1 -0
- package/dist/esm/utils/format.js +20 -0
- package/dist/esm/utils/format.js.map +1 -0
- package/dist/esm/utils/generators.js +121 -0
- package/dist/esm/utils/generators.js.map +1 -0
- package/dist/esm/utils/hash.js +11 -0
- package/dist/esm/utils/hash.js.map +1 -0
- package/dist/esm/utils/interval.js +171 -0
- package/dist/esm/utils/interval.js.map +1 -0
- package/dist/esm/utils/lowercase.js +7 -0
- package/dist/esm/utils/lowercase.js.map +1 -0
- package/dist/esm/utils/mutex.js +26 -0
- package/dist/esm/utils/mutex.js.map +1 -0
- package/dist/esm/utils/never.js +4 -0
- package/dist/esm/utils/never.js.map +1 -0
- package/dist/esm/utils/offset.js +101 -0
- package/dist/esm/utils/offset.js.map +1 -0
- package/dist/esm/utils/order.js +18 -0
- package/dist/esm/utils/order.js.map +1 -0
- package/dist/esm/utils/partition.js +46 -0
- package/dist/esm/utils/partition.js.map +1 -0
- package/dist/esm/utils/pg.js +175 -0
- package/dist/esm/utils/pg.js.map +1 -0
- package/dist/esm/utils/pglite.js +80 -0
- package/dist/esm/utils/pglite.js.map +1 -0
- package/dist/esm/utils/port.js +30 -0
- package/dist/esm/utils/port.js.map +1 -0
- package/dist/esm/utils/print.js +23 -0
- package/dist/esm/utils/print.js.map +1 -0
- package/dist/esm/utils/promiseAllSettledWithThrow.js +19 -0
- package/dist/esm/utils/promiseAllSettledWithThrow.js.map +1 -0
- package/dist/esm/utils/promiseWithResolvers.js +13 -0
- package/dist/esm/utils/promiseWithResolvers.js.map +1 -0
- package/dist/esm/utils/queue.js +150 -0
- package/dist/esm/utils/queue.js.map +1 -0
- package/dist/esm/utils/range.js +8 -0
- package/dist/esm/utils/range.js.map +1 -0
- package/dist/esm/utils/result.js +10 -0
- package/dist/esm/utils/result.js.map +1 -0
- package/dist/esm/utils/sql-parse.js +1326 -0
- package/dist/esm/utils/sql-parse.js.map +1 -0
- package/dist/esm/utils/timer.js +9 -0
- package/dist/esm/utils/timer.js.map +1 -0
- package/dist/esm/utils/truncate.js +15 -0
- package/dist/esm/utils/truncate.js.map +1 -0
- package/dist/esm/utils/wait.js +10 -0
- package/dist/esm/utils/wait.js.map +1 -0
- package/dist/esm/utils/zipper.js +67 -0
- package/dist/esm/utils/zipper.js.map +1 -0
- package/dist/types/bin/commands/codegen.d.ts +5 -0
- package/dist/types/bin/commands/codegen.d.ts.map +1 -0
- package/dist/types/bin/commands/createViews.d.ts +8 -0
- package/dist/types/bin/commands/createViews.d.ts.map +1 -0
- package/dist/types/bin/commands/dev.d.ts +5 -0
- package/dist/types/bin/commands/dev.d.ts.map +1 -0
- package/dist/types/bin/commands/list.d.ts +5 -0
- package/dist/types/bin/commands/list.d.ts.map +1 -0
- package/dist/types/bin/commands/prune.d.ts +5 -0
- package/dist/types/bin/commands/prune.d.ts.map +1 -0
- package/dist/types/bin/commands/serve.d.ts +5 -0
- package/dist/types/bin/commands/serve.d.ts.map +1 -0
- package/dist/types/bin/commands/start.d.ts +19 -0
- package/dist/types/bin/commands/start.d.ts.map +1 -0
- package/dist/types/bin/isolatedController.d.ts +13 -0
- package/dist/types/bin/isolatedController.d.ts.map +1 -0
- package/dist/types/bin/isolatedWorker.d.ts +9 -0
- package/dist/types/bin/isolatedWorker.d.ts.map +1 -0
- package/dist/types/bin/ponder.d.ts +37 -0
- package/dist/types/bin/ponder.d.ts.map +1 -0
- package/dist/types/bin/utils/codegen.d.ts +6 -0
- package/dist/types/bin/utils/codegen.d.ts.map +1 -0
- package/dist/types/bin/utils/exit.d.ts +10 -0
- package/dist/types/bin/utils/exit.d.ts.map +1 -0
- package/dist/types/build/config.d.ts +97 -0
- package/dist/types/build/config.d.ts.map +1 -0
- package/dist/types/build/factory.d.ts +15 -0
- package/dist/types/build/factory.d.ts.map +1 -0
- package/dist/types/build/index.d.ts +84 -0
- package/dist/types/build/index.d.ts.map +1 -0
- package/dist/types/build/plugin.d.ts +4 -0
- package/dist/types/build/plugin.d.ts.map +1 -0
- package/dist/types/build/pre.d.ts +29 -0
- package/dist/types/build/pre.d.ts.map +1 -0
- package/dist/types/build/schema.d.ts +20 -0
- package/dist/types/build/schema.d.ts.map +1 -0
- package/dist/types/build/stacktrace.d.ts +13 -0
- package/dist/types/build/stacktrace.d.ts.map +1 -0
- package/dist/types/client/index.d.ts +27 -0
- package/dist/types/client/index.d.ts.map +1 -0
- package/dist/types/config/address.d.ts +34 -0
- package/dist/types/config/address.d.ts.map +1 -0
- package/dist/types/config/eventFilter.d.ts +18 -0
- package/dist/types/config/eventFilter.d.ts.map +1 -0
- package/dist/types/config/index.d.ts +144 -0
- package/dist/types/config/index.d.ts.map +1 -0
- package/dist/types/config/utilityTypes.d.ts +43 -0
- package/dist/types/config/utilityTypes.d.ts.map +1 -0
- package/dist/types/database/actions.d.ts +99 -0
- package/dist/types/database/actions.d.ts.map +1 -0
- package/dist/types/database/index.d.ts +493 -0
- package/dist/types/database/index.d.ts.map +1 -0
- package/dist/types/database/queryBuilder.d.ts +65 -0
- package/dist/types/database/queryBuilder.d.ts.map +1 -0
- package/dist/types/drizzle/bigint.d.ts +25 -0
- package/dist/types/drizzle/bigint.d.ts.map +1 -0
- package/dist/types/drizzle/bytes.d.ts +31 -0
- package/dist/types/drizzle/bytes.d.ts.map +1 -0
- package/dist/types/drizzle/hex.d.ts +25 -0
- package/dist/types/drizzle/hex.d.ts.map +1 -0
- package/dist/types/drizzle/index.d.ts +6 -0
- package/dist/types/drizzle/index.d.ts.map +1 -0
- package/dist/types/drizzle/json.d.ts +51 -0
- package/dist/types/drizzle/json.d.ts.map +1 -0
- package/dist/types/drizzle/kit/index.d.ts +187 -0
- package/dist/types/drizzle/kit/index.d.ts.map +1 -0
- package/dist/types/drizzle/onchain.d.ts +298 -0
- package/dist/types/drizzle/onchain.d.ts.map +1 -0
- package/dist/types/drizzle/text.d.ts +29 -0
- package/dist/types/drizzle/text.d.ts.map +1 -0
- package/dist/types/graphql/graphiql.html.d.ts +2 -0
- package/dist/types/graphql/graphiql.html.d.ts.map +1 -0
- package/dist/types/graphql/index.d.ts +12 -0
- package/dist/types/graphql/index.d.ts.map +1 -0
- package/dist/types/graphql/json.d.ts +3 -0
- package/dist/types/graphql/json.d.ts.map +1 -0
- package/dist/types/graphql/middleware.d.ts +29 -0
- package/dist/types/graphql/middleware.d.ts.map +1 -0
- package/dist/types/index.d.ts +23 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/indexing/addStackTrace.d.ts +3 -0
- package/dist/types/indexing/addStackTrace.d.ts.map +1 -0
- package/dist/types/indexing/client.d.ts +154 -0
- package/dist/types/indexing/client.d.ts.map +1 -0
- package/dist/types/indexing/index.d.ts +72 -0
- package/dist/types/indexing/index.d.ts.map +1 -0
- package/dist/types/indexing/profile.d.ts +16 -0
- package/dist/types/indexing/profile.d.ts.map +1 -0
- package/dist/types/indexing-store/cache.d.ts +115 -0
- package/dist/types/indexing-store/cache.d.ts.map +1 -0
- package/dist/types/indexing-store/index.d.ts +24 -0
- package/dist/types/indexing-store/index.d.ts.map +1 -0
- package/dist/types/indexing-store/profile.d.ts +7 -0
- package/dist/types/indexing-store/profile.d.ts.map +1 -0
- package/dist/types/indexing-store/utils.d.ts +19 -0
- package/dist/types/indexing-store/utils.d.ts.map +1 -0
- package/dist/types/internal/common.d.ts +15 -0
- package/dist/types/internal/common.d.ts.map +1 -0
- package/dist/types/internal/errors.d.ts +101 -0
- package/dist/types/internal/errors.d.ts.map +1 -0
- package/dist/types/internal/logger.d.ts +37 -0
- package/dist/types/internal/logger.d.ts.map +1 -0
- package/dist/types/internal/metrics.d.ts +120 -0
- package/dist/types/internal/metrics.d.ts.map +1 -0
- package/dist/types/internal/options.d.ts +62 -0
- package/dist/types/internal/options.d.ts.map +1 -0
- package/dist/types/internal/shutdown.d.ts +8 -0
- package/dist/types/internal/shutdown.d.ts.map +1 -0
- package/dist/types/internal/telemetry.d.ts +43 -0
- package/dist/types/internal/telemetry.d.ts.map +1 -0
- package/dist/types/internal/types.d.ts +443 -0
- package/dist/types/internal/types.d.ts.map +1 -0
- package/dist/types/rpc/actions.d.ts +360 -0
- package/dist/types/rpc/actions.d.ts.map +1 -0
- package/dist/types/rpc/http.d.ts +17 -0
- package/dist/types/rpc/http.d.ts.map +1 -0
- package/dist/types/rpc/index.d.ts +43 -0
- package/dist/types/rpc/index.d.ts.map +1 -0
- package/dist/types/runtime/events.d.ts +40 -0
- package/dist/types/runtime/events.d.ts.map +1 -0
- package/dist/types/runtime/filter.d.ts +96 -0
- package/dist/types/runtime/filter.d.ts.map +1 -0
- package/dist/types/runtime/fragments.d.ts +30 -0
- package/dist/types/runtime/fragments.d.ts.map +1 -0
- package/dist/types/runtime/historical.d.ts +123 -0
- package/dist/types/runtime/historical.d.ts.map +1 -0
- package/dist/types/runtime/index.d.ts +89 -0
- package/dist/types/runtime/index.d.ts.map +1 -0
- package/dist/types/runtime/init.d.ts +28 -0
- package/dist/types/runtime/init.d.ts.map +1 -0
- package/dist/types/runtime/isolated.d.ts +14 -0
- package/dist/types/runtime/isolated.d.ts.map +1 -0
- package/dist/types/runtime/multichain.d.ts +13 -0
- package/dist/types/runtime/multichain.d.ts.map +1 -0
- package/dist/types/runtime/omnichain.d.ts +23 -0
- package/dist/types/runtime/omnichain.d.ts.map +1 -0
- package/dist/types/runtime/realtime.d.ts +93 -0
- package/dist/types/runtime/realtime.d.ts.map +1 -0
- package/dist/types/server/error.d.ts +5 -0
- package/dist/types/server/error.d.ts.map +1 -0
- package/dist/types/server/index.d.ts +13 -0
- package/dist/types/server/index.d.ts.map +1 -0
- package/dist/types/sync-historical/index.d.ts +36 -0
- package/dist/types/sync-historical/index.d.ts.map +1 -0
- package/dist/types/sync-realtime/bloom.d.ts +18 -0
- package/dist/types/sync-realtime/bloom.d.ts.map +1 -0
- package/dist/types/sync-realtime/index.d.ts +48 -0
- package/dist/types/sync-realtime/index.d.ts.map +1 -0
- package/dist/types/sync-store/encode.d.ts +25 -0
- package/dist/types/sync-store/encode.d.ts.map +1 -0
- package/dist/types/sync-store/index.d.ts +135 -0
- package/dist/types/sync-store/index.d.ts.map +1 -0
- package/dist/types/sync-store/migrations.d.ts +8 -0
- package/dist/types/sync-store/migrations.d.ts.map +1 -0
- package/dist/types/sync-store/schema.d.ts +1828 -0
- package/dist/types/sync-store/schema.d.ts.map +1 -0
- package/dist/types/types/db.d.ts +213 -0
- package/dist/types/types/db.d.ts.map +1 -0
- package/dist/types/types/eth.d.ts +196 -0
- package/dist/types/types/eth.d.ts.map +1 -0
- package/dist/types/types/utils.d.ts +38 -0
- package/dist/types/types/utils.d.ts.map +1 -0
- package/dist/types/types/virtual.d.ts +99 -0
- package/dist/types/types/virtual.d.ts.map +1 -0
- package/dist/types/ui/app.d.ts +22 -0
- package/dist/types/ui/app.d.ts.map +1 -0
- package/dist/types/ui/index.d.ts +5 -0
- package/dist/types/ui/index.d.ts.map +1 -0
- package/dist/types/ui/patch.d.ts +7 -0
- package/dist/types/ui/patch.d.ts.map +1 -0
- package/dist/types/utils/abi.d.ts +23 -0
- package/dist/types/utils/abi.d.ts.map +1 -0
- package/dist/types/utils/bigint.d.ts +15 -0
- package/dist/types/utils/bigint.d.ts.map +1 -0
- package/dist/types/utils/chains.d.ts +42 -0
- package/dist/types/utils/chains.d.ts.map +1 -0
- package/dist/types/utils/checkpoint.d.ts +52 -0
- package/dist/types/utils/checkpoint.d.ts.map +1 -0
- package/dist/types/utils/chunk.d.ts +2 -0
- package/dist/types/utils/chunk.d.ts.map +1 -0
- package/dist/types/utils/copy.d.ts +16 -0
- package/dist/types/utils/copy.d.ts.map +1 -0
- package/dist/types/utils/date.d.ts +7 -0
- package/dist/types/utils/date.d.ts.map +1 -0
- package/dist/types/utils/debug.d.ts +105 -0
- package/dist/types/utils/debug.d.ts.map +1 -0
- package/dist/types/utils/decodeAbiParameters.d.ts +28 -0
- package/dist/types/utils/decodeAbiParameters.d.ts.map +1 -0
- package/dist/types/utils/decodeEventLog.d.ts +12 -0
- package/dist/types/utils/decodeEventLog.d.ts.map +1 -0
- package/dist/types/utils/dedupe.d.ts +20 -0
- package/dist/types/utils/dedupe.d.ts.map +1 -0
- package/dist/types/utils/duplicates.d.ts +7 -0
- package/dist/types/utils/duplicates.d.ts.map +1 -0
- package/dist/types/utils/estimate.d.ts +11 -0
- package/dist/types/utils/estimate.d.ts.map +1 -0
- package/dist/types/utils/finality.d.ts +12 -0
- package/dist/types/utils/finality.d.ts.map +1 -0
- package/dist/types/utils/format.d.ts +3 -0
- package/dist/types/utils/format.d.ts.map +1 -0
- package/dist/types/utils/generators.d.ts +42 -0
- package/dist/types/utils/generators.d.ts.map +1 -0
- package/dist/types/utils/hash.d.ts +11 -0
- package/dist/types/utils/hash.d.ts.map +1 -0
- package/dist/types/utils/interval.d.ts +53 -0
- package/dist/types/utils/interval.d.ts.map +1 -0
- package/dist/types/utils/lowercase.d.ts +5 -0
- package/dist/types/utils/lowercase.d.ts.map +1 -0
- package/dist/types/utils/mutex.d.ts +5 -0
- package/dist/types/utils/mutex.d.ts.map +1 -0
- package/dist/types/utils/never.d.ts +2 -0
- package/dist/types/utils/never.d.ts.map +1 -0
- package/dist/types/utils/offset.d.ts +8 -0
- package/dist/types/utils/offset.d.ts.map +1 -0
- package/dist/types/utils/order.d.ts +2 -0
- package/dist/types/utils/order.d.ts.map +1 -0
- package/dist/types/utils/partition.d.ts +22 -0
- package/dist/types/utils/partition.d.ts.map +1 -0
- package/dist/types/utils/pg.d.ts +8 -0
- package/dist/types/utils/pg.d.ts.map +1 -0
- package/dist/types/utils/pglite.d.ts +25 -0
- package/dist/types/utils/pglite.d.ts.map +1 -0
- package/dist/types/utils/port.d.ts +5 -0
- package/dist/types/utils/port.d.ts.map +1 -0
- package/dist/types/utils/print.d.ts +2 -0
- package/dist/types/utils/print.d.ts.map +1 -0
- package/dist/types/utils/promiseAllSettledWithThrow.d.ts +8 -0
- package/dist/types/utils/promiseAllSettledWithThrow.d.ts.map +1 -0
- package/dist/types/utils/promiseWithResolvers.d.ts +10 -0
- package/dist/types/utils/promiseWithResolvers.d.ts.map +1 -0
- package/dist/types/utils/queue.d.ts +33 -0
- package/dist/types/utils/queue.d.ts.map +1 -0
- package/dist/types/utils/range.d.ts +8 -0
- package/dist/types/utils/range.d.ts.map +1 -0
- package/dist/types/utils/result.d.ts +17 -0
- package/dist/types/utils/result.d.ts.map +1 -0
- package/dist/types/utils/sql-parse.d.ts +21 -0
- package/dist/types/utils/sql-parse.d.ts.map +1 -0
- package/dist/types/utils/timer.d.ts +6 -0
- package/dist/types/utils/timer.d.ts.map +1 -0
- package/dist/types/utils/truncate.d.ts +9 -0
- package/dist/types/utils/truncate.d.ts.map +1 -0
- package/dist/types/utils/wait.d.ts +6 -0
- package/dist/types/utils/wait.d.ts.map +1 -0
- package/dist/types/utils/zipper.d.ts +36 -0
- package/dist/types/utils/zipper.d.ts.map +1 -0
- package/package.json +114 -0
- package/src/bin/commands/codegen.ts +56 -0
- package/src/bin/commands/createViews.ts +318 -0
- package/src/bin/commands/dev.ts +490 -0
- package/src/bin/commands/list.ts +208 -0
- package/src/bin/commands/prune.ts +322 -0
- package/src/bin/commands/serve.ts +236 -0
- package/src/bin/commands/start.ts +319 -0
- package/src/bin/isolatedController.ts +300 -0
- package/src/bin/isolatedWorker.ts +192 -0
- package/src/bin/ponder.ts +208 -0
- package/src/bin/utils/codegen.ts +32 -0
- package/src/bin/utils/exit.ts +112 -0
- package/src/build/config.ts +1141 -0
- package/src/build/factory.ts +147 -0
- package/src/build/index.ts +790 -0
- package/src/build/plugin.ts +58 -0
- package/src/build/pre.ts +114 -0
- package/src/build/schema.ts +358 -0
- package/src/build/stacktrace.ts +137 -0
- package/src/client/index.ts +551 -0
- package/src/config/address.ts +45 -0
- package/src/config/eventFilter.ts +33 -0
- package/src/config/index.ts +240 -0
- package/src/config/utilityTypes.ts +152 -0
- package/src/database/actions.ts +873 -0
- package/src/database/index.ts +1029 -0
- package/src/database/queryBuilder.ts +537 -0
- package/src/drizzle/bigint.ts +57 -0
- package/src/drizzle/bytes.ts +68 -0
- package/src/drizzle/hex.ts +58 -0
- package/src/drizzle/index.ts +40 -0
- package/src/drizzle/json.ts +159 -0
- package/src/drizzle/kit/index.ts +1348 -0
- package/src/drizzle/onchain.ts +476 -0
- package/src/drizzle/text.ts +77 -0
- package/src/graphql/graphiql.html.ts +59 -0
- package/src/graphql/index.ts +1351 -0
- package/src/graphql/json.ts +62 -0
- package/src/graphql/middleware.ts +115 -0
- package/src/index.ts +139 -0
- package/src/indexing/addStackTrace.ts +69 -0
- package/src/indexing/client.ts +1184 -0
- package/src/indexing/index.ts +976 -0
- package/src/indexing/profile.ts +771 -0
- package/src/indexing-store/cache.ts +1057 -0
- package/src/indexing-store/index.ts +628 -0
- package/src/indexing-store/profile.ts +557 -0
- package/src/indexing-store/utils.ts +162 -0
- package/src/internal/common.ts +15 -0
- package/src/internal/errors.ts +228 -0
- package/src/internal/logger.ts +252 -0
- package/src/internal/metrics.ts +1030 -0
- package/src/internal/options.ts +130 -0
- package/src/internal/shutdown.ts +32 -0
- package/src/internal/telemetry.ts +303 -0
- package/src/internal/types.ts +611 -0
- package/src/rpc/actions.ts +1344 -0
- package/src/rpc/http.ts +164 -0
- package/src/rpc/index.ts +959 -0
- package/src/runtime/events.ts +875 -0
- package/src/runtime/filter.ts +705 -0
- package/src/runtime/fragments.ts +674 -0
- package/src/runtime/historical.ts +1522 -0
- package/src/runtime/index.ts +569 -0
- package/src/runtime/init.ts +49 -0
- package/src/runtime/isolated.ts +775 -0
- package/src/runtime/multichain.ts +860 -0
- package/src/runtime/omnichain.ts +920 -0
- package/src/runtime/realtime.ts +1164 -0
- package/src/server/error.ts +68 -0
- package/src/server/index.ts +173 -0
- package/src/sync-historical/index.ts +1065 -0
- package/src/sync-realtime/bloom.ts +102 -0
- package/src/sync-realtime/index.ts +1304 -0
- package/src/sync-store/encode.ts +153 -0
- package/src/sync-store/index.ts +1633 -0
- package/src/sync-store/migrations.ts +1801 -0
- package/src/sync-store/schema.ts +248 -0
- package/src/types/db.ts +292 -0
- package/src/types/eth.ts +216 -0
- package/src/types/utils.ts +47 -0
- package/src/types/virtual.ts +244 -0
- package/src/types.d.ts +38 -0
- package/src/ui/app.ts +207 -0
- package/src/ui/index.ts +37 -0
- package/src/ui/patch.ts +204 -0
- package/src/utils/abi.ts +103 -0
- package/src/utils/bigint.ts +41 -0
- package/src/utils/chains.ts +22 -0
- package/src/utils/checkpoint.ts +203 -0
- package/src/utils/chunk.ts +7 -0
- package/src/utils/copy.ts +151 -0
- package/src/utils/date.ts +26 -0
- package/src/utils/debug.ts +110 -0
- package/src/utils/decodeAbiParameters.ts +428 -0
- package/src/utils/decodeEventLog.ts +100 -0
- package/src/utils/dedupe.ts +32 -0
- package/src/utils/duplicates.ts +19 -0
- package/src/utils/estimate.ts +27 -0
- package/src/utils/finality.ts +40 -0
- package/src/utils/format.ts +22 -0
- package/src/utils/generators.ts +157 -0
- package/src/utils/hash.ts +22 -0
- package/src/utils/interval.ts +212 -0
- package/src/utils/lowercase.ts +6 -0
- package/src/utils/mutex.ts +33 -0
- package/src/utils/never.ts +3 -0
- package/src/utils/offset.ts +133 -0
- package/src/utils/order.ts +16 -0
- package/src/utils/partition.ts +53 -0
- package/src/utils/pg.ts +230 -0
- package/src/utils/pglite.ts +97 -0
- package/src/utils/port.ts +34 -0
- package/src/utils/print.ts +31 -0
- package/src/utils/promiseAllSettledWithThrow.ts +27 -0
- package/src/utils/promiseWithResolvers.ts +20 -0
- package/src/utils/queue.ts +258 -0
- package/src/utils/range.ts +8 -0
- package/src/utils/result.ts +26 -0
- package/src/utils/sql-parse.ts +1477 -0
- package/src/utils/timer.ts +8 -0
- package/src/utils/truncate.ts +15 -0
- package/src/utils/wait.ts +8 -0
- package/src/utils/zipper.ts +80 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { promiseWithResolvers } from "@/utils/promiseWithResolvers.js";
|
|
2
|
+
import { startClock } from "./timer.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Merges multiple async generators into a single async generator.
|
|
6
|
+
*
|
|
7
|
+
* @param generators - The generators to merge.
|
|
8
|
+
* @returns A single async generator that yields results from all input generators.
|
|
9
|
+
*/
|
|
10
|
+
export async function* mergeAsyncGenerators<T>(
|
|
11
|
+
generators: AsyncGenerator<T>[],
|
|
12
|
+
): AsyncGenerator<T> {
|
|
13
|
+
const promises = generators.map((gen) => gen.next());
|
|
14
|
+
|
|
15
|
+
while (promises.length > 0) {
|
|
16
|
+
const wrappedPromises = promises.map((promise, index) =>
|
|
17
|
+
promise.then((result) => ({ index, result })),
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
const { result, index } = await Promise.race(wrappedPromises);
|
|
21
|
+
|
|
22
|
+
if (result.done) {
|
|
23
|
+
generators.splice(index, 1);
|
|
24
|
+
promises.splice(index, 1);
|
|
25
|
+
} else {
|
|
26
|
+
const generator = generators[index]!;
|
|
27
|
+
const promise = generator.next();
|
|
28
|
+
|
|
29
|
+
promises.splice(index, 1);
|
|
30
|
+
generators.splice(index, 1);
|
|
31
|
+
|
|
32
|
+
generators.push(generator);
|
|
33
|
+
promises.push(promise);
|
|
34
|
+
|
|
35
|
+
yield result.value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Buffers the results of an async generator.
|
|
42
|
+
*
|
|
43
|
+
* @param generator - The generator to buffer.
|
|
44
|
+
* @param size - The size of the buffer.
|
|
45
|
+
* @returns An async generator that yields results from the input generator.
|
|
46
|
+
*/
|
|
47
|
+
export async function* bufferAsyncGenerator<T>(
|
|
48
|
+
generator: AsyncGenerator<T>,
|
|
49
|
+
size: number,
|
|
50
|
+
bufferCallback?: (bufferSize: number) => void,
|
|
51
|
+
): AsyncGenerator<T> {
|
|
52
|
+
const buffer: T[] = [];
|
|
53
|
+
let done = false;
|
|
54
|
+
|
|
55
|
+
let pwr1 = promiseWithResolvers<void>();
|
|
56
|
+
let pwr2 = promiseWithResolvers<void>();
|
|
57
|
+
|
|
58
|
+
(async () => {
|
|
59
|
+
for await (const result of generator) {
|
|
60
|
+
buffer.push(result);
|
|
61
|
+
|
|
62
|
+
bufferCallback?.(buffer.length);
|
|
63
|
+
|
|
64
|
+
pwr1.resolve();
|
|
65
|
+
|
|
66
|
+
if (buffer.length >= size) await pwr2.promise;
|
|
67
|
+
pwr2 = promiseWithResolvers<void>();
|
|
68
|
+
}
|
|
69
|
+
done = true;
|
|
70
|
+
pwr1.resolve();
|
|
71
|
+
})();
|
|
72
|
+
|
|
73
|
+
while (done === false || buffer.length > 0) {
|
|
74
|
+
if (buffer.length > 0) {
|
|
75
|
+
pwr2.resolve();
|
|
76
|
+
|
|
77
|
+
yield buffer.shift()!;
|
|
78
|
+
} else {
|
|
79
|
+
await pwr1.promise;
|
|
80
|
+
pwr1 = promiseWithResolvers<void>();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Drains an async generator into an array.
|
|
87
|
+
*
|
|
88
|
+
* @param asyncGenerator - The async generator to drain.
|
|
89
|
+
* @returns An array of results from the input generator.
|
|
90
|
+
*/
|
|
91
|
+
export async function drainAsyncGenerator<T>(
|
|
92
|
+
asyncGenerator: AsyncGenerator<T>,
|
|
93
|
+
): Promise<T[]> {
|
|
94
|
+
const result: T[] = [];
|
|
95
|
+
|
|
96
|
+
for await (const events of asyncGenerator) {
|
|
97
|
+
result.push(events);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Records the total time taken to yield results from an async generator.
|
|
105
|
+
*
|
|
106
|
+
* @param asyncGenerator - The async generator to record.
|
|
107
|
+
* @param callback - A callback function that receives duration metrics.
|
|
108
|
+
* @returns An async generator that yields results from the input generator.
|
|
109
|
+
*/
|
|
110
|
+
export async function* recordAsyncGenerator<T>(
|
|
111
|
+
asyncGenerator: AsyncGenerator<T>,
|
|
112
|
+
callback: (params: { await: number; yield: number; total: number }) => void,
|
|
113
|
+
): AsyncGenerator<T> {
|
|
114
|
+
let endClockTotal = startClock();
|
|
115
|
+
for await (const result of asyncGenerator) {
|
|
116
|
+
const endClockInner = startClock();
|
|
117
|
+
yield result;
|
|
118
|
+
callback({
|
|
119
|
+
await: endClockTotal() - endClockInner(),
|
|
120
|
+
yield: endClockInner(),
|
|
121
|
+
total: endClockTotal(),
|
|
122
|
+
});
|
|
123
|
+
endClockTotal = startClock();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Creates an async generator that yields values from a callback.
|
|
129
|
+
*/
|
|
130
|
+
export function createCallbackGenerator<T>(
|
|
131
|
+
bufferCallback?: (bufferSize: number) => void,
|
|
132
|
+
): {
|
|
133
|
+
callback: (value: T) => void;
|
|
134
|
+
generator: AsyncGenerator<T, void, unknown>;
|
|
135
|
+
} {
|
|
136
|
+
const buffer: T[] = [];
|
|
137
|
+
let pwr = promiseWithResolvers<void>();
|
|
138
|
+
|
|
139
|
+
const callback = (value: T) => {
|
|
140
|
+
buffer.push(value);
|
|
141
|
+
bufferCallback?.(buffer.length);
|
|
142
|
+
pwr.resolve();
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
async function* generator() {
|
|
146
|
+
while (true) {
|
|
147
|
+
if (buffer.length > 0) {
|
|
148
|
+
yield buffer.shift()!;
|
|
149
|
+
} else {
|
|
150
|
+
await pwr.promise;
|
|
151
|
+
pwr = promiseWithResolvers<void>();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return { callback, generator: generator() };
|
|
157
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
// Adapted from https://stackoverflow.com/questions/77336994/stronger-type-for-value-in-json-stringifyvalue-any
|
|
4
|
+
type JSONSerializable =
|
|
5
|
+
| string
|
|
6
|
+
| number
|
|
7
|
+
| boolean
|
|
8
|
+
| null
|
|
9
|
+
| JSONObject
|
|
10
|
+
| JSONArray;
|
|
11
|
+
type JSONObject = { [key: string]: JSONSerializable };
|
|
12
|
+
type JSONArray = Array<JSONSerializable>;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Generates a 10-character hexadecimal hash of a JSON-serializable value.
|
|
16
|
+
*/
|
|
17
|
+
export function hash(value: JSONSerializable): string {
|
|
18
|
+
return createHash("sha256")
|
|
19
|
+
.update(JSON.stringify(value))
|
|
20
|
+
.digest("hex")
|
|
21
|
+
.slice(0, 10);
|
|
22
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { range } from "./range.js";
|
|
2
|
+
|
|
3
|
+
export type Interval = [number, number];
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Return the total sum of a list of numeric intervals.
|
|
7
|
+
*
|
|
8
|
+
* @param intervals List of numeric intervals to find the sum of.
|
|
9
|
+
* @returns Sum of the intervals.
|
|
10
|
+
*/
|
|
11
|
+
export function intervalSum(intervals: Interval[]) {
|
|
12
|
+
let totalSum = 0;
|
|
13
|
+
|
|
14
|
+
for (const [start, end] of intervals) {
|
|
15
|
+
totalSum += end - start + 1;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return totalSum;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Return the union of a list of numeric intervals.
|
|
23
|
+
*
|
|
24
|
+
* @param intervals List of numeric intervals to find the union of.
|
|
25
|
+
* @returns Union of the intervals, represented as a list of intervals.
|
|
26
|
+
*/
|
|
27
|
+
export function intervalUnion(intervals_: Interval[]) {
|
|
28
|
+
if (intervals_.length === 0) return [];
|
|
29
|
+
|
|
30
|
+
// Create copies to avoid mutating the originals.
|
|
31
|
+
const intervals = intervals_.map((interval) => [...interval] as Interval);
|
|
32
|
+
// Sort intervals based on the left end.
|
|
33
|
+
intervals.sort((a, b) => a[0] - b[0]);
|
|
34
|
+
|
|
35
|
+
const result: Interval[] = [];
|
|
36
|
+
let currentInterval = intervals[0]!;
|
|
37
|
+
|
|
38
|
+
for (let i = 1; i < intervals.length; i++) {
|
|
39
|
+
const nextInterval = intervals[i]!;
|
|
40
|
+
|
|
41
|
+
if (currentInterval[1] >= nextInterval[0] - 1) {
|
|
42
|
+
// Merge overlapping intervals
|
|
43
|
+
currentInterval[1] = Math.max(currentInterval[1], nextInterval[1]);
|
|
44
|
+
} else {
|
|
45
|
+
// No overlap, add current interval to result
|
|
46
|
+
result.push(currentInterval);
|
|
47
|
+
currentInterval = nextInterval;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
result.push(currentInterval); // Add the last interval
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Return the intersection of two lists of numeric intervals.
|
|
57
|
+
*
|
|
58
|
+
* @param list1 First list of numeric intervals.
|
|
59
|
+
* @param list2 Second list of numeric intervals.
|
|
60
|
+
* @returns Intersection of the intervals, represented as a list of intervals.
|
|
61
|
+
*/
|
|
62
|
+
export function intervalIntersection(
|
|
63
|
+
list1: Interval[],
|
|
64
|
+
list2: Interval[],
|
|
65
|
+
): Interval[] {
|
|
66
|
+
const result: Interval[] = [];
|
|
67
|
+
let i = 0;
|
|
68
|
+
let j = 0;
|
|
69
|
+
|
|
70
|
+
while (i < list1.length && j < list2.length) {
|
|
71
|
+
const [start1, end1] = list1[i]!;
|
|
72
|
+
const [start2, end2] = list2[j]!;
|
|
73
|
+
|
|
74
|
+
const intersectionStart = Math.max(start1, start2);
|
|
75
|
+
const intersectionEnd = Math.min(end1, end2);
|
|
76
|
+
|
|
77
|
+
if (intersectionStart <= intersectionEnd) {
|
|
78
|
+
result.push([intersectionStart, intersectionEnd]);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (end1 < end2) {
|
|
82
|
+
i++;
|
|
83
|
+
} else {
|
|
84
|
+
j++;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Merge potentially overlapping intervals before returning.
|
|
89
|
+
return intervalUnion(result);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Return the intersection of many lists of numeric intervals.
|
|
94
|
+
*
|
|
95
|
+
* @param list1 First list of numeric intervals.
|
|
96
|
+
* @param list2 Second list of numeric intervals.
|
|
97
|
+
* @returns Intersection of the intervals, represented as a list of intervals.
|
|
98
|
+
*/
|
|
99
|
+
export function intervalIntersectionMany(lists: Interval[][]): Interval[] {
|
|
100
|
+
if (lists.length === 0) return [];
|
|
101
|
+
if (lists.length === 1) return lists[0]!;
|
|
102
|
+
|
|
103
|
+
let result: Interval[] = lists[0]!;
|
|
104
|
+
|
|
105
|
+
for (let i = 1; i < lists.length; i++) {
|
|
106
|
+
result = intervalIntersection(result, lists[i]!);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return intervalUnion(result);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Return the difference between two lists of numeric intervals (initial - remove).
|
|
114
|
+
*
|
|
115
|
+
* @param initial Starting/base list of numeric intervals.
|
|
116
|
+
* @param remove List of numeric intervals to remove.
|
|
117
|
+
* @returns Difference of the intervals, represented as a list of intervals.
|
|
118
|
+
*/
|
|
119
|
+
export function intervalDifference(
|
|
120
|
+
initial: Interval[],
|
|
121
|
+
remove: Interval[],
|
|
122
|
+
): Interval[] {
|
|
123
|
+
// Create copies to avoid mutating the originals.
|
|
124
|
+
const initial_ = initial.map((interval) => [...interval] as Interval);
|
|
125
|
+
const remove_ = remove.map((interval) => [...interval] as Interval);
|
|
126
|
+
|
|
127
|
+
const result: Interval[] = [];
|
|
128
|
+
|
|
129
|
+
let i = 0;
|
|
130
|
+
let j = 0;
|
|
131
|
+
|
|
132
|
+
while (i < initial.length && j < remove.length) {
|
|
133
|
+
const interval1 = initial_[i]!;
|
|
134
|
+
const interval2 = remove_[j]!;
|
|
135
|
+
|
|
136
|
+
if (interval1[1] < interval2[0]) {
|
|
137
|
+
// No overlap, add interval1 to the result
|
|
138
|
+
result.push(interval1);
|
|
139
|
+
i++;
|
|
140
|
+
} else if (interval2[1] < interval1[0]) {
|
|
141
|
+
// No overlap, move to the next interval in remove
|
|
142
|
+
j++;
|
|
143
|
+
} else {
|
|
144
|
+
// There is an overlap
|
|
145
|
+
if (interval1[0] < interval2[0]) {
|
|
146
|
+
// Add the left part of interval1
|
|
147
|
+
result.push([interval1[0], interval2[0] - 1]);
|
|
148
|
+
}
|
|
149
|
+
if (interval1[1] > interval2[1]) {
|
|
150
|
+
// Update interval1's start to exclude the overlap
|
|
151
|
+
interval1[0] = interval2[1] + 1;
|
|
152
|
+
j++;
|
|
153
|
+
} else {
|
|
154
|
+
// No more overlap, move to the next interval in initial
|
|
155
|
+
i++;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Add any remaining intervals from initial
|
|
161
|
+
while (i < initial_.length) {
|
|
162
|
+
result.push(initial_[i]!);
|
|
163
|
+
i++;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Return an interval that encompasses all the intervals in the list.
|
|
171
|
+
*
|
|
172
|
+
* @param intervals List of numeric intervals to find the bounds of.
|
|
173
|
+
* @returns Bounds of the intervals.
|
|
174
|
+
*/
|
|
175
|
+
export function intervalBounds(intervals: Interval[]): Interval {
|
|
176
|
+
const start = Math.min(...intervals.map((interval) => interval[0]));
|
|
177
|
+
const end = Math.max(...intervals.map((interval) => interval[1]));
|
|
178
|
+
|
|
179
|
+
return [start, end];
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export function sortIntervals(intervals: Interval[]) {
|
|
183
|
+
return intervals.sort((a, b) => (a[0] < b[0] ? -1 : 1));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export function getChunks({
|
|
187
|
+
interval,
|
|
188
|
+
maxChunkSize,
|
|
189
|
+
}: {
|
|
190
|
+
interval: Interval;
|
|
191
|
+
maxChunkSize: number;
|
|
192
|
+
}) {
|
|
193
|
+
const _chunks: Interval[] = [];
|
|
194
|
+
|
|
195
|
+
const [startBlock, endBlock] = interval;
|
|
196
|
+
|
|
197
|
+
let fromBlock = startBlock;
|
|
198
|
+
let toBlock = Math.min(fromBlock + maxChunkSize - 1, endBlock);
|
|
199
|
+
|
|
200
|
+
while (fromBlock <= endBlock) {
|
|
201
|
+
_chunks.push([fromBlock, toBlock]);
|
|
202
|
+
|
|
203
|
+
fromBlock = toBlock + 1;
|
|
204
|
+
toBlock = Math.min(fromBlock + maxChunkSize - 1, endBlock);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return _chunks;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export function intervalRange(interval: Interval) {
|
|
211
|
+
return range(interval[0], interval[1] + 1);
|
|
212
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type PromiseWithResolvers,
|
|
3
|
+
promiseWithResolvers,
|
|
4
|
+
} from "./promiseWithResolvers.js";
|
|
5
|
+
|
|
6
|
+
export const createLock = (): {
|
|
7
|
+
lock: () => Promise<void>;
|
|
8
|
+
unlock: () => void;
|
|
9
|
+
} => {
|
|
10
|
+
const queue: PromiseWithResolvers<void>[] = [];
|
|
11
|
+
let locked = false;
|
|
12
|
+
|
|
13
|
+
return {
|
|
14
|
+
lock: async () => {
|
|
15
|
+
if (locked === false) {
|
|
16
|
+
locked = true;
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const pwr = promiseWithResolvers<void>();
|
|
21
|
+
queue.push(pwr);
|
|
22
|
+
return pwr.promise;
|
|
23
|
+
},
|
|
24
|
+
unlock: () => {
|
|
25
|
+
if (queue.length > 0) {
|
|
26
|
+
const pwr = queue.shift()!;
|
|
27
|
+
pwr.resolve();
|
|
28
|
+
} else {
|
|
29
|
+
locked = false;
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { AbiParameter } from "abitype";
|
|
2
|
+
import { InvalidAbiDecodingTypeError } from "viem";
|
|
3
|
+
|
|
4
|
+
// Adapted from viem.
|
|
5
|
+
// https://github.com/wagmi-dev/viem/blob/5c95fafceffe7f399b5b5ee32119e2d78a0c8acd/src/utils/abi/decodeEventLog.ts
|
|
6
|
+
|
|
7
|
+
export function getBytesConsumedByParam(param: AbiParameter): number {
|
|
8
|
+
const arrayComponents = getArrayComponents(param.type);
|
|
9
|
+
if (arrayComponents) {
|
|
10
|
+
const [length, innerType] = arrayComponents;
|
|
11
|
+
|
|
12
|
+
// If the array is dynamic or has dynamic children, it uses the
|
|
13
|
+
// dynamic encoding scheme (32 byte header).
|
|
14
|
+
if (!length || hasDynamicChild(param)) {
|
|
15
|
+
return 32;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// If the length of the array is known in advance,
|
|
19
|
+
// and the length of each element in the array is known,
|
|
20
|
+
// the array data is encoded contiguously after the array.
|
|
21
|
+
const bytesConsumedByInnerType = getBytesConsumedByParam({
|
|
22
|
+
...param,
|
|
23
|
+
type: innerType,
|
|
24
|
+
});
|
|
25
|
+
return length * bytesConsumedByInnerType;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (param.type === "tuple") {
|
|
29
|
+
// If the tuple has dynamic children, it uses the dynamic encoding
|
|
30
|
+
// scheme (32 byte header).
|
|
31
|
+
if (hasDynamicChild(param)) {
|
|
32
|
+
return 32;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Otherwise the tuple has static children, so we can just decode
|
|
36
|
+
// each component in sequence.
|
|
37
|
+
let consumed = 0;
|
|
38
|
+
for (const component of (param as any).components ?? []) {
|
|
39
|
+
consumed += getBytesConsumedByParam(component);
|
|
40
|
+
}
|
|
41
|
+
return consumed;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Otherwise, it's a dynamic string or bytes (32 bytes),
|
|
45
|
+
// or a static number, address, or bool (32 bytes).
|
|
46
|
+
if (
|
|
47
|
+
param.type === "string" ||
|
|
48
|
+
param.type.startsWith("bytes") ||
|
|
49
|
+
param.type.startsWith("uint") ||
|
|
50
|
+
param.type.startsWith("int") ||
|
|
51
|
+
param.type === "address" ||
|
|
52
|
+
param.type === "bool"
|
|
53
|
+
) {
|
|
54
|
+
return 32;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
throw new InvalidAbiDecodingTypeError(param.type, {
|
|
58
|
+
docsPath: "/docs/contract/decodeAbiParameters",
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export type TupleAbiParameter = AbiParameter & {
|
|
63
|
+
type: "tuple";
|
|
64
|
+
components: readonly AbiParameter[];
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export function getNestedParamOffset(
|
|
68
|
+
param: TupleAbiParameter,
|
|
69
|
+
names: string[],
|
|
70
|
+
): number {
|
|
71
|
+
let consumed = 0;
|
|
72
|
+
let isFound = false;
|
|
73
|
+
for (const component of param.components) {
|
|
74
|
+
if (component.name === names[0]) {
|
|
75
|
+
// the end of the branch
|
|
76
|
+
if (names.length === 1) {
|
|
77
|
+
isFound = true;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// additional nesting
|
|
82
|
+
if (component.type === "tuple") {
|
|
83
|
+
const nestedConsumed = getNestedParamOffset(
|
|
84
|
+
component as TupleAbiParameter,
|
|
85
|
+
names.slice(1),
|
|
86
|
+
);
|
|
87
|
+
return consumed + nestedConsumed;
|
|
88
|
+
} else {
|
|
89
|
+
throw new Error(
|
|
90
|
+
`Factory event parameter '${param.name}.${names.join(".")}' is not valid for ${param.name} struct signature.`,
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
} else {
|
|
94
|
+
consumed += getBytesConsumedByParam(component);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (!isFound) {
|
|
99
|
+
throw new Error(
|
|
100
|
+
`Factory event parameter '${param.name}.${names.join(".")}' not found in ${param.name} struct signature.`,
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return consumed;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function hasDynamicChild(param: AbiParameter) {
|
|
108
|
+
const { type } = param;
|
|
109
|
+
if (type === "string") return true;
|
|
110
|
+
if (type === "bytes") return true;
|
|
111
|
+
if (type.endsWith("[]")) return true;
|
|
112
|
+
|
|
113
|
+
if (type === "tuple") return (param as any).components?.some(hasDynamicChild);
|
|
114
|
+
|
|
115
|
+
const arrayComponents = getArrayComponents(param.type);
|
|
116
|
+
if (
|
|
117
|
+
arrayComponents &&
|
|
118
|
+
hasDynamicChild({ ...param, type: arrayComponents[1] } as AbiParameter)
|
|
119
|
+
)
|
|
120
|
+
return true;
|
|
121
|
+
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function getArrayComponents(
|
|
126
|
+
type: string,
|
|
127
|
+
): [length: number | null, innerType: string] | undefined {
|
|
128
|
+
const matches = type.match(/^(.*)\[(\d+)?\]$/);
|
|
129
|
+
return matches
|
|
130
|
+
? // Return `null` if the array is dynamic.
|
|
131
|
+
[matches[2] ? Number(matches[2]) : null, matches[1]!]
|
|
132
|
+
: undefined;
|
|
133
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const orderObject = (obj: any): any => {
|
|
2
|
+
if (Array.isArray(obj)) return obj.map((x) => orderObject(x));
|
|
3
|
+
if (typeof obj !== "object") return obj;
|
|
4
|
+
|
|
5
|
+
const newObj = {} as any;
|
|
6
|
+
for (const key of Object.keys(obj).sort()) {
|
|
7
|
+
const val = obj[key];
|
|
8
|
+
if (typeof val === "object") {
|
|
9
|
+
newObj[key] = orderObject(obj[key]);
|
|
10
|
+
} else {
|
|
11
|
+
newObj[key] = obj[key];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return newObj;
|
|
16
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Divides an array into two arrays, where the first array
|
|
3
|
+
* contains all elements that satisfy the predicate, and the
|
|
4
|
+
* second array contains all elements that do not satisfy the
|
|
5
|
+
* predicate.
|
|
6
|
+
*
|
|
7
|
+
* Note: It is assumed that the array monotonically goes from true to false.
|
|
8
|
+
*
|
|
9
|
+
* @param array - The array to partition.
|
|
10
|
+
* @param predicate - The predicate to partition the array by.
|
|
11
|
+
*
|
|
12
|
+
* @returns A tuple containing the left and right arrays.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const [left, right] = partition([1, 2, 3, 4, 5], (n) => n <= 2);
|
|
17
|
+
* // left = [1, 2]
|
|
18
|
+
* // right = [3, 4, 5]
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export const partition = <T>(
|
|
22
|
+
array: T[],
|
|
23
|
+
predicate: (item: T) => boolean,
|
|
24
|
+
): [T[], T[]] => {
|
|
25
|
+
if (array.length === 0) {
|
|
26
|
+
return [[], []];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (predicate(array[0]!) === false) {
|
|
30
|
+
return [[], array];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (predicate(array[array.length - 1]!)) {
|
|
34
|
+
return [array, []];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let low = 0;
|
|
38
|
+
let high = array.length;
|
|
39
|
+
|
|
40
|
+
while (low < high) {
|
|
41
|
+
const mid = Math.floor((low + high) / 2);
|
|
42
|
+
if (predicate(array[mid]!)) {
|
|
43
|
+
low = mid + 1;
|
|
44
|
+
} else {
|
|
45
|
+
high = mid;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const left = array.slice(0, low);
|
|
50
|
+
const right = array.slice(low);
|
|
51
|
+
|
|
52
|
+
return [left, right];
|
|
53
|
+
};
|