Upgrading to the PouchDb indexedDb adapter while testing signals in web workers...
This commit is contained in:
1 parent
e73497265f
commit
4a4ebdff50
11 files changed
+362
-5
No files matched your search
@@ -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();
|
||||
};
|
||||
Reference in new issue
Block a user