Upgrading to the PouchDb indexedDb adapter while testing signals in web workers...

This commit is contained in:
vdv committed 2023-02-11 11:31:32 +01:00
1 parent e73497265f
commit 4a4ebdff50
11 files changed
+362 -5

No files matched your search

+110
View File
@@ -0,0 +1,110 @@
import { Signal } from 'solid-js';
import PouchDB from 'pouchdb';
import { getSettings } from '../db/settings';
import { delay } from '../lib/delay';
export const compactDb = async (p: { signal: Signal<any>; params: any }) => {
const { signal, params } = p;
const [, setStatus] = signal;
console.log({ caller: 'compactDb', p });
const db = new PouchDB('dyomedea', { auto_compaction: true });
const dbinfo = await db.info();
const tasks = PouchDB.activeTasks.list();
setStatus({ status: 'starting', db: 'dyomedea', dbinfo, tasks });
return;
const timerId = setInterval(async () => {
const dbinfo = await db.info();
const tasks = PouchDB.activeTasks.list();
if (tasks.length > 0) {
setStatus({ status: 'ongoing', db: 'dyomedea', dbinfo, tasks });
} else {
setStatus({ status: 'terminated', db: 'dyomedea', dbinfo, tasks });
clearInterval(timerId);
}
}, 1000);
const openIDb = (name: string) =>
new Promise((resolve, reject) => {
const iDb = indexedDB.open(name);
iDb.onerror = (event: any) => {
console.error({
caller: 'compactDb',
message: 'open db error',
target: event.target,
});
reject(event.target.errorCode);
};
iDb.onsuccess = (event: any) => {
console.log({
caller: 'compactDb',
message: 'open db',
target: event.target,
});
resolve(event.target.result);
};
});
const getAll = (store: any) =>
new Promise((resolve, reject) => {
const request = store.getAll();
request.onerror = (event: any) => {
console.error({
caller: 'compactDb',
message: 'getAll error',
target: event.target,
});
reject(event.target.errorCode);
};
request.onsuccess = (event: any) => {
console.log({
caller: 'compactDb',
message: 'getAll',
target: event.target,
});
resolve(event.target.result as any[]);
};
});
const iDb = (await openIDb('_pouch_dyomedea')) as IDBDatabase;
const bySequence = iDb.transaction('by-sequence', 'readonly');
const store = bySequence.objectStore('by-sequence');
console.log({
caller: 'compactDb',
message: 'transaction opened',
bySequence,
store,
});
const sequences = (await getAll(store)) as any[];
setStatus({
status: 'revisions',
db: 'dyomedea',
sequences,
});
sequences.forEach(async (sequence) => {
const { _deleted, _doc_id_rev } = sequence;
if (_deleted) {
const [id, rev] = _doc_id_rev.split('::');
// const purge = await db.purge(id, rev);
console.log({
caller: 'compactDb',
message: 'purging',
id,
rev,
sequence,
purge,
});
await delay(100);
}
});
// db.compact();
};