import BaseDexie from "dexie"; import { encrypted, Encryption } from "@pvermeer/dexie-encrypted-addon"; import { accountsSchema, AccountsTable } from "./tables/accounts"; /** * In order to make the next line be acceptable, the program needs to have its linter suppress a rule: * https://typescript-eslint.io/rules/no-unnecessary-type-constraint/ * * and change *any* to *unknown* * * https://9to5answer.com/how-to-bypass-warning-unexpected-any-specify-a-different-type-typescript-eslint-no-explicit-any */ type DexieTables = AccountsTable; export type Dexie = BaseDexie & T; export const db = new BaseDexie("kickStarter") as Dexie; const schema = Object.assign({}, accountsSchema); /** * Needed to enable a special webpack setting to allow *await* below: * https://stackoverflow.com/questions/72474803/error-the-top-level-await-experiment-is-not-enabled-set-experiments-toplevelaw */ // if db already made, skip creation const exists = await BaseDexie.exists("kickStarter"); if (exists == false) { // create password and place password in localStorage const secret = localStorage.getItem("secret") || Encryption.createRandomEncryptionKey(); if (localStorage.getItem("secret") == null) { localStorage.setItem("secret", secret); } console.log(secret); encrypted(db, { secretKey: secret }); db.version(1).stores(schema); }