quake2ts 0.0.556 → 0.0.561

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.
Files changed (31) hide show
  1. package/package.json +3 -1
  2. package/packages/client/dist/browser/index.global.js +17 -17
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +5369 -3577
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +5369 -3577
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/client/dist/types/index.d.ts.map +1 -1
  10. package/packages/engine/dist/cjs/index.cjs +2256 -534
  11. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  12. package/packages/engine/dist/esm/index.js +2266 -538
  13. package/packages/engine/dist/esm/index.js.map +1 -1
  14. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  15. package/packages/engine/dist/types/assets/visibilityAnalyzer.d.ts +7 -2
  16. package/packages/engine/dist/types/assets/visibilityAnalyzer.d.ts.map +1 -1
  17. package/packages/engine/dist/types/render/bloom.d.ts +19 -0
  18. package/packages/engine/dist/types/render/bloom.d.ts.map +1 -0
  19. package/packages/engine/dist/types/render/frame.d.ts +2 -0
  20. package/packages/engine/dist/types/render/frame.d.ts.map +1 -1
  21. package/packages/engine/dist/types/render/renderer.d.ts +2 -0
  22. package/packages/engine/dist/types/render/renderer.d.ts.map +1 -1
  23. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  24. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  25. package/packages/test-utils/dist/index.cjs +1178 -580
  26. package/packages/test-utils/dist/index.cjs.map +1 -1
  27. package/packages/test-utils/dist/index.d.cts +198 -47
  28. package/packages/test-utils/dist/index.d.ts +198 -47
  29. package/packages/test-utils/dist/index.js +1149 -582
  30. package/packages/test-utils/dist/index.js.map +1 -1
  31. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -1,8 +1,204 @@
1
- import { Mock } from 'vitest';
1
+ import { ImageData } from '@napi-rs/canvas';
2
+ import { LaunchOptions, BrowserContextOptions, Browser, BrowserContext, Page } from 'playwright';
3
+ import { Server } from 'http';
2
4
  import { Vec3, CollisionPlane, CollisionBrush, CollisionNode, CollisionLeaf, CollisionModel, PlayerState, EntityState, createRandomGenerator } from '@quake2ts/shared';
3
5
  export { intersects, ladderTrace, stairTrace } from '@quake2ts/shared';
6
+ import { Mock } from 'vitest';
4
7
  import { GameStateSnapshot, Entity, ScriptHookRegistry, SpawnContext, EntitySystem, SpawnRegistry } from '@quake2ts/game';
5
8
 
9
+ interface BrowserSetupOptions {
10
+ url?: string;
11
+ pretendToBeVisual?: boolean;
12
+ resources?: "usable";
13
+ enableWebGL2?: boolean;
14
+ enablePointerLock?: boolean;
15
+ }
16
+ /**
17
+ * Sets up a browser environment for testing using JSDOM and napi-rs/canvas.
18
+ * This should be called in your vitest.setup.ts file.
19
+ */
20
+ declare function setupBrowserEnvironment(options?: BrowserSetupOptions): void;
21
+ /**
22
+ * Cleans up the browser environment.
23
+ */
24
+ declare function teardownBrowserEnvironment(): void;
25
+
26
+ interface DrawCall {
27
+ method: string;
28
+ args: any[];
29
+ }
30
+ /**
31
+ * Creates a mock canvas element with WebGL2 support.
32
+ */
33
+ declare function createMockCanvas(width?: number, height?: number): HTMLCanvasElement;
34
+ /**
35
+ * Creates a mock 2D rendering context.
36
+ */
37
+ declare function createMockCanvasContext2D(canvas?: HTMLCanvasElement): CanvasRenderingContext2D;
38
+ /**
39
+ * Spies on draw operations for verification.
40
+ * Note: This modifies the context prototype or instance methods.
41
+ */
42
+ declare function captureCanvasDrawCalls(context: CanvasRenderingContext2D): DrawCall[];
43
+ /**
44
+ * Creates a mock ImageData object.
45
+ */
46
+ declare function createMockImageData(width: number, height: number, fillColor?: [number, number, number, number]): ImageData;
47
+ /**
48
+ * Creates a mock Image element.
49
+ */
50
+ declare function createMockImage(width?: number, height?: number, src?: string): HTMLImageElement;
51
+
52
+ /**
53
+ * Sets up a Node.js environment for testing.
54
+ * This is primarily for backend or shared logic that doesn't rely on browser APIs.
55
+ */
56
+ declare function setupNodeEnvironment(): void;
57
+
58
+ declare function createMockWebGL2Context(canvas: HTMLCanvasElement): WebGL2RenderingContext;
59
+
60
+ /**
61
+ * Creates a mock Storage implementation (localStorage/sessionStorage).
62
+ */
63
+ declare function createMockLocalStorage(initialData?: Record<string, string>): Storage;
64
+ /**
65
+ * Creates a mock SessionStorage implementation.
66
+ * Functionally identical to LocalStorage mock but distinct for testing isolation.
67
+ */
68
+ declare function createMockSessionStorage(initialData?: Record<string, string>): Storage;
69
+ /**
70
+ * Creates a mock IndexedDB factory.
71
+ * Currently relies on 'fake-indexeddb/auto' being imported which mocks the global indexedDB.
72
+ * This helper ensures the global is available or resets it.
73
+ */
74
+ declare function createMockIndexedDB(): IDBFactory;
75
+ interface StorageScenario {
76
+ storage: Storage;
77
+ populate(data: Record<string, string>): void;
78
+ verify(key: string, value: string): boolean;
79
+ }
80
+ /**
81
+ * Helper to setup a storage test scenario.
82
+ */
83
+ declare function createStorageTestScenario(storageType?: 'local' | 'session'): StorageScenario;
84
+
85
+ declare function createMockAudioContext(): AudioContext;
86
+ /**
87
+ * Replaces the global AudioContext with a mock.
88
+ */
89
+ declare function setupMockAudioContext(): void;
90
+ /**
91
+ * Restores the original AudioContext (if it was mocked).
92
+ */
93
+ declare function teardownMockAudioContext(): void;
94
+ interface AudioEvent {
95
+ type: string;
96
+ args: any[];
97
+ }
98
+ /**
99
+ * Captures audio operations for verification.
100
+ * Currently requires manual instrumentation or a more sophisticated Proxy mock.
101
+ * This is a placeholder for future implementation.
102
+ */
103
+ declare function captureAudioEvents(context: AudioContext): AudioEvent[];
104
+
105
+ interface MockRAF {
106
+ tick(timestamp?: number): void;
107
+ advance(deltaMs?: number): void;
108
+ getCallbacks(): FrameRequestCallback[];
109
+ reset(): void;
110
+ enable(): void;
111
+ disable(): void;
112
+ }
113
+ /**
114
+ * Creates a mock implementation of requestAnimationFrame that allows manual control.
115
+ * It replaces the global requestAnimationFrame and cancelAnimationFrame.
116
+ */
117
+ declare function createMockRAF(): MockRAF;
118
+ /**
119
+ * Creates a mock Performance object with controllable time.
120
+ */
121
+ declare function createMockPerformance(startTime?: number): Performance;
122
+ interface ControlledTimer {
123
+ tick(): void;
124
+ advanceBy(ms: number): void;
125
+ clear(): void;
126
+ restore(): void;
127
+ }
128
+ /**
129
+ * Creates a controlled timer that replaces global setTimeout/setInterval.
130
+ * Allows deterministic time advancement.
131
+ */
132
+ declare function createControlledTimer(): ControlledTimer;
133
+ /**
134
+ * Helper to simulate multiple frames of a game loop.
135
+ * @param count Number of frames to simulate
136
+ * @param frameTimeMs Time per frame in milliseconds
137
+ * @param callback Optional callback to run inside the loop (e.g. triggering inputs)
138
+ */
139
+ declare function simulateFrames(count: number, frameTimeMs?: number, callback?: (frameIndex: number) => void): void;
140
+ /**
141
+ * Simulates frames using a provided MockRAF controller.
142
+ */
143
+ declare function simulateFramesWithMock(mock: MockRAF, count: number, frameTimeMs?: number, callback?: (frameIndex: number) => void): void;
144
+
145
+ /**
146
+ * Interface for Test Client options
147
+ */
148
+ interface PlaywrightOptions {
149
+ headless?: boolean;
150
+ width?: number;
151
+ height?: number;
152
+ clientUrl?: string;
153
+ serverUrl?: string;
154
+ rootPath?: string;
155
+ launchOptions?: LaunchOptions;
156
+ contextOptions?: BrowserContextOptions;
157
+ }
158
+ interface PlaywrightTestClient {
159
+ browser: Browser;
160
+ context: BrowserContext;
161
+ page: Page;
162
+ server?: Server;
163
+ close: () => Promise<void>;
164
+ navigate: (url?: string) => Promise<void>;
165
+ waitForGame: (timeout?: number) => Promise<void>;
166
+ injectInput: (type: string, data: any) => Promise<void>;
167
+ }
168
+ /**
169
+ * Creates a Playwright-controlled browser environment for testing.
170
+ * Can start a static server to serve the game client if no clientUrl is provided.
171
+ */
172
+ declare function createPlaywrightTestClient(options?: PlaywrightOptions): Promise<PlaywrightTestClient>;
173
+ declare function waitForGameReady(page: Page, timeout?: number): Promise<void>;
174
+ interface GameStateCapture {
175
+ [key: string]: any;
176
+ }
177
+ declare function captureGameState(page: Page): Promise<GameStateCapture>;
178
+
179
+ declare class MockPointerLock {
180
+ static setup(doc: Document): void;
181
+ }
182
+ declare class InputInjector {
183
+ private doc;
184
+ private win;
185
+ constructor(doc: Document, win: any);
186
+ keyDown(key: string, code?: string): void;
187
+ keyUp(key: string, code?: string): void;
188
+ mouseMove(movementX: number, movementY: number, clientX?: number, clientY?: number): void;
189
+ mouseDown(button?: number): void;
190
+ mouseUp(button?: number): void;
191
+ wheel(deltaY: number): void;
192
+ }
193
+
194
+ declare function makePlane(normal: Vec3, dist: number): CollisionPlane;
195
+ declare function makeAxisBrush(size: number, contents?: number): CollisionBrush;
196
+ declare function makeNode(plane: CollisionPlane, children: [number, number]): CollisionNode;
197
+ declare function makeBspModel(planes: CollisionPlane[], nodes: CollisionNode[], leaves: CollisionLeaf[], brushes: CollisionBrush[], leafBrushes: number[]): CollisionModel;
198
+ declare function makeLeaf(contents: number, firstLeafBrush: number, numLeafBrushes: number): CollisionLeaf;
199
+ declare function makeLeafModel(brushes: CollisionBrush[]): CollisionModel;
200
+ declare function makeBrushFromMinsMaxs(mins: Vec3, maxs: Vec3, contents?: number): CollisionBrush;
201
+
6
202
  interface BinaryWriterMock {
7
203
  writeByte: Mock<[number], void>;
8
204
  writeShort: Mock<[number], void>;
@@ -81,14 +277,6 @@ interface BinaryStreamMock {
81
277
  }
82
278
  declare const createBinaryStreamMock: () => BinaryStreamMock;
83
279
 
84
- declare function makePlane(normal: Vec3, dist: number): CollisionPlane;
85
- declare function makeAxisBrush(size: number, contents?: number): CollisionBrush;
86
- declare function makeNode(plane: CollisionPlane, children: [number, number]): CollisionNode;
87
- declare function makeBspModel(planes: CollisionPlane[], nodes: CollisionNode[], leaves: CollisionLeaf[], brushes: CollisionBrush[], leafBrushes: number[]): CollisionModel;
88
- declare function makeLeaf(contents: number, firstLeafBrush: number, numLeafBrushes: number): CollisionLeaf;
89
- declare function makeLeafModel(brushes: CollisionBrush[]): CollisionModel;
90
- declare function makeBrushFromMinsMaxs(mins: Vec3, maxs: Vec3, contents?: number): CollisionBrush;
91
-
92
280
  declare const createPlayerStateFactory: (overrides?: Partial<PlayerState>) => PlayerState;
93
281
  declare const createEntityStateFactory: (overrides?: Partial<EntityState>) => EntityState;
94
282
  declare const createGameStateSnapshotFactory: (overrides?: Partial<GameStateSnapshot>) => GameStateSnapshot;
@@ -127,41 +315,4 @@ declare function createTestContext(options?: {
127
315
  declare function createSpawnContext(): SpawnContext;
128
316
  declare function createEntity(): Entity;
129
317
 
130
- interface BrowserSetupOptions {
131
- url?: string;
132
- pretendToBeVisual?: boolean;
133
- }
134
- /**
135
- * Sets up a browser environment for testing using JSDOM and napi-rs/canvas.
136
- * This should be called in your vitest.setup.ts file.
137
- */
138
- declare function setupBrowserEnvironment(options?: BrowserSetupOptions): void;
139
- /**
140
- * Cleans up the browser environment.
141
- */
142
- declare function teardownBrowserEnvironment(): void;
143
-
144
- /**
145
- * Sets up a Node.js environment for testing.
146
- * This is primarily for backend or shared logic that doesn't rely on browser APIs.
147
- */
148
- declare function setupNodeEnvironment(): void;
149
-
150
- declare function createMockWebGL2Context(canvas: HTMLCanvasElement): WebGL2RenderingContext;
151
-
152
- declare class MockPointerLock {
153
- static setup(doc: Document): void;
154
- }
155
- declare class InputInjector {
156
- private doc;
157
- private win;
158
- constructor(doc: Document, win: any);
159
- keyDown(key: string, code?: string): void;
160
- keyUp(key: string, code?: string): void;
161
- mouseMove(movementX: number, movementY: number, clientX?: number, clientY?: number): void;
162
- mouseDown(button?: number): void;
163
- mouseUp(button?: number): void;
164
- wheel(deltaY: number): void;
165
- }
166
-
167
- export { type BinaryStreamMock, type BinaryWriterMock, type BrowserSetupOptions, InputInjector, type MockEngine, type MockGame, MockPointerLock, type TestContext, createBinaryStreamMock, createBinaryWriterMock, createEntity, createEntityStateFactory, createGameStateSnapshotFactory, createMockEngine, createMockGame, createMockWebGL2Context, createNetChanMock, createPlayerStateFactory, createSpawnContext, createTestContext, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, setupBrowserEnvironment, setupNodeEnvironment, teardownBrowserEnvironment };
318
+ export { type AudioEvent, type BinaryStreamMock, type BinaryWriterMock, type BrowserSetupOptions, type ControlledTimer, type DrawCall, type GameStateCapture, InputInjector, type MockEngine, type MockGame, MockPointerLock, type MockRAF, type PlaywrightOptions, type PlaywrightTestClient, type StorageScenario, type TestContext, captureAudioEvents, captureCanvasDrawCalls, captureGameState, createBinaryStreamMock, createBinaryWriterMock, createControlledTimer, createEntity, createEntityStateFactory, createGameStateSnapshotFactory, createMockAudioContext, createMockCanvas, createMockCanvasContext2D, createMockEngine, createMockGame, createMockImage, createMockImageData, createMockIndexedDB, createMockLocalStorage, createMockPerformance, createMockRAF, createMockSessionStorage, createMockWebGL2Context, createNetChanMock, createPlayerStateFactory, createPlaywrightTestClient, createSpawnContext, createStorageTestScenario, createTestContext, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, simulateFrames, simulateFramesWithMock, teardownBrowserEnvironment, teardownMockAudioContext, waitForGameReady };