@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,229 @@
1
+ 'use strict';
2
+
3
+ // Inlined version of Alea from https://github.com/davidbau/seedrandom.
4
+ // Converted to Typescript October 2020.
5
+ class Alea {
6
+ constructor(seed) {
7
+ const mash = Mash();
8
+ // Apply the seeding algorithm from Baagoe.
9
+ this.c = 1;
10
+ this.s0 = mash(' ');
11
+ this.s1 = mash(' ');
12
+ this.s2 = mash(' ');
13
+ this.s0 -= mash(seed);
14
+ if (this.s0 < 0) {
15
+ this.s0 += 1;
16
+ }
17
+ this.s1 -= mash(seed);
18
+ if (this.s1 < 0) {
19
+ this.s1 += 1;
20
+ }
21
+ this.s2 -= mash(seed);
22
+ if (this.s2 < 0) {
23
+ this.s2 += 1;
24
+ }
25
+ }
26
+ next() {
27
+ const t = 2091639 * this.s0 + this.c * 2.3283064365386963e-10; // 2^-32
28
+ this.s0 = this.s1;
29
+ this.s1 = this.s2;
30
+ return (this.s2 = t - (this.c = Math.trunc(t)));
31
+ }
32
+ }
33
+ function Mash() {
34
+ let n = 0xefc8249d;
35
+ const mash = function (data) {
36
+ const str = data.toString();
37
+ for (let i = 0; i < str.length; i++) {
38
+ n += str.charCodeAt(i);
39
+ let h = 0.02519603282416938 * n;
40
+ n = h >>> 0;
41
+ h -= n;
42
+ h *= n;
43
+ n = h >>> 0;
44
+ h -= n;
45
+ n += h * 0x100000000; // 2^32
46
+ }
47
+ return (n >>> 0) * 2.3283064365386963e-10; // 2^-32
48
+ };
49
+ return mash;
50
+ }
51
+ function copy(f, t) {
52
+ t.c = f.c;
53
+ t.s0 = f.s0;
54
+ t.s1 = f.s1;
55
+ t.s2 = f.s2;
56
+ return t;
57
+ }
58
+ function alea(seed, state) {
59
+ const xg = new Alea(seed);
60
+ const prng = xg.next.bind(xg);
61
+ if (state)
62
+ copy(state, xg);
63
+ prng.state = () => copy(xg, {});
64
+ return prng;
65
+ }
66
+
67
+ /*
68
+ * Copyright 2017 The boardgame.io Authors
69
+ *
70
+ * Use of this source code is governed by a MIT-style
71
+ * license that can be found in the LICENSE file or at
72
+ * https://opensource.org/licenses/MIT.
73
+ */
74
+ /**
75
+ * Random
76
+ *
77
+ * Calls that require a pseudorandom number generator.
78
+ * Uses a seed from ctx, and also persists the PRNG
79
+ * state in ctx so that moves can stay pure.
80
+ */
81
+ class Random {
82
+ /**
83
+ * constructor
84
+ * @param {object} ctx - The ctx object to initialize from.
85
+ */
86
+ constructor(state) {
87
+ // If we are on the client, the seed is not present.
88
+ // Just use a temporary seed to execute the move without
89
+ // crashing it. The move state itself is discarded,
90
+ // so the actual value doesn't matter.
91
+ this.state = state || { seed: '0' };
92
+ this.used = false;
93
+ }
94
+ /**
95
+ * Generates a new seed from the current date / time.
96
+ */
97
+ static seed() {
98
+ return Date.now().toString(36).slice(-10);
99
+ }
100
+ isUsed() {
101
+ return this.used;
102
+ }
103
+ getState() {
104
+ return this.state;
105
+ }
106
+ /**
107
+ * Generate a random number.
108
+ */
109
+ _random() {
110
+ this.used = true;
111
+ const R = this.state;
112
+ const seed = R.prngstate ? '' : R.seed;
113
+ const rand = alea(seed, R.prngstate);
114
+ const number = rand();
115
+ this.state = {
116
+ ...R,
117
+ prngstate: rand.state(),
118
+ };
119
+ return number;
120
+ }
121
+ api() {
122
+ const random = this._random.bind(this);
123
+ const SpotValue = {
124
+ D4: 4,
125
+ D6: 6,
126
+ D8: 8,
127
+ D10: 10,
128
+ D12: 12,
129
+ D20: 20,
130
+ };
131
+ // Generate functions for predefined dice values D4 - D20.
132
+ const predefined = {};
133
+ for (const key in SpotValue) {
134
+ const spotvalue = SpotValue[key];
135
+ predefined[key] = (diceCount) => {
136
+ return diceCount === undefined
137
+ ? Math.floor(random() * spotvalue) + 1
138
+ : Array.from({ length: diceCount }).map(() => Math.floor(random() * spotvalue) + 1);
139
+ };
140
+ }
141
+ function Die(spotvalue = 6, diceCount) {
142
+ return diceCount === undefined
143
+ ? Math.floor(random() * spotvalue) + 1
144
+ : Array.from({ length: diceCount }).map(() => Math.floor(random() * spotvalue) + 1);
145
+ }
146
+ return {
147
+ /**
148
+ * Similar to Die below, but with fixed spot values.
149
+ * Supports passing a diceCount
150
+ * if not defined, defaults to 1 and returns the value directly.
151
+ * if defined, returns an array containing the random dice values.
152
+ *
153
+ * D4: (diceCount) => value
154
+ * D6: (diceCount) => value
155
+ * D8: (diceCount) => value
156
+ * D10: (diceCount) => value
157
+ * D12: (diceCount) => value
158
+ * D20: (diceCount) => value
159
+ */
160
+ ...predefined,
161
+ /**
162
+ * Roll a die of specified spot value.
163
+ *
164
+ * @param {number} spotvalue - The die dimension (default: 6).
165
+ * @param {number} diceCount - number of dice to throw.
166
+ * if not defined, defaults to 1 and returns the value directly.
167
+ * if defined, returns an array containing the random dice values.
168
+ */
169
+ Die,
170
+ /**
171
+ * Generate a random number between 0 and 1.
172
+ */
173
+ Number: () => {
174
+ return random();
175
+ },
176
+ /**
177
+ * Shuffle an array.
178
+ *
179
+ * @param {Array} deck - The array to shuffle. Does not mutate
180
+ * the input, but returns the shuffled array.
181
+ */
182
+ Shuffle: (deck) => {
183
+ const clone = [...deck];
184
+ let sourceIndex = deck.length;
185
+ let destinationIndex = 0;
186
+ const shuffled = Array.from({ length: sourceIndex });
187
+ while (sourceIndex) {
188
+ const randomIndex = Math.trunc(sourceIndex * random());
189
+ shuffled[destinationIndex++] = clone[randomIndex];
190
+ clone[randomIndex] = clone[--sourceIndex];
191
+ }
192
+ return shuffled;
193
+ },
194
+ _private: this,
195
+ };
196
+ }
197
+ }
198
+
199
+ /*
200
+ * Copyright 2018 The boardgame.io Authors
201
+ *
202
+ * Use of this source code is governed by a MIT-style
203
+ * license that can be found in the LICENSE file or at
204
+ * https://opensource.org/licenses/MIT.
205
+ */
206
+ const RandomPlugin = {
207
+ name: 'random',
208
+ noClient: ({ api }) => {
209
+ return api._private.isUsed();
210
+ },
211
+ flush: ({ api }) => {
212
+ return api._private.getState();
213
+ },
214
+ api: ({ data }) => {
215
+ const random = new Random(data);
216
+ return random.api();
217
+ },
218
+ setup: ({ game }) => {
219
+ let { seed } = game;
220
+ if (seed === undefined) {
221
+ seed = Random.seed();
222
+ }
223
+ return { seed };
224
+ },
225
+ playerView: () => undefined,
226
+ };
227
+
228
+ exports.RandomPlugin = RandomPlugin;
229
+ exports.alea = alea;
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ /*
6
+ * Copyright 2018 The boardgame.io Authors
7
+ *
8
+ * Use of this source code is governed by a MIT-style
9
+ * license that can be found in the LICENSE file or at
10
+ * https://opensource.org/licenses/MIT.
11
+ */
12
+ /**
13
+ * Plugin that maintains state for each player in G.players.
14
+ * During a turn, G.player will contain the object for the current player.
15
+ * In two player games, G.opponent will contain the object for the other player.
16
+ *
17
+ * @param {function} initPlayerState - Function of type (playerID) => playerState.
18
+ */
19
+ const PlayerPlugin = ({ setup, playerView, } = {}) => ({
20
+ name: 'player',
21
+ flush: ({ api }) => {
22
+ return { players: api.state };
23
+ },
24
+ api: ({ ctx, data }) => {
25
+ const state = data.players;
26
+ const get = () => {
27
+ return data.players[ctx.currentPlayer];
28
+ };
29
+ const set = (value) => {
30
+ return (state[ctx.currentPlayer] = value);
31
+ };
32
+ const result = { state, get, set };
33
+ if (ctx.numPlayers === 2) {
34
+ const other = ctx.currentPlayer === '0' ? '1' : '0';
35
+ const get = () => {
36
+ return data.players[other];
37
+ };
38
+ const set = (value) => {
39
+ return (state[other] = value);
40
+ };
41
+ result.opponent = { get, set };
42
+ }
43
+ return result;
44
+ },
45
+ setup: ({ ctx }) => {
46
+ const players = {};
47
+ for (let i = 0; i < ctx.numPlayers; i++) {
48
+ let playerState = {};
49
+ if (setup !== undefined) {
50
+ playerState = setup(i + '');
51
+ }
52
+ players[i + ''] = playerState;
53
+ }
54
+ return { players };
55
+ },
56
+ playerView: ({ data, playerID }) => playerView ? { players: playerView(data.players, playerID) } : data,
57
+ });
58
+
59
+ exports.PluginPlayer = PlayerPlugin;
@@ -0,0 +1,182 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var Debug = require('./Debug-9d141c06.js');
6
+ var React = require('react');
7
+ var PropTypes = require('prop-types');
8
+ var client = require('./client-a22d7500.js');
9
+ require('./turn-order-b2ff8740.js');
10
+ require('immer');
11
+ require('./plugin-random-7425844d.js');
12
+ require('lodash.isplainobject');
13
+ require('flatted');
14
+ require('./reducer-16eec232.js');
15
+ require('rfc6902');
16
+ require('./ai-e0e8a768.js');
17
+ require('setimmediate');
18
+ require('nanoid/non-secure');
19
+ require('redux');
20
+ require('./initialize-267fcd69.js');
21
+ require('./transport-b1874dfa.js');
22
+
23
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
24
+
25
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
26
+ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
27
+
28
+ var _excluded = ["matchID", "playerID"];
29
+ /**
30
+ * Client
31
+ *
32
+ * boardgame.io React Native client.
33
+ *
34
+ * @param {...object} game - The return value of `Game`.
35
+ * @param {...object} numPlayers - The number of players.
36
+ * @param {...object} board - The React component for the game.
37
+ * @param {...object} loading - (optional) The React component for the loading state.
38
+ * @param {...object} multiplayer - Set to a falsy value or a transportFactory, e.g., SocketIO()
39
+ * @param {...object} enhancer - Optional enhancer to send to the Redux store
40
+ *
41
+ * Returns:
42
+ * A React Native component that wraps board and provides an
43
+ * API through props for it to interact with the framework
44
+ * and dispatch actions such as MAKE_MOVE.
45
+ */
46
+
47
+ function Client(opts) {
48
+ var _class, _temp;
49
+
50
+ var game = opts.game,
51
+ numPlayers = opts.numPlayers,
52
+ board = opts.board,
53
+ multiplayer = opts.multiplayer,
54
+ enhancer = opts.enhancer;
55
+ var loading = opts.loading; // Component that is displayed before the client has synced
56
+ // with the game master.
57
+
58
+ if (loading === undefined) {
59
+ var Loading = function Loading() {
60
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null);
61
+ };
62
+
63
+ loading = Loading;
64
+ }
65
+ /*
66
+ * WrappedBoard
67
+ *
68
+ * The main React component that wraps the passed in
69
+ * board component and adds the API to its props.
70
+ */
71
+
72
+
73
+ return _temp = _class = /*#__PURE__*/function (_React$Component) {
74
+ Debug._inherits(WrappedBoard, _React$Component);
75
+
76
+ var _super = Debug._createSuper(WrappedBoard);
77
+
78
+ function WrappedBoard(props) {
79
+ var _this;
80
+
81
+ Debug._classCallCheck(this, WrappedBoard);
82
+
83
+ _this = _super.call(this, props);
84
+ _this.client = client.Client({
85
+ game: game,
86
+ numPlayers: numPlayers,
87
+ multiplayer: multiplayer,
88
+ matchID: props.matchID,
89
+ playerID: props.playerID,
90
+ credentials: props.credentials,
91
+ debug: false,
92
+ enhancer: enhancer
93
+ });
94
+ return _this;
95
+ }
96
+
97
+ Debug._createClass(WrappedBoard, [{
98
+ key: "componentDidMount",
99
+ value: function componentDidMount() {
100
+ var _this2 = this;
101
+
102
+ this.unsubscribe = this.client.subscribe(function () {
103
+ return _this2.forceUpdate();
104
+ });
105
+ this.client.start();
106
+ }
107
+ }, {
108
+ key: "componentWillUnmount",
109
+ value: function componentWillUnmount() {
110
+ this.client.stop();
111
+ this.unsubscribe();
112
+ }
113
+ }, {
114
+ key: "componentDidUpdate",
115
+ value: function componentDidUpdate(prevProps) {
116
+ if (prevProps.matchID != this.props.matchID) {
117
+ this.client.updateMatchID(this.props.matchID);
118
+ }
119
+
120
+ if (prevProps.playerID != this.props.playerID) {
121
+ this.client.updatePlayerID(this.props.playerID);
122
+ }
123
+
124
+ if (prevProps.credentials != this.props.credentials) {
125
+ this.client.updateCredentials(this.props.credentials);
126
+ }
127
+ }
128
+ }, {
129
+ key: "render",
130
+ value: function render() {
131
+ var _board = null;
132
+ var state = this.client.getState();
133
+
134
+ if (state === null) {
135
+ return /*#__PURE__*/React__default["default"].createElement(loading);
136
+ }
137
+
138
+ var _this$props = this.props,
139
+ matchID = _this$props.matchID,
140
+ playerID = _this$props.playerID,
141
+ rest = Debug._objectWithoutProperties(_this$props, _excluded);
142
+
143
+ if (board) {
144
+ _board = /*#__PURE__*/React__default["default"].createElement(board, Debug._objectSpread2(Debug._objectSpread2(Debug._objectSpread2({}, state), rest), {}, {
145
+ matchID: matchID,
146
+ playerID: playerID,
147
+ isMultiplayer: !!multiplayer,
148
+ moves: this.client.moves,
149
+ events: this.client.events,
150
+ step: this.client.step,
151
+ reset: this.client.reset,
152
+ undo: this.client.undo,
153
+ redo: this.client.redo,
154
+ matchData: this.client.matchData,
155
+ sendChatMessage: this.client.sendChatMessage,
156
+ chatMessages: this.client.chatMessages
157
+ }));
158
+ }
159
+
160
+ return _board;
161
+ }
162
+ }]);
163
+
164
+ return WrappedBoard;
165
+ }(React__default["default"].Component), Debug._defineProperty(_class, "propTypes", {
166
+ // The ID of a game to connect to.
167
+ // Only relevant in multiplayer.
168
+ matchID: PropTypes__default["default"].string,
169
+ // The ID of the player associated with this client.
170
+ // Only relevant in multiplayer.
171
+ playerID: PropTypes__default["default"].string,
172
+ // This client's authentication credentials.
173
+ // Only relevant in multiplayer.
174
+ credentials: PropTypes__default["default"].string
175
+ }), Debug._defineProperty(_class, "defaultProps", {
176
+ matchID: 'default',
177
+ playerID: null,
178
+ credentials: null
179
+ }), _temp;
180
+ }
181
+
182
+ exports.Client = Client;