colyseus.js
Version:
Colyseus Multiplayer SDK for JavaScript/TypeScript
1 lines • 5.38 kB
Source Map (JSON)
{"version":3,"file":"Storage.mjs","sources":["../../src/Storage.ts"],"sourcesContent":["/// <reference path=\"../typings/cocos-creator.d.ts\" />\n\n/**\n * We do not assign 'storage' to window.localStorage immediatelly for React\n * Native compatibility. window.localStorage is not present when this module is\n * loaded.\n */\n\nlet storage: any;\n\nfunction getStorage(): Storage {\n if (!storage) {\n try {\n storage = (typeof (cc) !== 'undefined' && cc.sys && cc.sys.localStorage)\n ? cc.sys.localStorage // compatibility with cocos creator\n : window.localStorage; // RN does have window object at this point, but localStorage is not defined\n\n } catch (e) {\n // ignore error\n }\n }\n\n if (!storage && typeof (globalThis.indexedDB) !== 'undefined') {\n storage = new IndexedDBStorage();\n }\n\n if (!storage) {\n // mock localStorage if not available (Node.js or RN environment)\n storage = {\n cache: {},\n setItem: function (key, value) { this.cache[key] = value; },\n getItem: function (key) { this.cache[key]; },\n removeItem: function (key) { delete this.cache[key]; },\n };\n }\n\n return storage;\n}\n\nexport function setItem(key: string, value: string) {\n getStorage().setItem(key, value);\n}\n\nexport function removeItem(key: string) {\n getStorage().removeItem(key);\n}\n\nexport function getItem(key: string, callback: Function) {\n const value: any = getStorage().getItem(key);\n\n if (\n typeof (Promise) === 'undefined' || // old browsers\n !(value instanceof Promise)\n ) {\n // browser has synchronous return\n callback(value);\n\n } else {\n // react-native is asynchronous\n value.then((id) => callback(id));\n }\n}\n\n/**\n * When running in a Web Worker, we need to use IndexedDB to store data.\n */\nclass IndexedDBStorage {\n private dbPromise: Promise<IDBDatabase> = new Promise((resolve) => {\n const request = indexedDB.open('_colyseus_storage', 1);\n request.onupgradeneeded = () => request.result.createObjectStore('store');\n request.onsuccess = () => resolve(request.result);\n });\n\n private async tx(mode: IDBTransactionMode, fn: (store: IDBObjectStore) => IDBRequest) {\n const db = await this.dbPromise;\n const store = db.transaction('store', mode).objectStore('store');\n return fn(store);\n }\n\n setItem(key: string, value: string) {\n return this.tx('readwrite', store => store.put(value, key)).then();\n }\n\n async getItem(key: string) {\n const request = await this.tx('readonly', store => store.get(key));\n return new Promise<string | undefined>((resolve) => {\n request.onsuccess = () => resolve(request.result);\n });\n }\n\n removeItem(key: string) {\n return this.tx('readwrite', store => store.delete(key)).then();\n }\n}"],"names":[],"mappings":"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"}