@ttt-productions/q-core 0.1.51 → 0.1.53
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/dist/constants/business.d.ts +1 -1
- package/dist/constants/business.d.ts.map +1 -1
- package/dist/constants/business.js +1 -1
- package/dist/constants/business.js.map +1 -1
- package/dist/constants/sports.d.ts +1 -1
- package/dist/constants/sports.d.ts.map +1 -1
- package/dist/constants/sports.js +3 -3
- package/dist/constants/sports.js.map +1 -1
- package/dist/constants/text-fields.d.ts +1 -1
- package/dist/constants/text-fields.d.ts.map +1 -1
- package/dist/constants/text-fields.js +2 -2
- package/dist/constants/text-fields.js.map +1 -1
- package/dist/doc-schemas/atoms.d.ts +1 -0
- package/dist/doc-schemas/atoms.d.ts.map +1 -1
- package/dist/doc-schemas/atoms.js +3 -2
- package/dist/doc-schemas/atoms.js.map +1 -1
- package/dist/doc-schemas/game-stat-history.js +2 -2
- package/dist/doc-schemas/game-stat-history.js.map +1 -1
- package/dist/doc-schemas/registry.d.ts +1 -1
- package/dist/doc-schemas/sport-game.d.ts.map +1 -1
- package/dist/doc-schemas/sport-game.js +2 -1
- package/dist/doc-schemas/sport-game.js.map +1 -1
- package/dist/doc-schemas/stats-job.d.ts +1 -1
- package/dist/schemas/admin-notifications.d.ts +1 -4
- package/dist/schemas/admin-notifications.d.ts.map +1 -1
- package/dist/schemas/admin-notifications.js +4 -6
- package/dist/schemas/admin-notifications.js.map +1 -1
- package/dist/schemas/scoring.d.ts +0 -1
- package/dist/schemas/scoring.d.ts.map +1 -1
- package/dist/schemas/scoring.js +1 -1
- package/dist/schemas/scoring.js.map +1 -1
- package/dist/schemas/stats.d.ts +2 -4
- package/dist/schemas/stats.d.ts.map +1 -1
- package/dist/schemas/stats.js +3 -5
- package/dist/schemas/stats.js.map +1 -1
- package/dist/schemas/teams.d.ts +0 -1
- package/dist/schemas/teams.d.ts.map +1 -1
- package/dist/schemas/teams.js +1 -1
- package/dist/schemas/teams.js.map +1 -1
- package/dist/sports/basketball-scoring.d.ts.map +1 -1
- package/dist/sports/basketball-scoring.js +2 -9
- package/dist/sports/basketball-scoring.js.map +1 -1
- package/dist/sports/bulk-entry.d.ts +0 -1
- package/dist/sports/bulk-entry.d.ts.map +1 -1
- package/dist/sports/bulk-entry.js +0 -1
- package/dist/sports/bulk-entry.js.map +1 -1
- package/dist/sports/curling-scoring.d.ts.map +1 -1
- package/dist/sports/curling-scoring.js +2 -9
- package/dist/sports/curling-scoring.js.map +1 -1
- package/dist/sports/football-scoring.d.ts.map +1 -1
- package/dist/sports/football-scoring.js +2 -9
- package/dist/sports/football-scoring.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/schemas/scoring.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { MAX_STAT_EVENTS_PER_WRITE } from '../constants/sports.js';\nimport { isSportStatEventId } from '../ids/stat-event-ids.js';\nimport { GAME_MEMO_INPUT } from '../constants/text-fields.js';\nimport {\n BasketballAssistableShotEventSchema,\n BasketballBulkEditEventSchema,\n BasketballOnePointEventSchema,\n BasketballPlayerTallyEventSchema,\n BasketballTimeoutEventSchema,\n CurlingBlankEndEventSchema,\n CurlingRoundScoreEventSchema,\n FootballBulkEditEventSchema,\n FootballScoreEventSchema,\n StatCorrectionEventSchema,\n StatVoidEventSchema,\n} from '../doc-schemas/game-stats.js';\nimport {\n RECORDED_STAT_EVENT_OUTCOME_KEYS,\n STAT_EVENT_RECORDER_FIELD_KEYS,\n STAT_EVENT_REFUSAL_KEYS,\n STAT_EVENT_SNAPSHOT_FIELD_KEYS,\n} from '../types/stats.js';\nimport type { StatEventRecorderField, StatEventSnapshotField } from '../types/stats.js';\nimport {\n countSchema,\n enteredStatCountSchema,\n gameIdSchema,\n gameRosterPlayerIdSchema,\n statEventIdSchema,\n teamIdSchema,\n userIdSchema,\n} from '../doc-schemas/atoms.js';\nimport { textFieldSchema } from './text-field.js';\n\ntype ServerDerivedField = StatEventRecorderField | StatEventSnapshotField;\nconst SERVER_DERIVED_FIELDS: ReadonlySet<string> = new Set([\n ...STAT_EVENT_RECORDER_FIELD_KEYS,\n ...STAT_EVENT_SNAPSHOT_FIELD_KEYS,\n]);\n\nfunction callerShape<Shape extends z.ZodRawShape, Omitted extends keyof Shape = never>(\n shape: Shape,\n omitted: readonly Omitted[] = [],\n): Omit<Shape, ServerDerivedField | Omitted> {\n const dropped = new Set<PropertyKey>([...SERVER_DERIVED_FIELDS, ...omitted]);\n return Object.fromEntries(Object.entries(shape).filter(([field]) => !dropped.has(field))) as Omit<\n Shape,\n ServerDerivedField | Omitted\n >;\n}\n\nexport const sportStatEventIdSchema = statEventIdSchema.refine(\n isSportStatEventId,\n 'Not a stat event id.',\n);\n\nconst sportEventId = { eventId: sportStatEventIdSchema };\n\nexport const StatEventSubmissionSchema = z.discriminatedUnion('type', [\n z.strictObject({ ...callerShape(BasketballOnePointEventSchema.shape), ...sportEventId }),\n z.strictObject({ ...callerShape(BasketballAssistableShotEventSchema.shape), ...sportEventId }),\n z.strictObject({ ...callerShape(BasketballPlayerTallyEventSchema.shape), ...sportEventId }),\n z.strictObject({ ...callerShape(BasketballTimeoutEventSchema.shape), ...sportEventId }),\n z.strictObject({\n ...callerShape(BasketballBulkEditEventSchema.shape, ['value', 'previousValue']),\n ...sportEventId,\n target: enteredStatCountSchema,\n }),\n z.strictObject({ ...callerShape(CurlingRoundScoreEventSchema.shape), ...sportEventId }),\n z.strictObject({ ...callerShape(CurlingBlankEndEventSchema.shape), ...sportEventId }),\n z.strictObject({ ...callerShape(FootballScoreEventSchema.shape), ...sportEventId }),\n z.strictObject({\n ...callerShape(FootballBulkEditEventSchema.shape, ['value', 'previousValue']),\n ...sportEventId,\n target: enteredStatCountSchema,\n }),\n z.strictObject({\n ...callerShape(StatVoidEventSchema.shape, ['eventId']),\n targetEventId: sportStatEventIdSchema,\n }),\n z.strictObject(callerShape(StatCorrectionEventSchema.shape)),\n]);\nexport type StatEventSubmission = z.infer<typeof StatEventSubmissionSchema>;\n\nexport const CreateGameStatEventInputSchema = z\n .object({\n gameId: gameIdSchema,\n events: z.array(StatEventSubmissionSchema).min(1).max(MAX_STAT_EVENTS_PER_WRITE),\n })\n .strict();\nexport type CreateGameStatEventInput = z.infer<typeof CreateGameStatEventInputSchema>;\n\nexport const RecordedStatEventSchema = z\n .object({\n eventId: statEventIdSchema,\n outcome: z.enum(RECORDED_STAT_EVENT_OUTCOME_KEYS),\n sequence: countSchema,\n })\n .strict();\nexport type RecordedStatEvent = z.infer<typeof RecordedStatEventSchema>;\n\nexport const CreateGameStatEventResultSchema = z\n .object({\n gameId: gameIdSchema,\n events: z.array(RecordedStatEventSchema),\n })\n .strict();\nexport type CreateGameStatEventResult = z.infer<typeof CreateGameStatEventResultSchema>;\n\nexport const StatEventRefusalDetailsSchema = z\n .object({\n refusal: z.enum(STAT_EVENT_REFUSAL_KEYS),\n eventId: statEventIdSchema,\n })\n .strict();\nexport type StatEventRefusalDetails = z.infer<typeof StatEventRefusalDetailsSchema>;\n\nexport const UpdateSportGameAbsentPlayersInputSchema = z\n .object({\n gameId: gameIdSchema,\n gameRosterPlayerId: gameRosterPlayerIdSchema,\n absent: z.boolean(),\n })\n .strict();\nexport type UpdateSportGameAbsentPlayersInput = z.infer<\n typeof UpdateSportGameAbsentPlayersInputSchema\n>;\n\nexport const UpdateSportGameAbsentPlayersResultSchema = z\n .object({\n gameId: gameIdSchema,\n gameRosterPlayerId: gameRosterPlayerIdSchema,\n absent: z.boolean(),\n changed: z.boolean(),\n })\n .strict();\nexport type UpdateSportGameAbsentPlayersResult = z.infer<\n typeof UpdateSportGameAbsentPlayersResultSchema\n>;\n\nexport const gameMemoSchema = textFieldSchema(GAME_MEMO_INPUT);\n\nexport const UpdateSportGameMemoInputSchema = z\n .object({\n gameId: gameIdSchema,\n userId: userIdSchema,\n memo: gameMemoSchema,\n })\n .strict();\nexport type UpdateSportGameMemoInput = z.infer<typeof UpdateSportGameMemoInputSchema>;\n\nexport const UpdateSportGameMemoResultSchema = z\n .object({\n gameId: gameIdSchema,\n userId: userIdSchema,\n memo: z.string(),\n changed: z.boolean(),\n })\n .strict();\nexport type UpdateSportGameMemoResult = z.infer<typeof UpdateSportGameMemoResultSchema>;\n\nexport const UpdateSportGameJumpBallInputSchema = z\n .object({\n gameId: gameIdSchema,\n teamId: teamIdSchema,\n })\n .strict();\nexport type UpdateSportGameJumpBallInput = z.infer<typeof UpdateSportGameJumpBallInputSchema>;\n\nexport const UpdateSportGameJumpBallResultSchema = z\n .object({\n gameId: gameIdSchema,\n teamId: teamIdSchema,\n changed: z.boolean(),\n })\n .strict();\nexport type UpdateSportGameJumpBallResult = z.infer<typeof UpdateSportGameJumpBallResultSchema>;\n"]}
|
|
1
|
+
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/schemas/scoring.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { MAX_STAT_EVENTS_PER_WRITE } from '../constants/sports.js';\nimport { isSportStatEventId } from '../ids/stat-event-ids.js';\nimport { GAME_MEMO_INPUT } from '../constants/text-fields.js';\nimport {\n BasketballAssistableShotEventSchema,\n BasketballBulkEditEventSchema,\n BasketballOnePointEventSchema,\n BasketballPlayerTallyEventSchema,\n BasketballTimeoutEventSchema,\n CurlingBlankEndEventSchema,\n CurlingRoundScoreEventSchema,\n FootballBulkEditEventSchema,\n FootballScoreEventSchema,\n StatCorrectionEventSchema,\n StatVoidEventSchema,\n} from '../doc-schemas/game-stats.js';\nimport {\n RECORDED_STAT_EVENT_OUTCOME_KEYS,\n STAT_EVENT_RECORDER_FIELD_KEYS,\n STAT_EVENT_REFUSAL_KEYS,\n STAT_EVENT_SNAPSHOT_FIELD_KEYS,\n} from '../types/stats.js';\nimport type { StatEventRecorderField, StatEventSnapshotField } from '../types/stats.js';\nimport {\n countSchema,\n enteredStatCountSchema,\n gameIdSchema,\n gameRosterPlayerIdSchema,\n statEventIdSchema,\n teamIdSchema,\n userIdSchema,\n} from '../doc-schemas/atoms.js';\nimport { textFieldSchema } from './text-field.js';\n\ntype ServerDerivedField = StatEventRecorderField | StatEventSnapshotField;\nconst SERVER_DERIVED_FIELDS: ReadonlySet<string> = new Set([\n ...STAT_EVENT_RECORDER_FIELD_KEYS,\n ...STAT_EVENT_SNAPSHOT_FIELD_KEYS,\n]);\n\nfunction callerShape<Shape extends z.ZodRawShape, Omitted extends keyof Shape = never>(\n shape: Shape,\n omitted: readonly Omitted[] = [],\n): Omit<Shape, ServerDerivedField | Omitted> {\n const dropped = new Set<PropertyKey>([...SERVER_DERIVED_FIELDS, ...omitted]);\n return Object.fromEntries(Object.entries(shape).filter(([field]) => !dropped.has(field))) as Omit<\n Shape,\n ServerDerivedField | Omitted\n >;\n}\n\nconst sportStatEventIdSchema = statEventIdSchema.refine(isSportStatEventId, 'Not a stat event id.');\n\nconst sportEventId = { eventId: sportStatEventIdSchema };\n\nexport const StatEventSubmissionSchema = z.discriminatedUnion('type', [\n z.strictObject({ ...callerShape(BasketballOnePointEventSchema.shape), ...sportEventId }),\n z.strictObject({ ...callerShape(BasketballAssistableShotEventSchema.shape), ...sportEventId }),\n z.strictObject({ ...callerShape(BasketballPlayerTallyEventSchema.shape), ...sportEventId }),\n z.strictObject({ ...callerShape(BasketballTimeoutEventSchema.shape), ...sportEventId }),\n z.strictObject({\n ...callerShape(BasketballBulkEditEventSchema.shape, ['value', 'previousValue']),\n ...sportEventId,\n target: enteredStatCountSchema,\n }),\n z.strictObject({ ...callerShape(CurlingRoundScoreEventSchema.shape), ...sportEventId }),\n z.strictObject({ ...callerShape(CurlingBlankEndEventSchema.shape), ...sportEventId }),\n z.strictObject({ ...callerShape(FootballScoreEventSchema.shape), ...sportEventId }),\n z.strictObject({\n ...callerShape(FootballBulkEditEventSchema.shape, ['value', 'previousValue']),\n ...sportEventId,\n target: enteredStatCountSchema,\n }),\n z.strictObject({\n ...callerShape(StatVoidEventSchema.shape, ['eventId']),\n targetEventId: sportStatEventIdSchema,\n }),\n z.strictObject(callerShape(StatCorrectionEventSchema.shape)),\n]);\nexport type StatEventSubmission = z.infer<typeof StatEventSubmissionSchema>;\n\nexport const CreateGameStatEventInputSchema = z\n .object({\n gameId: gameIdSchema,\n events: z.array(StatEventSubmissionSchema).min(1).max(MAX_STAT_EVENTS_PER_WRITE),\n })\n .strict();\nexport type CreateGameStatEventInput = z.infer<typeof CreateGameStatEventInputSchema>;\n\nexport const RecordedStatEventSchema = z\n .object({\n eventId: statEventIdSchema,\n outcome: z.enum(RECORDED_STAT_EVENT_OUTCOME_KEYS),\n sequence: countSchema,\n })\n .strict();\nexport type RecordedStatEvent = z.infer<typeof RecordedStatEventSchema>;\n\nexport const CreateGameStatEventResultSchema = z\n .object({\n gameId: gameIdSchema,\n events: z.array(RecordedStatEventSchema),\n })\n .strict();\nexport type CreateGameStatEventResult = z.infer<typeof CreateGameStatEventResultSchema>;\n\nexport const StatEventRefusalDetailsSchema = z\n .object({\n refusal: z.enum(STAT_EVENT_REFUSAL_KEYS),\n eventId: statEventIdSchema,\n })\n .strict();\nexport type StatEventRefusalDetails = z.infer<typeof StatEventRefusalDetailsSchema>;\n\nexport const UpdateSportGameAbsentPlayersInputSchema = z\n .object({\n gameId: gameIdSchema,\n gameRosterPlayerId: gameRosterPlayerIdSchema,\n absent: z.boolean(),\n })\n .strict();\nexport type UpdateSportGameAbsentPlayersInput = z.infer<\n typeof UpdateSportGameAbsentPlayersInputSchema\n>;\n\nexport const UpdateSportGameAbsentPlayersResultSchema = z\n .object({\n gameId: gameIdSchema,\n gameRosterPlayerId: gameRosterPlayerIdSchema,\n absent: z.boolean(),\n changed: z.boolean(),\n })\n .strict();\nexport type UpdateSportGameAbsentPlayersResult = z.infer<\n typeof UpdateSportGameAbsentPlayersResultSchema\n>;\n\nexport const gameMemoSchema = textFieldSchema(GAME_MEMO_INPUT);\n\nexport const UpdateSportGameMemoInputSchema = z\n .object({\n gameId: gameIdSchema,\n userId: userIdSchema,\n memo: gameMemoSchema,\n })\n .strict();\nexport type UpdateSportGameMemoInput = z.infer<typeof UpdateSportGameMemoInputSchema>;\n\nexport const UpdateSportGameMemoResultSchema = z\n .object({\n gameId: gameIdSchema,\n userId: userIdSchema,\n memo: z.string(),\n changed: z.boolean(),\n })\n .strict();\nexport type UpdateSportGameMemoResult = z.infer<typeof UpdateSportGameMemoResultSchema>;\n\nexport const UpdateSportGameJumpBallInputSchema = z\n .object({\n gameId: gameIdSchema,\n teamId: teamIdSchema,\n })\n .strict();\nexport type UpdateSportGameJumpBallInput = z.infer<typeof UpdateSportGameJumpBallInputSchema>;\n\nexport const UpdateSportGameJumpBallResultSchema = z\n .object({\n gameId: gameIdSchema,\n teamId: teamIdSchema,\n changed: z.boolean(),\n })\n .strict();\nexport type UpdateSportGameJumpBallResult = z.infer<typeof UpdateSportGameJumpBallResultSchema>;\n"]}
|
package/dist/schemas/stats.d.ts
CHANGED
|
@@ -68,8 +68,6 @@ export declare const StatsRebuildResultSchema: z.ZodObject<{
|
|
|
68
68
|
changesTruncated: z.ZodBoolean;
|
|
69
69
|
}, z.core.$strict>;
|
|
70
70
|
export type StatsRebuildResult = z.infer<typeof StatsRebuildResultSchema>;
|
|
71
|
-
export declare const statsJobRequestIdSchema: z.ZodUUID;
|
|
72
|
-
export declare const statsJobIdSchema: z.ZodString;
|
|
73
71
|
export declare const AdminCreateStatsJobInputSchema: z.ZodObject<{
|
|
74
72
|
requestId: z.ZodUUID;
|
|
75
73
|
}, z.core.$strict>;
|
|
@@ -97,8 +95,8 @@ export declare const StatsJobProgressSchema: z.ZodObject<{
|
|
|
97
95
|
failed: "failed";
|
|
98
96
|
}>;
|
|
99
97
|
stage: z.ZodEnum<{
|
|
100
|
-
hallOfFame: "hallOfFame";
|
|
101
98
|
games: "games";
|
|
99
|
+
hallOfFame: "hallOfFame";
|
|
102
100
|
leagues: "leagues";
|
|
103
101
|
people: "people";
|
|
104
102
|
}>;
|
|
@@ -121,8 +119,8 @@ export declare const AdminGetStatsJobResultSchema: z.ZodObject<{
|
|
|
121
119
|
failed: "failed";
|
|
122
120
|
}>;
|
|
123
121
|
stage: z.ZodEnum<{
|
|
124
|
-
hallOfFame: "hallOfFame";
|
|
125
122
|
games: "games";
|
|
123
|
+
hallOfFame: "hallOfFame";
|
|
126
124
|
leagues: "leagues";
|
|
127
125
|
people: "people";
|
|
128
126
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/schemas/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/schemas/stats.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas/stats.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { CURLING_ROUND_COUNT, MAX_CURLING_ROUND_POINTS } from '../constants/sports.js';
|
|
3
3
|
import { parseStatsJobId } from '../ids/stats-ids.js';
|
|
4
|
-
import { countSchema, enteredStatCountSchema, epochMsSchema, gameIdSchema, gameRosterPlayerIdSchema, leagueIdSchema, sportKeySchema, statsOperationIdSchema, statsValidationReportIdSchema, teamIdSchema, userIdSchema, } from '../doc-schemas/atoms.js';
|
|
4
|
+
import { countSchema, documentIdSegmentSchema, enteredStatCountSchema, epochMsSchema, gameIdSchema, gameRosterPlayerIdSchema, leagueIdSchema, sportKeySchema, statsOperationIdSchema, statsValidationReportIdSchema, teamIdSchema, userIdSchema, } from '../doc-schemas/atoms.js';
|
|
5
5
|
import { StatsDestinationChangeSchema } from '../doc-schemas/stats-changes.js';
|
|
6
6
|
import { StatsValidationReportSchema, StatsValidationScopeSchema, StatsValidationSummarySchema, } from '../doc-schemas/system.js';
|
|
7
7
|
import { HISTORICAL_STAT_KEYS, HistoricalStatsSchema, } from '../doc-schemas/user-profile.js';
|
|
@@ -58,10 +58,8 @@ export const StatsRebuildResultSchema = z
|
|
|
58
58
|
changesTruncated: z.boolean(),
|
|
59
59
|
})
|
|
60
60
|
.strict();
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
.string()
|
|
64
|
-
.refine((id) => parseStatsJobId(id) !== null, 'Not a stats job id.');
|
|
61
|
+
const statsJobRequestIdSchema = z.uuid();
|
|
62
|
+
const statsJobIdSchema = documentIdSegmentSchema.refine((id) => parseStatsJobId(id) !== null, 'Not a stats job id.');
|
|
65
63
|
export const AdminCreateStatsJobInputSchema = z
|
|
66
64
|
.object({ requestId: statsJobRequestIdSchema })
|
|
67
65
|
.strict();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/schemas/stats.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { CURLING_ROUND_COUNT, MAX_CURLING_ROUND_POINTS } from '../constants/sports.js';\nimport { parseStatsJobId } from '../ids/stats-ids.js';\nimport {\n countSchema,\n enteredStatCountSchema,\n epochMsSchema,\n gameIdSchema,\n gameRosterPlayerIdSchema,\n leagueIdSchema,\n sportKeySchema,\n statsOperationIdSchema,\n statsValidationReportIdSchema,\n teamIdSchema,\n userIdSchema,\n} from '../doc-schemas/atoms.js';\nimport { StatsDestinationChangeSchema } from '../doc-schemas/stats-changes.js';\nimport {\n StatsValidationReportSchema,\n StatsValidationScopeSchema,\n StatsValidationSummarySchema,\n} from '../doc-schemas/system.js';\nimport {\n HISTORICAL_STAT_KEYS,\n HistoricalStatsSchema,\n type HistoricalStats,\n} from '../doc-schemas/user-profile.js';\nimport {\n GAME_FINALIZE_OUTCOME_KEYS,\n GAME_REOPEN_OUTCOME_KEYS,\n GAME_STATS_REPAIR_OUTCOME_KEYS,\n STATS_JOB_KIND_KEYS,\n STATS_JOB_STAGE_KEYS,\n STATS_JOB_STATE_KEYS,\n UNROSTERED_STAT_LINE_RESOLUTION_OUTCOME_KEYS,\n} from '../types/stats.js';\n\nexport const UpdateSportGameFinalizeInputSchema = z.object({ gameId: gameIdSchema }).strict();\nexport type UpdateSportGameFinalizeInput = z.infer<typeof UpdateSportGameFinalizeInputSchema>;\n\nexport const UpdateSportGameFinalizeResultSchema = z\n .object({\n gameId: gameIdSchema,\n leagueId: leagueIdSchema,\n outcome: z.enum(GAME_FINALIZE_OUTCOME_KEYS),\n nonScoringRosterPlayerIds: z.array(gameRosterPlayerIdSchema),\n })\n .strict();\nexport type UpdateSportGameFinalizeResult = z.infer<typeof UpdateSportGameFinalizeResultSchema>;\n\nexport const AdminUpdateSportGameReopenInputSchema = z.object({ gameId: gameIdSchema }).strict();\nexport type AdminUpdateSportGameReopenInput = z.infer<typeof AdminUpdateSportGameReopenInputSchema>;\n\nexport const AdminUpdateSportGameReopenResultSchema = z\n .object({\n gameId: gameIdSchema,\n leagueId: leagueIdSchema,\n outcome: z.enum(GAME_REOPEN_OUTCOME_KEYS),\n })\n .strict();\nexport type AdminUpdateSportGameReopenResult = z.infer<\n typeof AdminUpdateSportGameReopenResultSchema\n>;\n\nexport const AdminCreateGameRosterPlayerInputSchema = z\n .object({\n gameId: gameIdSchema,\n userId: userIdSchema,\n teamId: teamIdSchema,\n dryRun: z.boolean().optional(),\n })\n .strict();\nexport type AdminCreateGameRosterPlayerInput = z.infer<\n typeof AdminCreateGameRosterPlayerInputSchema\n>;\n\nexport const AdminCreateGameRosterPlayerResultSchema = z\n .object({\n gameId: gameIdSchema,\n userId: userIdSchema,\n teamId: teamIdSchema,\n outcome: z.enum(UNROSTERED_STAT_LINE_RESOLUTION_OUTCOME_KEYS),\n gameConverts: z.boolean(),\n })\n .strict();\nexport type AdminCreateGameRosterPlayerResult = z.infer<\n typeof AdminCreateGameRosterPlayerResultSchema\n>;\n\nconst statsRepairFields = {\n operationId: statsOperationIdSchema,\n dryRun: z.boolean(),\n};\n\nexport const AdminUpdateSportLeagueStatsRecalculateInputSchema = z\n .object({ leagueId: leagueIdSchema, ...statsRepairFields })\n .strict();\nexport type AdminUpdateSportLeagueStatsRecalculateInput = z.infer<\n typeof AdminUpdateSportLeagueStatsRecalculateInputSchema\n>;\n\nexport const AdminUpdateUserProfileStatsRecalculateInputSchema = z\n .object({ userId: userIdSchema, ...statsRepairFields })\n .strict();\nexport type AdminUpdateUserProfileStatsRecalculateInput = z.infer<\n typeof AdminUpdateUserProfileStatsRecalculateInputSchema\n>;\n\nexport const StatsRebuildResultSchema = z\n .object({\n operationId: statsOperationIdSchema,\n dryRun: z.boolean(),\n changes: z.array(StatsDestinationChangeSchema),\n changesTruncated: z.boolean(),\n })\n .strict();\nexport type StatsRebuildResult = z.infer<typeof StatsRebuildResultSchema>;\n\nexport const statsJobRequestIdSchema = z.uuid();\n\nexport const statsJobIdSchema = z\n .string()\n .refine((id) => parseStatsJobId(id) !== null, 'Not a stats job id.');\n\nexport const AdminCreateStatsJobInputSchema = z\n .object({ requestId: statsJobRequestIdSchema })\n .strict();\nexport type AdminCreateStatsJobInput = z.infer<typeof AdminCreateStatsJobInputSchema>;\n\nexport const AdminCreateStatsJobResultSchema = z.object({ jobId: statsJobIdSchema }).strict();\nexport type AdminCreateStatsJobResult = z.infer<typeof AdminCreateStatsJobResultSchema>;\n\nexport const AdminGetStatsJobInputSchema = z.object({ kind: z.enum(STATS_JOB_KIND_KEYS) }).strict();\nexport type AdminGetStatsJobInput = z.infer<typeof AdminGetStatsJobInputSchema>;\n\nexport const StatsJobProgressSchema = z\n .object({\n jobId: statsJobIdSchema,\n kind: z.enum(STATS_JOB_KIND_KEYS),\n state: z.enum(STATS_JOB_STATE_KEYS),\n stage: z.enum(STATS_JOB_STAGE_KEYS),\n stageDone: countSchema,\n changed: countSchema,\n deadLettered: z.boolean(),\n completedAt: epochMsSchema.nullable(),\n })\n .strict();\nexport type StatsJobProgress = z.infer<typeof StatsJobProgressSchema>;\n\nexport const AdminGetStatsJobResultSchema = z\n .object({ job: StatsJobProgressSchema.nullable() })\n .strict();\nexport type AdminGetStatsJobResult = z.infer<typeof AdminGetStatsJobResultSchema>;\n\nexport const AdminUpdateSportGameStatsRecalculateInputSchema = z\n .object({ gameId: gameIdSchema, ...statsRepairFields })\n .strict();\nexport type AdminUpdateSportGameStatsRecalculateInput = z.infer<\n typeof AdminUpdateSportGameStatsRecalculateInputSchema\n>;\n\nconst roundSlotValueSchema = z.number().int().min(0).max(MAX_CURLING_ROUND_POINTS).nullable();\n\n// Two team lines of a game, each holding its sport's fixed round slots.\nconst MAX_ROUND_SLOT_CHANGES = 2 * CURLING_ROUND_COUNT;\n\nconst replacedEntryListSchema = z\n .object({ stored: z.array(gameRosterPlayerIdSchema), rebuilt: z.array(gameRosterPlayerIdSchema) })\n .strict();\n\nexport const GameRepairChangesSchema = z\n .object({\n lines: z.array(\n z\n .object({\n lineKey: z.string().min(1),\n field: z.string().min(1),\n stored: z.number(),\n rebuilt: z.number(),\n })\n .strict(),\n ),\n scores: z.array(\n z.object({ teamId: teamIdSchema, stored: z.number(), rebuilt: z.number() }).strict(),\n ),\n // Present when a round slot changed: each changed slot of a line, a null slot unplayed.\n roundSlots: z\n .array(\n z\n .object({\n lineKey: z.string().min(1),\n slotIndex: z\n .number()\n .int()\n .min(0)\n .max(CURLING_ROUND_COUNT - 1),\n stored: roundSlotValueSchema,\n rebuilt: roundSlotValueSchema,\n })\n .strict(),\n )\n .min(1)\n .max(MAX_ROUND_SLOT_CHANGES)\n .optional(),\n absentRosterPlayerIds: replacedEntryListSchema.optional(),\n nonScoringRosterPlayerIds: replacedEntryListSchema.optional(),\n statEventSequence: z.object({ stored: countSchema, rebuilt: countSchema }).strict().optional(),\n recordRewritten: z.literal(true).optional(),\n })\n .strict();\nexport type GameRepairChanges = z.infer<typeof GameRepairChangesSchema>;\n\nexport const GameStatsRepairResultSchema = z\n .object({\n gameId: gameIdSchema,\n leagueId: leagueIdSchema,\n operationId: statsOperationIdSchema,\n dryRun: z.boolean(),\n outcome: z.enum(GAME_STATS_REPAIR_OUTCOME_KEYS),\n gameChanged: z.boolean(),\n gameChanges: GameRepairChangesSchema,\n destinationChanges: z.array(StatsDestinationChangeSchema),\n })\n .strict();\nexport type GameStatsRepairResult = z.infer<typeof GameStatsRepairResultSchema>;\n\nconst EnteredHistoricalStatsSchema = z\n .object(\n Object.fromEntries(HISTORICAL_STAT_KEYS.map((key) => [key, enteredStatCountSchema])) as Record<\n keyof HistoricalStats,\n typeof enteredStatCountSchema\n >,\n )\n .strict();\n\nexport const AdminUpdateHistoricalStatInputSchema = z\n .object({\n userId: userIdSchema,\n sportKey: sportKeySchema,\n stats: EnteredHistoricalStatsSchema,\n operationId: statsOperationIdSchema,\n dryRun: z.boolean(),\n })\n .strict();\nexport type AdminUpdateHistoricalStatInput = z.infer<typeof AdminUpdateHistoricalStatInputSchema>;\n\nexport const AdminUpdateHistoricalStatResultSchema = z\n .object({\n userId: userIdSchema,\n sportKey: sportKeySchema,\n operationId: statsOperationIdSchema,\n dryRun: z.boolean(),\n outcome: z.enum(GAME_STATS_REPAIR_OUTCOME_KEYS),\n baselineBefore: HistoricalStatsSchema.nullable(),\n changes: z.array(StatsDestinationChangeSchema),\n })\n .strict();\nexport type AdminUpdateHistoricalStatResult = z.infer<typeof AdminUpdateHistoricalStatResultSchema>;\n\nexport const AdminCreateStatsValidationReportInputSchema = z\n .object({\n scope: StatsValidationScopeSchema.strict(),\n requestId: statsJobRequestIdSchema.optional(),\n })\n .strict()\n .refine(\n (input) =>\n (input.requestId !== undefined) ===\n (input.scope.gameId === undefined && input.scope.leagueId === undefined),\n { message: 'A check of everything, and only that, carries a request id.', path: ['requestId'] },\n );\nexport type AdminCreateStatsValidationReportInput = z.infer<\n typeof AdminCreateStatsValidationReportInputSchema\n>;\n\nexport const AdminCreateStatsValidationReportResultSchema = z\n .object({\n reportId: statsValidationReportIdSchema,\n jobId: statsJobIdSchema.optional(),\n complete: z.boolean(),\n summary: StatsValidationSummarySchema,\n discrepancyCounts: StatsValidationReportSchema.shape.discrepancyCounts,\n })\n .strict();\nexport type AdminCreateStatsValidationReportResult = z.infer<\n typeof AdminCreateStatsValidationReportResultSchema\n>;\n\nexport const AdminDeleteStatsValidationReportInputSchema = z\n .object({ reportId: statsValidationReportIdSchema })\n .strict();\nexport type AdminDeleteStatsValidationReportInput = z.infer<\n typeof AdminDeleteStatsValidationReportInputSchema\n>;\n\nexport const AdminDeleteStatsValidationReportResultSchema = z\n .object({ reportId: statsValidationReportIdSchema })\n .strict();\nexport type AdminDeleteStatsValidationReportResult = z.infer<\n typeof AdminDeleteStatsValidationReportResultSchema\n>;\n"]}
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/schemas/stats.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { CURLING_ROUND_COUNT, MAX_CURLING_ROUND_POINTS } from '../constants/sports.js';\nimport { parseStatsJobId } from '../ids/stats-ids.js';\nimport {\n countSchema,\n documentIdSegmentSchema,\n enteredStatCountSchema,\n epochMsSchema,\n gameIdSchema,\n gameRosterPlayerIdSchema,\n leagueIdSchema,\n sportKeySchema,\n statsOperationIdSchema,\n statsValidationReportIdSchema,\n teamIdSchema,\n userIdSchema,\n} from '../doc-schemas/atoms.js';\nimport { StatsDestinationChangeSchema } from '../doc-schemas/stats-changes.js';\nimport {\n StatsValidationReportSchema,\n StatsValidationScopeSchema,\n StatsValidationSummarySchema,\n} from '../doc-schemas/system.js';\nimport {\n HISTORICAL_STAT_KEYS,\n HistoricalStatsSchema,\n type HistoricalStats,\n} from '../doc-schemas/user-profile.js';\nimport {\n GAME_FINALIZE_OUTCOME_KEYS,\n GAME_REOPEN_OUTCOME_KEYS,\n GAME_STATS_REPAIR_OUTCOME_KEYS,\n STATS_JOB_KIND_KEYS,\n STATS_JOB_STAGE_KEYS,\n STATS_JOB_STATE_KEYS,\n UNROSTERED_STAT_LINE_RESOLUTION_OUTCOME_KEYS,\n} from '../types/stats.js';\n\nexport const UpdateSportGameFinalizeInputSchema = z.object({ gameId: gameIdSchema }).strict();\nexport type UpdateSportGameFinalizeInput = z.infer<typeof UpdateSportGameFinalizeInputSchema>;\n\nexport const UpdateSportGameFinalizeResultSchema = z\n .object({\n gameId: gameIdSchema,\n leagueId: leagueIdSchema,\n outcome: z.enum(GAME_FINALIZE_OUTCOME_KEYS),\n nonScoringRosterPlayerIds: z.array(gameRosterPlayerIdSchema),\n })\n .strict();\nexport type UpdateSportGameFinalizeResult = z.infer<typeof UpdateSportGameFinalizeResultSchema>;\n\nexport const AdminUpdateSportGameReopenInputSchema = z.object({ gameId: gameIdSchema }).strict();\nexport type AdminUpdateSportGameReopenInput = z.infer<typeof AdminUpdateSportGameReopenInputSchema>;\n\nexport const AdminUpdateSportGameReopenResultSchema = z\n .object({\n gameId: gameIdSchema,\n leagueId: leagueIdSchema,\n outcome: z.enum(GAME_REOPEN_OUTCOME_KEYS),\n })\n .strict();\nexport type AdminUpdateSportGameReopenResult = z.infer<\n typeof AdminUpdateSportGameReopenResultSchema\n>;\n\nexport const AdminCreateGameRosterPlayerInputSchema = z\n .object({\n gameId: gameIdSchema,\n userId: userIdSchema,\n teamId: teamIdSchema,\n dryRun: z.boolean().optional(),\n })\n .strict();\nexport type AdminCreateGameRosterPlayerInput = z.infer<\n typeof AdminCreateGameRosterPlayerInputSchema\n>;\n\nexport const AdminCreateGameRosterPlayerResultSchema = z\n .object({\n gameId: gameIdSchema,\n userId: userIdSchema,\n teamId: teamIdSchema,\n outcome: z.enum(UNROSTERED_STAT_LINE_RESOLUTION_OUTCOME_KEYS),\n gameConverts: z.boolean(),\n })\n .strict();\nexport type AdminCreateGameRosterPlayerResult = z.infer<\n typeof AdminCreateGameRosterPlayerResultSchema\n>;\n\nconst statsRepairFields = {\n operationId: statsOperationIdSchema,\n dryRun: z.boolean(),\n};\n\nexport const AdminUpdateSportLeagueStatsRecalculateInputSchema = z\n .object({ leagueId: leagueIdSchema, ...statsRepairFields })\n .strict();\nexport type AdminUpdateSportLeagueStatsRecalculateInput = z.infer<\n typeof AdminUpdateSportLeagueStatsRecalculateInputSchema\n>;\n\nexport const AdminUpdateUserProfileStatsRecalculateInputSchema = z\n .object({ userId: userIdSchema, ...statsRepairFields })\n .strict();\nexport type AdminUpdateUserProfileStatsRecalculateInput = z.infer<\n typeof AdminUpdateUserProfileStatsRecalculateInputSchema\n>;\n\nexport const StatsRebuildResultSchema = z\n .object({\n operationId: statsOperationIdSchema,\n dryRun: z.boolean(),\n changes: z.array(StatsDestinationChangeSchema),\n changesTruncated: z.boolean(),\n })\n .strict();\nexport type StatsRebuildResult = z.infer<typeof StatsRebuildResultSchema>;\n\nconst statsJobRequestIdSchema = z.uuid();\n\nconst statsJobIdSchema = documentIdSegmentSchema.refine(\n (id) => parseStatsJobId(id) !== null,\n 'Not a stats job id.',\n);\n\nexport const AdminCreateStatsJobInputSchema = z\n .object({ requestId: statsJobRequestIdSchema })\n .strict();\nexport type AdminCreateStatsJobInput = z.infer<typeof AdminCreateStatsJobInputSchema>;\n\nexport const AdminCreateStatsJobResultSchema = z.object({ jobId: statsJobIdSchema }).strict();\nexport type AdminCreateStatsJobResult = z.infer<typeof AdminCreateStatsJobResultSchema>;\n\nexport const AdminGetStatsJobInputSchema = z.object({ kind: z.enum(STATS_JOB_KIND_KEYS) }).strict();\nexport type AdminGetStatsJobInput = z.infer<typeof AdminGetStatsJobInputSchema>;\n\nexport const StatsJobProgressSchema = z\n .object({\n jobId: statsJobIdSchema,\n kind: z.enum(STATS_JOB_KIND_KEYS),\n state: z.enum(STATS_JOB_STATE_KEYS),\n stage: z.enum(STATS_JOB_STAGE_KEYS),\n stageDone: countSchema,\n changed: countSchema,\n deadLettered: z.boolean(),\n completedAt: epochMsSchema.nullable(),\n })\n .strict();\nexport type StatsJobProgress = z.infer<typeof StatsJobProgressSchema>;\n\nexport const AdminGetStatsJobResultSchema = z\n .object({ job: StatsJobProgressSchema.nullable() })\n .strict();\nexport type AdminGetStatsJobResult = z.infer<typeof AdminGetStatsJobResultSchema>;\n\nexport const AdminUpdateSportGameStatsRecalculateInputSchema = z\n .object({ gameId: gameIdSchema, ...statsRepairFields })\n .strict();\nexport type AdminUpdateSportGameStatsRecalculateInput = z.infer<\n typeof AdminUpdateSportGameStatsRecalculateInputSchema\n>;\n\nconst roundSlotValueSchema = z.number().int().min(0).max(MAX_CURLING_ROUND_POINTS).nullable();\n\n// Two team lines of a game, each holding its sport's fixed round slots.\nconst MAX_ROUND_SLOT_CHANGES = 2 * CURLING_ROUND_COUNT;\n\nconst replacedEntryListSchema = z\n .object({ stored: z.array(gameRosterPlayerIdSchema), rebuilt: z.array(gameRosterPlayerIdSchema) })\n .strict();\n\nexport const GameRepairChangesSchema = z\n .object({\n lines: z.array(\n z\n .object({\n lineKey: z.string().min(1),\n field: z.string().min(1),\n stored: z.number(),\n rebuilt: z.number(),\n })\n .strict(),\n ),\n scores: z.array(\n z.object({ teamId: teamIdSchema, stored: z.number(), rebuilt: z.number() }).strict(),\n ),\n // Present when a round slot changed: each changed slot of a line, a null slot unplayed.\n roundSlots: z\n .array(\n z\n .object({\n lineKey: z.string().min(1),\n slotIndex: z\n .number()\n .int()\n .min(0)\n .max(CURLING_ROUND_COUNT - 1),\n stored: roundSlotValueSchema,\n rebuilt: roundSlotValueSchema,\n })\n .strict(),\n )\n .min(1)\n .max(MAX_ROUND_SLOT_CHANGES)\n .optional(),\n absentRosterPlayerIds: replacedEntryListSchema.optional(),\n nonScoringRosterPlayerIds: replacedEntryListSchema.optional(),\n statEventSequence: z.object({ stored: countSchema, rebuilt: countSchema }).strict().optional(),\n recordRewritten: z.literal(true).optional(),\n })\n .strict();\nexport type GameRepairChanges = z.infer<typeof GameRepairChangesSchema>;\n\nexport const GameStatsRepairResultSchema = z\n .object({\n gameId: gameIdSchema,\n leagueId: leagueIdSchema,\n operationId: statsOperationIdSchema,\n dryRun: z.boolean(),\n outcome: z.enum(GAME_STATS_REPAIR_OUTCOME_KEYS),\n gameChanged: z.boolean(),\n gameChanges: GameRepairChangesSchema,\n destinationChanges: z.array(StatsDestinationChangeSchema),\n })\n .strict();\nexport type GameStatsRepairResult = z.infer<typeof GameStatsRepairResultSchema>;\n\nconst EnteredHistoricalStatsSchema = z\n .object(\n Object.fromEntries(HISTORICAL_STAT_KEYS.map((key) => [key, enteredStatCountSchema])) as Record<\n keyof HistoricalStats,\n typeof enteredStatCountSchema\n >,\n )\n .strict();\n\nexport const AdminUpdateHistoricalStatInputSchema = z\n .object({\n userId: userIdSchema,\n sportKey: sportKeySchema,\n stats: EnteredHistoricalStatsSchema,\n operationId: statsOperationIdSchema,\n dryRun: z.boolean(),\n })\n .strict();\nexport type AdminUpdateHistoricalStatInput = z.infer<typeof AdminUpdateHistoricalStatInputSchema>;\n\nexport const AdminUpdateHistoricalStatResultSchema = z\n .object({\n userId: userIdSchema,\n sportKey: sportKeySchema,\n operationId: statsOperationIdSchema,\n dryRun: z.boolean(),\n outcome: z.enum(GAME_STATS_REPAIR_OUTCOME_KEYS),\n baselineBefore: HistoricalStatsSchema.nullable(),\n changes: z.array(StatsDestinationChangeSchema),\n })\n .strict();\nexport type AdminUpdateHistoricalStatResult = z.infer<typeof AdminUpdateHistoricalStatResultSchema>;\n\nexport const AdminCreateStatsValidationReportInputSchema = z\n .object({\n scope: StatsValidationScopeSchema.strict(),\n requestId: statsJobRequestIdSchema.optional(),\n })\n .strict()\n .refine(\n (input) =>\n (input.requestId !== undefined) ===\n (input.scope.gameId === undefined && input.scope.leagueId === undefined),\n { message: 'A check of everything, and only that, carries a request id.', path: ['requestId'] },\n );\nexport type AdminCreateStatsValidationReportInput = z.infer<\n typeof AdminCreateStatsValidationReportInputSchema\n>;\n\nexport const AdminCreateStatsValidationReportResultSchema = z\n .object({\n reportId: statsValidationReportIdSchema,\n jobId: statsJobIdSchema.optional(),\n complete: z.boolean(),\n summary: StatsValidationSummarySchema,\n discrepancyCounts: StatsValidationReportSchema.shape.discrepancyCounts,\n })\n .strict();\nexport type AdminCreateStatsValidationReportResult = z.infer<\n typeof AdminCreateStatsValidationReportResultSchema\n>;\n\nexport const AdminDeleteStatsValidationReportInputSchema = z\n .object({ reportId: statsValidationReportIdSchema })\n .strict();\nexport type AdminDeleteStatsValidationReportInput = z.infer<\n typeof AdminDeleteStatsValidationReportInputSchema\n>;\n\nexport const AdminDeleteStatsValidationReportResultSchema = z\n .object({ reportId: statsValidationReportIdSchema })\n .strict();\nexport type AdminDeleteStatsValidationReportResult = z.infer<\n typeof AdminDeleteStatsValidationReportResultSchema\n>;\n"]}
|
package/dist/schemas/teams.d.ts
CHANGED
|
@@ -345,7 +345,6 @@ export declare const AdminUpdateGhostPlayerLinkClosedLeagueResultSchema: z.ZodOb
|
|
|
345
345
|
publicUserDeleted: z.ZodBoolean;
|
|
346
346
|
}, z.core.$strict>;
|
|
347
347
|
export type AdminUpdateGhostPlayerLinkClosedLeagueResult = LinkGhostPlayerResult;
|
|
348
|
-
export declare const ghostUserIdSchema: z.ZodString;
|
|
349
348
|
export declare const UpdateTeamMembershipRoleInputSchema: z.ZodObject<{
|
|
350
349
|
teamId: z.ZodString;
|
|
351
350
|
userId: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../src/schemas/teams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8BxB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAAwC,CAAC;AACjF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAElC,CAAC;AACZ,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAE1F,eAAO,MAAM,4BAA4B;;;;kBAE9B,CAAC;AACZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,0BAA0B,aAGtC,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;kBAM9B,CAAC;AACZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,sCAAsC;;;;;kBAOxC,CAAC;AACZ,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,sCAAsC,CAC9C,CAAC;AAEF,eAAO,MAAM,6BAA6B;;;;kBAM/B,CAAC;AACZ,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;kBAOtC,CAAC;AACZ,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAElG,eAAO,MAAM,qCAAqC;;;;;;;;;;;;kBAMvC,CAAC;AACZ,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAEpG,eAAO,MAAM,0BAA0B;;;;kBAM5B,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;kBAS7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,iDAAiD;;;;kBAA6B,CAAC;AAC5F,MAAM,MAAM,2CAA2C,GAAG,oBAAoB,CAAC;AAC/E,eAAO,MAAM,kDAAkD;;;;;;;;;;;;kBAA8B,CAAC;AAC9F,MAAM,MAAM,4CAA4C,GAAG,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../src/schemas/teams.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas/teams.js
CHANGED
|
@@ -77,7 +77,7 @@ export const LinkGhostPlayerResultSchema = z
|
|
|
77
77
|
.strict();
|
|
78
78
|
export const AdminUpdateGhostPlayerLinkClosedLeagueInputSchema = LinkGhostPlayerInputSchema;
|
|
79
79
|
export const AdminUpdateGhostPlayerLinkClosedLeagueResultSchema = LinkGhostPlayerResultSchema;
|
|
80
|
-
|
|
80
|
+
const ghostUserIdSchema = userIdSchema.refine(isGhostUserId, 'Not a ghost player.');
|
|
81
81
|
export const UpdateTeamMembershipRoleInputSchema = z
|
|
82
82
|
.object({
|
|
83
83
|
teamId: teamIdSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/schemas/teams.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport {\n leagueJoinWarningActedOnSchema,\n leagueJoinWarningFindingSchema,\n} from '../utils/league-join-warning.js';\nimport {\n countSchema,\n documentIdSegmentSchema,\n gameIdSchema,\n leagueIdSchema,\n teamIconSchema,\n teamIdSchema,\n teamRoleSchema,\n teamTypeSchema,\n userIdSchema,\n} from '../doc-schemas/atoms.js';\nimport { buildGhostUserIdForRequest, isGhostUserId } from '../ids/minted-ids.js';\nimport { isDocumentIdSegment } from '../paths/utils.js';\nimport { GHOST_LINK_MEMBERSHIP_OUTCOME_KEYS, GHOST_REMOVAL_REFUSAL_KEYS } from '../types/stats.js';\nimport { MEMBER_ASSIGNABLE_TEAM_ROLES } from '../types/unions.js';\nimport { contactPhoneSchema, displayNameSchema, teamNameSchema } from './atoms.js';\n\nconst teamCreationFields = {\n leagueId: leagueIdSchema,\n name: teamNameSchema,\n icon: teamIconSchema,\n teamType: teamTypeSchema.optional(),\n contactPhone: contactPhoneSchema,\n};\n\nexport const CreateLeagueTeamInputSchema = z.object(teamCreationFields).strict();\nexport type CreateLeagueTeamInput = z.infer<typeof CreateLeagueTeamInputSchema>;\n\nexport const AdminCreateLeagueTeamInputSchema = z\n .object({ ...teamCreationFields, captainDisplayName: displayNameSchema })\n .strict();\nexport type AdminCreateLeagueTeamInput = z.infer<typeof AdminCreateLeagueTeamInputSchema>;\n\nexport const CreateLeagueTeamResultSchema = z\n .object({ leagueId: leagueIdSchema, teamId: teamIdSchema, captainUserId: userIdSchema })\n .strict();\nexport type CreateLeagueTeamResult = z.infer<typeof CreateLeagueTeamResultSchema>;\n\nexport const ghostCreateRequestIdSchema = documentIdSegmentSchema.refine(\n (requestId) => isDocumentIdSegment(buildGhostUserIdForRequest(requestId)),\n 'Not a ghost add request id.',\n);\n\nexport const CreateGhostPlayerInputSchema = z\n .object({\n teamId: teamIdSchema,\n displayName: displayNameSchema,\n requestId: ghostCreateRequestIdSchema,\n })\n .strict();\nexport type CreateGhostPlayerInput = z.infer<typeof CreateGhostPlayerInputSchema>;\n\nexport const CreateGhostPlayerGameRosterInputSchema = z\n .object({\n gameId: gameIdSchema,\n teamId: teamIdSchema,\n displayName: displayNameSchema,\n requestId: ghostCreateRequestIdSchema,\n })\n .strict();\nexport type CreateGhostPlayerGameRosterInput = z.infer<\n typeof CreateGhostPlayerGameRosterInputSchema\n>;\n\nexport const CreateGhostPlayerResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n teamId: teamIdSchema,\n ghostUserId: userIdSchema,\n })\n .strict();\nexport type CreateGhostPlayerResult = z.infer<typeof CreateGhostPlayerResultSchema>;\n\nexport const GetSportLeagueJoinWarningInputSchema = z\n .object({\n leagueId: leagueIdSchema,\n userId: userIdSchema,\n targetTeamId: teamIdSchema.optional(),\n actedOn: leagueJoinWarningActedOnSchema.optional(),\n })\n .strict();\nexport type GetSportLeagueJoinWarningInput = z.infer<typeof GetSportLeagueJoinWarningInputSchema>;\n\nexport const GetSportLeagueJoinWarningResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n userId: userIdSchema,\n findings: z.array(leagueJoinWarningFindingSchema),\n })\n .strict();\nexport type GetSportLeagueJoinWarningResult = z.infer<typeof GetSportLeagueJoinWarningResultSchema>;\n\nexport const LinkGhostPlayerInputSchema = z\n .object({\n teamId: teamIdSchema,\n ghostUserId: userIdSchema,\n userId: userIdSchema,\n })\n .strict();\nexport type LinkGhostPlayerInput = z.infer<typeof LinkGhostPlayerInputSchema>;\n\nexport const LinkGhostPlayerResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n teamId: teamIdSchema,\n ghostUserId: userIdSchema,\n userId: userIdSchema,\n membershipOutcome: z.enum(GHOST_LINK_MEMBERSHIP_OUTCOME_KEYS),\n publicUserDeleted: z.boolean(),\n })\n .strict();\nexport type LinkGhostPlayerResult = z.infer<typeof LinkGhostPlayerResultSchema>;\n\nexport const AdminUpdateGhostPlayerLinkClosedLeagueInputSchema = LinkGhostPlayerInputSchema;\nexport type AdminUpdateGhostPlayerLinkClosedLeagueInput = LinkGhostPlayerInput;\nexport const AdminUpdateGhostPlayerLinkClosedLeagueResultSchema = LinkGhostPlayerResultSchema;\nexport type AdminUpdateGhostPlayerLinkClosedLeagueResult = LinkGhostPlayerResult;\n\nexport const ghostUserIdSchema = userIdSchema.refine(isGhostUserId, 'Not a ghost player.');\n\nexport const UpdateTeamMembershipRoleInputSchema = z\n .object({\n teamId: teamIdSchema,\n userId: userIdSchema,\n role: z.enum(MEMBER_ASSIGNABLE_TEAM_ROLES),\n })\n .strict();\nexport type UpdateTeamMembershipRoleInput = z.infer<typeof UpdateTeamMembershipRoleInputSchema>;\n\nexport const UpdateTeamMembershipRoleResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n teamId: teamIdSchema,\n userId: userIdSchema,\n role: teamRoleSchema,\n changed: z.boolean(),\n })\n .strict();\nexport type UpdateTeamMembershipRoleResult = z.infer<typeof UpdateTeamMembershipRoleResultSchema>;\n\nexport const DeleteTeamMembershipInputSchema = z\n .object({\n teamId: teamIdSchema,\n userId: userIdSchema.refine(\n (userId) => !isGhostUserId(userId),\n 'A ghost player is removed as a ghost player.',\n ),\n })\n .strict();\nexport type DeleteTeamMembershipInput = z.infer<typeof DeleteTeamMembershipInputSchema>;\n\nexport const DeleteTeamMembershipResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n teamId: teamIdSchema,\n userId: userIdSchema,\n deleted: z.boolean(),\n })\n .strict();\nexport type DeleteTeamMembershipResult = z.infer<typeof DeleteTeamMembershipResultSchema>;\n\nexport const DeleteGhostPlayerInputSchema = z\n .object({ teamId: teamIdSchema, ghostUserId: ghostUserIdSchema })\n .strict();\nexport type DeleteGhostPlayerInput = z.infer<typeof DeleteGhostPlayerInputSchema>;\n\nexport const DeleteGhostPlayerResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n teamId: teamIdSchema,\n ghostUserId: userIdSchema,\n finishedGameEntriesRemoved: countSchema,\n publicUserDeleted: z.boolean(),\n })\n .strict();\nexport type DeleteGhostPlayerResult = z.infer<typeof DeleteGhostPlayerResultSchema>;\n\nexport const GhostRemovalRefusalDetailsSchema = z\n .object({ reason: z.enum(GHOST_REMOVAL_REFUSAL_KEYS) })\n .strict();\nexport type GhostRemovalRefusalDetails = z.infer<typeof GhostRemovalRefusalDetailsSchema>;\n\nexport const AdminUpdateLeagueTeamCaptainInputSchema = z\n .object({ teamId: teamIdSchema, captainUserId: userIdSchema })\n .strict();\nexport type AdminUpdateLeagueTeamCaptainInput = z.infer<\n typeof AdminUpdateLeagueTeamCaptainInputSchema\n>;\n\nexport const AdminUpdateLeagueTeamCaptainResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n teamId: teamIdSchema,\n captainUserId: userIdSchema,\n demotedUserIds: z.array(userIdSchema),\n changed: z.boolean(),\n })\n .strict();\nexport type AdminUpdateLeagueTeamCaptainResult = z.infer<\n typeof AdminUpdateLeagueTeamCaptainResultSchema\n>;\n\nexport const AdminUpdateLeagueTeamNameInputSchema = z\n .object({ teamId: teamIdSchema, name: teamNameSchema })\n .strict();\nexport type AdminUpdateLeagueTeamNameInput = z.infer<typeof AdminUpdateLeagueTeamNameInputSchema>;\n\nexport const AdminUpdateLeagueTeamTypeInputSchema = z\n .object({ teamId: teamIdSchema, teamType: teamTypeSchema })\n .strict();\nexport type AdminUpdateLeagueTeamTypeInput = z.infer<typeof AdminUpdateLeagueTeamTypeInputSchema>;\n\nexport const AdminUpdateLeagueTeamResultSchema = z\n .object({ leagueId: leagueIdSchema, teamId: teamIdSchema, changed: z.boolean() })\n .strict();\nexport type AdminUpdateLeagueTeamResult = z.infer<typeof AdminUpdateLeagueTeamResultSchema>;\n\nexport const AdminUpdateLeagueTeamContactInputSchema = z\n .object({ teamId: teamIdSchema, contactPhone: contactPhoneSchema })\n .strict();\nexport type AdminUpdateLeagueTeamContactInput = z.infer<\n typeof AdminUpdateLeagueTeamContactInputSchema\n>;\n\nexport const AdminUpdateLeagueTeamContactResultSchema = AdminUpdateLeagueTeamResultSchema;\nexport type AdminUpdateLeagueTeamContactResult = AdminUpdateLeagueTeamResult;\n\nexport const AdminDeleteLeagueTeamInputSchema = z.object({ teamId: teamIdSchema }).strict();\nexport type AdminDeleteLeagueTeamInput = z.infer<typeof AdminDeleteLeagueTeamInputSchema>;\n\nexport const AdminDeleteLeagueTeamResultSchema = z.object({ teamId: teamIdSchema }).strict();\nexport type AdminDeleteLeagueTeamResult = z.infer<typeof AdminDeleteLeagueTeamResultSchema>;\n\nexport const LEAGUE_TEAM_DELETE_REFUSAL_KEYS = ['teamHasPlayed'] as const;\nexport type LeagueTeamDeleteRefusal = (typeof LEAGUE_TEAM_DELETE_REFUSAL_KEYS)[number];\nexport const LeagueTeamDeleteRefusalDetailsSchema = z\n .object({ reason: z.enum(LEAGUE_TEAM_DELETE_REFUSAL_KEYS) })\n .strict();\nexport type LeagueTeamDeleteRefusalDetails = z.infer<typeof LeagueTeamDeleteRefusalDetailsSchema>;\n"]}
|
|
1
|
+
{"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/schemas/teams.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport {\n leagueJoinWarningActedOnSchema,\n leagueJoinWarningFindingSchema,\n} from '../utils/league-join-warning.js';\nimport {\n countSchema,\n documentIdSegmentSchema,\n gameIdSchema,\n leagueIdSchema,\n teamIconSchema,\n teamIdSchema,\n teamRoleSchema,\n teamTypeSchema,\n userIdSchema,\n} from '../doc-schemas/atoms.js';\nimport { buildGhostUserIdForRequest, isGhostUserId } from '../ids/minted-ids.js';\nimport { isDocumentIdSegment } from '../paths/utils.js';\nimport { GHOST_LINK_MEMBERSHIP_OUTCOME_KEYS, GHOST_REMOVAL_REFUSAL_KEYS } from '../types/stats.js';\nimport { MEMBER_ASSIGNABLE_TEAM_ROLES } from '../types/unions.js';\nimport { contactPhoneSchema, displayNameSchema, teamNameSchema } from './atoms.js';\n\nconst teamCreationFields = {\n leagueId: leagueIdSchema,\n name: teamNameSchema,\n icon: teamIconSchema,\n teamType: teamTypeSchema.optional(),\n contactPhone: contactPhoneSchema,\n};\n\nexport const CreateLeagueTeamInputSchema = z.object(teamCreationFields).strict();\nexport type CreateLeagueTeamInput = z.infer<typeof CreateLeagueTeamInputSchema>;\n\nexport const AdminCreateLeagueTeamInputSchema = z\n .object({ ...teamCreationFields, captainDisplayName: displayNameSchema })\n .strict();\nexport type AdminCreateLeagueTeamInput = z.infer<typeof AdminCreateLeagueTeamInputSchema>;\n\nexport const CreateLeagueTeamResultSchema = z\n .object({ leagueId: leagueIdSchema, teamId: teamIdSchema, captainUserId: userIdSchema })\n .strict();\nexport type CreateLeagueTeamResult = z.infer<typeof CreateLeagueTeamResultSchema>;\n\nexport const ghostCreateRequestIdSchema = documentIdSegmentSchema.refine(\n (requestId) => isDocumentIdSegment(buildGhostUserIdForRequest(requestId)),\n 'Not a ghost add request id.',\n);\n\nexport const CreateGhostPlayerInputSchema = z\n .object({\n teamId: teamIdSchema,\n displayName: displayNameSchema,\n requestId: ghostCreateRequestIdSchema,\n })\n .strict();\nexport type CreateGhostPlayerInput = z.infer<typeof CreateGhostPlayerInputSchema>;\n\nexport const CreateGhostPlayerGameRosterInputSchema = z\n .object({\n gameId: gameIdSchema,\n teamId: teamIdSchema,\n displayName: displayNameSchema,\n requestId: ghostCreateRequestIdSchema,\n })\n .strict();\nexport type CreateGhostPlayerGameRosterInput = z.infer<\n typeof CreateGhostPlayerGameRosterInputSchema\n>;\n\nexport const CreateGhostPlayerResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n teamId: teamIdSchema,\n ghostUserId: userIdSchema,\n })\n .strict();\nexport type CreateGhostPlayerResult = z.infer<typeof CreateGhostPlayerResultSchema>;\n\nexport const GetSportLeagueJoinWarningInputSchema = z\n .object({\n leagueId: leagueIdSchema,\n userId: userIdSchema,\n targetTeamId: teamIdSchema.optional(),\n actedOn: leagueJoinWarningActedOnSchema.optional(),\n })\n .strict();\nexport type GetSportLeagueJoinWarningInput = z.infer<typeof GetSportLeagueJoinWarningInputSchema>;\n\nexport const GetSportLeagueJoinWarningResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n userId: userIdSchema,\n findings: z.array(leagueJoinWarningFindingSchema),\n })\n .strict();\nexport type GetSportLeagueJoinWarningResult = z.infer<typeof GetSportLeagueJoinWarningResultSchema>;\n\nexport const LinkGhostPlayerInputSchema = z\n .object({\n teamId: teamIdSchema,\n ghostUserId: userIdSchema,\n userId: userIdSchema,\n })\n .strict();\nexport type LinkGhostPlayerInput = z.infer<typeof LinkGhostPlayerInputSchema>;\n\nexport const LinkGhostPlayerResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n teamId: teamIdSchema,\n ghostUserId: userIdSchema,\n userId: userIdSchema,\n membershipOutcome: z.enum(GHOST_LINK_MEMBERSHIP_OUTCOME_KEYS),\n publicUserDeleted: z.boolean(),\n })\n .strict();\nexport type LinkGhostPlayerResult = z.infer<typeof LinkGhostPlayerResultSchema>;\n\nexport const AdminUpdateGhostPlayerLinkClosedLeagueInputSchema = LinkGhostPlayerInputSchema;\nexport type AdminUpdateGhostPlayerLinkClosedLeagueInput = LinkGhostPlayerInput;\nexport const AdminUpdateGhostPlayerLinkClosedLeagueResultSchema = LinkGhostPlayerResultSchema;\nexport type AdminUpdateGhostPlayerLinkClosedLeagueResult = LinkGhostPlayerResult;\n\nconst ghostUserIdSchema = userIdSchema.refine(isGhostUserId, 'Not a ghost player.');\n\nexport const UpdateTeamMembershipRoleInputSchema = z\n .object({\n teamId: teamIdSchema,\n userId: userIdSchema,\n role: z.enum(MEMBER_ASSIGNABLE_TEAM_ROLES),\n })\n .strict();\nexport type UpdateTeamMembershipRoleInput = z.infer<typeof UpdateTeamMembershipRoleInputSchema>;\n\nexport const UpdateTeamMembershipRoleResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n teamId: teamIdSchema,\n userId: userIdSchema,\n role: teamRoleSchema,\n changed: z.boolean(),\n })\n .strict();\nexport type UpdateTeamMembershipRoleResult = z.infer<typeof UpdateTeamMembershipRoleResultSchema>;\n\nexport const DeleteTeamMembershipInputSchema = z\n .object({\n teamId: teamIdSchema,\n userId: userIdSchema.refine(\n (userId) => !isGhostUserId(userId),\n 'A ghost player is removed as a ghost player.',\n ),\n })\n .strict();\nexport type DeleteTeamMembershipInput = z.infer<typeof DeleteTeamMembershipInputSchema>;\n\nexport const DeleteTeamMembershipResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n teamId: teamIdSchema,\n userId: userIdSchema,\n deleted: z.boolean(),\n })\n .strict();\nexport type DeleteTeamMembershipResult = z.infer<typeof DeleteTeamMembershipResultSchema>;\n\nexport const DeleteGhostPlayerInputSchema = z\n .object({ teamId: teamIdSchema, ghostUserId: ghostUserIdSchema })\n .strict();\nexport type DeleteGhostPlayerInput = z.infer<typeof DeleteGhostPlayerInputSchema>;\n\nexport const DeleteGhostPlayerResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n teamId: teamIdSchema,\n ghostUserId: userIdSchema,\n finishedGameEntriesRemoved: countSchema,\n publicUserDeleted: z.boolean(),\n })\n .strict();\nexport type DeleteGhostPlayerResult = z.infer<typeof DeleteGhostPlayerResultSchema>;\n\nexport const GhostRemovalRefusalDetailsSchema = z\n .object({ reason: z.enum(GHOST_REMOVAL_REFUSAL_KEYS) })\n .strict();\nexport type GhostRemovalRefusalDetails = z.infer<typeof GhostRemovalRefusalDetailsSchema>;\n\nexport const AdminUpdateLeagueTeamCaptainInputSchema = z\n .object({ teamId: teamIdSchema, captainUserId: userIdSchema })\n .strict();\nexport type AdminUpdateLeagueTeamCaptainInput = z.infer<\n typeof AdminUpdateLeagueTeamCaptainInputSchema\n>;\n\nexport const AdminUpdateLeagueTeamCaptainResultSchema = z\n .object({\n leagueId: leagueIdSchema,\n teamId: teamIdSchema,\n captainUserId: userIdSchema,\n demotedUserIds: z.array(userIdSchema),\n changed: z.boolean(),\n })\n .strict();\nexport type AdminUpdateLeagueTeamCaptainResult = z.infer<\n typeof AdminUpdateLeagueTeamCaptainResultSchema\n>;\n\nexport const AdminUpdateLeagueTeamNameInputSchema = z\n .object({ teamId: teamIdSchema, name: teamNameSchema })\n .strict();\nexport type AdminUpdateLeagueTeamNameInput = z.infer<typeof AdminUpdateLeagueTeamNameInputSchema>;\n\nexport const AdminUpdateLeagueTeamTypeInputSchema = z\n .object({ teamId: teamIdSchema, teamType: teamTypeSchema })\n .strict();\nexport type AdminUpdateLeagueTeamTypeInput = z.infer<typeof AdminUpdateLeagueTeamTypeInputSchema>;\n\nexport const AdminUpdateLeagueTeamResultSchema = z\n .object({ leagueId: leagueIdSchema, teamId: teamIdSchema, changed: z.boolean() })\n .strict();\nexport type AdminUpdateLeagueTeamResult = z.infer<typeof AdminUpdateLeagueTeamResultSchema>;\n\nexport const AdminUpdateLeagueTeamContactInputSchema = z\n .object({ teamId: teamIdSchema, contactPhone: contactPhoneSchema })\n .strict();\nexport type AdminUpdateLeagueTeamContactInput = z.infer<\n typeof AdminUpdateLeagueTeamContactInputSchema\n>;\n\nexport const AdminUpdateLeagueTeamContactResultSchema = AdminUpdateLeagueTeamResultSchema;\nexport type AdminUpdateLeagueTeamContactResult = AdminUpdateLeagueTeamResult;\n\nexport const AdminDeleteLeagueTeamInputSchema = z.object({ teamId: teamIdSchema }).strict();\nexport type AdminDeleteLeagueTeamInput = z.infer<typeof AdminDeleteLeagueTeamInputSchema>;\n\nexport const AdminDeleteLeagueTeamResultSchema = z.object({ teamId: teamIdSchema }).strict();\nexport type AdminDeleteLeagueTeamResult = z.infer<typeof AdminDeleteLeagueTeamResultSchema>;\n\nexport const LEAGUE_TEAM_DELETE_REFUSAL_KEYS = ['teamHasPlayed'] as const;\nexport type LeagueTeamDeleteRefusal = (typeof LEAGUE_TEAM_DELETE_REFUSAL_KEYS)[number];\nexport const LeagueTeamDeleteRefusalDetailsSchema = z\n .object({ reason: z.enum(LEAGUE_TEAM_DELETE_REFUSAL_KEYS) })\n .strict();\nexport type LeagueTeamDeleteRefusalDetails = z.infer<typeof LeagueTeamDeleteRefusalDetailsSchema>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basketball-scoring.d.ts","sourceRoot":"","sources":["../../src/sports/basketball-scoring.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"basketball-scoring.d.ts","sourceRoot":"","sources":["../../src/sports/basketball-scoring.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACd,MAAM,8BAA8B,CAAC;AAkBtC,OAAO,KAAK,EACV,uBAAuB,EAGxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAGL,KAAK,oBAAoB,EAG1B,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EASL,KAAK,YAAY,EAKlB,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EAEf,KAAK,qBAAqB,EAE3B,MAAM,sBAAsB,CAAC;AAiB9B,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,GACzD,MAAM,CAKR;AAKD,wBAAgB,uBAAuB,IAAI,mBAAmB,CAI7D;AAkND,eAAO,MAAM,kBAAkB,EAAE,YAqBhC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQgC,CAAC;AAErE,eAAO,MAAM,uBAAuB;;;;;;;;;;CAGgD,CAAC;AAErF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,qBAAqB,GAC7B,MAAM,CAiBR;AASD,eAAO,MAAM,qBAAqB,EAAE,UAwBnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,wBAQtC,CAAC;AAEF,eAAO,MAAM,mCAAmC,yDACQ,CAAC;AAsCzD,eAAO,MAAM,qBAAqB,EAAE,oBAsCnC,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { BASKETBALL_FANTASY_POINT_WEIGHTS, BASKETBALL_POINTS_BY_EVENT_TYPE,
|
|
2
|
+
import { BASKETBALL_FANTASY_POINT_WEIGHTS, BASKETBALL_POINTS_BY_EVENT_TYPE, NOT_ON_GAME_ROSTER_MESSAGE, } from '../constants/sports.js';
|
|
3
3
|
import { buildGameRosterPlayerId, parseGameRosterPlayerId } from '../ids/compound-ids.js';
|
|
4
4
|
import { BASKETBALL_ASSISTABLE_SHOT_EVENT_TYPE_KEYS, BASKETBALL_ASSIST_EVENT_TYPE, BASKETBALL_BULK_EDIT_EVENT_TYPE, BASKETBALL_ONE_POINT_EVENT_TYPE, BASKETBALL_PLAYER_STAT_KEYS, BASKETBALL_PLAYER_TALLY_EVENT_TYPE_KEYS, BASKETBALL_REBOUND_EVENT_TYPE, BASKETBALL_SCORE_EVENT_TYPE_KEYS, BASKETBALL_STAT_EVENT_TYPE_KEYS, BASKETBALL_TEAM_STAT_KEYS, BASKETBALL_THREE_POINT_EVENT_TYPE, BASKETBALL_TIMEOUT_EVENT_TYPE, BASKETBALL_TWO_POINT_EVENT_TYPE, } from '../types/sports.js';
|
|
5
5
|
import { PLAYER_STAT_LINE_KIND_KEYS } from '../types/stats.js';
|
|
6
|
-
import {
|
|
6
|
+
import { bulkEntryCountField, } from './bulk-entry.js';
|
|
7
7
|
import { buildGameContribution, decideParticipation, } from './contribution.js';
|
|
8
8
|
import { FINALIZATION_READY, STAT_EVENT_ACCEPTED, isAllZeroLine, isSportStatEventIn, isStatCorrection, refuseStatEvent, } from './scoring.js';
|
|
9
9
|
import { describeStoreEvent, formatSignedValue, } from './scoring-display.js';
|
|
@@ -350,13 +350,6 @@ export const BASKETBALL_BULK_ENTRY = {
|
|
|
350
350
|
message: BASKETBALL_TEAM_SCORE_FLOOR_MESSAGE,
|
|
351
351
|
});
|
|
352
352
|
}
|
|
353
|
-
if (bulkDrafts(values, context).length > MAX_STAT_EVENTS_PER_WRITE) {
|
|
354
|
-
issues.addIssue({
|
|
355
|
-
code: 'custom',
|
|
356
|
-
path: ['lines'],
|
|
357
|
-
message: BULK_ENTRY_TOO_LARGE_MESSAGE,
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
353
|
});
|
|
361
354
|
},
|
|
362
355
|
toEvents: bulkDrafts,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basketball-scoring.js","sourceRoot":"","sources":["../../src/sports/basketball-scoring.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport {\n BASKETBALL_FANTASY_POINT_WEIGHTS,\n BASKETBALL_POINTS_BY_EVENT_TYPE,\n MAX_STAT_EVENTS_PER_WRITE,\n NOT_ON_GAME_ROSTER_MESSAGE,\n} from '../constants/sports.js';\nimport type {\n BasketballPlayerStats,\n BasketballTeamStats,\n GameStatEvent,\n} from '../doc-schemas/game-stats.js';\nimport type { BasketballGameStats, GameStats } from '../doc-schemas/sport-game.js';\nimport { buildGameRosterPlayerId, parseGameRosterPlayerId } from '../ids/compound-ids.js';\nimport {\n BASKETBALL_ASSISTABLE_SHOT_EVENT_TYPE_KEYS,\n BASKETBALL_ASSIST_EVENT_TYPE,\n BASKETBALL_BULK_EDIT_EVENT_TYPE,\n BASKETBALL_ONE_POINT_EVENT_TYPE,\n BASKETBALL_PLAYER_STAT_KEYS,\n BASKETBALL_PLAYER_TALLY_EVENT_TYPE_KEYS,\n BASKETBALL_REBOUND_EVENT_TYPE,\n BASKETBALL_SCORE_EVENT_TYPE_KEYS,\n BASKETBALL_STAT_EVENT_TYPE_KEYS,\n BASKETBALL_TEAM_STAT_KEYS,\n BASKETBALL_THREE_POINT_EVENT_TYPE,\n BASKETBALL_TIMEOUT_EVENT_TYPE,\n BASKETBALL_TWO_POINT_EVENT_TYPE,\n} from '../types/sports.js';\nimport type {\n BasketballPlayerStatKey,\n BasketballStatEventType,\n BasketballTeamStatKey,\n} from '../types/sports.js';\nimport { PLAYER_STAT_LINE_KIND_KEYS } from '../types/stats.js';\nimport type { StatLineKind } from '../types/stats.js';\nimport {\n BULK_ENTRY_TOO_LARGE_MESSAGE,\n bulkEntryCountField,\n type BulkEntryContext,\n type PlayerLinesBulkEntry,\n type PlayerLinesValues,\n type StatEventDraft,\n} from './bulk-entry.js';\nimport {\n buildGameContribution,\n decideParticipation,\n type ContributionSpec,\n} from './contribution.js';\nimport {\n FINALIZATION_READY,\n STAT_EVENT_ACCEPTED,\n isAllZeroLine,\n isSportStatEventIn,\n isStatCorrection,\n refuseStatEvent,\n type CorrectableFields,\n type GameTeamLine,\n type SportScoring,\n type SportStatEventBody,\n type StatCorrectionBody,\n type StatEventBody,\n type StatLineValues,\n} from './scoring.js';\nimport {\n describeStoreEvent,\n formatSignedValue,\n type PlayerEventsScoringPanel,\n type Scoreboard,\n type StatEventLabel,\n type StatEventNameResolver,\n type StatFieldLabels,\n} from './scoring-display.js';\n\ntype BasketballEvent = Extract<SportStatEventBody, { type: BasketballStatEventType }>;\ntype PlayerCounters = Record<BasketballPlayerStatKey, number>;\n\nfunction isBasketballEvent(event: StatEventBody | undefined): event is BasketballEvent {\n return isSportStatEventIn(BASKETBALL_STAT_EVENT_TYPE_KEYS, event);\n}\n\nfunction ownStats(state: GameStats): BasketballGameStats {\n return state as BasketballGameStats;\n}\n\nfunction ownTeamLine(line: GameTeamLine): BasketballTeamStats {\n return line as BasketballTeamStats;\n}\n\nexport function basketballFantasyPoints(\n line: Pick<BasketballPlayerStats, BasketballPlayerStatKey>,\n): number {\n return BASKETBALL_PLAYER_STAT_KEYS.reduce(\n (total, key) => total + line[key] * BASKETBALL_FANTASY_POINT_WEIGHTS[key],\n 0,\n );\n}\n\nconst FANTASY_POINTS_FIELD = 'fantasyPoints' satisfies keyof BasketballPlayerStats;\nconst PLAYER_LINE_KINDS: readonly StatLineKind[] = PLAYER_STAT_LINE_KIND_KEYS;\n\nexport function emptyBasketballTeamLine(): BasketballTeamStats {\n return Object.fromEntries(\n BASKETBALL_TEAM_STAT_KEYS.map((key) => [key, 0]),\n ) as BasketballTeamStats;\n}\n\nfunction emptyPlayerCounters(): PlayerCounters {\n return Object.fromEntries(BASKETBALL_PLAYER_STAT_KEYS.map((key) => [key, 0])) as PlayerCounters;\n}\n\nfunction counterOf(line: StatLineValues, field: string): number {\n const value = line[field] ?? 0;\n if (typeof value !== 'number')\n throw new TypeError(`A basketball line's ${field} is not a number.`);\n return value;\n}\n\nfunction playerCountersOf(line: StatLineValues | undefined): PlayerCounters {\n const counters = emptyPlayerCounters();\n if (line === undefined) return counters;\n for (const key of BASKETBALL_PLAYER_STAT_KEYS) counters[key] = counterOf(line, key);\n return counters;\n}\n\nfunction deriveBasketballLine(kind: StatLineKind, line: StatLineValues): StatLineValues {\n const withoutDerived = Object.fromEntries(\n Object.entries(line).filter(([field]) => field !== FANTASY_POINTS_FIELD),\n );\n if (!PLAYER_LINE_KINDS.includes(kind)) return withoutDerived;\n return {\n ...withoutDerived,\n [FANTASY_POINTS_FIELD]: basketballFantasyPoints(playerCountersOf(line)),\n };\n}\n\nconst CORRECTABLE_FIELDS: CorrectableFields = {\n team: BASKETBALL_TEAM_STAT_KEYS,\n player: BASKETBALL_PLAYER_STAT_KEYS,\n};\n\nconst TALLY_FIELD = {\n [BASKETBALL_REBOUND_EVENT_TYPE]: 'rebounds',\n [BASKETBALL_ASSIST_EVENT_TYPE]: 'assists',\n} as const satisfies Record<\n (typeof BASKETBALL_PLAYER_TALLY_EVENT_TYPE_KEYS)[number],\n BasketballPlayerStatKey\n>;\n\ninterface LineChange<Field extends string> {\n readonly line: string;\n readonly field: Field;\n readonly amount: number;\n}\n\ninterface Effects {\n readonly team: readonly LineChange<BasketballTeamStatKey>[];\n readonly player: readonly LineChange<BasketballPlayerStatKey>[];\n}\n\nfunction assisterOf(event: StatEventBody): string | undefined {\n return 'assistedByUserId' in event && typeof event.assistedByUserId === 'string'\n ? event.assistedByUserId\n : undefined;\n}\n\nfunction namesPlayer(event: StatEventBody): boolean {\n return 'playerUserId' in event && event.playerUserId !== undefined;\n}\n\nfunction effectsOf(event: BasketballEvent): Effects {\n if (event.type === BASKETBALL_TIMEOUT_EVENT_TYPE) {\n return { team: [{ line: event.teamId, field: 'timeouts', amount: 1 }], player: [] };\n }\n const scorer = buildGameRosterPlayerId(event.teamId, event.playerUserId);\n if (event.type === BASKETBALL_BULK_EDIT_EVENT_TYPE) {\n return {\n team:\n event.stat === 'points'\n ? [{ line: event.teamId, field: 'score', amount: event.value }]\n : [],\n player: [{ line: scorer, field: event.stat, amount: event.value }],\n };\n }\n\n const team: LineChange<BasketballTeamStatKey>[] = [];\n const player: LineChange<BasketballPlayerStatKey>[] = [];\n const points = BASKETBALL_POINTS_BY_EVENT_TYPE[event.type];\n if (points > 0) {\n team.push({ line: event.teamId, field: 'score', amount: points });\n player.push({ line: scorer, field: 'points', amount: points });\n }\n if (event.type === BASKETBALL_REBOUND_EVENT_TYPE || event.type === BASKETBALL_ASSIST_EVENT_TYPE) {\n player.push({ line: scorer, field: TALLY_FIELD[event.type], amount: 1 });\n }\n const assister = assisterOf(event);\n if (assister !== undefined) {\n player.push({\n line: buildGameRosterPlayerId(event.teamId, assister),\n field: 'assists',\n amount: 1,\n });\n }\n return { team, player };\n}\n\nfunction correctionEffects(event: StatCorrectionBody): Effects {\n const fields =\n event.playerUserId === undefined ? CORRECTABLE_FIELDS.team : CORRECTABLE_FIELDS.player;\n if (!fields.includes(event.stat)) {\n throw new Error(\n `A basketball correction cannot change ${event.stat} on a ${event.playerUserId === undefined ? 'team' : 'player'} line.`,\n );\n }\n return event.playerUserId === undefined\n ? {\n team: [\n { line: event.teamId, field: event.stat as BasketballTeamStatKey, amount: event.value },\n ],\n player: [],\n }\n : {\n team: [],\n player: [\n {\n line: buildGameRosterPlayerId(event.teamId, event.playerUserId),\n field: event.stat as BasketballPlayerStatKey,\n amount: event.value,\n },\n ],\n };\n}\n\nfunction applyEffects(\n state: BasketballGameStats,\n effects: Effects,\n sign: 1 | -1,\n): BasketballGameStats {\n const teamStats = { ...state.teamStats };\n for (const change of effects.team) {\n const line = { ...(teamStats[change.line] ?? emptyBasketballTeamLine()) };\n line[change.field] += sign * change.amount;\n teamStats[change.line] = line;\n }\n\n const playerStats = { ...state.playerStats };\n for (const change of effects.player) {\n const counters = playerCountersOf(playerStats[change.line]);\n counters[change.field] += sign * change.amount;\n if (isAllZeroLine(counters, BASKETBALL_PLAYER_STAT_KEYS)) delete playerStats[change.line];\n else\n playerStats[change.line] = deriveBasketballLine(\n 'gamePlayer',\n counters,\n ) as BasketballPlayerStats;\n }\n return { teamStats, playerStats };\n}\n\nfunction isAssistableShot(type: BasketballStatEventType): boolean {\n return (BASKETBALL_ASSISTABLE_SHOT_EVENT_TYPE_KEYS as readonly string[]).includes(type);\n}\n\nconst validate: SportScoring['validate'] = (stateIn, event, roster) => {\n if (!isBasketballEvent(event)) return refuseStatEvent('eventTypeNotInSport');\n if (!roster.teamIds.includes(event.teamId)) return refuseStatEvent('teamNotInGame');\n if (event.type === BASKETBALL_TIMEOUT_EVENT_TYPE) {\n return namesPlayer(event) || assisterOf(event) !== undefined\n ? refuseStatEvent('playerNotAllowed')\n : STAT_EVENT_ACCEPTED;\n }\n\n const scorer = buildGameRosterPlayerId(event.teamId, event.playerUserId);\n if (!roster.rosterPlayerIds.has(scorer)) return refuseStatEvent('playerNotRostered');\n\n const assister = assisterOf(event);\n if (assister !== undefined) {\n if (!isAssistableShot(event.type) || assister === event.playerUserId)\n return refuseStatEvent('assistNotAllowed');\n if (!roster.rosterPlayerIds.has(buildGameRosterPlayerId(event.teamId, assister))) {\n return refuseStatEvent('assisterNotRostered');\n }\n }\n\n if (event.type === BASKETBALL_BULK_EDIT_EVENT_TYPE) {\n if (!Number.isInteger(event.value) || event.value === 0)\n return refuseStatEvent('bulkValueInvalid');\n const state = ownStats(stateIn);\n const current = playerCountersOf(state.playerStats[scorer])[event.stat];\n if (current + event.value < 0) return refuseStatEvent('bulkValueInvalid');\n const teamScore = (state.teamStats[event.teamId] ?? emptyBasketballTeamLine()).score;\n if (event.stat === 'points' && teamScore + event.value < 0)\n return refuseStatEvent('bulkValueInvalid');\n }\n return STAT_EVENT_ACCEPTED;\n};\n\nconst BASKETBALL_CONTRIBUTION: ContributionSpec = {\n playerStatKeys: BASKETBALL_PLAYER_STAT_KEYS,\n teamSeasonPlayerSums: ['rebounds', 'assists'] satisfies BasketballPlayerStatKey[],\n zeroLineIsNonScoring: true,\n deriveLine: deriveBasketballLine,\n};\n\nconst resolveBulkEntry: NonNullable<SportScoring['resolveBulkEntry']> = (state, submission) => {\n if (submission.type !== BASKETBALL_BULK_EDIT_EVENT_TYPE) return null;\n const { target, ...event } = submission;\n const scorer = buildGameRosterPlayerId(event.teamId, event.playerUserId);\n const previousValue = playerCountersOf(ownStats(state).playerStats[scorer])[event.stat];\n const value = target - previousValue;\n return value === 0\n ? { kind: 'unchanged' }\n : { kind: 'change', event: { ...event, value, previousValue } };\n};\n\nexport const BASKETBALL_SCORING: SportScoring = {\n validate,\n resolveBulkEntry,\n apply: (state, event) => {\n if (isStatCorrection(event)) return applyEffects(ownStats(state), correctionEffects(event), 1);\n if (!isBasketballEvent(event))\n throw new Error(`The basketball adapter does not apply ${event.type}.`);\n return applyEffects(ownStats(state), effectsOf(event), 1);\n },\n undo: (state, target) => {\n if (!isBasketballEvent(target))\n throw new Error(`The basketball adapter does not undo ${target.type}.`);\n return applyEffects(ownStats(state), effectsOf(target), -1);\n },\n deriveLine: deriveBasketballLine,\n correctableFields: CORRECTABLE_FIELDS,\n nextRound: () => null,\n finalizationReadiness: () => FINALIZATION_READY,\n participation: (state, rosterPlayerIds, absentRosterPlayerIds) =>\n decideParticipation(BASKETBALL_CONTRIBUTION, state, rosterPlayerIds, absentRosterPlayerIds),\n contribution: (game) => buildGameContribution(BASKETBALL_CONTRIBUTION, game),\n};\n\nexport const BASKETBALL_EVENT_LABELS = {\n [BASKETBALL_ONE_POINT_EVENT_TYPE]: { button: '+1 PT', play: '1-point basket' },\n [BASKETBALL_TWO_POINT_EVENT_TYPE]: { button: '+2 PT', play: '2-point basket' },\n [BASKETBALL_THREE_POINT_EVENT_TYPE]: { button: '+3 PT', play: '3-point basket' },\n [BASKETBALL_REBOUND_EVENT_TYPE]: { button: 'Rebound', play: 'Rebound' },\n [BASKETBALL_ASSIST_EVENT_TYPE]: { button: 'Assist', play: 'Assist' },\n [BASKETBALL_TIMEOUT_EVENT_TYPE]: { button: 'Timeout', play: 'Timeout' },\n [BASKETBALL_BULK_EDIT_EVENT_TYPE]: { button: 'Bulk entry', play: 'Bulk entry' },\n} as const satisfies Record<BasketballStatEventType, StatEventLabel>;\n\nexport const BASKETBALL_FIELD_LABELS = {\n team: { score: 'Score', timeouts: 'Timeouts' },\n player: { points: 'Points', rebounds: 'Rebounds', assists: 'Assists' },\n} as const satisfies StatFieldLabels<BasketballTeamStatKey, BasketballPlayerStatKey>;\n\nexport function describeBasketballEvent(\n event: GameStatEvent,\n resolve: StatEventNameResolver,\n): string {\n const storeEvent = describeStoreEvent(event, resolve, BASKETBALL_FIELD_LABELS);\n if (storeEvent !== null) return storeEvent;\n if (!isBasketballEvent(event)) return event.type;\n\n const team = resolve.team(event.teamId);\n if (event.type === BASKETBALL_TIMEOUT_EVENT_TYPE)\n return `${team}: ${BASKETBALL_EVENT_LABELS[event.type].play}`;\n\n const player = `${resolve.player(event.playerUserId)} (${team})`;\n if (event.type === BASKETBALL_BULK_EDIT_EVENT_TYPE) {\n const field = BASKETBALL_FIELD_LABELS.player[event.stat].toLowerCase();\n return `${player}: ${formatSignedValue(event.value)} ${field} (${BASKETBALL_EVENT_LABELS[event.type].play.toLowerCase()})`;\n }\n const play = `${player}: ${BASKETBALL_EVENT_LABELS[event.type].play}`;\n const assister = assisterOf(event);\n return assister === undefined ? play : `${play}, assisted by ${resolve.player(assister)}`;\n}\n\nfunction sumOf(\n lines: readonly { readonly rebounds: number; readonly assists: number }[],\n field: 'rebounds' | 'assists',\n): number {\n return lines.reduce((total, line) => total + line[field], 0);\n}\n\nexport const BASKETBALL_SCOREBOARD: Scoreboard = {\n figures: [\n {\n id: 'points',\n label: BASKETBALL_FIELD_LABELS.player.points,\n value: (teamLine) => teamLine.score,\n },\n {\n id: 'rebounds',\n label: BASKETBALL_FIELD_LABELS.player.rebounds,\n value: (_teamLine, sideLines) => sumOf(sideLines, 'rebounds'),\n },\n {\n id: 'assists',\n label: BASKETBALL_FIELD_LABELS.player.assists,\n value: (_teamLine, sideLines) => sumOf(sideLines, 'assists'),\n },\n {\n id: 'timeouts',\n label: BASKETBALL_FIELD_LABELS.team.timeouts,\n value: (teamLine) => ownTeamLine(teamLine).timeouts,\n },\n ],\n jumpBall: true,\n};\n\nexport const BASKETBALL_SCORING_PANEL: PlayerEventsScoringPanel = {\n kind: 'playerEvents',\n playerEventTypes: [\n ...BASKETBALL_SCORE_EVENT_TYPE_KEYS,\n ...BASKETBALL_PLAYER_TALLY_EVENT_TYPE_KEYS,\n ],\n assistableEventTypes: BASKETBALL_ASSISTABLE_SHOT_EVENT_TYPE_KEYS,\n teamEventTypes: [BASKETBALL_TIMEOUT_EVENT_TYPE],\n};\n\nexport const BASKETBALL_TEAM_SCORE_FLOOR_MESSAGE =\n \"These changes would leave a team's score below zero.\";\n\nconst playerLineValuesSchema = z.strictObject(\n Object.fromEntries(\n BASKETBALL_PLAYER_STAT_KEYS.map((key) => [key, bulkEntryCountField]),\n ) as Record<BasketballPlayerStatKey, typeof bulkEntryCountField>,\n);\n\nfunction currentPlayerCounters(context: BulkEntryContext, entryId: string): PlayerCounters {\n return playerCountersOf(ownStats(context.state).playerStats[entryId]);\n}\n\nfunction bulkDrafts(values: PlayerLinesValues, context: BulkEntryContext): StatEventDraft[] {\n const increases: StatEventDraft[] = [];\n const decreases: StatEventDraft[] = [];\n for (const entryId of context.rosterPlayerIds) {\n const entered = values.lines[entryId];\n const entry = parseGameRosterPlayerId(entryId);\n if (entered === undefined || entry === null) continue;\n const before = currentPlayerCounters(context, entryId);\n for (const stat of BASKETBALL_PLAYER_STAT_KEYS) {\n const target = entered[stat] ?? before[stat];\n if (target === before[stat]) continue;\n const draft: StatEventDraft = {\n type: BASKETBALL_BULK_EDIT_EVENT_TYPE,\n teamId: entry.teamId,\n playerUserId: entry.userId,\n stat,\n target,\n };\n (target > before[stat] ? increases : decreases).push(draft);\n }\n }\n // Every increase before any decrease, so a team's running score never dips below the floor its\n // final score clears — each draft passes `validate` against the state the ones before it leave.\n return [...increases, ...decreases];\n}\n\nexport const BASKETBALL_BULK_ENTRY: PlayerLinesBulkEntry = {\n kind: 'playerLines',\n formDefaults: (context) => ({\n lines: Object.fromEntries(\n context.rosterPlayerIds.map((entryId) => [entryId, currentPlayerCounters(context, entryId)]),\n ),\n }),\n formSchema: (context) => {\n const roster = new Set(context.rosterPlayerIds);\n return z\n .object({ lines: z.record(z.string(), playerLineValuesSchema) })\n .superRefine((values, issues) => {\n for (const entryId of Object.keys(values.lines)) {\n if (!roster.has(entryId)) {\n issues.addIssue({\n code: 'custom',\n path: ['lines', entryId],\n message: NOT_ON_GAME_ROSTER_MESSAGE,\n });\n }\n }\n const state = ownStats(context.state);\n for (const teamId of context.game.teamIds) {\n let score = (state.teamStats[teamId] ?? emptyBasketballTeamLine()).score;\n for (const [entryId, entered] of Object.entries(values.lines)) {\n if (parseGameRosterPlayerId(entryId)?.teamId !== teamId) continue;\n score += entered.points - currentPlayerCounters(context, entryId).points;\n }\n if (score < 0)\n issues.addIssue({\n code: 'custom',\n path: ['lines'],\n message: BASKETBALL_TEAM_SCORE_FLOOR_MESSAGE,\n });\n }\n if (bulkDrafts(values, context).length > MAX_STAT_EVENTS_PER_WRITE) {\n issues.addIssue({\n code: 'custom',\n path: ['lines'],\n message: BULK_ENTRY_TOO_LARGE_MESSAGE,\n });\n }\n });\n },\n toEvents: bulkDrafts,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"basketball-scoring.js","sourceRoot":"","sources":["../../src/sports/basketball-scoring.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport {\n BASKETBALL_FANTASY_POINT_WEIGHTS,\n BASKETBALL_POINTS_BY_EVENT_TYPE,\n NOT_ON_GAME_ROSTER_MESSAGE,\n} from '../constants/sports.js';\nimport type {\n BasketballPlayerStats,\n BasketballTeamStats,\n GameStatEvent,\n} from '../doc-schemas/game-stats.js';\nimport type { BasketballGameStats, GameStats } from '../doc-schemas/sport-game.js';\nimport { buildGameRosterPlayerId, parseGameRosterPlayerId } from '../ids/compound-ids.js';\nimport {\n BASKETBALL_ASSISTABLE_SHOT_EVENT_TYPE_KEYS,\n BASKETBALL_ASSIST_EVENT_TYPE,\n BASKETBALL_BULK_EDIT_EVENT_TYPE,\n BASKETBALL_ONE_POINT_EVENT_TYPE,\n BASKETBALL_PLAYER_STAT_KEYS,\n BASKETBALL_PLAYER_TALLY_EVENT_TYPE_KEYS,\n BASKETBALL_REBOUND_EVENT_TYPE,\n BASKETBALL_SCORE_EVENT_TYPE_KEYS,\n BASKETBALL_STAT_EVENT_TYPE_KEYS,\n BASKETBALL_TEAM_STAT_KEYS,\n BASKETBALL_THREE_POINT_EVENT_TYPE,\n BASKETBALL_TIMEOUT_EVENT_TYPE,\n BASKETBALL_TWO_POINT_EVENT_TYPE,\n} from '../types/sports.js';\nimport type {\n BasketballPlayerStatKey,\n BasketballStatEventType,\n BasketballTeamStatKey,\n} from '../types/sports.js';\nimport { PLAYER_STAT_LINE_KIND_KEYS } from '../types/stats.js';\nimport type { StatLineKind } from '../types/stats.js';\nimport {\n bulkEntryCountField,\n type BulkEntryContext,\n type PlayerLinesBulkEntry,\n type PlayerLinesValues,\n type StatEventDraft,\n} from './bulk-entry.js';\nimport {\n buildGameContribution,\n decideParticipation,\n type ContributionSpec,\n} from './contribution.js';\nimport {\n FINALIZATION_READY,\n STAT_EVENT_ACCEPTED,\n isAllZeroLine,\n isSportStatEventIn,\n isStatCorrection,\n refuseStatEvent,\n type CorrectableFields,\n type GameTeamLine,\n type SportScoring,\n type SportStatEventBody,\n type StatCorrectionBody,\n type StatEventBody,\n type StatLineValues,\n} from './scoring.js';\nimport {\n describeStoreEvent,\n formatSignedValue,\n type PlayerEventsScoringPanel,\n type Scoreboard,\n type StatEventLabel,\n type StatEventNameResolver,\n type StatFieldLabels,\n} from './scoring-display.js';\n\ntype BasketballEvent = Extract<SportStatEventBody, { type: BasketballStatEventType }>;\ntype PlayerCounters = Record<BasketballPlayerStatKey, number>;\n\nfunction isBasketballEvent(event: StatEventBody | undefined): event is BasketballEvent {\n return isSportStatEventIn(BASKETBALL_STAT_EVENT_TYPE_KEYS, event);\n}\n\nfunction ownStats(state: GameStats): BasketballGameStats {\n return state as BasketballGameStats;\n}\n\nfunction ownTeamLine(line: GameTeamLine): BasketballTeamStats {\n return line as BasketballTeamStats;\n}\n\nexport function basketballFantasyPoints(\n line: Pick<BasketballPlayerStats, BasketballPlayerStatKey>,\n): number {\n return BASKETBALL_PLAYER_STAT_KEYS.reduce(\n (total, key) => total + line[key] * BASKETBALL_FANTASY_POINT_WEIGHTS[key],\n 0,\n );\n}\n\nconst FANTASY_POINTS_FIELD = 'fantasyPoints' satisfies keyof BasketballPlayerStats;\nconst PLAYER_LINE_KINDS: readonly StatLineKind[] = PLAYER_STAT_LINE_KIND_KEYS;\n\nexport function emptyBasketballTeamLine(): BasketballTeamStats {\n return Object.fromEntries(\n BASKETBALL_TEAM_STAT_KEYS.map((key) => [key, 0]),\n ) as BasketballTeamStats;\n}\n\nfunction emptyPlayerCounters(): PlayerCounters {\n return Object.fromEntries(BASKETBALL_PLAYER_STAT_KEYS.map((key) => [key, 0])) as PlayerCounters;\n}\n\nfunction counterOf(line: StatLineValues, field: string): number {\n const value = line[field] ?? 0;\n if (typeof value !== 'number')\n throw new TypeError(`A basketball line's ${field} is not a number.`);\n return value;\n}\n\nfunction playerCountersOf(line: StatLineValues | undefined): PlayerCounters {\n const counters = emptyPlayerCounters();\n if (line === undefined) return counters;\n for (const key of BASKETBALL_PLAYER_STAT_KEYS) counters[key] = counterOf(line, key);\n return counters;\n}\n\nfunction deriveBasketballLine(kind: StatLineKind, line: StatLineValues): StatLineValues {\n const withoutDerived = Object.fromEntries(\n Object.entries(line).filter(([field]) => field !== FANTASY_POINTS_FIELD),\n );\n if (!PLAYER_LINE_KINDS.includes(kind)) return withoutDerived;\n return {\n ...withoutDerived,\n [FANTASY_POINTS_FIELD]: basketballFantasyPoints(playerCountersOf(line)),\n };\n}\n\nconst CORRECTABLE_FIELDS: CorrectableFields = {\n team: BASKETBALL_TEAM_STAT_KEYS,\n player: BASKETBALL_PLAYER_STAT_KEYS,\n};\n\nconst TALLY_FIELD = {\n [BASKETBALL_REBOUND_EVENT_TYPE]: 'rebounds',\n [BASKETBALL_ASSIST_EVENT_TYPE]: 'assists',\n} as const satisfies Record<\n (typeof BASKETBALL_PLAYER_TALLY_EVENT_TYPE_KEYS)[number],\n BasketballPlayerStatKey\n>;\n\ninterface LineChange<Field extends string> {\n readonly line: string;\n readonly field: Field;\n readonly amount: number;\n}\n\ninterface Effects {\n readonly team: readonly LineChange<BasketballTeamStatKey>[];\n readonly player: readonly LineChange<BasketballPlayerStatKey>[];\n}\n\nfunction assisterOf(event: StatEventBody): string | undefined {\n return 'assistedByUserId' in event && typeof event.assistedByUserId === 'string'\n ? event.assistedByUserId\n : undefined;\n}\n\nfunction namesPlayer(event: StatEventBody): boolean {\n return 'playerUserId' in event && event.playerUserId !== undefined;\n}\n\nfunction effectsOf(event: BasketballEvent): Effects {\n if (event.type === BASKETBALL_TIMEOUT_EVENT_TYPE) {\n return { team: [{ line: event.teamId, field: 'timeouts', amount: 1 }], player: [] };\n }\n const scorer = buildGameRosterPlayerId(event.teamId, event.playerUserId);\n if (event.type === BASKETBALL_BULK_EDIT_EVENT_TYPE) {\n return {\n team:\n event.stat === 'points'\n ? [{ line: event.teamId, field: 'score', amount: event.value }]\n : [],\n player: [{ line: scorer, field: event.stat, amount: event.value }],\n };\n }\n\n const team: LineChange<BasketballTeamStatKey>[] = [];\n const player: LineChange<BasketballPlayerStatKey>[] = [];\n const points = BASKETBALL_POINTS_BY_EVENT_TYPE[event.type];\n if (points > 0) {\n team.push({ line: event.teamId, field: 'score', amount: points });\n player.push({ line: scorer, field: 'points', amount: points });\n }\n if (event.type === BASKETBALL_REBOUND_EVENT_TYPE || event.type === BASKETBALL_ASSIST_EVENT_TYPE) {\n player.push({ line: scorer, field: TALLY_FIELD[event.type], amount: 1 });\n }\n const assister = assisterOf(event);\n if (assister !== undefined) {\n player.push({\n line: buildGameRosterPlayerId(event.teamId, assister),\n field: 'assists',\n amount: 1,\n });\n }\n return { team, player };\n}\n\nfunction correctionEffects(event: StatCorrectionBody): Effects {\n const fields =\n event.playerUserId === undefined ? CORRECTABLE_FIELDS.team : CORRECTABLE_FIELDS.player;\n if (!fields.includes(event.stat)) {\n throw new Error(\n `A basketball correction cannot change ${event.stat} on a ${event.playerUserId === undefined ? 'team' : 'player'} line.`,\n );\n }\n return event.playerUserId === undefined\n ? {\n team: [\n { line: event.teamId, field: event.stat as BasketballTeamStatKey, amount: event.value },\n ],\n player: [],\n }\n : {\n team: [],\n player: [\n {\n line: buildGameRosterPlayerId(event.teamId, event.playerUserId),\n field: event.stat as BasketballPlayerStatKey,\n amount: event.value,\n },\n ],\n };\n}\n\nfunction applyEffects(\n state: BasketballGameStats,\n effects: Effects,\n sign: 1 | -1,\n): BasketballGameStats {\n const teamStats = { ...state.teamStats };\n for (const change of effects.team) {\n const line = { ...(teamStats[change.line] ?? emptyBasketballTeamLine()) };\n line[change.field] += sign * change.amount;\n teamStats[change.line] = line;\n }\n\n const playerStats = { ...state.playerStats };\n for (const change of effects.player) {\n const counters = playerCountersOf(playerStats[change.line]);\n counters[change.field] += sign * change.amount;\n if (isAllZeroLine(counters, BASKETBALL_PLAYER_STAT_KEYS)) delete playerStats[change.line];\n else\n playerStats[change.line] = deriveBasketballLine(\n 'gamePlayer',\n counters,\n ) as BasketballPlayerStats;\n }\n return { teamStats, playerStats };\n}\n\nfunction isAssistableShot(type: BasketballStatEventType): boolean {\n return (BASKETBALL_ASSISTABLE_SHOT_EVENT_TYPE_KEYS as readonly string[]).includes(type);\n}\n\nconst validate: SportScoring['validate'] = (stateIn, event, roster) => {\n if (!isBasketballEvent(event)) return refuseStatEvent('eventTypeNotInSport');\n if (!roster.teamIds.includes(event.teamId)) return refuseStatEvent('teamNotInGame');\n if (event.type === BASKETBALL_TIMEOUT_EVENT_TYPE) {\n return namesPlayer(event) || assisterOf(event) !== undefined\n ? refuseStatEvent('playerNotAllowed')\n : STAT_EVENT_ACCEPTED;\n }\n\n const scorer = buildGameRosterPlayerId(event.teamId, event.playerUserId);\n if (!roster.rosterPlayerIds.has(scorer)) return refuseStatEvent('playerNotRostered');\n\n const assister = assisterOf(event);\n if (assister !== undefined) {\n if (!isAssistableShot(event.type) || assister === event.playerUserId)\n return refuseStatEvent('assistNotAllowed');\n if (!roster.rosterPlayerIds.has(buildGameRosterPlayerId(event.teamId, assister))) {\n return refuseStatEvent('assisterNotRostered');\n }\n }\n\n if (event.type === BASKETBALL_BULK_EDIT_EVENT_TYPE) {\n if (!Number.isInteger(event.value) || event.value === 0)\n return refuseStatEvent('bulkValueInvalid');\n const state = ownStats(stateIn);\n const current = playerCountersOf(state.playerStats[scorer])[event.stat];\n if (current + event.value < 0) return refuseStatEvent('bulkValueInvalid');\n const teamScore = (state.teamStats[event.teamId] ?? emptyBasketballTeamLine()).score;\n if (event.stat === 'points' && teamScore + event.value < 0)\n return refuseStatEvent('bulkValueInvalid');\n }\n return STAT_EVENT_ACCEPTED;\n};\n\nconst BASKETBALL_CONTRIBUTION: ContributionSpec = {\n playerStatKeys: BASKETBALL_PLAYER_STAT_KEYS,\n teamSeasonPlayerSums: ['rebounds', 'assists'] satisfies BasketballPlayerStatKey[],\n zeroLineIsNonScoring: true,\n deriveLine: deriveBasketballLine,\n};\n\nconst resolveBulkEntry: NonNullable<SportScoring['resolveBulkEntry']> = (state, submission) => {\n if (submission.type !== BASKETBALL_BULK_EDIT_EVENT_TYPE) return null;\n const { target, ...event } = submission;\n const scorer = buildGameRosterPlayerId(event.teamId, event.playerUserId);\n const previousValue = playerCountersOf(ownStats(state).playerStats[scorer])[event.stat];\n const value = target - previousValue;\n return value === 0\n ? { kind: 'unchanged' }\n : { kind: 'change', event: { ...event, value, previousValue } };\n};\n\nexport const BASKETBALL_SCORING: SportScoring = {\n validate,\n resolveBulkEntry,\n apply: (state, event) => {\n if (isStatCorrection(event)) return applyEffects(ownStats(state), correctionEffects(event), 1);\n if (!isBasketballEvent(event))\n throw new Error(`The basketball adapter does not apply ${event.type}.`);\n return applyEffects(ownStats(state), effectsOf(event), 1);\n },\n undo: (state, target) => {\n if (!isBasketballEvent(target))\n throw new Error(`The basketball adapter does not undo ${target.type}.`);\n return applyEffects(ownStats(state), effectsOf(target), -1);\n },\n deriveLine: deriveBasketballLine,\n correctableFields: CORRECTABLE_FIELDS,\n nextRound: () => null,\n finalizationReadiness: () => FINALIZATION_READY,\n participation: (state, rosterPlayerIds, absentRosterPlayerIds) =>\n decideParticipation(BASKETBALL_CONTRIBUTION, state, rosterPlayerIds, absentRosterPlayerIds),\n contribution: (game) => buildGameContribution(BASKETBALL_CONTRIBUTION, game),\n};\n\nexport const BASKETBALL_EVENT_LABELS = {\n [BASKETBALL_ONE_POINT_EVENT_TYPE]: { button: '+1 PT', play: '1-point basket' },\n [BASKETBALL_TWO_POINT_EVENT_TYPE]: { button: '+2 PT', play: '2-point basket' },\n [BASKETBALL_THREE_POINT_EVENT_TYPE]: { button: '+3 PT', play: '3-point basket' },\n [BASKETBALL_REBOUND_EVENT_TYPE]: { button: 'Rebound', play: 'Rebound' },\n [BASKETBALL_ASSIST_EVENT_TYPE]: { button: 'Assist', play: 'Assist' },\n [BASKETBALL_TIMEOUT_EVENT_TYPE]: { button: 'Timeout', play: 'Timeout' },\n [BASKETBALL_BULK_EDIT_EVENT_TYPE]: { button: 'Bulk entry', play: 'Bulk entry' },\n} as const satisfies Record<BasketballStatEventType, StatEventLabel>;\n\nexport const BASKETBALL_FIELD_LABELS = {\n team: { score: 'Score', timeouts: 'Timeouts' },\n player: { points: 'Points', rebounds: 'Rebounds', assists: 'Assists' },\n} as const satisfies StatFieldLabels<BasketballTeamStatKey, BasketballPlayerStatKey>;\n\nexport function describeBasketballEvent(\n event: GameStatEvent,\n resolve: StatEventNameResolver,\n): string {\n const storeEvent = describeStoreEvent(event, resolve, BASKETBALL_FIELD_LABELS);\n if (storeEvent !== null) return storeEvent;\n if (!isBasketballEvent(event)) return event.type;\n\n const team = resolve.team(event.teamId);\n if (event.type === BASKETBALL_TIMEOUT_EVENT_TYPE)\n return `${team}: ${BASKETBALL_EVENT_LABELS[event.type].play}`;\n\n const player = `${resolve.player(event.playerUserId)} (${team})`;\n if (event.type === BASKETBALL_BULK_EDIT_EVENT_TYPE) {\n const field = BASKETBALL_FIELD_LABELS.player[event.stat].toLowerCase();\n return `${player}: ${formatSignedValue(event.value)} ${field} (${BASKETBALL_EVENT_LABELS[event.type].play.toLowerCase()})`;\n }\n const play = `${player}: ${BASKETBALL_EVENT_LABELS[event.type].play}`;\n const assister = assisterOf(event);\n return assister === undefined ? play : `${play}, assisted by ${resolve.player(assister)}`;\n}\n\nfunction sumOf(\n lines: readonly { readonly rebounds: number; readonly assists: number }[],\n field: 'rebounds' | 'assists',\n): number {\n return lines.reduce((total, line) => total + line[field], 0);\n}\n\nexport const BASKETBALL_SCOREBOARD: Scoreboard = {\n figures: [\n {\n id: 'points',\n label: BASKETBALL_FIELD_LABELS.player.points,\n value: (teamLine) => teamLine.score,\n },\n {\n id: 'rebounds',\n label: BASKETBALL_FIELD_LABELS.player.rebounds,\n value: (_teamLine, sideLines) => sumOf(sideLines, 'rebounds'),\n },\n {\n id: 'assists',\n label: BASKETBALL_FIELD_LABELS.player.assists,\n value: (_teamLine, sideLines) => sumOf(sideLines, 'assists'),\n },\n {\n id: 'timeouts',\n label: BASKETBALL_FIELD_LABELS.team.timeouts,\n value: (teamLine) => ownTeamLine(teamLine).timeouts,\n },\n ],\n jumpBall: true,\n};\n\nexport const BASKETBALL_SCORING_PANEL: PlayerEventsScoringPanel = {\n kind: 'playerEvents',\n playerEventTypes: [\n ...BASKETBALL_SCORE_EVENT_TYPE_KEYS,\n ...BASKETBALL_PLAYER_TALLY_EVENT_TYPE_KEYS,\n ],\n assistableEventTypes: BASKETBALL_ASSISTABLE_SHOT_EVENT_TYPE_KEYS,\n teamEventTypes: [BASKETBALL_TIMEOUT_EVENT_TYPE],\n};\n\nexport const BASKETBALL_TEAM_SCORE_FLOOR_MESSAGE =\n \"These changes would leave a team's score below zero.\";\n\nconst playerLineValuesSchema = z.strictObject(\n Object.fromEntries(\n BASKETBALL_PLAYER_STAT_KEYS.map((key) => [key, bulkEntryCountField]),\n ) as Record<BasketballPlayerStatKey, typeof bulkEntryCountField>,\n);\n\nfunction currentPlayerCounters(context: BulkEntryContext, entryId: string): PlayerCounters {\n return playerCountersOf(ownStats(context.state).playerStats[entryId]);\n}\n\nfunction bulkDrafts(values: PlayerLinesValues, context: BulkEntryContext): StatEventDraft[] {\n const increases: StatEventDraft[] = [];\n const decreases: StatEventDraft[] = [];\n for (const entryId of context.rosterPlayerIds) {\n const entered = values.lines[entryId];\n const entry = parseGameRosterPlayerId(entryId);\n if (entered === undefined || entry === null) continue;\n const before = currentPlayerCounters(context, entryId);\n for (const stat of BASKETBALL_PLAYER_STAT_KEYS) {\n const target = entered[stat] ?? before[stat];\n if (target === before[stat]) continue;\n const draft: StatEventDraft = {\n type: BASKETBALL_BULK_EDIT_EVENT_TYPE,\n teamId: entry.teamId,\n playerUserId: entry.userId,\n stat,\n target,\n };\n (target > before[stat] ? increases : decreases).push(draft);\n }\n }\n // Every increase before any decrease, so a team's running score never dips below the floor its\n // final score clears — each draft passes `validate` against the state the ones before it leave.\n return [...increases, ...decreases];\n}\n\nexport const BASKETBALL_BULK_ENTRY: PlayerLinesBulkEntry = {\n kind: 'playerLines',\n formDefaults: (context) => ({\n lines: Object.fromEntries(\n context.rosterPlayerIds.map((entryId) => [entryId, currentPlayerCounters(context, entryId)]),\n ),\n }),\n formSchema: (context) => {\n const roster = new Set(context.rosterPlayerIds);\n return z\n .object({ lines: z.record(z.string(), playerLineValuesSchema) })\n .superRefine((values, issues) => {\n for (const entryId of Object.keys(values.lines)) {\n if (!roster.has(entryId)) {\n issues.addIssue({\n code: 'custom',\n path: ['lines', entryId],\n message: NOT_ON_GAME_ROSTER_MESSAGE,\n });\n }\n }\n const state = ownStats(context.state);\n for (const teamId of context.game.teamIds) {\n let score = (state.teamStats[teamId] ?? emptyBasketballTeamLine()).score;\n for (const [entryId, entered] of Object.entries(values.lines)) {\n if (parseGameRosterPlayerId(entryId)?.teamId !== teamId) continue;\n score += entered.points - currentPlayerCounters(context, entryId).points;\n }\n if (score < 0)\n issues.addIssue({\n code: 'custom',\n path: ['lines'],\n message: BASKETBALL_TEAM_SCORE_FLOOR_MESSAGE,\n });\n }\n });\n },\n toEvents: bulkDrafts,\n};\n"]}
|
|
@@ -38,7 +38,6 @@ export type PlayerLinesBulkEntry = BulkEntryForm<'playerLines', PlayerLinesValue
|
|
|
38
38
|
export type TeamScoresBulkEntry = BulkEntryForm<'teamScores', TeamScoresValues>;
|
|
39
39
|
export type RoundsBulkEntry = BulkEntryForm<'rounds', RoundsValues>;
|
|
40
40
|
export type BulkEntry = PlayerLinesBulkEntry | TeamScoresBulkEntry | RoundsBulkEntry;
|
|
41
|
-
export declare const BULK_ENTRY_TOO_LARGE_MESSAGE = "This entry changes more stats than one save can hold. Save part of it, then enter the rest.";
|
|
42
41
|
export declare const BULK_ENTRY_COUNT_MESSAGE = "Enter a whole number, zero or more.";
|
|
43
42
|
export declare const bulkEntryCountField: z.ZodCustom<number, number>;
|
|
44
43
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulk-entry.d.ts","sourceRoot":"","sources":["../../src/sports/bulk-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;CACrD;AAED,KAAK,gBAAgB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;AAEzF,MAAM,MAAM,cAAc,GAAG,gBAAgB,CAC3C,OAAO,CAAC,mBAAmB,EAAE;IAAE,IAAI,EAAE,OAAO,0BAA0B,CAAA;CAAE,CAAC,EACzE,SAAS,GAAG,YAAY,CACzB,CAAC;AAEF,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,aAAa,EAAE,MAAM;IAC5D,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9E,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC7D,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,SAAS,cAAc,EAAE,CAAC;CAC7F;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;CACrE;AAED,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;AACnF,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;AAChF,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AAEpE,MAAM,MAAM,SAAS,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,eAAe,CAAC;AAErF,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"bulk-entry.d.ts","sourceRoot":"","sources":["../../src/sports/bulk-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;CACrD;AAED,KAAK,gBAAgB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;AAEzF,MAAM,MAAM,cAAc,GAAG,gBAAgB,CAC3C,OAAO,CAAC,mBAAmB,EAAE;IAAE,IAAI,EAAE,OAAO,0BAA0B,CAAA;CAAE,CAAC,EACzE,SAAS,GAAG,YAAY,CACzB,CAAC;AAEF,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,aAAa,EAAE,MAAM;IAC5D,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9E,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC7D,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,SAAS,cAAc,EAAE,CAAC;CAC7F;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;CACrE;AAED,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;AACnF,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;AAChF,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AAEpE,MAAM,MAAM,SAAS,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,eAAe,CAAC;AAErF,eAAO,MAAM,wBAAwB,wCAAwC,CAAC;AAE9E,eAAO,MAAM,mBAAmB,6BAG/B,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { enteredStatCountSchema } from '../doc-schemas/atoms.js';
|
|
3
|
-
export const BULK_ENTRY_TOO_LARGE_MESSAGE = 'This entry changes more stats than one save can hold. Save part of it, then enter the rest.';
|
|
4
3
|
export const BULK_ENTRY_COUNT_MESSAGE = 'Enter a whole number, zero or more.';
|
|
5
4
|
export const bulkEntryCountField = z.custom((value) => enteredStatCountSchema.safeParse(value).success, BULK_ENTRY_COUNT_MESSAGE);
|
|
6
5
|
//# sourceMappingURL=bulk-entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulk-entry.js","sourceRoot":"","sources":["../../src/sports/bulk-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAoDjE,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"bulk-entry.js","sourceRoot":"","sources":["../../src/sports/bulk-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAoDjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,qCAAqC,CAAC;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CACzC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,EAC1D,wBAAwB,CACzB,CAAC","sourcesContent":["import { z } from 'zod';\nimport { enteredStatCountSchema } from '../doc-schemas/atoms.js';\nimport type { GameStats } from '../doc-schemas/sport-game.js';\nimport type { BulkEntryKind } from '../types/stats.js';\nimport type { StatEventSubmission } from '../schemas/scoring.js';\nimport type { STAT_CORRECTION_EVENT_TYPE } from '../types/stats.js';\nimport type { GameTeamIds } from './sport-adapter.js';\n\nexport interface LiveRoundEvent {\n readonly eventId: string;\n readonly roundNumber: number;\n}\n\nexport interface BulkEntryContext {\n readonly game: GameTeamIds;\n readonly state: GameStats;\n readonly rosterPlayerIds: readonly string[];\n readonly absentRosterPlayerIds: readonly string[];\n readonly liveRoundEvents: readonly LiveRoundEvent[];\n}\n\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;\n\nexport type StatEventDraft = DistributiveOmit<\n Exclude<StatEventSubmission, { type: typeof STAT_CORRECTION_EVENT_TYPE }>,\n 'eventId' | 'recordedAt'\n>;\n\nexport interface BulkEntryForm<K extends BulkEntryKind, Values> {\n readonly kind: K;\n readonly formSchema: (context: BulkEntryContext) => z.ZodType<Values, Values>;\n readonly formDefaults: (context: BulkEntryContext) => Values;\n readonly toEvents: (values: Values, context: BulkEntryContext) => readonly StatEventDraft[];\n}\n\nexport interface PlayerLinesValues {\n readonly lines: Readonly<Record<string, Readonly<Record<string, number>>>>;\n}\n\nexport interface TeamScoresValues {\n readonly scores: Readonly<Record<string, number>>;\n}\n\nexport interface RoundsValues {\n readonly rounds: readonly Readonly<Record<string, number | null>>[];\n}\n\nexport type PlayerLinesBulkEntry = BulkEntryForm<'playerLines', PlayerLinesValues>;\nexport type TeamScoresBulkEntry = BulkEntryForm<'teamScores', TeamScoresValues>;\nexport type RoundsBulkEntry = BulkEntryForm<'rounds', RoundsValues>;\n\nexport type BulkEntry = PlayerLinesBulkEntry | TeamScoresBulkEntry | RoundsBulkEntry;\n\nexport const BULK_ENTRY_COUNT_MESSAGE = 'Enter a whole number, zero or more.';\n\nexport const bulkEntryCountField = z.custom<number>(\n (value) => enteredStatCountSchema.safeParse(value).success,\n BULK_ENTRY_COUNT_MESSAGE,\n);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curling-scoring.d.ts","sourceRoot":"","sources":["../../src/sports/curling-scoring.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"curling-scoring.d.ts","sourceRoot":"","sources":["../../src/sports/curling-scoring.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AASpF,OAAO,EAGL,KAAK,eAAe,EAGrB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EASL,KAAK,YAAY,EAGlB,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAEf,KAAK,qBAAqB,EAE3B,MAAM,sBAAsB,CAAC;AAsB9B,wBAAgB,oBAAoB,IAAI,gBAAgB,CAGvD;AAkED,eAAO,MAAM,eAAe,EAAE,YAoB7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAA8D,CAAC;AAE5F,eAAO,MAAM,oBAAoB;;;;;;;;;CAGgC,CAAC;AAElE,eAAO,MAAM,oBAAoB;;;;;CAG8B,CAAC;AAEhE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAQjG;AAED,eAAO,MAAM,kBAAkB,EAAE,UAIhC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,kBAKnC,CAAC;AAEF,eAAO,MAAM,4BAA4B,oCAA8D,CAAC;AACxG,eAAO,MAAM,gCAAgC,mGACqD,CAAC;AACnG,eAAO,MAAM,gCAAgC,qEACuB,CAAC;AA4ErE,eAAO,MAAM,kBAAkB,EAAE,eAmChC,CAAC"}
|