{
  "version": 3,
  "sources": ["../../src/matchmaker/driver.ts"],
  "sourcesContent": ["import type { Room } from \"@colyseus/core\";\n\n/**\n * Sort options for room queries.\n */\nexport interface SortOptions {\n  [fieldName: string]: 1 | -1 | 'asc' | 'desc' | 'ascending' | 'descending';\n}\n\n/**\n * Built-in room cache fields that can be used for sorting.\n */\nexport type IRoomCacheSortByKeys = 'clients' | 'maxClients' | 'createdAt';\n\n/**\n * Built-in room cache fields that can be used for filtering.\n */\nexport type IRoomCacheFilterByKeys = 'clients' | 'maxClients' | 'processId';\n\n/**\n * Extract metadata type from Room type\n */\nexport type ExtractRoomCacheMetadata<RoomType extends Room> = RoomType['~metadata'];\n\n/**\n * Generates a unique lock ID based on filter options.\n */\nexport function getLockId(filterOptions: any) {\n  return Object.keys(filterOptions).map((key) => `${key}:${filterOptions[key]}`).join(\"-\");\n}\n\n/**\n * Initialize a room cache which contains CRUD operations for room listings.\n *\n * @internal\n * @param initialValues - Predefined room properties.\n * @returns RoomData - New room cache.\n */\nexport function initializeRoomCache(initialValues: Partial<IRoomCache> = {}): IRoomCache {\n  return {\n    clients: 0,\n    maxClients: Infinity,\n    locked: false,\n    private: false,\n    metadata: undefined,\n    createdAt: (initialValues && initialValues.createdAt) ? new Date(initialValues.createdAt) : new Date(),\n    unlisted: false,\n    ...initialValues,\n  } as IRoomCache;\n}\n\nexport interface IRoomCache<Metadata = any> {\n  /**\n   * Room name.\n   */\n  name: string;\n\n  /**\n   * Unique identifier for the room.\n   */\n  roomId: string;\n\n  /**\n   * Process id where the room is running.\n   */\n  processId: string;\n\n  /**\n   * Number of clients connected to this room.\n   */\n  clients: number;\n\n  /**\n   * Maximum number of clients allowed to join the room.\n   */\n  maxClients: number;\n\n  /**\n   * Indicates if the room is locked (i.e. join requests are rejected).\n   */\n  locked?: boolean;\n\n  /**\n   * Indicates if the room is private\n   * Private rooms can't be joined via `join()` or `joinOrCreate()`.\n   */\n  private?: boolean;\n\n  /**\n   * Public address of the server.\n   */\n  publicAddress?: string;\n\n  /**\n   * Do not show this room in lobby listing.\n   */\n  unlisted?: boolean;\n\n  /**\n   * Metadata associated with the room.\n   */\n  metadata?: Metadata;\n\n  /**\n   * When the room was created.\n   */\n  createdAt?: Date;\n}\n\nexport interface MatchMakerDriver {\n  /**\n   * Check if a room exists in room cache.\n   *\n   * @param roomId - The room id.\n   *\n   * @returns Promise<boolean> | boolean - A promise or a boolean value indicating if the room exists.\n   */\n  has(roomId: string): Promise<boolean> | boolean;\n\n  /**\n   * Query rooms in room cache for given conditions.\n   *\n   * @param conditions - Filtering conditions.\n   *\n   * @returns Promise<IRoomCache[]> | IRoomCache[] - A promise or an object contaning room metadata list.\n   */\n  query<T extends Room = any>(\n    conditions: Partial<IRoomCache & ExtractRoomCacheMetadata<T>>,\n    sortOptions?: SortOptions\n  ): Promise<Array<IRoomCache<ExtractRoomCacheMetadata<T>>>> | Array<IRoomCache<ExtractRoomCacheMetadata<T>>>;\n\n  /**\n   * Clean up rooms in room cache by process id.\n   * @param processId - The process id.\n   */\n  cleanup?(processId: string): Promise<void>;\n\n  /**\n   * Query for a room in room cache for given conditions.\n   *\n   * @param conditions - Filtering conditions.\n   *\n   * @returns `IRoomCache` - An object contaning filtered room metadata.\n   */\n  findOne<T extends Room = any>(\n    conditions: Partial<IRoomCache & ExtractRoomCacheMetadata<T>>,\n    sortOptions?: SortOptions\n  ): Promise<IRoomCache<ExtractRoomCacheMetadata<T>>>;\n\n  /**\n   * Remove a room from room cache.\n   *\n   * @param roomId - The room id.\n   */\n  remove(roomId: string): Promise<boolean> | boolean;\n\n  /**\n   * Update a room in room cache.\n   *\n   * @param IRoomCache - The room to update.\n   * @param operations - The operations to update the room.\n   */\n  update(\n    room: IRoomCache,\n    operations: Partial<{ $set: Partial<IRoomCache>, $inc: Partial<IRoomCache> }>\n  ): Promise<boolean> | boolean;\n\n  /**\n   * Persist a room in room cache.\n   *\n   * @param room - The room to persist.\n   * @param create - If true, create a new record. If false (default), update existing record.\n   */\n  persist(room: IRoomCache, create?: boolean): Promise<boolean> | boolean;\n\n  /**\n   * Empty the room cache. Used for testing purposes only.\n   * @internal Do not call this method yourself.\n   */\n  clear(): void;\n\n  /**\n   * Boot the room cache medium (if available).\n   */\n  boot?(): Promise<void>;\n\n  /**\n   * Dispose the connection of the room cache medium.\n   */\n  shutdown(): void;\n}\n"],
  "mappings": ";AA2BO,SAAS,UAAU,eAAoB;AAC5C,SAAO,OAAO,KAAK,aAAa,EAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,cAAc,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG;AACzF;AASO,SAAS,oBAAoB,gBAAqC,CAAC,GAAe;AACvF,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,WAAY,iBAAiB,cAAc,YAAa,IAAI,KAAK,cAAc,SAAS,IAAI,oBAAI,KAAK;AAAA,IACrG,UAAU;AAAA,IACV,GAAG;AAAA,EACL;AACF;",
  "names": []
}
