@bct-app/game-model 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # @bct-app/game-model
2
+
3
+ `@bct-app/game-model` uses Zod models as source of truth and generates:
4
+
5
+ - JSON Schema files in `dist/schemas`
6
+ - Pure declaration output in `dist/index.d.ts`
7
+
8
+ Schema files are exported via package subpaths:
9
+
10
+ - `@bct-app/game-model/schemas` -> schema index map
11
+ - `@bct-app/game-model/schemas/game`
12
+ - `@bct-app/game-model/schemas/effect`
13
+ - `@bct-app/game-model/schemas/input`
14
+ - `@bct-app/game-model/schemas/view`
15
+ - `@bct-app/game-model/schemas/message`
16
+ - `@bct-app/game-model/schemas/character-kind`
17
+ - `@bct-app/game-model/schemas/character-basic-kind`
18
+
19
+ ## Build
20
+
21
+ ```bash
22
+ pnpm --filter @bct-app/game-model build
23
+ ```
24
+
25
+ ## Publish
26
+
27
+ ```bash
28
+ pnpm --filter @bct-app/game-model pack:check
29
+ pnpm --filter @bct-app/game-model prepack
30
+ pnpm --filter @bct-app/game-model publish --access public
31
+ ```
32
+
33
+ Published package includes only `dist` artifacts and has no runtime dependencies.
@@ -0,0 +1,633 @@
1
+ export type TGame =
2
+ {
3
+ owner: string;
4
+ scriptId: string;
5
+ numberOfPlayer: number;
6
+ characterKinds: { kind: string; count: number; }[];
7
+ characters: string[];
8
+ seats: ({ userId: string; ready: boolean; } | null)[];
9
+ result:
10
+ | "goodWin"
11
+ | "evilWin";
12
+ createdAt: string;
13
+ startedAt: string;
14
+ endedAt: string;
15
+ };
16
+
17
+ export type TEffect =
18
+ | {
19
+ type: "ABILITY_CHANGE";
20
+ source:
21
+ | {
22
+ from: "PAYLOAD";
23
+ value:
24
+ | number
25
+ | number[];
26
+ }
27
+ | {
28
+ from: "CONSTANT";
29
+ value: string;
30
+ };
31
+ target:
32
+ | {
33
+ from: "PAYLOAD";
34
+ value:
35
+ | number
36
+ | number[];
37
+ }
38
+ | {
39
+ from: "EFFECTOR";
40
+ }
41
+ | {
42
+ from: "CUSTOM";
43
+ value:
44
+ | "ALL_TOWNSFOLK"
45
+ | "ALL_PLAYERS";
46
+ };
47
+ }
48
+ | {
49
+ type: "ALIGNMENT_CHANGE";
50
+ source:
51
+ | {
52
+ from: "PAYLOAD";
53
+ value:
54
+ | number
55
+ | number[];
56
+ }
57
+ | {
58
+ from: "EFFECTOR";
59
+ }
60
+ | {
61
+ from: "CONSTANT";
62
+ value:
63
+ | "GOOD"
64
+ | "EVIL";
65
+ };
66
+ target:
67
+ | {
68
+ from: "PAYLOAD";
69
+ value:
70
+ | number
71
+ | number[];
72
+ }
73
+ | {
74
+ from: "EFFECTOR";
75
+ }
76
+ | {
77
+ from: "CUSTOM";
78
+ value:
79
+ | "ALL_TOWNSFOLK"
80
+ | "ALL_PLAYERS";
81
+ };
82
+ }
83
+ | {
84
+ type: "CHARACTER_COUNT_CHANGE";
85
+ kind:
86
+ | "Townsfolk"
87
+ | "Outsiders"
88
+ | "Minions"
89
+ | "Demons";
90
+ value: number;
91
+ }
92
+ | {
93
+ type: "CHARACTER_CHANGE";
94
+ source:
95
+ | {
96
+ from: "PAYLOAD";
97
+ value:
98
+ | number
99
+ | number[];
100
+ }
101
+ | {
102
+ from: "EFFECTOR";
103
+ }
104
+ | {
105
+ from: "CONSTANT";
106
+ value: string;
107
+ };
108
+ target:
109
+ | {
110
+ from: "PAYLOAD";
111
+ value:
112
+ | number
113
+ | number[];
114
+ }
115
+ | {
116
+ from: "EFFECTOR";
117
+ }
118
+ | {
119
+ from: "CUSTOM";
120
+ value:
121
+ | "ALL_TOWNSFOLK"
122
+ | "ALL_PLAYERS";
123
+ };
124
+ }
125
+ | {
126
+ type: "PERCEIVED_CHARACTER_CHANGE";
127
+ source:
128
+ | {
129
+ from: "PAYLOAD";
130
+ value:
131
+ | number
132
+ | number[];
133
+ }
134
+ | {
135
+ from: "EFFECTOR";
136
+ }
137
+ | {
138
+ from: "CONSTANT";
139
+ value: string;
140
+ };
141
+ target:
142
+ | {
143
+ from: "PAYLOAD";
144
+ value:
145
+ | number
146
+ | number[];
147
+ }
148
+ | {
149
+ from: "EFFECTOR";
150
+ }
151
+ | {
152
+ from: "CUSTOM";
153
+ value:
154
+ | "ALL_TOWNSFOLK"
155
+ | "ALL_PLAYERS";
156
+ };
157
+ followPriority?:
158
+ | boolean
159
+ | undefined;
160
+ }
161
+ | {
162
+ type: "STATUS_CHANGE";
163
+ source:
164
+ | {
165
+ from: "PAYLOAD";
166
+ value:
167
+ | number
168
+ | number[];
169
+ }
170
+ | {
171
+ from: "CONSTANT";
172
+ value:
173
+ | "DEAD"
174
+ | "ALIVE";
175
+ };
176
+ target:
177
+ | {
178
+ from: "PAYLOAD";
179
+ value:
180
+ | number
181
+ | number[];
182
+ }
183
+ | {
184
+ from: "EFFECTOR";
185
+ }
186
+ | {
187
+ from: "CUSTOM";
188
+ value:
189
+ | "ALL_TOWNSFOLK"
190
+ | "ALL_PLAYERS";
191
+ };
192
+ }
193
+ | {
194
+ type: "SEAT_CHANGE";
195
+ source:
196
+ | {
197
+ from: "PAYLOAD";
198
+ value:
199
+ | number
200
+ | number[];
201
+ }
202
+ | {
203
+ from: "EFFECTOR";
204
+ }
205
+ | {
206
+ from: "CONSTANT";
207
+ value: number;
208
+ };
209
+ target:
210
+ | {
211
+ from: "PAYLOAD";
212
+ value:
213
+ | number
214
+ | number[];
215
+ }
216
+ | {
217
+ from: "EFFECTOR";
218
+ }
219
+ | {
220
+ from: "CUSTOM";
221
+ value:
222
+ | "ALL_TOWNSFOLK"
223
+ | "ALL_PLAYERS";
224
+ };
225
+ }
226
+ | {
227
+ type: "GAME_CHANGE";
228
+ source:
229
+ | {
230
+ from: "PAYLOAD";
231
+ value:
232
+ | number
233
+ | number[];
234
+ }
235
+ | {
236
+ from: "CONSTANT";
237
+ value:
238
+ | "GOOD"
239
+ | "EVIL";
240
+ };
241
+ }
242
+ | {
243
+ type: "REMINDER_ADD";
244
+ source:
245
+ | {
246
+ from: "PAYLOAD";
247
+ value:
248
+ | number
249
+ | number[];
250
+ }
251
+ | {
252
+ from: "CONSTANT";
253
+ value:
254
+ {
255
+ mark: string;
256
+ color?:
257
+ | string
258
+ | undefined;
259
+ description?:
260
+ | string
261
+ | undefined;
262
+ duration?:
263
+ | number
264
+ | undefined;
265
+ };
266
+ };
267
+ target:
268
+ | {
269
+ from: "PAYLOAD";
270
+ value:
271
+ | number
272
+ | number[];
273
+ }
274
+ | {
275
+ from: "EFFECTOR";
276
+ }
277
+ | {
278
+ from: "CUSTOM";
279
+ value:
280
+ | "ALL_TOWNSFOLK"
281
+ | "ALL_PLAYERS";
282
+ };
283
+ }
284
+ | {
285
+ type: "REMINDER_REMOVE";
286
+ source:
287
+ | {
288
+ from: "PAYLOAD";
289
+ value:
290
+ | number
291
+ | number[];
292
+ }
293
+ | {
294
+ from: "CONSTANT";
295
+ value: number;
296
+ };
297
+ target:
298
+ | {
299
+ from: "PAYLOAD";
300
+ value:
301
+ | number
302
+ | number[];
303
+ }
304
+ | {
305
+ from: "EFFECTOR";
306
+ }
307
+ | {
308
+ from: "CUSTOM";
309
+ value:
310
+ | "ALL_TOWNSFOLK"
311
+ | "ALL_PLAYERS";
312
+ };
313
+ };
314
+
315
+ export type TInput =
316
+ | {
317
+ type: "PLAYER";
318
+ layout:
319
+ | "ROUND"
320
+ | "ROW";
321
+ kinds: ("Townsfolk" | "Outsiders" | "Minions" | "Demons")[];
322
+ title?:
323
+ | string
324
+ | undefined;
325
+ footer?:
326
+ | string
327
+ | undefined;
328
+ readonly?:
329
+ | boolean
330
+ | undefined;
331
+ filterToken?:
332
+ | string
333
+ | undefined;
334
+ range?:
335
+ | [number, number]
336
+ | [number]
337
+ | undefined;
338
+ }
339
+ | {
340
+ type: "CHARACTER";
341
+ kinds: ("Townsfolk" | "Outsiders" | "Minions" | "Demons")[];
342
+ title?:
343
+ | string
344
+ | undefined;
345
+ footer?:
346
+ | string
347
+ | undefined;
348
+ readonly?:
349
+ | boolean
350
+ | undefined;
351
+ filterToken?:
352
+ | string
353
+ | undefined;
354
+ range?:
355
+ | [number, number]
356
+ | [number]
357
+ | undefined;
358
+ }
359
+ | {
360
+ type: "ALIGNMENT";
361
+ title?:
362
+ | string
363
+ | undefined;
364
+ footer?:
365
+ | string
366
+ | undefined;
367
+ readonly?:
368
+ | boolean
369
+ | undefined;
370
+ }
371
+ | {
372
+ type: "CHARACTER_KIND";
373
+ title?:
374
+ | string
375
+ | undefined;
376
+ footer?:
377
+ | string
378
+ | undefined;
379
+ readonly?:
380
+ | boolean
381
+ | undefined;
382
+ }
383
+ | {
384
+ type: "BOOLEAN";
385
+ style:
386
+ | "RADIO"
387
+ | "SWITCH";
388
+ defaultValue: boolean;
389
+ texts: [string, string];
390
+ title?:
391
+ | string
392
+ | undefined;
393
+ footer?:
394
+ | string
395
+ | undefined;
396
+ readonly?:
397
+ | boolean
398
+ | undefined;
399
+ prompt?:
400
+ | string
401
+ | undefined;
402
+ }
403
+ | {
404
+ type: "NUMBER";
405
+ range:
406
+ | [number, number]
407
+ | [number];
408
+ style:
409
+ | "SELECTION"
410
+ | "INPUT";
411
+ title?:
412
+ | string
413
+ | undefined;
414
+ footer?:
415
+ | string
416
+ | undefined;
417
+ readonly?:
418
+ | boolean
419
+ | undefined;
420
+ }
421
+ | {
422
+ type: "TEXT";
423
+ title?:
424
+ | string
425
+ | undefined;
426
+ footer?:
427
+ | string
428
+ | undefined;
429
+ readonly?:
430
+ | boolean
431
+ | undefined;
432
+ }
433
+ | {
434
+ type: "STATUS";
435
+ title?:
436
+ | string
437
+ | undefined;
438
+ footer?:
439
+ | string
440
+ | undefined;
441
+ readonly?:
442
+ | boolean
443
+ | undefined;
444
+ }
445
+ | {
446
+ type: "REMINDER";
447
+ title?:
448
+ | string
449
+ | undefined;
450
+ footer?:
451
+ | string
452
+ | undefined;
453
+ readonly?:
454
+ | boolean
455
+ | undefined;
456
+ }
457
+ | {
458
+ type: "PLAYER_REMINDER";
459
+ title?:
460
+ | string
461
+ | undefined;
462
+ footer?:
463
+ | string
464
+ | undefined;
465
+ readonly?:
466
+ | boolean
467
+ | undefined;
468
+ };
469
+
470
+ export type TView =
471
+ | {
472
+ source:
473
+ | {
474
+ from: "PAYLOAD";
475
+ value:
476
+ | number
477
+ | number[];
478
+ }
479
+ | {
480
+ from: "CONSTANT";
481
+ value: any;
482
+ };
483
+ type: "CHARACTER";
484
+ }
485
+ | {
486
+ source:
487
+ | {
488
+ from: "PAYLOAD";
489
+ value:
490
+ | number
491
+ | number[];
492
+ }
493
+ | {
494
+ from: "CONSTANT";
495
+ value: any;
496
+ };
497
+ type: "CHARACTER_KIND";
498
+ }
499
+ | {
500
+ source:
501
+ | {
502
+ from: "PAYLOAD";
503
+ value:
504
+ | number
505
+ | number[];
506
+ }
507
+ | {
508
+ from: "CONSTANT";
509
+ value: any;
510
+ };
511
+ type: "ALIGNMENT";
512
+ }
513
+ | {
514
+ source:
515
+ | {
516
+ from: "PAYLOAD";
517
+ value:
518
+ | number
519
+ | number[];
520
+ }
521
+ | {
522
+ from: "CONSTANT";
523
+ value: any;
524
+ };
525
+ type: "NUMBER";
526
+ }
527
+ | {
528
+ source:
529
+ | {
530
+ from: "PAYLOAD";
531
+ value:
532
+ | number
533
+ | number[];
534
+ }
535
+ | {
536
+ from: "CONSTANT";
537
+ value: any;
538
+ };
539
+ type: "PLAYER";
540
+ }
541
+ | {
542
+ source:
543
+ | {
544
+ from: "PAYLOAD";
545
+ value:
546
+ | number
547
+ | number[];
548
+ }
549
+ | {
550
+ from: "CONSTANT";
551
+ value: any;
552
+ };
553
+ type: "BOOLEAN";
554
+ texts: [string, string];
555
+ style: ("TEXT" | "ICON")[];
556
+ }
557
+ | {
558
+ source:
559
+ | {
560
+ from: "PAYLOAD";
561
+ value:
562
+ | number
563
+ | number[];
564
+ }
565
+ | {
566
+ from: "CONSTANT";
567
+ value: any;
568
+ };
569
+ type: "TEXT";
570
+ color: string;
571
+ fontSize: number;
572
+ }
573
+ | {
574
+ source:
575
+ | {
576
+ from: "PAYLOAD";
577
+ value:
578
+ | number
579
+ | number[];
580
+ }
581
+ | {
582
+ from: "CONSTANT";
583
+ value: any;
584
+ };
585
+ type: "STATUS";
586
+ }
587
+ | {
588
+ source:
589
+ | {
590
+ from: "PAYLOAD";
591
+ value:
592
+ | number
593
+ | number[];
594
+ }
595
+ | {
596
+ from: "CONSTANT";
597
+ value: any;
598
+ };
599
+ type: "REMINDER";
600
+ }
601
+ | {
602
+ source:
603
+ | {
604
+ from: "PAYLOAD";
605
+ value:
606
+ | number
607
+ | number[];
608
+ }
609
+ | {
610
+ from: "CONSTANT";
611
+ value: any;
612
+ };
613
+ type: "PLAYER_REMINDER";
614
+ };
615
+
616
+ export type TMessage =
617
+ {
618
+ targets: ({ from: "PAYLOAD"; value: number | number[]; } | { from: "EFFECTOR"; } | { from: "CUSTOM"; value: "ALL_TOWNSFOLK" | "ALL_PLAYERS"; })[];
619
+ content: ({ type: "PAYLOAD"; value: number | number[]; payloadType: "PLAYER"; options: { format: "NUMBER_AND_CHARACTER" | "NUMBER_ONLY" | "CHARACTER_ONLY" | "ALIGNMENT_ONLY"; }; } | { type: "PAYLOAD"; value: number | number[]; payloadType: "BOOLEAN"; options?: { texts?: [string, string] | undefined; style?: ("TEXT" | "ICON")[] | undefined; colors?: [(string | undefined)?, (string | undefined)?] | undefined; } | undefined; } | { type: "PAYLOAD"; value: number | number[]; payloadType: "ALIGNMENT" | "CHARACTER" | "CHARACTER_KIND" | "NUMBER" | "REMINDER" | "PLAYER_REMINDER" | "STATUS" | "TEXT"; options: Record<string, never>; } | { type: "TEXT"; value: string; } | { type: "EFFECTOR"; options: { format: "NUMBER_AND_CHARACTER" | "NUMBER_ONLY" | "CHARACTER_ONLY" | "ALIGNMENT_ONLY"; }; } | { type: "SPECIAL"; kind: "SPY"; })[];
620
+ };
621
+
622
+ export type TCharacterKind =
623
+ | "Townsfolk"
624
+ | "Outsiders"
625
+ | "Minions"
626
+ | "Demons"
627
+ | "Travelers";
628
+
629
+ export type TCharacterBasicKind =
630
+ | "Townsfolk"
631
+ | "Outsiders"
632
+ | "Minions"
633
+ | "Demons";
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "string",
4
+ "enum": [
5
+ "Townsfolk",
6
+ "Outsiders",
7
+ "Minions",
8
+ "Demons"
9
+ ],
10
+ "id": "CharacterBasicKind",
11
+ "title": "角色基本类别",
12
+ "description": "角色基本类别定义了游戏中角色的基本分类,通常用于技能选项中需要指定角色类别的情况"
13
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "string",
4
+ "enum": [
5
+ "Townsfolk",
6
+ "Outsiders",
7
+ "Minions",
8
+ "Demons",
9
+ "Travelers"
10
+ ]
11
+ }