@multitapio/multitap 0.0.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/dist/.stamp +0 -0
- package/dist/cache.d.ts +117 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/channel.d.ts +91 -0
- package/dist/channel.d.ts.map +1 -0
- package/dist/channel.worker.d.ts +3 -0
- package/dist/channel.worker.d.ts.map +1 -0
- package/dist/codegen/config.d.ts +107 -0
- package/dist/codegen/config.d.ts.map +1 -0
- package/dist/codegen/generator.d.ts +78 -0
- package/dist/codegen/generator.d.ts.map +1 -0
- package/dist/codegen/index.d.ts +13 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/inject.d.ts +51 -0
- package/dist/codegen/inject.d.ts.map +1 -0
- package/dist/codegen/rust.d.ts +22 -0
- package/dist/codegen/rust.d.ts.map +1 -0
- package/dist/codegen/typescript.d.ts +22 -0
- package/dist/codegen/typescript.d.ts.map +1 -0
- package/dist/constants.d.ts +5 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/crypto.d.ts +141 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/debug.d.ts +39 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/diagnostics/index.d.ts +12 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics.js +5502 -0
- package/dist/e2e/cli.d.ts +2 -0
- package/dist/e2e/cli.d.ts.map +1 -0
- package/dist/executor.d.ts +130 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/globals.d.ts +32 -0
- package/dist/helpers.d.ts +3 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/input-codec.d.ts +136 -0
- package/dist/input-codec.d.ts.map +1 -0
- package/dist/input-graph.d.ts +106 -0
- package/dist/input-graph.d.ts.map +1 -0
- package/dist/lib.d.ts +10 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +9409 -0
- package/dist/messages.d.ts +63 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/peer-mesh.d.ts +77 -0
- package/dist/peer-mesh.d.ts.map +1 -0
- package/dist/react/Crosshair.d.ts +17 -0
- package/dist/react/Crosshair.d.ts.map +1 -0
- package/dist/react/Player.d.ts +10 -0
- package/dist/react/Player.d.ts.map +1 -0
- package/dist/react/PlayerPoseContext.d.ts +31 -0
- package/dist/react/PlayerPoseContext.d.ts.map +1 -0
- package/dist/react/hooks/index.d.ts +7 -0
- package/dist/react/hooks/index.d.ts.map +1 -0
- package/dist/react/hooks/useEvent.d.ts +46 -0
- package/dist/react/hooks/useEvent.d.ts.map +1 -0
- package/dist/react/hooks/useFrame.d.ts +23 -0
- package/dist/react/hooks/useFrame.d.ts.map +1 -0
- package/dist/react/hooks/usePlayers.d.ts +24 -0
- package/dist/react/hooks/usePlayers.d.ts.map +1 -0
- package/dist/react/hooks/useQuery.d.ts +41 -0
- package/dist/react/hooks/useQuery.d.ts.map +1 -0
- package/dist/react/hooks/useSession.d.ts +10 -0
- package/dist/react/hooks/useSession.d.ts.map +1 -0
- package/dist/react/index.d.ts +18 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/input/DesktopInputMapper.d.ts +38 -0
- package/dist/react/input/DesktopInputMapper.d.ts.map +1 -0
- package/dist/react/input/index.d.ts +4 -0
- package/dist/react/input/index.d.ts.map +1 -0
- package/dist/react/input/types.d.ts +46 -0
- package/dist/react/input/types.d.ts.map +1 -0
- package/dist/react/providers/SessionProvider.d.ts +17 -0
- package/dist/react/providers/SessionProvider.d.ts.map +1 -0
- package/dist/react/providers/index.d.ts +2 -0
- package/dist/react/providers/index.d.ts.map +1 -0
- package/dist/react/types/index.d.ts +2 -0
- package/dist/react/types/index.d.ts.map +1 -0
- package/dist/react/types/session.d.ts +88 -0
- package/dist/react/types/session.d.ts.map +1 -0
- package/dist/react/types.d.ts +134 -0
- package/dist/react/types.d.ts.map +1 -0
- package/dist/react/utils/math.d.ts +19 -0
- package/dist/react/utils/math.d.ts.map +1 -0
- package/dist/react/views/AsteroidsView.d.ts +24 -0
- package/dist/react/views/AsteroidsView.d.ts.map +1 -0
- package/dist/react/views/FirstPersonView.d.ts +10 -0
- package/dist/react/views/FirstPersonView.d.ts.map +1 -0
- package/dist/react/views/IsometricView.d.ts +21 -0
- package/dist/react/views/IsometricView.d.ts.map +1 -0
- package/dist/react/views/MapView.d.ts +16 -0
- package/dist/react/views/MapView.d.ts.map +1 -0
- package/dist/react/views/MobaView.d.ts +17 -0
- package/dist/react/views/MobaView.d.ts.map +1 -0
- package/dist/react/views/SideOnView.d.ts +23 -0
- package/dist/react/views/SideOnView.d.ts.map +1 -0
- package/dist/react/views/ThirdPersonFixedView.d.ts +21 -0
- package/dist/react/views/ThirdPersonFixedView.d.ts.map +1 -0
- package/dist/react/views/ThirdPersonView.d.ts +12 -0
- package/dist/react/views/ThirdPersonView.d.ts.map +1 -0
- package/dist/react/views/TopDownFixedView.d.ts +20 -0
- package/dist/react/views/TopDownFixedView.d.ts.map +1 -0
- package/dist/react/views/TopDownView.d.ts +12 -0
- package/dist/react/views/TopDownView.d.ts.map +1 -0
- package/dist/react/views/TwinStickView.d.ts +13 -0
- package/dist/react/views/TwinStickView.d.ts.map +1 -0
- package/dist/react/views/VehicleFixedView.d.ts +16 -0
- package/dist/react/views/VehicleFixedView.d.ts.map +1 -0
- package/dist/react/views/VehicleView.d.ts +13 -0
- package/dist/react/views/VehicleView.d.ts.map +1 -0
- package/dist/react/views/index.d.ts +21 -0
- package/dist/react/views/index.d.ts.map +1 -0
- package/dist/react/views/types.d.ts +136 -0
- package/dist/react/views/types.d.ts.map +1 -0
- package/dist/rollback.d.ts +193 -0
- package/dist/rollback.d.ts.map +1 -0
- package/dist/rollback.worker.d.ts +3 -0
- package/dist/rollback.worker.d.ts.map +1 -0
- package/dist/schema.d.ts +309 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/session-config.d.ts +119 -0
- package/dist/session-config.d.ts.map +1 -0
- package/dist/session.d.ts +120 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/state.d.ts +400 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/stats.d.ts +21 -0
- package/dist/stats.d.ts.map +1 -0
- package/dist/test-session.d.ts +170 -0
- package/dist/test-session.d.ts.map +1 -0
- package/dist/types/cache.d.ts +117 -0
- package/dist/types/cache.d.ts.map +1 -0
- package/dist/types/channel.d.ts +91 -0
- package/dist/types/channel.d.ts.map +1 -0
- package/dist/types/channel.worker.d.ts +3 -0
- package/dist/types/channel.worker.d.ts.map +1 -0
- package/dist/types/codegen/config.d.ts +107 -0
- package/dist/types/codegen/config.d.ts.map +1 -0
- package/dist/types/codegen/generator.d.ts +78 -0
- package/dist/types/codegen/generator.d.ts.map +1 -0
- package/dist/types/codegen/index.d.ts +13 -0
- package/dist/types/codegen/index.d.ts.map +1 -0
- package/dist/types/codegen/inject.d.ts +51 -0
- package/dist/types/codegen/inject.d.ts.map +1 -0
- package/dist/types/codegen/rust.d.ts +22 -0
- package/dist/types/codegen/rust.d.ts.map +1 -0
- package/dist/types/codegen/typescript.d.ts +22 -0
- package/dist/types/codegen/typescript.d.ts.map +1 -0
- package/dist/types/constants.d.ts +5 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/crypto.d.ts +141 -0
- package/dist/types/crypto.d.ts.map +1 -0
- package/dist/types/debug.d.ts +39 -0
- package/dist/types/debug.d.ts.map +1 -0
- package/dist/types/diagnostics/index.d.ts +12 -0
- package/dist/types/diagnostics/index.d.ts.map +1 -0
- package/dist/types/e2e/cli.d.ts +2 -0
- package/dist/types/e2e/cli.d.ts.map +1 -0
- package/dist/types/executor.d.ts +130 -0
- package/dist/types/executor.d.ts.map +1 -0
- package/dist/types/helpers.d.ts +3 -0
- package/dist/types/helpers.d.ts.map +1 -0
- package/dist/types/input-codec.d.ts +136 -0
- package/dist/types/input-codec.d.ts.map +1 -0
- package/dist/types/input-graph.d.ts +106 -0
- package/dist/types/input-graph.d.ts.map +1 -0
- package/dist/types/lib.d.ts +10 -0
- package/dist/types/lib.d.ts.map +1 -0
- package/dist/types/messages.d.ts +63 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/peer-mesh.d.ts +77 -0
- package/dist/types/peer-mesh.d.ts.map +1 -0
- package/dist/types/react/Crosshair.d.ts +17 -0
- package/dist/types/react/Crosshair.d.ts.map +1 -0
- package/dist/types/react/Player.d.ts +10 -0
- package/dist/types/react/Player.d.ts.map +1 -0
- package/dist/types/react/PlayerPoseContext.d.ts +31 -0
- package/dist/types/react/PlayerPoseContext.d.ts.map +1 -0
- package/dist/types/react/hooks/index.d.ts +7 -0
- package/dist/types/react/hooks/index.d.ts.map +1 -0
- package/dist/types/react/hooks/useEvent.d.ts +46 -0
- package/dist/types/react/hooks/useEvent.d.ts.map +1 -0
- package/dist/types/react/hooks/useFrame.d.ts +23 -0
- package/dist/types/react/hooks/useFrame.d.ts.map +1 -0
- package/dist/types/react/hooks/usePlayers.d.ts +24 -0
- package/dist/types/react/hooks/usePlayers.d.ts.map +1 -0
- package/dist/types/react/hooks/useQuery.d.ts +41 -0
- package/dist/types/react/hooks/useQuery.d.ts.map +1 -0
- package/dist/types/react/hooks/useSession.d.ts +10 -0
- package/dist/types/react/hooks/useSession.d.ts.map +1 -0
- package/dist/types/react/index.d.ts +18 -0
- package/dist/types/react/index.d.ts.map +1 -0
- package/dist/types/react/input/DesktopInputMapper.d.ts +38 -0
- package/dist/types/react/input/DesktopInputMapper.d.ts.map +1 -0
- package/dist/types/react/input/index.d.ts +4 -0
- package/dist/types/react/input/index.d.ts.map +1 -0
- package/dist/types/react/input/types.d.ts +46 -0
- package/dist/types/react/input/types.d.ts.map +1 -0
- package/dist/types/react/providers/SessionProvider.d.ts +17 -0
- package/dist/types/react/providers/SessionProvider.d.ts.map +1 -0
- package/dist/types/react/providers/index.d.ts +2 -0
- package/dist/types/react/providers/index.d.ts.map +1 -0
- package/dist/types/react/types/index.d.ts +2 -0
- package/dist/types/react/types/index.d.ts.map +1 -0
- package/dist/types/react/types/session.d.ts +88 -0
- package/dist/types/react/types/session.d.ts.map +1 -0
- package/dist/types/react/types.d.ts +134 -0
- package/dist/types/react/types.d.ts.map +1 -0
- package/dist/types/react/utils/math.d.ts +19 -0
- package/dist/types/react/utils/math.d.ts.map +1 -0
- package/dist/types/react/views/AsteroidsView.d.ts +24 -0
- package/dist/types/react/views/AsteroidsView.d.ts.map +1 -0
- package/dist/types/react/views/FirstPersonView.d.ts +10 -0
- package/dist/types/react/views/FirstPersonView.d.ts.map +1 -0
- package/dist/types/react/views/IsometricView.d.ts +21 -0
- package/dist/types/react/views/IsometricView.d.ts.map +1 -0
- package/dist/types/react/views/MapView.d.ts +16 -0
- package/dist/types/react/views/MapView.d.ts.map +1 -0
- package/dist/types/react/views/MobaView.d.ts +17 -0
- package/dist/types/react/views/MobaView.d.ts.map +1 -0
- package/dist/types/react/views/SideOnView.d.ts +23 -0
- package/dist/types/react/views/SideOnView.d.ts.map +1 -0
- package/dist/types/react/views/ThirdPersonFixedView.d.ts +21 -0
- package/dist/types/react/views/ThirdPersonFixedView.d.ts.map +1 -0
- package/dist/types/react/views/ThirdPersonView.d.ts +12 -0
- package/dist/types/react/views/ThirdPersonView.d.ts.map +1 -0
- package/dist/types/react/views/TopDownFixedView.d.ts +20 -0
- package/dist/types/react/views/TopDownFixedView.d.ts.map +1 -0
- package/dist/types/react/views/TopDownView.d.ts +12 -0
- package/dist/types/react/views/TopDownView.d.ts.map +1 -0
- package/dist/types/react/views/TwinStickView.d.ts +13 -0
- package/dist/types/react/views/TwinStickView.d.ts.map +1 -0
- package/dist/types/react/views/VehicleFixedView.d.ts +16 -0
- package/dist/types/react/views/VehicleFixedView.d.ts.map +1 -0
- package/dist/types/react/views/VehicleView.d.ts +13 -0
- package/dist/types/react/views/VehicleView.d.ts.map +1 -0
- package/dist/types/react/views/index.d.ts +21 -0
- package/dist/types/react/views/index.d.ts.map +1 -0
- package/dist/types/react/views/types.d.ts +136 -0
- package/dist/types/react/views/types.d.ts.map +1 -0
- package/dist/types/rollback.d.ts +193 -0
- package/dist/types/rollback.d.ts.map +1 -0
- package/dist/types/rollback.worker.d.ts +3 -0
- package/dist/types/rollback.worker.d.ts.map +1 -0
- package/dist/types/schema.d.ts +309 -0
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/types/session-config.d.ts +119 -0
- package/dist/types/session-config.d.ts.map +1 -0
- package/dist/types/session.d.ts +120 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/state.d.ts +400 -0
- package/dist/types/state.d.ts.map +1 -0
- package/dist/types/stats.d.ts +21 -0
- package/dist/types/stats.d.ts.map +1 -0
- package/dist/types/test-session.d.ts +170 -0
- package/dist/types/test-session.d.ts.map +1 -0
- package/dist/types/utils.d.ts +26 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/vite/codegen-runner.d.ts +27 -0
- package/dist/types/vite/codegen-runner.d.ts.map +1 -0
- package/dist/types/vite/index.d.ts +20 -0
- package/dist/types/vite/index.d.ts.map +1 -0
- package/dist/types/vite/module-builder.d.ts +28 -0
- package/dist/types/vite/module-builder.d.ts.map +1 -0
- package/dist/types/vite/plugin.d.ts +27 -0
- package/dist/types/vite/plugin.d.ts.map +1 -0
- package/dist/types/vite/types.d.ts +37 -0
- package/dist/types/vite/types.d.ts.map +1 -0
- package/dist/types/vite/wasm-compiler.d.ts +32 -0
- package/dist/types/vite/wasm-compiler.d.ts.map +1 -0
- package/dist/utils.d.ts +26 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/vite/codegen-runner.d.ts +27 -0
- package/dist/vite/codegen-runner.d.ts.map +1 -0
- package/dist/vite/index.d.ts +20 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +4202 -0
- package/dist/vite/module-builder.d.ts +28 -0
- package/dist/vite/module-builder.d.ts.map +1 -0
- package/dist/vite/plugin.d.ts +27 -0
- package/dist/vite/plugin.d.ts.map +1 -0
- package/dist/vite/types.d.ts +37 -0
- package/dist/vite/types.d.ts.map +1 -0
- package/dist/vite/wasm-compiler.d.ts +32 -0
- package/dist/vite/wasm-compiler.d.ts.map +1 -0
- package/package.json +92 -0
package/dist/.stamp
ADDED
|
File without changes
|
package/dist/cache.d.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State Cache for Rollback Networking
|
|
3
|
+
*
|
|
4
|
+
* Provides O(1) lookup of cached states by their stateId.
|
|
5
|
+
* Used during rollback to avoid redundant state transitions when
|
|
6
|
+
* authoritative inputs match predictions.
|
|
7
|
+
*
|
|
8
|
+
* @module state-cache
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Convert a 32-byte stateId to a 64-character hex string for use as Map key.
|
|
12
|
+
*/
|
|
13
|
+
export declare function stateIdToKey(stateId: Uint8Array): string;
|
|
14
|
+
/**
|
|
15
|
+
* Convert a 64-character hex string back to a 32-byte stateId.
|
|
16
|
+
*/
|
|
17
|
+
export declare function keyToStateId(key: string): Uint8Array;
|
|
18
|
+
/**
|
|
19
|
+
* Options for StateCache configuration.
|
|
20
|
+
*/
|
|
21
|
+
export interface StateCacheOptions {
|
|
22
|
+
/** Maximum number of states to cache. Default: 100. */
|
|
23
|
+
maxSize?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Cache for state snapshots keyed by stateId.
|
|
27
|
+
*
|
|
28
|
+
* Provides O(1) lookup to avoid redundant state transitions during rollback.
|
|
29
|
+
* When authoritative inputs match predictions, we can retrieve the cached
|
|
30
|
+
* state instead of recomputing.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const cache = new StateCache();
|
|
35
|
+
*
|
|
36
|
+
* // After computing a state transition
|
|
37
|
+
* cache.store(state);
|
|
38
|
+
*
|
|
39
|
+
* // Before computing a state transition, check cache
|
|
40
|
+
* const cached = cache.getCached(prevState, tick, orderedPayloadsHash);
|
|
41
|
+
* if (cached) {
|
|
42
|
+
* // Use cached state, skip computation
|
|
43
|
+
* return cached;
|
|
44
|
+
* }
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare class StateCache {
|
|
48
|
+
private cache;
|
|
49
|
+
private maxSize;
|
|
50
|
+
constructor(options?: StateCacheOptions);
|
|
51
|
+
/**
|
|
52
|
+
* Store a state in the cache, keyed by its embedded stateId.
|
|
53
|
+
* Makes a copy of the state buffer to prevent mutation issues.
|
|
54
|
+
*
|
|
55
|
+
* @param state - State buffer to cache
|
|
56
|
+
*/
|
|
57
|
+
store(state: Uint8Array): void;
|
|
58
|
+
/**
|
|
59
|
+
* Get a cached state by its stateId.
|
|
60
|
+
* Returns a copy of the cached state, or undefined if not found.
|
|
61
|
+
*
|
|
62
|
+
* @param stateId - 32-byte stateId to look up
|
|
63
|
+
* @returns Copy of cached state, or undefined
|
|
64
|
+
*/
|
|
65
|
+
getByStateId(stateId: Uint8Array): Uint8Array | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Get the cached state that would result from a state transition.
|
|
68
|
+
*
|
|
69
|
+
* This is the key API for rollback optimization:
|
|
70
|
+
* - Computes what the resulting stateId would be
|
|
71
|
+
* - Looks up that stateId in the cache
|
|
72
|
+
* - If found, returns the cached state (avoiding recomputation)
|
|
73
|
+
*
|
|
74
|
+
* @param prevState - Previous state buffer
|
|
75
|
+
* @param tick - Tick number
|
|
76
|
+
* @param orderedPayloadsHash - 32-byte hash of ordered payloads (one per participant at stable indices)
|
|
77
|
+
* @returns Copy of cached state, or undefined if not found
|
|
78
|
+
*/
|
|
79
|
+
getCached(prevState: Uint8Array, tick: number, orderedPayloadsHash: Uint8Array): Uint8Array | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* Check if we have a cached state for a given stateId.
|
|
82
|
+
*
|
|
83
|
+
* @param stateId - 32-byte stateId to check
|
|
84
|
+
* @returns true if cached
|
|
85
|
+
*/
|
|
86
|
+
has(stateId: Uint8Array): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Check if we would have a cached state after a transition.
|
|
89
|
+
*
|
|
90
|
+
* @param prevState - Previous state buffer
|
|
91
|
+
* @param tick - Tick number
|
|
92
|
+
* @param orderedPayloadsHash - 32-byte hash of ordered payloads (one per participant at stable indices)
|
|
93
|
+
* @returns true if we have a cached result for this transition
|
|
94
|
+
*/
|
|
95
|
+
hasCached(prevState: Uint8Array, tick: number, orderedPayloadsHash: Uint8Array): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Remove a cached state by its stateId.
|
|
98
|
+
*
|
|
99
|
+
* @param stateId - 32-byte stateId to remove
|
|
100
|
+
* @returns true if the state was in the cache
|
|
101
|
+
*/
|
|
102
|
+
delete(stateId: Uint8Array): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Clear all cached states.
|
|
105
|
+
*/
|
|
106
|
+
clear(): void;
|
|
107
|
+
/**
|
|
108
|
+
* Get the number of cached states.
|
|
109
|
+
*/
|
|
110
|
+
get size(): number;
|
|
111
|
+
/**
|
|
112
|
+
* Get all cached stateIds (as hex keys).
|
|
113
|
+
* Useful for debugging.
|
|
114
|
+
*/
|
|
115
|
+
keys(): IterableIterator<string>;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAOxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CASpD;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,iBAAsB;IAK3C;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAgB9B;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS;IAMzD;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS;IAMvG;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;IAKjC;;;;;;;OAOG;IACH,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,GAAG,OAAO;IAMxF;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;IAKpC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;OAGG;IACH,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;CAGjC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { InputData, TickMessage } from './messages';
|
|
2
|
+
import { InputGraph, type AsyncTickLog, type GetTicksAfterOptions, type Participant, type PayloadPredictor, type TickNode, type TickPrimitive } from './input-graph';
|
|
3
|
+
export type TickListener = (tick: TickMessage, streamIndex: number) => void;
|
|
4
|
+
export type StateListener = (connected: boolean) => void;
|
|
5
|
+
export type StreamActivityListener = (streamIndex: number) => void;
|
|
6
|
+
export type StreamLifecycleListener = (event: StreamLifecycleEvent) => void;
|
|
7
|
+
export type UnsubscribeFn = () => void;
|
|
8
|
+
export interface StreamLifecycleEvent {
|
|
9
|
+
type: 'added' | 'removed';
|
|
10
|
+
index: number;
|
|
11
|
+
}
|
|
12
|
+
export interface ChannelConfig {
|
|
13
|
+
/** multitap:// connection URL (will be base64-encoded for transport) */
|
|
14
|
+
connectionURL: string;
|
|
15
|
+
serverCertHash: string | null | undefined;
|
|
16
|
+
privateKey?: Uint8Array;
|
|
17
|
+
relayPubKey?: Uint8Array | undefined | null;
|
|
18
|
+
inputPayloadPredictor?: PayloadPredictor | null;
|
|
19
|
+
debug?: boolean | undefined;
|
|
20
|
+
autoConnect?: boolean | undefined;
|
|
21
|
+
connectionTimeoutMs?: number | undefined;
|
|
22
|
+
logSyncTicks?: boolean | undefined;
|
|
23
|
+
}
|
|
24
|
+
export declare class Channel implements AsyncTickLog {
|
|
25
|
+
readonly connectionURL: string;
|
|
26
|
+
readonly serverCertHash: string | null | undefined;
|
|
27
|
+
readonly connectionTimeoutMs: number;
|
|
28
|
+
private privateKey;
|
|
29
|
+
private publicKey;
|
|
30
|
+
private genesisHash;
|
|
31
|
+
private sessionConfig;
|
|
32
|
+
private transport;
|
|
33
|
+
private streams;
|
|
34
|
+
private replayStreams;
|
|
35
|
+
private roundRobinIndex;
|
|
36
|
+
private connectionGeneration;
|
|
37
|
+
private connected;
|
|
38
|
+
private stopped;
|
|
39
|
+
private debug;
|
|
40
|
+
private logSyncTicks;
|
|
41
|
+
private outbox;
|
|
42
|
+
private stateListeners;
|
|
43
|
+
private flushingOutbox;
|
|
44
|
+
private tickRate;
|
|
45
|
+
inputGraph: InputGraph;
|
|
46
|
+
private tickDeadlineWants;
|
|
47
|
+
private tickDeadlineTimer;
|
|
48
|
+
private tickDeadlineGrace;
|
|
49
|
+
private stats;
|
|
50
|
+
constructor(config: ChannelConfig);
|
|
51
|
+
connect(): Promise<void>;
|
|
52
|
+
getPublicKey(): Promise<Uint8Array<ArrayBufferLike>>;
|
|
53
|
+
getGenesisHash(): Promise<Uint8Array<ArrayBufferLike>>;
|
|
54
|
+
onStateChange(fn: StateListener): UnsubscribeFn;
|
|
55
|
+
getStats(): {
|
|
56
|
+
activeStreams: number;
|
|
57
|
+
totalStreams: number;
|
|
58
|
+
messagesRecv: number;
|
|
59
|
+
messagesSent: number;
|
|
60
|
+
reconnections: number;
|
|
61
|
+
};
|
|
62
|
+
getTickRate(): Promise<number>;
|
|
63
|
+
getParticipantSlots(tick: number): Promise<Participant[]>;
|
|
64
|
+
getSyncHead(): Promise<TickNode>;
|
|
65
|
+
getPredictedHead(): Promise<TickNode>;
|
|
66
|
+
addSyncTick(msg: TickMessage): Promise<void>;
|
|
67
|
+
addOptimisticInput(input: InputData, preVerifiedSigner?: Uint8Array): Promise<void>;
|
|
68
|
+
getPredictionCount(): Promise<number>;
|
|
69
|
+
getTicksAfter(nodeId: string | null, options?: GetTicksAfterOptions): Promise<TickPrimitive[]>;
|
|
70
|
+
setOnParticipantJoined(fn: (participant: Participant) => void): Promise<void>;
|
|
71
|
+
expose(port: MessagePort): Promise<void>;
|
|
72
|
+
close(): Promise<void>;
|
|
73
|
+
private _setConnected;
|
|
74
|
+
private _send;
|
|
75
|
+
private _generateNullInput;
|
|
76
|
+
sendSignedInput(payload: Uint8Array, targetTick?: number): Promise<Uint8Array>;
|
|
77
|
+
private _nextStream;
|
|
78
|
+
private _connectLoop;
|
|
79
|
+
private _acceptStreamsLoop;
|
|
80
|
+
private _addStream;
|
|
81
|
+
private _dropStream;
|
|
82
|
+
private _cleanupHandle;
|
|
83
|
+
private _flushOutbox;
|
|
84
|
+
private _cleanupTransport;
|
|
85
|
+
private _readLoop;
|
|
86
|
+
private _maybeResetDeadline;
|
|
87
|
+
private _resetDeadline;
|
|
88
|
+
private _onTickDeadlineExceeded;
|
|
89
|
+
private _concatBuffers;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.worker.d.ts","sourceRoot":"","sources":["../../src/channel.worker.ts"],"names":[],"mappings":"wBAMkC,UAAU,MAAM;AAAlD,wBAAmD"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loading and plugin graph management for codegen.
|
|
3
|
+
*
|
|
4
|
+
* This module provides:
|
|
5
|
+
* - Config type matching mt.config.json structure
|
|
6
|
+
* - Project loading and config file discovery
|
|
7
|
+
* - Plugin dependency graph construction
|
|
8
|
+
* - Schema merging across plugins
|
|
9
|
+
*
|
|
10
|
+
* @module codegen/config
|
|
11
|
+
*/
|
|
12
|
+
import type { StateSchema, InputSchema } from '../schema';
|
|
13
|
+
/**
|
|
14
|
+
* WASM configuration for plugins.
|
|
15
|
+
*/
|
|
16
|
+
export interface WasmConfig {
|
|
17
|
+
/** Number of bytes to reserve in shared WASM memory for this plugin */
|
|
18
|
+
reservedBytes: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Root configuration structure (mt.config.json).
|
|
22
|
+
*/
|
|
23
|
+
export interface Config {
|
|
24
|
+
appID: string;
|
|
25
|
+
entrypoint: string;
|
|
26
|
+
output: string;
|
|
27
|
+
tests?: string[];
|
|
28
|
+
tickRate: number;
|
|
29
|
+
maxTicks: number;
|
|
30
|
+
maxParticipants: number;
|
|
31
|
+
plugins?: string[];
|
|
32
|
+
wasm?: WasmConfig;
|
|
33
|
+
input: InputSchema;
|
|
34
|
+
state: StateSchema;
|
|
35
|
+
fixtures?: unknown;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A loaded project with its configuration and paths.
|
|
39
|
+
*/
|
|
40
|
+
export interface Project {
|
|
41
|
+
/** Parsed project configuration */
|
|
42
|
+
config: Config;
|
|
43
|
+
/** Absolute path to the config file */
|
|
44
|
+
configPath: string;
|
|
45
|
+
/** Absolute path to the project directory */
|
|
46
|
+
dir: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A node in the plugin dependency graph.
|
|
50
|
+
*/
|
|
51
|
+
export interface PluginNode {
|
|
52
|
+
/** Absolute path to the plugin directory */
|
|
53
|
+
path: string;
|
|
54
|
+
/** Parsed plugin configuration */
|
|
55
|
+
config: Config;
|
|
56
|
+
/** Absolute paths of plugins this node depends on */
|
|
57
|
+
dependencies: string[];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The complete plugin dependency graph.
|
|
61
|
+
*/
|
|
62
|
+
export interface ConfigGraph {
|
|
63
|
+
/** Root project */
|
|
64
|
+
root: Project;
|
|
65
|
+
/** Plugin nodes mapped by absolute path */
|
|
66
|
+
plugins: Map<string, PluginNode>;
|
|
67
|
+
/** Topologically sorted list of plugin paths (dependencies first) */
|
|
68
|
+
order: string[];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Result of merging all plugin configs.
|
|
72
|
+
*/
|
|
73
|
+
export interface MergedConfig {
|
|
74
|
+
/** Merged configuration with all components */
|
|
75
|
+
config: Config;
|
|
76
|
+
/** Execution order of plugins (dependencies first) */
|
|
77
|
+
pluginOrder: string[];
|
|
78
|
+
/** Maps component names to the plugin path that defined them */
|
|
79
|
+
componentOwners: Map<string, string>;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Find a *mt.config.json file in the given path.
|
|
83
|
+
* If path is a file, returns it directly.
|
|
84
|
+
* If path is a directory, searches for files ending in mt.config.json.
|
|
85
|
+
*/
|
|
86
|
+
export declare function findConfig(path: string): string;
|
|
87
|
+
/**
|
|
88
|
+
* Load and parse a config file.
|
|
89
|
+
*/
|
|
90
|
+
export declare function loadConfig(path: string): Config;
|
|
91
|
+
/**
|
|
92
|
+
* Load a project from the given path.
|
|
93
|
+
* If path is a file, loads that config directly.
|
|
94
|
+
* If path is a directory, searches for a *mt.config.json file.
|
|
95
|
+
*/
|
|
96
|
+
export declare function loadProject(path: string): Project;
|
|
97
|
+
/**
|
|
98
|
+
* Load the complete plugin dependency graph starting from a root project.
|
|
99
|
+
* Uses BFS to walk the dependency DAG.
|
|
100
|
+
*/
|
|
101
|
+
export declare function loadConfigGraph(root: Project): ConfigGraph;
|
|
102
|
+
/**
|
|
103
|
+
* Merge all plugin configs into a single config.
|
|
104
|
+
* Components and events are merged in topological order with conflict detection.
|
|
105
|
+
*/
|
|
106
|
+
export declare function mergeConfigs(graph: ConfigGraph): MergedConfig;
|
|
107
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/codegen/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAA0B,MAAM,WAAW,CAAC;AAMlF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uEAAuE;IACvE,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAMD;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mBAAmB;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,2CAA2C;IAC3C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjC,qEAAqE;IACrE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gEAAgE;IAChE,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAMD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoB/C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ/C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUjD;AAgBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAsE1D;AAsDD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CAqF7D"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code generator interface and utilities for codegen.
|
|
3
|
+
*
|
|
4
|
+
* This module defines the Generator interface and provides common utilities
|
|
5
|
+
* for name conversion and type mapping used by language-specific generators.
|
|
6
|
+
*
|
|
7
|
+
* @module codegen/generator
|
|
8
|
+
*/
|
|
9
|
+
import type { CompiledStateSchema, CompiledInputSchema } from '../schema';
|
|
10
|
+
/**
|
|
11
|
+
* Options for code generators.
|
|
12
|
+
*/
|
|
13
|
+
export interface GeneratorOptions {
|
|
14
|
+
/** Optional plugin name for prefixing (e.g., "physics") */
|
|
15
|
+
pluginName?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Code generator interface.
|
|
19
|
+
* Implementations produce language-specific code from compiled schemas.
|
|
20
|
+
*/
|
|
21
|
+
export interface Generator {
|
|
22
|
+
/** The target language */
|
|
23
|
+
readonly language: 'typescript' | 'rust';
|
|
24
|
+
/**
|
|
25
|
+
* Generate state accessor code from a compiled state schema.
|
|
26
|
+
* @param schema - Compiled state schema with layout information
|
|
27
|
+
* @returns Generated source code as a string
|
|
28
|
+
*/
|
|
29
|
+
generateState(schema: CompiledStateSchema): string;
|
|
30
|
+
/**
|
|
31
|
+
* Generate input codec code from a compiled input schema.
|
|
32
|
+
* @param schema - Compiled input schema with control/command information
|
|
33
|
+
* @returns Generated source code as a string
|
|
34
|
+
*/
|
|
35
|
+
generateInput(schema: CompiledInputSchema): string;
|
|
36
|
+
/**
|
|
37
|
+
* Generate combined game module with both state and input.
|
|
38
|
+
* @param state - Compiled state schema
|
|
39
|
+
* @param input - Compiled input schema
|
|
40
|
+
* @returns Generated source code as a string
|
|
41
|
+
*/
|
|
42
|
+
generateGame(state: CompiledStateSchema, input: CompiledInputSchema): string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Convert a string from PascalCase/camelCase to UPPER_SNAKE_CASE.
|
|
46
|
+
* @example toUpperSnake("RigidBodyType") // "RIGID_BODY_TYPE"
|
|
47
|
+
* @example toUpperSnake("shapeType") // "SHAPE_TYPE"
|
|
48
|
+
*/
|
|
49
|
+
export declare function toUpperSnake(s: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Convert a string to lower_snake_case.
|
|
52
|
+
* @example toLowerSnake("RigidBodyType") // "rigid_body_type"
|
|
53
|
+
* @example toLowerSnake("PlayerIndex") // "player_index"
|
|
54
|
+
*/
|
|
55
|
+
export declare function toLowerSnake(s: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Convert a string to camelCase.
|
|
58
|
+
* @example toCamelCase("player_index") // "playerIndex"
|
|
59
|
+
* @example toCamelCase("RIGID_BODY_TYPE") // "rigidBodyType"
|
|
60
|
+
*/
|
|
61
|
+
export declare function toCamelCase(s: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Convert a string to PascalCase.
|
|
64
|
+
* @example toPascalCase("player_index") // "PlayerIndex"
|
|
65
|
+
* @example toPascalCase("rigidBodyType") // "RigidBodyType"
|
|
66
|
+
*/
|
|
67
|
+
export declare function toPascalCase(s: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Parse array type string like "uint16[8]" into [elementType, length].
|
|
70
|
+
* Returns null if not a valid array type (must have primitive element type).
|
|
71
|
+
* Matches Go's ParseArrayType behavior which only allows primitive element types.
|
|
72
|
+
*/
|
|
73
|
+
export declare function parseArrayType(type: string): [string, number] | null;
|
|
74
|
+
/** Check if a type needs endianness handling (multi-byte types) */
|
|
75
|
+
export declare function needsEndian(type: string): boolean;
|
|
76
|
+
/** Get the element size for a primitive type */
|
|
77
|
+
export declare function getElementSize(type: string): number;
|
|
78
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/codegen/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAM1E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,0BAA0B;IAC1B,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC;IAEzC;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAEnD;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAEnD;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAAC;CAC9E;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU9C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU9C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAiB9C;AAmBD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CASpE;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjD;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBnD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code generation module for Multitap.
|
|
3
|
+
*
|
|
4
|
+
* Provides TypeScript and Rust code generators from compiled schemas.
|
|
5
|
+
*
|
|
6
|
+
* @module codegen
|
|
7
|
+
*/
|
|
8
|
+
export { type Config, type WasmConfig, type Project, type PluginNode, type ConfigGraph, type MergedConfig, findConfig, loadConfig, loadProject, loadConfigGraph, mergeConfigs, } from './config';
|
|
9
|
+
export { buildPlayerComponent, injectPlayerComponent, buildCommandEvents, injectCommandEvents, prepareStateSchema, } from './inject';
|
|
10
|
+
export { type Generator, type GeneratorOptions, toUpperSnake, toLowerSnake, toCamelCase, toPascalCase, parseArrayType, needsEndian, getElementSize, } from './generator';
|
|
11
|
+
export { TypeScriptGenerator } from './typescript';
|
|
12
|
+
export { RustGenerator } from './rust';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/codegen/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,UAAU,EACV,UAAU,EACV,WAAW,EACX,eAAe,EACf,YAAY,GACb,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Player component and command event injection for codegen.
|
|
3
|
+
*
|
|
4
|
+
* This module provides functions to automatically generate:
|
|
5
|
+
* - Player component from input schema controls
|
|
6
|
+
* - Command events from input schema commands
|
|
7
|
+
*
|
|
8
|
+
* @module codegen/inject
|
|
9
|
+
*/
|
|
10
|
+
import type { StateSchema, ComponentDef, EventDef, CompiledInputSchema } from '../schema';
|
|
11
|
+
/**
|
|
12
|
+
* Build a Player component definition from compiled input schema controls.
|
|
13
|
+
*
|
|
14
|
+
* The Player component contains:
|
|
15
|
+
* - `index` field (uint8) - identifies which player owns this entity
|
|
16
|
+
* - One field per control, with vec2/vec3/quat flattened to x/y/z/w components
|
|
17
|
+
* - Flag types (flags8/16/32) map to uint8/16/32
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildPlayerComponent(inputSchema: CompiledInputSchema): ComponentDef;
|
|
20
|
+
/**
|
|
21
|
+
* Inject the Player component into a state schema.
|
|
22
|
+
* Mutates the schema in place.
|
|
23
|
+
*
|
|
24
|
+
* @throws Error if schema already contains a 'Player' component
|
|
25
|
+
*/
|
|
26
|
+
export declare function injectPlayerComponent(schema: {
|
|
27
|
+
components: ComponentDef[];
|
|
28
|
+
}, inputSchema: CompiledInputSchema): void;
|
|
29
|
+
/**
|
|
30
|
+
* Build event definitions from compiled input schema commands.
|
|
31
|
+
*
|
|
32
|
+
* Each command becomes a `{Name}Command` event with:
|
|
33
|
+
* - `player_index` field (uint8) - identifies which player issued the command
|
|
34
|
+
* - One field per command argument, with vec2/vec3/quat flattened to x/y/z/w components
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildCommandEvents(inputSchema: CompiledInputSchema): EventDef[];
|
|
37
|
+
/**
|
|
38
|
+
* Inject command-derived events into a state schema.
|
|
39
|
+
* Mutates the schema in place.
|
|
40
|
+
*
|
|
41
|
+
* @throws Error if schema already contains an event with a conflicting name
|
|
42
|
+
*/
|
|
43
|
+
export declare function injectCommandEvents(schema: {
|
|
44
|
+
events?: EventDef[];
|
|
45
|
+
}, inputSchema: CompiledInputSchema): void;
|
|
46
|
+
/**
|
|
47
|
+
* Prepare a state schema for codegen by injecting Player component and command events.
|
|
48
|
+
* Returns a new schema object (does not mutate the original).
|
|
49
|
+
*/
|
|
50
|
+
export declare function prepareStateSchema(stateSchema: StateSchema, inputSchema: CompiledInputSchema): StateSchema;
|
|
51
|
+
//# sourceMappingURL=inject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../../src/codegen/inject.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,QAAQ,EAER,mBAAmB,EACpB,MAAM,WAAW,CAAC;AAMnB;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,mBAAmB,GAAG,YAAY,CAgDnF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE;IAAE,UAAU,EAAE,YAAY,EAAE,CAAA;CAAE,EACtC,WAAW,EAAE,mBAAmB,GAC/B,IAAI,CAWN;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,mBAAmB,GAAG,QAAQ,EAAE,CAyD/E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAA;CAAE,EAC/B,WAAW,EAAE,mBAAmB,GAC/B,IAAI,CAsBN;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,mBAAmB,GAC/B,WAAW,CAeb"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rust code generator for state and input bindings.
|
|
3
|
+
*
|
|
4
|
+
* Generates Rust code from compiled schemas using template literals.
|
|
5
|
+
*
|
|
6
|
+
* @module codegen/rust
|
|
7
|
+
*/
|
|
8
|
+
import type { CompiledStateSchema, CompiledInputSchema } from '../schema';
|
|
9
|
+
import type { Generator, GeneratorOptions } from './generator';
|
|
10
|
+
/**
|
|
11
|
+
* Rust code generator.
|
|
12
|
+
* Generates Rust accessors for state and input schemas.
|
|
13
|
+
*/
|
|
14
|
+
export declare class RustGenerator implements Generator {
|
|
15
|
+
readonly language: "rust";
|
|
16
|
+
private opts;
|
|
17
|
+
constructor(opts?: GeneratorOptions);
|
|
18
|
+
generateState(schema: CompiledStateSchema): string;
|
|
19
|
+
generateInput(schema: CompiledInputSchema): string;
|
|
20
|
+
generateGame(state: CompiledStateSchema, input: CompiledInputSchema): string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=rust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../src/codegen/rust.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAKpB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAy5C/D;;;GAGG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IACpC,OAAO,CAAC,IAAI,CAAmB;gBAEnB,IAAI,GAAE,gBAAqB;IAIvC,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IA2ClD,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IA2BlD,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM;CAe7E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript code generator for state and input bindings.
|
|
3
|
+
*
|
|
4
|
+
* Generates TypeScript code from compiled schemas using template literals.
|
|
5
|
+
*
|
|
6
|
+
* @module codegen/typescript
|
|
7
|
+
*/
|
|
8
|
+
import type { CompiledStateSchema, CompiledInputSchema } from '../schema';
|
|
9
|
+
import type { Generator, GeneratorOptions } from './generator';
|
|
10
|
+
/**
|
|
11
|
+
* TypeScript code generator.
|
|
12
|
+
* Generates TypeScript accessors for state and input schemas.
|
|
13
|
+
*/
|
|
14
|
+
export declare class TypeScriptGenerator implements Generator {
|
|
15
|
+
readonly language: "typescript";
|
|
16
|
+
private opts;
|
|
17
|
+
constructor(opts?: GeneratorOptions);
|
|
18
|
+
generateState(schema: CompiledStateSchema): string;
|
|
19
|
+
generateInput(schema: CompiledInputSchema): string;
|
|
20
|
+
generateGame(state: CompiledStateSchema, input: CompiledInputSchema): string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=typescript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/codegen/typescript.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAMpB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAklD/D;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,SAAS;IACnD,QAAQ,CAAC,QAAQ,EAAG,YAAY,CAAU;IAC1C,OAAO,CAAC,IAAI,CAAmB;gBAEnB,IAAI,GAAE,gBAAqB;IAIvC,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IA0ClD,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IAyClD,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM;CAG7E"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Maximum ticks the predicted head can run ahead of sync head before stalling */
|
|
2
|
+
export declare const ROLLBACK_WINDOW = 20;
|
|
3
|
+
/** Range around current tick where inputs are valid (±10 ticks) */
|
|
4
|
+
export declare const INPUT_VALIDITY_WINDOW = 10;
|
|
5
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAGA,kFAAkF;AAClF,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,mEAAmE;AACnE,eAAO,MAAM,qBAAqB,KAAK,CAAC"}
|