@cocreate/indexeddb 1.27.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/FUNDING.yml +1 -1
- package/.github/workflows/automated.yml +18 -7
- package/CHANGELOG.md +491 -456
- package/CONTRIBUTING.md +6 -6
- package/CoCreate.config.js +2 -2
- package/README.md +18 -18
- package/demo/index.html +1 -1
- package/docs/index.html +4 -4
- package/package.json +7 -7
- package/src/index.js +1012 -921
- package/test/documents.js +1 -1
- package/test/index.html +1 -1
- package/test/unsorted-response.test.cjs +104 -0
- /package/{release.config.js → release.config.cjs} +0 -0
package/test/documents.js
CHANGED
package/test/index.html
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
<body>
|
|
17
17
|
<!-- <script src="../../../CoCreateJS/dist/CoCreate.js"></script> -->
|
|
18
|
-
<script src="https://
|
|
18
|
+
<script src="https://CoCreateJS.com/dist/CoCreate.js"></script>
|
|
19
19
|
<!-- <script src="../../../CoCreateJS/dist/indexeddb-chunk.js"></script> -->
|
|
20
20
|
<script src="./operators.js"></script>
|
|
21
21
|
<script src="./databases.js"></script>
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
const assert = require('node:assert/strict');
|
|
2
|
+
const fs = require('node:fs');
|
|
3
|
+
const path = require('node:path');
|
|
4
|
+
const vm = require('node:vm');
|
|
5
|
+
const test = require('node:test');
|
|
6
|
+
|
|
7
|
+
async function load(indexedDB) {
|
|
8
|
+
const context = vm.createContext({ console, indexedDB });
|
|
9
|
+
const source = fs.readFileSync(path.join(__dirname, '../src/index.js'), 'utf8');
|
|
10
|
+
const module = new vm.SourceTextModule(source + '\nexport { createData, getSortPlan, processArray, processDatabase };', { context });
|
|
11
|
+
await module.link(() => new vm.SyntheticModule([
|
|
12
|
+
'ObjectId', 'dotNotationToObject', 'searchData', 'sortData',
|
|
13
|
+
'queryData', 'createUpdate', 'isEqualArray', 'isEqualObject'
|
|
14
|
+
], function () {
|
|
15
|
+
this.setExport('queryData', (data, query) =>
|
|
16
|
+
Object.entries(query).every(([key, value]) => data[key] === value)
|
|
17
|
+
);
|
|
18
|
+
}, { context }));
|
|
19
|
+
await module.evaluate();
|
|
20
|
+
return module.namespace;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
test('unsorted table read returns its response instead of throwing', async () => {
|
|
24
|
+
const { createData } = await load();
|
|
25
|
+
const object = [{ _id: 'app', fields: [{ label: 'Name' }] }];
|
|
26
|
+
const data = { method: 'object.read', object: [], filter: { index: 0, overwrite: true } };
|
|
27
|
+
assert.equal(createData(data, object, 'object'), data);
|
|
28
|
+
assert.deepEqual(data.object, object);
|
|
29
|
+
assert.equal(data.filter.index, 1);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('queue deletion returns queued requests without requiring a sort', async () => {
|
|
33
|
+
const { createData } = await load();
|
|
34
|
+
const queued = { _id: 'queue-entry', data: { uuid: 'request' }, status: 'queued' };
|
|
35
|
+
const data = { method: 'object.delete', object: [], filter: { query: { status: 'queued' } } };
|
|
36
|
+
assert.equal(createData(data, [queued], 'object').object[0], queued);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test('sort planning supports absent, empty and named sort fields', async () => {
|
|
40
|
+
const { getSortPlan } = await load();
|
|
41
|
+
for (const filter of [undefined, {}, { sort: [] }, { sort: [{}] }])
|
|
42
|
+
assert.equal(getSortPlan(filter).indexName, undefined);
|
|
43
|
+
assert.equal(getSortPlan({ sort: [{ key: '_id' }] }).indexName, undefined);
|
|
44
|
+
assert.equal(getSortPlan({ sort: [{ key: 'name', direction: 'desc' }] }).indexName, 'name');
|
|
45
|
+
assert.equal(getSortPlan({ sort: [{ key: 'name', direction: 'desc' }] }).direction, 'prev');
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test('filtered array reads return one scalar name per matching object store', async () => {
|
|
49
|
+
const objectStoreNames = ['users', 'posts', 'events'];
|
|
50
|
+
const indexedDB = {
|
|
51
|
+
open() {
|
|
52
|
+
const request = {
|
|
53
|
+
result: {
|
|
54
|
+
objectStoreNames,
|
|
55
|
+
close() {}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
queueMicrotask(() => request.onsuccess());
|
|
59
|
+
return request;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const { processArray } = await load(indexedDB);
|
|
63
|
+
const data = {
|
|
64
|
+
method: 'array.read',
|
|
65
|
+
array: [],
|
|
66
|
+
filter: { query: { name: 'posts' } }
|
|
67
|
+
};
|
|
68
|
+
const result = [];
|
|
69
|
+
|
|
70
|
+
await processArray(data, result, 'app-database', 'array');
|
|
71
|
+
|
|
72
|
+
assert.deepEqual(result.map(({ name }) => name), ['posts']);
|
|
73
|
+
assert.equal(typeof result[0].name, 'string');
|
|
74
|
+
assert.deepEqual(Array.from(result[0].$database), ['app-database']);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test('database reads return database objects with scalar names and storage metadata', async () => {
|
|
78
|
+
const indexedDB = {
|
|
79
|
+
databases: async () => [
|
|
80
|
+
{ name: 'app-database', version: 3 },
|
|
81
|
+
{ name: 'cache-database', version: 1 }
|
|
82
|
+
]
|
|
83
|
+
};
|
|
84
|
+
const { createData, processDatabase } = await load(indexedDB);
|
|
85
|
+
const data = { method: 'database.read' };
|
|
86
|
+
const result = [];
|
|
87
|
+
|
|
88
|
+
await processDatabase(data, result, 'database');
|
|
89
|
+
const response = createData(data, result, 'database');
|
|
90
|
+
|
|
91
|
+
assert.deepEqual(
|
|
92
|
+
Array.from(response.database, ({ name }) => name),
|
|
93
|
+
['app-database', 'cache-database']
|
|
94
|
+
);
|
|
95
|
+
assert.equal(typeof response.database[0].name, 'string');
|
|
96
|
+
assert.deepEqual(
|
|
97
|
+
Array.from(response.database, ({ version }) => version),
|
|
98
|
+
[3, 1]
|
|
99
|
+
);
|
|
100
|
+
assert.deepEqual(
|
|
101
|
+
Array.from(response.database[0].$storage),
|
|
102
|
+
['indexeddb']
|
|
103
|
+
);
|
|
104
|
+
});
|
|
File without changes
|