@cocreate/indexeddb 1.0.0 → 1.1.1

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.
Files changed (3) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/package.json +3 -3
  3. package/src/index.js +145 -91
package/CHANGELOG.md CHANGED
@@ -1,3 +1,25 @@
1
+ ## [1.1.1](https://github.com/CoCreate-app/CoCreate-indexeddb/compare/v1.1.0...v1.1.1) (2022-09-21)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * workflow cdn ([dd9bc7d](https://github.com/CoCreate-app/CoCreate-indexeddb/commit/dd9bc7d85aaf46df6a4136935721382a911ad8cc))
7
+
8
+ # [1.1.0](https://github.com/CoCreate-app/CoCreate-indexeddb/compare/v1.0.0...v1.1.0) (2022-09-21)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * bump dependencies ([cba0d67](https://github.com/CoCreate-app/CoCreate-indexeddb/commit/cba0d67e01bd106b735090ca7cbd261e533449cf))
14
+ * database - if data.collection ([58bf598](https://github.com/CoCreate-app/CoCreate-indexeddb/commit/58bf598687336eac77d559bf96c0a0b4b97d37cc))
15
+ * readDocuments returns an empty array if collection or dat does not exist ([3a68bae](https://github.com/CoCreate-app/CoCreate-indexeddb/commit/3a68bae718775955b4e808b3c4a5a1de96933460))
16
+
17
+
18
+ ### Features
19
+
20
+ * sync function to compare modified dateTime and insert to indexeddb ([41ce499](https://github.com/CoCreate-app/CoCreate-indexeddb/commit/41ce499fd160b47c6927500f3c2b92af678a964f))
21
+ * update and delete keys, readDocuments and read collections return a filter and sorted array ([8446332](https://github.com/CoCreate-app/CoCreate-indexeddb/commit/84463328322bc6e43e099a7f824e23c5ce891360))
22
+
1
23
  # 1.0.0 (2022-09-10)
2
24
 
3
25
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/indexeddb",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
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.2.26",
64
+ "@cocreate/docs": "^1.3.6",
65
65
  "@cocreate/filter": "^1.7.10",
66
- "@cocreate/hosting": "^1.2.22",
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.js'
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
- resolve(collections)
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
- let openRequest = indexedDB.open(data.database);
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
- db.close()
486
- resolve(request.result)
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
- openRequest.onerror = function() {
496
- reject(openRequest.error)
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
- // // called for each record
597
- // request.onsuccess = function() {
598
- // let isFilter;
599
- // let cursor = request.result;
600
- // if (cursor) {
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
- request.onerror = function() {
646
- reject(request.error)
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 default {
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
  };