UNPKG

@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
/** 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'); }); } }