@bct-app/game-model 0.1.0 → 0.1.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 (43) hide show
  1. package/README.md +14 -10
  2. package/dist/index.d.ts +1172 -30
  3. package/dist/json-schema/ability-execution-timing.schema.json +8 -0
  4. package/dist/json-schema/ability.schema.json +2268 -0
  5. package/dist/json-schema/alignment-enum.schema.json +8 -0
  6. package/dist/json-schema/base-source.schema.json +64 -0
  7. package/dist/{schemas → json-schema}/character-basic-kind.schema.json +1 -1
  8. package/dist/{schemas → json-schema}/character-kind.schema.json +1 -1
  9. package/dist/json-schema/character.schema.json +123 -0
  10. package/dist/json-schema/chat-message-content.schema.json +65 -0
  11. package/dist/json-schema/chat-message-group.schema.json +37 -0
  12. package/dist/json-schema/chat-message-operation.schema.json +30 -0
  13. package/dist/json-schema/chat-message.schema.json +133 -0
  14. package/dist/json-schema/conversation.schema.json +252 -0
  15. package/dist/{schemas → json-schema}/effect.schema.json +375 -133
  16. package/dist/{schemas → json-schema}/game.schema.json +3 -16
  17. package/dist/json-schema/index.json +36 -0
  18. package/dist/{schemas → json-schema}/input.schema.json +108 -89
  19. package/dist/{schemas → json-schema}/message.schema.json +259 -35
  20. package/dist/json-schema/nomination.schema.json +29 -0
  21. package/dist/json-schema/operation.schema.json +28 -0
  22. package/dist/json-schema/player-display-format.schema.json +13 -0
  23. package/dist/json-schema/player-reminder.schema.json +19 -0
  24. package/dist/json-schema/player.schema.json +104 -0
  25. package/dist/json-schema/populated-character.schema.json +2344 -0
  26. package/dist/json-schema/populated-script.schema.json +2397 -0
  27. package/dist/json-schema/reminder.schema.json +24 -0
  28. package/dist/json-schema/room-create.schema.json +23 -0
  29. package/dist/json-schema/room-defaults.schema.json +72 -0
  30. package/dist/json-schema/room.schema.json +24 -0
  31. package/dist/json-schema/runtime-game.schema.json +162 -0
  32. package/dist/json-schema/script.schema.json +57 -0
  33. package/dist/json-schema/seat-side-enum.schema.json +9 -0
  34. package/dist/json-schema/special-message-kind.schema.json +7 -0
  35. package/dist/json-schema/target.schema.json +305 -0
  36. package/dist/json-schema/timeline.schema.json +87 -0
  37. package/dist/{schemas → json-schema}/view.schema.json +68 -42
  38. package/dist/zod.d.mts +4038 -0
  39. package/dist/zod.d.ts +4038 -0
  40. package/dist/zod.js +1129 -0
  41. package/dist/zod.mjs +1058 -0
  42. package/package.json +30 -15
  43. package/dist/schemas/index.json +0 -9
package/dist/zod.js ADDED
@@ -0,0 +1,1129 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/zod.ts
31
+ var zod_exports = {};
32
+ __export(zod_exports, {
33
+ Ability: () => Ability,
34
+ AbilityExecutionTiming: () => AbilityExecutionTiming,
35
+ AlignmentEnum: () => AlignmentEnum,
36
+ BaseSource: () => BaseSource,
37
+ Character: () => Character,
38
+ CharacterBasicKind: () => CharacterBasicKind,
39
+ CharacterKind: () => CharacterKind,
40
+ ChatMessage: () => Message2,
41
+ ChatMessageContent: () => MessageContent,
42
+ ChatMessageGroup: () => MessageGroup,
43
+ ChatMessageOperation: () => MessageOperation,
44
+ Conversation: () => Conversation,
45
+ Effect: () => Effect,
46
+ Game: () => Game,
47
+ Input: () => Input,
48
+ Message: () => Message,
49
+ Nomination: () => Nomination,
50
+ Operation: () => Operation,
51
+ Player: () => Player,
52
+ PlayerDisplayFormat: () => PlayerDisplayFormat,
53
+ PlayerReminder: () => PlayerReminder,
54
+ PopulatedCharacter: () => PopulatedCharacter,
55
+ PopulatedScript: () => PopulatedScript,
56
+ Reminder: () => Reminder,
57
+ Room: () => Room,
58
+ RoomCreate: () => RoomCreate,
59
+ RoomDefaults: () => RoomDefaults,
60
+ RuntimeGame: () => RuntimeGame,
61
+ Script: () => Script,
62
+ SeatSideEnum: () => SeatSideEnum,
63
+ SpecialMessageKind: () => SpecialMessageKind,
64
+ Target: () => Target,
65
+ Timeline: () => Timeline,
66
+ View: () => View,
67
+ ViewTypes: () => ViewTypes
68
+ });
69
+ module.exports = __toCommonJS(zod_exports);
70
+
71
+ // src/game.ts
72
+ var import_zod2 = require("zod");
73
+
74
+ // src/operation.ts
75
+ var import_zod = require("zod");
76
+ var Operation = import_zod.z.object({
77
+ abilityId: import_zod.z.string().min(1),
78
+ effector: import_zod.z.number(),
79
+ payloads: import_zod.z.array(import_zod.z.any()).default([]),
80
+ visible: import_zod.z.boolean().default(false).optional()
81
+ });
82
+ var Nomination = import_zod.z.object({
83
+ nominator: import_zod.z.number(),
84
+ nominee: import_zod.z.number(),
85
+ voterSeats: import_zod.z.array(import_zod.z.number()).optional().default([]),
86
+ inRack: import_zod.z.boolean().default(false).optional()
87
+ });
88
+
89
+ // src/game.ts
90
+ var CharacterKindCount = import_zod2.z.object({
91
+ kind: import_zod2.z.string(),
92
+ count: import_zod2.z.number().int().nonnegative().default(0)
93
+ });
94
+ var Game = import_zod2.z.object({
95
+ owner: import_zod2.z.string().min(1),
96
+ scriptId: import_zod2.z.string().min(1),
97
+ numberOfPlayer: import_zod2.z.number().int().positive().default(8),
98
+ characterKinds: import_zod2.z.array(CharacterKindCount).default([]),
99
+ characters: import_zod2.z.array(import_zod2.z.string()).default([]),
100
+ seats: import_zod2.z.array(import_zod2.z.string().nullable()).default([]),
101
+ result: import_zod2.z.enum(["goodWin", "evilWin"]),
102
+ createdAt: import_zod2.z.iso.datetime().default(() => (/* @__PURE__ */ new Date()).toISOString()),
103
+ startedAt: import_zod2.z.iso.datetime(),
104
+ endedAt: import_zod2.z.iso.datetime()
105
+ });
106
+ var Seat = import_zod2.z.object({
107
+ userId: import_zod2.z.string(),
108
+ ready: import_zod2.z.boolean().default(false)
109
+ });
110
+ var RuntimeGame = Game.extend({
111
+ status: import_zod2.z.enum(["prepare", "start", "end"]).default("prepare"),
112
+ seats: import_zod2.z.array(Seat.nullable()).default([]),
113
+ result: import_zod2.z.enum(["goodWin", "evilWin", "unexpectEnd"]),
114
+ settings: import_zod2.z.object({
115
+ operations: Operation.array().optional().default([])
116
+ }).optional()
117
+ }).partial({
118
+ result: true,
119
+ startedAt: true,
120
+ endedAt: true
121
+ });
122
+
123
+ // src/alignment.ts
124
+ var import_zod3 = require("zod");
125
+ var AlignmentEnum = import_zod3.z.enum(["GOOD", "EVIL"]);
126
+
127
+ // src/ability/effects/target.ts
128
+ var import_zod5 = require("zod");
129
+
130
+ // src/ability/seat-side.ts
131
+ var import_zod4 = __toESM(require("zod"));
132
+ var SeatSideEnum = import_zod4.default.enum([
133
+ "BOTH_SIDES",
134
+ "LEFT_SIDE",
135
+ "RIGHT_SIDE"
136
+ ]);
137
+
138
+ // src/ability/effects/target.ts
139
+ var PayloadRef = import_zod5.z.object({
140
+ from: import_zod5.z.literal("PAYLOAD"),
141
+ value: import_zod5.z.union([
142
+ import_zod5.z.number().min(0),
143
+ import_zod5.z.array(import_zod5.z.number().min(0))
144
+ ])
145
+ });
146
+ var withPayloadRef = (schema) => import_zod5.z.union([
147
+ schema,
148
+ PayloadRef
149
+ ]);
150
+ var TargetFromPayload = import_zod5.z.object({
151
+ from: import_zod5.z.literal("PAYLOAD"),
152
+ value: import_zod5.z.union([
153
+ import_zod5.z.number().min(0),
154
+ import_zod5.z.array(import_zod5.z.number().min(0))
155
+ ])
156
+ });
157
+ var DynamicAnchorFromEffector = import_zod5.z.object({
158
+ from: import_zod5.z.literal("EFFECTOR")
159
+ });
160
+ var DynamicAnchorFromPayload = import_zod5.z.object({
161
+ from: import_zod5.z.literal("PAYLOAD"),
162
+ value: import_zod5.z.union([
163
+ import_zod5.z.number().min(0),
164
+ import_zod5.z.array(import_zod5.z.number().min(0))
165
+ ])
166
+ });
167
+ var DynamicAnchorFromStatic = import_zod5.z.object({
168
+ from: import_zod5.z.literal("STATIC"),
169
+ value: import_zod5.z.number().min(1)
170
+ });
171
+ var DynamicTargetCondition = import_zod5.z.object({
172
+ field: import_zod5.z.enum([
173
+ "CHARACTER_KIND",
174
+ "IS_DEAD",
175
+ "SEAT"
176
+ ]),
177
+ operator: import_zod5.z.enum([
178
+ "EQ",
179
+ "IN"
180
+ ]).default("EQ"),
181
+ value: withPayloadRef(import_zod5.z.union([
182
+ import_zod5.z.string(),
183
+ import_zod5.z.boolean(),
184
+ import_zod5.z.number().min(1),
185
+ import_zod5.z.array(import_zod5.z.string()),
186
+ import_zod5.z.array(import_zod5.z.number().min(1))
187
+ ]))
188
+ });
189
+ var DynamicTargetSelector = import_zod5.z.object({
190
+ scope: withPayloadRef(SeatSideEnum).default("BOTH_SIDES")
191
+ });
192
+ var TargetFromDynamic = import_zod5.z.object({
193
+ from: import_zod5.z.literal("DYNAMIC"),
194
+ anchor: import_zod5.z.discriminatedUnion("from", [
195
+ DynamicAnchorFromEffector,
196
+ DynamicAnchorFromPayload,
197
+ DynamicAnchorFromStatic
198
+ ]).optional(),
199
+ selector: DynamicTargetSelector.optional(),
200
+ where: import_zod5.z.object({
201
+ mode: import_zod5.z.enum(["ALL", "ANY"]).default("ALL"),
202
+ conditions: import_zod5.z.array(DynamicTargetCondition).default([])
203
+ }).optional(),
204
+ limit: withPayloadRef(import_zod5.z.number().int().positive()).optional()
205
+ });
206
+ var TargetFromEffector = import_zod5.z.object({
207
+ from: import_zod5.z.literal("EFFECTOR")
208
+ });
209
+ var TargetFromCustom = import_zod5.z.object({
210
+ from: import_zod5.z.literal("CUSTOM"),
211
+ value: import_zod5.z.any()
212
+ });
213
+ var Target = import_zod5.z.discriminatedUnion("from", [
214
+ TargetFromPayload,
215
+ TargetFromEffector,
216
+ TargetFromDynamic,
217
+ TargetFromCustom
218
+ ]).meta({
219
+ id: "TargetModel",
220
+ title: "\u76EE\u6807\u6A21\u578B",
221
+ description: "\u8868\u793A\u6280\u80FD\u6548\u679C\u7684\u76EE\u6807\uFF0C\u5305\u542B\u6765\u81EA\u6280\u80FD\u8F7D\u8377\u3001\u6280\u80FD\u65BD\u653E\u8005\u548C\u52A8\u6001\u89C4\u5219\u4E09\u79CD\u6765\u6E90"
222
+ });
223
+
224
+ // src/ability/effects/index.ts
225
+ var import_zod18 = require("zod");
226
+
227
+ // src/ability/effects/ability.ts
228
+ var import_zod7 = require("zod");
229
+
230
+ // src/ability/source.ts
231
+ var import_zod6 = require("zod");
232
+ var SourceFromPayload = import_zod6.z.object({
233
+ from: import_zod6.z.literal("PAYLOAD"),
234
+ value: import_zod6.z.union([
235
+ import_zod6.z.number().min(0).optional().default(0),
236
+ import_zod6.z.array(import_zod6.z.number().min(0)).optional().default([0])
237
+ ])
238
+ });
239
+ var SourceFromEffector = import_zod6.z.object({
240
+ from: import_zod6.z.literal("EFFECTOR")
241
+ });
242
+ var BaseSourceFromConstant = import_zod6.z.object({
243
+ from: import_zod6.z.literal("CONSTANT")
244
+ });
245
+ var GenericSourceFromConstant = BaseSourceFromConstant.extend({
246
+ value: import_zod6.z.any()
247
+ });
248
+ var BaseSource = import_zod6.z.discriminatedUnion("from", [
249
+ SourceFromPayload,
250
+ GenericSourceFromConstant
251
+ ]).meta({
252
+ id: "BaseSource",
253
+ title: "\u57FA\u7840\u6765\u6E90\u6A21\u578B",
254
+ description: "\u57FA\u7840\u6765\u6E90\u6A21\u578B\uFF0C\u5305\u542B\u6765\u81EA\u6280\u80FD\u8F7D\u8377\u548C\u5E38\u91CF\u4E24\u79CD\u6765\u6E90\uFF0C\u5E38\u91CF\u6765\u6E90\u5305\u542B\u4E00\u4E2A\u4EFB\u610F\u503C"
255
+ });
256
+
257
+ // src/ability/effects/ability.ts
258
+ var AbilitySourceFromConstant = BaseSourceFromConstant.extend({
259
+ value: import_zod7.z.string()
260
+ });
261
+ var AbilitySource = import_zod7.z.discriminatedUnion("from", [
262
+ SourceFromPayload,
263
+ AbilitySourceFromConstant
264
+ ]);
265
+ var AbilityChangeEffect = import_zod7.z.object({
266
+ type: import_zod7.z.literal("ABILITY_CHANGE"),
267
+ source: AbilitySource,
268
+ target: Target
269
+ }).meta({
270
+ id: "AbilityChangeEffect",
271
+ title: "\u6280\u80FD\u53D8\u5316\u6548\u679C\u6A21\u578B",
272
+ description: "\u8868\u793A\u6539\u53D8\u76EE\u6807\u6280\u80FD\u7684\u6280\u80FD\u6548\u679C\u6A21\u578B\uFF0C\u5305\u542B\u4E00\u4E2A\u6765\u6E90\u548C\u4E00\u4E2A\u76EE\u6807"
273
+ });
274
+
275
+ // src/ability/effects/alignment.ts
276
+ var import_zod8 = require("zod");
277
+ var AlignmentSourceFromConstant = BaseSourceFromConstant.extend({
278
+ value: AlignmentEnum
279
+ });
280
+ var AlignmentSource = import_zod8.z.discriminatedUnion("from", [
281
+ SourceFromPayload,
282
+ SourceFromEffector,
283
+ AlignmentSourceFromConstant
284
+ ]);
285
+ var AlignmentChangeEffect = import_zod8.z.object({
286
+ type: import_zod8.z.literal("ALIGNMENT_CHANGE"),
287
+ source: AlignmentSource,
288
+ target: Target
289
+ }).meta({
290
+ id: "AlignmentChangeEffect",
291
+ title: "\u9635\u8425\u53D8\u5316\u6548\u679C\u6A21\u578B",
292
+ description: "\u8868\u793A\u6539\u53D8\u76EE\u6807\u9635\u8425\u7684\u6280\u80FD\u6548\u679C\u6A21\u578B\uFF0C\u5305\u542B\u4E00\u4E2A\u6765\u6E90\u548C\u4E00\u4E2A\u76EE\u6807"
293
+ });
294
+
295
+ // src/ability/effects/character.ts
296
+ var import_zod9 = require("zod");
297
+ var CharacterSourceFromConstant = BaseSourceFromConstant.extend({
298
+ value: import_zod9.z.string()
299
+ });
300
+ var CharacterSource = import_zod9.z.discriminatedUnion("from", [
301
+ SourceFromPayload,
302
+ SourceFromEffector,
303
+ CharacterSourceFromConstant
304
+ ]);
305
+ var CharacterChangeEffect = import_zod9.z.object({
306
+ type: import_zod9.z.literal("CHARACTER_CHANGE"),
307
+ source: CharacterSource,
308
+ target: Target
309
+ }).meta({
310
+ id: "CharacterChangeEffect",
311
+ title: "\u89D2\u8272\u53D8\u5316\u6548\u679C\u6A21\u578B",
312
+ description: "\u8868\u793A\u6539\u53D8\u89D2\u8272\u8EAB\u4EFD\u7684\u6280\u80FD\u6548\u679C\u6A21\u578B\uFF0C\u5305\u542B\u4E00\u4E2A\u6765\u6E90\u548C\u4E00\u4E2A\u76EE\u6807"
313
+ });
314
+ var CharacterPerceptionEffect = import_zod9.z.object({
315
+ type: import_zod9.z.literal("PERCEIVED_CHARACTER_CHANGE"),
316
+ source: CharacterSource,
317
+ target: Target,
318
+ followPriority: import_zod9.z.boolean().optional()
319
+ }).meta({
320
+ id: "CharacterPerceptionEffect",
321
+ title: "\u611F\u77E5\u89D2\u8272\u53D8\u5316\u6548\u679C\u6A21\u578B",
322
+ description: "\u8868\u793A\u6539\u53D8\u89D2\u8272\u611F\u77E5\u8EAB\u4EFD\u7684\u6280\u80FD\u6548\u679C\u6A21\u578B\uFF0C\u5305\u542B\u4E00\u4E2A\u6765\u6E90\u3001\u4E00\u4E2A\u76EE\u6807\u548C\u53EF\u9009\u4F18\u5148\u7EA7"
323
+ });
324
+
325
+ // src/ability/effects/character-count.ts
326
+ var import_zod11 = require("zod");
327
+
328
+ // src/ability/character-kind.ts
329
+ var import_zod10 = require("zod");
330
+ var CharacterKind = import_zod10.z.enum(["Townsfolk", "Outsiders", "Minions", "Demons", "Travelers"]);
331
+ var CharacterBasicKind = CharacterKind.exclude(["Travelers"]).meta({
332
+ id: "CharacterBasicKind",
333
+ title: "\u89D2\u8272\u57FA\u672C\u7C7B\u522B",
334
+ description: "\u89D2\u8272\u57FA\u672C\u7C7B\u522B\u5B9A\u4E49\u4E86\u6E38\u620F\u4E2D\u89D2\u8272\u7684\u57FA\u672C\u5206\u7C7B\uFF0C\u901A\u5E38\u7528\u4E8E\u6280\u80FD\u9009\u9879\u4E2D\u9700\u8981\u6307\u5B9A\u89D2\u8272\u7C7B\u522B\u7684\u60C5\u51B5"
335
+ });
336
+ var CharacterKindCount2 = import_zod10.z.object({
337
+ kind: CharacterBasicKind,
338
+ // Character kind ID
339
+ count: import_zod10.z.number().default(0)
340
+ // Number of characters of this kind in the game
341
+ });
342
+ var CharacterKinds = import_zod10.z.array(CharacterKindCount2);
343
+
344
+ // src/ability/effects/character-count.ts
345
+ var CharacterCountSourceFromConstant = BaseSourceFromConstant.extend({
346
+ value: import_zod11.z.object({
347
+ kind: CharacterBasicKind,
348
+ value: import_zod11.z.number()
349
+ })
350
+ });
351
+ var CharacterCountSource = import_zod11.z.discriminatedUnion("from", [
352
+ CharacterCountSourceFromConstant
353
+ ]);
354
+ var CharacterCountEffect = import_zod11.z.object({
355
+ type: import_zod11.z.literal("CHARACTER_COUNT_CHANGE"),
356
+ source: CharacterCountSource.optional(),
357
+ kind: CharacterBasicKind.optional(),
358
+ value: import_zod11.z.number().optional()
359
+ }).meta({
360
+ id: "CharacterCountEffect",
361
+ title: "\u89D2\u8272\u6570\u91CF\u53D8\u5316\u6548\u679C\u6A21\u578B",
362
+ description: "\u8868\u793A\u6539\u53D8\u67D0\u7C7B\u89D2\u8272\u6570\u91CF\u7684\u6280\u80FD\u6548\u679C\u6A21\u578B\uFF0C\u5305\u542B\u89D2\u8272\u7C7B\u522B\u548C\u53D8\u5316\u503C"
363
+ });
364
+
365
+ // src/ability/effects/game.ts
366
+ var import_zod12 = require("zod");
367
+ var GameSourceFromConstant = BaseSourceFromConstant.extend({
368
+ value: AlignmentEnum
369
+ });
370
+ var GameSource = import_zod12.z.discriminatedUnion("from", [
371
+ SourceFromPayload,
372
+ GameSourceFromConstant
373
+ ]).meta({
374
+ id: "GameSource",
375
+ title: "\u6E38\u620F\u6765\u6E90\u6A21\u578B",
376
+ description: "\u8868\u793A\u83B7\u53D6\u6E38\u620F\u53D8\u66F4\u4FE1\u606F\u7684\u6765\u6E90\u6A21\u578B\uFF0C\u5305\u542B\u6765\u81EA\u6280\u80FD\u8F7D\u8377\u548C\u5E38\u91CF\u4E24\u79CD\u6765\u6E90"
377
+ });
378
+ var GameEffect = import_zod12.z.object({
379
+ type: import_zod12.z.literal("GAME_CHANGE"),
380
+ source: GameSource
381
+ }).meta({
382
+ id: "GameEffect",
383
+ title: "\u6E38\u620F\u53D8\u5316\u6548\u679C\u6A21\u578B",
384
+ description: "\u8868\u793A\u6539\u53D8\u6E38\u620F\u72B6\u6001\u7684\u6280\u80FD\u6548\u679C\u6A21\u578B\uFF0C\u5305\u542B\u4E00\u4E2A\u6765\u6E90"
385
+ });
386
+
387
+ // src/ability/effects/reminder.ts
388
+ var import_zod14 = require("zod");
389
+
390
+ // src/reminder.ts
391
+ var import_zod13 = require("zod");
392
+ var Reminder = import_zod13.z.object({
393
+ mark: import_zod13.z.string().min(1),
394
+ // Reminder identifier
395
+ color: import_zod13.z.string().optional(),
396
+ // Color for display purposes
397
+ description: import_zod13.z.string().optional(),
398
+ // Description of the reminder
399
+ duration: import_zod13.z.number().min(0).optional()
400
+ // Duration in turns, if applicable
401
+ });
402
+ var PlayerReminder = import_zod13.z.object({
403
+ playerSeat: import_zod13.z.number().min(1),
404
+ index: import_zod13.z.number().min(0)
405
+ });
406
+
407
+ // src/ability/effects/reminder.ts
408
+ var ReminderSourceFromConstant = BaseSourceFromConstant.extend({
409
+ value: Reminder
410
+ });
411
+ var ReminderSource = import_zod14.z.discriminatedUnion("from", [
412
+ SourceFromPayload,
413
+ ReminderSourceFromConstant
414
+ ]);
415
+ var ReminderEffect = import_zod14.z.object({
416
+ type: import_zod14.z.literal("REMINDER_ADD"),
417
+ source: ReminderSource,
418
+ target: Target
419
+ }).meta({
420
+ id: "ReminderEffect",
421
+ title: "\u6DFB\u52A0\u6807\u8BB0\u6548\u679C\u6A21\u578B",
422
+ description: "\u8868\u793A\u4E3A\u76EE\u6807\u6DFB\u52A0\u6807\u8BB0\u7684\u6280\u80FD\u6548\u679C\u6A21\u578B\uFF0C\u5305\u542B\u4E00\u4E2A\u6765\u6E90\u548C\u4E00\u4E2A\u76EE\u6807"
423
+ });
424
+
425
+ // src/ability/effects/remove-reminder.ts
426
+ var import_zod15 = require("zod");
427
+ var RemoveReminderSourceFromConstant = BaseSourceFromConstant.extend({
428
+ value: import_zod15.z.number().min(0)
429
+ });
430
+ var RemoveReminderSource = import_zod15.z.discriminatedUnion("from", [
431
+ SourceFromPayload,
432
+ RemoveReminderSourceFromConstant
433
+ ]);
434
+ var RemoveReminderEffect = import_zod15.z.object({
435
+ type: import_zod15.z.literal("REMINDER_REMOVE"),
436
+ source: RemoveReminderSource,
437
+ target: Target
438
+ }).meta({
439
+ id: "RemoveReminderEffect",
440
+ title: "\u79FB\u9664\u6807\u8BB0\u6548\u679C\u6A21\u578B",
441
+ description: "\u8868\u793A\u4ECE\u76EE\u6807\u79FB\u9664\u6807\u8BB0\u7684\u6280\u80FD\u6548\u679C\u6A21\u578B\uFF0C\u5305\u542B\u4E00\u4E2A\u6765\u6E90\u548C\u4E00\u4E2A\u76EE\u6807"
442
+ });
443
+
444
+ // src/ability/effects/seat.ts
445
+ var import_zod16 = require("zod");
446
+ var SeatSourceFromConstant = BaseSourceFromConstant.extend({
447
+ value: import_zod16.z.number().min(1)
448
+ });
449
+ var SeatSource = import_zod16.z.discriminatedUnion("from", [
450
+ SourceFromPayload,
451
+ SourceFromEffector,
452
+ SeatSourceFromConstant
453
+ ]);
454
+ var SeatEffect = import_zod16.z.object({
455
+ type: import_zod16.z.literal("SEAT_CHANGE"),
456
+ source: SeatSource,
457
+ target: Target
458
+ }).meta({
459
+ id: "SeatEffect",
460
+ title: "\u5EA7\u4F4D\u53D8\u5316\u6548\u679C\u6A21\u578B",
461
+ description: "\u8868\u793A\u6539\u53D8\u76EE\u6807\u5EA7\u4F4D\u7684\u6280\u80FD\u6548\u679C\u6A21\u578B\uFF0C\u5305\u542B\u4E00\u4E2A\u6765\u6E90\u548C\u4E00\u4E2A\u76EE\u6807"
462
+ });
463
+
464
+ // src/ability/effects/status.ts
465
+ var import_zod17 = require("zod");
466
+ var StatusSourceFromConstant = BaseSourceFromConstant.extend({
467
+ value: import_zod17.z.enum(["DEAD", "ALIVE"])
468
+ });
469
+ var StatusSource = import_zod17.z.discriminatedUnion("from", [
470
+ SourceFromPayload,
471
+ StatusSourceFromConstant
472
+ ]);
473
+ var StatusEffect = import_zod17.z.object({
474
+ type: import_zod17.z.literal("STATUS_CHANGE"),
475
+ source: StatusSource,
476
+ target: Target
477
+ }).meta({
478
+ id: "StatusEffect",
479
+ title: "\u72B6\u6001\u53D8\u5316\u6548\u679C\u6A21\u578B",
480
+ description: "\u8868\u793A\u6539\u53D8\u76EE\u6807\u72B6\u6001\u7684\u6280\u80FD\u6548\u679C\u6A21\u578B\uFF0C\u5305\u542B\u4E00\u4E2A\u6765\u6E90\u548C\u4E00\u4E2A\u76EE\u6807"
481
+ });
482
+
483
+ // src/ability/effects/index.ts
484
+ var Effect = import_zod18.z.discriminatedUnion("type", [
485
+ AbilityChangeEffect,
486
+ AlignmentChangeEffect,
487
+ CharacterCountEffect,
488
+ CharacterChangeEffect,
489
+ CharacterPerceptionEffect,
490
+ StatusEffect,
491
+ SeatEffect,
492
+ GameEffect,
493
+ ReminderEffect,
494
+ RemoveReminderEffect
495
+ ]);
496
+
497
+ // src/ability/inputs/index.ts
498
+ var import_zod30 = require("zod");
499
+
500
+ // src/ability/inputs/alignment.ts
501
+ var import_zod20 = require("zod");
502
+
503
+ // src/ability/inputs/basic.ts
504
+ var import_zod19 = require("zod");
505
+ var BasicInput = import_zod19.z.object({
506
+ title: import_zod19.z.string().optional(),
507
+ footer: import_zod19.z.string().optional(),
508
+ readonly: import_zod19.z.boolean().optional()
509
+ });
510
+ var Range = import_zod19.z.union(
511
+ [
512
+ import_zod19.z.tuple([import_zod19.z.number(), import_zod19.z.number()]).refine(([min, max]) => min <= max, {
513
+ message: "\u7B2C\u4E00\u4E2A\u6570\u5B57\u5FC5\u987B\u5C0F\u4E8E\u7B49\u4E8E\u7B2C\u4E8C\u4E2A\u6570\u5B57"
514
+ }),
515
+ import_zod19.z.tuple([import_zod19.z.number()])
516
+ ]
517
+ ).meta({
518
+ id: "Range",
519
+ title: "\u8303\u56F4\u6A21\u578B",
520
+ description: "\u8868\u793A\u4E00\u4E2A\u6570\u503C\u8303\u56F4\uFF0C\u53EF\u4EE5\u662F\u4E00\u4E2A\u56FA\u5B9A\u503C\u6216\u8005\u4E00\u4E2A\u533A\u95F4"
521
+ });
522
+
523
+ // src/ability/inputs/alignment.ts
524
+ var AlignmentInput = BasicInput.extend({
525
+ type: import_zod20.z.literal("ALIGNMENT")
526
+ }).meta({
527
+ id: "AlignmentInput",
528
+ title: "\u9635\u8425\u9009\u62E9",
529
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u9635\u8425\u7684\u9009\u62E9\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u9635\u8425\u7684\u6280\u80FD\u9009\u9879"
530
+ });
531
+
532
+ // src/ability/inputs/boolean.ts
533
+ var import_zod21 = require("zod");
534
+ var BooleanInput = BasicInput.extend({
535
+ type: import_zod21.z.literal("BOOLEAN"),
536
+ prompt: import_zod21.z.string().optional(),
537
+ style: import_zod21.z.enum(["RADIO", "SWITCH"]).optional().default("SWITCH"),
538
+ defaultValue: import_zod21.z.boolean().optional().default(false),
539
+ texts: import_zod21.z.tuple([import_zod21.z.string(), import_zod21.z.string()]).optional().default(["\u5426", "\u662F"])
540
+ }).meta({
541
+ id: "BooleanInput",
542
+ title: "\u5E03\u5C14\u9009\u62E9",
543
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u5E03\u5C14\u503C\u7684\u9009\u62E9\uFF0C\u901A\u5E38\u7528\u4E8E\u5F00\u5173\u7C7B\u7684\u9009\u9879"
544
+ });
545
+
546
+ // src/ability/inputs/character.ts
547
+ var import_zod22 = require("zod");
548
+ var CharacterInput = BasicInput.extend({
549
+ type: import_zod22.z.literal("CHARACTER"),
550
+ kinds: CharacterBasicKind.array().optional().default(["Townsfolk", "Outsiders", "Minions", "Demons"]),
551
+ filterToken: import_zod22.z.string().optional(),
552
+ range: Range.optional()
553
+ }).meta({
554
+ id: "CharacterInput",
555
+ title: "\u89D2\u8272\u8F93\u5165",
556
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u89D2\u8272\u7684\u8F93\u5165\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u89D2\u8272\u7684\u6280\u80FD\u9009\u9879"
557
+ });
558
+
559
+ // src/ability/inputs/character-kind.ts
560
+ var import_zod23 = require("zod");
561
+ var CharacterKindInput = BasicInput.extend({
562
+ type: import_zod23.z.literal("CHARACTER_KIND")
563
+ }).meta({
564
+ id: "CharacterKindInput",
565
+ title: "\u89D2\u8272\u7C7B\u522B\u8F93\u5165",
566
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u89D2\u8272\u7C7B\u522B\u7684\u8F93\u5165\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u89D2\u8272\u7C7B\u578B\u7684\u6280\u80FD\u9009\u9879"
567
+ });
568
+
569
+ // src/ability/inputs/number.ts
570
+ var import_zod24 = require("zod");
571
+ var NumberInput = BasicInput.extend({
572
+ type: import_zod24.z.literal("NUMBER"),
573
+ range: Range.optional().default([1]),
574
+ style: import_zod24.z.enum(["SELECTION", "INPUT"]).optional().default("SELECTION")
575
+ }).meta({
576
+ id: "NumberInput",
577
+ title: "\u6570\u5B57\u8F93\u5165",
578
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u6570\u5B57\u7684\u8F93\u5165\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u6570\u503C\u7684\u6280\u80FD\u9009\u9879"
579
+ });
580
+
581
+ // src/ability/inputs/player.ts
582
+ var import_zod25 = require("zod");
583
+ var PlayerInput = BasicInput.extend({
584
+ type: import_zod25.z.literal("PLAYER"),
585
+ layout: import_zod25.z.enum(["ROUND", "ROW"]).optional().default("ROUND"),
586
+ kinds: CharacterBasicKind.array().optional().default(["Townsfolk", "Outsiders", "Minions", "Demons"]),
587
+ filterToken: import_zod25.z.string().optional(),
588
+ range: Range.optional()
589
+ }).meta({
590
+ id: "PlayerInput",
591
+ title: "\u73A9\u5BB6\u8F93\u5165",
592
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u73A9\u5BB6\u7684\u8F93\u5165\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u73A9\u5BB6\u7684\u6280\u80FD\u9009\u9879"
593
+ });
594
+
595
+ // src/ability/inputs/reminder.ts
596
+ var import_zod26 = require("zod");
597
+ var ReminderInput = BasicInput.extend({
598
+ type: import_zod26.z.literal("REMINDER")
599
+ }).meta({
600
+ id: "ReminderInput",
601
+ title: "\u63D0\u793A\u8F93\u5165",
602
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u63D0\u793A\u7684\u8F93\u5165\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u7ED9\u73A9\u5BB6\u5C55\u793A\u4FE1\u606F\u7684\u6280\u80FD\u9009\u9879"
603
+ });
604
+ var PlayerReminderInput = BasicInput.extend({
605
+ type: import_zod26.z.literal("PLAYER_REMINDER")
606
+ }).meta({
607
+ id: "PlayerReminderInput",
608
+ title: "\u73A9\u5BB6\u63D0\u793A\u8F93\u5165",
609
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u73A9\u5BB6\u63D0\u793A\u7684\u8F93\u5165\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u7ED9\u7279\u5B9A\u73A9\u5BB6\u5C55\u793A\u4FE1\u606F\u7684\u6280\u80FD\u9009\u9879"
610
+ });
611
+
612
+ // src/ability/inputs/seat-side.ts
613
+ var import_zod27 = require("zod");
614
+ var SeatSideInput = BasicInput.extend({
615
+ type: import_zod27.z.literal("SEAT_SIDE")
616
+ }).meta({
617
+ id: "SeatSideInput",
618
+ title: "\u5EA7\u4F4D\u9009\u62E9",
619
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u5EA7\u4F4D\u7684\u9009\u62E9\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u5EA7\u4F4D\u7684\u6280\u80FD\u9009\u9879"
620
+ });
621
+
622
+ // src/ability/inputs/status.ts
623
+ var import_zod28 = require("zod");
624
+ var StatusInput = BasicInput.extend({
625
+ type: import_zod28.z.literal("STATUS")
626
+ }).meta({
627
+ id: "StatusInput",
628
+ title: "\u72B6\u6001\u8F93\u5165",
629
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u72B6\u6001\u7684\u8F93\u5165\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u72B6\u6001\u7684\u6280\u80FD\u9009\u9879"
630
+ });
631
+
632
+ // src/ability/inputs/text.ts
633
+ var import_zod29 = require("zod");
634
+ var TextInput = BasicInput.extend({
635
+ type: import_zod29.z.literal("TEXT")
636
+ }).meta({
637
+ id: "TextInput",
638
+ title: "\u6587\u672C\u8F93\u5165",
639
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u6587\u672C\u7684\u8F93\u5165\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u6587\u672C\u7684\u6280\u80FD\u9009\u9879"
640
+ });
641
+
642
+ // src/ability/inputs/index.ts
643
+ var Input = import_zod30.z.discriminatedUnion("type", [
644
+ PlayerInput,
645
+ CharacterInput,
646
+ AlignmentInput,
647
+ CharacterKindInput,
648
+ BooleanInput,
649
+ NumberInput,
650
+ TextInput,
651
+ StatusInput,
652
+ ReminderInput,
653
+ PlayerReminderInput,
654
+ SeatSideInput
655
+ ]);
656
+
657
+ // src/ability/views/index.ts
658
+ var import_zod42 = require("zod");
659
+
660
+ // src/ability/views/alignment.ts
661
+ var import_zod32 = require("zod");
662
+
663
+ // src/ability/views/basic.ts
664
+ var import_zod31 = require("zod");
665
+ var BasicView = import_zod31.z.object({
666
+ source: BaseSource
667
+ });
668
+
669
+ // src/ability/views/alignment.ts
670
+ var AlignmentView = BasicView.extend({
671
+ type: import_zod32.z.literal("ALIGNMENT")
672
+ }).meta({
673
+ id: "AlignmentView",
674
+ title: "\u9635\u8425\u9009\u62E9\u89C6\u56FE",
675
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u9635\u8425\u7684\u9009\u62E9\u89C6\u56FE\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u9635\u8425\u7684\u6280\u80FD\u9009\u9879"
676
+ });
677
+
678
+ // src/ability/views/boolean.ts
679
+ var import_zod33 = require("zod");
680
+ var BooleanView = BasicView.extend({
681
+ type: import_zod33.z.literal("BOOLEAN"),
682
+ texts: import_zod33.z.tuple([import_zod33.z.string().default("\u5426"), import_zod33.z.string().default("\u662F")]).optional().default(["\u5426", "\u662F"]),
683
+ style: import_zod33.z.array(import_zod33.z.enum(["ICON", "TEXT"])).optional().default(["ICON"])
684
+ }).meta({
685
+ id: "BooleanView",
686
+ title: "\u5E03\u5C14\u9009\u62E9\u89C6\u56FE",
687
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u5E03\u5C14\u9009\u62E9\u89C6\u56FE\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u9009\u62E9\u662F\u6216\u5426\u7684\u6280\u80FD\u9009\u9879"
688
+ });
689
+
690
+ // src/ability/views/character.ts
691
+ var import_zod34 = require("zod");
692
+ var CharacterView = BasicView.extend({
693
+ type: import_zod34.z.literal("CHARACTER")
694
+ }).meta({
695
+ id: "CharacterView",
696
+ title: "\u89D2\u8272\u9009\u62E9\u89C6\u56FE",
697
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u89D2\u8272\u7684\u9009\u62E9\u89C6\u56FE\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u89D2\u8272\u7684\u6280\u80FD\u9009\u9879"
698
+ });
699
+
700
+ // src/ability/views/character-kind.ts
701
+ var import_zod35 = require("zod");
702
+ var CharacterKindView = BasicView.extend({
703
+ type: import_zod35.z.literal("CHARACTER_KIND")
704
+ }).meta({
705
+ id: "CharacterKindView",
706
+ title: "\u89D2\u8272\u7C7B\u578B\u89C6\u56FE",
707
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u89D2\u8272\u7C7B\u578B\u7684\u9009\u62E9\u89C6\u56FE\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u89D2\u8272\u7C7B\u578B\u7684\u6280\u80FD\u9009\u9879"
708
+ });
709
+
710
+ // src/ability/views/number.ts
711
+ var import_zod36 = require("zod");
712
+ var NumberView = BasicView.extend({
713
+ type: import_zod36.z.literal("NUMBER")
714
+ }).meta({
715
+ id: "NumberView",
716
+ title: "\u6570\u5B57\u9009\u62E9\u89C6\u56FE",
717
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u6570\u5B57\u7684\u9009\u62E9\u89C6\u56FE\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u6570\u5B57\u7684\u6280\u80FD\u9009\u9879"
718
+ });
719
+
720
+ // src/ability/views/player.ts
721
+ var import_zod37 = require("zod");
722
+ var PlayerView = BasicView.extend({
723
+ type: import_zod37.z.literal("PLAYER")
724
+ }).meta({
725
+ id: "PlayerView",
726
+ title: "\u73A9\u5BB6\u9009\u62E9\u89C6\u56FE",
727
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u73A9\u5BB6\u7684\u9009\u62E9\u89C6\u56FE\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u73A9\u5BB6\u7684\u6280\u80FD\u9009\u9879"
728
+ });
729
+
730
+ // src/ability/views/reminder.ts
731
+ var import_zod38 = require("zod");
732
+ var ReminderView = BasicView.extend({
733
+ type: import_zod38.z.literal("REMINDER")
734
+ }).meta({
735
+ id: "ReminderView",
736
+ title: "\u63D0\u9192\u89C6\u56FE",
737
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u63D0\u9192\u7684\u89C6\u56FE\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u663E\u793A\u63D0\u9192\u7684\u6280\u80FD\u9009\u9879"
738
+ });
739
+ var PlayerReminderView = BasicView.extend({
740
+ type: import_zod38.z.literal("PLAYER_REMINDER")
741
+ }).meta({
742
+ id: "PlayerReminderView",
743
+ title: "\u73A9\u5BB6\u63D0\u9192\u89C6\u56FE",
744
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u73A9\u5BB6\u63D0\u9192\u7684\u89C6\u56FE\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u663E\u793A\u73A9\u5BB6\u63D0\u9192\u7684\u6280\u80FD\u9009\u9879"
745
+ });
746
+
747
+ // src/ability/views/seat-side.ts
748
+ var import_zod39 = require("zod");
749
+ var SeatSideView = BasicView.extend({
750
+ type: import_zod39.z.literal("SEAT_SIDE")
751
+ }).meta({
752
+ id: "SeatSideView",
753
+ title: "\u5EA7\u4F4D\u89C6\u56FE",
754
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u5EA7\u4F4D\u7684\u9009\u62E9\u89C6\u56FE\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u5EA7\u4F4D\u7684\u6280\u80FD\u9009\u9879"
755
+ });
756
+
757
+ // src/ability/views/status.ts
758
+ var import_zod40 = require("zod");
759
+ var StatusView = BasicView.extend({
760
+ type: import_zod40.z.literal("STATUS")
761
+ }).meta({
762
+ id: "StatusView",
763
+ title: "\u72B6\u6001\u89C6\u56FE",
764
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u72B6\u6001\u7684\u9009\u62E9\u89C6\u56FE\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u6307\u5B9A\u72B6\u6001\u7684\u6280\u80FD\u9009\u9879"
765
+ });
766
+
767
+ // src/ability/views/text.ts
768
+ var import_zod41 = require("zod");
769
+ var TextView = BasicView.extend({
770
+ type: import_zod41.z.literal("TEXT"),
771
+ color: import_zod41.z.string().optional().default("#000000"),
772
+ fontSize: import_zod41.z.number().optional().default(14)
773
+ }).meta({
774
+ id: "TextView",
775
+ title: "\u6587\u672C\u89C6\u56FE",
776
+ description: "\u63D0\u4F9B\u4E00\u4E2A\u6587\u672C\u7684\u89C6\u56FE\uFF0C\u901A\u5E38\u7528\u4E8E\u9700\u8981\u663E\u793A\u6587\u672C\u7684\u6280\u80FD\u9009\u9879"
777
+ });
778
+
779
+ // src/ability/views/index.ts
780
+ var View = import_zod42.z.discriminatedUnion("type", [
781
+ CharacterView,
782
+ CharacterKindView,
783
+ AlignmentView,
784
+ NumberView,
785
+ PlayerView,
786
+ BooleanView,
787
+ TextView,
788
+ StatusView,
789
+ ReminderView,
790
+ PlayerReminderView,
791
+ SeatSideView
792
+ ]);
793
+ var ViewTypes = View.options.map((option) => option.shape.type.value);
794
+
795
+ // src/ability/message/index.ts
796
+ var import_zod46 = require("zod");
797
+
798
+ // src/ability/message/segment.ts
799
+ var import_zod45 = require("zod");
800
+
801
+ // src/ability/message/payload-type.ts
802
+ var import_zod43 = require("zod");
803
+ var MessagePayloadTypes = [...ViewTypes];
804
+ var MessagePayloadType = import_zod43.z.enum(MessagePayloadTypes);
805
+ var MessageBooleanDisplayStyle = import_zod43.z.enum(["ICON", "TEXT"]);
806
+
807
+ // src/ability/message/player-display-format.ts
808
+ var import_zod44 = require("zod");
809
+ var PlayerDisplayFormat = import_zod44.z.enum([
810
+ "NUMBER_AND_CHARACTER",
811
+ "NUMBER_ONLY",
812
+ "CHARACTER_ONLY",
813
+ "ALIGNMENT_ONLY"
814
+ ]).meta({
815
+ id: "PlayerDisplayFormat",
816
+ title: "\u73A9\u5BB6\u663E\u793A\u683C\u5F0F",
817
+ description: "\u5B9A\u4E49\u4E86\u73A9\u5BB6\u4FE1\u606F\u5728\u6280\u80FD\u6D88\u606F\u4E2D\u7684\u663E\u793A\u683C\u5F0F"
818
+ });
819
+
820
+ // src/ability/message/segment.ts
821
+ var TextSegment = import_zod45.z.object({
822
+ type: import_zod45.z.literal("TEXT"),
823
+ value: import_zod45.z.string()
824
+ });
825
+ var MessageSegmentPayloadValue = import_zod45.z.union([
826
+ import_zod45.z.number().min(0),
827
+ import_zod45.z.array(import_zod45.z.number().min(0))
828
+ ]);
829
+ var PlayerSegmentOptions = import_zod45.z.object({
830
+ format: PlayerDisplayFormat
831
+ }).optional().default({ format: "NUMBER_AND_CHARACTER" });
832
+ var PlayerPayloadSegment = import_zod45.z.object({
833
+ type: import_zod45.z.literal("PAYLOAD"),
834
+ value: MessageSegmentPayloadValue,
835
+ payloadType: import_zod45.z.literal("PLAYER"),
836
+ options: PlayerSegmentOptions
837
+ });
838
+ var MessageBooleanPayloadOptions = import_zod45.z.object({
839
+ texts: import_zod45.z.tuple([import_zod45.z.string(), import_zod45.z.string()]).optional(),
840
+ style: import_zod45.z.array(MessageBooleanDisplayStyle).optional(),
841
+ colors: import_zod45.z.tuple([import_zod45.z.string().optional(), import_zod45.z.string().optional()]).optional()
842
+ }).optional();
843
+ var BooleanPayloadSegment = import_zod45.z.object({
844
+ type: import_zod45.z.literal("PAYLOAD"),
845
+ value: MessageSegmentPayloadValue,
846
+ payloadType: import_zod45.z.literal("BOOLEAN"),
847
+ options: MessageBooleanPayloadOptions
848
+ });
849
+ var OtherNonPlayerPayloadType = import_zod45.z.enum(
850
+ MessagePayloadType.options.filter((type) => type !== "PLAYER" && type !== "BOOLEAN")
851
+ );
852
+ var NonPlayerPayloadSegment = import_zod45.z.object({
853
+ type: import_zod45.z.literal("PAYLOAD"),
854
+ value: MessageSegmentPayloadValue,
855
+ payloadType: OtherNonPlayerPayloadType,
856
+ options: import_zod45.z.object({}).optional().default({})
857
+ });
858
+ var PayloadSegment = import_zod45.z.discriminatedUnion("payloadType", [
859
+ PlayerPayloadSegment,
860
+ BooleanPayloadSegment,
861
+ NonPlayerPayloadSegment
862
+ ]);
863
+ var EffectorSegment = import_zod45.z.object({
864
+ type: import_zod45.z.literal("EFFECTOR"),
865
+ options: PlayerSegmentOptions
866
+ });
867
+ var SpecialMessageKind = import_zod45.z.enum([
868
+ "SPY"
869
+ ]);
870
+ var SpecialSegment = import_zod45.z.object({
871
+ type: import_zod45.z.literal("SPECIAL"),
872
+ kind: SpecialMessageKind
873
+ });
874
+ var MessageTemplateSegment = import_zod45.z.union([
875
+ TextSegment,
876
+ PayloadSegment,
877
+ EffectorSegment,
878
+ SpecialSegment
879
+ ]).meta({
880
+ id: "MessageTemplateSegmentModel",
881
+ title: "\u6D88\u606F\u6A21\u677F\u6BB5\u6A21\u578B",
882
+ description: "\u6D88\u606F\u6A21\u677F\u6BB5\u6A21\u578B\u5B9A\u4E49\u4E86\u6280\u80FD\u6D88\u606F\u4E2D\u6BCF\u4E2A\u6BB5\u7684\u5185\u5BB9\u548C\u7C7B\u578B\uFF0C\u53EF\u4EE5\u662F\u7EAF\u6587\u672C\u3001\u5E26\u6709\u7279\u5B9A\u683C\u5F0F\u7684\u73A9\u5BB6\u4FE1\u606F\u3001\u5176\u4ED6\u7C7B\u578B\u7684\u6570\u503C\u4FE1\u606F\uFF0C\u6216\u8005\u7279\u6B8A\u7684\u9884\u8BBE\u4FE1\u606F"
883
+ });
884
+
885
+ // src/ability/message/index.ts
886
+ var Message = import_zod46.z.object({
887
+ targets: import_zod46.z.array(Target).min(1),
888
+ content: import_zod46.z.array(MessageTemplateSegment).min(1)
889
+ }).meta({
890
+ id: "Message",
891
+ title: "\u6280\u80FD\u6D88\u606F\u6A21\u578B",
892
+ description: "\u6280\u80FD\u6D88\u606F\u6A21\u578B\u5B9A\u4E49\u4E86\u6280\u80FD\u6267\u884C\u8FC7\u7A0B\u4E2D\u9700\u8981\u5C55\u793A\u7684\u4FE1\u606F\u5185\u5BB9\u548C\u76F8\u5173\u7684\u76EE\u6807"
893
+ });
894
+
895
+ // src/player.ts
896
+ var import_zod47 = require("zod");
897
+ var Player = import_zod47.z.object({
898
+ seat: import_zod47.z.number().min(1),
899
+ user: import_zod47.z.object({
900
+ userId: import_zod47.z.string(),
901
+ ready: import_zod47.z.boolean()
902
+ }).optional(),
903
+ characterId: import_zod47.z.string(),
904
+ perceivedCharacter: import_zod47.z.object({
905
+ characterId: import_zod47.z.string(),
906
+ abilities: import_zod47.z.array(import_zod47.z.string()).default([]),
907
+ asCharacter: import_zod47.z.boolean().optional()
908
+ }).optional(),
909
+ abilities: import_zod47.z.array(import_zod47.z.string()).default([]),
910
+ reminders: import_zod47.z.array(Reminder).optional(),
911
+ alignment: AlignmentEnum.optional(),
912
+ isDead: import_zod47.z.boolean().optional(),
913
+ hasUsedDeadVote: import_zod47.z.boolean().optional()
914
+ });
915
+
916
+ // src/timeline.ts
917
+ var import_zod48 = require("zod");
918
+ var Timeline = import_zod48.z.object({
919
+ turn: import_zod48.z.number().min(0).default(0),
920
+ time: import_zod48.z.enum(["day", "night"]),
921
+ operations: import_zod48.z.array(Operation).default([]),
922
+ nominations: import_zod48.z.array(Nomination).default([]).optional()
923
+ });
924
+
925
+ // src/room.ts
926
+ var import_zod49 = require("zod");
927
+ var Room = import_zod49.z.object({
928
+ roomId: import_zod49.z.string(),
929
+ hostId: import_zod49.z.string(),
930
+ createdAt: import_zod49.z.iso.datetime().default(() => (/* @__PURE__ */ new Date()).toISOString())
931
+ // Creation date
932
+ });
933
+ var RoomCreate = Room.partial({
934
+ createdAt: true
935
+ });
936
+
937
+ // src/config.ts
938
+ var import_zod50 = require("zod");
939
+ var characterKindCount = import_zod50.z.object({
940
+ kind: CharacterBasicKind,
941
+ count: import_zod50.z.number().default(0)
942
+ });
943
+ var RoomDefaults = import_zod50.z.object({
944
+ defaultScriptId: import_zod50.z.string().default(""),
945
+ defaultCharacterKinds: import_zod50.z.array(characterKindCount).default([
946
+ { kind: "Townsfolk", count: 7 },
947
+ { kind: "Outsiders", count: 2 },
948
+ { kind: "Minions", count: 2 },
949
+ { kind: "Demons", count: 1 }
950
+ ]),
951
+ defaultNumberOfPlayer: import_zod50.z.number().default(12)
952
+ });
953
+
954
+ // src/message-group.ts
955
+ var import_zod52 = require("zod");
956
+ var MessageGroup = import_zod52.z.object({
957
+ groupId: import_zod52.z.string(),
958
+ name: import_zod52.z.string(),
959
+ userIds: import_zod52.z.array(import_zod52.z.string()).min(2),
960
+ createdAt: import_zod52.z.iso.datetime().default(() => (/* @__PURE__ */ new Date()).toISOString())
961
+ });
962
+
963
+ // src/message.ts
964
+ var import_zod53 = require("zod");
965
+ var MessageOperation = import_zod53.z.object({
966
+ type: import_zod53.z.string().min(1),
967
+ payload: import_zod53.z.record(import_zod53.z.string(), import_zod53.z.any()).default({}),
968
+ meta: import_zod53.z.record(import_zod53.z.string(), import_zod53.z.any()).optional()
969
+ });
970
+ var MessageTextContent = import_zod53.z.object({
971
+ type: import_zod53.z.literal("text"),
972
+ text: import_zod53.z.string()
973
+ });
974
+ var MessageOperationContent = import_zod53.z.object({
975
+ type: import_zod53.z.literal("operation"),
976
+ operation: MessageOperation
977
+ });
978
+ var MessageContent = import_zod53.z.union([
979
+ MessageTextContent,
980
+ MessageOperationContent
981
+ // MessageCustomContent,
982
+ ]);
983
+ var Message2 = import_zod53.z.object({
984
+ id: import_zod53.z.string(),
985
+ roomId: import_zod53.z.string(),
986
+ sender: import_zod53.z.string(),
987
+ target: import_zod53.z.object({
988
+ type: import_zod53.z.enum(["DIRECT", "GROUP"]),
989
+ id: import_zod53.z.string()
990
+ }),
991
+ content: MessageContent,
992
+ createdAt: import_zod53.z.iso.datetime().default(() => (/* @__PURE__ */ new Date()).toISOString()),
993
+ updatedAt: import_zod53.z.iso.datetime().optional(),
994
+ version: import_zod53.z.number().int().min(1).default(1),
995
+ metadata: import_zod53.z.record(import_zod53.z.string(), import_zod53.z.any()).optional()
996
+ });
997
+ var MessageCreate = Message2.omit({
998
+ id: true,
999
+ createdAt: true,
1000
+ updatedAt: true,
1001
+ version: true
1002
+ }).extend({
1003
+ id: import_zod53.z.string().optional()
1004
+ });
1005
+ var BaseConversation = import_zod53.z.object({
1006
+ targetId: import_zod53.z.string(),
1007
+ lastMessage: Message2.optional(),
1008
+ lastMessageTime: import_zod53.z.iso.datetime().optional()
1009
+ });
1010
+ var DirectConversation = BaseConversation.extend({
1011
+ type: import_zod53.z.literal("DIRECT"),
1012
+ role: import_zod53.z.enum(["PLAYER", "STORYTELLER"]),
1013
+ userIds: import_zod53.z.tuple([import_zod53.z.string(), import_zod53.z.string()])
1014
+ });
1015
+ var GroupConversation = BaseConversation.extend({
1016
+ type: import_zod53.z.literal("GROUP"),
1017
+ targetName: import_zod53.z.string(),
1018
+ groupData: MessageGroup
1019
+ });
1020
+ var Conversation = import_zod53.z.discriminatedUnion("type", [
1021
+ DirectConversation,
1022
+ GroupConversation
1023
+ ]);
1024
+
1025
+ // src/script.ts
1026
+ var import_zod56 = require("zod");
1027
+
1028
+ // src/ability/index.ts
1029
+ var import_zod54 = require("zod");
1030
+ var EffectStage = import_zod54.z.enum(["PREPARE", "CHARACTER_SELECTION", "PLAYING"]);
1031
+ var EffectCategory = import_zod54.z.enum(["CHARACTER", "STORYTELLER"]);
1032
+ var AbilityExecutionTiming = import_zod54.z.enum(["NORMAL", "DEFER_TO_END"]);
1033
+ var Ability = import_zod54.z.object({
1034
+ id: import_zod54.z.string(),
1035
+ name: import_zod54.z.string(),
1036
+ description: import_zod54.z.string(),
1037
+ bio: import_zod54.z.string().optional(),
1038
+ stage: EffectStage.optional().default("PLAYING"),
1039
+ category: EffectCategory.optional().default("CHARACTER"),
1040
+ executionTiming: AbilityExecutionTiming.optional().default("NORMAL"),
1041
+ tags: import_zod54.z.array(import_zod54.z.string()).optional().or(import_zod54.z.null()),
1042
+ inputs: import_zod54.z.array(Input).optional().default([]),
1043
+ views: import_zod54.z.array(View).optional().default([]),
1044
+ effects: import_zod54.z.array(Effect).optional().default([]),
1045
+ messages: import_zod54.z.array(Message).optional().default([]),
1046
+ scope: import_zod54.z.enum(["EVERYONE", "STORYTELLER_ONLY"]).optional().default("STORYTELLER_ONLY"),
1047
+ createdAt: import_zod54.z.iso.datetime().default(() => (/* @__PURE__ */ new Date()).toISOString())
1048
+ }).meta({
1049
+ id: "Ability",
1050
+ title: "\u80FD\u529B",
1051
+ description: "\u6E38\u620F\u4E2D\u7684\u80FD\u529B\uFF0C\u5305\u542B\u5176\u6548\u679C\u3001\u8F93\u5165\u3001\u5C55\u793A\u7B49\u4FE1\u606F"
1052
+ });
1053
+
1054
+ // src/character.ts
1055
+ var import_zod55 = require("zod");
1056
+ var Character = import_zod55.z.object({
1057
+ id: import_zod55.z.string(),
1058
+ name: import_zod55.z.string(),
1059
+ key: import_zod55.z.string(),
1060
+ icon: import_zod55.z.string().optional(),
1061
+ kind: CharacterBasicKind.default("Townsfolk"),
1062
+ skill: import_zod55.z.string().optional().or(import_zod55.z.null()),
1063
+ saying: import_zod55.z.string().optional().or(import_zod55.z.null()),
1064
+ tags: import_zod55.z.array(import_zod55.z.string()).optional().or(import_zod55.z.null()),
1065
+ abilities: import_zod55.z.array(import_zod55.z.string()),
1066
+ createdAt: import_zod55.z.iso.datetime().default(() => (/* @__PURE__ */ new Date()).toISOString())
1067
+ }).meta({
1068
+ id: "Character",
1069
+ title: "\u89D2\u8272",
1070
+ description: "\u6E38\u620F\u4E2D\u7684\u89D2\u8272\uFF0C\u5305\u542B\u5176\u57FA\u672C\u4FE1\u606F\u548C\u80FD\u529B\u5217\u8868"
1071
+ });
1072
+ var PopulatedCharacter = Character.extend({
1073
+ abilities: Ability.array().optional().default([])
1074
+ });
1075
+
1076
+ // src/script.ts
1077
+ var Script = import_zod56.z.object({
1078
+ id: import_zod56.z.string(),
1079
+ name: import_zod56.z.string(),
1080
+ cover: import_zod56.z.string(),
1081
+ characters: import_zod56.z.array(import_zod56.z.string()).default([]),
1082
+ orderInFirstNight: import_zod56.z.array(import_zod56.z.string()).default([]),
1083
+ orderInOtherNight: import_zod56.z.array(import_zod56.z.string()).default([]),
1084
+ isEnabled: import_zod56.z.boolean().optional().default(false),
1085
+ createdAt: import_zod56.z.iso.datetime().default(() => (/* @__PURE__ */ new Date()).toISOString())
1086
+ });
1087
+ var PopulatedScript = Script.extend({
1088
+ characters: Character.extend({
1089
+ abilities: Ability.array().optional().default([])
1090
+ }).array().default([])
1091
+ });
1092
+ // Annotate the CommonJS export names for ESM import in node:
1093
+ 0 && (module.exports = {
1094
+ Ability,
1095
+ AbilityExecutionTiming,
1096
+ AlignmentEnum,
1097
+ BaseSource,
1098
+ Character,
1099
+ CharacterBasicKind,
1100
+ CharacterKind,
1101
+ ChatMessage,
1102
+ ChatMessageContent,
1103
+ ChatMessageGroup,
1104
+ ChatMessageOperation,
1105
+ Conversation,
1106
+ Effect,
1107
+ Game,
1108
+ Input,
1109
+ Message,
1110
+ Nomination,
1111
+ Operation,
1112
+ Player,
1113
+ PlayerDisplayFormat,
1114
+ PlayerReminder,
1115
+ PopulatedCharacter,
1116
+ PopulatedScript,
1117
+ Reminder,
1118
+ Room,
1119
+ RoomCreate,
1120
+ RoomDefaults,
1121
+ RuntimeGame,
1122
+ Script,
1123
+ SeatSideEnum,
1124
+ SpecialMessageKind,
1125
+ Target,
1126
+ Timeline,
1127
+ View,
1128
+ ViewTypes
1129
+ });