@ttt-productions/q-core 0.1.28 → 0.1.30
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/admin-views.d.ts.map +1 -1
- package/dist/constants/admin-views.js +0 -3
- package/dist/constants/admin-views.js.map +1 -1
- package/dist/constants/business.d.ts.map +1 -1
- package/dist/constants/business.js +0 -52
- package/dist/constants/business.js.map +1 -1
- package/dist/constants/deployment.d.ts +0 -2
- package/dist/constants/deployment.d.ts.map +1 -1
- package/dist/constants/deployment.js +0 -2
- package/dist/constants/deployment.js.map +1 -1
- package/dist/constants/media.d.ts.map +1 -1
- package/dist/constants/media.js +4 -30
- package/dist/constants/media.js.map +1 -1
- package/dist/constants/scheduled-jobs.d.ts +0 -25
- package/dist/constants/scheduled-jobs.d.ts.map +1 -1
- package/dist/constants/scheduled-jobs.js +0 -26
- package/dist/constants/scheduled-jobs.js.map +1 -1
- package/dist/constants/sports.d.ts +1 -0
- package/dist/constants/sports.d.ts.map +1 -1
- package/dist/constants/sports.js +4 -25
- package/dist/constants/sports.js.map +1 -1
- package/dist/constants/storage-keys.d.ts +0 -38
- package/dist/constants/storage-keys.d.ts.map +1 -1
- package/dist/constants/storage-keys.js +0 -41
- package/dist/constants/storage-keys.js.map +1 -1
- package/dist/constants/telemetry.d.ts +0 -3
- package/dist/constants/telemetry.d.ts.map +1 -1
- package/dist/constants/telemetry.js +2 -11
- package/dist/constants/telemetry.js.map +1 -1
- package/dist/doc-schemas/admin-notifications.d.ts +1 -2
- package/dist/doc-schemas/admin-notifications.d.ts.map +1 -1
- package/dist/doc-schemas/admin-notifications.js +0 -41
- package/dist/doc-schemas/admin-notifications.js.map +1 -1
- package/dist/doc-schemas/aggregate-stats.d.ts.map +1 -1
- package/dist/doc-schemas/aggregate-stats.js +0 -35
- package/dist/doc-schemas/aggregate-stats.js.map +1 -1
- package/dist/doc-schemas/atoms.d.ts +0 -17
- package/dist/doc-schemas/atoms.d.ts.map +1 -1
- package/dist/doc-schemas/atoms.js +0 -36
- package/dist/doc-schemas/atoms.js.map +1 -1
- package/dist/doc-schemas/audit-event.d.ts +2 -0
- package/dist/doc-schemas/audit-event.d.ts.map +1 -1
- package/dist/doc-schemas/audit-event.js +0 -8
- package/dist/doc-schemas/audit-event.js.map +1 -1
- package/dist/doc-schemas/award-group-grant.d.ts +2 -8
- package/dist/doc-schemas/award-group-grant.d.ts.map +1 -1
- package/dist/doc-schemas/award-group-grant.js +0 -25
- package/dist/doc-schemas/award-group-grant.js.map +1 -1
- package/dist/doc-schemas/catalogs.d.ts.map +1 -1
- package/dist/doc-schemas/catalogs.js +0 -12
- package/dist/doc-schemas/catalogs.js.map +1 -1
- package/dist/doc-schemas/firestore-primitives.d.ts.map +1 -1
- package/dist/doc-schemas/firestore-primitives.js +0 -5
- package/dist/doc-schemas/firestore-primitives.js.map +1 -1
- package/dist/doc-schemas/gallery.d.ts.map +1 -1
- package/dist/doc-schemas/gallery.js +9 -18
- package/dist/doc-schemas/gallery.js.map +1 -1
- package/dist/doc-schemas/game-location.d.ts.map +1 -1
- package/dist/doc-schemas/game-location.js +2 -11
- package/dist/doc-schemas/game-location.js.map +1 -1
- package/dist/doc-schemas/game-stat-history.d.ts.map +1 -1
- package/dist/doc-schemas/game-stat-history.js +2 -11
- package/dist/doc-schemas/game-stat-history.js.map +1 -1
- package/dist/doc-schemas/game-stats.d.ts.map +1 -1
- package/dist/doc-schemas/game-stats.js +0 -56
- package/dist/doc-schemas/game-stats.js.map +1 -1
- package/dist/doc-schemas/league-team.d.ts.map +1 -1
- package/dist/doc-schemas/league-team.js +6 -29
- package/dist/doc-schemas/league-team.js.map +1 -1
- package/dist/doc-schemas/membership-roster-sync.d.ts.map +1 -1
- package/dist/doc-schemas/membership-roster-sync.js +0 -17
- package/dist/doc-schemas/membership-roster-sync.js.map +1 -1
- package/dist/doc-schemas/migration-console.d.ts +21 -15
- package/dist/doc-schemas/migration-console.d.ts.map +1 -1
- package/dist/doc-schemas/migration-console.js +0 -32
- package/dist/doc-schemas/migration-console.js.map +1 -1
- package/dist/doc-schemas/pending-media.d.ts.map +1 -1
- package/dist/doc-schemas/pending-media.js +8 -20
- package/dist/doc-schemas/pending-media.js.map +1 -1
- package/dist/doc-schemas/picture-retirement.d.ts.map +1 -1
- package/dist/doc-schemas/picture-retirement.js +8 -13
- package/dist/doc-schemas/picture-retirement.js.map +1 -1
- package/dist/doc-schemas/publicUser.d.ts.map +1 -1
- package/dist/doc-schemas/publicUser.js +0 -5
- package/dist/doc-schemas/publicUser.js.map +1 -1
- package/dist/doc-schemas/registration-start.d.ts.map +1 -1
- package/dist/doc-schemas/registration-start.js +2 -5
- package/dist/doc-schemas/registration-start.js.map +1 -1
- package/dist/doc-schemas/registry.d.ts +25 -14
- package/dist/doc-schemas/registry.d.ts.map +1 -1
- package/dist/doc-schemas/registry.js +0 -10
- package/dist/doc-schemas/registry.js.map +1 -1
- package/dist/doc-schemas/reserved-display-name.d.ts.map +1 -1
- package/dist/doc-schemas/reserved-display-name.js +0 -5
- package/dist/doc-schemas/reserved-display-name.js.map +1 -1
- package/dist/doc-schemas/sport-game.d.ts.map +1 -1
- package/dist/doc-schemas/sport-game.js +1 -29
- package/dist/doc-schemas/sport-game.js.map +1 -1
- package/dist/doc-schemas/sport-league.d.ts +0 -9
- package/dist/doc-schemas/sport-league.d.ts.map +1 -1
- package/dist/doc-schemas/sport-league.js +4 -26
- package/dist/doc-schemas/sport-league.js.map +1 -1
- package/dist/doc-schemas/stats-operation.d.ts +22 -18
- package/dist/doc-schemas/stats-operation.d.ts.map +1 -1
- package/dist/doc-schemas/stats-operation.js +7 -44
- package/dist/doc-schemas/stats-operation.js.map +1 -1
- package/dist/doc-schemas/status-reconcile-queue.d.ts +0 -6
- package/dist/doc-schemas/status-reconcile-queue.d.ts.map +1 -1
- package/dist/doc-schemas/status-reconcile-queue.js +0 -13
- package/dist/doc-schemas/status-reconcile-queue.js.map +1 -1
- package/dist/doc-schemas/sweep-state.d.ts.map +1 -1
- package/dist/doc-schemas/sweep-state.js +4 -20
- package/dist/doc-schemas/sweep-state.js.map +1 -1
- package/dist/doc-schemas/system.d.ts.map +1 -1
- package/dist/doc-schemas/system.js +1 -27
- package/dist/doc-schemas/system.js.map +1 -1
- package/dist/doc-schemas/team-membership.d.ts.map +1 -1
- package/dist/doc-schemas/team-membership.js +0 -10
- package/dist/doc-schemas/team-membership.js.map +1 -1
- package/dist/doc-schemas/user-profile.d.ts +0 -1
- package/dist/doc-schemas/user-profile.d.ts.map +1 -1
- package/dist/doc-schemas/user-profile.js +0 -28
- package/dist/doc-schemas/user-profile.js.map +1 -1
- package/dist/doc-schemas/waiver-template.d.ts.map +1 -1
- package/dist/doc-schemas/waiver-template.js +4 -25
- package/dist/doc-schemas/waiver-template.js.map +1 -1
- package/dist/doc-schemas/waivers-and-hardware.d.ts.map +1 -1
- package/dist/doc-schemas/waivers-and-hardware.js +0 -20
- package/dist/doc-schemas/waivers-and-hardware.js.map +1 -1
- package/dist/domain-events/domain-events.d.ts.map +1 -1
- package/dist/domain-events/domain-events.js +0 -67
- package/dist/domain-events/domain-events.js.map +1 -1
- package/dist/ids/award-grant-ids.d.ts.map +1 -1
- package/dist/ids/award-grant-ids.js +0 -7
- package/dist/ids/award-grant-ids.js.map +1 -1
- package/dist/ids/compound-ids.d.ts.map +1 -1
- package/dist/ids/compound-ids.js +0 -7
- package/dist/ids/compound-ids.js.map +1 -1
- package/dist/ids/minted-ids.d.ts.map +1 -1
- package/dist/ids/minted-ids.js +4 -14
- package/dist/ids/minted-ids.js.map +1 -1
- package/dist/ids/notification-ids.d.ts.map +1 -1
- package/dist/ids/notification-ids.js +0 -15
- package/dist/ids/notification-ids.js.map +1 -1
- package/dist/ids/picture-ids.d.ts +0 -5
- package/dist/ids/picture-ids.d.ts.map +1 -1
- package/dist/ids/picture-ids.js +0 -11
- package/dist/ids/picture-ids.js.map +1 -1
- package/dist/ids/stat-event-ids.d.ts +0 -6
- package/dist/ids/stat-event-ids.d.ts.map +1 -1
- package/dist/ids/stat-event-ids.js +0 -15
- package/dist/ids/stat-event-ids.js.map +1 -1
- package/dist/ids/stats-operation-ids.d.ts.map +1 -1
- package/dist/ids/stats-operation-ids.js +0 -7
- package/dist/ids/stats-operation-ids.js.map +1 -1
- package/dist/ids/waiver-template-ids.d.ts +0 -1
- package/dist/ids/waiver-template-ids.d.ts.map +1 -1
- package/dist/ids/waiver-template-ids.js +0 -2
- package/dist/ids/waiver-template-ids.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/input-formats/input-formats.d.ts +0 -80
- package/dist/input-formats/input-formats.d.ts.map +1 -1
- package/dist/input-formats/input-formats.js +0 -86
- package/dist/input-formats/input-formats.js.map +1 -1
- package/dist/media/file-origins.d.ts +0 -3
- package/dist/media/file-origins.d.ts.map +1 -1
- package/dist/media/file-origins.js +0 -26
- package/dist/media/file-origins.js.map +1 -1
- package/dist/media/picture-aspects.d.ts +0 -2
- package/dist/media/picture-aspects.d.ts.map +1 -1
- package/dist/media/picture-aspects.js +0 -5
- package/dist/media/picture-aspects.js.map +1 -1
- package/dist/media/picture-url.d.ts +0 -6
- package/dist/media/picture-url.d.ts.map +1 -1
- package/dist/media/picture-url.js +0 -9
- package/dist/media/picture-url.js.map +1 -1
- package/dist/media/upload-tray-display.d.ts +0 -3
- package/dist/media/upload-tray-display.d.ts.map +1 -1
- package/dist/media/upload-tray-display.js +0 -6
- package/dist/media/upload-tray-display.js.map +1 -1
- package/dist/migration-console/action-ids.d.ts +4 -1
- package/dist/migration-console/action-ids.d.ts.map +1 -1
- package/dist/migration-console/action-ids.js +8 -45
- package/dist/migration-console/action-ids.js.map +1 -1
- package/dist/migration-console/console-lock.d.ts +10 -0
- package/dist/migration-console/console-lock.d.ts.map +1 -0
- package/dist/migration-console/console-lock.js +14 -0
- package/dist/migration-console/console-lock.js.map +1 -0
- package/dist/migration-console/consumed-source.d.ts +4 -0
- package/dist/migration-console/consumed-source.d.ts.map +1 -0
- package/dist/migration-console/consumed-source.js +10 -0
- package/dist/migration-console/consumed-source.js.map +1 -0
- package/dist/migration-console/manifest.d.ts +2 -24
- package/dist/migration-console/manifest.d.ts.map +1 -1
- package/dist/migration-console/manifest.js +174 -61
- package/dist/migration-console/manifest.js.map +1 -1
- package/dist/migration-console/run-state.d.ts +2 -14
- package/dist/migration-console/run-state.d.ts.map +1 -1
- package/dist/migration-console/run-state.js +3 -16
- package/dist/migration-console/run-state.js.map +1 -1
- package/dist/notifications/admin-notification-config.d.ts +0 -11
- package/dist/notifications/admin-notification-config.d.ts.map +1 -1
- package/dist/notifications/admin-notification-config.js +2 -13
- package/dist/notifications/admin-notification-config.js.map +1 -1
- package/dist/notifications/archive-all.d.ts.map +1 -1
- package/dist/notifications/archive-all.js +0 -2
- package/dist/notifications/archive-all.js.map +1 -1
- package/dist/notifications/occurrences.d.ts +0 -3
- package/dist/notifications/occurrences.d.ts.map +1 -1
- package/dist/notifications/occurrences.js +0 -7
- package/dist/notifications/occurrences.js.map +1 -1
- package/dist/paths/app-routes.d.ts +0 -12
- package/dist/paths/app-routes.d.ts.map +1 -1
- package/dist/paths/app-routes.js +0 -18
- package/dist/paths/app-routes.js.map +1 -1
- package/dist/paths/collection-groups.d.ts.map +1 -1
- package/dist/paths/collection-groups.js +0 -5
- package/dist/paths/collection-groups.js.map +1 -1
- package/dist/paths/collection-refs.d.ts.map +1 -1
- package/dist/paths/collection-refs.js +0 -4
- package/dist/paths/collection-refs.js.map +1 -1
- package/dist/paths/collections.d.ts +0 -5
- package/dist/paths/collections.d.ts.map +1 -1
- package/dist/paths/collections.js +0 -68
- package/dist/paths/collections.js.map +1 -1
- package/dist/paths/path-builders.d.ts.map +1 -1
- package/dist/paths/path-builders.js +0 -16
- package/dist/paths/path-builders.js.map +1 -1
- package/dist/paths/picture-owner-paths.d.ts +0 -4
- package/dist/paths/picture-owner-paths.d.ts.map +1 -1
- package/dist/paths/picture-owner-paths.js +2 -11
- package/dist/paths/picture-owner-paths.js.map +1 -1
- package/dist/paths/storage-paths.d.ts +0 -18
- package/dist/paths/storage-paths.d.ts.map +1 -1
- package/dist/paths/storage-paths.js +0 -23
- package/dist/paths/storage-paths.js.map +1 -1
- package/dist/paths/utils.d.ts +0 -6
- package/dist/paths/utils.d.ts.map +1 -1
- package/dist/paths/utils.js +0 -9
- package/dist/paths/utils.js.map +1 -1
- package/dist/schemas/account-settings.d.ts.map +1 -1
- package/dist/schemas/account-settings.js +0 -7
- package/dist/schemas/account-settings.js.map +1 -1
- package/dist/schemas/admin-notifications.d.ts.map +1 -1
- package/dist/schemas/admin-notifications.js +0 -17
- package/dist/schemas/admin-notifications.js.map +1 -1
- package/dist/schemas/admin-stats.d.ts.map +1 -1
- package/dist/schemas/admin-stats.js +0 -9
- package/dist/schemas/admin-stats.js.map +1 -1
- package/dist/schemas/app-config.d.ts.map +1 -1
- package/dist/schemas/app-config.js +0 -10
- package/dist/schemas/app-config.js.map +1 -1
- package/dist/schemas/atoms.d.ts.map +1 -1
- package/dist/schemas/atoms.js +0 -10
- package/dist/schemas/atoms.js.map +1 -1
- package/dist/schemas/awards.d.ts +3 -3
- package/dist/schemas/awards.d.ts.map +1 -1
- package/dist/schemas/awards.js +0 -29
- package/dist/schemas/awards.js.map +1 -1
- package/dist/schemas/dead-letters.d.ts +0 -3
- package/dist/schemas/dead-letters.d.ts.map +1 -1
- package/dist/schemas/dead-letters.js +0 -15
- package/dist/schemas/dead-letters.js.map +1 -1
- package/dist/schemas/game-locations.d.ts.map +1 -1
- package/dist/schemas/game-locations.js +0 -6
- package/dist/schemas/game-locations.js.map +1 -1
- package/dist/schemas/hardware-loan-contracts.d.ts.map +1 -1
- package/dist/schemas/hardware-loan-contracts.js +0 -13
- package/dist/schemas/hardware-loan-contracts.js.map +1 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +0 -2
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/leagues.d.ts.map +1 -1
- package/dist/schemas/leagues.js +0 -24
- package/dist/schemas/leagues.js.map +1 -1
- package/dist/schemas/migration-console.d.ts +58 -15
- package/dist/schemas/migration-console.d.ts.map +1 -1
- package/dist/schemas/migration-console.js +4 -34
- package/dist/schemas/migration-console.js.map +1 -1
- package/dist/schemas/pictures.d.ts.map +1 -1
- package/dist/schemas/pictures.js +0 -10
- package/dist/schemas/pictures.js.map +1 -1
- package/dist/schemas/schedules.d.ts.map +1 -1
- package/dist/schemas/schedules.js +0 -26
- package/dist/schemas/schedules.js.map +1 -1
- package/dist/schemas/scoring.d.ts +20 -26
- package/dist/schemas/scoring.d.ts.map +1 -1
- package/dist/schemas/scoring.js +0 -33
- package/dist/schemas/scoring.js.map +1 -1
- package/dist/schemas/signed-waivers.d.ts.map +1 -1
- package/dist/schemas/signed-waivers.js +0 -22
- package/dist/schemas/signed-waivers.js.map +1 -1
- package/dist/schemas/stats.d.ts +12 -0
- package/dist/schemas/stats.d.ts.map +1 -1
- package/dist/schemas/stats.js +21 -61
- package/dist/schemas/stats.js.map +1 -1
- package/dist/schemas/team-joining.d.ts.map +1 -1
- package/dist/schemas/team-joining.js +0 -30
- package/dist/schemas/team-joining.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 +0 -83
- package/dist/schemas/teams.js.map +1 -1
- package/dist/schemas/uploads.d.ts +0 -8
- package/dist/schemas/uploads.d.ts.map +1 -1
- package/dist/schemas/uploads.js +0 -29
- package/dist/schemas/uploads.js.map +1 -1
- package/dist/schemas/users.d.ts +0 -1
- package/dist/schemas/users.d.ts.map +1 -1
- package/dist/schemas/users.js +0 -41
- package/dist/schemas/users.js.map +1 -1
- package/dist/schemas/waiver-templates.d.ts.map +1 -1
- package/dist/schemas/waiver-templates.js +0 -7
- package/dist/schemas/waiver-templates.js.map +1 -1
- package/dist/sports/basketball-scoring.d.ts +0 -4
- package/dist/sports/basketball-scoring.d.ts.map +1 -1
- package/dist/sports/basketball-scoring.js +0 -34
- package/dist/sports/basketball-scoring.js.map +1 -1
- package/dist/sports/basketball.d.ts.map +1 -1
- package/dist/sports/basketball.js +0 -5
- package/dist/sports/basketball.js.map +1 -1
- package/dist/sports/bulk-entry.d.ts +0 -22
- package/dist/sports/bulk-entry.d.ts.map +1 -1
- package/dist/sports/bulk-entry.js +0 -10
- package/dist/sports/bulk-entry.js.map +1 -1
- package/dist/sports/column-catalog.d.ts +0 -17
- package/dist/sports/column-catalog.d.ts.map +1 -1
- package/dist/sports/column-catalog.js +0 -10
- package/dist/sports/column-catalog.js.map +1 -1
- package/dist/sports/contribution.d.ts +2 -59
- package/dist/sports/contribution.d.ts.map +1 -1
- package/dist/sports/contribution.js +2 -45
- package/dist/sports/contribution.js.map +1 -1
- package/dist/sports/curling-scoring.d.ts +0 -1
- package/dist/sports/curling-scoring.d.ts.map +1 -1
- package/dist/sports/curling-scoring.js +0 -27
- package/dist/sports/curling-scoring.js.map +1 -1
- package/dist/sports/curling.d.ts.map +1 -1
- package/dist/sports/curling.js +0 -4
- package/dist/sports/curling.js.map +1 -1
- package/dist/sports/finalized-record.d.ts +2 -19
- package/dist/sports/finalized-record.d.ts.map +1 -1
- package/dist/sports/finalized-record.js +21 -22
- package/dist/sports/finalized-record.js.map +1 -1
- package/dist/sports/football-scoring.d.ts.map +1 -1
- package/dist/sports/football-scoring.js +0 -21
- package/dist/sports/football-scoring.js.map +1 -1
- package/dist/sports/football.d.ts.map +1 -1
- package/dist/sports/football.js +0 -4
- package/dist/sports/football.js.map +1 -1
- package/dist/sports/index.d.ts.map +1 -1
- package/dist/sports/index.js +0 -2
- package/dist/sports/index.js.map +1 -1
- package/dist/sports/ledger-continuity.d.ts +0 -2
- package/dist/sports/ledger-continuity.d.ts.map +1 -1
- package/dist/sports/ledger-continuity.js +0 -5
- package/dist/sports/ledger-continuity.js.map +1 -1
- package/dist/sports/lifetime-summary.d.ts +0 -6
- package/dist/sports/lifetime-summary.d.ts.map +1 -1
- package/dist/sports/lifetime-summary.js +0 -7
- package/dist/sports/lifetime-summary.js.map +1 -1
- package/dist/sports/rankings.d.ts +0 -12
- package/dist/sports/rankings.d.ts.map +1 -1
- package/dist/sports/rankings.js +0 -15
- package/dist/sports/rankings.js.map +1 -1
- package/dist/sports/registry.d.ts +0 -10
- package/dist/sports/registry.d.ts.map +1 -1
- package/dist/sports/registry.js +0 -9
- package/dist/sports/registry.js.map +1 -1
- package/dist/sports/replay.d.ts +0 -11
- package/dist/sports/replay.d.ts.map +1 -1
- package/dist/sports/replay.js +0 -16
- package/dist/sports/replay.js.map +1 -1
- package/dist/sports/rollup-check.d.ts +0 -7
- package/dist/sports/rollup-check.d.ts.map +1 -1
- package/dist/sports/rollup-check.js +0 -14
- package/dist/sports/rollup-check.js.map +1 -1
- package/dist/sports/score-mirror.d.ts +0 -1
- package/dist/sports/score-mirror.d.ts.map +1 -1
- package/dist/sports/score-mirror.js +0 -4
- package/dist/sports/score-mirror.js.map +1 -1
- package/dist/sports/scoring-display.d.ts +0 -30
- package/dist/sports/scoring-display.d.ts.map +1 -1
- package/dist/sports/scoring-display.js +0 -9
- package/dist/sports/scoring-display.js.map +1 -1
- package/dist/sports/scoring.d.ts +0 -36
- package/dist/sports/scoring.d.ts.map +1 -1
- package/dist/sports/scoring.js +0 -10
- package/dist/sports/scoring.js.map +1 -1
- package/dist/sports/shared-columns.d.ts +0 -1
- package/dist/sports/shared-columns.d.ts.map +1 -1
- package/dist/sports/shared-columns.js +0 -7
- package/dist/sports/shared-columns.js.map +1 -1
- package/dist/sports/sport-adapter.d.ts +0 -32
- package/dist/sports/sport-adapter.d.ts.map +1 -1
- package/dist/sports/sport-adapter.js +0 -7
- package/dist/sports/sport-adapter.js.map +1 -1
- package/dist/sports/store-driver.d.ts +0 -28
- package/dist/sports/store-driver.d.ts.map +1 -1
- package/dist/sports/store-driver.js +0 -38
- package/dist/sports/store-driver.js.map +1 -1
- package/dist/types/audit.d.ts +1 -1
- package/dist/types/audit.d.ts.map +1 -1
- package/dist/types/audit.js +1 -67
- package/dist/types/audit.js.map +1 -1
- package/dist/types/claims.d.ts +0 -10
- package/dist/types/claims.d.ts.map +1 -1
- package/dist/types/claims.js +0 -16
- package/dist/types/claims.js.map +1 -1
- package/dist/types/notifications.d.ts.map +1 -1
- package/dist/types/notifications.js +7 -25
- package/dist/types/notifications.js.map +1 -1
- package/dist/types/picture-owners.d.ts +0 -1
- package/dist/types/picture-owners.d.ts.map +1 -1
- package/dist/types/picture-owners.js +0 -6
- package/dist/types/picture-owners.js.map +1 -1
- package/dist/types/schedules.d.ts.map +1 -1
- package/dist/types/schedules.js +0 -9
- package/dist/types/schedules.js.map +1 -1
- package/dist/types/sports.d.ts.map +1 -1
- package/dist/types/sports.js +0 -24
- package/dist/types/sports.js.map +1 -1
- package/dist/types/stats.d.ts.map +1 -1
- package/dist/types/stats.js +0 -65
- package/dist/types/stats.js.map +1 -1
- package/dist/types/unions.d.ts +0 -2
- package/dist/types/unions.d.ts.map +1 -1
- package/dist/types/unions.js +3 -91
- package/dist/types/unions.js.map +1 -1
- package/dist/types/uploads.d.ts.map +1 -1
- package/dist/types/uploads.js +0 -7
- package/dist/types/uploads.js.map +1 -1
- package/dist/upload-variables/on-progress.d.ts.map +1 -1
- package/dist/upload-variables/on-progress.js +2 -5
- package/dist/upload-variables/on-progress.js.map +1 -1
- package/dist/upload-variables/picture-upload-variables.d.ts +0 -1
- package/dist/upload-variables/picture-upload-variables.d.ts.map +1 -1
- package/dist/upload-variables/picture-upload-variables.js +0 -4
- package/dist/upload-variables/picture-upload-variables.js.map +1 -1
- package/dist/upload-variables/sign-hardware-contract-variables.d.ts.map +1 -1
- package/dist/upload-variables/sign-hardware-contract-variables.js +0 -2
- package/dist/upload-variables/sign-hardware-contract-variables.js.map +1 -1
- package/dist/upload-variables/sign-waiver-variables.d.ts.map +1 -1
- package/dist/upload-variables/sign-waiver-variables.js +0 -4
- package/dist/upload-variables/sign-waiver-variables.js.map +1 -1
- package/dist/utils/account-status.d.ts.map +1 -1
- package/dist/utils/account-status.js +0 -4
- package/dist/utils/account-status.js.map +1 -1
- package/dist/utils/app-config.d.ts +0 -53
- package/dist/utils/app-config.d.ts.map +1 -1
- package/dist/utils/app-config.js +0 -62
- package/dist/utils/app-config.js.map +1 -1
- package/dist/utils/display-name.d.ts +0 -7
- package/dist/utils/display-name.d.ts.map +1 -1
- package/dist/utils/display-name.js +0 -8
- package/dist/utils/display-name.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/league-calendar.d.ts +0 -11
- package/dist/utils/league-calendar.d.ts.map +1 -1
- package/dist/utils/league-calendar.js +7 -19
- package/dist/utils/league-calendar.js.map +1 -1
- package/dist/utils/league-join-warning.d.ts +0 -11
- package/dist/utils/league-join-warning.d.ts.map +1 -1
- package/dist/utils/league-join-warning.js +0 -28
- package/dist/utils/league-join-warning.js.map +1 -1
- package/dist/utils/league-joining.d.ts +0 -1
- package/dist/utils/league-joining.d.ts.map +1 -1
- package/dist/utils/league-joining.js +0 -7
- package/dist/utils/league-joining.js.map +1 -1
- package/dist/utils/league-mode.d.ts +0 -1
- package/dist/utils/league-mode.d.ts.map +1 -1
- package/dist/utils/league-mode.js +0 -4
- package/dist/utils/league-mode.js.map +1 -1
- package/dist/utils/schedules.d.ts +0 -15
- package/dist/utils/schedules.d.ts.map +1 -1
- package/dist/utils/schedules.js +0 -19
- package/dist/utils/schedules.js.map +1 -1
- package/dist/utils/stats-operation-request.d.ts +20 -0
- package/dist/utils/stats-operation-request.d.ts.map +1 -0
- package/dist/utils/stats-operation-request.js +10 -0
- package/dist/utils/stats-operation-request.js.map +1 -0
- package/dist/utils/team-creation.d.ts +0 -2
- package/dist/utils/team-creation.d.ts.map +1 -1
- package/dist/utils/team-creation.js +0 -6
- package/dist/utils/team-creation.js.map +1 -1
- package/dist/utils/team-member-actions.d.ts +0 -6
- package/dist/utils/team-member-actions.d.ts.map +1 -1
- package/dist/utils/team-member-actions.js +0 -12
- package/dist/utils/team-member-actions.js.map +1 -1
- package/package.json +2 -1
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// Field atoms shared by the document schemas and the callable schemas. Every enum derives from its
|
|
2
|
-
// one canonical key array in ../types — never re-declared.
|
|
3
1
|
import { z } from 'zod';
|
|
4
2
|
import { checkInputFormat, } from '@ttt-productions/input-format-core';
|
|
5
3
|
import { REPAIR_REASON_INPUT_FORMAT } from '../input-formats/input-formats.js';
|
|
@@ -8,28 +6,15 @@ import { isStagingId } from '../ids/picture-ids.js';
|
|
|
8
6
|
import { isDocumentIdSegment } from '../paths/utils.js';
|
|
9
7
|
import { BASKETBALL_BULK_STAT_KEYS, LEAGUE_TYPE_KEYS, SPORT_KEYS, STAT_COUNTER_KEYS, } from '../types/sports.js';
|
|
10
8
|
import { GAME_STATUS_KEYS, HARDWARE_LOAN_CONTRACT_STATUS_KEYS, MEMBERSHIP_ROSTER_SYNC_STATUS_KEYS, TEAM_JOIN_REQUEST_STATUS_KEYS, LEAGUE_MODE_KEYS, LEAGUE_STATUS_KEYS, STATS_BEACON_ACTION_KEYS, STATS_DISCREPANCY_KIND_KEYS, TEAM_ICON_KEYS, TEAM_INVITATION_STATUS_KEYS, TEAM_JOIN_METHOD_KEYS, TEAM_MEMBERSHIP_STATUS_KEYS, TEAM_ROLE_KEYS, SYSTEM_ROLE_KEYS, TEAM_TYPE_KEYS, USER_STATUS_KEYS, WAIVER_WITNESS_AUTHORITY_KEYS, } from '../types/unions.js';
|
|
11
|
-
// Every persisted moment is an epoch-millisecond number (RULE-STD-ARCH-105).
|
|
12
9
|
export const epochMsSchema = z.number().int().nonnegative();
|
|
13
|
-
// A tally: a stat line's counter, a games-played count, a run's page counts.
|
|
14
10
|
export const countSchema = z.number().int().nonnegative();
|
|
15
|
-
// A change revision: advanced by one with every change to what it versions, so the first writes 1.
|
|
16
11
|
export const revisionSchema = z.number().int().positive();
|
|
17
|
-
// The revision a reconciler last finished: 0 before its first finish, never past the revision.
|
|
18
12
|
export const appliedRevisionSchema = z.number().int().nonnegative();
|
|
19
|
-
/**
|
|
20
|
-
* Why `checkInputFormat` refused a text, as a field's wire schema words it, with the declaration's
|
|
21
|
-
* bounds: a required field left blank is "Required.", a short one names its minimum, a long one its
|
|
22
|
-
* maximum.
|
|
23
|
-
*/
|
|
24
13
|
export const TEXT_FIELD_ISSUE_MESSAGES = {
|
|
25
14
|
tooShort: ({ min }) => (min <= 1 ? 'Required.' : `At least ${min} characters.`),
|
|
26
15
|
tooLong: ({ max }) => `At most ${max} characters.`,
|
|
27
16
|
invalidCharacters: () => 'Holds a character this field does not allow.',
|
|
28
17
|
};
|
|
29
|
-
/**
|
|
30
|
-
* Checks `text` against its field's declaration: the value the field keeps, or the sentence that
|
|
31
|
-
* refuses it — the same words `textFieldSchema` gives the wire.
|
|
32
|
-
*/
|
|
33
18
|
export function checkTextField(declaration, text) {
|
|
34
19
|
const result = checkInputFormat(text, declaration);
|
|
35
20
|
if (result.ok)
|
|
@@ -50,15 +35,8 @@ export function textFieldSchema(declaration) {
|
|
|
50
35
|
return z.NEVER;
|
|
51
36
|
});
|
|
52
37
|
}
|
|
53
|
-
// Required on every repair action and recorded with the state it replaced (RULE-STD-BACKEND-212): the
|
|
54
|
-
// callable's input, and the correction event and stats operation that store it.
|
|
55
38
|
export const repairReasonSchema = textFieldSchema(REPAIR_REASON_INPUT_FORMAT);
|
|
56
|
-
/** The shape of a calendar date, `YYYY-MM-DD`; a form names the issue it raises by this pattern. */
|
|
57
39
|
export const CALENDAR_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
|
|
58
|
-
// A calendar date with no time or zone: `YYYY-MM-DD`, naming a day that exists — the pattern alone
|
|
59
|
-
// admits `2026-02-31`. League start/end dates and a game's dayKey. Two of them compare correctly as
|
|
60
|
-
// strings. A value that fails the pattern stops there: an empty or misshapen value is not a date at
|
|
61
|
-
// all, so it carries the one pattern issue (a form's "Choose a date."), never a second about the day.
|
|
62
40
|
export const calendarDateSchema = z
|
|
63
41
|
.string()
|
|
64
42
|
.regex(CALENDAR_DATE_PATTERN, { abort: true })
|
|
@@ -66,11 +44,6 @@ export const calendarDateSchema = z
|
|
|
66
44
|
const day = new Date(`${value}T00:00:00.000Z`);
|
|
67
45
|
return !Number.isNaN(day.getTime()) && day.toISOString().startsWith(value);
|
|
68
46
|
}, 'Not a real calendar date.');
|
|
69
|
-
// Every id a document path is built from is exactly one path segment (RULE-STD-ARCH-106): a client-sent id
|
|
70
|
-
// holding a `/` or empty would address another document, a subcollection, or the collection itself.
|
|
71
|
-
// Each entity's atom builds on this one; there is no generic idSchema for a field to use instead. An
|
|
72
|
-
// empty id stops at its one length issue — a form's "Required." for a choice left unmade — never a
|
|
73
|
-
// second about the segment.
|
|
74
47
|
export const documentIdSegmentSchema = z
|
|
75
48
|
.string()
|
|
76
49
|
.min(1, { abort: true })
|
|
@@ -79,21 +52,12 @@ export const userIdSchema = documentIdSegmentSchema;
|
|
|
79
52
|
export const leagueIdSchema = documentIdSegmentSchema;
|
|
80
53
|
export const teamIdSchema = documentIdSegmentSchema;
|
|
81
54
|
export const gameIdSchema = documentIdSegmentSchema;
|
|
82
|
-
// A week of a league's schedule. A week has no document: its games carry the id and the week's
|
|
83
|
-
// shared fields, and the league's weeks are rebuilt by grouping its games on it.
|
|
84
55
|
export const scheduleWeekIdSchema = documentIdSegmentSchema;
|
|
85
|
-
// A game roster entry, `{teamId}_{userId}`: its roster document id, the key of its line in the
|
|
86
|
-
// game's `stats.playerStats`, and its member of the game's absence and participation lists.
|
|
87
56
|
export const gameRosterPlayerIdSchema = documentIdSegmentSchema.refine((id) => parseGameRosterPlayerId(id) !== null, 'Not a game roster entry id.');
|
|
88
|
-
// Equal to the stat event's document id.
|
|
89
57
|
export const statEventIdSchema = documentIdSegmentSchema;
|
|
90
58
|
export const statsOperationIdSchema = documentIdSegmentSchema;
|
|
91
|
-
// A stats check's report is keyed by the check's operation id.
|
|
92
59
|
export const statsValidationReportIdSchema = statsOperationIdSchema;
|
|
93
|
-
// A hardware loan contract's id, minted by the creating callable.
|
|
94
60
|
export const hardwareLoanContractIdSchema = documentIdSegmentSchema;
|
|
95
|
-
// The id a client mints for one upload, the last segment of its staging path: a lowercase UUID. A
|
|
96
|
-
// picture's id is its upload's staging id, so `pictureIdSchema` is this atom.
|
|
97
61
|
export const stagingIdSchema = z.string().refine(isStagingId, 'Not a staging id.');
|
|
98
62
|
export const leagueTypeSchema = z.enum(LEAGUE_TYPE_KEYS);
|
|
99
63
|
export const sportKeySchema = z.enum(SPORT_KEYS);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atoms.js","sourceRoot":"","sources":["../../src/doc-schemas/atoms.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,2DAA2D;AAE3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,gBAAgB,GAGjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,kCAAkC,EAClC,kCAAkC,EAClC,6BAA6B,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,2BAA2B,EAC3B,cAAc,EACd,2BAA2B,EAC3B,qBAAqB,EACrB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAE5B,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AAE5D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AAE1D,mGAAmG;AACnG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE1D,+FAA+F;AAC/F,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AAEpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAElC;IACF,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,GAAG,cAAc,CAAC;IAC/E,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,WAAW,GAAG,cAAc;IAClD,iBAAiB,EAAE,GAAG,EAAE,CAAC,8CAA8C;CACxE,CAAC;AAcF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,WAAiC,EAAE,IAAY;IAC5E,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IACxD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAgC;IAC9D,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC;QACnC,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,yBAAyB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;YAC7D,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE;SAC5E,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,KAAK,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sGAAsG;AACtG,gFAAgF;AAChF,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC,0BAA0B,CAAC,CAAC;AAE9E,oGAAoG;AACpG,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC;AAE3D,mGAAmG;AACnG,oGAAoG;AACpG,oGAAoG;AACpG,sGAAsG;AACtG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,EAAE;KACR,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KAC7C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IAChB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,gBAAgB,CAAC,CAAC;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC,EAAE,2BAA2B,CAAC,CAAC;AAElC,2GAA2G;AAC3G,oGAAoG;AACpG,qGAAqG;AACrG,mGAAmG;AACnG,4BAA4B;AAC5B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACvB,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AACpD,MAAM,CAAC,MAAM,cAAc,GAAG,uBAAuB,CAAC;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AACpD,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AACpD,+FAA+F;AAC/F,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAC5D,+FAA+F;AAC/F,4FAA4F;AAC5F,MAAM,CAAC,MAAM,wBAAwB,GAAG,uBAAuB,CAAC,MAAM,CACpE,CAAC,EAAE,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC,KAAK,IAAI,EAC5C,6BAA6B,CAC9B,CAAC;AACF,yCAAyC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AACzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAC9D,+DAA+D;AAC/D,MAAM,CAAC,MAAM,6BAA6B,GAAG,sBAAsB,CAAC;AACpE,kEAAkE;AAClE,MAAM,CAAC,MAAM,4BAA4B,GAAG,uBAAuB,CAAC;AACpE,kGAAkG;AAClG,8EAA8E;AAC9E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;AAEnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACjF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;AAC3F,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;AAC3F,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AAClF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC","sourcesContent":["// Field atoms shared by the document schemas and the callable schemas. Every enum derives from its\n// one canonical key array in ../types — never re-declared.\n\nimport { z } from 'zod';\nimport {\n checkInputFormat,\n type DeclaredInputFormat,\n type InputFormatIssue,\n} from '@ttt-productions/input-format-core';\nimport { REPAIR_REASON_INPUT_FORMAT } from '../input-formats/input-formats.js';\nimport { parseGameRosterPlayerId } from '../ids/compound-ids.js';\nimport { isStagingId } from '../ids/picture-ids.js';\nimport { isDocumentIdSegment } from '../paths/utils.js';\nimport {\n BASKETBALL_BULK_STAT_KEYS,\n LEAGUE_TYPE_KEYS,\n SPORT_KEYS,\n STAT_COUNTER_KEYS,\n} from '../types/sports.js';\nimport {\n GAME_STATUS_KEYS,\n HARDWARE_LOAN_CONTRACT_STATUS_KEYS,\n MEMBERSHIP_ROSTER_SYNC_STATUS_KEYS,\n TEAM_JOIN_REQUEST_STATUS_KEYS,\n LEAGUE_MODE_KEYS,\n LEAGUE_STATUS_KEYS,\n STATS_BEACON_ACTION_KEYS,\n STATS_DISCREPANCY_KIND_KEYS,\n TEAM_ICON_KEYS,\n TEAM_INVITATION_STATUS_KEYS,\n TEAM_JOIN_METHOD_KEYS,\n TEAM_MEMBERSHIP_STATUS_KEYS,\n TEAM_ROLE_KEYS,\n SYSTEM_ROLE_KEYS,\n TEAM_TYPE_KEYS,\n USER_STATUS_KEYS,\n WAIVER_WITNESS_AUTHORITY_KEYS,\n} from '../types/unions.js';\n\n// Every persisted moment is an epoch-millisecond number (RULE-STD-ARCH-105).\nexport const epochMsSchema = z.number().int().nonnegative();\n\n// A tally: a stat line's counter, a games-played count, a run's page counts.\nexport const countSchema = z.number().int().nonnegative();\n\n// A change revision: advanced by one with every change to what it versions, so the first writes 1.\nexport const revisionSchema = z.number().int().positive();\n\n// The revision a reconciler last finished: 0 before its first finish, never past the revision.\nexport const appliedRevisionSchema = z.number().int().nonnegative();\n\n/**\n * Why `checkInputFormat` refused a text, as a field's wire schema words it, with the declaration's\n * bounds: a required field left blank is \"Required.\", a short one names its minimum, a long one its\n * maximum.\n */\nexport const TEXT_FIELD_ISSUE_MESSAGES: Readonly<\n Record<InputFormatIssue, (declaration: DeclaredInputFormat) => string>\n> = {\n tooShort: ({ min }) => (min <= 1 ? 'Required.' : `At least ${min} characters.`),\n tooLong: ({ max }) => `At most ${max} characters.`,\n invalidCharacters: () => 'Holds a character this field does not allow.',\n};\n\n/**\n * A text field's wire schema, built from the field's one declaration: it runs input-format-core's\n * check — trim, then min, max, and the format's characters — and parses to the text the check keeps.\n * The form's input reads the same declaration, so the two accept exactly the same text (RULE-STD-ARCH-102). A\n * refusal carries the issue and the declaration's bounds, so a form can say which bound was missed.\n */\n/** A text field's declaration, as a form and its wire schema both read it. */\nexport type TextFieldDeclaration = DeclaredInputFormat;\n\nexport type TextFieldResult =\n { readonly ok: true; readonly value: string } | { readonly ok: false; readonly reason: string };\n\n/**\n * Checks `text` against its field's declaration: the value the field keeps, or the sentence that\n * refuses it — the same words `textFieldSchema` gives the wire.\n */\nexport function checkTextField(declaration: TextFieldDeclaration, text: string): TextFieldResult {\n const result = checkInputFormat(text, declaration);\n if (result.ok) return { ok: true, value: result.value };\n return { ok: false, reason: TEXT_FIELD_ISSUE_MESSAGES[result.issue](declaration) };\n}\n\nexport function textFieldSchema(declaration: DeclaredInputFormat) {\n return z.string().transform((text, ctx) => {\n const result = checkInputFormat(text, declaration);\n if (result.ok) return result.value;\n ctx.addIssue({\n code: 'custom',\n message: TEXT_FIELD_ISSUE_MESSAGES[result.issue](declaration),\n input: text,\n params: { issue: result.issue, min: declaration.min, max: declaration.max },\n });\n return z.NEVER;\n });\n}\n\n// Required on every repair action and recorded with the state it replaced (RULE-STD-BACKEND-212): the\n// callable's input, and the correction event and stats operation that store it.\nexport const repairReasonSchema = textFieldSchema(REPAIR_REASON_INPUT_FORMAT);\n\n/** The shape of a calendar date, `YYYY-MM-DD`; a form names the issue it raises by this pattern. */\nexport const CALENDAR_DATE_PATTERN = /^\\d{4}-\\d{2}-\\d{2}$/;\n\n// A calendar date with no time or zone: `YYYY-MM-DD`, naming a day that exists — the pattern alone\n// admits `2026-02-31`. League start/end dates and a game's dayKey. Two of them compare correctly as\n// strings. A value that fails the pattern stops there: an empty or misshapen value is not a date at\n// all, so it carries the one pattern issue (a form's \"Choose a date.\"), never a second about the day.\nexport const calendarDateSchema = z\n .string()\n .regex(CALENDAR_DATE_PATTERN, { abort: true })\n .refine((value) => {\n const day = new Date(`${value}T00:00:00.000Z`);\n return !Number.isNaN(day.getTime()) && day.toISOString().startsWith(value);\n }, 'Not a real calendar date.');\n\n// Every id a document path is built from is exactly one path segment (RULE-STD-ARCH-106): a client-sent id\n// holding a `/` or empty would address another document, a subcollection, or the collection itself.\n// Each entity's atom builds on this one; there is no generic idSchema for a field to use instead. An\n// empty id stops at its one length issue — a form's \"Required.\" for a choice left unmade — never a\n// second about the segment.\nexport const documentIdSegmentSchema = z\n .string()\n .min(1, { abort: true })\n .refine(isDocumentIdSegment, 'Not a document id.');\n\nexport const userIdSchema = documentIdSegmentSchema;\nexport const leagueIdSchema = documentIdSegmentSchema;\nexport const teamIdSchema = documentIdSegmentSchema;\nexport const gameIdSchema = documentIdSegmentSchema;\n// A week of a league's schedule. A week has no document: its games carry the id and the week's\n// shared fields, and the league's weeks are rebuilt by grouping its games on it.\nexport const scheduleWeekIdSchema = documentIdSegmentSchema;\n// A game roster entry, `{teamId}_{userId}`: its roster document id, the key of its line in the\n// game's `stats.playerStats`, and its member of the game's absence and participation lists.\nexport const gameRosterPlayerIdSchema = documentIdSegmentSchema.refine(\n (id) => parseGameRosterPlayerId(id) !== null,\n 'Not a game roster entry id.',\n);\n// Equal to the stat event's document id.\nexport const statEventIdSchema = documentIdSegmentSchema;\nexport const statsOperationIdSchema = documentIdSegmentSchema;\n// A stats check's report is keyed by the check's operation id.\nexport const statsValidationReportIdSchema = statsOperationIdSchema;\n// A hardware loan contract's id, minted by the creating callable.\nexport const hardwareLoanContractIdSchema = documentIdSegmentSchema;\n// The id a client mints for one upload, the last segment of its staging path: a lowercase UUID. A\n// picture's id is its upload's staging id, so `pictureIdSchema` is this atom.\nexport const stagingIdSchema = z.string().refine(isStagingId, 'Not a staging id.');\n\nexport const leagueTypeSchema = z.enum(LEAGUE_TYPE_KEYS);\nexport const sportKeySchema = z.enum(SPORT_KEYS);\nexport const leagueStatusSchema = z.enum(LEAGUE_STATUS_KEYS);\nexport const leagueModeSchema = z.enum(LEAGUE_MODE_KEYS);\nexport const teamTypeSchema = z.enum(TEAM_TYPE_KEYS);\nexport const teamIconSchema = z.enum(TEAM_ICON_KEYS);\nexport const teamRoleSchema = z.enum(TEAM_ROLE_KEYS);\nexport const systemRoleSchema = z.enum(SYSTEM_ROLE_KEYS);\nexport const userStatusSchema = z.enum(USER_STATUS_KEYS);\nexport const teamMembershipStatusSchema = z.enum(TEAM_MEMBERSHIP_STATUS_KEYS);\nexport const teamJoinMethodSchema = z.enum(TEAM_JOIN_METHOD_KEYS);\nexport const gameStatusSchema = z.enum(GAME_STATUS_KEYS);\nexport const teamInvitationStatusSchema = z.enum(TEAM_INVITATION_STATUS_KEYS);\nexport const teamJoinRequestStatusSchema = z.enum(TEAM_JOIN_REQUEST_STATUS_KEYS);\nexport const hardwareLoanContractStatusSchema = z.enum(HARDWARE_LOAN_CONTRACT_STATUS_KEYS);\nexport const membershipRosterSyncStatusSchema = z.enum(MEMBERSHIP_ROSTER_SYNC_STATUS_KEYS);\nexport const waiverWitnessAuthoritySchema = z.enum(WAIVER_WITNESS_AUTHORITY_KEYS);\nexport const statsBeaconActionSchema = z.enum(STATS_BEACON_ACTION_KEYS);\nexport const statsDiscrepancyKindSchema = z.enum(STATS_DISCREPANCY_KIND_KEYS);\nexport const basketballBulkStatKeySchema = z.enum(BASKETBALL_BULK_STAT_KEYS);\nexport const statCounterKeySchema = z.enum(STAT_COUNTER_KEYS);\n"]}
|
|
1
|
+
{"version":3,"file":"atoms.js","sourceRoot":"","sources":["../../src/doc-schemas/atoms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,gBAAgB,GAGjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,kCAAkC,EAClC,kCAAkC,EAClC,6BAA6B,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,2BAA2B,EAC3B,cAAc,EACd,2BAA2B,EAC3B,qBAAqB,EACrB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AAE5D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AAEpE,MAAM,CAAC,MAAM,yBAAyB,GAElC;IACF,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,GAAG,cAAc,CAAC;IAC/E,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,WAAW,GAAG,cAAc;IAClD,iBAAiB,EAAE,GAAG,EAAE,CAAC,8CAA8C;CACxE,CAAC;AAOF,MAAM,UAAU,cAAc,CAAC,WAAiC,EAAE,IAAY;IAC5E,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IACxD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAgC;IAC9D,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC;QACnC,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,yBAAyB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;YAC7D,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE;SAC5E,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,KAAK,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC,0BAA0B,CAAC,CAAC;AAE9E,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC;AAE3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,EAAE;KACR,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KAC7C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IAChB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,gBAAgB,CAAC,CAAC;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC,EAAE,2BAA2B,CAAC,CAAC;AAElC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACvB,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AACpD,MAAM,CAAC,MAAM,cAAc,GAAG,uBAAuB,CAAC;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AACpD,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAC5D,MAAM,CAAC,MAAM,wBAAwB,GAAG,uBAAuB,CAAC,MAAM,CACpE,CAAC,EAAE,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC,KAAK,IAAI,EAC5C,6BAA6B,CAC9B,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AACzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAC9D,MAAM,CAAC,MAAM,6BAA6B,GAAG,sBAAsB,CAAC;AACpE,MAAM,CAAC,MAAM,4BAA4B,GAAG,uBAAuB,CAAC;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;AAEnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACjF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;AAC3F,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;AAC3F,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AAClF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\nimport {\n checkInputFormat,\n type DeclaredInputFormat,\n type InputFormatIssue,\n} from '@ttt-productions/input-format-core';\nimport { REPAIR_REASON_INPUT_FORMAT } from '../input-formats/input-formats.js';\nimport { parseGameRosterPlayerId } from '../ids/compound-ids.js';\nimport { isStagingId } from '../ids/picture-ids.js';\nimport { isDocumentIdSegment } from '../paths/utils.js';\nimport {\n BASKETBALL_BULK_STAT_KEYS,\n LEAGUE_TYPE_KEYS,\n SPORT_KEYS,\n STAT_COUNTER_KEYS,\n} from '../types/sports.js';\nimport {\n GAME_STATUS_KEYS,\n HARDWARE_LOAN_CONTRACT_STATUS_KEYS,\n MEMBERSHIP_ROSTER_SYNC_STATUS_KEYS,\n TEAM_JOIN_REQUEST_STATUS_KEYS,\n LEAGUE_MODE_KEYS,\n LEAGUE_STATUS_KEYS,\n STATS_BEACON_ACTION_KEYS,\n STATS_DISCREPANCY_KIND_KEYS,\n TEAM_ICON_KEYS,\n TEAM_INVITATION_STATUS_KEYS,\n TEAM_JOIN_METHOD_KEYS,\n TEAM_MEMBERSHIP_STATUS_KEYS,\n TEAM_ROLE_KEYS,\n SYSTEM_ROLE_KEYS,\n TEAM_TYPE_KEYS,\n USER_STATUS_KEYS,\n WAIVER_WITNESS_AUTHORITY_KEYS,\n} from '../types/unions.js';\n\nexport const epochMsSchema = z.number().int().nonnegative();\n\nexport const countSchema = z.number().int().nonnegative();\n\nexport const revisionSchema = z.number().int().positive();\n\nexport const appliedRevisionSchema = z.number().int().nonnegative();\n\nexport const TEXT_FIELD_ISSUE_MESSAGES: Readonly<\n Record<InputFormatIssue, (declaration: DeclaredInputFormat) => string>\n> = {\n tooShort: ({ min }) => (min <= 1 ? 'Required.' : `At least ${min} characters.`),\n tooLong: ({ max }) => `At most ${max} characters.`,\n invalidCharacters: () => 'Holds a character this field does not allow.',\n};\n\nexport type TextFieldDeclaration = DeclaredInputFormat;\n\nexport type TextFieldResult =\n { readonly ok: true; readonly value: string } | { readonly ok: false; readonly reason: string };\n\nexport function checkTextField(declaration: TextFieldDeclaration, text: string): TextFieldResult {\n const result = checkInputFormat(text, declaration);\n if (result.ok) return { ok: true, value: result.value };\n return { ok: false, reason: TEXT_FIELD_ISSUE_MESSAGES[result.issue](declaration) };\n}\n\nexport function textFieldSchema(declaration: DeclaredInputFormat) {\n return z.string().transform((text, ctx) => {\n const result = checkInputFormat(text, declaration);\n if (result.ok) return result.value;\n ctx.addIssue({\n code: 'custom',\n message: TEXT_FIELD_ISSUE_MESSAGES[result.issue](declaration),\n input: text,\n params: { issue: result.issue, min: declaration.min, max: declaration.max },\n });\n return z.NEVER;\n });\n}\n\nexport const repairReasonSchema = textFieldSchema(REPAIR_REASON_INPUT_FORMAT);\n\nexport const CALENDAR_DATE_PATTERN = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nexport const calendarDateSchema = z\n .string()\n .regex(CALENDAR_DATE_PATTERN, { abort: true })\n .refine((value) => {\n const day = new Date(`${value}T00:00:00.000Z`);\n return !Number.isNaN(day.getTime()) && day.toISOString().startsWith(value);\n }, 'Not a real calendar date.');\n\nexport const documentIdSegmentSchema = z\n .string()\n .min(1, { abort: true })\n .refine(isDocumentIdSegment, 'Not a document id.');\n\nexport const userIdSchema = documentIdSegmentSchema;\nexport const leagueIdSchema = documentIdSegmentSchema;\nexport const teamIdSchema = documentIdSegmentSchema;\nexport const gameIdSchema = documentIdSegmentSchema;\nexport const scheduleWeekIdSchema = documentIdSegmentSchema;\nexport const gameRosterPlayerIdSchema = documentIdSegmentSchema.refine(\n (id) => parseGameRosterPlayerId(id) !== null,\n 'Not a game roster entry id.',\n);\nexport const statEventIdSchema = documentIdSegmentSchema;\nexport const statsOperationIdSchema = documentIdSegmentSchema;\nexport const statsValidationReportIdSchema = statsOperationIdSchema;\nexport const hardwareLoanContractIdSchema = documentIdSegmentSchema;\nexport const stagingIdSchema = z.string().refine(isStagingId, 'Not a staging id.');\n\nexport const leagueTypeSchema = z.enum(LEAGUE_TYPE_KEYS);\nexport const sportKeySchema = z.enum(SPORT_KEYS);\nexport const leagueStatusSchema = z.enum(LEAGUE_STATUS_KEYS);\nexport const leagueModeSchema = z.enum(LEAGUE_MODE_KEYS);\nexport const teamTypeSchema = z.enum(TEAM_TYPE_KEYS);\nexport const teamIconSchema = z.enum(TEAM_ICON_KEYS);\nexport const teamRoleSchema = z.enum(TEAM_ROLE_KEYS);\nexport const systemRoleSchema = z.enum(SYSTEM_ROLE_KEYS);\nexport const userStatusSchema = z.enum(USER_STATUS_KEYS);\nexport const teamMembershipStatusSchema = z.enum(TEAM_MEMBERSHIP_STATUS_KEYS);\nexport const teamJoinMethodSchema = z.enum(TEAM_JOIN_METHOD_KEYS);\nexport const gameStatusSchema = z.enum(GAME_STATUS_KEYS);\nexport const teamInvitationStatusSchema = z.enum(TEAM_INVITATION_STATUS_KEYS);\nexport const teamJoinRequestStatusSchema = z.enum(TEAM_JOIN_REQUEST_STATUS_KEYS);\nexport const hardwareLoanContractStatusSchema = z.enum(HARDWARE_LOAN_CONTRACT_STATUS_KEYS);\nexport const membershipRosterSyncStatusSchema = z.enum(MEMBERSHIP_ROSTER_SYNC_STATUS_KEYS);\nexport const waiverWitnessAuthoritySchema = z.enum(WAIVER_WITNESS_AUTHORITY_KEYS);\nexport const statsBeaconActionSchema = z.enum(STATS_BEACON_ACTION_KEYS);\nexport const statsDiscrepancyKindSchema = z.enum(STATS_DISCREPANCY_KIND_KEYS);\nexport const basketballBulkStatKeySchema = z.enum(BASKETBALL_BULK_STAT_KEYS);\nexport const statCounterKeySchema = z.enum(STAT_COUNTER_KEYS);\n"]}
|
|
@@ -49,6 +49,7 @@ export declare const auditEventTypeSchema: z.ZodEnum<{
|
|
|
49
49
|
"award.deleted": "award.deleted";
|
|
50
50
|
"award.granted": "award.granted";
|
|
51
51
|
"award.revoked": "award.revoked";
|
|
52
|
+
"award.groupDecisionOpened": "award.groupDecisionOpened";
|
|
52
53
|
"hardwareLoanContract.created": "hardwareLoanContract.created";
|
|
53
54
|
"hardwareLoanContract.signed": "hardwareLoanContract.signed";
|
|
54
55
|
"hardwareLoanContract.returned": "hardwareLoanContract.returned";
|
|
@@ -165,6 +166,7 @@ export declare const AuditEventSchema: z.ZodObject<{
|
|
|
165
166
|
"award.deleted": "award.deleted";
|
|
166
167
|
"award.granted": "award.granted";
|
|
167
168
|
"award.revoked": "award.revoked";
|
|
169
|
+
"award.groupDecisionOpened": "award.groupDecisionOpened";
|
|
168
170
|
"hardwareLoanContract.created": "hardwareLoanContract.created";
|
|
169
171
|
"hardwareLoanContract.signed": "hardwareLoanContract.signed";
|
|
170
172
|
"hardwareLoanContract.returned": "hardwareLoanContract.returned";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-event.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/audit-event.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audit-event.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/audit-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAgC,CAAC;AAElE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;iCAgB3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAc3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
// `auditEvents/{auditEventId}` — the append-only record of sensitive actions and their rejected
|
|
2
|
-
// attempts (RULE-STD-BACKEND-202..205). Written only by Cloud Functions through the audit writer, in the
|
|
3
|
-
// same transaction or batch as the action it records; no client reads or writes it.
|
|
4
|
-
//
|
|
5
|
-
// The envelope is `@ttt-productions/audit-core`'s `AuditEvent`; Q-Sports supplies the event-type
|
|
6
|
-
// union and the actor / target shapes. The admin modes carry the global role they acted with and the
|
|
7
|
-
// others carry none (RULE-STD-BACKEND-205).
|
|
8
1
|
import { z } from 'zod';
|
|
9
2
|
import { AUDIT_ADMIN_ACTOR_MODE_KEYS, AUDIT_EVENT_TYPE_KEYS, AUDIT_NON_ADMIN_ACTOR_MODE_KEYS, AUDIT_RESULT_KEYS, } from '../types/audit.js';
|
|
10
3
|
import { epochMsSchema, systemRoleSchema, userIdSchema } from './atoms.js';
|
|
@@ -40,7 +33,6 @@ export const AuditEventSchema = z.object({
|
|
|
40
33
|
ip: z.string().nullable(),
|
|
41
34
|
userAgent: z.string().nullable(),
|
|
42
35
|
region: z.string().nullable(),
|
|
43
|
-
// Event-specific facts: prior and new values, the role changed, a repair's reason.
|
|
44
36
|
metadata: z.record(z.string(), z.unknown()),
|
|
45
37
|
result: z.enum(AUDIT_RESULT_KEYS),
|
|
46
38
|
failureReason: z.string().nullable(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-event.js","sourceRoot":"","sources":["../../src/doc-schemas/audit-event.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"audit-event.js","sourceRoot":"","sources":["../../src/doc-schemas/audit-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,+BAA+B,EAC/B,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,kBAAkB,CAAC,WAAW,EAAE;IAChE,CAAC;SACE,MAAM,CAAC;QACN,GAAG,EAAE,YAAY,CAAC,QAAQ,EAAE;QAC5B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC;KACnD,CAAC;SACD,MAAM,EAAE;IACX,CAAC;SACE,MAAM,CAAC;QACN,GAAG,EAAE,YAAY,CAAC,QAAQ,EAAE;QAC5B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC;QAC9C,UAAU,EAAE,gBAAgB;KAC7B,CAAC;SACD,MAAM,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,YAAY,CAAC,QAAQ,EAAE;IAC5B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,oBAAoB;IAC1B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC1C,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACpC,SAAS,EAAE,aAAa;IACxB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;IACjC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\nimport {\n AUDIT_ADMIN_ACTOR_MODE_KEYS,\n AUDIT_EVENT_TYPE_KEYS,\n AUDIT_NON_ADMIN_ACTOR_MODE_KEYS,\n AUDIT_RESULT_KEYS,\n} from '../types/audit.js';\nimport { epochMsSchema, systemRoleSchema, userIdSchema } from './atoms.js';\n\nexport const auditEventTypeSchema = z.enum(AUDIT_EVENT_TYPE_KEYS);\n\nexport const AuditActorSchema = z.discriminatedUnion('actorMode', [\n z\n .object({\n uid: userIdSchema.nullable(),\n isAdmin: z.boolean(),\n actorMode: z.enum(AUDIT_NON_ADMIN_ACTOR_MODE_KEYS),\n })\n .strict(),\n z\n .object({\n uid: userIdSchema.nullable(),\n isAdmin: z.boolean(),\n actorMode: z.enum(AUDIT_ADMIN_ACTOR_MODE_KEYS),\n systemRole: systemRoleSchema,\n })\n .strict(),\n]);\n\nexport const AuditTargetSchema = z.object({\n uid: userIdSchema.nullable(),\n ref: z.string().nullable(),\n});\n\nexport const AuditEventSchema = z.object({\n id: z.string().min(1),\n type: auditEventTypeSchema,\n schemaVersion: z.number().int().positive(),\n actor: AuditActorSchema.nullable(),\n target: AuditTargetSchema.nullable(),\n timestamp: epochMsSchema,\n ip: z.string().nullable(),\n userAgent: z.string().nullable(),\n region: z.string().nullable(),\n metadata: z.record(z.string(), z.unknown()),\n result: z.enum(AUDIT_RESULT_KEYS),\n failureReason: z.string().nullable(),\n correlationId: z.string().nullable(),\n});\nexport type AuditEvent = z.infer<typeof AuditEventSchema>;\n"]}
|
|
@@ -8,8 +8,8 @@ export declare const awardGroupGrantActionSchema: z.ZodEnum<{
|
|
|
8
8
|
revoke: "revoke";
|
|
9
9
|
}>;
|
|
10
10
|
export declare const awardGroupGrantStatusSchema: z.ZodEnum<{
|
|
11
|
-
pending: "pending";
|
|
12
11
|
complete: "complete";
|
|
12
|
+
pending: "pending";
|
|
13
13
|
}>;
|
|
14
14
|
export declare const awardGroupGrantDecisionSchema: z.ZodNumber;
|
|
15
15
|
export declare const AwardGroupGrantSchema: z.ZodObject<{
|
|
@@ -28,8 +28,8 @@ export declare const AwardGroupGrantSchema: z.ZodObject<{
|
|
|
28
28
|
decision: z.ZodNumber;
|
|
29
29
|
actorUid: z.ZodString;
|
|
30
30
|
status: z.ZodEnum<{
|
|
31
|
-
pending: "pending";
|
|
32
31
|
complete: "complete";
|
|
32
|
+
pending: "pending";
|
|
33
33
|
}>;
|
|
34
34
|
createdAt: z.ZodNumber;
|
|
35
35
|
completedAt: z.ZodOptional<z.ZodNumber>;
|
|
@@ -38,12 +38,6 @@ export declare const AwardGroupGrantSchema: z.ZodObject<{
|
|
|
38
38
|
lastError: z.ZodOptional<z.ZodString>;
|
|
39
39
|
}, z.core.$strict>;
|
|
40
40
|
export type AwardGroupGrant = z.infer<typeof AwardGroupGrantSchema>;
|
|
41
|
-
/**
|
|
42
|
-
* Whether a request opens a new decision on an award for a group, given the group's latest decision
|
|
43
|
-
* (`null` when it has none): a grant opens unless the latest is a grant, and a take-back opens only
|
|
44
|
-
* when it is. A request the latest decision already settles opens nothing. The server applies it in
|
|
45
|
-
* the transaction that opens the decision; the admin surface offers only the request it opens.
|
|
46
|
-
*/
|
|
47
41
|
export declare function awardGroupGrantOpens(latest: Pick<AwardGroupGrant, 'action'> | null, action: AwardGroupGrant['action']): boolean;
|
|
48
42
|
export declare const AwardGroupGrantPersonSchema: z.ZodObject<{
|
|
49
43
|
userId: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"award-group-grant.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/award-group-grant.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"award-group-grant.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/award-group-grant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,eAAO,MAAM,oBAAoB;;;EAAgC,CAAC;AAClE,eAAO,MAAM,2BAA2B;;;EAAwC,CAAC;AACjF,eAAO,MAAM,2BAA2B;;;EAAwC,CAAC;AAEjF,eAAO,MAAM,6BAA6B,aAAiB,CAAC;AAE5D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;kBAiC9B,CAAC;AACL,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG,IAAI,EAC9C,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAChC,OAAO,CAET;AAED,eAAO,MAAM,2BAA2B;;;;;;;;;;kBAOtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
// `awardGroupGrants/{grantId}` — one decision on one award for one group (a team, or a whole league):
|
|
2
|
-
// grant the award to the group's active members, or take back what the group's grants gave. The
|
|
3
|
-
// people are reached a page at a time, after the decision opens in its own small transaction. Written
|
|
4
|
-
// only by Cloud Functions; an admin reads a decision through the status callable.
|
|
5
|
-
//
|
|
6
|
-
// A grant records each person in `awardGroupGrantPeople` before it changes their profile, so a re-run
|
|
7
|
-
// after any interruption finds every recorded person and finishes them, and its revoke reverses exactly
|
|
8
|
-
// the people it gave the award to. Someone who already held the award is recorded as holding it before,
|
|
9
|
-
// and a revoke leaves them holding it. `status` stays `pending` until every page is done; the retry
|
|
10
|
-
// ledger lets a decision that keeps failing back off instead of holding the resume's window.
|
|
11
1
|
import { z } from 'zod';
|
|
12
2
|
import { buildAwardGroupGrantId, buildAwardGroupGrantTargetKey } from '../ids/award-grant-ids.js';
|
|
13
3
|
import { AWARD_GROUP_GRANT_ACTION_KEYS, AWARD_GROUP_GRANT_STATUS_KEYS, AWARD_GROUP_REVOKE_SKIP_KEYS, AWARD_GROUP_TYPE_KEYS, } from '../types/unions.js';
|
|
@@ -16,7 +6,6 @@ import { awardIdSchema } from './catalogs.js';
|
|
|
16
6
|
export const awardGroupTypeSchema = z.enum(AWARD_GROUP_TYPE_KEYS);
|
|
17
7
|
export const awardGroupGrantActionSchema = z.enum(AWARD_GROUP_GRANT_ACTION_KEYS);
|
|
18
8
|
export const awardGroupGrantStatusSchema = z.enum(AWARD_GROUP_GRANT_STATUS_KEYS);
|
|
19
|
-
// A decision's number among every decision on its award and group: the first is 1.
|
|
20
9
|
export const awardGroupGrantDecisionSchema = revisionSchema;
|
|
21
10
|
export const AwardGroupGrantSchema = z
|
|
22
11
|
.strictObject({
|
|
@@ -24,11 +13,9 @@ export const AwardGroupGrantSchema = z
|
|
|
24
13
|
action: awardGroupGrantActionSchema,
|
|
25
14
|
awardId: awardIdSchema,
|
|
26
15
|
groupType: awardGroupTypeSchema,
|
|
27
|
-
// The team id or the league id, as `groupType` says.
|
|
28
16
|
groupId: documentIdSegmentSchema,
|
|
29
17
|
targetKey: z.string().min(1),
|
|
30
18
|
decision: awardGroupGrantDecisionSchema,
|
|
31
|
-
// The admin who decided. Each person's audit event is recorded as their action.
|
|
32
19
|
actorUid: userIdSchema,
|
|
33
20
|
status: awardGroupGrantStatusSchema,
|
|
34
21
|
createdAt: epochMsSchema,
|
|
@@ -38,8 +25,6 @@ export const AwardGroupGrantSchema = z
|
|
|
38
25
|
lastError: z.string().optional(),
|
|
39
26
|
})
|
|
40
27
|
.superRefine((grant, ctx) => {
|
|
41
|
-
// The key and the id are derived fields: a decision whose stored key or id disagrees with its
|
|
42
|
-
// award, group, and number would sit outside that pair's decision sequence.
|
|
43
28
|
const targetKey = buildAwardGroupGrantTargetKey(grant);
|
|
44
29
|
if (grant.targetKey !== targetKey) {
|
|
45
30
|
ctx.addIssue({
|
|
@@ -56,19 +41,9 @@ export const AwardGroupGrantSchema = z
|
|
|
56
41
|
});
|
|
57
42
|
}
|
|
58
43
|
});
|
|
59
|
-
/**
|
|
60
|
-
* Whether a request opens a new decision on an award for a group, given the group's latest decision
|
|
61
|
-
* (`null` when it has none): a grant opens unless the latest is a grant, and a take-back opens only
|
|
62
|
-
* when it is. A request the latest decision already settles opens nothing. The server applies it in
|
|
63
|
-
* the transaction that opens the decision; the admin surface offers only the request it opens.
|
|
64
|
-
*/
|
|
65
44
|
export function awardGroupGrantOpens(latest, action) {
|
|
66
45
|
return action === 'grant' ? latest?.action !== 'grant' : latest?.action === 'grant';
|
|
67
46
|
}
|
|
68
|
-
// `awardGroupGrants/{grantId}/awardGroupGrantPeople/{userId}` — one person a grant decision reached,
|
|
69
|
-
// recorded before their profile changed. `heldBefore` says they already held the award, so the grant
|
|
70
|
-
// gave them nothing. `revoked` turns true once a revoke has dealt with them; `revokeSkipped` says why
|
|
71
|
-
// that revoke left them holding the award.
|
|
72
47
|
export const AwardGroupGrantPersonSchema = z.strictObject({
|
|
73
48
|
userId: userIdSchema,
|
|
74
49
|
heldBefore: z.boolean(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"award-group-grant.js","sourceRoot":"","sources":["../../src/doc-schemas/award-group-grant.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"award-group-grant.js","sourceRoot":"","sources":["../../src/doc-schemas/award-group-grant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,WAAW,EACX,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACjF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AAEjF,MAAM,CAAC,MAAM,6BAA6B,GAAG,cAAc,CAAC;AAE5D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,YAAY,CAAC;IACZ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,2BAA2B;IACnC,OAAO,EAAE,aAAa;IACtB,SAAS,EAAE,oBAAoB;IAC/B,OAAO,EAAE,uBAAuB;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,6BAA6B;IACvC,QAAQ,EAAE,YAAY;IACtB,MAAM,EAAE,2BAA2B;IACnC,SAAS,EAAE,aAAa;IACxB,WAAW,EAAE,aAAa,CAAC,QAAQ,EAAE;IACrC,YAAY,EAAE,WAAW;IACzB,aAAa,EAAE,aAAa;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC;KACD,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC1B,MAAM,SAAS,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,WAAW,CAAC;YACnB,OAAO,EAAE,mDAAmD;SAC7D,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,SAAS,CAAC;YACjB,OAAO,EAAE,kDAAkD;SAC5D,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAGL,MAAM,UAAU,oBAAoB,CAClC,MAA8C,EAC9C,MAAiC;IAEjC,OAAO,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;AACtF,CAAC;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,YAAY,CAAC;IACxD,MAAM,EAAE,YAAY;IACpB,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;IACvB,UAAU,EAAE,aAAa;IACzB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE;IACnC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,QAAQ,EAAE;CAC/D,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\nimport { buildAwardGroupGrantId, buildAwardGroupGrantTargetKey } from '../ids/award-grant-ids.js';\nimport {\n AWARD_GROUP_GRANT_ACTION_KEYS,\n AWARD_GROUP_GRANT_STATUS_KEYS,\n AWARD_GROUP_REVOKE_SKIP_KEYS,\n AWARD_GROUP_TYPE_KEYS,\n} from '../types/unions.js';\nimport {\n countSchema,\n documentIdSegmentSchema,\n epochMsSchema,\n revisionSchema,\n userIdSchema,\n} from './atoms.js';\nimport { awardIdSchema } from './catalogs.js';\n\nexport const awardGroupTypeSchema = z.enum(AWARD_GROUP_TYPE_KEYS);\nexport const awardGroupGrantActionSchema = z.enum(AWARD_GROUP_GRANT_ACTION_KEYS);\nexport const awardGroupGrantStatusSchema = z.enum(AWARD_GROUP_GRANT_STATUS_KEYS);\n\nexport const awardGroupGrantDecisionSchema = revisionSchema;\n\nexport const AwardGroupGrantSchema = z\n .strictObject({\n grantId: z.string().min(1),\n action: awardGroupGrantActionSchema,\n awardId: awardIdSchema,\n groupType: awardGroupTypeSchema,\n groupId: documentIdSegmentSchema,\n targetKey: z.string().min(1),\n decision: awardGroupGrantDecisionSchema,\n actorUid: userIdSchema,\n status: awardGroupGrantStatusSchema,\n createdAt: epochMsSchema,\n completedAt: epochMsSchema.optional(),\n attemptCount: countSchema,\n nextAttemptAt: epochMsSchema,\n lastError: z.string().optional(),\n })\n .superRefine((grant, ctx) => {\n const targetKey = buildAwardGroupGrantTargetKey(grant);\n if (grant.targetKey !== targetKey) {\n ctx.addIssue({\n code: 'custom',\n path: ['targetKey'],\n message: 'targetKey must be the award and group target key.',\n });\n }\n if (grant.grantId !== buildAwardGroupGrantId(targetKey, grant.decision)) {\n ctx.addIssue({\n code: 'custom',\n path: ['grantId'],\n message: 'grantId must be the target key and the decision.',\n });\n }\n });\nexport type AwardGroupGrant = z.infer<typeof AwardGroupGrantSchema>;\n\nexport function awardGroupGrantOpens(\n latest: Pick<AwardGroupGrant, 'action'> | null,\n action: AwardGroupGrant['action'],\n): boolean {\n return action === 'grant' ? latest?.action !== 'grant' : latest?.action === 'grant';\n}\n\nexport const AwardGroupGrantPersonSchema = z.strictObject({\n userId: userIdSchema,\n heldBefore: z.boolean(),\n recordedAt: epochMsSchema,\n revoked: z.boolean(),\n revokedAt: epochMsSchema.optional(),\n revokeSkipped: z.enum(AWARD_GROUP_REVOKE_SKIP_KEYS).optional(),\n});\nexport type AwardGroupGrantPerson = z.infer<typeof AwardGroupGrantPersonSchema>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogs.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/catalogs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"catalogs.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/catalogs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa,aAA0B,CAAC;AAErD,eAAO,MAAM,eAAe,wDAA2C,CAAC;AAExE,eAAO,MAAM,qBAAqB;;;;;;kBAMhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -1,21 +1,9 @@
|
|
|
1
|
-
// The award catalog. Each award is its own document, keeping the id granted awards already
|
|
2
|
-
// reference. The venue catalog is ./game-location.ts.
|
|
3
1
|
import { z } from 'zod';
|
|
4
2
|
import { AWARD_NAME_INPUT_FORMAT } from '../input-formats/input-formats.js';
|
|
5
3
|
import { countSchema, documentIdSegmentSchema, epochMsSchema, textFieldSchema } from './atoms.js';
|
|
6
4
|
import { pictureIdSchema } from './gallery.js';
|
|
7
|
-
// An award's id, which every grant names and so never changes: an award created by its badge upload
|
|
8
|
-
// takes that upload's staging id.
|
|
9
5
|
export const awardIdSchema = documentIdSegmentSchema;
|
|
10
|
-
// An award's name, as the catalog stores it and the creating upload sends it.
|
|
11
6
|
export const awardNameSchema = textFieldSchema(AWARD_NAME_INPUT_FORMAT);
|
|
12
|
-
// `awardDefinitions/{awardId}` — one award in the catalog. It is created by the publication of its
|
|
13
|
-
// first badge, so an award created that way always has one; an award with no badge yet gets one from
|
|
14
|
-
// the next badge upload for it. A badge is replaced only by a newer upload, never removed on its own.
|
|
15
|
-
//
|
|
16
|
-
// `holderCount` is how many accounts hold the award now. Every grant and revoke moves it in the
|
|
17
|
-
// transaction that writes the grant, so a deletion — refused while anyone holds the award — and a
|
|
18
|
-
// concurrent grant conflict on this document instead of racing past each other.
|
|
19
7
|
export const AwardDefinitionSchema = z.strictObject({
|
|
20
8
|
name: awardNameSchema,
|
|
21
9
|
badgePictureId: pictureIdSchema.optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogs.js","sourceRoot":"","sources":["../../src/doc-schemas/catalogs.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"catalogs.js","sourceRoot":"","sources":["../../src/doc-schemas/catalogs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAErD,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,uBAAuB,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,YAAY,CAAC;IAClD,IAAI,EAAE,eAAe;IACrB,cAAc,EAAE,eAAe,CAAC,QAAQ,EAAE;IAC1C,WAAW,EAAE,WAAW;IACxB,SAAS,EAAE,aAAa;IACxB,SAAS,EAAE,aAAa;CACzB,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\nimport { AWARD_NAME_INPUT_FORMAT } from '../input-formats/input-formats.js';\nimport { countSchema, documentIdSegmentSchema, epochMsSchema, textFieldSchema } from './atoms.js';\nimport { pictureIdSchema } from './gallery.js';\n\nexport const awardIdSchema = documentIdSegmentSchema;\n\nexport const awardNameSchema = textFieldSchema(AWARD_NAME_INPUT_FORMAT);\n\nexport const AwardDefinitionSchema = z.strictObject({\n name: awardNameSchema,\n badgePictureId: pictureIdSchema.optional(),\n holderCount: countSchema,\n createdAt: epochMsSchema,\n updatedAt: epochMsSchema,\n});\nexport type AwardDefinition = z.infer<typeof AwardDefinitionSchema>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestore-primitives.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/firestore-primitives.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"firestore-primitives.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/firestore-primitives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,IAAI,MAAM,CAAC;IACnB,MAAM,IAAI,IAAI,CAAC;CAChB;AAcD,eAAO,MAAM,wBAAwB,6DAEnC,CAAC"}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
// Structural model of a Firestore Timestamp, so this package imports neither Firebase SDK.
|
|
2
|
-
//
|
|
3
|
-
// Every persisted moment is an epoch-millisecond number (RULE-STD-ARCH-105), except a field a native-TTL
|
|
4
|
-
// policy reads — the admin notification documents' `expireAt` — which the service honours only on a
|
|
5
|
-
// real Timestamp.
|
|
6
1
|
import { z } from 'zod';
|
|
7
2
|
function isFirestoreTimestamp(value) {
|
|
8
3
|
if (typeof value !== 'object' || value === null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestore-primitives.js","sourceRoot":"","sources":["../../src/doc-schemas/firestore-primitives.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"firestore-primitives.js","sourceRoot":"","sources":["../../src/doc-schemas/firestore-primitives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,SAAS,GAAG,KAAwC,CAAC;IAC3D,OAAO,CACL,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACrC,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ;QACzC,OAAO,SAAS,CAAC,QAAQ,KAAK,UAAU;QACxC,OAAO,SAAS,CAAC,MAAM,KAAK,UAAU,CACvC,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAyB,oBAAoB,EAAE;IAC7F,OAAO,EAAE,gCAAgC;CAC1C,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\n\nexport interface FirestoreTimestampLike {\n seconds: number;\n nanoseconds: number;\n toMillis(): number;\n toDate(): Date;\n}\n\nfunction isFirestoreTimestamp(value: unknown): value is FirestoreTimestampLike {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as Partial<FirestoreTimestampLike>;\n return (\n typeof candidate.seconds === 'number' &&\n typeof candidate.nanoseconds === 'number' &&\n typeof candidate.toMillis === 'function' &&\n typeof candidate.toDate === 'function'\n );\n}\n\n// z.custom validates without transforming, so a real Timestamp passes through with its methods.\nexport const FirestoreTimestampSchema = z.custom<FirestoreTimestampLike>(isFirestoreTimestamp, {\n message: 'Expected a Firestore Timestamp',\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gallery.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/gallery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gallery.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/gallery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,sBAAsB;;;;;;EAAkC,CAAC;AACtE,eAAO,MAAM,sBAAsB;;;;EAAkC,CAAC;AAEtE,eAAO,MAAM,eAAe,aAAkB,CAAC;AAE/C,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAW7B,CAAC;AACL,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,oBAAoB;;;;iBAS7B,CAAC;AACL,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
|
@@ -1,34 +1,25 @@
|
|
|
1
|
-
// Picture galleries — the league's, each team's, and the landing page's.
|
|
2
|
-
//
|
|
3
|
-
// Each picture in a gallery is its own `galleryPictures/{pictureId}` document, publicly readable
|
|
4
|
-
// and written only by the picture core. The owner document carries its gallery's summary as its
|
|
5
|
-
// optional `pictures` field: a card or a header reads the featured picture off the owner it
|
|
6
|
-
// already holds, and `count` tells a display how many pictures there are without a count query.
|
|
7
|
-
// An absent `pictures` field is an empty gallery, so no copy action or create core writes one.
|
|
8
1
|
import { z } from 'zod';
|
|
9
2
|
import { GALLERY_OWNER_KIND_KEYS, PICTURE_OWNER_KIND_KEYS } from '../types/picture-owners.js';
|
|
10
|
-
import {
|
|
3
|
+
import { isPictureOwnerId } from '../paths/picture-owner-paths.js';
|
|
4
|
+
import { countSchema, documentIdSegmentSchema, epochMsSchema, stagingIdSchema } from './atoms.js';
|
|
11
5
|
export const pictureOwnerKindSchema = z.enum(PICTURE_OWNER_KIND_KEYS);
|
|
12
6
|
export const galleryOwnerKindSchema = z.enum(GALLERY_OWNER_KIND_KEYS);
|
|
13
|
-
// A picture id is its upload's staging id; every stored size lives under it.
|
|
14
7
|
export const pictureIdSchema = stagingIdSchema;
|
|
15
|
-
export const GalleryPictureSchema = z
|
|
8
|
+
export const GalleryPictureSchema = z
|
|
9
|
+
.object({
|
|
16
10
|
ownerKind: galleryOwnerKindSchema,
|
|
17
|
-
|
|
18
|
-
ownerId: z.string().min(1),
|
|
19
|
-
// A fractional sort key: a move rewrites only the moved picture's key, strictly between its new
|
|
20
|
-
// neighbours, and a gallery's first page is read ordered by it.
|
|
11
|
+
ownerId: documentIdSegmentSchema,
|
|
21
12
|
position: z.string().min(1),
|
|
22
|
-
// Set only on a picture the migration carried from V1: its position in the V1 source list, which
|
|
23
|
-
// places a later-finishing carried picture among its carried neighbours in V1's order.
|
|
24
13
|
sourceIndex: countSchema.optional(),
|
|
25
14
|
createdAt: epochMsSchema,
|
|
15
|
+
})
|
|
16
|
+
.refine((picture) => isPictureOwnerId(picture.ownerKind, picture.ownerId), {
|
|
17
|
+
message: 'Not an owner of that kind.',
|
|
18
|
+
path: ['ownerId'],
|
|
26
19
|
});
|
|
27
20
|
export const GallerySummarySchema = z
|
|
28
21
|
.object({
|
|
29
|
-
// Exact: every gallery change rewrites the summary inside its own transaction.
|
|
30
22
|
count: countSchema,
|
|
31
|
-
// Always one of the owner's pictures, so no reader needs a fallback rule.
|
|
32
23
|
featuredPictureId: pictureIdSchema.optional(),
|
|
33
24
|
updatedAt: epochMsSchema,
|
|
34
25
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gallery.js","sourceRoot":"","sources":["../../src/doc-schemas/gallery.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"gallery.js","sourceRoot":"","sources":["../../src/doc-schemas/gallery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElG,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,SAAS,EAAE,sBAAsB;IACjC,OAAO,EAAE,uBAAuB;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,aAAa;CACzB,CAAC;KACD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;IACzE,OAAO,EAAE,4BAA4B;IACrC,IAAI,EAAE,CAAC,SAAS,CAAC;CAClB,CAAC,CAAC;AAGL,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,KAAK,EAAE,WAAW;IAClB,iBAAiB,EAAE,eAAe,CAAC,QAAQ,EAAE;IAC7C,SAAS,EAAE,aAAa;CACzB,CAAC;KACD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC,EAAE;IACpF,OAAO,EAAE,uEAAuE;IAChF,IAAI,EAAE,CAAC,mBAAmB,CAAC;CAC5B,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\nimport { GALLERY_OWNER_KIND_KEYS, PICTURE_OWNER_KIND_KEYS } from '../types/picture-owners.js';\nimport { isPictureOwnerId } from '../paths/picture-owner-paths.js';\nimport { countSchema, documentIdSegmentSchema, epochMsSchema, stagingIdSchema } from './atoms.js';\n\nexport const pictureOwnerKindSchema = z.enum(PICTURE_OWNER_KIND_KEYS);\nexport const galleryOwnerKindSchema = z.enum(GALLERY_OWNER_KIND_KEYS);\n\nexport const pictureIdSchema = stagingIdSchema;\n\nexport const GalleryPictureSchema = z\n .object({\n ownerKind: galleryOwnerKindSchema,\n ownerId: documentIdSegmentSchema,\n position: z.string().min(1),\n sourceIndex: countSchema.optional(),\n createdAt: epochMsSchema,\n })\n .refine((picture) => isPictureOwnerId(picture.ownerKind, picture.ownerId), {\n message: 'Not an owner of that kind.',\n path: ['ownerId'],\n });\nexport type GalleryPicture = z.infer<typeof GalleryPictureSchema>;\n\nexport const GallerySummarySchema = z\n .object({\n count: countSchema,\n featuredPictureId: pictureIdSchema.optional(),\n updatedAt: epochMsSchema,\n })\n .refine((summary) => summary.count > 0 === (summary.featuredPictureId !== undefined), {\n message: 'featuredPictureId is present exactly when the gallery holds a picture',\n path: ['featuredPictureId'],\n });\nexport type GallerySummary = z.infer<typeof GallerySummarySchema>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-location.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/game-location.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"game-location.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/game-location.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,oBAAoB,aAA0B,CAAC;AAE5D,eAAO,MAAM,kBAAkB;;;;;;;;iBAQ7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D,eAAO,MAAM,0BAA0B;;kBAErC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
// `gameLocations/{gameLocationId}` — one venue games are played at. Games name it by id
|
|
2
|
-
// (`gameLocationId`) beside their own free-text label, so a game still reads correctly after its
|
|
3
|
-
// venue is deleted.
|
|
4
1
|
import { z } from 'zod';
|
|
5
2
|
import { countSchema, documentIdSegmentSchema, epochMsSchema } from './atoms.js';
|
|
6
3
|
import { pictureIdSchema } from './gallery.js';
|
|
@@ -8,20 +5,14 @@ export const gameLocationIdSchema = documentIdSegmentSchema;
|
|
|
8
5
|
export const GameLocationSchema = z.object({
|
|
9
6
|
name: z.string().min(1),
|
|
10
7
|
streetAddress: z.string(),
|
|
11
|
-
// Courts, sheets, or rooms within the venue.
|
|
12
8
|
subLocations: z.array(z.string()),
|
|
13
|
-
// Directions for players; absent when there are none.
|
|
14
9
|
memo: z.string().min(1).optional(),
|
|
15
|
-
// The venue's picture. Only the picture pipeline writes it (RULE-STD-ARCH-001); the location callables
|
|
16
|
-
// write the fields above and never this one.
|
|
17
10
|
pictureId: pictureIdSchema.optional(),
|
|
18
11
|
createdAt: epochMsSchema,
|
|
19
12
|
updatedAt: epochMsSchema,
|
|
20
13
|
});
|
|
21
|
-
// `_serverData/gameLocationRegistry` — the fence of the venue cap
|
|
22
|
-
//
|
|
23
|
-
// creation advances `locationRevision` here: two creations at the cap conflict instead of both
|
|
24
|
-
// passing (RULE-STD-BACKEND-116). Only its changing matters; absent until the first creation.
|
|
14
|
+
// `_serverData/gameLocationRegistry` — the write fence of the venue cap (RULE-STD-BACKEND-116):
|
|
15
|
+
// only its changing matters.
|
|
25
16
|
export const GameLocationRegistrySchema = z.strictObject({
|
|
26
17
|
locationRevision: countSchema,
|
|
27
18
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-location.js","sourceRoot":"","sources":["../../src/doc-schemas/game-location.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"game-location.js","sourceRoot":"","sources":["../../src/doc-schemas/game-location.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAE5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,aAAa;IACxB,SAAS,EAAE,aAAa;CACzB,CAAC,CAAC;AAGH,gGAAgG;AAChG,6BAA6B;AAC7B,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,YAAY,CAAC;IACvD,gBAAgB,EAAE,WAAW;CAC9B,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\nimport { countSchema, documentIdSegmentSchema, epochMsSchema } from './atoms.js';\nimport { pictureIdSchema } from './gallery.js';\n\nexport const gameLocationIdSchema = documentIdSegmentSchema;\n\nexport const GameLocationSchema = z.object({\n name: z.string().min(1),\n streetAddress: z.string(),\n subLocations: z.array(z.string()),\n memo: z.string().min(1).optional(),\n pictureId: pictureIdSchema.optional(),\n createdAt: epochMsSchema,\n updatedAt: epochMsSchema,\n});\nexport type GameLocation = z.infer<typeof GameLocationSchema>;\n\n// `_serverData/gameLocationRegistry` — the write fence of the venue cap (RULE-STD-BACKEND-116):\n// only its changing matters.\nexport const GameLocationRegistrySchema = z.strictObject({\n locationRevision: countSchema,\n});\nexport type GameLocationRegistry = z.infer<typeof GameLocationRegistrySchema>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-stat-history.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/game-stat-history.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"game-stat-history.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/game-stat-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQzC,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAKhD,CAAC;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAIpG,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAGpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
|
|
@@ -1,25 +1,16 @@
|
|
|
1
|
-
// `sportGames/{gameId}/gameStatHistory/{pageId}` — a completed game's finalized record: every event
|
|
2
|
-
// document of the game, exactly as stored and in `sequence` order, in pages of up to
|
|
3
|
-
// STAT_HISTORY_PAGE_SIZE, the page ids from `buildStatHistoryPageId(index)`.
|
|
4
|
-
//
|
|
5
|
-
// The first page also carries what finalize applied: the sport, the teams, and the participation
|
|
6
|
-
// snapshot, so the record alone reproduces a completed game's contribution without the game
|
|
7
|
-
// document a hand edit can reach (RULE-QS-SPORT-924). It exists exactly while the game is `completed`.
|
|
8
1
|
import { z } from 'zod';
|
|
9
|
-
import { STAT_HISTORY_PAGE_SIZE } from '../constants/sports.js';
|
|
2
|
+
import { MAX_STAT_HISTORY_PAGES, STAT_HISTORY_PAGE_SIZE } from '../constants/sports.js';
|
|
10
3
|
import { gameRosterPlayerIdSchema, leagueTypeSchema, teamIdSchema } from './atoms.js';
|
|
11
4
|
import { GameStatEventSchema } from './game-stats.js';
|
|
12
5
|
const pageEventsSchema = z
|
|
13
6
|
.array(GameStatEventSchema)
|
|
14
7
|
.max(STAT_HISTORY_PAGE_SIZE)
|
|
15
8
|
.refine((events) => events.every((event, index) => index === 0 || events[index - 1].sequence < event.sequence), 'A page holds its events in sequence order.');
|
|
16
|
-
// A game whose replay is its empty stats has a first page and no events.
|
|
17
9
|
export const GameStatHistoryFirstPageSchema = z.strictObject({
|
|
18
10
|
events: pageEventsSchema,
|
|
19
|
-
pageCount: z.number().int().positive(),
|
|
11
|
+
pageCount: z.number().int().positive().max(MAX_STAT_HISTORY_PAGES),
|
|
20
12
|
leagueType: leagueTypeSchema,
|
|
21
13
|
teamIds: z.array(teamIdSchema).min(1).max(2),
|
|
22
|
-
// The participation snapshot, as roster-entry ids.
|
|
23
14
|
rosterPlayerIds: z.array(gameRosterPlayerIdSchema),
|
|
24
15
|
absentRosterPlayerIds: z.array(gameRosterPlayerIdSchema),
|
|
25
16
|
nonScoringRosterPlayerIds: z.array(gameRosterPlayerIdSchema),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-stat-history.js","sourceRoot":"","sources":["../../src/doc-schemas/game-stat-history.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"game-stat-history.js","sourceRoot":"","sources":["../../src/doc-schemas/game-stat-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,gBAAgB,GAAG,CAAC;KACvB,KAAK,CAAC,mBAAmB,CAAC;KAC1B,GAAG,CAAC,sBAAsB,CAAC;KAC3B,MAAM,CACL,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,EAC5F,4CAA4C,CAC7C,CAAC;AAEJ,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,YAAY,CAAC;IAC3D,MAAM,EAAE,gBAAgB;IACxB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAClE,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;IAClD,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;IACxD,yBAAyB,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;CAC7D,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC,YAAY,CAAC;IAClE,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAC7B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAC7B,mCAAmC,CACpC;CACF,CAAC,CAAC;AAGH,mGAAmG;AACnG,+BAA+B;AAC/B,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC;IAC/C,8BAA8B;IAC9B,qCAAqC;CACtC,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\nimport { MAX_STAT_HISTORY_PAGES, STAT_HISTORY_PAGE_SIZE } from '../constants/sports.js';\nimport { gameRosterPlayerIdSchema, leagueTypeSchema, teamIdSchema } from './atoms.js';\nimport { GameStatEventSchema } from './game-stats.js';\n\nconst pageEventsSchema = z\n .array(GameStatEventSchema)\n .max(STAT_HISTORY_PAGE_SIZE)\n .refine(\n (events) =>\n events.every((event, index) => index === 0 || events[index - 1].sequence < event.sequence),\n 'A page holds its events in sequence order.',\n );\n\nexport const GameStatHistoryFirstPageSchema = z.strictObject({\n events: pageEventsSchema,\n pageCount: z.number().int().positive().max(MAX_STAT_HISTORY_PAGES),\n leagueType: leagueTypeSchema,\n teamIds: z.array(teamIdSchema).min(1).max(2),\n rosterPlayerIds: z.array(gameRosterPlayerIdSchema),\n absentRosterPlayerIds: z.array(gameRosterPlayerIdSchema),\n nonScoringRosterPlayerIds: z.array(gameRosterPlayerIdSchema),\n});\nexport type GameStatHistoryFirstPage = z.infer<typeof GameStatHistoryFirstPageSchema>;\n\nexport const GameStatHistoryContinuationPageSchema = z.strictObject({\n events: pageEventsSchema.refine(\n (events) => events.length > 0,\n 'A continuation page holds events.',\n ),\n});\nexport type GameStatHistoryContinuationPage = z.infer<typeof GameStatHistoryContinuationPageSchema>;\n\n// Both page shapes are strict, so a first page missing part of its snapshot is refused rather than\n// read as a continuation page.\nexport const GameStatHistoryPageSchema = z.union([\n GameStatHistoryFirstPageSchema,\n GameStatHistoryContinuationPageSchema,\n]);\nexport type GameStatHistoryPage = z.infer<typeof GameStatHistoryPageSchema>;\n"]}
|