Buckets:
| /** | |
| * @license | |
| * Copyright 2015 The Emscripten Authors | |
| * SPDX-License-Identifier: MIT | |
| */ | |
| var IDBStore = { | |
| indexedDB() { | |
| #if ASSERTIONS | |
| assert(typeof indexedDB != 'undefined', 'IDBStore used, but indexedDB not supported'); | |
| #endif | |
| return indexedDB; | |
| }, | |
| DB_VERSION: 22, | |
| DB_STORE_NAME: 'FILE_DATA', | |
| dbs: {}, | |
| blobs: [0], | |
| getDB(name, callback) { | |
| // check the cache first | |
| var db = IDBStore.dbs[name]; | |
| if (db) { | |
| return callback(null, db); | |
| } | |
| var req; | |
| try { | |
| req = IDBStore.indexedDB().open(name, IDBStore.DB_VERSION); | |
| } catch (e) { | |
| return callback(e); | |
| } | |
| req.onupgradeneeded = (e) => { | |
| var db = /** @type {IDBDatabase} */ (e.target.result); | |
| var transaction = e.target.transaction; | |
| var fileStore; | |
| if (db.objectStoreNames.contains(IDBStore.DB_STORE_NAME)) { | |
| fileStore = transaction.objectStore(IDBStore.DB_STORE_NAME); | |
| } else { | |
| fileStore = db.createObjectStore(IDBStore.DB_STORE_NAME); | |
| } | |
| }; | |
| req.onsuccess = () => { | |
| db = /** @type {IDBDatabase} */ (req.result); | |
| // add to the cache | |
| IDBStore.dbs[name] = db; | |
| callback(null, db); | |
| }; | |
| req.onerror = function(event) { | |
| callback(event.target.error || 'unknown error'); | |
| event.preventDefault(); | |
| }; | |
| }, | |
| getStore(dbName, type, callback) { | |
| IDBStore.getDB(dbName, (error, db) => { | |
| if (error) return callback(error); | |
| var transaction = db.transaction([IDBStore.DB_STORE_NAME], type); | |
| transaction.onerror = (event) => { | |
| callback(event.target.error || 'unknown error'); | |
| event.preventDefault(); | |
| }; | |
| var store = transaction.objectStore(IDBStore.DB_STORE_NAME); | |
| callback(null, store); | |
| }); | |
| }, | |
| // External API | |
| getFile(dbName, id, callback) { | |
| IDBStore.getStore(dbName, 'readonly', (err, store) => { | |
| if (err) return callback(err); | |
| var req = store.get(id); | |
| req.onsuccess = (event) => { | |
| var result = event.target.result; | |
| if (!result) { | |
| return callback(`file ${id} not found`); | |
| } | |
| return callback(null, result); | |
| }; | |
| req.onerror = callback; | |
| }); | |
| }, | |
| setFile(dbName, id, data, callback) { | |
| IDBStore.getStore(dbName, 'readwrite', (err, store) => { | |
| if (err) return callback(err); | |
| var req = store.put(data, id); | |
| req.onsuccess = (event) => callback(); | |
| req.onerror = callback; | |
| }); | |
| }, | |
| deleteFile(dbName, id, callback) { | |
| IDBStore.getStore(dbName, 'readwrite', (err, store) => { | |
| if (err) return callback(err); | |
| var req = store.delete(id); | |
| req.onsuccess = (event) => callback(); | |
| req.onerror = callback; | |
| }); | |
| }, | |
| existsFile(dbName, id, callback) { | |
| IDBStore.getStore(dbName, 'readonly', (err, store) => { | |
| if (err) return callback(err); | |
| var req = store.count(id); | |
| req.onsuccess = (event) => callback(null, event.target.result > 0); | |
| req.onerror = callback; | |
| }); | |
| }, | |
| clearStore(dbName, callback) { | |
| IDBStore.getStore(dbName, 'readwrite', (err, store) => { | |
| if (err) return callback(err); | |
| var req = store.clear(); | |
| req.onsuccess = (event) => callback(); | |
| req.onerror = callback; | |
| }); | |
| }, | |
| }; | |
Xet Storage Details
- Size:
- 3.25 kB
- Xet hash:
- 11ed13f616e66ca3a8d3749d9170cc5f48b877a71bd7999c88cc508226a39f92
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.