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.
- package/dist/cursor.d.ts +23 -0
- package/dist/cursor.d.ts.map +1 -0
- package/dist/cursor.js +81 -0
- package/dist/cursor.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/inmemory/collection.d.ts +20 -0
- package/dist/inmemory/collection.d.ts.map +1 -0
- package/dist/inmemory/collection.js +111 -0
- package/dist/inmemory/collection.js.map +1 -0
- package/dist/inmemory/store.d.ts +8 -0
- package/dist/inmemory/store.d.ts.map +1 -0
- package/dist/inmemory/store.js +21 -0
- package/dist/inmemory/store.js.map +1 -0
- package/dist/merger.d.ts +4 -0
- package/dist/merger.d.ts.map +1 -0
- package/dist/merger.js +139 -0
- package/dist/merger.js.map +1 -0
- package/dist/observe.d.ts +18 -0
- package/dist/observe.d.ts.map +1 -0
- package/dist/observe.js +93 -0
- package/dist/observe.js.map +1 -0
- package/dist/plugins/index.d.ts +4 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +8 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/viewdb_timestamp_plugin.d.ts +3 -0
- package/dist/plugins/viewdb_timestamp_plugin.d.ts.map +1 -0
- package/dist/plugins/viewdb_timestamp_plugin.js +92 -0
- package/dist/plugins/viewdb_timestamp_plugin.js.map +1 -0
- package/dist/plugins/viewdb_versioning_plugin.d.ts +3 -0
- package/dist/plugins/viewdb_versioning_plugin.d.ts.map +1 -0
- package/dist/plugins/viewdb_versioning_plugin.js +83 -0
- package/dist/plugins/viewdb_versioning_plugin.js.map +1 -0
- package/dist/types.d.ts +76 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/viewdb.d.ts +13 -0
- package/dist/viewdb.d.ts.map +1 -0
- package/dist/viewdb.js +24 -0
- package/dist/viewdb.js.map +1 -0
- package/package.json +19 -12
- package/.prettierrc +0 -1
- package/index.js +0 -1
- package/jest.config.js +0 -11
- package/lib/cursor.js +0 -84
- package/lib/index.js +0 -6
- package/lib/inmemory/collection.js +0 -112
- package/lib/inmemory/store.js +0 -19
- package/lib/merger.js +0 -62
- package/lib/observe.js +0 -53
- package/lib/plugins/index.js +0 -2
- package/lib/plugins/viewdb_timestamp_plugin.js +0 -106
- package/lib/plugins/viewdb_versioning_plugin.js +0 -93
- package/lib/viewdb.js +0 -21
- package/test/cursor.js +0 -101
- package/test/merger.js +0 -196
- package/test/observe.js +0 -165
- package/test/plugins/viewdb_timestamp_plugin.js +0 -159
- package/test/plugins/viewdb_versioning_plugin.js +0 -112
- 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;
|
package/lib/plugins/index.js
DELETED
|
@@ -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
|
-
});
|