-
Notifications
You must be signed in to change notification settings - Fork 197
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(store-sync): add store sync package (#1075)
* feat(block-events-stream): add block events stream package * feat(store-sync): add store sync package * wip anvil test * Revert "wip anvil test" This reverts commit 1952a98. * accidentally left in a store refernence * Update packages/block-events-stream/src/createBlockEventsStream.ts Co-authored-by: alvarius <[email protected]> * make streams closeable I don't love this design * clean up * add log back in * move comments * refactor with just streams * add README with example * renamed * rename again and take in a tuple as input * fix scope * add TODO * add tests for grouping logs * wip rxjs tests * move fetchLogs to async generator, add tests * add block range tests * get rid of old approach * add note about timers * use concatMap instead of exhaustMap * update readme * feat(schema-type): add isDynamicAbiType (#1096) * update with new block events stream * missed a spot * refine types, move logging to debug * add test * wip config types * refactor as a list of storage operations * getting closer * config is already expanded * fix types * clean up * remove log * pass through log to storage operation * update test snapshot * Create eighty-tigers-argue.md --------- Co-authored-by: alvarius <[email protected]> Co-authored-by: alvrs <[email protected]>
- vite-plugin-mud@2.2.16
- vite-plugin-mud@2.2.15
- solhint-plugin-mud@2.2.16
- solhint-plugin-mud@2.2.15
- solhint-plugin-mud@2.2.14
- solhint-plugin-mud@2.2.13
- solhint-plugin-mud@2.2.12
- solhint-plugin-mud@2.2.11
- solhint-plugin-mud@2.2.10
- solhint-plugin-mud@2.2.9
- solhint-plugin-mud@2.2.8
- solhint-plugin-mud@2.2.7
- solhint-plugin-mud@2.2.6
- solhint-plugin-mud@2.2.5
- solhint-plugin-mud@2.2.4
- solhint-plugin-mud@2.2.3
- solhint-plugin-mud@2.2.2
- solhint-plugin-mud@2.2.1
- solhint-plugin-mud@2.2.0
- solhint-plugin-mud@2.1.1
- solhint-plugin-mud@2.1.0
- solhint-plugin-mud@2.0.12
- solhint-plugin-mud@2.0.11
- solhint-plugin-mud@2.0.10
- solhint-plugin-mud@2.0.7
- solhint-plugin-mud@2.0.6
- solhint-plugin-mud@2.0.5
- solhint-plugin-mud@2.0.4
- solhint-plugin-mud@2.0.3
- solhint-plugin-mud@2.0.1
- solhint-plugin-mud@2.0.0
- solhint-plugin-mud@2.0.0-next.18
- solhint-plugin-mud@2.0.0-next.17
- solhint-plugin-mud@2.0.0-next.15
- solhint-plugin-mud@2.0.0-next.14
- solhint-plugin-mud@2.0.0-next.13
- solhint-plugin-mud@2.0.0-next.12
- solhint-plugin-mud@2.0.0-next.10
- solhint-plugin-mud@2.0.0-next.9
- solhint-plugin-mud@2.0.0-next.8
- solhint-plugin-mud@2.0.0-next.7
- solhint-plugin-mud@2.0.0-next.6
- solhint-plugin-mud@2.0.0-next.5
- solhint-plugin-mud@2.0.0-next.4
- solhint-plugin-mud@2.0.0-next.3
- solhint-plugin-mud@2.0.0-next.2
- solhint-plugin-mud@2.0.0-next.1
- solhint-plugin-mud@2.0.0-next.0
- solhint-config-mud@2.2.16
- solhint-config-mud@2.2.15
- solhint-config-mud@2.2.14
- solhint-config-mud@2.2.13
- solhint-config-mud@2.2.12
- solhint-config-mud@2.2.11
- solhint-config-mud@2.2.10
- solhint-config-mud@2.2.9
- solhint-config-mud@2.2.8
- solhint-config-mud@2.2.7
- solhint-config-mud@2.2.6
- solhint-config-mud@2.2.5
- solhint-config-mud@2.2.4
- solhint-config-mud@2.2.3
- solhint-config-mud@2.2.2
- solhint-config-mud@2.2.1
- solhint-config-mud@2.2.0
- solhint-config-mud@2.1.1
- solhint-config-mud@2.1.0
- solhint-config-mud@2.0.12
- solhint-config-mud@2.0.11
- solhint-config-mud@2.0.10
- solhint-config-mud@2.0.7
- solhint-config-mud@2.0.6
- solhint-config-mud@2.0.5
- solhint-config-mud@2.0.4
- solhint-config-mud@2.0.3
- solhint-config-mud@2.0.1
- solhint-config-mud@2.0.0
- solhint-config-mud@2.0.0-next.18
- solhint-config-mud@2.0.0-next.17
- solhint-config-mud@2.0.0-next.15
- solhint-config-mud@2.0.0-next.14
- solhint-config-mud@2.0.0-next.13
- solhint-config-mud@2.0.0-next.12
- solhint-config-mud@2.0.0-next.10
- solhint-config-mud@2.0.0-next.9
- solhint-config-mud@2.0.0-next.8
- solhint-config-mud@2.0.0-next.7
- solhint-config-mud@2.0.0-next.6
- solhint-config-mud@2.0.0-next.5
- solhint-config-mud@2.0.0-next.4
- solhint-config-mud@2.0.0-next.3
- solhint-config-mud@2.0.0-next.2
- solhint-config-mud@2.0.0-next.1
- solhint-config-mud@2.0.0-next.0
- @latticexyz/world-modules@2.2.16
- @latticexyz/world-modules@2.2.15
- @latticexyz/world-modules@2.2.14
- @latticexyz/world-modules@2.2.13
- @latticexyz/world-modules@2.2.12
- @latticexyz/world-modules@2.2.11
- @latticexyz/world-modules@2.2.10
- @latticexyz/world-modules@2.2.9
- @latticexyz/world-modules@2.2.8
- @latticexyz/world-modules@2.2.7
- @latticexyz/world-modules@2.2.6
- @latticexyz/world-modules@2.2.5
- @latticexyz/world-modules@2.2.4
- @latticexyz/world-modules@2.2.3
- @latticexyz/world-modules@2.2.2
- @latticexyz/world-modules@2.2.1
- @latticexyz/world-modules@2.2.0
- @latticexyz/world-modules@2.1.1
- @latticexyz/world-modules@2.1.0
- @latticexyz/world-modules@2.0.12
- @latticexyz/world-modules@2.0.11
- @latticexyz/world-modules@2.0.10
- @latticexyz/world-modules@2.0.7
- @latticexyz/world-modules@2.0.6
- @latticexyz/world-modules@2.0.5
- @latticexyz/world-modules@2.0.4
- @latticexyz/world-modules@2.0.3
- @latticexyz/world-modules@2.0.1
- @latticexyz/world-modules@2.0.0
- @latticexyz/world-modules@2.0.0-next.18
- @latticexyz/world-modules@2.0.0-next.17
- @latticexyz/world-modules@2.0.0-next.15
- @latticexyz/world-modules@2.0.0-next.14
- @latticexyz/world-modules@2.0.0-next.13
- @latticexyz/world-modules@2.0.0-next.12
- @latticexyz/world-modules@2.0.0-next.10
- @latticexyz/world-modules@2.0.0-next.9
- @latticexyz/world-module-metadata@2.2.16
- @latticexyz/world-module-metadata@2.2.15
- @latticexyz/world-module-metadata@2.2.14
- @latticexyz/world-module-metadata@2.2.13
- @latticexyz/world-module-metadata@2.2.12
- @latticexyz/world-module-metadata@2.2.11
- @latticexyz/world-module-metadata@2.2.10
- @latticexyz/world-module-metadata@2.2.9
- @latticexyz/world-module-metadata@2.2.8
- @latticexyz/world-module-metadata@2.2.7
- @latticexyz/world-module-metadata@2.2.6
- @latticexyz/world-module-metadata@2.2.5
- @latticexyz/world-module-metadata@2.2.4
- @latticexyz/world-module-metadata@2.2.3
- @latticexyz/world-module-metadata@2.2.2
- @latticexyz/world-module-metadata@2.2.1
- @latticexyz/world-module-metadata@2.2.0
- @latticexyz/world-module-metadata@2.1.1
- @latticexyz/world-module-erc20@2.2.16
- @latticexyz/world-module-erc20@2.2.15
- @latticexyz/world-module-erc20@2.2.14
- @latticexyz/world-module-erc20@2.2.13
- @latticexyz/world@2.2.16
- @latticexyz/world@2.2.15
- @latticexyz/world@2.2.14
- @latticexyz/world@2.2.13
- @latticexyz/world@2.2.12
- @latticexyz/world@2.2.11
- @latticexyz/world@2.2.10
- @latticexyz/world@2.2.9
- @latticexyz/world@2.2.8
- @latticexyz/world@2.2.7
- @latticexyz/world@2.2.6
- @latticexyz/world@2.2.5
- @latticexyz/world@2.2.4
- @latticexyz/world@2.2.3
- @latticexyz/world@2.2.2
- @latticexyz/world@2.2.1
- @latticexyz/world@2.2.0
- @latticexyz/world@2.1.1
- @latticexyz/world@2.1.0
- @latticexyz/world@2.0.12
- @latticexyz/world@2.0.11
- @latticexyz/world@2.0.10
- @latticexyz/world@2.0.7
- @latticexyz/world@2.0.6
- @latticexyz/world@2.0.5
- @latticexyz/world@2.0.4
- @latticexyz/world@2.0.3
- @latticexyz/world@2.0.1
- @latticexyz/world@2.0.0
- @latticexyz/world@2.0.0-next.18
- @latticexyz/world@2.0.0-next.17
- @latticexyz/world@2.0.0-next.15
- @latticexyz/world@2.0.0-next.14
- @latticexyz/world@2.0.0-next.13
- @latticexyz/world@2.0.0-next.12
- @latticexyz/world@2.0.0-next.10
- @latticexyz/world@2.0.0-next.9
- @latticexyz/world@2.0.0-next.8
- @latticexyz/world@2.0.0-next.7
- @latticexyz/world@2.0.0-next.6
- @latticexyz/world@2.0.0-next.5
- @latticexyz/world@2.0.0-next.4
- @latticexyz/world@2.0.0-next.3
- @latticexyz/world@2.0.0-next.2
- @latticexyz/world@2.0.0-next.1
- @latticexyz/world@2.0.0-next.0
- @latticexyz/utils@2.2.16
- @latticexyz/utils@2.2.15
- @latticexyz/utils@2.2.14
- @latticexyz/utils@2.2.13
- @latticexyz/utils@2.2.12
- @latticexyz/utils@2.2.11
- @latticexyz/utils@2.2.10
- @latticexyz/utils@2.2.9
- @latticexyz/utils@2.2.8
- @latticexyz/utils@2.2.7
- @latticexyz/utils@2.2.6
- @latticexyz/utils@2.2.5
- @latticexyz/utils@2.2.4
- @latticexyz/utils@2.2.3
- @latticexyz/utils@2.2.2
- @latticexyz/utils@2.2.1
- @latticexyz/utils@2.2.0
- @latticexyz/utils@2.1.1
- @latticexyz/utils@2.1.0
- @latticexyz/utils@2.0.12
- @latticexyz/utils@2.0.11
- @latticexyz/utils@2.0.10
- @latticexyz/utils@2.0.7
- @latticexyz/utils@2.0.6
- @latticexyz/utils@2.0.5
- @latticexyz/utils@2.0.4
- @latticexyz/utils@2.0.3
- @latticexyz/utils@2.0.1
- @latticexyz/utils@2.0.0
- @latticexyz/utils@2.0.0-next.18
- @latticexyz/utils@2.0.0-next.17
- @latticexyz/utils@2.0.0-next.16
- @latticexyz/utils@2.0.0-next.15
- @latticexyz/utils@2.0.0-next.14
- @latticexyz/utils@2.0.0-next.13
- @latticexyz/utils@2.0.0-next.12
- @latticexyz/utils@2.0.0-next.10
- @latticexyz/utils@2.0.0-next.9
- @latticexyz/utils@2.0.0-next.8
- @latticexyz/utils@2.0.0-next.7
- @latticexyz/utils@2.0.0-next.6
- @latticexyz/utils@2.0.0-next.5
- @latticexyz/utils@2.0.0-next.4
- @latticexyz/utils@2.0.0-next.3
- @latticexyz/utils@2.0.0-next.2
- @latticexyz/utils@2.0.0-next.1
- @latticexyz/utils@2.0.0-next.0
- @latticexyz/store-sync@2.2.16
- @latticexyz/store-sync@2.2.15
- @latticexyz/store-sync@2.2.14
- @latticexyz/store-sync@2.2.13
- @latticexyz/store-sync@2.2.12
- @latticexyz/store-sync@2.2.11
- @latticexyz/store-sync@2.2.10
- @latticexyz/store-sync@2.2.9
- @latticexyz/store-sync@2.2.8
- @latticexyz/store-sync@2.2.7
- @latticexyz/store-sync@2.2.6
- @latticexyz/store-sync@2.2.5
- @latticexyz/store-sync@2.2.4
- @latticexyz/store-sync@2.2.3
- @latticexyz/store-sync@2.2.2
- @latticexyz/store-sync@2.2.1
- @latticexyz/store-sync@2.2.0
- @latticexyz/store-sync@2.1.1
- @latticexyz/store-sync@2.1.0
- @latticexyz/store-sync@2.0.12
- @latticexyz/store-sync@2.0.11
- @latticexyz/store-sync@2.0.10
- @latticexyz/store-sync@2.0.7
- @latticexyz/store-sync@2.0.6
- @latticexyz/store-sync@2.0.5
- @latticexyz/store-sync@2.0.4
- @latticexyz/store-sync@2.0.3
- @latticexyz/store-sync@2.0.1
- @latticexyz/store-sync@2.0.0
- @latticexyz/store-sync@2.0.0-next.18
- @latticexyz/store-sync@2.0.0-next.17
- @latticexyz/store-sync@2.0.0-next.16
- @latticexyz/store-sync@2.0.0-next.15
- @latticexyz/store-sync@2.0.0-next.14
- @latticexyz/store-sync@2.0.0-next.13
- @latticexyz/store-sync@2.0.0-next.12
- @latticexyz/store-sync@2.0.0-next.10
- @latticexyz/store-sync@2.0.0-next.9
- @latticexyz/store-sync@2.0.0-next.8
- @latticexyz/store-sync@2.0.0-next.7
- @latticexyz/store-sync@2.0.0-next.6
- @latticexyz/store-sync@2.0.0-next.5
- @latticexyz/store-sync@2.0.0-next.4
- @latticexyz/store-sync@2.0.0-next.3
- @latticexyz/store-sync@2.0.0-next.2
- @latticexyz/store-sync@2.0.0-next.1
- @latticexyz/store-sync@2.0.0-next.0
- @latticexyz/store-indexer@2.2.16
- @latticexyz/store-indexer@2.2.15
- @latticexyz/store-indexer@2.2.14
- @latticexyz/store-indexer@2.2.13
- @latticexyz/store-indexer@2.2.12
- @latticexyz/store-indexer@2.2.11
- @latticexyz/store-indexer@2.2.10
- @latticexyz/store-indexer@2.2.9
- @latticexyz/store-indexer@2.2.8
- @latticexyz/store-indexer@2.2.7
- @latticexyz/store-indexer@2.2.6
- @latticexyz/store-indexer@2.2.5
- @latticexyz/store-indexer@2.2.4
- @latticexyz/store-indexer@2.2.3
- @latticexyz/store-indexer@2.2.2
- @latticexyz/store-indexer@2.2.1
- @latticexyz/store-indexer@2.2.0
- @latticexyz/store-indexer@2.1.1
- @latticexyz/store-indexer@2.1.0
- @latticexyz/store-indexer@2.0.12
- @latticexyz/store-indexer@2.0.11
- @latticexyz/store-indexer@2.0.10
- @latticexyz/store-indexer@2.0.7
- @latticexyz/store-indexer@2.0.6
- @latticexyz/store-indexer@2.0.5
- @latticexyz/store-indexer@2.0.4
- @latticexyz/store-indexer@2.0.3
- @latticexyz/store-indexer@2.0.1
- @latticexyz/store-indexer@2.0.0
- @latticexyz/store-indexer@2.0.0-next.18
- @latticexyz/store-indexer@2.0.0-next.17
- @latticexyz/store-indexer@2.0.0-next.15
- @latticexyz/store-indexer@2.0.0-next.14
- @latticexyz/store-indexer@2.0.0-next.13
- @latticexyz/store-indexer@2.0.0-next.12
- @latticexyz/store-indexer@2.0.0-next.10
- @latticexyz/store-indexer@2.0.0-next.9
- @latticexyz/store-indexer@2.0.0-next.8
- @latticexyz/store-indexer@2.0.0-next.7
- @latticexyz/store-indexer@2.0.0-next.6
- @latticexyz/store-indexer@2.0.0-next.5
- @latticexyz/store-indexer@2.0.0-next.4
- @latticexyz/store-indexer@2.0.0-next.3
- @latticexyz/store-indexer@2.0.0-next.2
- @latticexyz/store-indexer@2.0.0-next.1
- @latticexyz/store-consumer@2.2.16
- @latticexyz/store-consumer@2.2.15
- @latticexyz/store-cache@2.0.0-next.3
- @latticexyz/store-cache@2.0.0-next.2
- @latticexyz/store-cache@2.0.0-next.1
- @latticexyz/store-cache@2.0.0-next.0
- @latticexyz/store@2.2.16
- @latticexyz/store@2.2.15
- @latticexyz/store@2.2.14
- @latticexyz/store@2.2.13
- @latticexyz/store@2.2.12
- @latticexyz/store@2.2.11
- @latticexyz/store@2.2.10
- @latticexyz/store@2.2.9
- @latticexyz/store@2.2.8
- @latticexyz/store@2.2.7
- @latticexyz/store@2.2.6
- @latticexyz/store@2.2.5
- @latticexyz/store@2.2.4
- @latticexyz/store@2.2.3
- @latticexyz/store@2.2.2
- @latticexyz/store@2.2.1
- @latticexyz/store@2.2.0
- @latticexyz/store@2.1.1
- @latticexyz/store@2.1.0
- @latticexyz/store@2.0.12
- @latticexyz/store@2.0.11
- @latticexyz/store@2.0.10
- @latticexyz/store@2.0.7
- @latticexyz/store@2.0.6
- @latticexyz/store@2.0.5
- @latticexyz/store@2.0.4
- @latticexyz/store@2.0.3
- @latticexyz/store@2.0.1
- @latticexyz/store@2.0.0
- @latticexyz/store@2.0.0-next.18
- @latticexyz/store@2.0.0-next.17
- @latticexyz/store@2.0.0-next.15
- @latticexyz/store@2.0.0-next.14
- @latticexyz/store@2.0.0-next.13
- @latticexyz/store@2.0.0-next.12
- @latticexyz/store@2.0.0-next.10
- @latticexyz/store@2.0.0-next.9
- @latticexyz/store@2.0.0-next.8
- @latticexyz/store@2.0.0-next.7
- @latticexyz/store@2.0.0-next.6
- @latticexyz/store@2.0.0-next.5
- @latticexyz/store@2.0.0-next.4
- @latticexyz/store@2.0.0-next.3
- @latticexyz/store@2.0.0-next.2
- @latticexyz/store@2.0.0-next.1
- @latticexyz/store@2.0.0-next.0
- @latticexyz/std-contracts@2.0.0-next.3
- @latticexyz/std-contracts@2.0.0-next.2
- @latticexyz/std-contracts@2.0.0-next.1
- @latticexyz/std-contracts@2.0.0-next.0
- @latticexyz/std-client@2.0.0-next.3
- @latticexyz/std-client@2.0.0-next.2
- @latticexyz/std-client@2.0.0-next.1
- @latticexyz/std-client@2.0.0-next.0
- @latticexyz/stash@2.2.16
- @latticexyz/stash@2.2.15
- @latticexyz/stash@2.2.14
- @latticexyz/stash@2.2.13
- @latticexyz/stash@2.2.12
- @latticexyz/stash@2.2.11
- @latticexyz/stash@2.2.10
- @latticexyz/stash@2.2.9
- @latticexyz/stash@2.2.8
- @latticexyz/stash@2.2.7
- @latticexyz/stash@2.2.6
- @latticexyz/solecs@2.0.0-next.3
- @latticexyz/solecs@2.0.0-next.2
- @latticexyz/solecs@2.0.0-next.1
- @latticexyz/solecs@2.0.0-next.0
- @latticexyz/services@2.0.7
- @latticexyz/services@2.0.6
- @latticexyz/services@2.0.5
- @latticexyz/services@2.0.4
- @latticexyz/services@2.0.3
- @latticexyz/services@2.0.1
- @latticexyz/services@2.0.0
- @latticexyz/services@2.0.0-next.18
- @latticexyz/services@2.0.0-next.17
- @latticexyz/services@2.0.0-next.15
- @latticexyz/services@2.0.0-next.14
- @latticexyz/services@2.0.0-next.13
- @latticexyz/services@2.0.0-next.12
- @latticexyz/services@2.0.0-next.10
- @latticexyz/services@2.0.0-next.9
- @latticexyz/services@2.0.0-next.8
- @latticexyz/services@2.0.0-next.7
- @latticexyz/services@2.0.0-next.6
- @latticexyz/services@2.0.0-next.5
- @latticexyz/services@2.0.0-next.4
- @latticexyz/services@2.0.0-next.3
- @latticexyz/services@2.0.0-next.2
- @latticexyz/services@2.0.0-next.1
- @latticexyz/services@2.0.0-next.0
- @latticexyz/schema-type@2.2.16
- @latticexyz/schema-type@2.2.15
- @latticexyz/schema-type@2.2.14
- @latticexyz/schema-type@2.2.13
- @latticexyz/schema-type@2.2.12
- @latticexyz/schema-type@2.2.11
- @latticexyz/schema-type@2.2.10
- @latticexyz/schema-type@2.2.9
- @latticexyz/schema-type@2.2.8
- @latticexyz/schema-type@2.2.7
- @latticexyz/schema-type@2.2.6
- @latticexyz/schema-type@2.2.5
- @latticexyz/schema-type@2.2.4
- @latticexyz/schema-type@2.2.3
- @latticexyz/schema-type@2.2.2
- @latticexyz/schema-type@2.2.1
- @latticexyz/schema-type@2.2.0
- @latticexyz/schema-type@2.1.1
- @latticexyz/schema-type@2.1.0
- @latticexyz/schema-type@2.0.12
- @latticexyz/schema-type@2.0.11
- @latticexyz/schema-type@2.0.10
- @latticexyz/schema-type@2.0.7
- @latticexyz/schema-type@2.0.6
- @latticexyz/schema-type@2.0.5
- @latticexyz/schema-type@2.0.4
- @latticexyz/schema-type@2.0.3
- @latticexyz/schema-type@2.0.1
- @latticexyz/schema-type@2.0.0
- @latticexyz/schema-type@2.0.0-next.18
- @latticexyz/schema-type@2.0.0-next.17
- @latticexyz/schema-type@2.0.0-next.15
- @latticexyz/schema-type@2.0.0-next.14
- @latticexyz/schema-type@2.0.0-next.13
- @latticexyz/schema-type@2.0.0-next.12
- @latticexyz/schema-type@2.0.0-next.10
- @latticexyz/schema-type@2.0.0-next.9
- @latticexyz/schema-type@2.0.0-next.8
- @latticexyz/schema-type@2.0.0-next.7
- @latticexyz/schema-type@2.0.0-next.6
- @latticexyz/schema-type@2.0.0-next.5
- @latticexyz/schema-type@2.0.0-next.4
- @latticexyz/schema-type@2.0.0-next.3
- @latticexyz/schema-type@2.0.0-next.2
- @latticexyz/schema-type@2.0.0-next.1
- @latticexyz/schema-type@2.0.0-next.0
- @latticexyz/recs@2.2.16
- @latticexyz/recs@2.2.15
- @latticexyz/recs@2.2.14
- @latticexyz/recs@2.2.13
- @latticexyz/recs@2.2.12
- @latticexyz/recs@2.2.11
- @latticexyz/recs@2.2.10
- @latticexyz/recs@2.2.9
- @latticexyz/recs@2.2.8
- @latticexyz/recs@2.2.7
- @latticexyz/recs@2.2.6
- @latticexyz/recs@2.2.5
- @latticexyz/recs@2.2.4
- @latticexyz/recs@2.2.3
- @latticexyz/recs@2.2.2
- @latticexyz/recs@2.2.1
- @latticexyz/recs@2.2.0
- @latticexyz/recs@2.1.1
- @latticexyz/recs@2.1.0
- @latticexyz/recs@2.0.12
- @latticexyz/recs@2.0.11
- @latticexyz/recs@2.0.10
- @latticexyz/recs@2.0.7
- @latticexyz/recs@2.0.6
- @latticexyz/recs@2.0.5
- @latticexyz/recs@2.0.4
- @latticexyz/recs@2.0.3
- @latticexyz/recs@2.0.1
- @latticexyz/recs@2.0.0
- @latticexyz/recs@2.0.0-next.18
- @latticexyz/recs@2.0.0-next.17
- @latticexyz/recs@2.0.0-next.15
- @latticexyz/recs@2.0.0-next.14
- @latticexyz/recs@2.0.0-next.13
- @latticexyz/recs@2.0.0-next.12
- @latticexyz/recs@2.0.0-next.10
- @latticexyz/recs@2.0.0-next.9
- @latticexyz/recs@2.0.0-next.8
- @latticexyz/recs@2.0.0-next.7
- @latticexyz/recs@2.0.0-next.6
- @latticexyz/recs@2.0.0-next.5
- @latticexyz/recs@2.0.0-next.4
- @latticexyz/recs@2.0.0-next.3
- @latticexyz/recs@2.0.0-next.2
- @latticexyz/recs@2.0.0-next.1
- @latticexyz/recs@2.0.0-next.0
- @latticexyz/react@2.2.16
- @latticexyz/react@2.2.15
- @latticexyz/react@2.2.14
- @latticexyz/react@2.2.13
- @latticexyz/react@2.2.12
- @latticexyz/react@2.2.11
- @latticexyz/react@2.2.10
- @latticexyz/react@2.2.9
- @latticexyz/react@2.2.8
- @latticexyz/react@2.2.7
- @latticexyz/react@2.2.6
- @latticexyz/react@2.2.5
- @latticexyz/react@2.2.4
- @latticexyz/react@2.2.3
- @latticexyz/react@2.2.2
- @latticexyz/react@2.2.1
- @latticexyz/react@2.2.0
- @latticexyz/react@2.1.1
- @latticexyz/react@2.1.0
- @latticexyz/react@2.0.12
- @latticexyz/react@2.0.11
- @latticexyz/react@2.0.10
- @latticexyz/react@2.0.7
- @latticexyz/react@2.0.6
- @latticexyz/react@2.0.5
- @latticexyz/react@2.0.4
- @latticexyz/react@2.0.3
- @latticexyz/react@2.0.1
- @latticexyz/react@2.0.0
- @latticexyz/react@2.0.0-next.18
- @latticexyz/react@2.0.0-next.17
- @latticexyz/react@2.0.0-next.15
- @latticexyz/react@2.0.0-next.14
- @latticexyz/react@2.0.0-next.13
- @latticexyz/react@2.0.0-next.12
- @latticexyz/react@2.0.0-next.10
- @latticexyz/react@2.0.0-next.9
- @latticexyz/react@2.0.0-next.8
- @latticexyz/react@2.0.0-next.7
- @latticexyz/react@2.0.0-next.6
- @latticexyz/react@2.0.0-next.5
- @latticexyz/react@2.0.0-next.4
- @latticexyz/react@2.0.0-next.3
- @latticexyz/react@2.0.0-next.2
- @latticexyz/react@2.0.0-next.1
- @latticexyz/react@2.0.0-next.0
- @latticexyz/query@2.2.2
- @latticexyz/query@2.2.1
- @latticexyz/query@2.2.0
- @latticexyz/query@2.1.1
- @latticexyz/query@2.1.0
- @latticexyz/query@2.0.12
- @latticexyz/query@2.0.11
- @latticexyz/query@2.0.10
- @latticexyz/query@2.0.7
- @latticexyz/query@2.0.6
- @latticexyz/query@2.0.5
- @latticexyz/query@2.0.4
- @latticexyz/query@2.0.3
- @latticexyz/query@2.0.1
- @latticexyz/query@2.0.0
- @latticexyz/query@2.0.0-next.18
- @latticexyz/protocol-parser@2.2.16
- @latticexyz/protocol-parser@2.2.15
- @latticexyz/protocol-parser@2.2.14
- @latticexyz/protocol-parser@2.2.13
- @latticexyz/protocol-parser@2.2.12
- @latticexyz/protocol-parser@2.2.11
- @latticexyz/protocol-parser@2.2.10
- @latticexyz/protocol-parser@2.2.9
- @latticexyz/protocol-parser@2.2.8
- @latticexyz/protocol-parser@2.2.7
- @latticexyz/protocol-parser@2.2.6
- @latticexyz/protocol-parser@2.2.5
- @latticexyz/protocol-parser@2.2.4
- @latticexyz/protocol-parser@2.2.3
- @latticexyz/protocol-parser@2.2.2
- @latticexyz/protocol-parser@2.2.1
- @latticexyz/protocol-parser@2.2.0
- @latticexyz/protocol-parser@2.1.1
- @latticexyz/protocol-parser@2.1.0
- @latticexyz/protocol-parser@2.0.12
- @latticexyz/protocol-parser@2.0.11
- @latticexyz/protocol-parser@2.0.10
- @latticexyz/protocol-parser@2.0.7
- @latticexyz/protocol-parser@2.0.6
- @latticexyz/protocol-parser@2.0.5
- @latticexyz/protocol-parser@2.0.4
- @latticexyz/protocol-parser@2.0.3
- @latticexyz/protocol-parser@2.0.1
- @latticexyz/protocol-parser@2.0.0
- @latticexyz/protocol-parser@2.0.0-next.18
- @latticexyz/protocol-parser@2.0.0-next.17
- @latticexyz/protocol-parser@2.0.0-next.16
- @latticexyz/protocol-parser@2.0.0-next.15
- @latticexyz/protocol-parser@2.0.0-next.14
- @latticexyz/protocol-parser@2.0.0-next.13
- @latticexyz/protocol-parser@2.0.0-next.12
- @latticexyz/protocol-parser@2.0.0-next.10
- @latticexyz/protocol-parser@2.0.0-next.9
- @latticexyz/protocol-parser@2.0.0-next.8
- @latticexyz/protocol-parser@2.0.0-next.7
- @latticexyz/protocol-parser@2.0.0-next.6
- @latticexyz/protocol-parser@2.0.0-next.5
- @latticexyz/protocol-parser@2.0.0-next.4
- @latticexyz/protocol-parser@2.0.0-next.3
- @latticexyz/protocol-parser@2.0.0-next.2
- @latticexyz/protocol-parser@2.0.0-next.1
- @latticexyz/protocol-parser@2.0.0-next.0
- @latticexyz/phaserx@2.0.0-next.17
- @latticexyz/phaserx@2.0.0-next.16
- @latticexyz/phaserx@2.0.0-next.15
- @latticexyz/phaserx@2.0.0-next.14
- @latticexyz/phaserx@2.0.0-next.13
- @latticexyz/phaserx@2.0.0-next.12
- @latticexyz/phaserx@2.0.0-next.11
- @latticexyz/phaserx@2.0.0-next.10
- @latticexyz/phaserx@2.0.0-next.9
- @latticexyz/phaserx@2.0.0-next.8
- @latticexyz/phaserx@2.0.0-next.7
- @latticexyz/phaserx@2.0.0-next.6
- @latticexyz/phaserx@2.0.0-next.5
- @latticexyz/phaserx@2.0.0-next.4
- @latticexyz/phaserx@2.0.0-next.3
- @latticexyz/phaserx@2.0.0-next.2
- @latticexyz/phaserx@2.0.0-next.1
- @latticexyz/phaserx@2.0.0-next.0
- @latticexyz/paymaster@2.2.16
- @latticexyz/paymaster@2.2.15
- @latticexyz/noise@2.0.0-next.17
- @latticexyz/noise@2.0.0-next.15
- @latticexyz/noise@2.0.0-next.14
- @latticexyz/noise@2.0.0-next.13
- @latticexyz/noise@2.0.0-next.12
- @latticexyz/noise@2.0.0-next.10
- @latticexyz/noise@2.0.0-next.9
- @latticexyz/noise@2.0.0-next.8
- @latticexyz/noise@2.0.0-next.7
- @latticexyz/noise@2.0.0-next.6
- @latticexyz/noise@2.0.0-next.5
- @latticexyz/noise@2.0.0-next.4
- @latticexyz/noise@2.0.0-next.3
- @latticexyz/noise@2.0.0-next.2
- @latticexyz/noise@2.0.0-next.1
- @latticexyz/noise@2.0.0-next.0
- @latticexyz/network@2.0.0-next.2
- @latticexyz/network@2.0.0-next.1
- @latticexyz/network@2.0.0-next.0
- @latticexyz/gas-report@2.2.16
- @latticexyz/gas-report@2.2.15
- @latticexyz/gas-report@2.2.14
- @latticexyz/gas-report@2.2.13
- @latticexyz/gas-report@2.2.12
- @latticexyz/gas-report@2.2.11
- @latticexyz/gas-report@2.2.10
- @latticexyz/gas-report@2.2.9
- @latticexyz/gas-report@2.2.8
- @latticexyz/gas-report@2.2.7
- @latticexyz/gas-report@2.2.6
- @latticexyz/gas-report@2.2.5
- @latticexyz/gas-report@2.2.4
- @latticexyz/gas-report@2.2.3
- @latticexyz/gas-report@2.2.2
- @latticexyz/gas-report@2.2.1
- @latticexyz/gas-report@2.2.0
- @latticexyz/gas-report@2.1.1
- @latticexyz/gas-report@2.1.0
- @latticexyz/gas-report@2.0.12
- @latticexyz/gas-report@2.0.11
- @latticexyz/gas-report@2.0.10
- @latticexyz/gas-report@2.0.7
- @latticexyz/gas-report@2.0.6
- @latticexyz/gas-report@2.0.5
- @latticexyz/gas-report@2.0.4
- @latticexyz/gas-report@2.0.3
- @latticexyz/gas-report@2.0.1
- @latticexyz/gas-report@2.0.0
- @latticexyz/gas-report@2.0.0-next.18
- @latticexyz/gas-report@2.0.0-next.17
- @latticexyz/gas-report@2.0.0-next.15
- @latticexyz/gas-report@2.0.0-next.14
- @latticexyz/gas-report@2.0.0-next.13
- @latticexyz/gas-report@2.0.0-next.12
- @latticexyz/gas-report@2.0.0-next.10
- @latticexyz/gas-report@2.0.0-next.9
- @latticexyz/gas-report@2.0.0-next.8
- @latticexyz/gas-report@2.0.0-next.7
- @latticexyz/gas-report@2.0.0-next.6
- @latticexyz/gas-report@2.0.0-next.5
- @latticexyz/gas-report@2.0.0-next.4
- @latticexyz/gas-report@2.0.0-next.3
- @latticexyz/gas-report@2.0.0-next.2
- @latticexyz/gas-report@2.0.0-next.1
- @latticexyz/gas-report@2.0.0-next.0
- @latticexyz/faucet@2.2.16
- @latticexyz/faucet@2.2.15
- @latticexyz/faucet@2.2.14
- @latticexyz/faucet@2.2.13
- @latticexyz/faucet@2.2.12
- @latticexyz/faucet@2.2.11
- @latticexyz/faucet@2.2.10
- @latticexyz/faucet@2.2.9
- @latticexyz/faucet@2.2.8
- @latticexyz/faucet@2.2.7
- @latticexyz/faucet@2.2.6
- @latticexyz/faucet@2.2.5
- @latticexyz/faucet@2.2.4
- @latticexyz/faucet@2.2.3
- @latticexyz/faucet@2.2.2
- @latticexyz/faucet@2.2.1
- @latticexyz/faucet@2.2.0
- @latticexyz/faucet@2.1.1
- @latticexyz/faucet@2.1.0
- @latticexyz/faucet@2.0.12
- @latticexyz/faucet@2.0.11
- @latticexyz/faucet@2.0.10
- @latticexyz/faucet@2.0.7
- @latticexyz/faucet@2.0.6
- @latticexyz/faucet@2.0.5
- @latticexyz/faucet@2.0.4
- @latticexyz/faucet@2.0.3
- @latticexyz/faucet@2.0.1
- @latticexyz/faucet@2.0.0
- @latticexyz/faucet@2.0.0-next.18
- @latticexyz/faucet@2.0.0-next.17
- @latticexyz/faucet@2.0.0-next.15
- @latticexyz/faucet@2.0.0-next.14
- @latticexyz/faucet@2.0.0-next.13
- @latticexyz/faucet@2.0.0-next.12
- @latticexyz/faucet@2.0.0-next.10
- @latticexyz/faucet@2.0.0-next.9
- @latticexyz/explorer@2.2.16
- @latticexyz/explorer@2.2.15
- @latticexyz/explorer@2.2.14
- @latticexyz/explorer@2.2.13
- @latticexyz/explorer@2.2.12
- @latticexyz/explorer@2.2.11
- @latticexyz/explorer@2.2.10
- @latticexyz/explorer@2.2.9
- @latticexyz/explorer@2.2.8
- @latticexyz/explorer@2.2.7
- @latticexyz/explorer@2.2.6
- @latticexyz/explorer@2.2.5
- @latticexyz/explorer@2.2.4
- @latticexyz/explorer@2.2.3
- @latticexyz/explorer@2.2.2
- @latticexyz/explorer@2.2.1
- @latticexyz/explorer@2.2.0
- @latticexyz/entrykit@2.2.16
- @latticexyz/entrykit@2.2.15
- @latticexyz/ecs-browser@2.0.0-next.3
- @latticexyz/ecs-browser@2.0.0-next.2
- @latticexyz/ecs-browser@2.0.0-next.1
- @latticexyz/ecs-browser@2.0.0-next.0
- @latticexyz/dev-tools@2.2.16
- @latticexyz/dev-tools@2.2.15
- @latticexyz/dev-tools@2.2.14
- @latticexyz/dev-tools@2.2.13
- @latticexyz/dev-tools@2.2.12
- @latticexyz/dev-tools@2.2.11
- @latticexyz/dev-tools@2.2.10
- @latticexyz/dev-tools@2.2.9
- @latticexyz/dev-tools@2.2.8
- @latticexyz/dev-tools@2.2.7
- @latticexyz/dev-tools@2.2.6
- @latticexyz/dev-tools@2.2.5
- @latticexyz/dev-tools@2.2.4
- @latticexyz/dev-tools@2.2.3
- @latticexyz/dev-tools@2.2.2
- @latticexyz/dev-tools@2.2.1
- @latticexyz/dev-tools@2.2.0
- @latticexyz/dev-tools@2.1.1
- @latticexyz/dev-tools@2.1.0
- @latticexyz/dev-tools@2.0.12
- @latticexyz/dev-tools@2.0.11
- @latticexyz/dev-tools@2.0.10
- @latticexyz/dev-tools@2.0.7
- @latticexyz/dev-tools@2.0.6
- @latticexyz/dev-tools@2.0.5
- @latticexyz/dev-tools@2.0.4
- @latticexyz/dev-tools@2.0.3
- @latticexyz/dev-tools@2.0.1
- @latticexyz/dev-tools@2.0.0
- @latticexyz/dev-tools@2.0.0-next.18
- @latticexyz/dev-tools@2.0.0-next.17
- @latticexyz/dev-tools@2.0.0-next.15
- @latticexyz/dev-tools@2.0.0-next.14
- @latticexyz/dev-tools@2.0.0-next.13
- @latticexyz/dev-tools@2.0.0-next.12
- @latticexyz/dev-tools@2.0.0-next.10
- @latticexyz/dev-tools@2.0.0-next.9
- @latticexyz/dev-tools@2.0.0-next.8
- @latticexyz/dev-tools@2.0.0-next.7
- @latticexyz/dev-tools@2.0.0-next.6
- @latticexyz/dev-tools@2.0.0-next.5
- @latticexyz/dev-tools@2.0.0-next.4
- @latticexyz/dev-tools@2.0.0-next.3
- @latticexyz/dev-tools@2.0.0-next.2
- @latticexyz/dev-tools@2.0.0-next.1
- @latticexyz/dev-tools@2.0.0-next.0
- @latticexyz/config@2.2.16
- @latticexyz/config@2.2.15
- @latticexyz/config@2.2.14
- @latticexyz/config@2.2.13
- @latticexyz/config@2.2.12
- @latticexyz/config@2.2.11
- @latticexyz/config@2.2.10
- @latticexyz/config@2.2.9
- @latticexyz/config@2.2.8
- @latticexyz/config@2.2.7
- @latticexyz/config@2.2.6
- @latticexyz/config@2.2.5
- @latticexyz/config@2.2.4
- @latticexyz/config@2.2.3
- @latticexyz/config@2.2.2
- @latticexyz/config@2.2.1
- @latticexyz/config@2.2.0
- @latticexyz/config@2.1.1
- @latticexyz/config@2.1.0
- @latticexyz/config@2.0.12
- @latticexyz/config@2.0.11
- @latticexyz/config@2.0.10
- @latticexyz/config@2.0.7
- @latticexyz/config@2.0.6
- @latticexyz/config@2.0.5
- @latticexyz/config@2.0.4
- @latticexyz/config@2.0.3
- @latticexyz/config@2.0.1
- @latticexyz/config@2.0.0
- @latticexyz/config@2.0.0-next.18
- @latticexyz/config@2.0.0-next.17
- @latticexyz/config@2.0.0-next.15
- @latticexyz/config@2.0.0-next.14
- @latticexyz/config@2.0.0-next.13
- @latticexyz/config@2.0.0-next.12
- @latticexyz/config@2.0.0-next.10
- @latticexyz/config@2.0.0-next.9
- @latticexyz/config@2.0.0-next.8
- @latticexyz/config@2.0.0-next.7
- @latticexyz/config@2.0.0-next.6
- @latticexyz/config@2.0.0-next.5
- @latticexyz/config@2.0.0-next.4
- @latticexyz/config@2.0.0-next.3
- @latticexyz/config@2.0.0-next.2
- @latticexyz/config@2.0.0-next.1
- @latticexyz/config@2.0.0-next.0
- @latticexyz/common@2.2.16
- @latticexyz/common@2.2.15
- @latticexyz/common@2.2.14
- @latticexyz/common@2.2.13
- @latticexyz/common@2.2.12
- @latticexyz/common@2.2.11
- @latticexyz/common@2.2.10
- @latticexyz/common@2.2.9
- @latticexyz/common@2.2.8
- @latticexyz/common@2.2.7
- @latticexyz/common@2.2.6
- @latticexyz/common@2.2.5
- @latticexyz/common@2.2.4
- @latticexyz/common@2.2.3
- @latticexyz/common@2.2.2
- @latticexyz/common@2.2.1
- @latticexyz/common@2.2.0
- @latticexyz/common@2.1.1
- @latticexyz/common@2.1.0
- @latticexyz/common@2.0.12
- @latticexyz/common@2.0.11
- @latticexyz/common@2.0.10
- @latticexyz/common@2.0.7
- @latticexyz/common@2.0.6
- @latticexyz/common@2.0.5
- @latticexyz/common@2.0.4
- @latticexyz/common@2.0.3
- @latticexyz/common@2.0.1
- @latticexyz/common@2.0.0
- @latticexyz/common@2.0.0-next.18
- @latticexyz/common@2.0.0-next.17
- @latticexyz/common@2.0.0-next.15
- @latticexyz/common@2.0.0-next.14
- @latticexyz/common@2.0.0-next.13
- @latticexyz/common@2.0.0-next.12
- @latticexyz/common@2.0.0-next.10
- @latticexyz/common@2.0.0-next.9
- @latticexyz/common@2.0.0-next.8
- @latticexyz/common@2.0.0-next.7
- @latticexyz/common@2.0.0-next.6
- @latticexyz/common@2.0.0-next.5
- @latticexyz/common@2.0.0-next.4
- @latticexyz/common@2.0.0-next.3
- @latticexyz/common@2.0.0-next.2
- @latticexyz/common@2.0.0-next.1
- @latticexyz/common@2.0.0-next.0
- @latticexyz/cli@2.2.16
- @latticexyz/cli@2.2.15
- @latticexyz/cli@2.2.14
- @latticexyz/cli@2.2.13
- @latticexyz/cli@2.2.12
- @latticexyz/cli@2.2.11
- @latticexyz/cli@2.2.10
- @latticexyz/cli@2.2.9
- @latticexyz/cli@2.2.8
- @latticexyz/cli@2.2.7
- @latticexyz/cli@2.2.6
- @latticexyz/cli@2.2.5
- @latticexyz/cli@2.2.4
- @latticexyz/cli@2.2.3
- @latticexyz/cli@2.2.2
- @latticexyz/cli@2.2.1
- @latticexyz/cli@2.2.0
- @latticexyz/cli@2.1.1
- @latticexyz/cli@2.1.0
- @latticexyz/cli@2.0.12
- @latticexyz/cli@2.0.11
- @latticexyz/cli@2.0.10
- @latticexyz/cli@2.0.7
- @latticexyz/cli@2.0.6
- @latticexyz/cli@2.0.5
- @latticexyz/cli@2.0.4
- @latticexyz/cli@2.0.3
- @latticexyz/cli@2.0.1
- @latticexyz/cli@2.0.0
- @latticexyz/cli@2.0.0-next.18
- @latticexyz/cli@2.0.0-next.17
- @latticexyz/cli@2.0.0-next.15
- @latticexyz/cli@2.0.0-next.14
- @latticexyz/cli@2.0.0-next.13
- @latticexyz/cli@2.0.0-next.12
- @latticexyz/cli@2.0.0-next.10
- @latticexyz/cli@2.0.0-next.9
- @latticexyz/cli@2.0.0-next.8
- @latticexyz/cli@2.0.0-next.7
- @latticexyz/cli@2.0.0-next.6
- @latticexyz/cli@2.0.0-next.5
- @latticexyz/cli@2.0.0-next.4
- @latticexyz/cli@2.0.0-next.3
- @latticexyz/cli@2.0.0-next.2
- @latticexyz/cli@2.0.0-next.1
- @latticexyz/cli@2.0.0-next.0
- @latticexyz/block-logs-stream@2.2.16
- @latticexyz/block-logs-stream@2.2.15
- @latticexyz/block-logs-stream@2.2.14
- @latticexyz/block-logs-stream@2.2.13
- @latticexyz/block-logs-stream@2.2.12
- @latticexyz/block-logs-stream@2.2.11
- @latticexyz/block-logs-stream@2.2.10
- @latticexyz/block-logs-stream@2.2.9
- @latticexyz/block-logs-stream@2.2.8
- @latticexyz/block-logs-stream@2.2.7
- @latticexyz/block-logs-stream@2.2.6
- @latticexyz/block-logs-stream@2.2.5
- @latticexyz/block-logs-stream@2.2.4
- @latticexyz/block-logs-stream@2.2.3
- @latticexyz/block-logs-stream@2.2.2
- @latticexyz/block-logs-stream@2.2.1
- @latticexyz/block-logs-stream@2.2.0
- @latticexyz/block-logs-stream@2.1.1
- @latticexyz/block-logs-stream@2.1.0
- @latticexyz/block-logs-stream@2.0.12
- @latticexyz/block-logs-stream@2.0.11
- @latticexyz/block-logs-stream@2.0.10
- @latticexyz/block-logs-stream@2.0.7
- @latticexyz/block-logs-stream@2.0.6
- @latticexyz/block-logs-stream@2.0.5
- @latticexyz/block-logs-stream@2.0.4
- @latticexyz/block-logs-stream@2.0.3
- @latticexyz/block-logs-stream@2.0.1
- @latticexyz/block-logs-stream@2.0.0
- @latticexyz/block-logs-stream@2.0.0-next.18
- @latticexyz/block-logs-stream@2.0.0-next.17
- @latticexyz/block-logs-stream@2.0.0-next.15
- @latticexyz/block-logs-stream@2.0.0-next.14
- @latticexyz/block-logs-stream@2.0.0-next.13
- @latticexyz/block-logs-stream@2.0.0-next.12
- @latticexyz/block-logs-stream@2.0.0-next.10
- @latticexyz/block-logs-stream@2.0.0-next.9
- @latticexyz/block-logs-stream@2.0.0-next.8
- @latticexyz/block-logs-stream@2.0.0-next.7
- @latticexyz/block-logs-stream@2.0.0-next.6
- @latticexyz/block-logs-stream@2.0.0-next.5
- @latticexyz/block-logs-stream@2.0.0-next.4
- @latticexyz/block-logs-stream@2.0.0-next.3
- @latticexyz/block-logs-stream@2.0.0-next.2
- @latticexyz/block-logs-stream@2.0.0-next.1
- @latticexyz/block-logs-stream@2.0.0-next.0
- @latticexyz/abi-ts@2.2.16
- @latticexyz/abi-ts@2.2.15
- @latticexyz/abi-ts@2.2.14
- @latticexyz/abi-ts@2.2.13
- @latticexyz/abi-ts@2.2.12
- @latticexyz/abi-ts@2.2.11
- @latticexyz/abi-ts@2.2.10
- @latticexyz/abi-ts@2.2.9
- @latticexyz/abi-ts@2.2.8
- @latticexyz/abi-ts@2.2.7
- @latticexyz/abi-ts@2.2.6
- @latticexyz/abi-ts@2.2.5
- @latticexyz/abi-ts@2.2.4
- @latticexyz/abi-ts@2.2.3
- @latticexyz/abi-ts@2.2.2
- @latticexyz/abi-ts@2.2.1
- @latticexyz/abi-ts@2.2.0
- @latticexyz/abi-ts@2.1.1
- @latticexyz/abi-ts@2.1.0
- @latticexyz/abi-ts@2.0.12
- @latticexyz/abi-ts@2.0.11
- @latticexyz/abi-ts@2.0.10
- @latticexyz/abi-ts@2.0.7
- @latticexyz/abi-ts@2.0.6
- @latticexyz/abi-ts@2.0.5
- @latticexyz/abi-ts@2.0.4
- @latticexyz/abi-ts@2.0.3
- @latticexyz/abi-ts@2.0.1
- @latticexyz/abi-ts@2.0.0
- @latticexyz/abi-ts@2.0.0-next.18
- @latticexyz/abi-ts@2.0.0-next.17
- @latticexyz/abi-ts@2.0.0-next.15
- @latticexyz/abi-ts@2.0.0-next.14
- @latticexyz/abi-ts@2.0.0-next.13
- @latticexyz/abi-ts@2.0.0-next.12
- @latticexyz/abi-ts@2.0.0-next.10
- @latticexyz/abi-ts@2.0.0-next.9
- @latticexyz/abi-ts@2.0.0-next.8
- @latticexyz/abi-ts@2.0.0-next.7
- @latticexyz/abi-ts@2.0.0-next.6
- create-mud@2.2.16
- create-mud@2.2.15
- create-mud@2.2.14
- create-mud@2.2.13
- create-mud@2.2.12
- create-mud@2.2.11
- create-mud@2.2.10
- create-mud@2.2.9
- create-mud@2.2.8
- create-mud@2.2.7
- create-mud@2.2.6
- create-mud@2.2.5
- create-mud@2.2.4
- create-mud@2.2.3
- create-mud@2.2.2
- create-mud@2.2.1
- create-mud@2.2.0
- create-mud@2.1.1
- create-mud@2.1.0
- create-mud@2.0.12
- create-mud@2.0.11
- create-mud@2.0.10
- create-mud@2.0.7
- create-mud@2.0.6
- create-mud@2.0.5
- create-mud@2.0.4
- create-mud@2.0.3
- create-mud@2.0.1
- create-mud@2.0.0
- create-mud@2.0.0-next.18
- create-mud@2.0.0-next.17
- create-mud@2.0.0-next.15
- create-mud@2.0.0-next.14
- create-mud@2.0.0-next.13
- create-mud@2.0.0-next.12
- create-mud@2.0.0-next.10
- create-mud@2.0.0-next.9
- create-mud@2.0.0-next.8
- create-mud@2.0.0-next.7
- create-mud@2.0.0-next.6
- create-mud@2.0.0-next.5
- create-mud@2.0.0-next.4
- create-mud@2.0.0-next.3
- create-mud@2.0.0-next.2
- create-mud@2.0.0-next.1
- create-mud@2.0.0-next.0
1 parent
0a230b4
commit 904fd7d
Showing
19 changed files
with
567 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
--- | ||
"@latticexyz/block-logs-stream": patch | ||
"@latticexyz/protocol-parser": patch | ||
"@latticexyz/store-sync": minor | ||
"@latticexyz/store": patch | ||
--- | ||
|
||
Add store sync package |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,7 @@ | ||
export * from "./blockRangeToLogs"; | ||
export * from "./createBlockStream"; | ||
export * from "./fetchLogs"; | ||
export * from "./getLogs"; | ||
export * from "./groupLogsByBlockNumber"; | ||
export * from "./isNonPendingBlock"; | ||
export * from "./isNonPendingLog"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
import { Hex } from "viem"; | ||
import { SchemaAbiType, SchemaAbiTypeToPrimitiveType, isDynamicAbiType } from "@latticexyz/schema-type"; | ||
import { decodeDynamicField } from "./decodeDynamicField"; | ||
import { decodeStaticField } from "./decodeStaticField"; | ||
|
||
export function decodeField< | ||
TAbiType extends SchemaAbiType, | ||
TPrimitiveType extends SchemaAbiTypeToPrimitiveType<TAbiType> | ||
>(abiType: TAbiType, data: Hex): TPrimitiveType { | ||
return ( | ||
isDynamicAbiType(abiType) ? decodeDynamicField(abiType, data) : decodeStaticField(abiType, data) | ||
) as TPrimitiveType; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
import { SchemaAbiType } from "@latticexyz/schema-type"; | ||
import { Schema } from "./common"; | ||
|
||
export function schemaIndexToAbiType(schema: Schema, schemaIndex: number): SchemaAbiType { | ||
if (schemaIndex < schema.staticFields.length) { | ||
return schema.staticFields[schemaIndex]; | ||
} | ||
return schema.dynamicFields[schemaIndex - schema.staticFields.length]; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"extends": ["../../.eslintrc"], | ||
"rules": { | ||
"@typescript-eslint/explicit-function-return-type": "error" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
dist |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
* | ||
|
||
!dist/** | ||
!src/** | ||
!package.json | ||
!README.md |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
{ | ||
"name": "@latticexyz/store-sync", | ||
"version": "1.42.0", | ||
"description": "Utilities to sync MUD Store events with a client or cache", | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/latticexyz/mud.git", | ||
"directory": "packages/store-sync" | ||
}, | ||
"license": "MIT", | ||
"type": "module", | ||
"exports": { | ||
".": "./dist/index.js" | ||
}, | ||
"types": "src/index.ts", | ||
"scripts": { | ||
"build": "pnpm run build:js", | ||
"build:js": "tsup", | ||
"clean": "pnpm run clean:js", | ||
"clean:js": "rimraf dist", | ||
"dev": "tsup --watch", | ||
"lint": "eslint .", | ||
"test": "vitest --run" | ||
}, | ||
"dependencies": { | ||
"@latticexyz/block-logs-stream": "workspace:*", | ||
"@latticexyz/common": "workspace:*", | ||
"@latticexyz/protocol-parser": "workspace:*", | ||
"@latticexyz/schema-type": "workspace:*", | ||
"@latticexyz/store": "workspace:*", | ||
"@latticexyz/store-cache": "workspace:*", | ||
"@latticexyz/utils": "workspace:*", | ||
"debug": "^4.3.4", | ||
"viem": "1.1.7" | ||
}, | ||
"devDependencies": { | ||
"@types/debug": "^4.1.7", | ||
"tsup": "^6.7.0", | ||
"vitest": "0.31.4" | ||
}, | ||
"publishConfig": { | ||
"access": "public" | ||
}, | ||
"gitHead": "914a1e0ae4a573d685841ca2ea921435057deb8f" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,153 @@ | ||
import { beforeEach, describe, expect, it, vi } from "vitest"; | ||
import { BlockEventsToStorageOptions, blockEventsToStorage } from "./blockEventsToStorage"; | ||
import storeConfig from "@latticexyz/store/mud.config"; | ||
|
||
const mockedCallbacks = { | ||
registerTableSchema: vi.fn< | ||
Parameters<BlockEventsToStorageOptions["registerTableSchema"]>, | ||
ReturnType<BlockEventsToStorageOptions["registerTableSchema"]> | ||
>(), | ||
registerTableMetadata: vi.fn< | ||
Parameters<BlockEventsToStorageOptions["registerTableMetadata"]>, | ||
ReturnType<BlockEventsToStorageOptions["registerTableMetadata"]> | ||
>(), | ||
getTableSchema: vi.fn< | ||
Parameters<BlockEventsToStorageOptions["getTableSchema"]>, | ||
ReturnType<BlockEventsToStorageOptions["getTableSchema"]> | ||
>(), | ||
getTableMetadata: vi.fn< | ||
Parameters<BlockEventsToStorageOptions["getTableMetadata"]>, | ||
ReturnType<BlockEventsToStorageOptions["getTableMetadata"]> | ||
>(), | ||
}; | ||
|
||
const mockedDecode = blockEventsToStorage<typeof storeConfig>(mockedCallbacks as any as BlockEventsToStorageOptions); | ||
|
||
describe("blockEventsToStorage", () => { | ||
beforeEach(() => { | ||
vi.clearAllMocks(); | ||
}); | ||
|
||
it("call setField with data properly decoded", async () => { | ||
mockedCallbacks.getTableSchema.mockImplementation(async ({ namespace, name }) => { | ||
if (namespace === "mudstore" && name === "StoreMetadata") { | ||
return { | ||
namespace: "mudstore", | ||
name: "StoreMetadata", | ||
schema: { | ||
keySchema: { | ||
staticFields: ["bytes32"], | ||
dynamicFields: [], | ||
}, | ||
valueSchema: { | ||
staticFields: [], | ||
dynamicFields: ["string", "bytes"], | ||
}, | ||
}, | ||
}; | ||
} | ||
|
||
if (namespace === "" && name === "Inventory") { | ||
return { | ||
namespace: "", | ||
name: "Inventory", | ||
schema: { | ||
keySchema: { | ||
staticFields: ["address", "uint32", "uint32"], | ||
dynamicFields: [], | ||
}, | ||
valueSchema: { | ||
staticFields: ["uint32"], | ||
dynamicFields: [], | ||
}, | ||
}, | ||
}; | ||
} | ||
}); | ||
|
||
mockedCallbacks.getTableMetadata.mockImplementation(async ({ namespace, name }) => { | ||
if (namespace === "" && name === "Inventory") { | ||
return { | ||
namespace: "", | ||
name: "Inventory", | ||
keyNames: ["owner", "item", "itemVariant"], | ||
valueNames: ["amount"], | ||
}; | ||
} | ||
}); | ||
|
||
const operations = await mockedDecode({ | ||
blockNumber: 5448n, | ||
blockHash: "0x03e962e7402b2ab295b92feac342a132111dd14b0d1fd4d4a0456fdc77981577", | ||
logs: [ | ||
{ | ||
address: "0x5fbdb2315678afecb367f032d93f642f64180aa3", | ||
topics: ["0xd01f9f1368f831528fc9fe6442366b2b7d957fbfff3bcf7c24d9ab5fe51f8c46"], | ||
data: "0x00000000000000000000000000000000496e76656e746f7279000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000796eb990a3f9c431c69149c7a168b91596d87f600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000800000000000000000000000000000000000000000000000000000000", | ||
blockHash: "0x03e962e7402b2ab295b92feac342a132111dd14b0d1fd4d4a0456fdc77981577", | ||
blockNumber: 5448n, | ||
transactionHash: "0xa6986924609542dc4c2d81c53799d8eab47109ef34ee1e422de595e19ee9bfa4", | ||
transactionIndex: 0, | ||
logIndex: 0, | ||
removed: false, | ||
args: { | ||
table: "0x00000000000000000000000000000000496e76656e746f727900000000000000", | ||
key: [ | ||
"0x000000000000000000000000796eb990a3f9c431c69149c7a168b91596d87f60", | ||
"0x0000000000000000000000000000000000000000000000000000000000000001", | ||
"0x0000000000000000000000000000000000000000000000000000000000000001", | ||
], | ||
schemaIndex: 0, | ||
data: "0x00000008", | ||
}, | ||
eventName: "StoreSetField", | ||
}, | ||
], | ||
}); | ||
|
||
expect(operations).toMatchInlineSnapshot(` | ||
{ | ||
"blockHash": "0x03e962e7402b2ab295b92feac342a132111dd14b0d1fd4d4a0456fdc77981577", | ||
"blockNumber": 5448n, | ||
"operations": [ | ||
{ | ||
"keyTuple": { | ||
"item": 1, | ||
"itemVariant": 1, | ||
"owner": "0x796eb990A3F9C431C69149c7a168b91596D87F60", | ||
}, | ||
"log": { | ||
"address": "0x5fbdb2315678afecb367f032d93f642f64180aa3", | ||
"args": { | ||
"data": "0x00000008", | ||
"key": [ | ||
"0x000000000000000000000000796eb990a3f9c431c69149c7a168b91596d87f60", | ||
"0x0000000000000000000000000000000000000000000000000000000000000001", | ||
"0x0000000000000000000000000000000000000000000000000000000000000001", | ||
], | ||
"schemaIndex": 0, | ||
"table": "0x00000000000000000000000000000000496e76656e746f727900000000000000", | ||
}, | ||
"blockHash": "0x03e962e7402b2ab295b92feac342a132111dd14b0d1fd4d4a0456fdc77981577", | ||
"blockNumber": 5448n, | ||
"data": "0x00000000000000000000000000000000496e76656e746f7279000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000796eb990a3f9c431c69149c7a168b91596d87f600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000800000000000000000000000000000000000000000000000000000000", | ||
"eventName": "StoreSetField", | ||
"logIndex": 0, | ||
"removed": false, | ||
"topics": [ | ||
"0xd01f9f1368f831528fc9fe6442366b2b7d957fbfff3bcf7c24d9ab5fe51f8c46", | ||
], | ||
"transactionHash": "0xa6986924609542dc4c2d81c53799d8eab47109ef34ee1e422de595e19ee9bfa4", | ||
"transactionIndex": 0, | ||
}, | ||
"name": "Inventory", | ||
"namespace": "", | ||
"type": "SetField", | ||
"value": 8, | ||
"valueName": "amount", | ||
}, | ||
], | ||
} | ||
`); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,234 @@ | ||
import { | ||
TableSchema, | ||
decodeField, | ||
decodeKeyTuple, | ||
decodeRecord, | ||
hexToTableSchema, | ||
schemaIndexToAbiType, | ||
} from "@latticexyz/protocol-parser"; | ||
import { GroupLogsByBlockNumberResult, GetLogsResult } from "@latticexyz/block-logs-stream"; | ||
import { StoreEventsAbi, StoreConfig } from "@latticexyz/store"; | ||
import { TableId } from "@latticexyz/common"; | ||
import { Hex, decodeAbiParameters, parseAbiParameters } from "viem"; | ||
import { debug } from "./debug"; | ||
// TODO: move these type helpers into store? | ||
import { Key, Value } from "@latticexyz/store-cache"; | ||
import { isDefined } from "@latticexyz/common/utils"; | ||
|
||
// TODO: change table schema/metadata APIs once we get both schema and field names in the same event | ||
|
||
// TODO: export these from store or world | ||
export const schemaTableId = new TableId("mudstore", "schema"); | ||
export const metadataTableId = new TableId("mudstore", "StoreMetadata"); | ||
|
||
// I don't love carrying all these types through. Ideally this should be the shape of the thing we want, rather than the specific return type from a function. | ||
export type StoreEventsLog = GetLogsResult<StoreEventsAbi>[number]; | ||
export type BlockEvents = GroupLogsByBlockNumberResult<StoreEventsLog>[number]; | ||
|
||
export type StoredTableSchema = { | ||
namespace: string; | ||
name: string; | ||
schema: TableSchema; | ||
}; | ||
|
||
export type StoredTableMetadata = { | ||
namespace: string; | ||
name: string; | ||
keyNames: readonly string[]; | ||
valueNames: readonly string[]; | ||
}; | ||
|
||
export type BaseStorageOperation = { | ||
log: StoreEventsLog; | ||
namespace: string; | ||
}; | ||
|
||
export type SetRecordOperation<TConfig extends StoreConfig> = BaseStorageOperation & { | ||
type: "SetRecord"; | ||
} & { | ||
[TTable in keyof TConfig["tables"]]: { | ||
name: TTable; | ||
keyTuple: Key<TConfig, TTable>; | ||
record: Value<TConfig, TTable>; | ||
}; | ||
}[keyof TConfig["tables"]]; | ||
|
||
export type SetFieldOperation<TConfig extends StoreConfig> = BaseStorageOperation & { | ||
type: "SetField"; | ||
} & { | ||
[TTable in keyof TConfig["tables"]]: { | ||
name: TTable; | ||
keyTuple: Key<TConfig, TTable>; | ||
} & { | ||
[TValue in keyof Value<TConfig, TTable>]: { | ||
// TODO: standardize on calling these "fields" or "values" or maybe "columns" | ||
valueName: TValue; | ||
value: Value<TConfig, TTable>[TValue]; | ||
}; | ||
}[keyof Value<TConfig, TTable>]; | ||
}[keyof TConfig["tables"]]; | ||
|
||
export type DeleteRecordOperation<TConfig extends StoreConfig> = BaseStorageOperation & { | ||
type: "DeleteRecord"; | ||
} & { | ||
[TTable in keyof TConfig["tables"]]: { | ||
name: TTable; | ||
keyTuple: Key<TConfig, TTable>; | ||
}; | ||
}[keyof TConfig["tables"]]; | ||
|
||
export type StorageOperation<TConfig extends StoreConfig> = | ||
| SetFieldOperation<TConfig> | ||
| SetRecordOperation<TConfig> | ||
| DeleteRecordOperation<TConfig>; | ||
|
||
export type BlockEventsToStorageOptions = { | ||
registerTableSchema: (data: StoredTableSchema) => Promise<void>; | ||
registerTableMetadata: (data: StoredTableMetadata) => Promise<void>; | ||
getTableSchema: (opts: Pick<StoredTableSchema, "namespace" | "name">) => Promise<StoredTableSchema | undefined>; | ||
getTableMetadata: (opts: Pick<StoredTableMetadata, "namespace" | "name">) => Promise<StoredTableMetadata | undefined>; | ||
}; | ||
|
||
export function blockEventsToStorage<TConfig extends StoreConfig = StoreConfig>({ | ||
registerTableMetadata, | ||
registerTableSchema, | ||
getTableMetadata, | ||
getTableSchema, | ||
}: BlockEventsToStorageOptions): (block: BlockEvents) => Promise<{ | ||
blockNumber: BlockEvents["blockNumber"]; | ||
blockHash: BlockEvents["blockHash"]; | ||
operations: StorageOperation<TConfig>[]; | ||
}> { | ||
return async (block) => { | ||
// Find and register all new table schemas | ||
// Store schemas are immutable, so we can parallelize this | ||
await Promise.all( | ||
block.logs.map(async (log) => { | ||
if (log.eventName !== "StoreSetRecord") return; | ||
if (log.args.table !== schemaTableId.toHex()) return; | ||
|
||
const [tableForSchema, ...otherKeys] = log.args.key; | ||
if (otherKeys.length) { | ||
debug("registerSchema event is expected to have only one key in key tuple, but got multiple", log); | ||
} | ||
|
||
const tableId = TableId.fromHex(tableForSchema); | ||
const schema = hexToTableSchema(log.args.data); | ||
|
||
await registerTableSchema({ ...tableId, schema }); | ||
}) | ||
); | ||
|
||
const metadataTableSchema = await getTableSchema(metadataTableId); | ||
if (!metadataTableSchema) { | ||
// TODO: better error | ||
throw new Error("metadata table schema was not registered"); | ||
} | ||
|
||
// Find and register all new table metadata | ||
// Table metadata is technically mutable, but all of our code assumes its immutable, so we'll continue that trend | ||
// TODO: rework contracts so schemas+tables are combined and immutable | ||
await Promise.all( | ||
block.logs.map(async (log) => { | ||
if (log.eventName !== "StoreSetRecord") return; | ||
if (log.args.table !== metadataTableId.toHex()) return; | ||
|
||
const [tableForSchema, ...otherKeys] = log.args.key; | ||
if (otherKeys.length) { | ||
debug("setMetadata event is expected to have only one key in key tuple, but got multiple", log); | ||
} | ||
|
||
const tableId = TableId.fromHex(tableForSchema); | ||
const [tableName, abiEncodedFieldNames] = decodeRecord(metadataTableSchema.schema.valueSchema, log.args.data); | ||
const valueNames = decodeAbiParameters(parseAbiParameters("string[]"), abiEncodedFieldNames as Hex)[0]; | ||
|
||
// TODO: add key names to table registration when we refactor it | ||
await registerTableMetadata({ ...tableId, keyNames: [], valueNames }); | ||
}) | ||
); | ||
|
||
const tables = Array.from(new Set(block.logs.map((log) => log.args.table))).map((tableHex) => | ||
TableId.fromHex(tableHex) | ||
); | ||
// TODO: combine these once we refactor table registration | ||
const tableSchemas = Object.fromEntries( | ||
await Promise.all(tables.map(async (table) => [table.toHex(), await getTableSchema(table)])) | ||
) as Record<Hex, StoredTableSchema>; | ||
const tableMetadatas = Object.fromEntries( | ||
await Promise.all(tables.map(async (table) => [table.toHex(), await getTableMetadata(table)])) | ||
) as Record<Hex, StoredTableMetadata>; | ||
|
||
const operations = block.logs | ||
.map((log): StorageOperation<TConfig> | undefined => { | ||
const tableId = TableId.fromHex(log.args.table); | ||
const tableSchema = tableSchemas[log.args.table]; | ||
const tableMetadata = tableMetadatas[log.args.table]; | ||
if (!tableSchema) { | ||
debug("no table schema found for event, skipping", tableId.toString(), log); | ||
return; | ||
} | ||
if (!tableMetadata) { | ||
debug("no table metadata found for event, skipping", tableId.toString(), log); | ||
return; | ||
} | ||
|
||
const keyTupleValues = decodeKeyTuple(tableSchema.schema.keySchema, log.args.key); | ||
const keyTuple = Object.fromEntries( | ||
keyTupleValues.map((value, i) => [tableMetadata.keyNames[i] ?? i, value]) | ||
) as Key<TConfig, keyof TConfig["tables"]>; | ||
|
||
if (log.eventName === "StoreSetRecord" || log.eventName === "StoreEphemeralRecord") { | ||
const values = decodeRecord(tableSchema.schema.valueSchema, log.args.data); | ||
const record = Object.fromEntries(tableMetadata.valueNames.map((name, i) => [name, values[i]])) as Value< | ||
TConfig, | ||
keyof TConfig["tables"] | ||
>; | ||
// TODO: decide if we should handle ephemeral records separately? | ||
// they'll eventually be turned into "events", but unclear if that should translate to client storage operations | ||
return { | ||
log, | ||
type: "SetRecord", | ||
...tableId, | ||
keyTuple, | ||
record, | ||
}; | ||
} | ||
|
||
if (log.eventName === "StoreSetField") { | ||
const valueName = tableMetadata.valueNames[log.args.schemaIndex] as string & | ||
keyof Value<TConfig, keyof TConfig["tables"]>; | ||
const value = decodeField( | ||
schemaIndexToAbiType(tableSchema.schema.valueSchema, log.args.schemaIndex), | ||
log.args.data | ||
) as Value<TConfig, keyof TConfig["tables"]>[typeof valueName]; | ||
return { | ||
log, | ||
type: "SetField", | ||
...tableId, | ||
keyTuple, | ||
valueName, | ||
value, | ||
}; | ||
} | ||
|
||
if (log.eventName === "StoreDeleteRecord") { | ||
return { | ||
log, | ||
type: "DeleteRecord", | ||
...tableId, | ||
keyTuple, | ||
}; | ||
} | ||
|
||
debug("unknown store event or log, skipping", log); | ||
return; | ||
}) | ||
.filter(isDefined); | ||
|
||
return { | ||
blockNumber: block.blockNumber, | ||
blockHash: block.blockHash, | ||
operations, | ||
}; | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
import createDebug from "debug"; | ||
|
||
export const debug = createDebug("mud:store-sync"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
export * from "./blockEventsToStorage"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
{ | ||
"compilerOptions": { | ||
"target": "es2021", | ||
"module": "esnext", | ||
"moduleResolution": "node", | ||
"declaration": true, | ||
"sourceMap": true, | ||
"outDir": "dist", | ||
"isolatedModules": true, | ||
"esModuleInterop": true, | ||
"forceConsistentCasingInFileNames": true, | ||
"strict": true | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import { defineConfig } from "tsup"; | ||
|
||
export default defineConfig({ | ||
entry: ["src/index.ts"], | ||
target: "esnext", | ||
format: ["esm"], | ||
dts: false, | ||
sourcemap: true, | ||
clean: true, | ||
minify: true, | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.