Skip to content

Commit f98cd51

Browse files
committed
Update pragmatic example
1 parent 68a1354 commit f98cd51

File tree

2 files changed

+56
-47
lines changed

2 files changed

+56
-47
lines changed

Pragmatic/static/storage.js

Lines changed: 55 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ class Database {
2222
resolve();
2323
};
2424
request.onerror = (event) => {
25-
reject(event.target.error ?? new Error(`IndexedDB: can't open ${this.#name}`));
25+
reject(
26+
event.target.error ??
27+
new Error(`IndexedDB: can't open ${this.#name}`),
28+
);
2629
};
2730
});
2831
return this;
@@ -41,7 +44,9 @@ class Database {
4144
}
4245

4346
#exec(store, operation, mode = 'readwrite') {
44-
if (!this.#active) return Promise.reject(new Error('Database not connected'));
47+
if (!this.#active) {
48+
return Promise.reject(new Error('Database not connected'));
49+
}
4550
return new Promise((resolve, reject) => {
4651
try {
4752
const tx = this.#instance.transaction(store, mode);
@@ -68,42 +73,58 @@ class Database {
6873
}
6974

7075
get({ store, id }) {
71-
return this.#exec(store, (s) => {
72-
const req = s.get(id);
73-
return new Promise((resolve, reject) => {
74-
req.onsuccess = () => resolve(req.result);
75-
req.onerror = () => reject(req.error ?? new Error(`Can't get ${id}`));
76-
});
77-
}, 'readonly');
76+
return this.#exec(
77+
store,
78+
(s) => {
79+
const req = s.get(id);
80+
return new Promise((resolve, reject) => {
81+
req.onsuccess = () => resolve(req.result);
82+
req.onerror = () => reject(req.error ?? new Error(`Can't get ${id}`));
83+
});
84+
},
85+
'readonly',
86+
);
7887
}
7988

8089
select({ store, where, limit, offset, order, filter, sort }) {
81-
return this.#exec(store, (s) => {
82-
const results = [];
83-
let skipped = 0;
84-
return new Promise((resolve, reject) => {
85-
const req = s.openCursor();
86-
req.onerror = () => reject(req.error);
87-
req.onsuccess = (event) => {
88-
const cursor = event.target.result;
89-
if (!cursor) {
90-
const filtered = filter ? results.filter(filter) : results;
91-
return resolve(sort ? filtered.toSorted(sort) : Database.#order(filtered, order));
92-
}
93-
const record = cursor.value;
94-
const match = !where || Object.entries(where).every(([k, v]) => record[k] === v);
95-
if (match) {
96-
if (!offset || skipped >= offset) {
97-
results.push(record);
98-
if (limit && results.length >= limit) return resolve(results);
99-
} else {
100-
skipped++;
90+
return this.#exec(
91+
store,
92+
(s) => {
93+
const results = [];
94+
let skipped = 0;
95+
return new Promise((resolve, reject) => {
96+
const req = s.openCursor();
97+
req.onerror = () => reject(req.error);
98+
req.onsuccess = (event) => {
99+
const cursor = event.target.result;
100+
if (!cursor) {
101+
const filtered = filter ? results.filter(filter) : results;
102+
return void resolve(
103+
sort
104+
? filtered.toSorted(sort)
105+
: Database.#order(filtered, order),
106+
);
107+
}
108+
const record = cursor.value;
109+
const match =
110+
!where ||
111+
Object.entries(where).every(([k, v]) => record[k] === v);
112+
if (match) {
113+
if (!offset || skipped >= offset) {
114+
results.push(record);
115+
if (limit && results.length >= limit) {
116+
return void resolve(results);
117+
}
118+
} else {
119+
skipped++;
120+
}
101121
}
102-
}
103-
cursor.continue();
104-
};
105-
});
106-
}, 'readonly');
122+
cursor.continue();
123+
};
124+
});
125+
},
126+
'readonly',
127+
);
107128
}
108129

109130
static #order(arr, order) {

Pragmatic/test/database.js

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import assert from 'node:assert/strict';
33
import 'fake-indexeddb/auto';
44
import { Database } from '../static/storage.js';
55

6-
test('Database full CRUD + queries', async () => {
6+
test('Pragmatic: Database CRUD + DSL', async () => {
77
const db = await new Database('TestDB', {
88
version: 1,
99
schemas: {
@@ -72,15 +72,3 @@ test('Database full CRUD + queries', async () => {
7272
});
7373
assert.equal(limited.length, 1);
7474
});
75-
76-
test('Database handles empty queries', async () => {
77-
const db = await new Database('EmptyDB', {
78-
version: 1,
79-
schemas: {
80-
log: { keyPath: 'id', autoIncrement: true },
81-
},
82-
});
83-
84-
const empty = await db.select({ store: 'log' });
85-
assert.deepEqual(empty, []);
86-
});

0 commit comments

Comments
 (0)