viewdb 0.11.0 → 0.13.0-beta.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.
Files changed (64) hide show
  1. package/dist/cursor.d.ts +23 -0
  2. package/dist/cursor.d.ts.map +1 -0
  3. package/dist/cursor.js +81 -0
  4. package/dist/cursor.js.map +1 -0
  5. package/dist/index.d.ts +13 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +13 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/inmemory/collection.d.ts +20 -0
  10. package/dist/inmemory/collection.d.ts.map +1 -0
  11. package/dist/inmemory/collection.js +111 -0
  12. package/dist/inmemory/collection.js.map +1 -0
  13. package/dist/inmemory/store.d.ts +8 -0
  14. package/dist/inmemory/store.d.ts.map +1 -0
  15. package/dist/inmemory/store.js +21 -0
  16. package/dist/inmemory/store.js.map +1 -0
  17. package/dist/merger.d.ts +4 -0
  18. package/dist/merger.d.ts.map +1 -0
  19. package/dist/merger.js +139 -0
  20. package/dist/merger.js.map +1 -0
  21. package/dist/observe.d.ts +18 -0
  22. package/dist/observe.d.ts.map +1 -0
  23. package/dist/observe.js +93 -0
  24. package/dist/observe.js.map +1 -0
  25. package/dist/plugins/index.d.ts +4 -0
  26. package/dist/plugins/index.d.ts.map +1 -0
  27. package/dist/plugins/index.js +8 -0
  28. package/dist/plugins/index.js.map +1 -0
  29. package/dist/plugins/viewdb_timestamp_plugin.d.ts +3 -0
  30. package/dist/plugins/viewdb_timestamp_plugin.d.ts.map +1 -0
  31. package/dist/plugins/viewdb_timestamp_plugin.js +92 -0
  32. package/dist/plugins/viewdb_timestamp_plugin.js.map +1 -0
  33. package/dist/plugins/viewdb_versioning_plugin.d.ts +3 -0
  34. package/dist/plugins/viewdb_versioning_plugin.d.ts.map +1 -0
  35. package/dist/plugins/viewdb_versioning_plugin.js +83 -0
  36. package/dist/plugins/viewdb_versioning_plugin.js.map +1 -0
  37. package/dist/types.d.ts +76 -0
  38. package/dist/types.d.ts.map +1 -0
  39. package/dist/types.js +3 -0
  40. package/dist/types.js.map +1 -0
  41. package/dist/viewdb.d.ts +13 -0
  42. package/dist/viewdb.d.ts.map +1 -0
  43. package/dist/viewdb.js +24 -0
  44. package/dist/viewdb.js.map +1 -0
  45. package/package.json +19 -12
  46. package/.prettierrc +0 -1
  47. package/index.js +0 -1
  48. package/jest.config.js +0 -11
  49. package/lib/cursor.js +0 -84
  50. package/lib/index.js +0 -6
  51. package/lib/inmemory/collection.js +0 -112
  52. package/lib/inmemory/store.js +0 -19
  53. package/lib/merger.js +0 -62
  54. package/lib/observe.js +0 -53
  55. package/lib/plugins/index.js +0 -2
  56. package/lib/plugins/viewdb_timestamp_plugin.js +0 -106
  57. package/lib/plugins/viewdb_versioning_plugin.js +0 -93
  58. package/lib/viewdb.js +0 -21
  59. package/test/cursor.js +0 -101
  60. package/test/merger.js +0 -196
  61. package/test/observe.js +0 -165
  62. package/test/plugins/viewdb_timestamp_plugin.js +0 -159
  63. package/test/plugins/viewdb_versioning_plugin.js +0 -112
  64. package/test/viewdb.js +0 -210
package/lib/merger.js DELETED
@@ -1,62 +0,0 @@
1
- var _ = require('lodash');
2
-
3
- function contains(list, element, comparator) {
4
- for (var i in list) {
5
- var n = list[i];
6
- if (comparator(element, n)) {
7
- return n;
8
- }
9
- }
10
- return undefined;
11
- }
12
-
13
- function merge(asis, tobe, options) {
14
- options = options || {};
15
- var comparator = options.comparator || _.isEqual;
16
- var comparatorId = options.comparatorId || comparator;
17
- var list = _.slice(asis);
18
- //check removed
19
- _.forEach(asis, function (e) {
20
- var found = contains(tobe, e, comparatorId);
21
- if (found === undefined) {
22
- var index = list.indexOf(e);
23
- list.splice(index, 1);
24
- if (options.removed) {
25
- options.removed(e, index);
26
- }
27
- }
28
- });
29
- var indexInNew = -1;
30
- _.forEach(tobe, function (e) {
31
- indexInNew++;
32
- var found = contains(list, e, comparatorId);
33
- //added
34
- if (found === undefined) {
35
- list.splice(indexInNew, 0, e);
36
- if (options.added) {
37
- options.added(e, indexInNew);
38
- }
39
- } else {
40
- //existed before
41
- var indexInOld = list.indexOf(found);
42
- if (indexInOld !== indexInNew) {
43
- //remove
44
- list.splice(indexInOld, 1);
45
- //add
46
- list.splice(indexInNew, 0, e);
47
- if (options.moved) {
48
- options.moved(e, indexInOld, indexInNew);
49
- }
50
- } //else not moved
51
- if (!comparator(found, e)) {
52
- list[indexInNew] = e;
53
- if (options.changed) {
54
- options.changed(found, e, indexInNew);
55
- }
56
- }
57
- }
58
- });
59
- return list;
60
- //list = _.exclude()v
61
- }
62
- module.exports = merge;
package/lib/observe.js DELETED
@@ -1,53 +0,0 @@
1
- var _ = require('lodash');
2
- var merge = require('./merger');
3
-
4
- var Observer = function (query, queryOptions, collection, options) {
5
- this._query = query;
6
- this._queryOptions = queryOptions;
7
-
8
- this._options = options;
9
- //this._options = logger;
10
- this._collection = collection;
11
- this._cache = [];
12
- var self = this;
13
- var listener = function () {
14
- self.refresh();
15
- };
16
- collection.on('change', listener);
17
- this.refresh(true);
18
- return {
19
- stop: function () {
20
- self._cache = null;
21
- collection.removeListener('change', listener);
22
- }
23
- };
24
- };
25
-
26
- Observer.prototype.refresh = function (initial) {
27
- var self = this;
28
-
29
- this._collection._getDocuments(this._query, function (err, result) {
30
- if (initial && self._options.init) {
31
- self._cache = result;
32
- self._options.init(result);
33
- } else {
34
- var old = self._cache;
35
-
36
- self._cache = merge(
37
- old,
38
- result,
39
- _.defaults(
40
- {
41
- comparatorId: function (a, b) {
42
- return _.get(a, '_id') === _.get(b, '_id');
43
- }
44
- },
45
- self._options
46
- )
47
- );
48
- //rewind cursor for next query...
49
- }
50
- });
51
- };
52
-
53
- module.exports = Observer;
@@ -1,2 +0,0 @@
1
- module.exports.VersioningPlugin = require('./viewdb_versioning_plugin');
2
- module.exports.TimestampPlugin = require('./viewdb_timestamp_plugin');
@@ -1,106 +0,0 @@
1
- var _ = require('lodash');
2
-
3
- var ViewDBTimestampPlugin = function (viewDb) {
4
- var oldCollection = viewDb.collection;
5
- viewDb.collection = function () {
6
- var coll = oldCollection.apply(this, arguments);
7
- if (!coll.__plugins_timestamp) {
8
- coll.__plugins_timestamp = true;
9
-
10
- var oldSave = coll.save;
11
- coll.save = function (docs, options) {
12
- var newdocs = docs;
13
- if (!(options && options.skipTimestamp)) {
14
- var timestamp = new Date().valueOf();
15
- if (!_.isArray(docs)) {
16
- newdocs = [docs];
17
- }
18
- for (var i = 0; i < newdocs.length; i++) {
19
- var doc = newdocs[i];
20
- if (!doc.createDateTime) {
21
- doc.createDateTime = timestamp;
22
- }
23
- doc.changeDateTime = timestamp;
24
- }
25
- }
26
- oldSave.apply(this, arguments);
27
- };
28
-
29
- var oldInsert = coll.insert;
30
- coll.insert = function (docs, options) {
31
- if (!(options && options.skipTimestamp)) {
32
- if (!_.isArray(docs)) {
33
- docs = [docs];
34
- }
35
- var timestamp = new Date().valueOf();
36
- for (var i = 0; i < docs.length; i++) {
37
- var doc = docs[i];
38
- doc.createDateTime = timestamp;
39
- doc.changeDateTime = timestamp;
40
- }
41
- }
42
- oldInsert.apply(this, arguments);
43
- };
44
-
45
- var oldFindAndModify = coll.findAndModify;
46
- coll.findAndModify = function (query, sort, update, options, cb) {
47
- var timestamp = new Date().valueOf();
48
- var clonedUpdate = _.clone(update);
49
- var setOnInsert = clonedUpdate.$setOnInsert || {};
50
- setOnInsert.createDateTime = timestamp;
51
- clonedUpdate.$setOnInsert = setOnInsert;
52
-
53
- var set = clonedUpdate.$set || {};
54
- set.changeDateTime = timestamp;
55
-
56
- // if consumer tries to $set createDateTime it will lead to conflict. remove it
57
- if (set.createDateTime) {
58
- delete set.createDateTime;
59
- }
60
- clonedUpdate.$set = set;
61
- oldFindAndModify.apply(this, [query, sort, clonedUpdate, options, cb]);
62
- };
63
-
64
- var oldUpdateMany = coll.updateMany;
65
- coll.updateMany = function (query, update, options, cb) {
66
- var timestamp = new Date().valueOf();
67
- var clonedUpdate = _.clone(update);
68
- var setOnInsert = clonedUpdate.$setOnInsert || {};
69
- setOnInsert.createDateTime = timestamp;
70
- clonedUpdate.$setOnInsert = setOnInsert;
71
-
72
- var set = clonedUpdate.$set || {};
73
- set.changeDateTime = timestamp;
74
-
75
- // if consumer tries to $set createDateTime it will lead to conflict. remove it
76
- if (set.createDateTime) {
77
- delete set.createDateTime;
78
- }
79
- clonedUpdate.$set = set;
80
- oldUpdateMany.apply(this, [query, clonedUpdate, options, cb]);
81
- };
82
-
83
- var oldUpdateOne = coll.updateOne;
84
- coll.updateOne = function (query, update, options, cb) {
85
- var timestamp = new Date().valueOf();
86
- var clonedUpdate = _.clone(update);
87
- var setOnInsert = clonedUpdate.$setOnInsert || {};
88
- setOnInsert.createDateTime = timestamp;
89
- clonedUpdate.$setOnInsert = setOnInsert;
90
-
91
- var set = clonedUpdate.$set || {};
92
- set.changeDateTime = timestamp;
93
-
94
- // if consumer tries to $set createDateTime it will lead to conflict. remove it
95
- if (set.createDateTime) {
96
- delete set.createDateTime;
97
- }
98
- clonedUpdate.$set = set;
99
- oldUpdateOne.apply(this, [query, clonedUpdate, options, cb]);
100
- };
101
- }
102
- return coll;
103
- };
104
- };
105
-
106
- module.exports = ViewDBTimestampPlugin;
@@ -1,93 +0,0 @@
1
- var _ = require('lodash');
2
-
3
- var ViewDBVersioningPlugin = function (viewDb) {
4
- var oldCollection = viewDb.collection;
5
- viewDb.collection = function () {
6
- var coll = oldCollection.apply(this, arguments);
7
- if (!coll.__plugins_versioning) {
8
- coll.__plugins_versioning = true;
9
-
10
- var oldSave = coll.save;
11
- coll.save = function (docs, options) {
12
- var newdocs = docs;
13
- if (!(options && options.skipVersioning)) {
14
- if (!_.isArray(docs)) {
15
- newdocs = [docs];
16
- }
17
- for (var i = 0; i < newdocs.length; i++) {
18
- var doc = newdocs[i];
19
- doc.version = _getVersion(doc.version);
20
- }
21
- }
22
- oldSave.apply(this, arguments);
23
- };
24
-
25
- var oldInsert = coll.insert;
26
- coll.insert = function (docs, options) {
27
- if (!(options && options.skipVersioning)) {
28
- if (!_.isArray(docs)) {
29
- docs = [docs];
30
- }
31
- for (var i = 0; i < docs.length; i++) {
32
- var doc = docs[i];
33
- doc.version = _getVersion(doc.version);
34
- }
35
- }
36
- oldInsert.apply(this, arguments);
37
- };
38
-
39
- var oldFindAndModify = coll.findAndModify;
40
- coll.findAndModify = function (query, sort, update, options, cb) {
41
- if (!(options && options.skipVersioning)) {
42
- var inc = update.$inc || {};
43
- inc.version = 1;
44
- update.$inc = inc;
45
- if (update.$set && update.$set.version >= 0) {
46
- delete update.$set.version;
47
- }
48
- }
49
- oldFindAndModify.apply(this, arguments);
50
- };
51
-
52
- var oldUpdateMany = coll.updateMany;
53
- coll.updateMany = function (query, update, options, cb) {
54
- if (!(options && options.skipVersioning)) {
55
- var inc = update.$inc || {};
56
- inc.version = 1;
57
- update.$inc = inc;
58
- if (update.$set && update.$set.version >= 0) {
59
- delete update.$set.version;
60
- }
61
- }
62
- oldUpdateMany.apply(this, arguments);
63
- };
64
-
65
- var oldUpdateOne = coll.updateOne;
66
- coll.updateOne = function (query, update, options, cb) {
67
- if (!(options && options.skipVersioning)) {
68
- var inc = update.$inc || {};
69
- inc.version = 1;
70
- update.$inc = inc;
71
- if (update.$set && update.$set.version >= 0) {
72
- delete update.$set.version;
73
- }
74
- }
75
- oldUpdateOne.apply(this, arguments);
76
- };
77
- }
78
- return coll;
79
- };
80
- };
81
-
82
- function _getVersion(version) {
83
- var newVersion;
84
- if (_.isUndefined(version)) {
85
- newVersion = 0;
86
- } else {
87
- newVersion = version + 1;
88
- }
89
-
90
- return newVersion;
91
- }
92
-
93
- module.exports = ViewDBVersioningPlugin;
package/lib/viewdb.js DELETED
@@ -1,21 +0,0 @@
1
- var InMemoryStore = require('./inmemory/store');
2
-
3
- var ViewDB = function (store) {
4
- this._store = store || new InMemoryStore();
5
- };
6
-
7
- ViewDB.prototype.open = function () {
8
- if (this._store.open) {
9
- return this._store.open().then(function () {
10
- return this;
11
- });
12
- } else {
13
- return Promise.resolve(this);
14
- }
15
- };
16
-
17
- ViewDB.prototype.collection = function (collectionName, callback) {
18
- return this._store.collection(collectionName, callback);
19
- };
20
-
21
- module.exports = ViewDB;
package/test/cursor.js DELETED
@@ -1,101 +0,0 @@
1
- var Cursor = require('../lib/cursor');
2
- var ViewDB = require('..');
3
-
4
- describe('Cursor', () => {
5
- it('#toArray', (done) => {
6
- var cursor = new Cursor(null, {}, null, function (query, callback) {
7
- callback(null, [1, 2, 3, 4]);
8
- });
9
- cursor.toArray(function (err, result) {
10
- expect(result.length).toBe(4);
11
- done();
12
- });
13
- });
14
- it('#forEach', (done) => {
15
- var cursor = new Cursor(null, {}, null, function (query, callback) {
16
- callback(null, [1, 2, 3, 4]);
17
- });
18
- var calls = 0;
19
- cursor.forEach(function (result) {
20
- expect(result).toBeTruthy();
21
- calls++;
22
- });
23
- setTimeout(function () {
24
- expect(calls).toBe(4);
25
- done();
26
- }, 0);
27
- });
28
- it('#skip', (done) => {
29
- var db = new ViewDB();
30
- var collection = db.collection('documents');
31
- for (var i = 0; i < 10; i++) {
32
- collection.insert({ a: 'a', id: i });
33
- }
34
- collection
35
- .find({ a: 'a' })
36
- .skip(5)
37
- .toArray(function (err, res) {
38
- expect(res.length).toBe(5);
39
- done();
40
- });
41
- });
42
- it('#limit', (done) => {
43
- var db = new ViewDB();
44
- var collection = db.collection('documents');
45
- for (var i = 0; i < 10; i++) {
46
- collection.insert({ a: 'a', id: i });
47
- }
48
- collection
49
- .find({ a: 'a' })
50
- .limit(9)
51
- .toArray(function (err, res) {
52
- expect(res[8].id).toBe(8);
53
- expect(res.length).toBe(9);
54
- done();
55
- });
56
- });
57
- it('#sort', (done) => {
58
- var db = new ViewDB();
59
- var collection = db.collection('documents');
60
- for (var i = 0; i < 10; i++) {
61
- collection.insert({ a: 'a', id: i });
62
- }
63
- collection
64
- .find({})
65
- .sort({ id: 1 })
66
- .toArray(function (err, res) {
67
- expect(res[0].id).toBe(0);
68
- done();
69
- });
70
- });
71
- it('#sort desc', (done) => {
72
- var db = new ViewDB();
73
- var collection = db.collection('documents');
74
- for (var i = 0; i < 10; i++) {
75
- collection.insert({ a: 'a', id: i });
76
- }
77
- collection
78
- .find({})
79
- .sort({ id: -1 })
80
- .toArray(function (err, res) {
81
- expect(res[0].id).toBe(9);
82
- done();
83
- });
84
- });
85
- it('#skip/limit', (done) => {
86
- var db = new ViewDB();
87
- var collection = db.collection('documents');
88
- for (var i = 0; i < 10; i++) {
89
- collection.insert({ a: 'a', id: i });
90
- }
91
- collection
92
- .find({ a: 'a' })
93
- .skip(8)
94
- .limit(10)
95
- .toArray(function (err, res) {
96
- expect(res[1].id).toBe(9);
97
- expect(res.length).toBe(2); // only 2 left after skipping 8/10
98
- done();
99
- });
100
- });
101
- });
package/test/merger.js DELETED
@@ -1,196 +0,0 @@
1
- var _ = require('lodash');
2
- var merge = require('../lib/merger');
3
-
4
- describe('Merger', () => {
5
- it('#merge with remove element', (done) => {
6
- var l1 = [{ a: 1 }, 'b', 'd'];
7
- var l2 = [{ a: 1 }, 'b'];
8
-
9
- var res = merge(l1, l2, {
10
- removed: function (e) {
11
- expect(e).toBe('d');
12
- done();
13
- },
14
- comparatorId: _.isEqual,
15
- comparator: _.isEqual
16
- });
17
- expect(_.isEqual(l2, res)).toBe(true);
18
-
19
- // console.log(_.difference(l1,l2));
20
- });
21
- it('#merge with remove complex element', (done) => {
22
- var l1 = [{ a: 1 }, 'b', 'd', { e: 1 }];
23
- var l2 = [{ a: 1 }, 'b'];
24
- var removed = [];
25
- var res = merge(l1, l2, {
26
- removed: function (e) {
27
- removed.push(e);
28
- },
29
- comparatorId: _.isEqual,
30
- comparator: _.isEqual
31
- });
32
- expect(removed.length).toBe(2);
33
- expect(_.isEqual(l2, res)).toBe(true);
34
- done();
35
-
36
- // console.log(_.difference(l1,l2));
37
- });
38
-
39
- it('#merge with objects instead of arrays', (done) => {
40
- var l1 = { 0: { a: 1 }, 1: 'b', 2: 'd', 3: { e: 1 } };
41
- var l2 = [{ a: 1 }, 'b'];
42
- var removed = [];
43
- var res = merge(l1, l2, {
44
- removed: function (e) {
45
- removed.push(e);
46
- },
47
- comparatorId: _.isEqual,
48
- comparator: _.isEqual
49
- });
50
- expect(removed.length).toBe(2);
51
- expect(_.isEqual(l2, res)).toBe(true);
52
- done();
53
-
54
- // console.log(_.difference(l1,l2));
55
- });
56
-
57
- it('#merge with one add element', (done) => {
58
- var l1 = [{ a: 1 }, 'b'];
59
- var l2 = [{ a: 1 }, 'b', 'c'];
60
-
61
- var res = merge(l1, l2, {
62
- added: function (e) {
63
- expect(e).toBe('c');
64
- done();
65
- },
66
- removed: function () {
67
- done(new Error('should not be called'));
68
- }
69
- });
70
- expect(_.isEqual(l2, res)).toBe(true);
71
- });
72
- it('#merge with one complex add element', (done) => {
73
- var l1 = [{ a: 1 }, 'b'];
74
- var l2 = [{ a: 1 }, 'b', { c: 1 }];
75
-
76
- var res = merge(l1, l2, {
77
- added: function (e) {
78
- expect(_.isEqual(e, { c: 1 })).toBe(true);
79
- done();
80
- },
81
- removed: function () {
82
- done(new Error('should not be called'));
83
- }
84
- });
85
- expect(_.isEqual(l2, res)).toBe(true);
86
- });
87
- it('#merge with one move element', (done) => {
88
- var l1 = [{ a: 1 }, 'b', { c: 1 }];
89
- var l2 = [{ a: 1 }, { c: 1 }, 'b'];
90
- var moved = [];
91
- var res = merge(l1, l2, {
92
- added: function () {
93
- done(new Error('should not be called'));
94
- },
95
- removed: function () {
96
- done(new Error('should not be called'));
97
- },
98
- moved: function (e, oldIndex, newIndex) {
99
- moved.push(arguments);
100
- }
101
- });
102
- expect(moved.length).toBe(1);
103
-
104
- expect(_.isEqual(l2, res)).toBe(true);
105
-
106
- done();
107
- });
108
- it('#merge with one changing elements', (done) => {
109
- var l1 = [{ _id: 1, a: 'Hello' }];
110
- var l2 = [{ _id: 1, a: 'Hej' }];
111
- var res = merge(l1, l2, {
112
- added: function () {
113
- done(new Error('should not be called'));
114
- },
115
- removed: function () {
116
- done(new Error('should not be called'));
117
- },
118
- moved: function () {
119
- done(new Error('should not be called'));
120
- },
121
- changed: function (o, n, index) {},
122
- comparatorId: function (a, b) {
123
- return a._id === b._id;
124
- }
125
- });
126
- expect(_.isEqual(l2, res)).toBe(true);
127
- done();
128
- });
129
-
130
- it('#merge true and false array', (done) => {
131
- var l1 = [true, false];
132
- var l2 = [false, true];
133
- var res = merge(l1, l2);
134
- expect(_.isEqual(l2, res)).toBe(true);
135
- done();
136
- });
137
- it('#merge complex moves', (done) => {
138
- var l1 = [
139
- { _id: 1, a: 'Hello1' },
140
- { _id: 2, a: 'Hello2' },
141
- { _id: 3, a: 'Hello3' },
142
- { _id: 4, a: 'Hello4' }
143
- ];
144
- var l2 = [
145
- { _id: 4, a: 'Hej4' },
146
- { _id: 3, a: 'Hej3' },
147
- { _id: 2, a: 'Hej2' },
148
- { _id: 1, a: 'Hej1' }
149
- ];
150
-
151
- var res = merge(
152
- l1,
153
- l2,
154
- _.defaults(
155
- {
156
- comparatorId: function (a, b) {
157
- return a._id === b._id;
158
- }
159
- },
160
- {}
161
- )
162
- );
163
- expect(_.isEqual(l2, res)).toBe(true);
164
- done();
165
- });
166
- it('#merge complex moves and add and remove', (done) => {
167
- var l1 = [
168
- { _id: 1, a: 'Hello1' },
169
- { _id: 2, a: 'Hello2' },
170
- { _id: 3, a: 'Hello3' },
171
- { _id: 4, a: 'Hello4' }
172
- ];
173
- var l2 = [
174
- { _id: 4, a: 'Hej4' },
175
- { _id: 99, a: 'Hej99' },
176
- { _id: 2, a: 'Hej2' },
177
- { _id: 1, a: 'Hej1' },
178
- { _id: 100, a: 'Hej100' }
179
- ];
180
-
181
- var res = merge(
182
- l1,
183
- l2,
184
- _.defaults(
185
- {
186
- comparatorId: function (a, b) {
187
- return a._id === b._id;
188
- }
189
- },
190
- {}
191
- )
192
- );
193
- expect(_.isEqual(l2, res)).toBe(true);
194
- done();
195
- });
196
- });