// How a Pokémon can be obtained in a game. Missing rows mean no source record; // they do not prove absence. Unknown rows establish presence, not availability. // New values go at the end: the client receives availability as an index. // Shared between the db schema and the client, which receives availability as // an index into this array to keep the page payload small. export const availabilityValues = [ 'catchable', 'trade_only', 'transfer_only', 'event_only', 'unknown', 'evolve', 'breed' ] as const; export type Availability = (typeof availabilityValues)[number]; export const availabilityLabels: Record = { catchable: 'catch it', trade_only: 'trade only', transfer_only: 'transfer only', event_only: 'event only', unknown: 'not confirmed', evolve: 'evolve it', breed: 'breed it' }; // Obtainable inside the game itself, so it counts toward progress and can be ticked. export const obtainableAvailability: ReadonlySet = new Set([ 'catchable', 'evolve', 'breed' ]);