@hellacardgames/speed 0.8.0 → 0.9.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.
Files changed (43) hide show
  1. package/dist/ClientState-Dx8UvhMt.d.cts +111 -0
  2. package/dist/ClientState-Dx8UvhMt.d.cts.map +1 -0
  3. package/dist/ClientState-Dx8UvhMt.d.mts +111 -0
  4. package/dist/ClientState-Dx8UvhMt.d.mts.map +1 -0
  5. package/dist/client/index.cjs +60 -10
  6. package/dist/client/index.cjs.map +1 -1
  7. package/dist/client/index.d.cts +89 -14
  8. package/dist/client/index.d.cts.map +1 -1
  9. package/dist/client/index.d.mts +89 -14
  10. package/dist/client/index.d.mts.map +1 -1
  11. package/dist/client/index.mjs +60 -10
  12. package/dist/client/index.mjs.map +1 -1
  13. package/dist/manager/index.cjs +2 -2
  14. package/dist/manager/index.d.cts +140 -2
  15. package/dist/manager/index.d.cts.map +1 -0
  16. package/dist/manager/index.d.mts +140 -2
  17. package/dist/manager/index.d.mts.map +1 -0
  18. package/dist/manager/index.mjs +2 -2
  19. package/dist/manager-B7gHPSPL.cjs +823 -0
  20. package/dist/manager-B7gHPSPL.cjs.map +1 -0
  21. package/dist/manager-C6kRM9IW.mjs +818 -0
  22. package/dist/manager-C6kRM9IW.mjs.map +1 -0
  23. package/dist/server/index.cjs +45 -165
  24. package/dist/server/index.cjs.map +1 -1
  25. package/dist/server/index.d.cts +149 -3
  26. package/dist/server/index.d.cts.map +1 -0
  27. package/dist/server/index.d.mts +149 -3
  28. package/dist/server/index.d.mts.map +1 -0
  29. package/dist/server/index.mjs +45 -165
  30. package/dist/server/index.mjs.map +1 -1
  31. package/package.json +2 -2
  32. package/dist/index-C5bT1Zzd.d.mts +0 -125
  33. package/dist/index-C5bT1Zzd.d.mts.map +0 -1
  34. package/dist/index-NySusLtY.d.cts +0 -125
  35. package/dist/index-NySusLtY.d.cts.map +0 -1
  36. package/dist/index-uaOvIhKT.d.cts +0 -247
  37. package/dist/index-uaOvIhKT.d.cts.map +0 -1
  38. package/dist/index-uaOvIhKT.d.mts +0 -247
  39. package/dist/index-uaOvIhKT.d.mts.map +0 -1
  40. package/dist/manager-BAxBCUOk.mjs +0 -790
  41. package/dist/manager-BAxBCUOk.mjs.map +0 -1
  42. package/dist/manager-C9oZYA47.cjs +0 -795
  43. package/dist/manager-C9oZYA47.cjs.map +0 -1
@@ -1,3 +1,149 @@
1
- import { g as Card, h as ChatMessage, m as ClientState, p as GameEvent } from "../index-uaOvIhKT.mjs";
2
- import { a as GetJoinableGamesResult, c as PlayCardResult, d as Server, f as StartGameResult, i as GetEventsAndClearAcknowledgedResult, l as ReportNoPlayableCardsResult, n as DrawCardResult, o as JoinGameResult, r as GetClientStateAndClearEventsResult, s as LeaveGameResult, t as CreateGameResult, u as SendChatResult } from "../index-C5bT1Zzd.mjs";
3
- export { type Card, type ChatMessage, type ClientState, type CreateGameResult, type DrawCardResult, type GameEvent, type GetClientStateAndClearEventsResult, type GetEventsAndClearAcknowledgedResult, type GetJoinableGamesResult, type JoinGameResult, type LeaveGameResult, type PlayCardResult, type ReportNoPlayableCardsResult, type SendChatResult, Server, type StartGameResult };
1
+ import { n as GameEvent, t as ClientState } from "../ClientState-Dx8UvhMt.mjs";
2
+ //#region src/server/createServer.d.ts
3
+ declare const createServer: (logKey: string, maxGames: number, watchdogIntervalMs: number) => {
4
+ readonly actions: readonly [{
5
+ readonly path: "/createGame";
6
+ readonly action: (userId: string, username: string) => {
7
+ readonly success: true;
8
+ readonly gameId: string;
9
+ readonly playerId: string;
10
+ } | {
11
+ readonly success: false;
12
+ readonly error: "maxGamesReached";
13
+ };
14
+ }, {
15
+ readonly path: "/getClientStateAndClearEvents";
16
+ readonly action: (input: unknown) => {
17
+ readonly success: false;
18
+ readonly error: "invalidInput";
19
+ } | {
20
+ readonly success: true;
21
+ readonly state: ClientState;
22
+ } | {
23
+ readonly success: false;
24
+ readonly error: "playerNotFound" | "gameNotFound";
25
+ };
26
+ }, {
27
+ readonly path: "/getEventsAndClearAcknowledged";
28
+ readonly action: (input: unknown) => {
29
+ readonly success: false;
30
+ readonly error: "invalidInput";
31
+ } | {
32
+ readonly success: true;
33
+ readonly events: readonly GameEvent[];
34
+ } | {
35
+ readonly success: false;
36
+ readonly error: "playerNotFound" | "gameNotFound";
37
+ };
38
+ }, {
39
+ readonly path: "/getJoinableGames";
40
+ readonly action: () => {
41
+ readonly games: readonly {
42
+ readonly id: string;
43
+ readonly numPlayers: number;
44
+ }[];
45
+ };
46
+ }, {
47
+ readonly path: "/joinGame";
48
+ readonly action: (input: unknown, userId: string, username: string) => {
49
+ readonly success: true;
50
+ readonly playerId: string;
51
+ } | {
52
+ readonly success: false;
53
+ readonly error: "invalidInput";
54
+ } | {
55
+ readonly success: false;
56
+ readonly error: "maxPlayersReached" | "alreadyInGame" | "gameNotFound" | "invalidStatus";
57
+ };
58
+ }, {
59
+ readonly path: "/leaveGame";
60
+ readonly action: (input: unknown) => {
61
+ readonly success: true;
62
+ } | {
63
+ readonly success: false;
64
+ readonly error: "invalidInput";
65
+ } | {
66
+ readonly success: false;
67
+ readonly error: "playerNotFound" | "gameNotFound";
68
+ };
69
+ }, {
70
+ readonly path: "/sendChat";
71
+ readonly action: (input: unknown) => {
72
+ readonly success: true;
73
+ } | {
74
+ readonly success: false;
75
+ readonly error: "invalidInput";
76
+ } | {
77
+ readonly success: false;
78
+ readonly error: "playerNotFound" | "gameNotFound";
79
+ };
80
+ }, {
81
+ readonly path: "/startGame";
82
+ readonly action: (input: unknown) => {
83
+ readonly success: true;
84
+ } | {
85
+ readonly success: false;
86
+ readonly error: "invalidInput";
87
+ } | {
88
+ readonly success: false;
89
+ readonly error: "playerNotFound" | "playerNotAdmin" | "minPlayersNotReached" | "gameNotFound" | "invalidStatus";
90
+ };
91
+ }, {
92
+ readonly path: "/drawCard";
93
+ readonly action: (input: unknown) => {
94
+ readonly success: false;
95
+ readonly error: "gameNotFound";
96
+ } | {
97
+ readonly success: false;
98
+ readonly error: "invalidStatus";
99
+ } | {
100
+ readonly success: false;
101
+ readonly error: "playerNotFound" | "canPlayAtNotReached" | "handFull" | "drawPileEmpty";
102
+ } | {
103
+ readonly success: true;
104
+ readonly error?: never;
105
+ } | {
106
+ readonly success: false;
107
+ readonly error: "invalidInput";
108
+ };
109
+ }, {
110
+ readonly path: "/playCard";
111
+ readonly action: (input: unknown) => {
112
+ readonly success: false;
113
+ readonly error: "gameNotFound";
114
+ } | {
115
+ readonly success: false;
116
+ readonly error: "invalidStatus";
117
+ } | {
118
+ readonly success: false;
119
+ readonly error: "playerNotFound" | "canPlayAtNotReached" | "cardNotFound" | "cardNotPlayable";
120
+ } | {
121
+ readonly success: true;
122
+ readonly error?: never;
123
+ } | {
124
+ readonly success: false;
125
+ readonly error: "invalidInput";
126
+ };
127
+ }, {
128
+ readonly path: "/reportNoPlayableCards";
129
+ readonly action: (input: unknown) => {
130
+ readonly success: false;
131
+ readonly error: "gameNotFound";
132
+ } | {
133
+ readonly success: false;
134
+ readonly error: "invalidStatus";
135
+ } | {
136
+ readonly success: false;
137
+ readonly error: "playerNotFound" | "canPlayAtNotReached" | "alreadyReported" | "hasPlayableCard" | "canDraw";
138
+ } | {
139
+ readonly success: true;
140
+ readonly error?: never;
141
+ } | {
142
+ readonly success: false;
143
+ readonly error: "invalidInput";
144
+ };
145
+ }];
146
+ };
147
+ //#endregion
148
+ export { createServer };
149
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/server/createServer.ts"],"mappings":";;cAIa,eAAY,gBAAA,kBAAA;;;;;;;;;;;;;;;;;;sBAAZ;;;;;;;;;;;;gCAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAQc,SAAA;;;;;;;;;;;;;;;;;;aAoBA,SAAA;;;;;;;;;;;;;;;;;;aAea,SAAA"}
@@ -1,187 +1,67 @@
1
- import { t as Manager } from "../manager-BAxBCUOk.mjs";
1
+ import { t as createManager } from "../manager-C6kRM9IW.mjs";
2
+ import { createServerFactory } from "@hellacardgames/lib";
2
3
  import { z } from "zod";
3
- //#region src/server/Server.ts
4
- const drawCardInputSchema = z.object({
5
- gameId: z.string(),
6
- playerId: z.string()
7
- }).transform(({ gameId, playerId }) => [gameId, playerId]);
8
- const getClientStateAndClearEventsInputSchema = z.object({
9
- gameId: z.string(),
10
- playerId: z.string()
11
- }).transform(({ gameId, playerId }) => [gameId, playerId]);
12
- const getEventsAndClearAcknowledgedInputSchema = z.object({
13
- gameId: z.string(),
14
- playerId: z.string(),
15
- lastReadId: z.string().nullable()
16
- }).transform(({ gameId, playerId, lastReadId }) => [
17
- gameId,
18
- playerId,
19
- lastReadId
20
- ]);
21
- const joinGameInputSchema = z.object({ gameId: z.string() }).transform(({ gameId }) => [gameId]);
22
- const leaveGameInputSchema = z.object({
23
- gameId: z.string(),
24
- playerId: z.string()
25
- }).transform(({ gameId, playerId }) => [gameId, playerId]);
26
- const playCardInputSchema = z.object({
27
- gameId: z.string(),
28
- playerId: z.string(),
29
- cardId: z.string(),
30
- isForOtherPlayerPile: z.boolean()
31
- }).transform(({ gameId, playerId, cardId, isForOtherPlayerPile }) => [
32
- gameId,
33
- playerId,
34
- cardId,
35
- isForOtherPlayerPile
36
- ]);
37
- const reportNoPlayableCardsInputSchema = z.object({
38
- gameId: z.string(),
39
- playerId: z.string()
40
- }).transform(({ gameId, playerId }) => [gameId, playerId]);
41
- const sendChatInputSchema = z.object({
42
- gameId: z.string(),
43
- playerId: z.string(),
44
- text: z.string()
45
- }).transform(({ gameId, playerId, text }) => [
46
- gameId,
47
- playerId,
48
- text
49
- ]);
50
- const startGameInputSchema = z.object({
51
- gameId: z.string(),
52
- playerId: z.string()
53
- }).transform(({ gameId, playerId }) => [gameId, playerId]);
54
- var Server = class {
55
- manager;
56
- actions = [
57
- {
58
- path: "/createGame",
59
- action: this.createGame.bind(this)
60
- },
61
- {
62
- path: "/drawCard",
63
- action: this.drawCard.bind(this)
64
- },
65
- {
66
- path: "/getClientStateAndClearEvents",
67
- action: this.getClientStateAndClearEvents.bind(this)
68
- },
69
- {
70
- path: "/getEventsAndClearAcknowledged",
71
- action: this.getEventsAndClearAcknowledged.bind(this)
72
- },
73
- {
74
- path: "/getJoinableGames",
75
- action: this.getJoinableGames.bind(this)
76
- },
77
- {
78
- path: "/joinGame",
79
- action: this.joinGame.bind(this)
80
- },
81
- {
82
- path: "/leaveGame",
83
- action: this.leaveGame.bind(this)
84
- },
85
- {
86
- path: "/playCard",
87
- action: this.playCard.bind(this)
88
- },
89
- {
90
- path: "/reportNoPlayableCards",
91
- action: this.reportNoPlayableCards.bind(this)
92
- },
93
- {
94
- path: "/sendChat",
95
- action: this.sendChat.bind(this)
96
- },
97
- {
98
- path: "/startGame",
99
- action: this.startGame.bind(this)
100
- }
101
- ];
102
- constructor(...args) {
103
- this.manager = new Manager(...args);
104
- }
105
- createGame(userId, username) {
106
- return this.manager.createGame(userId, username);
107
- }
108
- drawCard(input) {
4
+ //#region src/server/createServer.ts
5
+ const createServer = createServerFactory(createManager, (manager) => {
6
+ const drawCardInputSchema = z.object({
7
+ gameId: z.string(),
8
+ playerId: z.string()
9
+ }).transform(({ gameId, playerId }) => [gameId, playerId]);
10
+ function drawCard(input) {
109
11
  const parseResult = drawCardInputSchema.safeParse(input);
110
12
  if (!parseResult.success) return {
111
13
  success: false,
112
14
  error: "invalidInput"
113
15
  };
114
- return this.manager.drawCard(...parseResult.data);
115
- }
116
- getClientStateAndClearEvents(input) {
117
- const parseResult = getClientStateAndClearEventsInputSchema.safeParse(input);
118
- if (!parseResult.success) return {
119
- success: false,
120
- error: "invalidInput"
121
- };
122
- return this.manager.getClientStateAndClearEvents(...parseResult.data);
16
+ return manager.drawCard(...parseResult.data);
123
17
  }
124
- getEventsAndClearAcknowledged(input) {
125
- const parseResult = getEventsAndClearAcknowledgedInputSchema.safeParse(input);
126
- if (!parseResult.success) return {
127
- success: false,
128
- error: "invalidInput"
129
- };
130
- return this.manager.getEventsAndClearAcknowledged(...parseResult.data);
131
- }
132
- getJoinableGames() {
133
- return this.manager.getJoinableGames();
134
- }
135
- joinGame(input, userId, username) {
136
- const parseResult = joinGameInputSchema.safeParse(input);
137
- if (!parseResult.success) return {
138
- success: false,
139
- error: "invalidInput"
140
- };
141
- return this.manager.joinGame(...parseResult.data, userId, username);
142
- }
143
- leaveGame(input) {
144
- const parseResult = leaveGameInputSchema.safeParse(input);
145
- if (!parseResult.success) return {
146
- success: false,
147
- error: "invalidInput"
148
- };
149
- return this.manager.leaveGame(...parseResult.data);
150
- }
151
- playCard(input) {
18
+ const playCardInputSchema = z.object({
19
+ gameId: z.string(),
20
+ playerId: z.string(),
21
+ cardId: z.string(),
22
+ isForOtherPlayerPile: z.boolean()
23
+ }).transform(({ gameId, playerId, cardId, isForOtherPlayerPile }) => [
24
+ gameId,
25
+ playerId,
26
+ cardId,
27
+ isForOtherPlayerPile
28
+ ]);
29
+ function playCard(input) {
152
30
  const parseResult = playCardInputSchema.safeParse(input);
153
31
  if (!parseResult.success) return {
154
32
  success: false,
155
33
  error: "invalidInput"
156
34
  };
157
- return this.manager.playCard(...parseResult.data);
35
+ return manager.playCard(...parseResult.data);
158
36
  }
159
- reportNoPlayableCards(input) {
37
+ const reportNoPlayableCardsInputSchema = z.object({
38
+ gameId: z.string(),
39
+ playerId: z.string()
40
+ }).transform(({ gameId, playerId }) => [gameId, playerId]);
41
+ function reportNoPlayableCards(input) {
160
42
  const parseResult = reportNoPlayableCardsInputSchema.safeParse(input);
161
43
  if (!parseResult.success) return {
162
44
  success: false,
163
45
  error: "invalidInput"
164
46
  };
165
- return this.manager.reportNoPlayableCards(...parseResult.data);
166
- }
167
- sendChat(input) {
168
- const parseResult = sendChatInputSchema.safeParse(input);
169
- if (!parseResult.success) return {
170
- success: false,
171
- error: "invalidInput"
172
- };
173
- return this.manager.sendChat(...parseResult.data);
47
+ return manager.reportNoPlayableCards(...parseResult.data);
174
48
  }
175
- startGame(input) {
176
- const parseResult = startGameInputSchema.safeParse(input);
177
- if (!parseResult.success) return {
178
- success: false,
179
- error: "invalidInput"
180
- };
181
- return this.manager.startGame(...parseResult.data);
182
- }
183
- };
49
+ return [
50
+ {
51
+ path: "/drawCard",
52
+ action: drawCard
53
+ },
54
+ {
55
+ path: "/playCard",
56
+ action: playCard
57
+ },
58
+ {
59
+ path: "/reportNoPlayableCards",
60
+ action: reportNoPlayableCards
61
+ }
62
+ ];
63
+ });
184
64
  //#endregion
185
- export { Server };
65
+ export { createServer };
186
66
 
187
67
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/server/Server.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { Manager } from \"../manager/index.js\";\nimport type { ClientState, GameEvent } from \"../manager/index.js\";\n\nexport type CreateGameResult =\n | {\n readonly success: true;\n readonly gameId: string;\n readonly playerId: string;\n }\n | {\n readonly success: false;\n readonly error: \"maxGamesReached\";\n };\n\nexport type DrawCardResult =\n | {\n readonly success: true;\n }\n | {\n readonly success: false;\n readonly error:\n | \"invalidInput\"\n | \"gameNotFound\"\n | \"playerNotFound\"\n | \"invalidStatus\"\n | \"canPlayAtNotReached\"\n | \"handFull\"\n | \"drawPileEmpty\";\n };\n\nexport type GetClientStateAndClearEventsResult =\n | {\n readonly success: true;\n readonly state: ClientState;\n }\n | {\n readonly success: false;\n readonly error: \"invalidInput\" | \"gameNotFound\" | \"playerNotFound\";\n };\n\nexport type GetEventsAndClearAcknowledgedResult =\n | {\n readonly success: true;\n readonly events: readonly GameEvent[];\n }\n | {\n readonly success: false;\n readonly error: \"invalidInput\" | \"gameNotFound\" | \"playerNotFound\";\n };\n\nexport type GetJoinableGamesResult = {\n readonly games: readonly {\n readonly id: string;\n readonly numPlayers: number;\n }[];\n};\n\nexport type JoinGameResult =\n | {\n readonly success: true;\n readonly playerId: string;\n }\n | {\n readonly success: false;\n readonly error:\n | \"invalidInput\"\n | \"gameNotFound\"\n | \"invalidStatus\"\n | \"maxPlayersReached\"\n | \"alreadyInGame\";\n };\n\nexport type LeaveGameResult =\n | {\n readonly success: true;\n }\n | {\n readonly success: false;\n readonly error: \"invalidInput\" | \"gameNotFound\" | \"playerNotFound\";\n };\n\nexport type PlayCardResult =\n | {\n readonly success: true;\n }\n | {\n readonly success: false;\n readonly error:\n | \"invalidInput\"\n | \"gameNotFound\"\n | \"playerNotFound\"\n | \"invalidStatus\"\n | \"canPlayAtNotReached\"\n | \"cardNotFound\"\n | \"cardNotPlayable\";\n };\n\nexport type ReportNoPlayableCardsResult =\n | {\n readonly success: true;\n }\n | {\n readonly success: false;\n readonly error:\n | \"invalidInput\"\n | \"gameNotFound\"\n | \"playerNotFound\"\n | \"invalidStatus\"\n | \"canPlayAtNotReached\"\n | \"alreadyReported\"\n | \"hasPlayableCard\"\n | \"canDraw\";\n };\n\nexport type SendChatResult =\n | {\n readonly success: true;\n }\n | {\n readonly success: false;\n readonly error: \"invalidInput\" | \"gameNotFound\" | \"playerNotFound\";\n };\n\nexport type StartGameResult =\n | {\n readonly success: true;\n }\n | {\n readonly success: false;\n readonly error:\n | \"invalidInput\"\n | \"gameNotFound\"\n | \"invalidStatus\"\n | \"playerNotFound\"\n | \"playerNotAdmin\"\n | \"minPlayersNotReached\";\n };\n\nconst drawCardInputSchema = z\n .object({\n gameId: z.string(),\n playerId: z.string(),\n })\n .transform(({ gameId, playerId }) => [gameId, playerId] as const);\n\nconst getClientStateAndClearEventsInputSchema = z\n .object({\n gameId: z.string(),\n playerId: z.string(),\n })\n .transform(({ gameId, playerId }) => [gameId, playerId] as const);\n\nconst getEventsAndClearAcknowledgedInputSchema = z\n .object({\n gameId: z.string(),\n playerId: z.string(),\n lastReadId: z.string().nullable(),\n })\n .transform(\n ({ gameId, playerId, lastReadId }) =>\n [gameId, playerId, lastReadId] as const,\n );\n\nconst joinGameInputSchema = z\n .object({\n gameId: z.string(),\n })\n .transform(({ gameId }) => [gameId] as const);\n\nconst leaveGameInputSchema = z\n .object({\n gameId: z.string(),\n playerId: z.string(),\n })\n .transform(({ gameId, playerId }) => [gameId, playerId] as const);\n\nconst playCardInputSchema = z\n .object({\n gameId: z.string(),\n playerId: z.string(),\n cardId: z.string(),\n isForOtherPlayerPile: z.boolean(),\n })\n .transform(\n ({ gameId, playerId, cardId, isForOtherPlayerPile }) =>\n [gameId, playerId, cardId, isForOtherPlayerPile] as const,\n );\n\nconst reportNoPlayableCardsInputSchema = z\n .object({\n gameId: z.string(),\n playerId: z.string(),\n })\n .transform(({ gameId, playerId }) => [gameId, playerId] as const);\n\nconst sendChatInputSchema = z\n .object({\n gameId: z.string(),\n playerId: z.string(),\n text: z.string(),\n })\n .transform(({ gameId, playerId, text }) => [gameId, playerId, text] as const);\n\nconst startGameInputSchema = z\n .object({\n gameId: z.string(),\n playerId: z.string(),\n })\n .transform(({ gameId, playerId }) => [gameId, playerId] as const);\n\nexport class Server {\n private readonly manager: Manager;\n\n readonly actions = [\n { path: \"/createGame\", action: this.createGame.bind(this) },\n { path: \"/drawCard\", action: this.drawCard.bind(this) },\n {\n path: \"/getClientStateAndClearEvents\",\n action: this.getClientStateAndClearEvents.bind(this),\n },\n {\n path: \"/getEventsAndClearAcknowledged\",\n action: this.getEventsAndClearAcknowledged.bind(this),\n },\n { path: \"/getJoinableGames\", action: this.getJoinableGames.bind(this) },\n { path: \"/joinGame\", action: this.joinGame.bind(this) },\n { path: \"/leaveGame\", action: this.leaveGame.bind(this) },\n { path: \"/playCard\", action: this.playCard.bind(this) },\n {\n path: \"/reportNoPlayableCards\",\n action: this.reportNoPlayableCards.bind(this),\n },\n { path: \"/sendChat\", action: this.sendChat.bind(this) },\n { path: \"/startGame\", action: this.startGame.bind(this) },\n ] as const;\n\n constructor(...args: ConstructorParameters<typeof Manager>) {\n this.manager = new Manager(...args);\n }\n\n private createGame(userId: string, username: string): CreateGameResult {\n return this.manager.createGame(userId, username);\n }\n\n private drawCard(input: unknown): DrawCardResult {\n const parseResult = drawCardInputSchema.safeParse(input);\n if (!parseResult.success) {\n return { success: false, error: \"invalidInput\" };\n }\n return this.manager.drawCard(...parseResult.data);\n }\n\n private getClientStateAndClearEvents(\n input: unknown,\n ): GetClientStateAndClearEventsResult {\n const parseResult =\n getClientStateAndClearEventsInputSchema.safeParse(input);\n if (!parseResult.success) {\n return { success: false, error: \"invalidInput\" };\n }\n return this.manager.getClientStateAndClearEvents(...parseResult.data);\n }\n\n private getEventsAndClearAcknowledged(\n input: unknown,\n ): GetEventsAndClearAcknowledgedResult {\n const parseResult =\n getEventsAndClearAcknowledgedInputSchema.safeParse(input);\n if (!parseResult.success) {\n return { success: false, error: \"invalidInput\" };\n }\n return this.manager.getEventsAndClearAcknowledged(...parseResult.data);\n }\n\n private getJoinableGames(): GetJoinableGamesResult {\n return this.manager.getJoinableGames();\n }\n\n private joinGame(\n input: unknown,\n userId: string,\n username: string,\n ): JoinGameResult {\n const parseResult = joinGameInputSchema.safeParse(input);\n if (!parseResult.success) {\n return { success: false, error: \"invalidInput\" };\n }\n return this.manager.joinGame(...parseResult.data, userId, username);\n }\n\n private leaveGame(input: unknown): LeaveGameResult {\n const parseResult = leaveGameInputSchema.safeParse(input);\n if (!parseResult.success) {\n return { success: false, error: \"invalidInput\" };\n }\n return this.manager.leaveGame(...parseResult.data);\n }\n\n private playCard(input: unknown): PlayCardResult {\n const parseResult = playCardInputSchema.safeParse(input);\n if (!parseResult.success) {\n return { success: false, error: \"invalidInput\" };\n }\n return this.manager.playCard(...parseResult.data);\n }\n\n private reportNoPlayableCards(input: unknown): ReportNoPlayableCardsResult {\n const parseResult = reportNoPlayableCardsInputSchema.safeParse(input);\n if (!parseResult.success) {\n return { success: false, error: \"invalidInput\" };\n }\n return this.manager.reportNoPlayableCards(...parseResult.data);\n }\n\n private sendChat(input: unknown): SendChatResult {\n const parseResult = sendChatInputSchema.safeParse(input);\n if (!parseResult.success) {\n return { success: false, error: \"invalidInput\" };\n }\n return this.manager.sendChat(...parseResult.data);\n }\n\n private startGame(input: unknown): StartGameResult {\n const parseResult = startGameInputSchema.safeParse(input);\n if (!parseResult.success) {\n return { success: false, error: \"invalidInput\" };\n }\n return this.manager.startGame(...parseResult.data);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/server/createServer.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { createServerFactory } from \"@hellacardgames/lib\";\nimport { createManager } from \"../manager/index.js\";\n\nexport const createServer = createServerFactory(createManager, (manager) => {\n const drawCardInputSchema = z\n .object({\n gameId: z.string(),\n playerId: z.string(),\n })\n .transform(({ gameId, playerId }) => [gameId, playerId] as const);\n\n function drawCard(input: unknown) {\n const parseResult = drawCardInputSchema.safeParse(input);\n if (!parseResult.success) {\n return { success: false, error: \"invalidInput\" } as const;\n }\n return manager.drawCard(...parseResult.data);\n }\n\n const playCardInputSchema = z\n .object({\n gameId: z.string(),\n playerId: z.string(),\n cardId: z.string(),\n isForOtherPlayerPile: z.boolean(),\n })\n .transform(\n ({ gameId, playerId, cardId, isForOtherPlayerPile }) =>\n [gameId, playerId, cardId, isForOtherPlayerPile] as const,\n );\n\n function playCard(input: unknown) {\n const parseResult = playCardInputSchema.safeParse(input);\n if (!parseResult.success) {\n return { success: false, error: \"invalidInput\" } as const;\n }\n return manager.playCard(...parseResult.data);\n }\n\n const reportNoPlayableCardsInputSchema = z\n .object({\n gameId: z.string(),\n playerId: z.string(),\n })\n .transform(({ gameId, playerId }) => [gameId, playerId] as const);\n\n function reportNoPlayableCards(input: unknown) {\n const parseResult = reportNoPlayableCardsInputSchema.safeParse(input);\n if (!parseResult.success) {\n return { success: false, error: \"invalidInput\" } as const;\n }\n return manager.reportNoPlayableCards(...parseResult.data);\n }\n\n return [\n { path: \"/drawCard\", action: drawCard },\n { path: \"/playCard\", action: playCard },\n { path: \"/reportNoPlayableCards\", action: reportNoPlayableCards },\n ];\n});\n"],"mappings":";;;;AAIA,MAAa,eAAe,oBAAoB,gBAAgB,YAAY;CAC1E,MAAM,sBAAsB,EACzB,OAAO;EACN,QAAQ,EAAE,OAAO;EACjB,UAAU,EAAE,OAAO;CACrB,CAAC,CAAC,CACD,WAAW,EAAE,QAAQ,eAAe,CAAC,QAAQ,QAAQ,CAAU;CAElE,SAAS,SAAS,OAAgB;EAChC,MAAM,cAAc,oBAAoB,UAAU,KAAK;EACvD,IAAI,CAAC,YAAY,SACf,OAAO;GAAE,SAAS;GAAO,OAAO;EAAe;EAEjD,OAAO,QAAQ,SAAS,GAAG,YAAY,IAAI;CAC7C;CAEA,MAAM,sBAAsB,EACzB,OAAO;EACN,QAAQ,EAAE,OAAO;EACjB,UAAU,EAAE,OAAO;EACnB,QAAQ,EAAE,OAAO;EACjB,sBAAsB,EAAE,QAAQ;CAClC,CAAC,CAAC,CACD,WACE,EAAE,QAAQ,UAAU,QAAQ,2BAC3B;EAAC;EAAQ;EAAU;EAAQ;CAAoB,CACnD;CAEF,SAAS,SAAS,OAAgB;EAChC,MAAM,cAAc,oBAAoB,UAAU,KAAK;EACvD,IAAI,CAAC,YAAY,SACf,OAAO;GAAE,SAAS;GAAO,OAAO;EAAe;EAEjD,OAAO,QAAQ,SAAS,GAAG,YAAY,IAAI;CAC7C;CAEA,MAAM,mCAAmC,EACtC,OAAO;EACN,QAAQ,EAAE,OAAO;EACjB,UAAU,EAAE,OAAO;CACrB,CAAC,CAAC,CACD,WAAW,EAAE,QAAQ,eAAe,CAAC,QAAQ,QAAQ,CAAU;CAElE,SAAS,sBAAsB,OAAgB;EAC7C,MAAM,cAAc,iCAAiC,UAAU,KAAK;EACpE,IAAI,CAAC,YAAY,SACf,OAAO;GAAE,SAAS;GAAO,OAAO;EAAe;EAEjD,OAAO,QAAQ,sBAAsB,GAAG,YAAY,IAAI;CAC1D;CAEA,OAAO;EACL;GAAE,MAAM;GAAa,QAAQ;EAAS;EACtC;GAAE,MAAM;GAAa,QAAQ;EAAS;EACtC;GAAE,MAAM;GAA0B,QAAQ;EAAsB;CAClE;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hellacardgames/speed",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "A TypeScript library implementing the Speed card game.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -86,7 +86,7 @@
86
86
  "vitest": "^4.1.9"
87
87
  },
88
88
  "dependencies": {
89
- "@hellacardgames/lib": "^0.6.1",
89
+ "@hellacardgames/lib": "^0.7.0",
90
90
  "zod": "^4.4.3"
91
91
  }
92
92
  }
@@ -1,125 +0,0 @@
1
- import { c as Manager, m as ClientState, p as GameEvent } from "./index-uaOvIhKT.mjs";
2
- //#region src/server/Server.d.ts
3
- type CreateGameResult = {
4
- readonly success: true;
5
- readonly gameId: string;
6
- readonly playerId: string;
7
- } | {
8
- readonly success: false;
9
- readonly error: "maxGamesReached";
10
- };
11
- type DrawCardResult = {
12
- readonly success: true;
13
- } | {
14
- readonly success: false;
15
- readonly error: "invalidInput" | "gameNotFound" | "playerNotFound" | "invalidStatus" | "canPlayAtNotReached" | "handFull" | "drawPileEmpty";
16
- };
17
- type GetClientStateAndClearEventsResult = {
18
- readonly success: true;
19
- readonly state: ClientState;
20
- } | {
21
- readonly success: false;
22
- readonly error: "invalidInput" | "gameNotFound" | "playerNotFound";
23
- };
24
- type GetEventsAndClearAcknowledgedResult = {
25
- readonly success: true;
26
- readonly events: readonly GameEvent[];
27
- } | {
28
- readonly success: false;
29
- readonly error: "invalidInput" | "gameNotFound" | "playerNotFound";
30
- };
31
- type GetJoinableGamesResult = {
32
- readonly games: readonly {
33
- readonly id: string;
34
- readonly numPlayers: number;
35
- }[];
36
- };
37
- type JoinGameResult = {
38
- readonly success: true;
39
- readonly playerId: string;
40
- } | {
41
- readonly success: false;
42
- readonly error: "invalidInput" | "gameNotFound" | "invalidStatus" | "maxPlayersReached" | "alreadyInGame";
43
- };
44
- type LeaveGameResult = {
45
- readonly success: true;
46
- } | {
47
- readonly success: false;
48
- readonly error: "invalidInput" | "gameNotFound" | "playerNotFound";
49
- };
50
- type PlayCardResult = {
51
- readonly success: true;
52
- } | {
53
- readonly success: false;
54
- readonly error: "invalidInput" | "gameNotFound" | "playerNotFound" | "invalidStatus" | "canPlayAtNotReached" | "cardNotFound" | "cardNotPlayable";
55
- };
56
- type ReportNoPlayableCardsResult = {
57
- readonly success: true;
58
- } | {
59
- readonly success: false;
60
- readonly error: "invalidInput" | "gameNotFound" | "playerNotFound" | "invalidStatus" | "canPlayAtNotReached" | "alreadyReported" | "hasPlayableCard" | "canDraw";
61
- };
62
- type SendChatResult = {
63
- readonly success: true;
64
- } | {
65
- readonly success: false;
66
- readonly error: "invalidInput" | "gameNotFound" | "playerNotFound";
67
- };
68
- type StartGameResult = {
69
- readonly success: true;
70
- } | {
71
- readonly success: false;
72
- readonly error: "invalidInput" | "gameNotFound" | "invalidStatus" | "playerNotFound" | "playerNotAdmin" | "minPlayersNotReached";
73
- };
74
- declare class Server {
75
- private readonly manager;
76
- readonly actions: readonly [{
77
- readonly path: "/createGame";
78
- readonly action: (userId: string, username: string) => CreateGameResult;
79
- }, {
80
- readonly path: "/drawCard";
81
- readonly action: (input: unknown) => DrawCardResult;
82
- }, {
83
- readonly path: "/getClientStateAndClearEvents";
84
- readonly action: (input: unknown) => GetClientStateAndClearEventsResult;
85
- }, {
86
- readonly path: "/getEventsAndClearAcknowledged";
87
- readonly action: (input: unknown) => GetEventsAndClearAcknowledgedResult;
88
- }, {
89
- readonly path: "/getJoinableGames";
90
- readonly action: () => GetJoinableGamesResult;
91
- }, {
92
- readonly path: "/joinGame";
93
- readonly action: (input: unknown, userId: string, username: string) => JoinGameResult;
94
- }, {
95
- readonly path: "/leaveGame";
96
- readonly action: (input: unknown) => LeaveGameResult;
97
- }, {
98
- readonly path: "/playCard";
99
- readonly action: (input: unknown) => PlayCardResult;
100
- }, {
101
- readonly path: "/reportNoPlayableCards";
102
- readonly action: (input: unknown) => ReportNoPlayableCardsResult;
103
- }, {
104
- readonly path: "/sendChat";
105
- readonly action: (input: unknown) => SendChatResult;
106
- }, {
107
- readonly path: "/startGame";
108
- readonly action: (input: unknown) => StartGameResult;
109
- }];
110
- constructor(...args: ConstructorParameters<typeof Manager>);
111
- private createGame;
112
- private drawCard;
113
- private getClientStateAndClearEvents;
114
- private getEventsAndClearAcknowledged;
115
- private getJoinableGames;
116
- private joinGame;
117
- private leaveGame;
118
- private playCard;
119
- private reportNoPlayableCards;
120
- private sendChat;
121
- private startGame;
122
- }
123
- //#endregion
124
- export { GetJoinableGamesResult as a, PlayCardResult as c, Server as d, StartGameResult as f, GetEventsAndClearAcknowledgedResult as i, ReportNoPlayableCardsResult as l, DrawCardResult as n, JoinGameResult as o, GetClientStateAndClearEventsResult as r, LeaveGameResult as s, CreateGameResult as t, SendChatResult as u };
125
- //# sourceMappingURL=index-C5bT1Zzd.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-C5bT1Zzd.d.mts","names":[],"sources":["../src/server/Server.ts"],"mappings":";;KAIY;WAEG;WACA;WACA;;WAGA;WACA;;KAGH;WAEG;;WAGA;WACA;;KAUH;WAEG;WACA,OAAO;;WAGP;WACA;;KAGH;WAEG;WACA,iBAAiB;;WAGjB;WACA;;KAGH;WACD;aACE;aACA;;;KAID;WAEG;WACA;;WAGA;WACA;;KAQH;WAEG;;WAGA;WACA;;KAGH;WAEG;;WAGA;WACA;;KAUH;WAEG;;WAGA;WACA;;KAWH;WAEG;;WAGA;WACA;;KAGH;WAEG;;WAGA;WACA;;cAiFF;mBACM;WAER;;aA2BkB,SAAA,gBAAM,qBAAqB;;;aAI9B,SAAA,mBAAU;;;aASzB,SAAA,mBACN;;;aAUM,SAAA,mBACN;;;aASyB,cAAA;;;aAKnB,SAAA,gBAAO,gBACA,qBAEb;;;aAQsB,SAAA,mBAAU;;;aAQX,SAAA,mBAAU;;;aAQG,SAAA,mBAAU;;;aAQvB,SAAA,mBAAU;;;aAQT,SAAA,mBAAU;;EAtFvB,eAAG,MAAM,6BAA6B;UAI1C;UAIA;UAQA;UAWA;UAWA;UAIA;UAYA;UAQA;UAQA;UAQA;UAQA"}