quake2ts 0.0.582 → 0.0.584

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.
@@ -7,8 +7,6 @@ import { NetworkTransport, Server, ServerStatic, Client, ClientState, ClientFram
7
7
  import { ImageData } from '@napi-rs/canvas';
8
8
  import { vec3 } from 'gl-matrix';
9
9
  import { Camera } from '@quake2ts/engine';
10
- import { LaunchOptions, BrowserContextOptions, Browser, BrowserContext, Page } from 'playwright';
11
- import { Server as Server$1 } from 'http';
12
10
 
13
11
  interface BinaryWriterMock {
14
12
  writeByte: Mock<[number], void>;
@@ -678,21 +676,24 @@ declare function setupBrowserEnvironment(options?: BrowserSetupOptions): void;
678
676
  */
679
677
  declare function teardownBrowserEnvironment(): void;
680
678
 
681
- interface DrawCall {
682
- method: string;
683
- args: any[];
684
- }
685
679
  /**
686
- * Creates a mock canvas element with WebGL2 support.
680
+ * Creates a mock HTMLCanvasElement backed by napi-rs/canvas,
681
+ * with support for both 2D and WebGL2 contexts.
687
682
  */
688
683
  declare function createMockCanvas(width?: number, height?: number): HTMLCanvasElement;
689
684
  /**
690
- * Creates a mock 2D rendering context.
685
+ * Creates a mock CanvasRenderingContext2D.
691
686
  */
692
687
  declare function createMockCanvasContext2D(canvas?: HTMLCanvasElement): CanvasRenderingContext2D;
693
688
  /**
694
- * Spies on draw operations for verification.
695
- * Note: This modifies the context prototype or instance methods.
689
+ * Information about a captured draw call.
690
+ */
691
+ interface DrawCall {
692
+ method: string;
693
+ args: any[];
694
+ }
695
+ /**
696
+ * Wraps a CanvasRenderingContext2D to capture all method calls.
696
697
  */
697
698
  declare function captureCanvasDrawCalls(context: CanvasRenderingContext2D): DrawCall[];
698
699
  /**
@@ -700,7 +701,7 @@ declare function captureCanvasDrawCalls(context: CanvasRenderingContext2D): Draw
700
701
  */
701
702
  declare function createMockImageData(width: number, height: number, fillColor?: [number, number, number, number]): ImageData;
702
703
  /**
703
- * Creates a mock Image element.
704
+ * Creates a mock HTMLImageElement.
704
705
  */
705
706
  declare function createMockImage(width?: number, height?: number, src?: string): HTMLImageElement;
706
707
 
@@ -709,54 +710,76 @@ declare function createMockGPUDevice(): Partial<GPUDevice>;
709
710
  declare function createMockGPUCanvasContext(): Partial<GPUCanvasContext>;
710
711
  declare function setupWebGPUMocks(): void;
711
712
 
713
+ /**
714
+ * Interface for the mock RequestAnimationFrame implementation.
715
+ */
712
716
  interface MockRAF {
713
- tick(timestamp?: number): void;
714
- advance(deltaMs?: number): void;
715
- getCallbacks(): FrameRequestCallback[];
716
- reset(): void;
717
- enable(): void;
718
- disable(): void;
717
+ /**
718
+ * Advances time by one tick (simulating one frame).
719
+ * @param time Timestamp to pass to callbacks (default: calls Date.now())
720
+ */
721
+ tick(time?: number): void;
722
+ /**
723
+ * Advances time by a specific amount, triggering multiple frames if necessary.
724
+ * Not fully implemented in simple version, acts as alias to tick() with specific time.
725
+ */
726
+ advance(ms: number): void;
727
+ /**
728
+ * Returns current pending callbacks.
729
+ */
730
+ getCallbacks(): Array<{
731
+ id: number;
732
+ callback: FrameRequestCallback;
733
+ }>;
719
734
  }
720
735
  /**
721
- * Creates a mock implementation of requestAnimationFrame that allows manual control.
722
- * It replaces the global requestAnimationFrame and cancelAnimationFrame.
736
+ * Creates a mock RequestAnimationFrame implementation.
737
+ * Replaces global.requestAnimationFrame and cancelAnimationFrame.
723
738
  */
724
739
  declare function createMockRAF(): MockRAF;
725
740
  /**
726
- * Creates a mock Performance object with controllable time.
741
+ * Creates a mock Performance object.
727
742
  */
728
743
  declare function createMockPerformance(startTime?: number): Performance;
729
744
  interface ControlledTimer {
730
- tick(): void;
745
+ /**
746
+ * Advances virtual time by ms.
747
+ */
731
748
  advanceBy(ms: number): void;
749
+ /**
750
+ * Runs all pending timers.
751
+ */
752
+ runAll(): void;
753
+ /**
754
+ * Restores original timer functions.
755
+ */
732
756
  clear(): void;
733
- restore(): void;
734
757
  }
735
758
  /**
736
- * Creates a controlled timer that replaces global setTimeout/setInterval.
737
- * Allows deterministic time advancement.
759
+ * Creates controlled timers (setTimeout/setInterval).
760
+ * Note: Use verify's useFakeTimers() for better integration with test runner.
761
+ * This is a lightweight alternative or specific helper.
738
762
  */
739
763
  declare function createControlledTimer(): ControlledTimer;
740
764
  /**
741
- * Helper to simulate multiple frames of a game loop.
742
- * @param count Number of frames to simulate
743
- * @param frameTimeMs Time per frame in milliseconds
744
- * @param callback Optional callback to run inside the loop (e.g. triggering inputs)
765
+ * Simulates multiple RAF frames.
745
766
  */
746
- declare function simulateFrames(count: number, frameTimeMs?: number, callback?: (frameIndex: number) => void): void;
767
+ declare function simulateFrames(count: number, frameTime?: number, callback?: (frameIndex: number) => void): void;
768
+
747
769
  /**
748
- * Simulates frames using a provided MockRAF controller.
770
+ * Setup helpers for Node.js environments.
749
771
  */
750
- declare function simulateFramesWithMock(mock: MockRAF, count: number, frameTimeMs?: number, callback?: (frameIndex: number) => void): void;
751
-
752
772
  interface NodeSetupOptions {
753
- polyfillFetch?: boolean;
754
773
  }
755
774
  /**
756
775
  * Sets up a Node.js environment for testing.
757
- * This is primarily for backend or shared logic that doesn't rely on browser APIs.
776
+ * Currently a placeholder for future Node-specific setup.
758
777
  */
759
778
  declare function setupNodeEnvironment(options?: NodeSetupOptions): void;
779
+ /**
780
+ * Teardown for Node.js environment.
781
+ */
782
+ declare function teardownNodeEnvironment(): void;
760
783
 
761
784
  interface ShaderRecord {
762
785
  readonly id: number;
@@ -939,46 +962,47 @@ interface MockRenderingContext {
939
962
  declare function createMockRenderingContext(): MockRenderingContext;
940
963
 
941
964
  /**
942
- * Creates a mock Storage implementation (localStorage/sessionStorage).
965
+ * Creates a mock LocalStorage instance.
943
966
  */
944
967
  declare function createMockLocalStorage(initialData?: Record<string, string>): Storage;
945
968
  /**
946
- * Creates a mock SessionStorage implementation.
947
- * Functionally identical to LocalStorage mock but distinct for testing isolation.
969
+ * Creates a mock SessionStorage instance.
948
970
  */
949
971
  declare function createMockSessionStorage(initialData?: Record<string, string>): Storage;
950
972
  /**
951
973
  * Creates a mock IndexedDB factory.
952
- * Currently relies on 'fake-indexeddb/auto' being imported which mocks the global indexedDB.
953
- * This helper ensures the global is available or resets it.
974
+ * Wraps fake-indexeddb.
954
975
  */
955
- declare function createMockIndexedDB(): IDBFactory;
976
+ declare function createMockIndexedDB(databases?: IDBDatabase[]): IDBFactory;
956
977
  interface StorageScenario {
957
- storage: Storage | IDBFactory;
958
- populate(data: Record<string, any>): Promise<void> | void;
959
- verify(key: string, value: any): Promise<boolean> | boolean;
978
+ localStorage: Storage;
979
+ sessionStorage: Storage;
980
+ indexedDB: IDBFactory;
960
981
  }
961
982
  /**
962
- * Helper to setup a storage test scenario.
983
+ * Creates a complete storage test scenario.
963
984
  */
964
985
  declare function createStorageTestScenario(storageType?: 'local' | 'session' | 'indexed'): StorageScenario;
965
986
 
966
- declare function createMockAudioContext(): AudioContext;
967
987
  /**
968
- * Replaces the global AudioContext with a mock.
988
+ * Mocks for Web Audio API.
989
+ */
990
+ /**
991
+ * Sets up a mock AudioContext globally.
969
992
  */
970
993
  declare function setupMockAudioContext(): void;
971
994
  /**
972
- * Restores the original AudioContext (if it was mocked).
995
+ * Restores original AudioContext.
973
996
  */
974
997
  declare function teardownMockAudioContext(): void;
975
998
  interface AudioEvent {
976
999
  type: string;
977
- args: any[];
1000
+ data?: any;
978
1001
  }
979
1002
  /**
980
- * Captures audio operations for verification.
981
- * Note: Only works if the context was created via createMockAudioContext which proxies calls.
1003
+ * Captures audio events from a context.
1004
+ * Requires the context to be instrumented or mocked to emit events.
1005
+ * This helper currently works with the `setupMockAudioContext` mock if extended.
982
1006
  */
983
1007
  declare function captureAudioEvents(context: AudioContext): AudioEvent[];
984
1008
 
@@ -1102,93 +1126,80 @@ declare function createViewTestScenario(scenarioType: 'firstPerson' | 'thirdPers
1102
1126
  */
1103
1127
  declare function simulateCameraMovement(camera: Camera, input: CameraInput, deltaTime: number): Camera;
1104
1128
 
1105
- /**
1106
- * Interface for Test Client options
1107
- */
1108
1129
  interface PlaywrightOptions {
1109
1130
  headless?: boolean;
1110
- width?: number;
1111
- height?: number;
1112
- clientUrl?: string;
1113
- serverUrl?: string;
1114
- rootPath?: string;
1115
- launchOptions?: LaunchOptions;
1116
- contextOptions?: BrowserContextOptions;
1131
+ viewport?: {
1132
+ width: number;
1133
+ height: number;
1134
+ };
1117
1135
  }
1118
1136
  interface PlaywrightTestClient {
1119
- browser: Browser;
1120
- context: BrowserContext;
1121
- page: Page;
1122
- server?: Server$1;
1123
- close: () => Promise<void>;
1124
- navigate: (url?: string) => Promise<void>;
1125
- waitForGame: (timeout?: number) => Promise<void>;
1126
- injectInput: (type: string, data: any) => Promise<void>;
1137
+ page: any;
1138
+ browser: any;
1139
+ navigate(url: string): Promise<void>;
1140
+ waitForGame(): Promise<void>;
1141
+ injectInput(type: string, data: any): Promise<void>;
1142
+ screenshot(name: string): Promise<Buffer>;
1143
+ close(): Promise<void>;
1127
1144
  }
1128
1145
  /**
1129
- * Creates a Playwright-controlled browser environment for testing.
1130
- * Can start a static server to serve the game client if no clientUrl is provided.
1146
+ * Creates a Playwright test client.
1147
+ * Note: Requires playwright to be installed in the project.
1131
1148
  */
1132
1149
  declare function createPlaywrightTestClient(options?: PlaywrightOptions): Promise<PlaywrightTestClient>;
1133
- declare function waitForGameReady(page: Page, timeout?: number): Promise<void>;
1150
+ /**
1151
+ * Waits for the game to be ready.
1152
+ */
1153
+ declare function waitForGameReady(page: any, timeout?: number): Promise<void>;
1134
1154
  interface GameStateCapture {
1135
- [key: string]: any;
1155
+ time: number;
1156
+ entities: number;
1136
1157
  }
1137
- declare function captureGameState(page: Page): Promise<GameStateCapture>;
1158
+ /**
1159
+ * Captures current game state from the browser.
1160
+ */
1161
+ declare function captureGameState(page: any): Promise<GameStateCapture>;
1138
1162
 
1163
+ type NetworkCondition = 'good' | 'slow' | 'unstable' | 'offline' | 'custom';
1139
1164
  interface NetworkSimulator {
1140
- apply(page: any): Promise<void>;
1141
- clear(page: any): Promise<void>;
1142
- }
1143
- type NetworkCondition = 'good' | 'slow' | 'unstable' | 'offline';
1144
- interface NetworkConfig {
1145
- offline: boolean;
1146
- downloadThroughput: number;
1147
- uploadThroughput: number;
1148
1165
  latency: number;
1166
+ jitter: number;
1167
+ packetLoss: number;
1168
+ bandwidth: number;
1149
1169
  }
1150
1170
  /**
1151
- * Simulates network conditions using Chrome DevTools Protocol (CDP) via Playwright.
1171
+ * Simulates network conditions.
1152
1172
  */
1153
1173
  declare function simulateNetworkCondition(condition: NetworkCondition): NetworkSimulator;
1154
1174
  /**
1155
- * Creates a custom network condition simulator.
1156
- *
1157
- * @param latency Latency in milliseconds
1158
- * @param jitter Approximate jitter (variation in latency) - Note: CDP doesn't support jitter natively.
1159
- * @param packetLoss Packet loss percentage (0-100) - Ignored for basic CDP emulation.
1175
+ * Creates a custom network condition.
1160
1176
  */
1161
- declare function createCustomNetworkCondition(latency: number, jitter?: number, packetLoss?: number, baseConfig?: NetworkConfig): NetworkSimulator;
1177
+ declare function createCustomNetworkCondition(latency: number, jitter: number, packetLoss: number): NetworkSimulator;
1162
1178
  /**
1163
- * Throttles bandwidth for the given page.
1179
+ * Helper to throttle bandwidth (e.g. for Playwright).
1164
1180
  */
1165
- declare function throttleBandwidth(page: any, bytesPerSecond: number): Promise<void>;
1181
+ declare function throttleBandwidth(bytesPerSecond: number): void;
1166
1182
 
1167
1183
  interface VisualDiff {
1168
- pixelDiff: number;
1169
- diffPath?: string;
1170
- matched: boolean;
1184
+ diffPercentage: number;
1185
+ diffImage?: Buffer;
1171
1186
  }
1172
1187
  /**
1173
- * Captures a screenshot of the current game state.
1188
+ * Captures a screenshot of the game.
1174
1189
  */
1175
- declare function captureGameScreenshot(page: Page, name: string, options?: {
1176
- dir?: string;
1177
- fullPage?: boolean;
1178
- }): Promise<Buffer>;
1190
+ declare function captureGameScreenshot(page: any, name: string): Promise<Buffer>;
1179
1191
  /**
1180
- * Compares two image buffers pixel-by-pixel.
1181
- * Note: A robust implementation would use a library like 'pixelmatch' or 'looks-same'.
1182
- * For now, we provide a basic placeholder or rely on simple buffer comparison.
1192
+ * Compares two screenshots (Buffers).
1193
+ * Uses a pixel comparison library if available, or simple buffer check.
1183
1194
  */
1184
- declare function compareScreenshots(baseline: Buffer, current: Buffer, threshold?: number): Promise<VisualDiff>;
1195
+ declare function compareScreenshots(baseline: Buffer, current: Buffer, threshold?: number): VisualDiff;
1185
1196
  interface VisualScenario {
1186
- capture(name: string): Promise<Buffer>;
1187
- compare(name: string, baselineDir: string): Promise<VisualDiff>;
1197
+ sceneName: string;
1198
+ setup: () => Promise<void>;
1188
1199
  }
1189
1200
  /**
1190
- * Creates a helper for visual regression testing scenarios.
1201
+ * Creates a visual test scenario.
1191
1202
  */
1192
- declare function createVisualTestScenario(page: Page, sceneName: string): VisualScenario;
1203
+ declare function createVisualTestScenario(sceneName: string): VisualScenario;
1193
1204
 
1194
- export { type AudioEvent, type BandwidthScenario, type BinaryStreamMock, type BinaryWriterMock, type BrowserSetupOptions, type CameraInput, type Connection, type ConsistencyReport, type ControlledTimer, type DeltaSnapshot, type DrawCall, type GameState, type GameStateCapture, type Handshake, HandshakeStage, InputInjector, type KeyModifiers, type MasterServer, type Message, type MockAI, type MockCollisionEntityIndex, type MockDamageInfo, type MockEngine, type MockGame, type MockMonsterAI, MockPointerLock, type MockRAF, type MockRConClient, type MockRenderingContext, type MockServer, type MockServerConsole, type MockServerContext, MockTransport, type MockUDPSocket, MockWebGL2RenderingContext, type MultiplayerScenario, type NetworkAddress, type NetworkCondition, type NetworkConfig, type NetworkSimulator, type NodeSetupOptions, type PlaywrightOptions, type PlaywrightTestClient, type RateLimiter, type RefDef, type ServerInfo, type ServerListFilter, type Snapshot, type StorageScenario, type TestContext, type UserInfo, type ViewScenario, type ViewState, type VisualDiff, type VisualScenario, captureAudioEvents, captureCanvasDrawCalls, captureGameScreenshot, captureGameState, compareScreenshots, createBandwidthTestScenario, createBinaryStreamMock, createBinaryWriterMock, createCombatTestContext, createControlledTimer, createCustomNetworkCondition, createDeltaSnapshot, createEntity, createEntityFactory, createEntityStateFactory, createGameStateSnapshotFactory, createInputInjector, createItemEntityFactory, createMockAI, createMockAmmoItem, createMockArmorItem, createMockAudioContext, createMockCamera, createMockCanvas, createMockCanvasContext2D, createMockCollisionEntityIndex, createMockConnection, createMockDamageInfo, createMockEngine, createMockGPUAdapter, createMockGPUCanvasContext, createMockGPUDevice, createMockGame, createMockGameExports, createMockGameState, createMockHandshake, createMockHealthItem, createMockImage, createMockImageData, createMockIndexedDB, createMockInventory, createMockItem, createMockKeyboardEvent, createMockLocalStorage, createMockMasterServer, createMockMonsterAI, createMockMonsterMove, createMockMouseEvent, createMockNetDriver, createMockNetworkAddress, createMockPerformance, createMockPointerLock, createMockPowerupItem, createMockRAF, createMockRConClient, createMockRateLimiter, createMockRefDef, createMockRenderingContext, createMockServer, createMockServerClient, createMockServerConsole, createMockServerInfo, createMockServerState, createMockServerStatic, createMockSessionStorage, createMockTransport, createMockUDPSocket, createMockUserInfo, createMockViewState, createMockWeapon, createMockWeaponItem, createMockWebGL2Context, createMockWheelEvent, createMonsterEntityFactory, createMultiplayerTestScenario, createNetChanMock, createPhysicsTestContext, createPlayerEntityFactory, createPlayerStateFactory, createPlaywrightTestClient, createProjectileEntityFactory, createServerSnapshot, createSpawnTestContext, createStorageTestScenario, createTestContext, createTriggerEntityFactory, createViewTestScenario, createVisualTestScenario, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, measureSnapshotSize, mockMonsterAttacks, serializeUserInfo, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, setupWebGPUMocks, simulateBandwidthLimit, simulateCameraMovement, simulateFrames, simulateFramesWithMock, simulateHandshake, simulateNetworkCondition, simulatePlayerInput, simulatePlayerJoin, simulatePlayerLeave, simulateServerCommand, simulateServerRegistration, simulateServerTick, simulateSnapshotDelivery, teardownBrowserEnvironment, teardownMockAudioContext, throttleBandwidth, verifySnapshotConsistency, waitForGameReady };
1205
+ export { type AudioEvent, type BandwidthScenario, type BinaryStreamMock, type BinaryWriterMock, type BrowserSetupOptions, type CameraInput, type Connection, type ConsistencyReport, type ControlledTimer, type DeltaSnapshot, type DrawCall, type GameState, type GameStateCapture, type Handshake, HandshakeStage, InputInjector, type KeyModifiers, type MasterServer, type Message, type MockAI, type MockCollisionEntityIndex, type MockDamageInfo, type MockEngine, type MockGame, type MockMonsterAI, MockPointerLock, type MockRAF, type MockRConClient, type MockRenderingContext, type MockServer, type MockServerConsole, type MockServerContext, MockTransport, type MockUDPSocket, MockWebGL2RenderingContext, type MultiplayerScenario, type NetworkAddress, type NetworkCondition, type NetworkSimulator, type NodeSetupOptions, type PlaywrightOptions, type PlaywrightTestClient, type RateLimiter, type RefDef, type ServerInfo, type ServerListFilter, type Snapshot, type StorageScenario, type TestContext, type UserInfo, type ViewScenario, type ViewState, type VisualDiff, type VisualScenario, captureAudioEvents, captureCanvasDrawCalls, captureGameScreenshot, captureGameState, compareScreenshots, createBandwidthTestScenario, createBinaryStreamMock, createBinaryWriterMock, createCombatTestContext, createControlledTimer, createCustomNetworkCondition, createDeltaSnapshot, createEntity, createEntityFactory, createEntityStateFactory, createGameStateSnapshotFactory, createInputInjector, createItemEntityFactory, createMockAI, createMockAmmoItem, createMockArmorItem, createMockCamera, createMockCanvas, createMockCanvasContext2D, createMockCollisionEntityIndex, createMockConnection, createMockDamageInfo, createMockEngine, createMockGPUAdapter, createMockGPUCanvasContext, createMockGPUDevice, createMockGame, createMockGameExports, createMockGameState, createMockHandshake, createMockHealthItem, createMockImage, createMockImageData, createMockIndexedDB, createMockInventory, createMockItem, createMockKeyboardEvent, createMockLocalStorage, createMockMasterServer, createMockMonsterAI, createMockMonsterMove, createMockMouseEvent, createMockNetDriver, createMockNetworkAddress, createMockPerformance, createMockPointerLock, createMockPowerupItem, createMockRAF, createMockRConClient, createMockRateLimiter, createMockRefDef, createMockRenderingContext, createMockServer, createMockServerClient, createMockServerConsole, createMockServerInfo, createMockServerState, createMockServerStatic, createMockSessionStorage, createMockTransport, createMockUDPSocket, createMockUserInfo, createMockViewState, createMockWeapon, createMockWeaponItem, createMockWebGL2Context, createMockWheelEvent, createMonsterEntityFactory, createMultiplayerTestScenario, createNetChanMock, createPhysicsTestContext, createPlayerEntityFactory, createPlayerStateFactory, createPlaywrightTestClient, createProjectileEntityFactory, createServerSnapshot, createSpawnTestContext, createStorageTestScenario, createTestContext, createTriggerEntityFactory, createViewTestScenario, createVisualTestScenario, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, measureSnapshotSize, mockMonsterAttacks, serializeUserInfo, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, setupWebGPUMocks, simulateBandwidthLimit, simulateCameraMovement, simulateFrames, simulateHandshake, simulateNetworkCondition, simulatePlayerInput, simulatePlayerJoin, simulatePlayerLeave, simulateServerCommand, simulateServerRegistration, simulateServerTick, simulateSnapshotDelivery, teardownBrowserEnvironment, teardownMockAudioContext, teardownNodeEnvironment, throttleBandwidth, verifySnapshotConsistency, waitForGameReady };