| import {random} from 'lodash'; |
|
|
| |
| const USABLE_CHARACTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; |
| const ID_LENGTH = 4; |
|
|
| export function isValidRoomID(id: string | null | undefined): boolean { |
| if (id == null) { |
| return false; |
| } |
| if (id.length !== ID_LENGTH) { |
| return false; |
| } |
| return isValidPartialRoomID(id); |
| } |
|
|
| export function isValidPartialRoomID(roomID: string): boolean { |
| return ( |
| roomID.length <= ID_LENGTH && |
| roomID.split('').every((char) => USABLE_CHARACTERS.includes(char)) |
| ); |
| } |
|
|
| export default function generateNewRoomID(): string { |
| return Array.from( |
| {length: ID_LENGTH}, |
| () => USABLE_CHARACTERS[random(USABLE_CHARACTERS.length - 1)], |
| ).join(''); |
| } |
|
|
| export function getSequentialRoomIDForTestingGenerator(): () => string { |
| let counter = 0; |
|
|
| return function generateNextRoomID(): string { |
| const counterInBase: string = Number(counter) |
| .toString(USABLE_CHARACTERS.length) |
| .padStart(ID_LENGTH, '0'); |
|
|
| if (counterInBase.length > ID_LENGTH) { |
| throw new Error( |
| 'Ran out of unique room IDs from the sequential generator', |
| ); |
| } |
|
|
| const result = counterInBase |
| .split('') |
| .map( |
| (digit) => USABLE_CHARACTERS[parseInt(digit, USABLE_CHARACTERS.length)], |
| ) |
| .join(''); |
|
|
| counter++; |
|
|
| return result; |
| }; |
| } |
|
|