@mnbroatch/boardgame.io 0.0.1

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 (296) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +102 -0
  3. package/ai/package.json +7 -0
  4. package/client/package.json +7 -0
  5. package/core/package.json +7 -0
  6. package/debug/package.json +7 -0
  7. package/dist/boardgameio.es.js +14238 -0
  8. package/dist/boardgameio.js +14277 -0
  9. package/dist/boardgameio.min.js +16 -0
  10. package/dist/cjs/Debug-9d141c06.js +9586 -0
  11. package/dist/cjs/ai-e0e8a768.js +377 -0
  12. package/dist/cjs/ai.js +20 -0
  13. package/dist/cjs/client-76dec77b.js +258 -0
  14. package/dist/cjs/client-a22d7500.js +524 -0
  15. package/dist/cjs/client.js +26 -0
  16. package/dist/cjs/core.js +52 -0
  17. package/dist/cjs/debug.js +18 -0
  18. package/dist/cjs/filter-player-view-bb02e2f6.js +89 -0
  19. package/dist/cjs/initialize-267fcd69.js +61 -0
  20. package/dist/cjs/internal.js +25 -0
  21. package/dist/cjs/master-2904879d.js +320 -0
  22. package/dist/cjs/master.js +18 -0
  23. package/dist/cjs/multiplayer.js +23 -0
  24. package/dist/cjs/plugin-random-7425844d.js +229 -0
  25. package/dist/cjs/plugins.js +59 -0
  26. package/dist/cjs/react-native.js +182 -0
  27. package/dist/cjs/react.js +727 -0
  28. package/dist/cjs/reducer-16eec232.js +1203 -0
  29. package/dist/cjs/server.js +4087 -0
  30. package/dist/cjs/socketio-7a0837eb.js +478 -0
  31. package/dist/cjs/testing.js +30 -0
  32. package/dist/cjs/transport-b1874dfa.js +37 -0
  33. package/dist/cjs/turn-order-b2ff8740.js +1136 -0
  34. package/dist/cjs/util-fcfd8fb8.js +140 -0
  35. package/dist/esm/Debug-0141fe2d.js +9577 -0
  36. package/dist/esm/ai-5c06e761.js +371 -0
  37. package/dist/esm/ai.js +8 -0
  38. package/dist/esm/client-2e653027.js +522 -0
  39. package/dist/esm/client-5f57c3f2.js +255 -0
  40. package/dist/esm/client.js +16 -0
  41. package/dist/esm/core.js +40 -0
  42. package/dist/esm/debug.js +10 -0
  43. package/dist/esm/filter-player-view-2c6cc96f.js +87 -0
  44. package/dist/esm/initialize-11d626ca.js +59 -0
  45. package/dist/esm/internal.js +10 -0
  46. package/dist/esm/master-fa8f2e43.js +318 -0
  47. package/dist/esm/master.js +10 -0
  48. package/dist/esm/multiplayer.js +14 -0
  49. package/dist/esm/plugin-random-087f861e.js +226 -0
  50. package/dist/esm/plugins.js +55 -0
  51. package/dist/esm/react-native.js +173 -0
  52. package/dist/esm/react.js +716 -0
  53. package/dist/esm/reducer-c46da7e5.js +1198 -0
  54. package/dist/esm/socketio-c22ffa65.js +455 -0
  55. package/dist/esm/testing.js +26 -0
  56. package/dist/esm/transport-ce07b771.js +35 -0
  57. package/dist/esm/turn-order-376d315e.js +1091 -0
  58. package/dist/esm/util-b6147cef.js +135 -0
  59. package/dist/types/packages/ai.d.ts +5 -0
  60. package/dist/types/packages/client.d.ts +3 -0
  61. package/dist/types/packages/core.d.ts +5 -0
  62. package/dist/types/packages/debug.d.ts +2 -0
  63. package/dist/types/packages/internal.d.ts +8 -0
  64. package/dist/types/packages/master.d.ts +2 -0
  65. package/dist/types/packages/multiplayer.d.ts +3 -0
  66. package/dist/types/packages/plugins.d.ts +3 -0
  67. package/dist/types/packages/react-native.d.ts +2 -0
  68. package/dist/types/packages/react.d.ts +3 -0
  69. package/dist/types/packages/server.d.ts +6 -0
  70. package/dist/types/packages/testing.d.ts +1 -0
  71. package/dist/types/src/ai/ai.d.ts +53 -0
  72. package/dist/types/src/ai/ai.test.d.ts +1 -0
  73. package/dist/types/src/ai/bot.d.ts +40 -0
  74. package/dist/types/src/ai/mcts-bot.d.ts +60 -0
  75. package/dist/types/src/ai/random-bot.d.ts +27 -0
  76. package/dist/types/src/client/client.d.ts +104 -0
  77. package/dist/types/src/client/client.test.d.ts +1 -0
  78. package/dist/types/src/client/debug/tests/debug.test.d.ts +1 -0
  79. package/dist/types/src/client/manager.d.ts +61 -0
  80. package/dist/types/src/client/react.d.ts +75 -0
  81. package/dist/types/src/client/react.ssr.test.d.ts +4 -0
  82. package/dist/types/src/client/react.test.d.ts +1 -0
  83. package/dist/types/src/client/transport/dummy.d.ts +18 -0
  84. package/dist/types/src/client/transport/local.d.ts +59 -0
  85. package/dist/types/src/client/transport/local.test.d.ts +1 -0
  86. package/dist/types/src/client/transport/socketio.d.ts +45 -0
  87. package/dist/types/src/client/transport/socketio.test.d.ts +1 -0
  88. package/dist/types/src/client/transport/transport.d.ts +50 -0
  89. package/dist/types/src/client/transport/transport.test.d.ts +1 -0
  90. package/dist/types/src/core/action-creators.d.ts +144 -0
  91. package/dist/types/src/core/action-types.d.ts +10 -0
  92. package/dist/types/src/core/backwards-compatibility.d.ts +12 -0
  93. package/dist/types/src/core/constants.d.ts +6 -0
  94. package/dist/types/src/core/errors.d.ts +15 -0
  95. package/dist/types/src/core/flow.d.ts +28 -0
  96. package/dist/types/src/core/flow.test.d.ts +1 -0
  97. package/dist/types/src/core/game-methods.d.ts +9 -0
  98. package/dist/types/src/core/game.d.ts +26 -0
  99. package/dist/types/src/core/game.test.d.ts +1 -0
  100. package/dist/types/src/core/initialize.d.ts +9 -0
  101. package/dist/types/src/core/logger.d.ts +2 -0
  102. package/dist/types/src/core/player-view.d.ts +7 -0
  103. package/dist/types/src/core/player-view.test.d.ts +1 -0
  104. package/dist/types/src/core/reducer.d.ts +155 -0
  105. package/dist/types/src/core/reducer.test.d.ts +1 -0
  106. package/dist/types/src/core/turn-order.d.ts +179 -0
  107. package/dist/types/src/core/turn-order.test.d.ts +8 -0
  108. package/dist/types/src/lobby/client.d.ts +194 -0
  109. package/dist/types/src/lobby/client.test.d.ts +1 -0
  110. package/dist/types/src/lobby/connection.d.ts +44 -0
  111. package/dist/types/src/lobby/connection.test.d.ts +1 -0
  112. package/dist/types/src/lobby/create-match-form.d.ts +26 -0
  113. package/dist/types/src/lobby/login-form.d.ts +23 -0
  114. package/dist/types/src/lobby/match-instance.d.ts +31 -0
  115. package/dist/types/src/lobby/react.d.ts +113 -0
  116. package/dist/types/src/lobby/react.ssr.test.d.ts +4 -0
  117. package/dist/types/src/lobby/react.test.d.ts +1 -0
  118. package/dist/types/src/master/filter-player-view.d.ts +96 -0
  119. package/dist/types/src/master/filter-player-view.test.d.ts +1 -0
  120. package/dist/types/src/master/master.d.ts +94 -0
  121. package/dist/types/src/master/master.test.d.ts +1 -0
  122. package/dist/types/src/plugins/events/events.d.ts +54 -0
  123. package/dist/types/src/plugins/events/events.test.d.ts +1 -0
  124. package/dist/types/src/plugins/main.d.ts +75 -0
  125. package/dist/types/src/plugins/main.test.d.ts +1 -0
  126. package/dist/types/src/plugins/plugin-events.d.ts +5 -0
  127. package/dist/types/src/plugins/plugin-immer.d.ts +7 -0
  128. package/dist/types/src/plugins/plugin-immer.test.d.ts +1 -0
  129. package/dist/types/src/plugins/plugin-log.d.ts +14 -0
  130. package/dist/types/src/plugins/plugin-log.test.d.ts +1 -0
  131. package/dist/types/src/plugins/plugin-player.d.ts +29 -0
  132. package/dist/types/src/plugins/plugin-player.test.d.ts +1 -0
  133. package/dist/types/src/plugins/plugin-random.d.ts +4 -0
  134. package/dist/types/src/plugins/plugin-serializable.d.ts +7 -0
  135. package/dist/types/src/plugins/plugin-serializable.test.d.ts +1 -0
  136. package/dist/types/src/plugins/random/random.alea.d.ts +19 -0
  137. package/dist/types/src/plugins/random/random.d.ts +54 -0
  138. package/dist/types/src/plugins/random/random.test.d.ts +1 -0
  139. package/dist/types/src/server/api.d.ts +13 -0
  140. package/dist/types/src/server/api.test.d.ts +1 -0
  141. package/dist/types/src/server/auth.d.ts +38 -0
  142. package/dist/types/src/server/auth.test.d.ts +1 -0
  143. package/dist/types/src/server/cors.d.ts +4 -0
  144. package/dist/types/src/server/cors.test.d.ts +1 -0
  145. package/dist/types/src/server/db/base.d.ts +192 -0
  146. package/dist/types/src/server/db/flatfile.d.ts +44 -0
  147. package/dist/types/src/server/db/flatfile.test.d.ts +1 -0
  148. package/dist/types/src/server/db/index.d.ts +4 -0
  149. package/dist/types/src/server/db/index.test.d.ts +1 -0
  150. package/dist/types/src/server/db/inmemory.d.ts +43 -0
  151. package/dist/types/src/server/db/inmemory.test.d.ts +1 -0
  152. package/dist/types/src/server/db/localstorage.d.ts +7 -0
  153. package/dist/types/src/server/db/localstorage.test.d.ts +1 -0
  154. package/dist/types/src/server/index.d.ts +68 -0
  155. package/dist/types/src/server/index.test.d.ts +1 -0
  156. package/dist/types/src/server/transport/pubsub/generic-pub-sub.d.ts +6 -0
  157. package/dist/types/src/server/transport/pubsub/in-memory-pub-sub.d.ts +7 -0
  158. package/dist/types/src/server/transport/pubsub/in-memory-pub-sub.test.d.ts +1 -0
  159. package/dist/types/src/server/transport/socketio-simultaneous.test.d.ts +1 -0
  160. package/dist/types/src/server/transport/socketio.d.ts +65 -0
  161. package/dist/types/src/server/transport/socketio.test.d.ts +1 -0
  162. package/dist/types/src/server/util.d.ts +35 -0
  163. package/dist/types/src/testing/mock-random.d.ts +15 -0
  164. package/dist/types/src/testing/mock-random.test.d.ts +1 -0
  165. package/dist/types/src/types.d.ts +387 -0
  166. package/internal/package.json +7 -0
  167. package/master/package.json +7 -0
  168. package/multiplayer/package.json +7 -0
  169. package/package.json +211 -0
  170. package/plugins/package.json +7 -0
  171. package/react/package.json +7 -0
  172. package/react-native/package.json +7 -0
  173. package/server/package.json +6 -0
  174. package/src/ai/ai.test.ts +433 -0
  175. package/src/ai/ai.ts +84 -0
  176. package/src/ai/bot.ts +122 -0
  177. package/src/ai/mcts-bot.ts +331 -0
  178. package/src/ai/random-bot.ts +20 -0
  179. package/src/client/client.test.ts +993 -0
  180. package/src/client/client.ts +588 -0
  181. package/src/client/debug/Debug.svelte +239 -0
  182. package/src/client/debug/Menu.svelte +65 -0
  183. package/src/client/debug/ai/AI.svelte +215 -0
  184. package/src/client/debug/ai/Options.svelte +48 -0
  185. package/src/client/debug/info/Info.svelte +22 -0
  186. package/src/client/debug/info/Item.svelte +24 -0
  187. package/src/client/debug/log/Log.svelte +157 -0
  188. package/src/client/debug/log/LogEvent.svelte +149 -0
  189. package/src/client/debug/log/LogMetadata.svelte +7 -0
  190. package/src/client/debug/log/PhaseMarker.svelte +27 -0
  191. package/src/client/debug/log/TurnMarker.svelte +23 -0
  192. package/src/client/debug/main/ClientSwitcher.svelte +59 -0
  193. package/src/client/debug/main/Controls.svelte +58 -0
  194. package/src/client/debug/main/Hotkey.svelte +84 -0
  195. package/src/client/debug/main/InteractiveFunction.svelte +85 -0
  196. package/src/client/debug/main/Main.svelte +121 -0
  197. package/src/client/debug/main/Move.svelte +68 -0
  198. package/src/client/debug/main/PlayerInfo.svelte +70 -0
  199. package/src/client/debug/mcts/Action.svelte +22 -0
  200. package/src/client/debug/mcts/MCTS.svelte +78 -0
  201. package/src/client/debug/mcts/Table.svelte +98 -0
  202. package/src/client/debug/tests/JSONTree.mock.svelte +3 -0
  203. package/src/client/debug/tests/debug.test.ts +183 -0
  204. package/src/client/debug/utils/shortcuts.js +50 -0
  205. package/src/client/debug/utils/shortcuts.test.js +49 -0
  206. package/src/client/manager.ts +177 -0
  207. package/src/client/react-native.js +136 -0
  208. package/src/client/react-native.test.js +229 -0
  209. package/src/client/react.ssr.test.tsx +24 -0
  210. package/src/client/react.test.tsx +213 -0
  211. package/src/client/react.tsx +192 -0
  212. package/src/client/transport/dummy.ts +19 -0
  213. package/src/client/transport/local.test.ts +353 -0
  214. package/src/client/transport/local.ts +230 -0
  215. package/src/client/transport/socketio.test.ts +328 -0
  216. package/src/client/transport/socketio.ts +210 -0
  217. package/src/client/transport/transport.test.ts +27 -0
  218. package/src/client/transport/transport.ts +95 -0
  219. package/src/core/action-creators.ts +159 -0
  220. package/src/core/action-types.ts +18 -0
  221. package/src/core/backwards-compatibility.ts +23 -0
  222. package/src/core/constants.ts +6 -0
  223. package/src/core/errors.ts +35 -0
  224. package/src/core/flow.test.ts +2433 -0
  225. package/src/core/flow.ts +897 -0
  226. package/src/core/game-methods.ts +9 -0
  227. package/src/core/game.test.ts +286 -0
  228. package/src/core/game.ts +114 -0
  229. package/src/core/initialize.ts +77 -0
  230. package/src/core/logger.test.js +90 -0
  231. package/src/core/logger.ts +18 -0
  232. package/src/core/player-view.test.ts +50 -0
  233. package/src/core/player-view.ts +39 -0
  234. package/src/core/reducer.test.ts +991 -0
  235. package/src/core/reducer.ts +532 -0
  236. package/src/core/turn-order.test.ts +1123 -0
  237. package/src/core/turn-order.ts +473 -0
  238. package/src/lobby/client.test.ts +385 -0
  239. package/src/lobby/client.ts +358 -0
  240. package/src/lobby/connection.test.ts +207 -0
  241. package/src/lobby/connection.ts +162 -0
  242. package/src/lobby/create-match-form.tsx +122 -0
  243. package/src/lobby/login-form.tsx +75 -0
  244. package/src/lobby/match-instance.tsx +135 -0
  245. package/src/lobby/react.ssr.test.tsx +22 -0
  246. package/src/lobby/react.test.tsx +594 -0
  247. package/src/lobby/react.tsx +402 -0
  248. package/src/master/filter-player-view.test.ts +381 -0
  249. package/src/master/filter-player-view.ts +102 -0
  250. package/src/master/master.test.ts +1068 -0
  251. package/src/master/master.ts +492 -0
  252. package/src/plugins/events/events.test.ts +108 -0
  253. package/src/plugins/events/events.ts +209 -0
  254. package/src/plugins/main.test.ts +411 -0
  255. package/src/plugins/main.ts +314 -0
  256. package/src/plugins/plugin-events.ts +40 -0
  257. package/src/plugins/plugin-immer.test.ts +86 -0
  258. package/src/plugins/plugin-immer.ts +37 -0
  259. package/src/plugins/plugin-log.test.ts +37 -0
  260. package/src/plugins/plugin-log.ts +40 -0
  261. package/src/plugins/plugin-player.test.ts +172 -0
  262. package/src/plugins/plugin-player.ts +100 -0
  263. package/src/plugins/plugin-random.ts +40 -0
  264. package/src/plugins/plugin-serializable.test.ts +40 -0
  265. package/src/plugins/plugin-serializable.ts +55 -0
  266. package/src/plugins/random/random.alea.ts +109 -0
  267. package/src/plugins/random/random.test.ts +167 -0
  268. package/src/plugins/random/random.ts +198 -0
  269. package/src/server/api.test.ts +1699 -0
  270. package/src/server/api.ts +527 -0
  271. package/src/server/auth.test.ts +275 -0
  272. package/src/server/auth.ts +89 -0
  273. package/src/server/cors.test.ts +121 -0
  274. package/src/server/cors.ts +7 -0
  275. package/src/server/db/base.ts +296 -0
  276. package/src/server/db/flatfile.test.ts +221 -0
  277. package/src/server/db/flatfile.ts +228 -0
  278. package/src/server/db/index.test.ts +8 -0
  279. package/src/server/db/index.ts +12 -0
  280. package/src/server/db/inmemory.test.ts +143 -0
  281. package/src/server/db/inmemory.ts +143 -0
  282. package/src/server/db/localstorage.test.ts +73 -0
  283. package/src/server/db/localstorage.ts +44 -0
  284. package/src/server/index.test.ts +265 -0
  285. package/src/server/index.ts +175 -0
  286. package/src/server/transport/pubsub/generic-pub-sub.ts +11 -0
  287. package/src/server/transport/pubsub/in-memory-pub-sub.test.ts +47 -0
  288. package/src/server/transport/pubsub/in-memory-pub-sub.ts +28 -0
  289. package/src/server/transport/socketio-simultaneous.test.ts +603 -0
  290. package/src/server/transport/socketio.test.ts +303 -0
  291. package/src/server/transport/socketio.ts +279 -0
  292. package/src/server/util.ts +85 -0
  293. package/src/testing/mock-random.test.ts +45 -0
  294. package/src/testing/mock-random.ts +27 -0
  295. package/src/types.ts +511 -0
  296. package/testing/package.json +7 -0
@@ -0,0 +1,387 @@
1
+ import type { Object } from 'ts-toolbelt';
2
+ import type Koa from 'koa';
3
+ import type { Store as ReduxStore } from 'redux';
4
+ import type * as ActionCreators from './core/action-creators';
5
+ import type { ActionErrorType, UpdateErrorType } from './core/errors';
6
+ import type { Flow } from './core/flow';
7
+ import type { CreateGameReducer } from './core/reducer';
8
+ import type { INVALID_MOVE } from './core/constants';
9
+ import type { GameMethod } from './core/game-methods';
10
+ import type { Auth } from './server/auth';
11
+ import type * as StorageAPI from './server/db/base';
12
+ import type { EventsAPI } from './plugins/plugin-events';
13
+ import type { LogAPI } from './plugins/plugin-log';
14
+ import type { RandomAPI } from './plugins/random/random';
15
+ import type { Operation } from 'rfc6902';
16
+ export type { StorageAPI };
17
+ export declare type AnyFn = (...args: any[]) => any;
18
+ export interface State<G extends any = any> {
19
+ G: G;
20
+ ctx: Ctx;
21
+ deltalog?: Array<LogEntry>;
22
+ plugins: {
23
+ [pluginName: string]: PluginState;
24
+ };
25
+ _undo: Array<Undo<G>>;
26
+ _redo: Array<Undo<G>>;
27
+ _stateID: number;
28
+ }
29
+ export declare type ErrorType = UpdateErrorType | ActionErrorType;
30
+ export interface ActionError {
31
+ type: ErrorType;
32
+ payload?: any;
33
+ }
34
+ export interface TransientMetadata {
35
+ error?: ActionError;
36
+ }
37
+ export declare type ActionResult = any;
38
+ export interface TransientState<G extends any = any> extends State<G> {
39
+ transients?: TransientMetadata;
40
+ }
41
+ export declare type PartialGameState = Pick<State, 'G' | 'ctx' | 'plugins'>;
42
+ export declare type StageName = string;
43
+ export declare type PlayerID = string;
44
+ export declare type StageArg = StageName | {
45
+ stage?: StageName;
46
+ /** @deprecated Use `minMoves` and `maxMoves` instead. */
47
+ moveLimit?: number;
48
+ minMoves?: number;
49
+ maxMoves?: number;
50
+ };
51
+ export declare type ActivePlayersArg = PlayerID[] | {
52
+ currentPlayer?: StageArg;
53
+ others?: StageArg;
54
+ all?: StageArg;
55
+ value?: Record<PlayerID, StageArg>;
56
+ minMoves?: number;
57
+ maxMoves?: number;
58
+ /** @deprecated Use `minMoves` and `maxMoves` instead. */
59
+ moveLimit?: number;
60
+ revert?: boolean;
61
+ next?: ActivePlayersArg;
62
+ };
63
+ export interface ActivePlayers {
64
+ [playerID: string]: StageName;
65
+ }
66
+ export interface Ctx {
67
+ numPlayers: number;
68
+ playOrder: Array<PlayerID>;
69
+ playOrderPos: number;
70
+ activePlayers: null | ActivePlayers;
71
+ currentPlayer: PlayerID;
72
+ numMoves?: number;
73
+ gameover?: any;
74
+ turn: number;
75
+ phase: string;
76
+ _activePlayersMinMoves?: Record<PlayerID, number>;
77
+ _activePlayersMaxMoves?: Record<PlayerID, number>;
78
+ _activePlayersNumMoves?: Record<PlayerID, number>;
79
+ _prevActivePlayers?: Array<{
80
+ activePlayers: null | ActivePlayers;
81
+ _activePlayersMinMoves?: Record<PlayerID, number>;
82
+ _activePlayersMaxMoves?: Record<PlayerID, number>;
83
+ _activePlayersNumMoves?: Record<PlayerID, number>;
84
+ }>;
85
+ _nextActivePlayers?: ActivePlayersArg;
86
+ _random?: {
87
+ seed: string | number;
88
+ };
89
+ }
90
+ export interface DefaultPluginAPIs {
91
+ events: EventsAPI;
92
+ log: LogAPI;
93
+ random: RandomAPI;
94
+ }
95
+ export interface PluginState {
96
+ data: any;
97
+ api?: any;
98
+ }
99
+ export interface LogEntry {
100
+ action: ActionShape.MakeMove | ActionShape.GameEvent | ActionShape.Undo | ActionShape.Redo;
101
+ _stateID: number;
102
+ turn: number;
103
+ phase: string;
104
+ redact?: boolean;
105
+ automatic?: boolean;
106
+ metadata?: any;
107
+ patch?: Operation[];
108
+ }
109
+ export interface PluginContext<API extends any = any, Data extends any = any, G extends any = any> {
110
+ G: G;
111
+ ctx: Ctx;
112
+ game: Game;
113
+ api: API;
114
+ data: Data;
115
+ }
116
+ export interface Plugin<API extends any = any, Data extends any = any, G extends any = any> {
117
+ name: string;
118
+ noClient?: (context: PluginContext<API, Data, G>) => boolean;
119
+ setup?: (setupCtx: {
120
+ G: G;
121
+ ctx: Ctx;
122
+ game: Game<G>;
123
+ }) => Data;
124
+ isInvalid?: (context: Omit<PluginContext<API, Data, G>, 'api'>) => false | string;
125
+ action?: (data: Data, payload: ActionShape.Plugin['payload']) => Data;
126
+ api?: (context: {
127
+ G: G;
128
+ ctx: Ctx;
129
+ game: Game<G>;
130
+ data: Data;
131
+ playerID?: PlayerID;
132
+ }) => API;
133
+ flush?: (context: PluginContext<API, Data, G>) => Data;
134
+ dangerouslyFlushRawState?: (flushCtx: {
135
+ state: State<G>;
136
+ game: Game<G>;
137
+ api: API;
138
+ data: Data;
139
+ }) => State<G>;
140
+ fnWrap?: (moveOrHook: (context: FnContext<G>, ...args: any[]) => any, methodType: GameMethod) => (context: FnContext<G>, ...args: any[]) => any;
141
+ playerView?: (context: {
142
+ G: G;
143
+ ctx: Ctx;
144
+ game: Game<G>;
145
+ data: Data;
146
+ playerID?: PlayerID | null;
147
+ }) => any;
148
+ }
149
+ export declare type FnContext<G extends any = any, PluginAPIs extends Record<string, unknown> = Record<string, unknown>> = PluginAPIs & DefaultPluginAPIs & {
150
+ G: G;
151
+ ctx: Ctx;
152
+ };
153
+ export declare type MoveFn<G extends any = any, PluginAPIs extends Record<string, unknown> = Record<string, unknown>> = (context: FnContext<G, PluginAPIs> & {
154
+ playerID: PlayerID;
155
+ }, ...args: any[]) => void | G | typeof INVALID_MOVE;
156
+ export interface LongFormMove<G extends any = any, PluginAPIs extends Record<string, unknown> = Record<string, unknown>> {
157
+ move: MoveFn<G, PluginAPIs>;
158
+ redact?: boolean | ((context: {
159
+ G: G;
160
+ ctx: Ctx;
161
+ }) => boolean);
162
+ noLimit?: boolean;
163
+ client?: boolean;
164
+ undoable?: boolean | ((context: {
165
+ G: G;
166
+ ctx: Ctx;
167
+ }) => boolean);
168
+ ignoreStaleStateID?: boolean;
169
+ }
170
+ export declare type Move<G extends any = any, PluginAPIs extends Record<string, unknown> = Record<string, unknown>> = MoveFn<G, PluginAPIs> | LongFormMove<G, PluginAPIs>;
171
+ export interface MoveMap<G extends any = any, PluginAPIs extends Record<string, unknown> = Record<string, unknown>> {
172
+ [moveName: string]: Move<G, PluginAPIs>;
173
+ }
174
+ export interface PhaseConfig<G extends any = any, PluginAPIs extends Record<string, unknown> = Record<string, unknown>> {
175
+ start?: boolean;
176
+ next?: ((context: FnContext<G, PluginAPIs>) => string | void) | string;
177
+ onBegin?: (context: FnContext<G, PluginAPIs>) => void | G;
178
+ onEnd?: (context: FnContext<G, PluginAPIs>) => void | G;
179
+ endIf?: (context: FnContext<G, PluginAPIs>) => boolean | void | {
180
+ next: string;
181
+ };
182
+ moves?: MoveMap<G, PluginAPIs>;
183
+ turn?: TurnConfig<G, PluginAPIs>;
184
+ wrapped?: {
185
+ endIf?: (state: State<G>) => boolean | void | {
186
+ next: string;
187
+ };
188
+ onBegin?: (state: State<G>) => void | G;
189
+ onEnd?: (state: State<G>) => void | G;
190
+ next?: (state: State<G>) => string | void;
191
+ };
192
+ }
193
+ export interface StageConfig<G extends any = any, PluginAPIs extends Record<string, unknown> = Record<string, unknown>> {
194
+ moves?: MoveMap<G, PluginAPIs>;
195
+ next?: string;
196
+ }
197
+ export interface StageMap<G extends any = any, PluginAPIs extends Record<string, unknown> = Record<string, unknown>> {
198
+ [stageName: string]: StageConfig<G, PluginAPIs>;
199
+ }
200
+ export interface TurnOrderConfig<G extends any = any, PluginAPIs extends Record<string, unknown> = Record<string, unknown>> {
201
+ first: (context: FnContext<G, PluginAPIs>) => number;
202
+ next: (context: FnContext<G, PluginAPIs>) => number | undefined;
203
+ playOrder?: (context: FnContext<G, PluginAPIs>) => PlayerID[];
204
+ }
205
+ export interface TurnConfig<G extends any = any, PluginAPIs extends Record<string, unknown> = Record<string, unknown>> {
206
+ activePlayers?: ActivePlayersArg;
207
+ minMoves?: number;
208
+ maxMoves?: number;
209
+ /** @deprecated Use `minMoves` and `maxMoves` instead. */
210
+ moveLimit?: number;
211
+ onBegin?: (context: FnContext<G, PluginAPIs>) => void | G;
212
+ onEnd?: (context: FnContext<G, PluginAPIs>) => void | G;
213
+ endIf?: (context: FnContext<G, PluginAPIs>) => boolean | void | {
214
+ next: PlayerID;
215
+ };
216
+ onMove?: (context: FnContext<G, PluginAPIs> & {
217
+ playerID: PlayerID;
218
+ }) => void | G;
219
+ stages?: StageMap<G, PluginAPIs>;
220
+ order?: TurnOrderConfig<G, PluginAPIs>;
221
+ wrapped?: {
222
+ endIf?: (state: State<G>) => boolean | void | {
223
+ next: PlayerID;
224
+ };
225
+ onBegin?: (state: State<G>) => void | G;
226
+ onEnd?: (state: State<G>) => void | G;
227
+ onMove?: (state: State<G> & {
228
+ playerID: PlayerID;
229
+ }) => void | G;
230
+ };
231
+ }
232
+ export interface PhaseMap<G extends any = any, PluginAPIs extends Record<string, unknown> = Record<string, unknown>> {
233
+ [phaseName: string]: PhaseConfig<G, PluginAPIs>;
234
+ }
235
+ export declare type AiEnumerate = Array<{
236
+ event: string;
237
+ args?: any[];
238
+ } | {
239
+ move: string;
240
+ args?: any[];
241
+ } | ActionShape.MakeMove | ActionShape.GameEvent>;
242
+ export interface Game<G extends any = any, PluginAPIs extends Record<string, unknown> = Record<string, unknown>, SetupData extends any = any> {
243
+ name?: string;
244
+ minPlayers?: number;
245
+ maxPlayers?: number;
246
+ deltaState?: boolean;
247
+ disableUndo?: boolean;
248
+ seed?: string | number;
249
+ setup?: (context: PluginAPIs & DefaultPluginAPIs & {
250
+ ctx: Ctx;
251
+ }, setupData?: SetupData) => G;
252
+ validateSetupData?: (setupData: SetupData | undefined, numPlayers: number) => string | undefined;
253
+ moves?: MoveMap<G, PluginAPIs>;
254
+ phases?: PhaseMap<G, PluginAPIs>;
255
+ turn?: TurnConfig<G, PluginAPIs>;
256
+ events?: {
257
+ endGame?: boolean;
258
+ endPhase?: boolean;
259
+ endTurn?: boolean;
260
+ setPhase?: boolean;
261
+ endStage?: boolean;
262
+ setStage?: boolean;
263
+ pass?: boolean;
264
+ setActivePlayers?: boolean;
265
+ };
266
+ endIf?: (context: FnContext<G, PluginAPIs>) => any;
267
+ onEnd?: (context: FnContext<G, PluginAPIs>) => void | G;
268
+ playerView?: (context: {
269
+ G: G;
270
+ ctx: Ctx;
271
+ playerID: PlayerID | null;
272
+ }) => any;
273
+ plugins?: Array<Plugin<any, any, G>>;
274
+ ai?: {
275
+ enumerate: (G: G, ctx: Ctx, playerID: PlayerID) => AiEnumerate;
276
+ };
277
+ processMove?: (state: State<G>, action: ActionPayload.MakeMove) => State<G> | typeof INVALID_MOVE;
278
+ flow?: ReturnType<typeof Flow>;
279
+ }
280
+ export declare type Undo<G extends any = any> = {
281
+ G: G;
282
+ ctx: Ctx;
283
+ plugins: {
284
+ [pluginName: string]: PluginState;
285
+ };
286
+ moveType?: string;
287
+ playerID?: PlayerID;
288
+ };
289
+ export declare namespace Server {
290
+ type GenerateCredentials = (ctx: Koa.DefaultContext) => Promise<string> | string;
291
+ type AuthenticateCredentials = (credentials: string, playerMetadata: PlayerMetadata) => Promise<boolean> | boolean;
292
+ type PlayerMetadata = {
293
+ id: number;
294
+ name?: string;
295
+ credentials?: string;
296
+ data?: any;
297
+ isConnected?: boolean;
298
+ };
299
+ interface MatchData {
300
+ gameName: string;
301
+ players: {
302
+ [id: number]: PlayerMetadata;
303
+ };
304
+ setupData?: any;
305
+ gameover?: any;
306
+ nextMatchID?: string;
307
+ unlisted?: boolean;
308
+ createdAt: number;
309
+ updatedAt: number;
310
+ }
311
+ type AppCtx = Koa.DefaultContext & {
312
+ db: StorageAPI.Async | StorageAPI.Sync;
313
+ auth: Auth;
314
+ };
315
+ type App = Koa<Koa.DefaultState, AppCtx>;
316
+ }
317
+ export declare namespace LobbyAPI {
318
+ export type GameList = string[];
319
+ type PublicPlayerMetadata = Omit<Server.PlayerMetadata, 'credentials'>;
320
+ export type Match = Omit<Server.MatchData, 'players'> & {
321
+ matchID: string;
322
+ players: PublicPlayerMetadata[];
323
+ };
324
+ export interface MatchList {
325
+ matches: Match[];
326
+ }
327
+ export interface CreatedMatch {
328
+ matchID: string;
329
+ }
330
+ export interface JoinedMatch {
331
+ playerID: string;
332
+ playerCredentials: string;
333
+ }
334
+ export interface NextMatch {
335
+ nextMatchID: string;
336
+ }
337
+ export {};
338
+ }
339
+ export declare type Reducer = ReturnType<typeof CreateGameReducer>;
340
+ export declare type Store = ReduxStore<State, ActionShape.Any>;
341
+ export declare namespace CredentialedActionShape {
342
+ type MakeMove = ReturnType<typeof ActionCreators.makeMove>;
343
+ type GameEvent = ReturnType<typeof ActionCreators.gameEvent>;
344
+ type Plugin = ReturnType<typeof ActionCreators.plugin>;
345
+ type AutomaticGameEvent = ReturnType<typeof ActionCreators.automaticGameEvent>;
346
+ type Undo = ReturnType<typeof ActionCreators.undo>;
347
+ type Redo = ReturnType<typeof ActionCreators.redo>;
348
+ type Any = MakeMove | GameEvent | AutomaticGameEvent | Undo | Redo | Plugin;
349
+ }
350
+ export declare namespace ActionShape {
351
+ type StripCredentials<T extends CredentialedActionShape.Any> = Object.P.Omit<T, ['payload', 'credentials']>;
352
+ export type MakeMove = StripCredentials<CredentialedActionShape.MakeMove>;
353
+ export type GameEvent = StripCredentials<CredentialedActionShape.GameEvent>;
354
+ export type Plugin = StripCredentials<CredentialedActionShape.Plugin>;
355
+ export type AutomaticGameEvent = StripCredentials<CredentialedActionShape.AutomaticGameEvent>;
356
+ export type Sync = ReturnType<typeof ActionCreators.sync>;
357
+ export type Update = ReturnType<typeof ActionCreators.update>;
358
+ export type Patch = ReturnType<typeof ActionCreators.patch>;
359
+ export type Reset = ReturnType<typeof ActionCreators.reset>;
360
+ export type Undo = StripCredentials<CredentialedActionShape.Undo>;
361
+ export type Redo = StripCredentials<CredentialedActionShape.Redo>;
362
+ export type StripTransients = ReturnType<typeof ActionCreators.stripTransients>;
363
+ export type Any = MakeMove | GameEvent | AutomaticGameEvent | Sync | Update | Patch | Reset | Undo | Redo | Plugin | StripTransients;
364
+ export {};
365
+ }
366
+ export declare namespace ActionPayload {
367
+ type GetPayload<T extends ActionShape.Any> = Object.At<T, 'payload'>;
368
+ export type MakeMove = GetPayload<ActionShape.MakeMove>;
369
+ export type GameEvent = GetPayload<ActionShape.GameEvent>;
370
+ export {};
371
+ }
372
+ export declare type FilteredMetadata = {
373
+ id: number;
374
+ name?: string;
375
+ isConnected?: boolean;
376
+ }[];
377
+ export interface SyncInfo {
378
+ state: State;
379
+ filteredMetadata: FilteredMetadata;
380
+ initialState: State;
381
+ log: LogEntry[];
382
+ }
383
+ export interface ChatMessage {
384
+ id: string;
385
+ sender: PlayerID;
386
+ payload: any;
387
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "boardgame.io/internal",
3
+ "private": true,
4
+ "types": "../dist/types/packages/internal.d.ts",
5
+ "main": "../dist/cjs/internal.js",
6
+ "module": "../dist/esm/internal.js"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "boardgame.io/master",
3
+ "private": true,
4
+ "types": "../dist/types/packages/master.d.ts",
5
+ "main": "../dist/cjs/master.js",
6
+ "module": "../dist/esm/master.js"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "boardgame.io/multiplayer",
3
+ "private": true,
4
+ "types": "../dist/types/packages/multiplayer.d.ts",
5
+ "main": "../dist/cjs/multiplayer.js",
6
+ "module": "../dist/esm/multiplayer.js"
7
+ }
package/package.json ADDED
@@ -0,0 +1,211 @@
1
+ {
2
+ "name": "@mnbroatch/boardgame.io",
3
+ "version": "0.0.1",
4
+ "description": "library for turn-based games",
5
+ "repository": "https://github.com/boardgameio/boardgame.io",
6
+ "scripts": {
7
+ "prestart": "run-p examples:install build",
8
+ "start": "run-p dev:server dev:client",
9
+ "predev": "npm run examples:install",
10
+ "dev": "run-p build:watch dev:server dev:client",
11
+ "dev:client": "node scripts/dev-client.js",
12
+ "dev:server": "cross-env NODE_ENV=development nodemon -w src -w examples -e js,ts --exec babel-node --extensions \".ts,.js\" --ignore \"src/**/*.test.ts\" --presets @babel/preset-env examples/react-web/server.js",
13
+ "build": "cross-env BABEL_ENV=rollup rollup --config rollup.config.js --silent",
14
+ "build:watch": "cross-env BABEL_ENV=rollup rollup -w --config rollup.config.js",
15
+ "benchmark": "babel-node --extensions .ts,.js --presets @babel/preset-env,@babel/preset-typescript benchmark/index.js",
16
+ "docs": "docsify serve docs",
17
+ "examples": "npm run start",
18
+ "examples:install": "node scripts/install-examples.js",
19
+ "pretest": "npm run lint",
20
+ "test": "cross-env NODE_ENV=test jest",
21
+ "test:watch": "npm test -- --watch",
22
+ "test:coverage": "npm test -- --coverage --collectCoverageFrom=\"src/**\"",
23
+ "test:coveralls": "coveralls < coverage/lcov.info",
24
+ "test:integration": "node ./scripts/integration.js",
25
+ "ts": "tsc --noEmit",
26
+ "ts:watch": "tsc --noEmit --watch",
27
+ "lint": "eslint .",
28
+ "lint:fix": "eslint --fix .",
29
+ "prepublishOnly": "npm run clean",
30
+ "proxydirs": "node scripts/proxy-dirs.js",
31
+ "prepack": "run-s build proxydirs",
32
+ "postpack": "npm run clean",
33
+ "prettier": "prettier --write \"{examples,src,benchmark}/**/*.{ts,tsx,js,jsx,css,md}\"",
34
+ "changelog": "node ./scripts/changelog.js",
35
+ "clean": "node ./scripts/clean.js"
36
+ },
37
+ "sideEffects": false,
38
+ "main": "dist/boardgameio.js",
39
+ "unpkg": "dist/boardgameio.min.js",
40
+ "module": "dist/boardgameio.es.js",
41
+ "types": "dist/types/src/types.d.ts",
42
+ "files": [
43
+ "src",
44
+ "dist/boardgameio.js",
45
+ "dist/boardgameio.min.js",
46
+ "dist/boardgameio.es.js",
47
+ "dist/esm",
48
+ "dist/cjs",
49
+ "dist/types",
50
+ "client",
51
+ "core",
52
+ "debug",
53
+ "react",
54
+ "react-native",
55
+ "server",
56
+ "ai",
57
+ "plugins",
58
+ "master",
59
+ "multiplayer",
60
+ "internal",
61
+ "testing"
62
+ ],
63
+ "keywords": [
64
+ "board games",
65
+ "card games",
66
+ "tabletop games",
67
+ "game engine"
68
+ ],
69
+ "engines": {
70
+ "node": ">=10.0",
71
+ "npm": ">=6.0"
72
+ },
73
+ "author": "nicolodavis@gmail.com",
74
+ "license": "MIT",
75
+ "funding": [
76
+ "https://github.com/boardgameio/boardgame.io?sponsor=1",
77
+ {
78
+ "type": "opencollective",
79
+ "url": "https://opencollective.com/boardgameio"
80
+ }
81
+ ],
82
+ "devDependencies": {
83
+ "@babel/cli": "^7.16.0",
84
+ "@babel/core": "^7.16.0",
85
+ "@babel/node": "^7.16.0",
86
+ "@babel/plugin-proposal-class-properties": "^7.16.0",
87
+ "@babel/plugin-proposal-object-rest-spread": "^7.16.0",
88
+ "@babel/plugin-transform-modules-commonjs": "^7.16.0",
89
+ "@babel/preset-env": "^7.16.0",
90
+ "@babel/preset-react": "^7.16.0",
91
+ "@babel/preset-typescript": "^7.16.0",
92
+ "@testing-library/jest-dom": "^5.14.1",
93
+ "@testing-library/svelte": "^3.0.3",
94
+ "@types/enzyme": "^3.10.9",
95
+ "@types/jest": "^27.0.1",
96
+ "@types/koa__cors": "^3.0.3",
97
+ "@types/node": "^14.0.24",
98
+ "@types/react": "^16.14.11",
99
+ "@types/react-dom": "^16.9.14",
100
+ "@types/supertest": "^2.0.11",
101
+ "@typescript-eslint/eslint-plugin": "^4.29.3",
102
+ "@typescript-eslint/parser": "^4.29.3",
103
+ "babel-plugin-module-resolver": "^4.1.0",
104
+ "benchmark": "^2.1.4",
105
+ "cross-env": "^7.0.3",
106
+ "docsify-cli": "^4.4.4",
107
+ "enzyme": "^3.11.0",
108
+ "enzyme-adapter-react-16": "^1.15.6",
109
+ "eslint": "^7.31.0",
110
+ "eslint-config-prettier": "^8.3.0",
111
+ "eslint-plugin-jest": "^24.4.0",
112
+ "eslint-plugin-prettier": "^3.4.0",
113
+ "eslint-plugin-react": "^7.24.0",
114
+ "eslint-plugin-unicorn": "^30.0.0",
115
+ "husky": "^4.3.8",
116
+ "identity-obj-proxy": "^3.0.0",
117
+ "jest": "^27.1.0",
118
+ "jest-date-mock": "^1.0.8",
119
+ "jest-transform-svelte": "^2.1.1",
120
+ "lint-staged": "^10.5.4",
121
+ "node-persist": "^3.1.0",
122
+ "nodemon": "^2.0.12",
123
+ "npm-run-all": "^4.1.5",
124
+ "prettier": "^2.3.2",
125
+ "raf": "^3.4.1",
126
+ "react": "^16.14.0",
127
+ "react-dom": "^16.14.0",
128
+ "rollup": "^2.79.2",
129
+ "rollup-plugin-babel": "^4.2.0",
130
+ "rollup-plugin-commonjs": "^9.2.0",
131
+ "rollup-plugin-filesize": "^6.0.0",
132
+ "rollup-plugin-node-builtins": "^2.1.2",
133
+ "rollup-plugin-node-resolve": "^4.0.0",
134
+ "rollup-plugin-replace": "^2.1.0",
135
+ "rollup-plugin-svelte": "^6.1.1",
136
+ "rollup-plugin-terser": "^5.3.0",
137
+ "rollup-plugin-typescript2": "^0.22.0",
138
+ "shelljs": "^0.8.4",
139
+ "supertest": "^3.1.0",
140
+ "svelte-icons": "^2.1.0",
141
+ "tempy": "^1.0.1",
142
+ "ts-jest": "^27.0.5",
143
+ "ts-transformer-imports": "^0.4.3",
144
+ "ttypescript": "^1.5.12",
145
+ "typescript": "^3.8.2"
146
+ },
147
+ "dependencies": {
148
+ "@koa/cors": "^3.1.0",
149
+ "@koa/router": "^10.1.1",
150
+ "@types/koa": "^2.13.4",
151
+ "@types/koa__router": "^8.0.8",
152
+ "flatted": "^3.2.1",
153
+ "immer": "^9.0.5",
154
+ "koa": "^2.13.3",
155
+ "koa-body": "^5.0.0",
156
+ "koa-socket-2": "^2.0.0",
157
+ "lodash.isplainobject": "^4.0.6",
158
+ "nanoid": "^3.1.30",
159
+ "p-queue": "^6.6.2",
160
+ "prop-types": "^15.5.10",
161
+ "react-cookies": "^0.1.0",
162
+ "redux": "^4.1.0",
163
+ "rfc6902": "^5.0.0",
164
+ "setimmediate": "^1.0.5",
165
+ "socket.io": "^4.5.0",
166
+ "socket.io-client": "^4.1.3",
167
+ "svelte": "^3.41.0",
168
+ "svelte-json-tree-auto": "^0.1.0",
169
+ "ts-toolbelt": "^6.3.6"
170
+ },
171
+ "jest": {
172
+ "preset": "ts-jest/presets/js-with-babel",
173
+ "testEnvironment": "jsdom",
174
+ "moduleNameMapper": {
175
+ "\\.(css)$": "identity-obj-proxy",
176
+ "\\.(svg)$": "<rootDir>/.empty_module.js",
177
+ "svelte-json-tree-auto": "<rootDir>/src/client/debug/tests/JSONTree.mock.svelte"
178
+ },
179
+ "coveragePathIgnorePatterns": [
180
+ "/node_modules/",
181
+ "src/client/transport/dummy",
182
+ "src/client/debug/.*",
183
+ "src/types.ts"
184
+ ],
185
+ "setupFiles": [
186
+ "raf/polyfill",
187
+ "jest-date-mock"
188
+ ],
189
+ "setupFilesAfterEnv": [
190
+ "@testing-library/jest-dom/extend-expect"
191
+ ],
192
+ "transform": {
193
+ "^.+\\.svelte$": "jest-transform-svelte"
194
+ },
195
+ "transformIgnorePatterns": [
196
+ "node_modules/(?!(boardgame.io|flatted|svelte-icons)/)"
197
+ ],
198
+ "testPathIgnorePatterns": [
199
+ "examples/",
200
+ "integration/",
201
+ "node_modules/",
202
+ ".npm/"
203
+ ]
204
+ },
205
+ "husky": {
206
+ "hooks": {
207
+ "pre-commit": "lint-staged",
208
+ "pre-push": "npm run test:coverage"
209
+ }
210
+ }
211
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "boardgame.io/plugins",
3
+ "private": true,
4
+ "types": "../dist/types/packages/plugins.d.ts",
5
+ "main": "../dist/cjs/plugins.js",
6
+ "module": "../dist/esm/plugins.js"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "boardgame.io/react",
3
+ "private": true,
4
+ "types": "../dist/types/packages/react.d.ts",
5
+ "main": "../dist/cjs/react.js",
6
+ "module": "../dist/esm/react.js"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "boardgame.io/react-native",
3
+ "private": true,
4
+ "types": "../dist/types/packages/react-native.d.ts",
5
+ "main": "../dist/cjs/react-native.js",
6
+ "module": "../dist/esm/react-native.js"
7
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "boardgame.io/server",
3
+ "private": true,
4
+ "types": "../dist/types/packages/server.d.ts",
5
+ "main": "../dist/cjs/server.js"
6
+ }