quake2ts 0.0.561 → 0.0.563
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/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +15 -15
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +273 -1
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +273 -1
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/net/connection.d.ts +2 -0
- package/packages/client/dist/types/net/connection.d.ts.map +1 -1
- package/packages/server/dist/client.d.ts +51 -0
- package/packages/server/dist/client.js +100 -0
- package/packages/server/dist/dedicated.d.ts +69 -0
- package/packages/server/dist/dedicated.js +1013 -0
- package/packages/server/dist/index.cjs +27 -2
- package/packages/server/dist/index.d.ts +7 -161
- package/packages/server/dist/index.js +26 -2
- package/packages/server/dist/net/nodeWsDriver.d.ts +16 -0
- package/packages/server/dist/net/nodeWsDriver.js +122 -0
- package/packages/server/dist/protocol/player.d.ts +23 -0
- package/packages/server/dist/protocol/player.js +137 -0
- package/packages/server/dist/protocol/write.d.ts +7 -0
- package/packages/server/dist/protocol/write.js +167 -0
- package/packages/server/dist/protocol.d.ts +17 -0
- package/packages/server/dist/protocol.js +71 -0
- package/packages/server/dist/server.d.ts +50 -0
- package/packages/server/dist/server.js +12 -0
- package/packages/server/dist/server.test.d.ts +1 -0
- package/packages/server/dist/server.test.js +69 -0
- package/packages/server/dist/transport.d.ts +7 -0
- package/packages/server/dist/transport.js +1 -0
- package/packages/server/dist/transports/websocket.d.ts +11 -0
- package/packages/server/dist/transports/websocket.js +38 -0
- package/packages/test-utils/dist/index.cjs +1610 -1188
- package/packages/test-utils/dist/index.cjs.map +1 -1
- package/packages/test-utils/dist/index.d.cts +326 -132
- package/packages/test-utils/dist/index.d.ts +326 -132
- package/packages/test-utils/dist/index.js +1596 -1189
- package/packages/test-utils/dist/index.js.map +1 -1
- package/packages/server/dist/index.d.cts +0 -161
|
@@ -1,10 +1,271 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { LaunchOptions, BrowserContextOptions, Browser, BrowserContext, Page } from 'playwright';
|
|
3
|
-
import { Server } from 'http';
|
|
4
|
-
import { Vec3, CollisionPlane, CollisionBrush, CollisionNode, CollisionLeaf, CollisionModel, PlayerState, EntityState, createRandomGenerator } from '@quake2ts/shared';
|
|
5
|
-
export { intersects, ladderTrace, stairTrace } from '@quake2ts/shared';
|
|
1
|
+
import * as vitest from 'vitest';
|
|
6
2
|
import { Mock } from 'vitest';
|
|
3
|
+
import { Vec3, CollisionPlane, CollisionBrush, CollisionNode, CollisionLeaf, CollisionModel, PlayerState, EntityState, createRandomGenerator, NetDriver } from '@quake2ts/shared';
|
|
4
|
+
export { intersects, ladderTrace, stairTrace } from '@quake2ts/shared';
|
|
7
5
|
import { GameStateSnapshot, Entity, ScriptHookRegistry, SpawnContext, EntitySystem, SpawnRegistry } from '@quake2ts/game';
|
|
6
|
+
import { NetworkTransport, Server, ServerStatic, Client } from '@quake2ts/server';
|
|
7
|
+
import { ImageData } from '@napi-rs/canvas';
|
|
8
|
+
import { LaunchOptions, BrowserContextOptions, Browser, BrowserContext, Page } from 'playwright';
|
|
9
|
+
import { Server as Server$1 } from 'http';
|
|
10
|
+
|
|
11
|
+
interface BinaryWriterMock {
|
|
12
|
+
writeByte: Mock<[number], void>;
|
|
13
|
+
writeShort: Mock<[number], void>;
|
|
14
|
+
writeLong: Mock<[number], void>;
|
|
15
|
+
writeString: Mock<[string], void>;
|
|
16
|
+
writeBytes: Mock<[Uint8Array], void>;
|
|
17
|
+
getBuffer: Mock<[], Uint8Array>;
|
|
18
|
+
reset: Mock<[], void>;
|
|
19
|
+
writeInt8: Mock<[number], void>;
|
|
20
|
+
writeUint8: Mock<[number], void>;
|
|
21
|
+
writeInt16: Mock<[number], void>;
|
|
22
|
+
writeUint16: Mock<[number], void>;
|
|
23
|
+
writeInt32: Mock<[number], void>;
|
|
24
|
+
writeUint32: Mock<[number], void>;
|
|
25
|
+
writeFloat: Mock<[number], void>;
|
|
26
|
+
getData: Mock<[], Uint8Array>;
|
|
27
|
+
}
|
|
28
|
+
declare const createBinaryWriterMock: () => BinaryWriterMock;
|
|
29
|
+
declare const createNetChanMock: () => {
|
|
30
|
+
qport: number;
|
|
31
|
+
incomingSequence: number;
|
|
32
|
+
outgoingSequence: number;
|
|
33
|
+
incomingAcknowledged: number;
|
|
34
|
+
incomingReliableAcknowledged: boolean;
|
|
35
|
+
incomingReliableSequence: number;
|
|
36
|
+
outgoingReliableSequence: number;
|
|
37
|
+
reliableMessage: BinaryWriterMock;
|
|
38
|
+
reliableLength: number;
|
|
39
|
+
fragmentSendOffset: number;
|
|
40
|
+
fragmentBuffer: null;
|
|
41
|
+
fragmentLength: number;
|
|
42
|
+
fragmentReceived: number;
|
|
43
|
+
lastReceived: number;
|
|
44
|
+
lastSent: number;
|
|
45
|
+
remoteAddress: {
|
|
46
|
+
type: string;
|
|
47
|
+
port: number;
|
|
48
|
+
};
|
|
49
|
+
setup: Mock<any, any>;
|
|
50
|
+
reset: Mock<any, any>;
|
|
51
|
+
transmit: Mock<any, any>;
|
|
52
|
+
process: Mock<any, any>;
|
|
53
|
+
canSendReliable: Mock<[], boolean>;
|
|
54
|
+
writeReliableByte: Mock<any, any>;
|
|
55
|
+
writeReliableShort: Mock<any, any>;
|
|
56
|
+
writeReliableLong: Mock<any, any>;
|
|
57
|
+
writeReliableString: Mock<any, any>;
|
|
58
|
+
getReliableData: Mock<[], Uint8Array<ArrayBufferLike>>;
|
|
59
|
+
needsKeepalive: Mock<[], boolean>;
|
|
60
|
+
isTimedOut: Mock<[], boolean>;
|
|
61
|
+
};
|
|
62
|
+
interface BinaryStreamMock {
|
|
63
|
+
getPosition: Mock<[], number>;
|
|
64
|
+
getReadPosition: Mock<[], number>;
|
|
65
|
+
getLength: Mock<[], number>;
|
|
66
|
+
getRemaining: Mock<[], number>;
|
|
67
|
+
seek: Mock<[number], void>;
|
|
68
|
+
setReadPosition: Mock<[number], void>;
|
|
69
|
+
hasMore: Mock<[], boolean>;
|
|
70
|
+
hasBytes: Mock<[number], boolean>;
|
|
71
|
+
readChar: Mock<[], number>;
|
|
72
|
+
readByte: Mock<[], number>;
|
|
73
|
+
readShort: Mock<[], number>;
|
|
74
|
+
readUShort: Mock<[], number>;
|
|
75
|
+
readLong: Mock<[], number>;
|
|
76
|
+
readULong: Mock<[], number>;
|
|
77
|
+
readFloat: Mock<[], number>;
|
|
78
|
+
readString: Mock<[], string>;
|
|
79
|
+
readStringLine: Mock<[], string>;
|
|
80
|
+
readCoord: Mock<[], number>;
|
|
81
|
+
readAngle: Mock<[], number>;
|
|
82
|
+
readAngle16: Mock<[], number>;
|
|
83
|
+
readData: Mock<[number], Uint8Array>;
|
|
84
|
+
readPos: Mock<[], any>;
|
|
85
|
+
readDir: Mock<[], any>;
|
|
86
|
+
}
|
|
87
|
+
declare const createBinaryStreamMock: () => BinaryStreamMock;
|
|
88
|
+
|
|
89
|
+
declare function makePlane(normal: Vec3, dist: number): CollisionPlane;
|
|
90
|
+
declare function makeAxisBrush(size: number, contents?: number): CollisionBrush;
|
|
91
|
+
declare function makeNode(plane: CollisionPlane, children: [number, number]): CollisionNode;
|
|
92
|
+
declare function makeBspModel(planes: CollisionPlane[], nodes: CollisionNode[], leaves: CollisionLeaf[], brushes: CollisionBrush[], leafBrushes: number[]): CollisionModel;
|
|
93
|
+
declare function makeLeaf(contents: number, firstLeafBrush: number, numLeafBrushes: number): CollisionLeaf;
|
|
94
|
+
declare function makeLeafModel(brushes: CollisionBrush[]): CollisionModel;
|
|
95
|
+
declare function makeBrushFromMinsMaxs(mins: Vec3, maxs: Vec3, contents?: number): CollisionBrush;
|
|
96
|
+
|
|
97
|
+
declare const createPlayerStateFactory: (overrides?: Partial<PlayerState>) => PlayerState;
|
|
98
|
+
declare const createEntityStateFactory: (overrides?: Partial<EntityState>) => EntityState;
|
|
99
|
+
declare const createGameStateSnapshotFactory: (overrides?: Partial<GameStateSnapshot>) => GameStateSnapshot;
|
|
100
|
+
|
|
101
|
+
interface MockEngine {
|
|
102
|
+
sound: Mock<[Entity, number, string, number, number, number], void>;
|
|
103
|
+
soundIndex: Mock<[string], number>;
|
|
104
|
+
modelIndex: Mock<[string], number>;
|
|
105
|
+
centerprintf: Mock<[Entity, string], void>;
|
|
106
|
+
}
|
|
107
|
+
interface MockGame {
|
|
108
|
+
random: ReturnType<typeof createRandomGenerator>;
|
|
109
|
+
registerEntitySpawn: Mock<[string, (entity: Entity) => void], void>;
|
|
110
|
+
unregisterEntitySpawn: Mock<[string], void>;
|
|
111
|
+
getCustomEntities: Mock<[], string[]>;
|
|
112
|
+
hooks: ScriptHookRegistry;
|
|
113
|
+
registerHooks: Mock<[any], any>;
|
|
114
|
+
spawnWorld: Mock<[], void>;
|
|
115
|
+
clientBegin: Mock<[any], void>;
|
|
116
|
+
damage: Mock<[number], void>;
|
|
117
|
+
}
|
|
118
|
+
interface TestContext extends SpawnContext {
|
|
119
|
+
entities: EntitySystem;
|
|
120
|
+
game: MockGame;
|
|
121
|
+
engine: MockEngine;
|
|
122
|
+
}
|
|
123
|
+
declare const createMockEngine: () => MockEngine;
|
|
124
|
+
declare const createMockGame: (seed?: number) => {
|
|
125
|
+
game: MockGame;
|
|
126
|
+
spawnRegistry: SpawnRegistry;
|
|
127
|
+
};
|
|
128
|
+
declare function createTestContext(options?: {
|
|
129
|
+
seed?: number;
|
|
130
|
+
initialEntities?: Entity[];
|
|
131
|
+
}): TestContext;
|
|
132
|
+
declare function createSpawnContext(): SpawnContext;
|
|
133
|
+
declare function createEntity(): Entity;
|
|
134
|
+
|
|
135
|
+
interface GameState {
|
|
136
|
+
levelName: string;
|
|
137
|
+
time: number;
|
|
138
|
+
entities: Entity[];
|
|
139
|
+
clients: any[];
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Creates a mock game state object.
|
|
143
|
+
* @param overrides Optional overrides for the game state.
|
|
144
|
+
*/
|
|
145
|
+
declare function createMockGameState(overrides?: Partial<GameState>): GameState;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Mock implementation of the NetworkTransport interface for server testing.
|
|
149
|
+
* Allows simulating connections and errors.
|
|
150
|
+
*/
|
|
151
|
+
declare class MockTransport implements NetworkTransport {
|
|
152
|
+
onConnectionCallback?: (driver: NetDriver, info?: any) => void;
|
|
153
|
+
onErrorCallback?: (error: Error) => void;
|
|
154
|
+
address: string;
|
|
155
|
+
port: number;
|
|
156
|
+
sentMessages: Uint8Array[];
|
|
157
|
+
receivedMessages: Uint8Array[];
|
|
158
|
+
listening: boolean;
|
|
159
|
+
listenSpy: vitest.Mock<any, any>;
|
|
160
|
+
closeSpy: vitest.Mock<any, any>;
|
|
161
|
+
/**
|
|
162
|
+
* Start listening on the specified port.
|
|
163
|
+
*/
|
|
164
|
+
listen(port: number): Promise<void>;
|
|
165
|
+
/**
|
|
166
|
+
* Close the transport.
|
|
167
|
+
*/
|
|
168
|
+
close(): void;
|
|
169
|
+
/**
|
|
170
|
+
* Register a callback for new connections.
|
|
171
|
+
*/
|
|
172
|
+
onConnection(callback: (driver: NetDriver, info?: any) => void): void;
|
|
173
|
+
/**
|
|
174
|
+
* Register a callback for errors.
|
|
175
|
+
*/
|
|
176
|
+
onError(callback: (error: Error) => void): void;
|
|
177
|
+
/**
|
|
178
|
+
* Check if the transport is currently listening.
|
|
179
|
+
*/
|
|
180
|
+
isListening(): boolean;
|
|
181
|
+
/**
|
|
182
|
+
* Helper to simulate a new connection.
|
|
183
|
+
* @param driver The network driver for the connection.
|
|
184
|
+
* @param info Optional connection info.
|
|
185
|
+
*/
|
|
186
|
+
simulateConnection(driver: NetDriver, info?: any): void;
|
|
187
|
+
/**
|
|
188
|
+
* Helper to simulate an error.
|
|
189
|
+
* @param error The error to simulate.
|
|
190
|
+
*/
|
|
191
|
+
simulateError(error: Error): void;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Interface for mock UDP socket.
|
|
195
|
+
* This is a partial mock of Node.js dgram.Socket or similar.
|
|
196
|
+
*/
|
|
197
|
+
interface MockUDPSocket {
|
|
198
|
+
send: (msg: Uint8Array, offset: number, length: number, port: number, address: string, callback?: (error: Error | null, bytes: number) => void) => void;
|
|
199
|
+
on: (event: string, callback: (...args: any[]) => void) => void;
|
|
200
|
+
close: () => void;
|
|
201
|
+
bind: (port: number, address?: string) => void;
|
|
202
|
+
address: () => {
|
|
203
|
+
address: string;
|
|
204
|
+
family: string;
|
|
205
|
+
port: number;
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Creates a mock UDP socket.
|
|
210
|
+
* @param overrides Optional overrides for the socket methods.
|
|
211
|
+
*/
|
|
212
|
+
declare function createMockUDPSocket(overrides?: Partial<MockUDPSocket>): MockUDPSocket;
|
|
213
|
+
/**
|
|
214
|
+
* Interface for network address.
|
|
215
|
+
*/
|
|
216
|
+
interface NetworkAddress {
|
|
217
|
+
ip: string;
|
|
218
|
+
port: number;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Creates a mock network address.
|
|
222
|
+
* @param ip IP address (default: '127.0.0.1')
|
|
223
|
+
* @param port Port number (default: 27910)
|
|
224
|
+
*/
|
|
225
|
+
declare function createMockNetworkAddress(ip?: string, port?: number): NetworkAddress;
|
|
226
|
+
/**
|
|
227
|
+
* Creates a configured MockTransport instance.
|
|
228
|
+
* @param address Address to bind to (default: '127.0.0.1')
|
|
229
|
+
* @param port Port to listen on (default: 27910)
|
|
230
|
+
* @param overrides Optional overrides for the transport properties.
|
|
231
|
+
*/
|
|
232
|
+
declare function createMockTransport(address?: string, port?: number, overrides?: Partial<MockTransport>): MockTransport;
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Creates a mock server state object.
|
|
236
|
+
* @param overrides Optional overrides for the server state.
|
|
237
|
+
*/
|
|
238
|
+
declare function createMockServerState(overrides?: Partial<Server>): Server;
|
|
239
|
+
/**
|
|
240
|
+
* Creates a mock server static object.
|
|
241
|
+
* @param maxClients Maximum number of clients.
|
|
242
|
+
* @param overrides Optional overrides for the server static state.
|
|
243
|
+
*/
|
|
244
|
+
declare function createMockServerStatic(maxClients?: number, overrides?: Partial<ServerStatic>): ServerStatic;
|
|
245
|
+
/**
|
|
246
|
+
* Creates a mock server client.
|
|
247
|
+
* @param clientNum The client index.
|
|
248
|
+
* @param overrides Optional overrides for the client.
|
|
249
|
+
*/
|
|
250
|
+
declare function createMockServerClient(clientNum: number, overrides?: Partial<Client>): Client;
|
|
251
|
+
/**
|
|
252
|
+
* Mock interface for the Server class (DedicatedServer).
|
|
253
|
+
* This allows mocking the server instance itself.
|
|
254
|
+
*/
|
|
255
|
+
interface MockServer {
|
|
256
|
+
start(mapName: string): Promise<void>;
|
|
257
|
+
stop(): void;
|
|
258
|
+
multicast(origin: any, type: any, event: any, ...args: any[]): void;
|
|
259
|
+
unicast(ent: Entity, reliable: boolean, event: any, ...args: any[]): void;
|
|
260
|
+
configstring(index: number, value: string): void;
|
|
261
|
+
kickPlayer(clientId: number): void;
|
|
262
|
+
changeMap(mapName: string): Promise<void>;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Creates a mock server instance.
|
|
266
|
+
* @param overrides Optional overrides for server methods.
|
|
267
|
+
*/
|
|
268
|
+
declare function createMockServer(overrides?: Partial<MockServer>): MockServer;
|
|
8
269
|
|
|
9
270
|
interface BrowserSetupOptions {
|
|
10
271
|
url?: string;
|
|
@@ -49,11 +310,14 @@ declare function createMockImageData(width: number, height: number, fillColor?:
|
|
|
49
310
|
*/
|
|
50
311
|
declare function createMockImage(width?: number, height?: number, src?: string): HTMLImageElement;
|
|
51
312
|
|
|
313
|
+
interface NodeSetupOptions {
|
|
314
|
+
polyfillFetch?: boolean;
|
|
315
|
+
}
|
|
52
316
|
/**
|
|
53
317
|
* Sets up a Node.js environment for testing.
|
|
54
318
|
* This is primarily for backend or shared logic that doesn't rely on browser APIs.
|
|
55
319
|
*/
|
|
56
|
-
declare function setupNodeEnvironment(): void;
|
|
320
|
+
declare function setupNodeEnvironment(options?: NodeSetupOptions): void;
|
|
57
321
|
|
|
58
322
|
declare function createMockWebGL2Context(canvas: HTMLCanvasElement): WebGL2RenderingContext;
|
|
59
323
|
|
|
@@ -73,14 +337,14 @@ declare function createMockSessionStorage(initialData?: Record<string, string>):
|
|
|
73
337
|
*/
|
|
74
338
|
declare function createMockIndexedDB(): IDBFactory;
|
|
75
339
|
interface StorageScenario {
|
|
76
|
-
storage: Storage;
|
|
77
|
-
populate(data: Record<string,
|
|
78
|
-
verify(key: string, value:
|
|
340
|
+
storage: Storage | IDBFactory;
|
|
341
|
+
populate(data: Record<string, any>): Promise<void> | void;
|
|
342
|
+
verify(key: string, value: any): Promise<boolean> | boolean;
|
|
79
343
|
}
|
|
80
344
|
/**
|
|
81
345
|
* Helper to setup a storage test scenario.
|
|
82
346
|
*/
|
|
83
|
-
declare function createStorageTestScenario(storageType?: 'local' | 'session'): StorageScenario;
|
|
347
|
+
declare function createStorageTestScenario(storageType?: 'local' | 'session' | 'indexed'): StorageScenario;
|
|
84
348
|
|
|
85
349
|
declare function createMockAudioContext(): AudioContext;
|
|
86
350
|
/**
|
|
@@ -97,8 +361,7 @@ interface AudioEvent {
|
|
|
97
361
|
}
|
|
98
362
|
/**
|
|
99
363
|
* Captures audio operations for verification.
|
|
100
|
-
*
|
|
101
|
-
* This is a placeholder for future implementation.
|
|
364
|
+
* Note: Only works if the context was created via createMockAudioContext which proxies calls.
|
|
102
365
|
*/
|
|
103
366
|
declare function captureAudioEvents(context: AudioContext): AudioEvent[];
|
|
104
367
|
|
|
@@ -159,7 +422,7 @@ interface PlaywrightTestClient {
|
|
|
159
422
|
browser: Browser;
|
|
160
423
|
context: BrowserContext;
|
|
161
424
|
page: Page;
|
|
162
|
-
server?: Server;
|
|
425
|
+
server?: Server$1;
|
|
163
426
|
close: () => Promise<void>;
|
|
164
427
|
navigate: (url?: string) => Promise<void>;
|
|
165
428
|
waitForGame: (timeout?: number) => Promise<void>;
|
|
@@ -191,128 +454,59 @@ declare class InputInjector {
|
|
|
191
454
|
wheel(deltaY: number): void;
|
|
192
455
|
}
|
|
193
456
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
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
|
-
|
|
202
|
-
interface BinaryWriterMock {
|
|
203
|
-
writeByte: Mock<[number], void>;
|
|
204
|
-
writeShort: Mock<[number], void>;
|
|
205
|
-
writeLong: Mock<[number], void>;
|
|
206
|
-
writeString: Mock<[string], void>;
|
|
207
|
-
writeBytes: Mock<[Uint8Array], void>;
|
|
208
|
-
getBuffer: Mock<[], Uint8Array>;
|
|
209
|
-
reset: Mock<[], void>;
|
|
210
|
-
writeInt8: Mock<[number], void>;
|
|
211
|
-
writeUint8: Mock<[number], void>;
|
|
212
|
-
writeInt16: Mock<[number], void>;
|
|
213
|
-
writeUint16: Mock<[number], void>;
|
|
214
|
-
writeInt32: Mock<[number], void>;
|
|
215
|
-
writeUint32: Mock<[number], void>;
|
|
216
|
-
writeFloat: Mock<[number], void>;
|
|
217
|
-
getData: Mock<[], Uint8Array>;
|
|
457
|
+
interface NetworkSimulator {
|
|
458
|
+
apply(page: any): Promise<void>;
|
|
459
|
+
clear(page: any): Promise<void>;
|
|
218
460
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
incomingReliableAcknowledged: boolean;
|
|
226
|
-
incomingReliableSequence: number;
|
|
227
|
-
outgoingReliableSequence: number;
|
|
228
|
-
reliableMessage: BinaryWriterMock;
|
|
229
|
-
reliableLength: number;
|
|
230
|
-
fragmentSendOffset: number;
|
|
231
|
-
fragmentBuffer: null;
|
|
232
|
-
fragmentLength: number;
|
|
233
|
-
fragmentReceived: number;
|
|
234
|
-
lastReceived: number;
|
|
235
|
-
lastSent: number;
|
|
236
|
-
remoteAddress: {
|
|
237
|
-
type: string;
|
|
238
|
-
port: number;
|
|
239
|
-
};
|
|
240
|
-
setup: Mock<any, any>;
|
|
241
|
-
reset: Mock<any, any>;
|
|
242
|
-
transmit: Mock<any, any>;
|
|
243
|
-
process: Mock<any, any>;
|
|
244
|
-
canSendReliable: Mock<[], boolean>;
|
|
245
|
-
writeReliableByte: Mock<any, any>;
|
|
246
|
-
writeReliableShort: Mock<any, any>;
|
|
247
|
-
writeReliableLong: Mock<any, any>;
|
|
248
|
-
writeReliableString: Mock<any, any>;
|
|
249
|
-
getReliableData: Mock<[], Uint8Array<ArrayBufferLike>>;
|
|
250
|
-
needsKeepalive: Mock<[], boolean>;
|
|
251
|
-
isTimedOut: Mock<[], boolean>;
|
|
252
|
-
};
|
|
253
|
-
interface BinaryStreamMock {
|
|
254
|
-
getPosition: Mock<[], number>;
|
|
255
|
-
getReadPosition: Mock<[], number>;
|
|
256
|
-
getLength: Mock<[], number>;
|
|
257
|
-
getRemaining: Mock<[], number>;
|
|
258
|
-
seek: Mock<[number], void>;
|
|
259
|
-
setReadPosition: Mock<[number], void>;
|
|
260
|
-
hasMore: Mock<[], boolean>;
|
|
261
|
-
hasBytes: Mock<[number], boolean>;
|
|
262
|
-
readChar: Mock<[], number>;
|
|
263
|
-
readByte: Mock<[], number>;
|
|
264
|
-
readShort: Mock<[], number>;
|
|
265
|
-
readUShort: Mock<[], number>;
|
|
266
|
-
readLong: Mock<[], number>;
|
|
267
|
-
readULong: Mock<[], number>;
|
|
268
|
-
readFloat: Mock<[], number>;
|
|
269
|
-
readString: Mock<[], string>;
|
|
270
|
-
readStringLine: Mock<[], string>;
|
|
271
|
-
readCoord: Mock<[], number>;
|
|
272
|
-
readAngle: Mock<[], number>;
|
|
273
|
-
readAngle16: Mock<[], number>;
|
|
274
|
-
readData: Mock<[number], Uint8Array>;
|
|
275
|
-
readPos: Mock<[], any>;
|
|
276
|
-
readDir: Mock<[], any>;
|
|
461
|
+
type NetworkCondition = 'good' | 'slow' | 'unstable' | 'offline';
|
|
462
|
+
interface NetworkConfig {
|
|
463
|
+
offline: boolean;
|
|
464
|
+
downloadThroughput: number;
|
|
465
|
+
uploadThroughput: number;
|
|
466
|
+
latency: number;
|
|
277
467
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
declare
|
|
282
|
-
|
|
468
|
+
/**
|
|
469
|
+
* Simulates network conditions using Chrome DevTools Protocol (CDP) via Playwright.
|
|
470
|
+
*/
|
|
471
|
+
declare function simulateNetworkCondition(condition: NetworkCondition): NetworkSimulator;
|
|
472
|
+
/**
|
|
473
|
+
* Creates a custom network condition simulator.
|
|
474
|
+
*
|
|
475
|
+
* @param latency Latency in milliseconds
|
|
476
|
+
* @param jitter Approximate jitter (variation in latency) - Note: CDP doesn't support jitter natively.
|
|
477
|
+
* @param packetLoss Packet loss percentage (0-100) - Ignored for basic CDP emulation.
|
|
478
|
+
*/
|
|
479
|
+
declare function createCustomNetworkCondition(latency: number, jitter?: number, packetLoss?: number, baseConfig?: NetworkConfig): NetworkSimulator;
|
|
480
|
+
/**
|
|
481
|
+
* Throttles bandwidth for the given page.
|
|
482
|
+
*/
|
|
483
|
+
declare function throttleBandwidth(page: any, bytesPerSecond: number): Promise<void>;
|
|
283
484
|
|
|
284
|
-
interface
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
centerprintf: Mock<[Entity, string], void>;
|
|
289
|
-
}
|
|
290
|
-
interface MockGame {
|
|
291
|
-
random: ReturnType<typeof createRandomGenerator>;
|
|
292
|
-
registerEntitySpawn: Mock<[string, (entity: Entity) => void], void>;
|
|
293
|
-
unregisterEntitySpawn: Mock<[string], void>;
|
|
294
|
-
getCustomEntities: Mock<[], string[]>;
|
|
295
|
-
hooks: ScriptHookRegistry;
|
|
296
|
-
registerHooks: Mock<[any], any>;
|
|
297
|
-
spawnWorld: Mock<[], void>;
|
|
298
|
-
clientBegin: Mock<[any], void>;
|
|
299
|
-
damage: Mock<[number], void>;
|
|
485
|
+
interface VisualDiff {
|
|
486
|
+
pixelDiff: number;
|
|
487
|
+
diffPath?: string;
|
|
488
|
+
matched: boolean;
|
|
300
489
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
490
|
+
/**
|
|
491
|
+
* Captures a screenshot of the current game state.
|
|
492
|
+
*/
|
|
493
|
+
declare function captureGameScreenshot(page: Page, name: string, options?: {
|
|
494
|
+
dir?: string;
|
|
495
|
+
fullPage?: boolean;
|
|
496
|
+
}): Promise<Buffer>;
|
|
497
|
+
/**
|
|
498
|
+
* Compares two image buffers pixel-by-pixel.
|
|
499
|
+
* Note: A robust implementation would use a library like 'pixelmatch' or 'looks-same'.
|
|
500
|
+
* For now, we provide a basic placeholder or rely on simple buffer comparison.
|
|
501
|
+
*/
|
|
502
|
+
declare function compareScreenshots(baseline: Buffer, current: Buffer, threshold?: number): Promise<VisualDiff>;
|
|
503
|
+
interface VisualScenario {
|
|
504
|
+
capture(name: string): Promise<Buffer>;
|
|
505
|
+
compare(name: string, baselineDir: string): Promise<VisualDiff>;
|
|
305
506
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
};
|
|
311
|
-
declare function createTestContext(options?: {
|
|
312
|
-
seed?: number;
|
|
313
|
-
initialEntities?: Entity[];
|
|
314
|
-
}): TestContext;
|
|
315
|
-
declare function createSpawnContext(): SpawnContext;
|
|
316
|
-
declare function createEntity(): Entity;
|
|
507
|
+
/**
|
|
508
|
+
* Creates a helper for visual regression testing scenarios.
|
|
509
|
+
*/
|
|
510
|
+
declare function createVisualTestScenario(page: Page, sceneName: string): VisualScenario;
|
|
317
511
|
|
|
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 };
|
|
512
|
+
export { type AudioEvent, type BinaryStreamMock, type BinaryWriterMock, type BrowserSetupOptions, type ControlledTimer, type DrawCall, type GameState, type GameStateCapture, InputInjector, type MockEngine, type MockGame, MockPointerLock, type MockRAF, type MockServer, MockTransport, type MockUDPSocket, type NetworkAddress, type NetworkCondition, type NetworkConfig, type NetworkSimulator, type NodeSetupOptions, type PlaywrightOptions, type PlaywrightTestClient, type StorageScenario, type TestContext, type VisualDiff, type VisualScenario, captureAudioEvents, captureCanvasDrawCalls, captureGameScreenshot, captureGameState, compareScreenshots, createBinaryStreamMock, createBinaryWriterMock, createControlledTimer, createCustomNetworkCondition, createEntity, createEntityStateFactory, createGameStateSnapshotFactory, createMockAudioContext, createMockCanvas, createMockCanvasContext2D, createMockEngine, createMockGame, createMockGameState, createMockImage, createMockImageData, createMockIndexedDB, createMockLocalStorage, createMockNetworkAddress, createMockPerformance, createMockRAF, createMockServer, createMockServerClient, createMockServerState, createMockServerStatic, createMockSessionStorage, createMockTransport, createMockUDPSocket, createMockWebGL2Context, createNetChanMock, createPlayerStateFactory, createPlaywrightTestClient, createSpawnContext, createStorageTestScenario, createTestContext, createVisualTestScenario, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, simulateFrames, simulateFramesWithMock, simulateNetworkCondition, teardownBrowserEnvironment, teardownMockAudioContext, throttleBandwidth, waitForGameReady };
|