@plantinformatics/vcf-genotype-brapi
Version:
Client and server functions to access genotype data from VCF via a custom web API and BrAPI
70 lines (59 loc) • 2.21 kB
JavaScript
/** Generated by ChatGPT
### In JavaScript, show a wrapper functionality for caching data either on the web-browser frontend web-app (using IndexedDB) or in the backend (Node.js server). Include JSDocs comments in the function header comments.
---
Here’s a simple wrapper functionality for caching data using IndexedDB on the frontend or storing data in memory on a Node.js backend:
### Frontend (IndexedDB)
*/
/**
* A simple wrapper for caching data in IndexedDB.
* @class CacheWrapper
*/
export class CacheWrapper {
constructor(dbName, storeName) {
this.dbName = dbName;
this.storeName = storeName;
this.db = null;
this.init();
}
async init() {
this.db = await new Promise((resolve, reject) => {
const request = indexedDB.open(this.dbName, 1);
request.onupgradeneeded = (event) => {
const db = event.target.result;
db.createObjectStore(this.storeName);
};
request.onsuccess = (event) => resolve(event.target.result);
request.onerror = () => reject('Database error');
});
}
/**
* Caches data in IndexedDB.
* @param {string} key - The key to store the data under.
* @param {any} value - The value to store.
* @returns {Promise<void>}
*/
async set(key, value) {
const transaction = this.db.transaction([this.storeName], 'readwrite');
const store = transaction.objectStore(this.storeName);
return new Promise((resolve, reject) => {
const request = store.put(value, key);
request.onsuccess = () => resolve();
request.onerror = () => reject('Storage error');
});
}
/**
* Retrieves cached data from IndexedDB.
* @param {string} key - The key to retrieve the data for.
* @returns {Promise<any>}
*/
async get(key) {
const transaction = this.db.transaction([this.storeName]);
const store = transaction.objectStore(this.storeName);
return new Promise((resolve, reject) => {
const request = store.get(key);
request.onsuccess = (event) => {console.log('get', event, event.target); const r =
resolve(event.target.result ? event.target.result/*.value*/ : null); };
request.onerror = () => reject('Retrieval error');
});
}
}