quake2ts 0.0.561 → 0.0.562

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 (40) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +15 -15
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +273 -1
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +273 -1
  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/net/connection.d.ts +2 -0
  10. package/packages/client/dist/types/net/connection.d.ts.map +1 -1
  11. package/packages/server/dist/client.d.ts +51 -0
  12. package/packages/server/dist/client.js +100 -0
  13. package/packages/server/dist/dedicated.d.ts +69 -0
  14. package/packages/server/dist/dedicated.js +1013 -0
  15. package/packages/server/dist/index.cjs +27 -2
  16. package/packages/server/dist/index.d.ts +7 -161
  17. package/packages/server/dist/index.js +26 -2
  18. package/packages/server/dist/net/nodeWsDriver.d.ts +16 -0
  19. package/packages/server/dist/net/nodeWsDriver.js +122 -0
  20. package/packages/server/dist/protocol/player.d.ts +23 -0
  21. package/packages/server/dist/protocol/player.js +137 -0
  22. package/packages/server/dist/protocol/write.d.ts +7 -0
  23. package/packages/server/dist/protocol/write.js +167 -0
  24. package/packages/server/dist/protocol.d.ts +17 -0
  25. package/packages/server/dist/protocol.js +71 -0
  26. package/packages/server/dist/server.d.ts +50 -0
  27. package/packages/server/dist/server.js +12 -0
  28. package/packages/server/dist/server.test.d.ts +1 -0
  29. package/packages/server/dist/server.test.js +69 -0
  30. package/packages/server/dist/transport.d.ts +7 -0
  31. package/packages/server/dist/transport.js +1 -0
  32. package/packages/server/dist/transports/websocket.d.ts +11 -0
  33. package/packages/server/dist/transports/websocket.js +38 -0
  34. package/packages/test-utils/dist/index.cjs +1422 -1192
  35. package/packages/test-utils/dist/index.cjs.map +1 -1
  36. package/packages/test-utils/dist/index.d.cts +268 -131
  37. package/packages/test-utils/dist/index.d.ts +268 -131
  38. package/packages/test-utils/dist/index.js +1415 -1194
  39. package/packages/test-utils/dist/index.js.map +1 -1
  40. package/packages/server/dist/index.d.cts +0 -161
@@ -1,10 +1,271 @@
1
- import { ImageData } from '@napi-rs/canvas';
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;
@@ -159,7 +420,7 @@ interface PlaywrightTestClient {
159
420
  browser: Browser;
160
421
  context: BrowserContext;
161
422
  page: Page;
162
- server?: Server;
423
+ server?: Server$1;
163
424
  close: () => Promise<void>;
164
425
  navigate: (url?: string) => Promise<void>;
165
426
  waitForGame: (timeout?: number) => Promise<void>;
@@ -191,128 +452,4 @@ declare class InputInjector {
191
452
  wheel(deltaY: number): void;
192
453
  }
193
454
 
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
-
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>;
218
- }
219
- declare const createBinaryWriterMock: () => BinaryWriterMock;
220
- declare const createNetChanMock: () => {
221
- qport: number;
222
- incomingSequence: number;
223
- outgoingSequence: number;
224
- incomingAcknowledged: number;
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>;
277
- }
278
- declare const createBinaryStreamMock: () => BinaryStreamMock;
279
-
280
- declare const createPlayerStateFactory: (overrides?: Partial<PlayerState>) => PlayerState;
281
- declare const createEntityStateFactory: (overrides?: Partial<EntityState>) => EntityState;
282
- declare const createGameStateSnapshotFactory: (overrides?: Partial<GameStateSnapshot>) => GameStateSnapshot;
283
-
284
- interface MockEngine {
285
- sound: Mock<[Entity, number, string, number, number, number], void>;
286
- soundIndex: Mock<[string], number>;
287
- modelIndex: Mock<[string], number>;
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>;
300
- }
301
- interface TestContext extends SpawnContext {
302
- entities: EntitySystem;
303
- game: MockGame;
304
- engine: MockEngine;
305
- }
306
- declare const createMockEngine: () => MockEngine;
307
- declare const createMockGame: (seed?: number) => {
308
- game: MockGame;
309
- spawnRegistry: SpawnRegistry;
310
- };
311
- declare function createTestContext(options?: {
312
- seed?: number;
313
- initialEntities?: Entity[];
314
- }): TestContext;
315
- declare function createSpawnContext(): SpawnContext;
316
- declare function createEntity(): Entity;
317
-
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 };
455
+ 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 PlaywrightOptions, type PlaywrightTestClient, type StorageScenario, type TestContext, captureAudioEvents, captureCanvasDrawCalls, captureGameState, createBinaryStreamMock, createBinaryWriterMock, createControlledTimer, 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, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, simulateFrames, simulateFramesWithMock, teardownBrowserEnvironment, teardownMockAudioContext, waitForGameReady };