Comparing version 3.2.5 to 4.0.0-rc0
@@ -0,1 +1,8 @@ | ||
4.0.0-rc0 / 2021-08-19 | ||
====================== | ||
* BREAKING CHANGE: drop support for Node < 12 #123 | ||
* BREAKING CHANGE: upgrade to mongodb driver 4.x: drop support for `findAndModify()`, use native `findOneAndUpdate/Delete` #124 | ||
* BREAKING CHANGE: rename findStream -> findCursor #124 | ||
* BREAKING CHANGE: use native ES6 promises by default, remove bluebird dependency #123 | ||
3.2.5 / 2021-03-29 | ||
@@ -2,0 +9,0 @@ ================== |
@@ -7,3 +7,3 @@ 'use strict'; | ||
var methods = [ | ||
const methods = [ | ||
'find', | ||
@@ -18,5 +18,6 @@ 'findOne', | ||
'distinct', | ||
'findAndModify', | ||
'findOneAndDelete', | ||
'findOneAndUpdate', | ||
'aggregate', | ||
'findStream', | ||
'findCursor', | ||
'deleteOne', | ||
@@ -32,4 +33,4 @@ 'deleteMany' | ||
for (var i = 0, len = methods.length; i < len; ++i) { | ||
var method = methods[i]; | ||
for (let i = 0, len = methods.length; i < len; ++i) { | ||
const method = methods[i]; | ||
Collection.prototype[method] = notImplemented(method); | ||
@@ -36,0 +37,0 @@ } |
'use strict'; | ||
var env = require('../env'); | ||
const env = require('../env'); | ||
@@ -5,0 +5,0 @@ if ('unknown' == env.type) { |
@@ -7,4 +7,4 @@ 'use strict'; | ||
var Collection = require('./collection'); | ||
var utils = require('../utils'); | ||
const Collection = require('./collection'); | ||
const utils = require('../utils'); | ||
@@ -27,11 +27,9 @@ function NodeCollection(col) { | ||
NodeCollection.prototype.find = function(match, options, cb) { | ||
this.collection.find(match, options, function(err, cursor) { | ||
if (err) return cb(err); | ||
const cursor = this.collection.find(match, options); | ||
try { | ||
cursor.toArray(cb); | ||
} catch (error) { | ||
cb(error); | ||
} | ||
}); | ||
try { | ||
cursor.toArray(cb); | ||
} catch (error) { | ||
cb(error); | ||
} | ||
}; | ||
@@ -120,24 +118,23 @@ | ||
/** | ||
* findAndModify(match, update, options, function(err, doc)) | ||
* findOneAndDelete(match, options, function(err[, result]) | ||
*/ | ||
NodeCollection.prototype.findAndModify = function(match, update, options, cb) { | ||
var sort = Array.isArray(options.sort) ? options.sort : []; | ||
this.collection.findAndModify(match, sort, update, options, cb); | ||
NodeCollection.prototype.findOneAndDelete = function(match, options, cb) { | ||
this.collection.findOneAndDelete(match, options, cb); | ||
}; | ||
/** | ||
* var stream = findStream(match, findOptions, streamOptions) | ||
* findOneAndUpdate(match, update, options, function(err[, result]) | ||
*/ | ||
NodeCollection.prototype.findStream = function(match, findOptions, streamOptions) { | ||
return this.collection.find(match, findOptions).stream(streamOptions); | ||
NodeCollection.prototype.findOneAndUpdate = function(match, update, options, cb) { | ||
this.collection.findOneAndUpdate(match, update, options, cb); | ||
}; | ||
/** | ||
* var cursor = findCursor(match, findOptions) | ||
* var cursor = findCursor(match, options) | ||
*/ | ||
NodeCollection.prototype.findCursor = function(match, findOptions) { | ||
return this.collection.find(match, findOptions); | ||
NodeCollection.prototype.findCursor = function(match, options) { | ||
return this.collection.find(match, options); | ||
}; | ||
@@ -144,0 +141,0 @@ |
'use strict'; | ||
var denied = exports; | ||
const denied = exports; | ||
@@ -10,4 +10,4 @@ denied.distinct = function(self) { | ||
var keys = Object.keys(denied.distinct); | ||
var err; | ||
const keys = Object.keys(denied.distinct); | ||
let err; | ||
@@ -42,4 +42,4 @@ keys.every(function(option) { | ||
denied.findOneAndRemove = function(self) { | ||
var keys = Object.keys(denied.findOneAndUpdate); | ||
var err; | ||
const keys = Object.keys(denied.findOneAndUpdate); | ||
let err; | ||
@@ -71,4 +71,4 @@ keys.every(function(option) { | ||
var keys = Object.keys(denied.count); | ||
var err; | ||
const keys = Object.keys(denied.count); | ||
let err; | ||
@@ -75,0 +75,0 @@ keys.every(function(option) { |
@@ -7,6 +7,5 @@ 'use strict'; | ||
var Buffer = require('safe-buffer').Buffer; | ||
var RegExpClone = require('regexp-clone'); | ||
const RegExpClone = require('regexp-clone'); | ||
var specialProperties = ['__proto__', 'constructor', 'prototype']; | ||
const specialProperties = ['__proto__', 'constructor', 'prototype']; | ||
@@ -22,3 +21,3 @@ /** | ||
var clone = exports.clone = function clone(obj, options) { | ||
const clone = exports.clone = function clone(obj, options) { | ||
if (obj === undefined || obj === null) | ||
@@ -69,8 +68,11 @@ return obj; | ||
exports.cloneObject = function cloneObject(obj, options) { | ||
var minimize = options && options.minimize; | ||
var ret = {}; | ||
var hasKeys; | ||
var val; | ||
const minimize = options && options.minimize; | ||
const ret = {}; | ||
let hasKeys; | ||
let val; | ||
const keys = Object.keys(obj); | ||
let k; | ||
for (const k of Object.keys(obj)) { | ||
for (let i = 0; i < keys.length; ++i) { | ||
k = keys[i]; | ||
// Not technically prototype pollution because this wouldn't merge properties | ||
@@ -96,4 +98,4 @@ // onto `Object.prototype`, but avoid properties like __proto__ as a precaution. | ||
exports.cloneArray = function cloneArray(arr, options) { | ||
var ret = []; | ||
for (var i = 0, l = arr.length; i < l; i++) | ||
const ret = []; | ||
for (let i = 0, l = arr.length; i < l; i++) | ||
ret.push(clone(arr[i], options)); | ||
@@ -125,3 +127,3 @@ return ret; | ||
// which has historically been a problem. | ||
var args = arguments; | ||
const args = arguments; | ||
soon(function() { | ||
@@ -142,8 +144,5 @@ callback.apply(this, args); | ||
exports.merge = function merge(to, from) { | ||
var keys = Object.keys(from), | ||
i = keys.length, | ||
key; | ||
const keys = Object.keys(from); | ||
while (i--) { | ||
key = keys[i]; | ||
for (const key of keys) { | ||
if (specialProperties.indexOf(key) !== -1) { | ||
@@ -173,8 +172,5 @@ continue; | ||
exports.mergeClone = function mergeClone(to, from) { | ||
var keys = Object.keys(from), | ||
i = keys.length, | ||
key; | ||
const keys = Object.keys(from); | ||
while (i--) { | ||
key = keys[i]; | ||
for (const key of keys) { | ||
if (specialProperties.indexOf(key) !== -1) { | ||
@@ -274,3 +270,3 @@ continue; | ||
var _toString = Object.prototype.toString; | ||
const _toString = Object.prototype.toString; | ||
exports.toString = function(arg) { | ||
@@ -287,3 +283,3 @@ return _toString.call(arg); | ||
var isObject = exports.isObject = function(arg) { | ||
const isObject = exports.isObject = function(arg) { | ||
return '[object Object]' == exports.toString(arg); | ||
@@ -346,3 +342,3 @@ }; | ||
var soon = exports.soon = 'function' == typeof setImmediate | ||
const soon = exports.soon = 'function' == typeof setImmediate | ||
? setImmediate | ||
@@ -359,3 +355,3 @@ : process.nextTick; | ||
exports.cloneBuffer = function(buff) { | ||
var dupe = Buffer.alloc(buff.length); | ||
const dupe = Buffer.alloc(buff.length); | ||
buff.copy(dupe, 0, 0, buff.length); | ||
@@ -362,0 +358,0 @@ return dupe; |
{ | ||
"name": "mquery", | ||
"version": "3.2.5", | ||
"version": "4.0.0-rc0", | ||
"description": "Expressive query building for MongoDB", | ||
@@ -16,9 +16,7 @@ "main": "lib/mquery.js", | ||
"engines": { | ||
"node": ">=4.0.0" | ||
"node": ">=12.0.0" | ||
}, | ||
"dependencies": { | ||
"bluebird": "3.5.1", | ||
"debug": "3.1.0", | ||
"debug": "4.x", | ||
"regexp-clone": "^1.0.0", | ||
"safe-buffer": "5.1.2", | ||
"sliced": "1.0.1" | ||
@@ -28,4 +26,5 @@ }, | ||
"eslint": "5.x", | ||
"mocha": "4.1.0", | ||
"mongodb": "3.6.1" | ||
"eslint-plugin-mocha-no-only": "1.1.0", | ||
"mocha": "9.x", | ||
"mongodb": "4.x" | ||
}, | ||
@@ -42,46 +41,3 @@ "bugs": { | ||
], | ||
"homepage": "https://github.com/aheckmann/mquery/", | ||
"eslintConfig": { | ||
"env": { | ||
"node": true, | ||
"mocha": true, | ||
"es6": false | ||
}, | ||
"extends": "eslint:recommended", | ||
"parserOptions": { | ||
"ecmaVersion": 5 | ||
}, | ||
"rules": { | ||
"comma-style": "error", | ||
"consistent-this": [ | ||
"error", | ||
"_this" | ||
], | ||
"indent": [ | ||
"error", | ||
2, | ||
{ | ||
"SwitchCase": 1, | ||
"VariableDeclarator": 2 | ||
} | ||
], | ||
"keyword-spacing": "error", | ||
"no-console": "off", | ||
"no-multi-spaces": "error", | ||
"func-call-spacing": "error", | ||
"no-trailing-spaces": "error", | ||
"quotes": [ | ||
"error", | ||
"single" | ||
], | ||
"semi": "error", | ||
"space-before-blocks": "error", | ||
"space-before-function-paren": [ | ||
"error", | ||
"never" | ||
], | ||
"space-infix-ops": "error", | ||
"space-unary-ops": "error" | ||
} | ||
} | ||
"homepage": "https://github.com/aheckmann/mquery/" | ||
} |
@@ -269,3 +269,3 @@ # mquery | ||
- `new`: boolean - true to return the modified document rather than the original. defaults to true | ||
- `returnDocument`: string - `'after'` to return the modified document rather than the original. defaults to `'before'` | ||
- `upsert`: boolean - creates the object if it doesn't exist. defaults to false | ||
@@ -1244,4 +1244,2 @@ - `sort`: if multiple docs are found by the match condition, sets the sort order to choose which doc to update | ||
- [hint](#hint) * | ||
- [slaveOk](#slaveOk) * | ||
- [safe](http://docs.mongodb.org/manual/reference/write-concern/): Boolean - passed through to the collection. Setting to `true` is equivalent to `{ w: 1 }` | ||
- [collection](#collection): the collection to query against | ||
@@ -1248,0 +1246,0 @@ |
@@ -0,8 +1,9 @@ | ||
'use strict'; | ||
var assert = require('assert'); | ||
var mongo = require('mongodb'); | ||
const assert = require('assert'); | ||
const mongo = require('mongodb'); | ||
var uri = process.env.MQUERY_URI || 'mongodb://localhost/mquery'; | ||
var client; | ||
var db; | ||
const uri = process.env.MQUERY_URI || 'mongodb://localhost/mquery'; | ||
let client; | ||
let db; | ||
@@ -15,3 +16,3 @@ exports.getCollection = function(cb) { | ||
var collection = db.collection('stuff'); | ||
const collection = db.collection('stuff'); | ||
@@ -18,0 +19,0 @@ // clean test db before starting |
@@ -0,7 +1,8 @@ | ||
'use strict'; | ||
var env = require('../').env; | ||
const env = require('../').env; | ||
console.log('environment: %s', env.type); | ||
var col; | ||
let col; | ||
switch (env.type) { | ||
@@ -8,0 +9,0 @@ case 'node': |
'use strict'; | ||
var Buffer = require('safe-buffer').Buffer; | ||
var utils = require('../lib/utils'); | ||
var assert = require('assert'); | ||
var debug = require('debug'); | ||
const utils = require('../lib/utils'); | ||
const assert = require('assert'); | ||
const debug = require('debug'); | ||
var mongo; | ||
let mongo; | ||
try { | ||
@@ -22,4 +21,4 @@ mongo = new require('mongodb'); | ||
var o1 = new ObjectId('1234'); | ||
var o2 = utils.clone(o1); | ||
const o1 = new ObjectId('1234'); | ||
const o2 = utils.clone(o1); | ||
assert.ok(o2 instanceof ObjectId); | ||
@@ -35,4 +34,4 @@ | ||
var o1 = new ObjectID('1234'); | ||
var o2 = utils.clone(o1); | ||
const o1 = new ObjectID('1234'); | ||
const o2 = utils.clone(o1); | ||
@@ -48,4 +47,4 @@ assert.ok(o2 instanceof ObjectID); | ||
var o1 = new ObjectIdd('1234'); | ||
var o2 = utils.clone(o1); | ||
const o1 = new ObjectIdd('1234'); | ||
const o2 = utils.clone(o1); | ||
assert.ok(!(o2 instanceof ObjectIdd)); | ||
@@ -63,3 +62,3 @@ | ||
ObjectID.prototype.clone = function() { | ||
var ret = new ObjectID(this.id); | ||
const ret = new ObjectID(this.id); | ||
ret.cloned = true; | ||
@@ -69,8 +68,8 @@ return ret; | ||
var id = 1234; | ||
var o1 = new ObjectID(id); | ||
const id = 1234; | ||
const o1 = new ObjectID(id); | ||
assert.equal(id, o1.id); | ||
assert.equal(false, o1.cloned); | ||
var o2 = utils.clone(o1); | ||
const o2 = utils.clone(o1); | ||
assert.ok(o2 instanceof ObjectID); | ||
@@ -85,6 +84,6 @@ assert.equal(id, o2.id); | ||
var tags = [ | ||
{dc: 'tag1'} | ||
const tags = [ | ||
{ dc: 'tag1' } | ||
]; | ||
var prefs = [ | ||
const prefs = [ | ||
new mongo.ReadPreference('primary'), | ||
@@ -95,5 +94,5 @@ new mongo.ReadPreference(mongo.ReadPreference.PRIMARY_PREFERRED), | ||
var prefsCloned = utils.clone(prefs); | ||
const prefsCloned = utils.clone(prefs); | ||
for (var i = 0; i < prefsCloned.length; i++) { | ||
for (let i = 0; i < prefsCloned.length; i++) { | ||
assert.notEqual(prefs[i], prefsCloned[i]); | ||
@@ -114,5 +113,5 @@ if (prefs[i].tags) { | ||
if (!mongo) return done(); | ||
var buf = Buffer.from('hi'); | ||
var binary = new mongo.Binary(buf, 2); | ||
var clone = utils.clone(binary); | ||
const buf = Buffer.from('hi'); | ||
const binary = new mongo.Binary(buf, 2); | ||
const clone = utils.clone(binary); | ||
assert.equal(binary.sub_type, clone.sub_type); | ||
@@ -125,8 +124,8 @@ assert.equal(String(binary.buffer), String(buf)); | ||
it('handles objects with no constructor', function(done) { | ||
var name = '335'; | ||
const name = '335'; | ||
var o = Object.create(null); | ||
const o = Object.create(null); | ||
o.name = name; | ||
var clone; | ||
let clone; | ||
assert.doesNotThrow(function() { | ||
@@ -142,7 +141,7 @@ clone = utils.clone(o); | ||
it('handles buffers', function(done) { | ||
var buff = Buffer.alloc(10); | ||
const buff = Buffer.alloc(10); | ||
buff.fill(1); | ||
var clone = utils.clone(buff); | ||
const clone = utils.clone(buff); | ||
for (var i = 0; i < buff.length; i++) { | ||
for (let i = 0; i < buff.length; i++) { | ||
assert.equal(buff[i], clone[i]); | ||
@@ -155,4 +154,4 @@ } | ||
it('skips __proto__', function() { | ||
var payload = JSON.parse('{"__proto__": {"polluted": "vulnerable"}}'); | ||
var res = utils.clone(payload); | ||
const payload = JSON.parse('{"__proto__": {"polluted": "vulnerable"}}'); | ||
const res = utils.clone(payload); | ||
@@ -166,4 +165,4 @@ assert.strictEqual({}.polluted, void 0); | ||
it('avoids prototype pollution', function() { | ||
var payload = JSON.parse('{"__proto__": {"polluted": "vulnerable"}}'); | ||
var obj = {}; | ||
const payload = JSON.parse('{"__proto__": {"polluted": "vulnerable"}}'); | ||
const obj = {}; | ||
utils.merge(obj, payload); | ||
@@ -170,0 +169,0 @@ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
3
23
2
245417
4
6294
1
1374
+ Addeddebug@4.3.7(transitive)
+ Addedms@2.1.3(transitive)
- Removedbluebird@3.5.1
- Removedsafe-buffer@5.1.2
- Removedbluebird@3.5.1(transitive)
- Removeddebug@3.1.0(transitive)
- Removedms@2.0.0(transitive)
- Removedsafe-buffer@5.1.2(transitive)
Updateddebug@4.x