{"version":3,"file":"Storage.cjs","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) { return 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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"}