@cocreate/indexeddb 1.0.0 → 1.1.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/CHANGELOG.md +15 -0
- package/package.json +3 -3
- package/src/index.js +145 -91
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
# [1.1.0](https://github.com/CoCreate-app/CoCreate-indexeddb/compare/v1.0.0...v1.1.0) (2022-09-21)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* bump dependencies ([cba0d67](https://github.com/CoCreate-app/CoCreate-indexeddb/commit/cba0d67e01bd106b735090ca7cbd261e533449cf))
|
|
7
|
+
* database - if data.collection ([58bf598](https://github.com/CoCreate-app/CoCreate-indexeddb/commit/58bf598687336eac77d559bf96c0a0b4b97d37cc))
|
|
8
|
+
* readDocuments returns an empty array if collection or dat does not exist ([3a68bae](https://github.com/CoCreate-app/CoCreate-indexeddb/commit/3a68bae718775955b4e808b3c4a5a1de96933460))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* sync function to compare modified dateTime and insert to indexeddb ([41ce499](https://github.com/CoCreate-app/CoCreate-indexeddb/commit/41ce499fd160b47c6927500f3c2b92af678a964f))
|
|
14
|
+
* update and delete keys, readDocuments and read collections return a filter and sorted array ([8446332](https://github.com/CoCreate-app/CoCreate-indexeddb/commit/84463328322bc6e43e099a7f824e23c5ce891360))
|
|
15
|
+
|
|
1
16
|
# 1.0.0 (2022-09-10)
|
|
2
17
|
|
|
3
18
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cocreate/indexeddb",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "A simple indexeddb component in vanilla javascript. Easily configured using HTML5 data-attributes and/or JavaScript API.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"indexeddb",
|
|
@@ -61,9 +61,9 @@
|
|
|
61
61
|
"webpack-log": "^3.0.1"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@cocreate/docs": "^1.
|
|
64
|
+
"@cocreate/docs": "^1.3.6",
|
|
65
65
|
"@cocreate/filter": "^1.7.10",
|
|
66
|
-
"@cocreate/hosting": "^1.
|
|
66
|
+
"@cocreate/hosting": "^1.3.5",
|
|
67
67
|
"@cocreate/utils": "^1.10.1"
|
|
68
68
|
}
|
|
69
69
|
}
|
package/src/index.js
CHANGED
|
@@ -4,10 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* SPDX-License-Identifier: MIT
|
|
6
6
|
********************************************************************************/
|
|
7
|
-
// import observer from "@cocreate/observer"
|
|
8
|
-
// import crud from '@cocreate/crud'
|
|
9
7
|
import {dotNotationToObject} from '@cocreate/utils'
|
|
10
|
-
import {searchData, sortData, queryData} from '@cocreate/filter'
|
|
8
|
+
import {searchData, sortData, queryData} from '@cocreate/filter/src/filter'
|
|
11
9
|
|
|
12
10
|
const createDatabase = (data) => {
|
|
13
11
|
return new Promise((resolve, reject) => {
|
|
@@ -122,7 +120,7 @@ const database = (data) => {
|
|
|
122
120
|
openRequest.onsuccess = function() {
|
|
123
121
|
let db = openRequest.result;
|
|
124
122
|
let collectionExist = db.objectStoreNames.contains(data.collection)
|
|
125
|
-
if (!collectionExist || data.upgrade == true) {
|
|
123
|
+
if (data.collection && !collectionExist || data.upgrade == true) {
|
|
126
124
|
let version = openRequest.result.version
|
|
127
125
|
db.close()
|
|
128
126
|
|
|
@@ -203,7 +201,14 @@ const readCollections = (data) => {
|
|
|
203
201
|
openRequest.onsuccess = function() {
|
|
204
202
|
let db = openRequest.result;
|
|
205
203
|
let collections = db.objectStoreNames
|
|
206
|
-
|
|
204
|
+
data.data = [];
|
|
205
|
+
|
|
206
|
+
for (let collection of Array.from(collections)){
|
|
207
|
+
data.data.push({name: collection})
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
data.collection = 'collections'
|
|
211
|
+
resolve(data)
|
|
207
212
|
}
|
|
208
213
|
|
|
209
214
|
openRequest.onerror = function() {
|
|
@@ -471,30 +476,54 @@ const createDocument = (data) => {
|
|
|
471
476
|
})
|
|
472
477
|
}
|
|
473
478
|
|
|
474
|
-
const readDocument = (data) => {
|
|
479
|
+
const readDocument = (data, db, collection) => {
|
|
475
480
|
return new Promise((resolve, reject) => {
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
openRequest.onsuccess = function() {
|
|
479
|
-
let db = openRequest.result;
|
|
480
|
-
let transaction = db.transaction([data.collection], "readwrite");
|
|
481
|
-
let collection = transaction.objectStore(data.collection);
|
|
481
|
+
if (db && collection) {
|
|
482
482
|
let request = collection.get(data.data._id);
|
|
483
|
-
|
|
483
|
+
|
|
484
484
|
request.onsuccess = function() {
|
|
485
|
-
|
|
486
|
-
resolve(
|
|
485
|
+
data.data = request.result
|
|
486
|
+
resolve(data)
|
|
487
487
|
};
|
|
488
488
|
|
|
489
489
|
request.onerror = function() {
|
|
490
|
-
db.close()
|
|
491
490
|
reject(request.error)
|
|
492
491
|
};
|
|
493
|
-
}
|
|
492
|
+
} else {
|
|
494
493
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
494
|
+
let openRequest = indexedDB.open(data.database);
|
|
495
|
+
|
|
496
|
+
openRequest.onsuccess = function() {
|
|
497
|
+
try {
|
|
498
|
+
|
|
499
|
+
let db = openRequest.result;
|
|
500
|
+
let transaction = db.transaction([data.collection], "readwrite");
|
|
501
|
+
let collection = transaction.objectStore(data.collection);
|
|
502
|
+
let request = collection.get(data.data._id);
|
|
503
|
+
|
|
504
|
+
request.onsuccess = function() {
|
|
505
|
+
db.close()
|
|
506
|
+
data.data = request.result
|
|
507
|
+
resolve(data)
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
request.onerror = function() {
|
|
511
|
+
db.close()
|
|
512
|
+
reject(request.error)
|
|
513
|
+
};
|
|
514
|
+
} catch (err) {
|
|
515
|
+
data.data = {}
|
|
516
|
+
// data.error = err
|
|
517
|
+
resolve(data)
|
|
518
|
+
return
|
|
519
|
+
}
|
|
520
|
+
};
|
|
521
|
+
|
|
522
|
+
openRequest.onerror = function() {
|
|
523
|
+
reject(openRequest.error)
|
|
524
|
+
};
|
|
525
|
+
|
|
526
|
+
}
|
|
498
527
|
})
|
|
499
528
|
}
|
|
500
529
|
|
|
@@ -506,7 +535,6 @@ const updateDocument = (data) => {
|
|
|
506
535
|
|
|
507
536
|
if (!data.data._id && data.upsert == true) {
|
|
508
537
|
data.data['_id'] = ObjectId()
|
|
509
|
-
document = false
|
|
510
538
|
}
|
|
511
539
|
if (!data.data._id) {
|
|
512
540
|
db.close()
|
|
@@ -517,6 +545,23 @@ const updateDocument = (data) => {
|
|
|
517
545
|
// ToDo: merge objects and update using dot notation
|
|
518
546
|
if (get.result || data.upsert == true) {
|
|
519
547
|
data.data = dotNotationToObject(data.data, get.result)
|
|
548
|
+
|
|
549
|
+
if (data.updateName){
|
|
550
|
+
for (let [key, value] of Object.entries(data.updateName)){
|
|
551
|
+
let val = data.data[key]
|
|
552
|
+
delete data.data[key]
|
|
553
|
+
data.data[value] = val
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
if (data.deleteName){
|
|
559
|
+
for (let key of Object.keys(data.deleteName)){
|
|
560
|
+
delete data.data[key]
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
}
|
|
564
|
+
|
|
520
565
|
let put = collection.put(data.data);
|
|
521
566
|
|
|
522
567
|
put.onsuccess = function() {
|
|
@@ -571,6 +616,62 @@ const deleteDocument = (data) => {
|
|
|
571
616
|
}
|
|
572
617
|
|
|
573
618
|
const readDocuments = (data) => {
|
|
619
|
+
return new Promise((resolve, reject) => {
|
|
620
|
+
let openRequest = indexedDB.open(data.database);
|
|
621
|
+
|
|
622
|
+
openRequest.onsuccess = function() {
|
|
623
|
+
let db = openRequest.result;
|
|
624
|
+
try {
|
|
625
|
+
// var transaction = db.transaction([data.collection], "readonly");
|
|
626
|
+
let transaction = db.transaction([data.collection], "readonly");
|
|
627
|
+
let collection = transaction.objectStore(data.collection);
|
|
628
|
+
let results = [];
|
|
629
|
+
// let index = collection.index(filter.name);
|
|
630
|
+
// let request = index.openCursor(IDBKeyRange.upperBound(filter.value));
|
|
631
|
+
let request = collection.openCursor();
|
|
632
|
+
// transaction.oncomplete = resolve(results);
|
|
633
|
+
|
|
634
|
+
request.onsuccess = function() {
|
|
635
|
+
let isFilter;
|
|
636
|
+
let cursor = request.result;
|
|
637
|
+
if (cursor) {
|
|
638
|
+
let value = cursor.value;
|
|
639
|
+
if (data.filter && data.filter.query)
|
|
640
|
+
isFilter = queryData(value, data.filter.query);
|
|
641
|
+
if (isFilter !== false)
|
|
642
|
+
results.push(value)
|
|
643
|
+
cursor.continue();
|
|
644
|
+
} else {
|
|
645
|
+
data.data = results
|
|
646
|
+
if (data.filter) {
|
|
647
|
+
if (data.filter.search)
|
|
648
|
+
data.data = searchData(data.data, data.filter)
|
|
649
|
+
if (data.filter.sort)
|
|
650
|
+
data.data = sortData(data.data, data.filter.sort)
|
|
651
|
+
}
|
|
652
|
+
resolve(data)
|
|
653
|
+
}
|
|
654
|
+
};
|
|
655
|
+
|
|
656
|
+
request.onerror = function() {
|
|
657
|
+
request.data = []
|
|
658
|
+
reject(request.error)
|
|
659
|
+
};
|
|
660
|
+
} catch (err) {
|
|
661
|
+
data.data = []
|
|
662
|
+
// data.error = err
|
|
663
|
+
resolve(data)
|
|
664
|
+
return
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
};
|
|
668
|
+
|
|
669
|
+
openRequest.onerror = function() {
|
|
670
|
+
reject(openRequest.error)
|
|
671
|
+
};
|
|
672
|
+
})
|
|
673
|
+
}
|
|
674
|
+
const sync = (action, data) => {
|
|
574
675
|
return new Promise((resolve, reject) => {
|
|
575
676
|
let openRequest = indexedDB.open(data.database);
|
|
576
677
|
|
|
@@ -578,75 +679,27 @@ const readDocuments = (data) => {
|
|
|
578
679
|
let db = openRequest.result;
|
|
579
680
|
let transaction = db.transaction([data.collection], "readonly");
|
|
580
681
|
let collection = transaction.objectStore(data.collection);
|
|
581
|
-
let results = [];
|
|
582
|
-
// for (let filter of data.filters) {
|
|
583
|
-
// if (!collection.indexNames.contains(filter.name)) {
|
|
584
|
-
// db.close()
|
|
585
|
-
// createIndex(data.database, data.collection, filter.name).then(() => {
|
|
586
|
-
// database(data).then((db) => {
|
|
587
|
-
// let transaction = db.transaction([data.collection], "readonly");
|
|
588
|
-
// transaction.oncomplete = resolve(results);
|
|
589
|
-
|
|
590
|
-
// let collection = transaction.objectStore(data.collection);
|
|
591
|
-
// collection = transaction.objectStore(data.collection);
|
|
592
|
-
|
|
593
|
-
// let index = collection.index(filter.name);
|
|
594
|
-
// let request = index.openCursor(IDBKeyRange.upperBound(filter.value));
|
|
595
682
|
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
// let value = cursor.value;
|
|
602
|
-
// if (data.filter)
|
|
603
|
-
// isFilter = filter.queryData(value, data.filter);
|
|
604
|
-
// if (isFilter)
|
|
605
|
-
// results.push(value)
|
|
606
|
-
// cursor.continue();
|
|
607
|
-
// } else {
|
|
608
|
-
// console.log("No more documents");
|
|
609
|
-
// }
|
|
610
|
-
// };
|
|
611
|
-
|
|
612
|
-
// request.onerror = function() {
|
|
613
|
-
// reject(request.error)
|
|
614
|
-
// };
|
|
615
|
-
|
|
616
|
-
// });
|
|
617
|
-
// });
|
|
618
|
-
// } else {
|
|
619
|
-
// let index = collection.index(filter.name);
|
|
620
|
-
// let request = index.openCursor(IDBKeyRange.upperBound(filter.value));
|
|
621
|
-
let request = collection.openCursor();
|
|
622
|
-
transaction.oncomplete = resolve(results);
|
|
623
|
-
|
|
624
|
-
request.onsuccess = function() {
|
|
625
|
-
let isFilter;
|
|
626
|
-
let cursor = request.result;
|
|
627
|
-
if (cursor) {
|
|
628
|
-
let value = cursor.value;
|
|
629
|
-
if (data.filter && data.filter.query)
|
|
630
|
-
isFilter = queryData(value, data.filter.query);
|
|
631
|
-
if (isFilter !== false)
|
|
632
|
-
results.push(value)
|
|
633
|
-
cursor.continue();
|
|
634
|
-
} else {
|
|
635
|
-
if (data.filter) {
|
|
636
|
-
if (data.filter.search)
|
|
637
|
-
data.data = searchData(results, data.filter)
|
|
638
|
-
if (data.filter.sort)
|
|
639
|
-
data.data = sortData(data.data, data.filter.sort)
|
|
640
|
-
}
|
|
641
|
-
resolve(data)
|
|
683
|
+
if (Array.isArray(data.data)) {
|
|
684
|
+
for (let item of data.data) {
|
|
685
|
+
readDocument(item, db, collection).then((doc) => {
|
|
686
|
+
if (doc.modified.on < item.modifed.on) {
|
|
687
|
+
collection.put(item)
|
|
642
688
|
}
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
689
|
+
|
|
690
|
+
})
|
|
691
|
+
}
|
|
692
|
+
} else {
|
|
693
|
+
readDocument(item, db, collection).then((doc) => {
|
|
694
|
+
if (doc.modified.on < item.modifed.on) {
|
|
695
|
+
collection.put(item)
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
})
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
db.close()
|
|
702
|
+
resolve('synced')
|
|
650
703
|
};
|
|
651
704
|
|
|
652
705
|
openRequest.onerror = function() {
|
|
@@ -664,12 +717,12 @@ function init() {
|
|
|
664
717
|
if (!('indexedDB' in window)) {
|
|
665
718
|
console.log("This browser doesn't support IndexedDB.");
|
|
666
719
|
return;
|
|
667
|
-
}
|
|
668
|
-
}
|
|
720
|
+
} else { }
|
|
721
|
+
}
|
|
669
722
|
|
|
670
723
|
init();
|
|
671
724
|
|
|
672
|
-
export
|
|
725
|
+
export {
|
|
673
726
|
database,
|
|
674
727
|
createDatabase,
|
|
675
728
|
readDatabase,
|
|
@@ -693,5 +746,6 @@ export default {
|
|
|
693
746
|
updateDocument,
|
|
694
747
|
deleteDocument,
|
|
695
748
|
|
|
749
|
+
sync,
|
|
696
750
|
ObjectId
|
|
697
751
|
};
|