import { SaveData } from "./types"; function getDB(): Promise { return new Promise((resolve, reject) => { if (!window.indexedDB) { reject("Indexed DB does not exists"); } /** * DB is called bitburnerSave * Object store is called savestring * key for the Object store is called save * Version `1` is important */ const indexedDbRequest: IDBOpenDBRequest = window.indexedDB.open("bitburnerSave", 1); // This is called when there's no db to begin with. It's important, don't remove it. indexedDbRequest.onupgradeneeded = function (this: IDBRequest) { const db = this.result; db.createObjectStore("savestring"); }; indexedDbRequest.onerror = function (this: IDBRequest, ev: Event) { reject(`Failed to get IDB ${ev}`); }; indexedDbRequest.onsuccess = function (this: IDBRequest) { const db = this.result; if (!db) { reject("database loading result was undefined"); return; } resolve(db.transaction(["savestring"], "readwrite").objectStore("savestring")); }; }); } export function load(): Promise { return new Promise((resolve, reject) => { getDB() .then((db) => { return new Promise((resolve, reject) => { const request: IDBRequest = db.get("save"); request.onerror = function (this: IDBRequest, ev: Event) { reject("Error in Database request to get save data: " + ev); }; request.onsuccess = function (this: IDBRequest) { resolve(this.result); }; }).then((saveData) => resolve(saveData)); }) .catch((r) => reject(r)); }); } export function save(saveData: SaveData): Promise { return getDB().then((db) => { return new Promise((resolve, reject) => { // We'll save to IndexedDB const request = db.put(saveData, "save"); request.onerror = function (e) { reject("Error saving game to IndexedDB: " + e); }; request.onsuccess = () => resolve(); }); }); } export function deleteGame(): Promise { return getDB().then((db) => { db.delete("save"); }); }