// eslint-disable-next-line no-unused-vars import Dexie, { DexieOptions } from "dexie"; import { v4 as uuid } from "uuid"; import { loadVersions, UpgradeEventHandler } from "./upgrade"; import { getDefaultMaps } from "./maps"; import { getDefaultTokens } from "./tokens"; import { getRandomMonster } from "./helpers/monsters"; /** * Populate DB with initial data * @param {Dexie} db */ function populate(db: Dexie) { db.on("populate", () => { const userId = uuid(); db.table("user").add({ key: "userId", value: userId }); const nickname = getRandomMonster(); db.table("user").add({ key: "nickname", value: nickname }); const { maps, mapStates } = getDefaultMaps(userId); db.table("maps").bulkAdd(maps); db.table("states").bulkAdd(mapStates); const tokens = getDefaultTokens(userId); db.table("tokens").bulkAdd(tokens); db.table("groups").bulkAdd([ { id: "maps", items: maps.map((map) => ({ id: map.id, type: "item" })) }, { id: "tokens", items: tokens.map((token) => ({ id: token.id, type: "item" })), }, ]); }); } /** * Get a Dexie database with a name and versions applied * @param {DexieOptions} options * @param {string=} name * @param {number=} versionNumber * @param {boolean=} populateData * @param {UpgradeEventHandler=} onUpgrade * @returns {Dexie} */ export function getDatabase( options: DexieOptions, name: string | undefined = "OwlbearRodeoDB", versionNumber: number | undefined = undefined, populateData: boolean | undefined = true, onUpgrade: UpgradeEventHandler | undefined = undefined ): Dexie { let db = new Dexie(name, options); loadVersions(db, versionNumber, onUpgrade); if (populateData) { populate(db); } return db; }