New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

thinky

Package Overview
Dependencies
Maintainers
1
Versions
129
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

thinky - npm Package Compare versions

Comparing version 2.0.6 to 2.0.7

203

lib/document.js

@@ -219,3 +219,3 @@ var schemaUtil = require(__dirname+'/schema.js');

Document.prototype.validateAll = function(options, modelToValidate) {
var validateAll = (modelToValidate === undefined) ? true: false;
var validateAll = modelToValidate === undefined;
modelToValidate = modelToValidate || {};

@@ -269,39 +269,44 @@

if (util.recurse(key, joins, modelToValidate, validateAll, validatedModel)) {
if (((joins[key].type === 'hasOne') || (joins[key].type === 'belongsTo'))) {
if (util.isPlainObject(self[key])) {
if (self[key] instanceof Document === false) {
self[key] = new self._getModel()._joins[key].model(self[key]);
switch (joins[key].type) {
case 'hasOne':
case 'belongsTo':
if (util.isPlainObject(self[key])) {
if (self[key] instanceof Document === false) {
self[key] = new self._getModel()._joins[key].model(self[key]);
}
// We do not propagate the options of this document, but only those given to validate
var promise = self[key].validate(options, modelToValidate[key], validateAll, validatedModel, prefix+'['+key+']');
if (promise instanceof Promise) {
promises.push(promise);
promise = null;
}
}
// We do not propagate the options of this document, but only those given to validate
var promise = self[key].validate(options, modelToValidate[key], validateAll, validatedModel, prefix+'['+key+']');
if (promise instanceof Promise) {
promises.push(promise);
promise = null;
else if (self[key] != null) {
throw new Errors.ValidationError("Joined field "+prefix+"["+key+"] should be `undefined`, `null` or an `Object`")
}
}
else if (self[key] != null) {
throw new Errors.ValidationError("Joined field "+prefix+"["+key+"] should be `undefined`, `null` or an `Object`")
}
}
else if (((joins[key].type === 'hasMany') || (joins[key].type === 'hasAndBelongsToMany'))) {
if (Array.isArray(self[key])) {
for(var i=0; i<self[key].length; i++) {
if (util.isPlainObject(self[key][i])) {
if (self[key][i] instanceof Document === false) {
self[key][i] = new self._getModel()._joins[key].model(self[key][i]);
break;
case 'hasMany':
case 'hasAndBelongsToMany':
if (Array.isArray(self[key])) {
for(var i=0; i<self[key].length; i++) {
if (util.isPlainObject(self[key][i])) {
if (self[key][i] instanceof Document === false) {
self[key][i] = new self._getModel()._joins[key].model(self[key][i]);
}
promise = self[key][i].validate(options, modelToValidate[key], validateAll, validatedModel, prefix+'['+key+']['+i+']');
if (promise instanceof Promise) {
promises.push(promise);
promise = null;
}
}
promise = self[key][i].validate(options, modelToValidate[key], validateAll, validatedModel, prefix+'['+key+']['+i+']');
if (promise instanceof Promise) {
promises.push(promise);
promise = null;
else {
throw new Errors.ValidationError("Joined field "+prefix+"["+key+"]["+i+"] should be `undefined`, `null` or an `Array`")
}
}
else {
throw new Errors.ValidationError("Joined field "+prefix+"["+key+"]["+i+"] should be `undefined`, `null` or an `Array`")
}
}
}
else if (self[key] != null) {
throw new Errors.ValidationError("Joined field "+prefix+"["+key+"] should be `undefined`, `null` or an `Array`")
}
else if (self[key] != null) {
throw new Errors.ValidationError("Joined field "+prefix+"["+key+"] should be `undefined`, `null` or an `Array`")
}
break;
}

@@ -393,3 +398,3 @@ }

else {
saveAll = (docToSave === undefined) ? true: false;
saveAll = docToSave === undefined;
docToSave = docToSave || {};

@@ -817,28 +822,27 @@ }

if (result.first_error != null) {
reject(new Error(result.first_error));
return reject(new Error(result.first_error));
}
else {
util.tryCatch(function() { // Validate the doc, replace it, and tag it as saved
if (Array.isArray(result.changes) && result.changes.length > 0) {
self._merge(result.changes[0].new_val);
self._setOldValue(util.deepCopy(result.changes[0].old_val));
}
if (self._getModel().needToGenerateFields === true) {
self._generateDefault();
}
self.setSaved();
self.emit('saved', self);
util.tryCatch(function() { // Validate the doc, replace it, and tag it as saved
if (Array.isArray(result.changes) && result.changes.length > 0) {
self._merge(result.changes[0].new_val);
self._setOldValue(util.deepCopy(result.changes[0].old_val));
}
var promise = self.validate();
if (promise instanceof Promise) {
promise.then(function() {
self._saveMany(docToSave, saveAll, savedModel, resolve, reject)
}).error(reject);
}
else {
if (self._getModel().needToGenerateFields === true) {
self._generateDefault();
}
self.setSaved();
self.emit('saved', self);
var promise = self.validate();
if (promise instanceof Promise) {
promise.then(function() {
self._saveMany(docToSave, saveAll, savedModel, resolve, reject)
}
}, reject);
}
}).error(reject);
}
else {
self._saveMany(docToSave, saveAll, savedModel, resolve, reject)
}
}, reject);
}

@@ -923,3 +927,3 @@

self.__proto__._hasMany[key] = [];
for(var i=0; i<self[key].length; i++) {

@@ -1071,3 +1075,3 @@ self[key][i][joins[key].rightKey] = self[joins[key].leftKey];

}
(function(key, link) {

@@ -1156,31 +1160,36 @@ promisesLink.push(new Promise(function(resolve, reject) {

self.__proto__._saved = true;
if (all === true) {
if (all !== true) return;
util.loopKeys(self._getModel()._joins, function(joins, key) {
if (joins[key].type === 'hasOne') {
if (self[key] instanceof Document) {
self[key].setSaved(true);
}
}
else if (joins[key].type === 'belongsTo') {
if (self[key] instanceof Document) {
self[key].setSaved(true);
}
}
else if (joins[key].type === 'hasMany') {
if (Array.isArray(self[key])) {
for(var i=0; i<self[key].length; i++) {
if (self[key][i] instanceof Document) {
self[key][i].setSaved(true);
switch (joins[key].type) {
case 'hasOne':
if (self[key] instanceof Document) {
self[key].setSaved(true);
}
break;
case 'belongsTo':
if (self[key] instanceof Document) {
self[key].setSaved(true);
}
break;
case 'hasMany':
if (Array.isArray(self[key])) {
for(var i=0; i<self[key].length; i++) {
if (self[key][i] instanceof Document) {
self[key][i].setSaved(true);
}
}
}
}
}
else if (joins[key].type === 'hasAndBelongsToMany') {
if (Array.isArray(self[key])) {
for(var i=0; i<self[key].length; i++) {
if (self[key][i] instanceof Document) {
self[key][i].setSaved(true);
break;
case 'hasAndBelongsToMany':
if (Array.isArray(self[key])) {
for(var i=0; i<self[key].length; i++) {
if (self[key][i] instanceof Document) {
self[key][i].setSaved(true);
}
}
}
}
break;
}

@@ -1191,4 +1200,5 @@ });

util.loopKeys(self._getModel()._joins, function(joins, key) {
if (self[key] != null) {
if (joins[key].type === 'hasOne') {
if (self[key] == null) return;
switch (joins[key].type) {
case 'hasOne':
if (self[key].isSaved()) {

@@ -1208,4 +1218,5 @@ self.__proto__._hasOne[key] = {

});
}
else if (joins[key].type === 'belongsTo') {
break;
case 'belongsTo':
if (self[key].__proto__._parents._belongsTo[self._getModel()._name] == null) {

@@ -1220,4 +1231,5 @@ self[key].__proto__._parents._belongsTo[self._getModel()._name] = [];

self.__proto__._belongsTo[key] = true;
}
else if (joins[key].type === 'hasMany') {
break;
case 'hasMany':
self.__proto__._hasMany[key] = []

@@ -1242,4 +1254,5 @@

}
}
else if (joins[key].type === 'hasAndBelongsToMany') {
break;
case 'hasAndBelongsToMany':
if (self.__proto__._links[self._getModel()._joins[key].link] === undefined) {

@@ -1263,8 +1276,6 @@ self.__proto__._links[self._getModel()._joins[key].link] = {}

}
}
break;
}
});
}
}

@@ -1299,3 +1310,3 @@

* It will also update the joined documents by removing the foreign key for
* `hasOne`/`hasMany` joined documents, and remove the links for
* `hasOne`/`hasMany` joined documents, and remove the links for
* `hasAndBelongsToMany` joined documents if the link is built on the primary

@@ -1316,3 +1327,3 @@ * key.

else {
deleteAll = (docToDelete === undefined) ? true: false;
deleteAll = docToDelete === undefined;
docToDelete = docToDelete || {};

@@ -1464,3 +1475,3 @@ }

docsToDelete.push(self[key][i]);
// We are going to do a range delete, but we still have to recurse
// We are going to do a range delete, but we still have to recurse
promises.push(self[key][i]._delete(docToDelete[key], deleteAll, deletedDocs, true, false))

@@ -1556,3 +1567,3 @@

}).error(function(error) {
reject(error)
reject(error)
});

@@ -1559,0 +1570,0 @@ })

@@ -103,25 +103,25 @@ var Promise = require('bluebird');

}
return;
}
else {
util.tryCatch(function() {
if (data.new_val !== null) {
self.model._parse(data.new_val).then(function(doc) {
doc._setOldValue(data.old_val);
self._eventEmitter.emit('data', doc);
}).error(function(err) {
self._eventEmitter.emit('error', err);
});
}
else if (data.old_val !== null) { // new_val is null
self.model._parse(data.old_val).then(function(doc) {
doc._setUnSaved();
self._eventEmitter.emit('data', doc);
}).error(function(err) {
self._eventEmitter.emit('error', err);
});
}
}, function(err) {
self._eventEmitter.emit('error', err);
})
}
util.tryCatch(function() {
if (data.new_val !== null) {
self.model._parse(data.new_val).then(function(doc) {
doc._setOldValue(data.old_val);
self._eventEmitter.emit('data', doc);
}).error(function(err) {
self._eventEmitter.emit('error', err);
});
}
else if (data.old_val !== null) { // new_val is null
self.model._parse(data.old_val).then(function(doc) {
doc._setUnSaved();
self._eventEmitter.emit('data', doc);
}).error(function(err) {
self._eventEmitter.emit('error', err);
});
}
}, function(err) {
self._eventEmitter.emit('error', err);
})
}

@@ -128,0 +128,0 @@

@@ -266,3 +266,3 @@ var util = require(__dirname+'/util.js');

r.table(self.getTableName()).indexList().do(function(indexes) {
return r.table(self.getTableName()).indexWait(r.args(indexes))
return r.table(self.getTableName()).indexWait(r.args(indexes))
}).run().then(function(indexes) {

@@ -326,3 +326,3 @@ for(var i=0; i<indexes.length; i++) {

).run().then(function(result) {
self._getModel()._indexes[name] = true;
self._getModel()._indexes[name] = true;
self._indexWasCreated('local');

@@ -521,3 +521,3 @@

)
if (self._getModel()._tableCreated === true) {

@@ -591,3 +591,3 @@ query.run().then(function(result) {

joinedModel._getModel()._localKeys[rightKey] = true;
options = options || {};

@@ -896,57 +896,58 @@ if (options.init !== false) {

util.loopKeys(Term, function(Term, key) {
if ((Term.hasOwnProperty(key)) && (key !== 'run') && (key[0] !== '_')) {
(function(key) {
switch (key) {
case 'orderBy':
Model.prototype[key] = function() {
var query = new Query(this);
if ((arguments.length === 1)
&& (typeof arguments[0] === 'string')
&& (this._getModel()._indexes[arguments[0]] === true)) {
if (!Term.hasOwnProperty(key)) return;
if (key === 'run' || key[0] === '_') return;
query = query[key]({index: arguments[0]});
return query;
}
else {
query = query[key].apply(query, arguments);
(function(key) {
switch (key) {
case 'orderBy':
Model.prototype[key] = function() {
var query = new Query(this);
if ((arguments.length === 1)
&& (typeof arguments[0] === 'string')
&& (this._getModel()._indexes[arguments[0]] === true)) {
query = query[key]({index: arguments[0]});
return query;
}
}
break;
case 'filter':
Model.prototype[key] = function() {
var query = new Query(this);
if ((arguments.length === 1)
&& (util.isPlainObject(arguments[0]))) {
else {
query = query[key].apply(query, arguments);
return query;
}
}
break;
case 'filter':
Model.prototype[key] = function() {
var query = new Query(this);
if ((arguments.length === 1)
&& (util.isPlainObject(arguments[0]))) {
// Optimize a filter with an object
// We replace the first key that match an index name
var filter = arguments[0];
// Optimize a filter with an object
// We replace the first key that match an index name
var filter = arguments[0];
var keys = Object.keys(filter).sort(); // Lexicographical order
for(var i=0 ; i<keys.length; i++) {
var index = keys[i];
var keys = Object.keys(filter).sort(); // Lexicographical order
for(var i=0 ; i<keys.length; i++) {
var index = keys[i];
if (this._getModel()._indexes[index] === true) { // Index found
query = query.getAll(filter[index], {index: index});
delete filter[index];
break;
}
if (this._getModel()._indexes[index] === true) { // Index found
query = query.getAll(filter[index], {index: index});
delete filter[index];
break;
}
}
}
query = query[key].apply(query, arguments);
return query;
}
break;
default:
Model.prototype[key] = function() {
var query = new Query(this);
query = query[key].apply(query, arguments);
return query;
}
query = query[key].apply(query, arguments);
return query;
}
break;
default:
Model.prototype[key] = function() {
var query = new Query(this);
query = query[key].apply(query, arguments);
return query;
}
}
})(key);
}
})(key);
});

@@ -1128,3 +1129,3 @@ })();

var newError = new Error("The results could not be converted to instances of `"+self.getTableName()+"`\nDetailed error: "+error.message);
return reject(newError);

@@ -1131,0 +1132,0 @@ });

@@ -298,3 +298,3 @@ var Promise = require('bluebird');

var getAll = (modelToGet === undefined) ? true: false;
var getAll = modelToGet === undefined;
if (util.isPlainObject(modelToGet) === false) {

@@ -310,124 +310,104 @@ modelToGet = {};

if (util.recurse(key, joins, modelToGet, getAll, gotModel)) {
if (joins[key].type === 'hasOne') {
self._query = self._query.merge(function(doc) {
return r.branch(
doc.hasFields(joins[key].leftKey),
r.table(joins[key].model.getTableName()).getAll(doc(joins[key].leftKey), {index: joins[key].rightKey}).coerceTo("ARRAY").do(function(result) {
innerQuery = new Query(joins[key].model, result.nth(0));
switch (joins[key].type) {
case 'hasOne':
case 'belongsTo':
self._query = self._query.merge(function(doc) {
return r.branch(
doc.hasFields(joins[key].leftKey),
r.table(joins[key].model.getTableName()).getAll(doc(joins[key].leftKey), {index: joins[key].rightKey}).coerceTo("ARRAY").do(function(result) {
innerQuery = new Query(joins[key].model, result.nth(0));
if ((modelToGet[key] != null) && (typeof modelToGet[key]._apply === 'function')) {
innerQuery = modelToGet[key]._apply(innerQuery);
}
innerQuery = innerQuery.getJoin(modelToGet[key], getAll, gotModel)._query;
return r.branch(
result.count().eq(1),
r.object(key, innerQuery),
r.branch(
result.count().eq(0),
{},
r.error(r.expr("More than one element found for ").add(doc.coerceTo("STRING")).add(r.expr("for the field ").add(key)))
if ((modelToGet[key] != null) && (typeof modelToGet[key]._apply === 'function')) {
innerQuery = modelToGet[key]._apply(innerQuery);
}
innerQuery = innerQuery.getJoin(modelToGet[key], getAll, gotModel)._query;
return r.branch(
result.count().eq(1),
r.object(key, innerQuery),
r.branch(
result.count().eq(0),
{},
r.error(r.expr("More than one element found for ").add(doc.coerceTo("STRING")).add(r.expr("for the field ").add(key)))
)
)
)
}),
{}
)
});
}
else if (joins[key].type === 'belongsTo') {
self._query = self._query.merge(function(doc) {
return r.branch(
doc.hasFields(joins[key].leftKey),
r.table(joins[key].model.getTableName()).getAll(doc(joins[key].leftKey), {index: joins[key].rightKey}).coerceTo("ARRAY").do(function(result) {
innerQuery = new Query(joins[key].model, result.nth(0));
}),
{}
)
});
break;
if ((modelToGet[key] != null) && (typeof modelToGet[key]._apply === 'function')) {
innerQuery = modelToGet[key]._apply(innerQuery);
}
innerQuery = innerQuery.getJoin(modelToGet[key], getAll, gotModel)._query;
return r.branch(
result.count().eq(1),
r.object(key, innerQuery),
r.branch(
result.count().eq(0),
{},
r.error(r.expr("More than one element found for ").add(doc.coerceTo("STRING")).add(r.expr("for the field ").add(key)))
)
)
}),
{}
)
});
}
else if (joins[key].type === 'hasMany') {
self._query = self._query.merge(function(doc) {
innerQuery = new Query(joins[key].model,
r.table(joins[key].model.getTableName())
.getAll(doc(joins[key].leftKey), {index: joins[key].rightKey}))
case 'hasMany':
self._query = self._query.merge(function(doc) {
innerQuery = new Query(joins[key].model,
r.table(joins[key].model.getTableName())
.getAll(doc(joins[key].leftKey), {index: joins[key].rightKey}))
if ((modelToGet[key] != null) && (typeof modelToGet[key]._apply === 'function')) {
innerQuery = modelToGet[key]._apply(innerQuery);
}
innerQuery = innerQuery.getJoin(modelToGet[key], getAll, gotModel);
if ((modelToGet[key] == null) || (modelToGet[key]._array !== false)) {
innerQuery = innerQuery.coerceTo("ARRAY");
}
innerQuery = innerQuery._query;
return r.branch(
doc.hasFields(joins[key].leftKey),
r.object(key, innerQuery),
{}
)
});
}
else if (joins[key].type === 'hasAndBelongsToMany') {
self._query = self._query.merge(function(doc) {
if ((model.getTableName() === joins[key].model.getTableName()) && (joins[key].leftKey === joins[key].rightKey)) {
// In case the model is linked with itself on the same key
innerQuery = r.table(joins[key].link).getAll(doc(joins[key].leftKey), {index: joins[key].leftKey+"_"+joins[key].leftKey}).concatMap(function(link) {
return r.table(joins[key].model.getTableName()).getAll(
r.branch(
doc(joins[key].leftKey).eq(link(joins[key].leftKey+"_"+joins[key].leftKey).nth(0)),
link(joins[key].leftKey+"_"+joins[key].leftKey).nth(1),
link(joins[key].leftKey+"_"+joins[key].leftKey).nth(0)
)
, {index: joins[key].rightKey})
});
if ((modelToGet[key] != null) && (typeof modelToGet[key]._apply === 'function')) {
innerQuery = modelToGet[key]._apply(innerQuery);
}
innerQuery = innerQuery.getJoin(modelToGet[key], getAll, gotModel);
if ((modelToGet[key] == null) || (modelToGet[key]._array !== false)) {
innerQuery = innerQuery.coerceTo("ARRAY");
}
innerQuery = innerQuery._query;
return r.branch(
doc.hasFields(joins[key].leftKey),
r.object(key, new Query(joins[key].model, innerQuery).getJoin(modelToGet[key], getAll, gotModel)._query),
r.object(key, innerQuery),
{}
)
}
else {
innerQuery = r.table(joins[key].link).getAll(doc(joins[key].leftKey), {index: model.getTableName()+"_"+joins[key].leftKey}).concatMap(function(link) {
return r.table(joins[key].model.getTableName()).getAll(link(joins[key].model.getTableName()+"_"+joins[key].rightKey), {index: joins[key].rightKey})
});
});
break;
if ((modelToGet[key] != null) && (typeof modelToGet[key]._apply === 'function')) {
innerQuery = modelToGet[key]._apply(innerQuery)
case 'hasAndBelongsToMany':
self._query = self._query.merge(function(doc) {
if ((model.getTableName() === joins[key].model.getTableName()) && (joins[key].leftKey === joins[key].rightKey)) {
// In case the model is linked with itself on the same key
innerQuery = r.table(joins[key].link).getAll(doc(joins[key].leftKey), {index: joins[key].leftKey+"_"+joins[key].leftKey}).concatMap(function(link) {
return r.table(joins[key].model.getTableName()).getAll(
r.branch(
doc(joins[key].leftKey).eq(link(joins[key].leftKey+"_"+joins[key].leftKey).nth(0)),
link(joins[key].leftKey+"_"+joins[key].leftKey).nth(1),
link(joins[key].leftKey+"_"+joins[key].leftKey).nth(0)
)
, {index: joins[key].rightKey})
});
if ((modelToGet[key] != null) && (typeof modelToGet[key]._apply === 'function')) {
innerQuery = modelToGet[key]._apply(innerQuery);
}
if ((modelToGet[key] == null) || (modelToGet[key]._array !== false)) {
innerQuery = innerQuery.coerceTo("ARRAY");
}
return r.branch(
doc.hasFields(joins[key].leftKey),
r.object(key, new Query(joins[key].model, innerQuery).getJoin(modelToGet[key], getAll, gotModel)._query),
{}
)
}
else {
innerQuery = r.table(joins[key].link).getAll(doc(joins[key].leftKey), {index: model.getTableName()+"_"+joins[key].leftKey}).concatMap(function(link) {
return r.table(joins[key].model.getTableName()).getAll(link(joins[key].model.getTableName()+"_"+joins[key].rightKey), {index: joins[key].rightKey})
});
if ((modelToGet[key] == null) || (modelToGet[key]._array !== false)) {
innerQuery = innerQuery.coerceTo("ARRAY");
if ((modelToGet[key] != null) && (typeof modelToGet[key]._apply === 'function')) {
innerQuery = modelToGet[key]._apply(innerQuery)
}
if ((modelToGet[key] == null) || (modelToGet[key]._array !== false)) {
innerQuery = innerQuery.coerceTo("ARRAY");
}
return r.branch(
doc.hasFields(joins[key].leftKey),
r.object(key,
new Query(joins[key].model, innerQuery).getJoin(modelToGet[key], getAll, gotModel)._query),
{}
)
}
return r.branch(
doc.hasFields(joins[key].leftKey),
r.object(key,
new Query(joins[key].model, innerQuery).getJoin(modelToGet[key], getAll, gotModel)._query),
{}
)
}
});
});
break;
}

@@ -454,38 +434,43 @@ }

}
if ((join.type === 'hasOne') || (join.type === 'hasMany')) {
queries.push(self._query(join.leftKey).do(function(keys) {
return self._r.branch(
self._r.expr(["ARRAY", "STREAM", "TABLE_SLICE"]).contains(keys.typeOf()).not(),
// keys is a single value
join.model.getAll(keys, {index: join.rightKey}).replace(function(row) {
return row.without(join.rightKey)
})._query,
self._r.branch( // keys.typeOf().eq("ARRAY")
keys.isEmpty(),
{errors: 0},
join.model.getAll(self._r.args(keys), {index: join.rightKey}).replace(function(row) {
switch (join.type) {
case 'hasOne':
case 'hasMany':
queries.push(self._query(join.leftKey).do(function(keys) {
return self._r.branch(
self._r.expr(["ARRAY", "STREAM", "TABLE_SLICE"]).contains(keys.typeOf()).not(),
// keys is a single value
join.model.getAll(keys, {index: join.rightKey}).replace(function(row) {
return row.without(join.rightKey)
})._query
})._query,
self._r.branch( // keys.typeOf().eq("ARRAY")
keys.isEmpty(),
{errors: 0},
join.model.getAll(self._r.args(keys), {index: join.rightKey}).replace(function(row) {
return row.without(join.rightKey)
})._query
)
)
)
}))
}
else if (join.type === 'belongsTo') {
queries.push(self._query.replace(function(row) {
return row.without(join.leftKey)
}));
}
else if (join.type === 'hasAndBelongsToMany') {
queries.push(self._query(join.leftKey).do(function(keys) {
return self._r.branch(
self._r.expr(["ARRAY", "STREAM", "TABLE_SLICE"]).contains(keys.typeOf()).not(),
// keys is a single value
self._r.table(join.link).getAll(keys, {index: self._model.getTableName()+"_"+join.leftKey}).delete(),
self._r.branch( // keys.typeOf().eq("ARRAY")
keys.isEmpty(),
{errors: 0},
self._r.table(join.link).getAll(self._r.args(keys), {index: self._model.getTableName()+"_"+join.leftKey}).delete()
}))
break;
case 'belongsTo':
queries.push(self._query.replace(function(row) {
return row.without(join.leftKey)
}));
break;
case 'hasAndBelongsToMany':
queries.push(self._query(join.leftKey).do(function(keys) {
return self._r.branch(
self._r.expr(["ARRAY", "STREAM", "TABLE_SLICE"]).contains(keys.typeOf()).not(),
// keys is a single value
self._r.table(join.link).getAll(keys, {index: self._model.getTableName()+"_"+join.leftKey}).delete(),
self._r.branch( // keys.typeOf().eq("ARRAY")
keys.isEmpty(),
{errors: 0},
self._r.table(join.link).getAll(self._r.args(keys), {index: self._model.getTableName()+"_"+join.leftKey}).delete()
)
)
)
}));
}));
break;
}

@@ -519,5 +504,6 @@ });

util.loopKeys(Term, function(Term, key) {
if (key === 'run' || key[0] === '_') return;
// Note: We suppose that no method has an empty name
if ((key !== 'run') && (key[0] !== '_')) {
if (key === 'get') {
switch (key) {
case 'get':
// `get` in thinky returns an error if the document is not found.

@@ -530,4 +516,6 @@ // The driver currently just returns `null`.

})(key);
}
else if ((key === 'update') || (key === 'replace')) {
break;
case 'update':
case 'replace':
// `update` and `replace` can be used. A partial validation is performed before

@@ -549,12 +537,8 @@ // sending the query, and a full validation is performed after the query. If the

});
if (error === null) {
return new Query(this._model, this._query[key].call(this._query, value, options), true);
}
else {
return new Query(this._model, this._query[key].call(this._query, value, options), true, error);
}
return new Query(this._model, this._query[key].call(this._query, value, options), true, error);
}
})(key);
}
else if (key === 'changes') {
break;
case 'changes':
(function(key) {

@@ -570,4 +554,8 @@ Query.prototype[key] = function() {

})(key);
}
else if ((key === 'then') || (key === 'error') || (key === 'catch') || (key === 'finally')) {
break;
case 'then':
case 'error':
case 'catch':
case 'finally':
(function(key) {

@@ -579,4 +567,5 @@ Query.prototype[key] = function() {

})(key);
}
else {
break;
default:
(function(key) {

@@ -588,4 +577,4 @@ Query.prototype[key] = function() {

})(key);
break;
}
}
});

@@ -592,0 +581,0 @@ })();

@@ -26,3 +26,3 @@ var rethinkdbdash = require('rethinkdbdash');

config.db = config.db || 'test'; // We need the default db to create it.
self._options = {};

@@ -84,3 +84,3 @@ // Option passed to each model we are going to create.

}
});
});
}

@@ -87,0 +87,0 @@

@@ -13,3 +13,3 @@ var util = require(__dirname+'/../util.js');

}
TypeAny.prototype.validator = function(min) {
TypeAny.prototype.validator = function(fn) {
this._validator = fn;

@@ -16,0 +16,0 @@ }

@@ -134,9 +134,9 @@ var util = require(__dirname+'/../util.js');

if ((this._min !== -1) && (this._min > array.length)){
throw new Errors.ValidationError("Value for "+prefix+" must have at least "+this._min+" elements.")
throw new Errors.ValidationError("Value for "+prefix+" must have at least "+this._min+" elements.")
}
if ((this._max !== -1) && (this._max < array.length)){
throw new Errors.ValidationError("Value for "+prefix+" must have at most "+this._max+" elements.")
throw new Errors.ValidationError("Value for "+prefix+" must have at most "+this._max+" elements.")
}
if ((this._length !== -1) && (this._length !== array.length)){
throw new Errors.ValidationError("Value for "+prefix+" must be an array with "+this._length+" elements.")
throw new Errors.ValidationError("Value for "+prefix+" must be an array with "+this._length+" elements.")
}

@@ -143,0 +143,0 @@

@@ -139,6 +139,6 @@ var util = require(__dirname+'/../util.js');

if ((this._min instanceof Date) && (this._min > jsDate)){
throw new Errors.ValidationError("Value for "+prefix+" must be after "+this._min+".")
throw new Errors.ValidationError("Value for "+prefix+" must be after "+this._min+".")
}
if ((this._max instanceof Date) && (this._max < jsDate)){
throw new Errors.ValidationError("Value for "+prefix+" must be before "+this._max+".")
throw new Errors.ValidationError("Value for "+prefix+" must be before "+this._max+".")
}

@@ -145,0 +145,0 @@ }

@@ -107,3 +107,3 @@ var util = require(__dirname+'/../util.js');

if (util.validateIfUndefined(number, prefix, "number", options)) return;
if ((typeof this._validator === "function") && (this._validator(number) === false)) {

@@ -126,9 +126,9 @@ throw new Errors.ValidationError("Validator for the field "+prefix+" returned `false`.");

if ((this._min !== -1) && (this._min > number)){
throw new Errors.ValidationError("Value for "+prefix+" must be greater than "+this._min+".")
throw new Errors.ValidationError("Value for "+prefix+" must be greater than "+this._min+".")
}
if ((this._max !== -1) && (this._max < number)){
throw new Errors.ValidationError("Value for "+prefix+" must be less than "+this._max+".")
throw new Errors.ValidationError("Value for "+prefix+" must be less than "+this._max+".")
}
if ((this._integer === true) && (number%1 !== 0)){
throw new Errors.ValidationError("Value for "+prefix+" must be an integer.")
throw new Errors.ValidationError("Value for "+prefix+" must be an integer.")
}

@@ -135,0 +135,0 @@ }

@@ -258,3 +258,3 @@ var util = require(__dirname+'/../util.js');

* should return a boolean whether the field is valid or not.
* @param {function} fn
* @param {function} fn
* @return {TypeString}

@@ -273,3 +273,3 @@ */

* or an array of strings.
* @param {...string|Array.<string>} fn
* @param {...string|Array.<string>} fn
* @return {TypeString}

@@ -325,24 +325,24 @@ */

if ((this._min !== -1) && (this._min > str.length)){
throw new Errors.ValidationError("Value for "+prefix+" must be longer than "+this._min+".")
throw new Errors.ValidationError("Value for "+prefix+" must be longer than "+this._min+".")
}
if ((this._max !== -1) && (this._max < str.length)){
throw new Errors.ValidationError("Value for "+prefix+" must be shorter than "+this._max+".")
throw new Errors.ValidationError("Value for "+prefix+" must be shorter than "+this._max+".")
}
if ((this._length !== -1) && (this._length !== str.length)){
throw new Errors.ValidationError("Value for "+prefix+" must be a string with "+this._length+" characters.")
throw new Errors.ValidationError("Value for "+prefix+" must be a string with "+this._length+" characters.")
}
if ((this._regex instanceof RegExp) && (this._regex.test(str) === false)) {
throw new Errors.ValidationError("Value for "+prefix+" must match the regex.")
throw new Errors.ValidationError("Value for "+prefix+" must match the regex.")
}
if ((this._alphanum === true) && (validator.isAlphanumeric(str) === false)) {
throw new Errors.ValidationError("Value for "+prefix+" must be an alphanumeric string.")
throw new Errors.ValidationError("Value for "+prefix+" must be an alphanumeric string.")
}
if ((this._email === true) && (validator.isEmail(str) === false)) {
throw new Errors.ValidationError("Value for "+prefix+" must be a valid email.")
throw new Errors.ValidationError("Value for "+prefix+" must be a valid email.")
}
if ((this._lowercase === true) && (validator.isLowercase(str) === false)) {
throw new Errors.ValidationError("Value for "+prefix+" must be a lowercase string.")
throw new Errors.ValidationError("Value for "+prefix+" must be a lowercase string.")
}
if ((this._uppercase === true) && (validator.isUppercase(str) === false)) {
throw new Errors.ValidationError("Value for "+prefix+" must be a uppercase string.")
throw new Errors.ValidationError("Value for "+prefix+" must be a uppercase string.")
}

@@ -349,0 +349,0 @@ if ((this._enum !== undefined) && (this._enum[str] !== true)) {

@@ -31,3 +31,4 @@ var util = require('util');

}
else if (isPlainObject(value) === true) {
if (isPlainObject(value) === true) {
result = {};

@@ -41,3 +42,4 @@ loopKeys(value, function(_value, key) {

}
else if (Array.isArray(value)) {
if (Array.isArray(value)) {
result = []

@@ -49,5 +51,4 @@ for(var i=0; i<value.length; i++) {

}
else {
return value;
}
return value;
}

@@ -82,3 +83,3 @@ util.deepCopy = deepCopy;

* - fnArgs {Array} arguments for `fn`
* @return {Promise=}
* @return {Promise=}
*/

@@ -112,12 +113,10 @@ function hook(options) {

}
else {
return _syncHook({
preHooks: preHooks,
postHooks: postHooks,
doc: doc,
fn: fn,
fnArgs: fnArgs
});
}
return _syncHook({
preHooks: preHooks,
postHooks: postHooks,
doc: doc,
fn: fn,
fnArgs: fnArgs
});
}

@@ -171,5 +170,3 @@ function _syncHook(args) {

}
else {
return executeHooks(0, postHooks, doc, reject, nextPost);
}
return executeHooks(0, postHooks, doc, reject, nextPost);
}

@@ -254,5 +251,3 @@

}
else {
return options;
}
return options;
}

@@ -266,9 +261,6 @@ util.mergeOptions = mergeOptions;

}
else if (newValue !== null) {
if (newValue !== null) {
return newValue[primaryKey];
}
else {
return undefined;
}
return undefined;
}

@@ -289,5 +281,3 @@ util.extractPrimaryKey = extractPrimaryKey;

}
else {
throw new Errors.ValidationError("Value for "+prefix+" must be a "+expected+".")
}
throw new Errors.ValidationError("Value for "+prefix+" must be a "+expected+".")
}

@@ -301,5 +291,3 @@ util.strictType = strictType;

}
else {
throw new Errors.ValidationError("Extra field `"+key+"` in "+prefix+" not allowed.")
}
throw new Errors.ValidationError("Extra field `"+key+"` in "+prefix+" not allowed.")
}

@@ -313,5 +301,3 @@ util.extraField = extraField;

}
else {
throw new Errors.ValidationError("Value for "+prefix+" must be a "+expected+" or null.")
}
throw new Errors.ValidationError("Value for "+prefix+" must be a "+expected+" or null.")
}

@@ -318,0 +304,0 @@ util.looseType = looseType;

{
"name": "thinky",
"version": "2.0.6",
"version": "2.0.7",
"description": "RethinkDB ORM for Node.js",

@@ -27,3 +27,3 @@ "main": "lib/thinky.js",

"dependencies":{
"rethinkdbdash": "~2.0.0",
"rethinkdbdash": "~2.0.13",
"bluebird": "~2.1.3",

@@ -30,0 +30,0 @@ "validator": "~ 3.22.1"

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc