@smoregg/sdk 1.2.0 → 2.0.0
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/cjs/config.cjs.map +1 -1
- package/dist/cjs/controller.cjs +215 -145
- package/dist/cjs/controller.cjs.map +1 -1
- package/dist/cjs/screen.cjs +220 -178
- package/dist/cjs/screen.cjs.map +1 -1
- package/dist/cjs/testing.cjs +160 -151
- package/dist/cjs/testing.cjs.map +1 -1
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/controller.js +216 -146
- package/dist/esm/controller.js.map +1 -1
- package/dist/esm/screen.js +221 -179
- package/dist/esm/screen.js.map +1 -1
- package/dist/esm/testing.js +160 -151
- package/dist/esm/testing.js.map +1 -1
- package/dist/types/config.d.ts +1 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/controller.d.ts +22 -43
- package/dist/types/controller.d.ts.map +1 -1
- package/dist/types/index.d.ts +14 -14
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/screen.d.ts +26 -37
- package/dist/types/screen.d.ts.map +1 -1
- package/dist/types/testing.d.ts +16 -0
- package/dist/types/testing.d.ts.map +1 -1
- package/dist/types/types.d.ts +244 -338
- package/dist/types/types.d.ts.map +1 -1
- package/dist/umd/smore-sdk.umd.js +595 -474
- package/dist/umd/smore-sdk.umd.js.map +1 -1
- package/dist/umd/smore-sdk.umd.min.js +1 -1
- package/dist/umd/smore-sdk.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/SmoreHost.cjs +0 -306
- package/dist/cjs/SmoreHost.cjs.map +0 -1
- package/dist/cjs/SmorePlayer.cjs +0 -229
- package/dist/cjs/SmorePlayer.cjs.map +0 -1
- package/dist/cjs/components/DirectionPad.cjs +0 -68
- package/dist/cjs/components/DirectionPad.cjs.map +0 -1
- package/dist/cjs/components/DirectionPad.module.css.cjs +0 -12
- package/dist/cjs/components/DirectionPad.module.css.cjs.map +0 -1
- package/dist/cjs/components/HoldButton.cjs +0 -57
- package/dist/cjs/components/HoldButton.cjs.map +0 -1
- package/dist/cjs/components/HoldButton.module.css.cjs +0 -12
- package/dist/cjs/components/HoldButton.module.css.cjs.map +0 -1
- package/dist/cjs/components/IframeGameBridge.cjs +0 -115
- package/dist/cjs/components/IframeGameBridge.cjs.map +0 -1
- package/dist/cjs/components/SwipeArea.cjs +0 -58
- package/dist/cjs/components/SwipeArea.cjs.map +0 -1
- package/dist/cjs/components/SwipeArea.module.css.cjs +0 -12
- package/dist/cjs/components/SwipeArea.module.css.cjs.map +0 -1
- package/dist/cjs/components/TapButton.cjs +0 -58
- package/dist/cjs/components/TapButton.cjs.map +0 -1
- package/dist/cjs/components/TapButton.module.css.cjs +0 -12
- package/dist/cjs/components/TapButton.module.css.cjs.map +0 -1
- package/dist/cjs/context/RoomProvider.cjs +0 -118
- package/dist/cjs/context/RoomProvider.cjs.map +0 -1
- package/dist/cjs/hooks/useExternalGames.cjs +0 -49
- package/dist/cjs/hooks/useExternalGames.cjs.map +0 -1
- package/dist/cjs/hooks/useGameHost.cjs +0 -206
- package/dist/cjs/hooks/useGameHost.cjs.map +0 -1
- package/dist/cjs/hooks/useGamePlayer.cjs +0 -134
- package/dist/cjs/hooks/useGamePlayer.cjs.map +0 -1
- package/dist/cjs/iframe/index.cjs +0 -260
- package/dist/cjs/iframe/index.cjs.map +0 -1
- package/dist/cjs/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.cjs +0 -33
- package/dist/cjs/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.cjs.map +0 -1
- package/dist/cjs/server/index.cjs +0 -45
- package/dist/cjs/server/index.cjs.map +0 -1
- package/dist/cjs/transport/DirectTransport.cjs +0 -23
- package/dist/cjs/transport/DirectTransport.cjs.map +0 -1
- package/dist/cjs/utils/connectionMonitor.cjs +0 -77
- package/dist/cjs/utils/connectionMonitor.cjs.map +0 -1
- package/dist/cjs/utils/preloadAssets.cjs +0 -66
- package/dist/cjs/utils/preloadAssets.cjs.map +0 -1
- package/dist/cjs/utils/serverTime.cjs +0 -43
- package/dist/cjs/utils/serverTime.cjs.map +0 -1
- package/dist/esm/SmoreHost.js +0 -304
- package/dist/esm/SmoreHost.js.map +0 -1
- package/dist/esm/SmorePlayer.js +0 -227
- package/dist/esm/SmorePlayer.js.map +0 -1
- package/dist/esm/components/DirectionPad.js +0 -66
- package/dist/esm/components/DirectionPad.js.map +0 -1
- package/dist/esm/components/DirectionPad.module.css.js +0 -8
- package/dist/esm/components/DirectionPad.module.css.js.map +0 -1
- package/dist/esm/components/HoldButton.js +0 -55
- package/dist/esm/components/HoldButton.js.map +0 -1
- package/dist/esm/components/HoldButton.module.css.js +0 -8
- package/dist/esm/components/HoldButton.module.css.js.map +0 -1
- package/dist/esm/components/IframeGameBridge.js +0 -113
- package/dist/esm/components/IframeGameBridge.js.map +0 -1
- package/dist/esm/components/SwipeArea.js +0 -56
- package/dist/esm/components/SwipeArea.js.map +0 -1
- package/dist/esm/components/SwipeArea.module.css.js +0 -8
- package/dist/esm/components/SwipeArea.module.css.js.map +0 -1
- package/dist/esm/components/TapButton.js +0 -56
- package/dist/esm/components/TapButton.js.map +0 -1
- package/dist/esm/components/TapButton.module.css.js +0 -8
- package/dist/esm/components/TapButton.module.css.js.map +0 -1
- package/dist/esm/context/RoomProvider.js +0 -109
- package/dist/esm/context/RoomProvider.js.map +0 -1
- package/dist/esm/hooks/useExternalGames.js +0 -47
- package/dist/esm/hooks/useExternalGames.js.map +0 -1
- package/dist/esm/hooks/useGameHost.js +0 -204
- package/dist/esm/hooks/useGameHost.js.map +0 -1
- package/dist/esm/hooks/useGamePlayer.js +0 -132
- package/dist/esm/hooks/useGamePlayer.js.map +0 -1
- package/dist/esm/iframe/index.js +0 -257
- package/dist/esm/iframe/index.js.map +0 -1
- package/dist/esm/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js +0 -29
- package/dist/esm/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
- package/dist/esm/server/index.js +0 -43
- package/dist/esm/server/index.js.map +0 -1
- package/dist/esm/transport/DirectTransport.js +0 -21
- package/dist/esm/transport/DirectTransport.js.map +0 -1
- package/dist/esm/utils/connectionMonitor.js +0 -75
- package/dist/esm/utils/connectionMonitor.js.map +0 -1
- package/dist/esm/utils/preloadAssets.js +0 -63
- package/dist/esm/utils/preloadAssets.js.map +0 -1
- package/dist/esm/utils/serverTime.js +0 -41
- package/dist/esm/utils/serverTime.js.map +0 -1
- package/dist/types/SmoreHost.d.ts +0 -187
- package/dist/types/SmoreHost.d.ts.map +0 -1
- package/dist/types/SmorePlayer.d.ts +0 -146
- package/dist/types/SmorePlayer.d.ts.map +0 -1
- package/dist/types/components/DirectionPad.d.ts +0 -21
- package/dist/types/components/DirectionPad.d.ts.map +0 -1
- package/dist/types/components/HoldButton.d.ts +0 -22
- package/dist/types/components/HoldButton.d.ts.map +0 -1
- package/dist/types/components/IframeGameBridge.d.ts +0 -38
- package/dist/types/components/IframeGameBridge.d.ts.map +0 -1
- package/dist/types/components/SwipeArea.d.ts +0 -19
- package/dist/types/components/SwipeArea.d.ts.map +0 -1
- package/dist/types/components/TapButton.d.ts +0 -19
- package/dist/types/components/TapButton.d.ts.map +0 -1
- package/dist/types/components/index.d.ts +0 -6
- package/dist/types/components/index.d.ts.map +0 -1
- package/dist/types/context/RoomProvider.d.ts +0 -69
- package/dist/types/context/RoomProvider.d.ts.map +0 -1
- package/dist/types/context/index.d.ts +0 -3
- package/dist/types/context/index.d.ts.map +0 -1
- package/dist/types/dev/DevSimulator.d.ts +0 -31
- package/dist/types/dev/DevSimulator.d.ts.map +0 -1
- package/dist/types/dev/index.d.ts +0 -2
- package/dist/types/dev/index.d.ts.map +0 -1
- package/dist/types/hooks/index.d.ts +0 -7
- package/dist/types/hooks/index.d.ts.map +0 -1
- package/dist/types/hooks/useExternalGames.d.ts +0 -32
- package/dist/types/hooks/useExternalGames.d.ts.map +0 -1
- package/dist/types/hooks/useGameHost.d.ts +0 -67
- package/dist/types/hooks/useGameHost.d.ts.map +0 -1
- package/dist/types/hooks/useGamePlayer.d.ts +0 -55
- package/dist/types/hooks/useGamePlayer.d.ts.map +0 -1
- package/dist/types/iframe/IframeRoomProvider.d.ts +0 -31
- package/dist/types/iframe/IframeRoomProvider.d.ts.map +0 -1
- package/dist/types/iframe/index.d.ts +0 -18
- package/dist/types/iframe/index.d.ts.map +0 -1
- package/dist/types/iframe/vanilla-entry.d.ts +0 -7
- package/dist/types/iframe/vanilla-entry.d.ts.map +0 -1
- package/dist/types/iframe/vanilla.d.ts +0 -49
- package/dist/types/iframe/vanilla.d.ts.map +0 -1
- package/dist/types/server/createGameRelay.d.ts +0 -26
- package/dist/types/server/createGameRelay.d.ts.map +0 -1
- package/dist/types/server/index.d.ts +0 -3
- package/dist/types/server/index.d.ts.map +0 -1
- package/dist/types/utils/connectionMonitor.d.ts +0 -57
- package/dist/types/utils/connectionMonitor.d.ts.map +0 -1
- package/dist/types/utils/index.d.ts +0 -7
- package/dist/types/utils/index.d.ts.map +0 -1
- package/dist/types/utils/preloadAssets.d.ts +0 -29
- package/dist/types/utils/preloadAssets.d.ts.map +0 -1
- package/dist/types/utils/serverTime.d.ts +0 -28
- package/dist/types/utils/serverTime.d.ts.map +0 -1
- package/dist/umd/smore-sdk-iframe.umd.js +0 -266
- package/dist/umd/smore-sdk-iframe.umd.js.map +0 -1
- package/dist/umd/smore-sdk-iframe.umd.min.js +0 -2
- package/dist/umd/smore-sdk-iframe.umd.min.js.map +0 -1
- package/dist/umd/smore-sdk-vanilla.umd.js +0 -1275
- package/dist/umd/smore-sdk-vanilla.umd.js.map +0 -1
- package/dist/umd/smore-sdk-vanilla.umd.min.js +0 -2
- package/dist/umd/smore-sdk-vanilla.umd.min.js.map +0 -1
|
@@ -1,65 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* createController - Factory function for creating a Controller instance.
|
|
3
3
|
*
|
|
4
|
-
* Returns a
|
|
5
|
-
*
|
|
4
|
+
* Returns a Controller instance synchronously. The controller begins listening
|
|
5
|
+
* for the bridge init message immediately. Use `.ready` to await full
|
|
6
|
+
* initialization, and `.on()` / lifecycle methods to register handlers
|
|
7
|
+
* (can be called before ready).
|
|
6
8
|
*
|
|
7
|
-
* @example
|
|
9
|
+
* @example
|
|
8
10
|
* ```ts
|
|
9
|
-
* const controller =
|
|
10
|
-
* listeners: {
|
|
11
|
-
* 'phase-update': (data) => setPhase(data.phase),
|
|
12
|
-
* },
|
|
13
|
-
* });
|
|
11
|
+
* const controller = createController<MyEvents>({ debug: true });
|
|
14
12
|
*
|
|
15
|
-
*
|
|
16
|
-
* controller.
|
|
17
|
-
* ```
|
|
13
|
+
* controller.on('phase-update', (data) => setPhase(data.phase));
|
|
14
|
+
* controller.onAllReady(() => console.log('Ready!'));
|
|
18
15
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* const controller = createController<MyEvents>({
|
|
22
|
-
* onReady: () => {
|
|
23
|
-
* console.log('Ready!');
|
|
24
|
-
* },
|
|
25
|
-
* listeners: { ... },
|
|
26
|
-
* });
|
|
27
|
-
* // Use controller.instance for immediate access
|
|
16
|
+
* await controller.ready;
|
|
17
|
+
* controller.send('tap', { x: 100, y: 200 });
|
|
28
18
|
* ```
|
|
29
19
|
*/
|
|
30
20
|
import type { Controller, ControllerConfig, EventMap } from './types';
|
|
31
21
|
/**
|
|
32
22
|
* Create a Controller instance for the player/phone side of your game.
|
|
33
23
|
*
|
|
34
|
-
* Returns a
|
|
35
|
-
*
|
|
24
|
+
* Returns a Controller instance synchronously. The controller begins listening
|
|
25
|
+
* for the bridge init message immediately. Register event handlers and
|
|
26
|
+
* lifecycle callbacks on the instance, then await `.ready` if needed.
|
|
36
27
|
*
|
|
37
28
|
* @template TEvents - Event map type for type-safe events
|
|
38
|
-
* @param config - Controller configuration
|
|
39
|
-
* @returns
|
|
29
|
+
* @param config - Controller configuration (debug, parentOrigin, timeout)
|
|
30
|
+
* @returns Controller instance
|
|
40
31
|
*
|
|
41
|
-
* @example
|
|
32
|
+
* @example
|
|
42
33
|
* ```ts
|
|
43
|
-
* const controller =
|
|
44
|
-
* listeners: {
|
|
45
|
-
* 'phase-update': (data) => setPhase(data.phase),
|
|
46
|
-
* },
|
|
47
|
-
* });
|
|
34
|
+
* const controller = createController<MyEvents>({ debug: true });
|
|
48
35
|
*
|
|
49
|
-
* controller.
|
|
50
|
-
*
|
|
36
|
+
* controller.on('phase-update', (data) => setPhase(data.phase));
|
|
37
|
+
* controller.onAllReady(() => console.log('Ready!'));
|
|
51
38
|
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* const result = createController<MyEvents>({
|
|
55
|
-
* onReady: () => {
|
|
56
|
-
* result.instance.send('ready', {});
|
|
57
|
-
* },
|
|
58
|
-
* listeners: { ... },
|
|
59
|
-
* });
|
|
39
|
+
* await controller.ready;
|
|
40
|
+
* controller.send('tap', { x: 100, y: 200 });
|
|
60
41
|
* ```
|
|
61
42
|
*/
|
|
62
|
-
export declare function createController<TEvents extends EventMap = EventMap>(config?: ControllerConfig<TEvents>):
|
|
63
|
-
instance: Controller<TEvents>;
|
|
64
|
-
};
|
|
43
|
+
export declare function createController<TEvents extends EventMap = EventMap>(config?: ControllerConfig<TEvents>): Controller<TEvents>;
|
|
65
44
|
//# sourceMappingURL=controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/controller.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAIhB,QAAQ,EAMT,MAAM,SAAS,CAAC;AA0wBjB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,QAAQ,GAAG,QAAQ,EAClE,MAAM,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,GACjC,UAAU,CAAC,OAAO,CAAC,CAErB"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* S'MORE Game SDK
|
|
3
3
|
*
|
|
4
4
|
* Pure SDK package for building party games.
|
|
5
|
-
* Provides
|
|
5
|
+
* Provides event emitter pattern API with type-safe events.
|
|
6
6
|
*
|
|
7
7
|
* Works in any environment: React, Phaser, Vanilla JS.
|
|
8
8
|
*
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
* ```ts
|
|
11
11
|
* import { createScreen } from '@smoregg/sdk';
|
|
12
12
|
*
|
|
13
|
-
* const screen =
|
|
14
|
-
* onControllerJoin: (playerIndex) => console.log('Player joined:', playerIndex),
|
|
15
|
-
* listeners: {
|
|
16
|
-
* tap: (playerIndex, data) => handleTap(playerIndex),
|
|
17
|
-
* },
|
|
18
|
-
* });
|
|
13
|
+
* const screen = createScreen<MyEvents>({ debug: true });
|
|
19
14
|
*
|
|
15
|
+
* screen.on('tap', (playerIndex, data) => handleTap(playerIndex, data));
|
|
16
|
+
* screen.onAllReady(() => startGame());
|
|
17
|
+
* screen.onControllerJoin((pi, info) => console.log('Player joined:', pi));
|
|
18
|
+
*
|
|
19
|
+
* await screen.ready;
|
|
20
20
|
* screen.broadcast('phase-update', { phase: 'playing' });
|
|
21
21
|
* screen.gameOver({ scores: { 0: 100, 1: 50 } });
|
|
22
22
|
* ```
|
|
@@ -25,13 +25,13 @@
|
|
|
25
25
|
* ```ts
|
|
26
26
|
* import { createController } from '@smoregg/sdk';
|
|
27
27
|
*
|
|
28
|
-
* const controller =
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* });
|
|
28
|
+
* const controller = createController<MyEvents>({ debug: true });
|
|
29
|
+
*
|
|
30
|
+
* controller.on('phase-update', (data) => handlePhase(data.phase));
|
|
31
|
+
* controller.onAllReady(() => console.log('Ready!'));
|
|
33
32
|
*
|
|
34
|
-
*
|
|
33
|
+
* await controller.ready;
|
|
34
|
+
* console.log('My index:', controller.myIndex);
|
|
35
35
|
* controller.send('tap', { timestamp: Date.now() });
|
|
36
36
|
* ```
|
|
37
37
|
*/
|
|
@@ -41,7 +41,7 @@ export { SmoreSDKError } from './errors';
|
|
|
41
41
|
export { validateEventName } from './events';
|
|
42
42
|
export { configure } from './config';
|
|
43
43
|
export type { SmoreGlobalConfig } from './config';
|
|
44
|
-
export type { PlayerIndex, RoomCode, EventMap, EventNames, EventData, Controller, ControllerConfig, ControllerEventHandler,
|
|
44
|
+
export type { PlayerIndex, RoomCode, EventMap, EventNames, EventData, Controller, ControllerConfig, ControllerEventHandler, ControllerInfo, CharacterAppearance, Screen, ScreenConfig, ScreenEventHandler, GameResults, SmoreError, SmoreErrorCode, LogLevel, DebugOptions, GameMetadata, } from './types';
|
|
45
45
|
export { createMockScreen, createMockController } from './testing';
|
|
46
46
|
export type { MockScreen, MockController, MockOptions } from './testing';
|
|
47
47
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD,YAAY,EAEV,WAAW,EACX,QAAQ,EAER,QAAQ,EACR,UAAU,EACV,SAAS,EAET,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD,YAAY,EAEV,WAAW,EACX,QAAQ,EAER,QAAQ,EACR,UAAU,EACV,SAAS,EAET,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EAEnB,MAAM,EACN,YAAY,EACZ,kBAAkB,EAElB,WAAW,EAEX,UAAU,EACV,cAAc,EAEd,QAAQ,EACR,YAAY,EAEZ,YAAY,GACb,MAAM,SAAS,CAAC;AAMjB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/types/screen.d.ts
CHANGED
|
@@ -1,66 +1,55 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* createScreen - Factory function for Screen instances (Host/TV side)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Synchronous factory with event emitter pattern. Returns a Screen instance
|
|
5
|
+
* immediately. Use `.ready` to await full initialization, and `.on()` /
|
|
6
|
+
* lifecycle methods to register handlers (can be called before ready).
|
|
5
7
|
*
|
|
6
|
-
* @example
|
|
8
|
+
* @example
|
|
7
9
|
* ```ts
|
|
8
10
|
* interface MyEvents {
|
|
9
11
|
* tap: { x: number; y: number };
|
|
10
12
|
* 'phase-update': { phase: 'lobby' | 'playing' | 'results' };
|
|
11
13
|
* }
|
|
12
14
|
*
|
|
13
|
-
* const screen =
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* },
|
|
15
|
+
* const screen = createScreen<MyEvents>({ debug: true });
|
|
16
|
+
*
|
|
17
|
+
* screen.on('tap', (playerIndex, data) => {
|
|
18
|
+
* console.log(`Player ${playerIndex} tapped at`, data.x, data.y);
|
|
17
19
|
* });
|
|
18
20
|
*
|
|
19
|
-
* screen.
|
|
20
|
-
*
|
|
21
|
+
* screen.onAllReady(() => startGame());
|
|
22
|
+
* screen.onControllerJoin((pi, info) => addPlayer(pi, info));
|
|
21
23
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* const screen = createScreen<MyEvents>({
|
|
25
|
-
* onReady: () => screen.broadcast('ready', {}),
|
|
26
|
-
* listeners: { ... },
|
|
27
|
-
* });
|
|
28
|
-
* // Use screen.instance for immediate access
|
|
24
|
+
* await screen.ready;
|
|
25
|
+
* screen.broadcast('phase-update', { phase: 'playing' });
|
|
29
26
|
* ```
|
|
30
27
|
*/
|
|
31
28
|
import type { EventMap, Screen, ScreenConfig } from './types';
|
|
32
29
|
/**
|
|
33
30
|
* Create a Screen instance for the host/TV side of your game.
|
|
34
31
|
*
|
|
35
|
-
* Returns a
|
|
36
|
-
*
|
|
32
|
+
* Returns a Screen instance synchronously. The screen begins listening
|
|
33
|
+
* for the bridge init message immediately. Register event handlers and
|
|
34
|
+
* lifecycle callbacks on the instance, then await `.ready` if needed.
|
|
37
35
|
*
|
|
38
36
|
* @template TEvents - Event map type for type-safe events
|
|
39
|
-
* @param config - Screen configuration
|
|
40
|
-
* @returns
|
|
37
|
+
* @param config - Screen configuration (debug, parentOrigin, timeout)
|
|
38
|
+
* @returns Screen instance
|
|
41
39
|
*
|
|
42
|
-
* @example
|
|
40
|
+
* @example
|
|
43
41
|
* ```ts
|
|
44
|
-
* const screen =
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* }
|
|
42
|
+
* const screen = createScreen<MyEvents>({ debug: true });
|
|
43
|
+
*
|
|
44
|
+
* screen.on('tap', (playerIndex, data) => {
|
|
45
|
+
* screen.broadcast('round-result', { winner: playerIndex });
|
|
48
46
|
* });
|
|
49
47
|
*
|
|
50
|
-
* screen.
|
|
51
|
-
*
|
|
48
|
+
* screen.onAllReady(() => startGame());
|
|
49
|
+
* screen.onControllerJoin((pi, info) => addPlayer(pi, info));
|
|
52
50
|
*
|
|
53
|
-
*
|
|
54
|
-
* ```ts
|
|
55
|
-
* const { instance: screen } = createScreen<MyEvents>({
|
|
56
|
-
* onReady: () => {
|
|
57
|
-
* screen.broadcast('game-start', { countdown: 3 });
|
|
58
|
-
* },
|
|
59
|
-
* listeners: { ... },
|
|
60
|
-
* });
|
|
51
|
+
* await screen.ready;
|
|
61
52
|
* ```
|
|
62
53
|
*/
|
|
63
|
-
export declare function createScreen<TEvents extends EventMap = EventMap>(config?: ScreenConfig<TEvents>):
|
|
64
|
-
instance: Screen<TEvents>;
|
|
65
|
-
};
|
|
54
|
+
export declare function createScreen<TEvents extends EventMap = EventMap>(config?: ScreenConfig<TEvents>): Screen<TEvents>;
|
|
66
55
|
//# sourceMappingURL=screen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/screen.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/screen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EACV,QAAQ,EAGR,MAAM,EACN,YAAY,EAQb,MAAM,SAAS,CAAC;AA8zBjB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAS,QAAQ,GAAG,QAAQ,EAC9D,MAAM,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,GAC7B,MAAM,CAAC,OAAO,CAAC,CAEjB"}
|
package/dist/types/testing.d.ts
CHANGED
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
* Mock implementations of Screen and Controller for unit testing.
|
|
5
5
|
* All methods work synchronously for predictable test execution.
|
|
6
6
|
*
|
|
7
|
+
* Mocks use the same event emitter pattern as the real implementations:
|
|
8
|
+
* lifecycle callbacks are registered via methods (onAllReady, onControllerJoin, etc.)
|
|
9
|
+
* on the returned instance rather than via config options.
|
|
10
|
+
*
|
|
7
11
|
* @packageDocumentation
|
|
8
12
|
*/
|
|
9
13
|
import type { EventMap, MockScreen, MockController, MockOptions } from './types';
|
|
@@ -13,6 +17,9 @@ import type { EventMap, MockScreen, MockController, MockOptions } from './types'
|
|
|
13
17
|
* All methods work synchronously. Events can be simulated and recorded
|
|
14
18
|
* for assertions in unit tests.
|
|
15
19
|
*
|
|
20
|
+
* Uses the same event emitter pattern as real Screen: register lifecycle
|
|
21
|
+
* callbacks via methods on the returned instance.
|
|
22
|
+
*
|
|
16
23
|
* @example
|
|
17
24
|
* ```ts
|
|
18
25
|
* const screen = createMockScreen<MyEvents>({
|
|
@@ -22,6 +29,9 @@ import type { EventMap, MockScreen, MockController, MockOptions } from './types'
|
|
|
22
29
|
* ],
|
|
23
30
|
* });
|
|
24
31
|
*
|
|
32
|
+
* screen.on('tap', (pi, data) => handleTap(pi, data));
|
|
33
|
+
* screen.onAllReady(() => startGame());
|
|
34
|
+
*
|
|
25
35
|
* // Simulate player input
|
|
26
36
|
* screen.simulateEvent(0, 'tap', { x: 100, y: 200 });
|
|
27
37
|
*
|
|
@@ -39,12 +49,18 @@ export declare function createMockScreen<TEvents extends EventMap = EventMap>(op
|
|
|
39
49
|
* All methods work synchronously. Events can be simulated and recorded
|
|
40
50
|
* for assertions in unit tests.
|
|
41
51
|
*
|
|
52
|
+
* Uses the same event emitter pattern as real Controller: register lifecycle
|
|
53
|
+
* callbacks via methods on the returned instance.
|
|
54
|
+
*
|
|
42
55
|
* @example
|
|
43
56
|
* ```ts
|
|
44
57
|
* const controller = createMockController<MyEvents>({
|
|
45
58
|
* myIndex: 0,
|
|
46
59
|
* });
|
|
47
60
|
*
|
|
61
|
+
* controller.on('your-turn', (data) => handleTurn(data));
|
|
62
|
+
* controller.onAllReady(() => console.log('Ready!'));
|
|
63
|
+
*
|
|
48
64
|
* // Simulate receiving from screen
|
|
49
65
|
* controller.simulateEvent('your-turn', { timeLimit: 30 });
|
|
50
66
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/testing.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,QAAQ,EASR,UAAU,EACV,cAAc,EACd,WAAW,EAEZ,MAAM,SAAS,CAAC;AAkBjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,QAAQ,GAAG,QAAQ,EAClE,OAAO,GAAE,WAAgB,GACxB,UAAU,CAAC,OAAO,CAAC,CA+WrB;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,SAAS,QAAQ,GAAG,QAAQ,EACtE,OAAO,GAAE,WAAgB,GACxB,cAAc,CAAC,OAAO,CAAC,CAoSzB;AAMD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC"}
|