Replace object stores for Chroma and token cache

This commit is contained in:
Cohee
2023-08-14 22:19:14 +03:00
parent edcce96a6e
commit 3850e6b50a
5 changed files with 65 additions and 150 deletions

View File

@ -370,99 +370,6 @@ export function splitRecursive(input, length, delimitiers = ['\n\n', '\n', ' ',
return result;
}
export class IndexedDBStore {
constructor(dbName, storeName) {
this.dbName = dbName;
this.storeName = storeName;
this.db = null;
this.version = Date.now();
}
async open() {
return new Promise((resolve, reject) => {
const request = indexedDB.open(this.dbName, this.version);
request.onupgradeneeded = (event) => {
const db = event.target.result;
if (!db.objectStoreNames.contains(this.storeName)) {
db.createObjectStore(this.storeName, { keyPath: null, autoIncrement: false });
}
};
request.onsuccess = (event) => {
console.debug(`IndexedDBStore.open(${this.dbName})`);
this.db = event.target.result;
resolve(this.db);
};
request.onerror = (event) => {
console.error(`IndexedDBStore.open(${this.dbName})`);
reject(event.target.error);
};
});
}
async get(key) {
if (!this.db) await this.open();
return new Promise((resolve, reject) => {
const transaction = this.db.transaction(this.storeName, "readonly");
const objectStore = transaction.objectStore(this.storeName);
const request = objectStore.get(key);
request.onsuccess = (event) => {
console.debug(`IndexedDBStore.get(${key})`);
resolve(event.target.result);
};
request.onerror = (event) => {
console.error(`IndexedDBStore.get(${key})`);
reject(event.target.error);
};
});
}
async put(key, object) {
if (!this.db) await this.open();
return new Promise((resolve, reject) => {
const transaction = this.db.transaction(this.storeName, "readwrite");
const objectStore = transaction.objectStore(this.storeName);
const request = objectStore.put(object, key);
request.onsuccess = (event) => {
console.debug(`IndexedDBStore.put(${key})`);
resolve(event.target.result);
};
request.onerror = (event) => {
console.error(`IndexedDBStore.put(${key})`);
reject(event.target.error);
};
});
}
async delete(key) {
if (!this.db) await this.open();
return new Promise((resolve, reject) => {
const transaction = this.db.transaction(this.storeName, "readwrite");
const objectStore = transaction.objectStore(this.storeName);
const request = objectStore.delete(key);
request.onsuccess = (event) => {
console.debug(`IndexedDBStore.delete(${key})`);
resolve(event.target.result);
};
request.onerror = (event) => {
console.error(`IndexedDBStore.delete(${key})`);
reject(event.target.error);
};
});
}
}
export function isDataURL(str) {
const regex = /^data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)*;?)?(base64)?,([a-z0-9!$&',()*+;=\-_%.~:@\/?#]+)?$/i;
return regex.test(str);