user model added; message model changed; tag model added

This commit is contained in:
mandutzse68104 committed 2019-06-04 14:50:37 +02:00
1 parent d27216c8a8
commit f6a8c83586
5156 files changed
+62 -437424

No files matched your search

-250
View File
@@ -1,250 +0,0 @@
/*!
* Module dependencies.
*/
'use strict';
const handleBitwiseOperator = require('./operators/bitwise');
const utils = require('../utils');
const MongooseBuffer = require('../types/buffer');
const SchemaType = require('../schematype');
const Binary = MongooseBuffer.Binary;
const CastError = SchemaType.CastError;
let Document;
/**
* Buffer SchemaType constructor
*
* @param {String} key
* @param {Object} options
* @inherits SchemaType
* @api public
*/
function SchemaBuffer(key, options) {
SchemaType.call(this, key, options, 'Buffer');
}
/**
* This schema type's name, to defend against minifiers that mangle
* function names.
*
* @api public
*/
SchemaBuffer.schemaName = 'Buffer';
/*!
* Inherits from SchemaType.
*/
SchemaBuffer.prototype = Object.create(SchemaType.prototype);
SchemaBuffer.prototype.constructor = SchemaBuffer;
/*!
* ignore
*/
SchemaBuffer._checkRequired = v => !!(v && v.length);
/**
* Override the function the required validator uses to check whether a string
* passes the `required` check.
*
* ####Example:
*
* // Allow empty strings to pass `required` check
* mongoose.Schema.Types.String.checkRequired(v => v != null);
*
* const M = mongoose.model({ buf: { type: Buffer, required: true } });
* new M({ buf: Buffer.from('') }).validateSync(); // validation passes!
*
* @param {Function} fn
* @return {Function}
* @function checkRequired
* @static
* @api public
*/
SchemaBuffer.checkRequired = SchemaType.checkRequired;
/**
* Check if the given value satisfies a required validator. To satisfy a
* required validator, a buffer must not be null or undefined and have
* non-zero length.
*
* @param {Any} value
* @param {Document} doc
* @return {Boolean}
* @api public
*/
SchemaBuffer.prototype.checkRequired = function(value, doc) {
if (SchemaType._isRef(this, value, doc, true)) {
return !!value;
}
return this.constructor._checkRequired(value);
};
/**
* Casts contents
*
* @param {Object} value
* @param {Document} doc document that triggers the casting
* @param {Boolean} init
* @api private
*/
SchemaBuffer.prototype.cast = function(value, doc, init) {
let ret;
if (SchemaType._isRef(this, value, doc, init)) {
// wait! we may need to cast this to a document
if (value === null || value === undefined) {
return value;
}
// lazy load
Document || (Document = require('./../document'));
if (value instanceof Document) {
value.$__.wasPopulated = true;
return value;
}
// setting a populated path
if (Buffer.isBuffer(value)) {
return value;
} else if (!utils.isObject(value)) {
throw new CastError('buffer', value, this.path);
}
// Handle the case where user directly sets a populated
// path to a plain object; cast to the Model used in
// the population query.
const path = doc.$__fullPath(this.path);
const owner = doc.ownerDocument ? doc.ownerDocument() : doc;
const pop = owner.populated(path, true);
ret = new pop.options.model(value);
ret.$__.wasPopulated = true;
return ret;
}
// documents
if (value && value._id) {
value = value._id;
}
if (value && value.isMongooseBuffer) {
return value;
}
if (Buffer.isBuffer(value)) {
if (!value || !value.isMongooseBuffer) {
value = new MongooseBuffer(value, [this.path, doc]);
if (this.options.subtype != null) {
value._subtype = this.options.subtype;
}
}
return value;
}
if (value instanceof Binary) {
ret = new MongooseBuffer(value.value(true), [this.path, doc]);
if (typeof value.sub_type !== 'number') {
throw new CastError('buffer', value, this.path);
}
ret._subtype = value.sub_type;
return ret;
}
if (value === null) {
return value;
}
const type = typeof value;
if (
type === 'string' || type === 'number' || Array.isArray(value) ||
(type === 'object' && value.type === 'Buffer' && Array.isArray(value.data)) // gh-6863
) {
if (type === 'number') {
value = [value];
}
ret = new MongooseBuffer(value, [this.path, doc]);
if (this.options.subtype != null) {
ret._subtype = this.options.subtype;
}
return ret;
}
throw new CastError('buffer', value, this.path);
};
/**
* Sets the default [subtype](https://studio3t.com/whats-new/best-practices-uuid-mongodb/)
* for this buffer. You can find a [list of allowed subtypes here](http://api.mongodb.com/python/current/api/bson/binary.html).
*
* ####Example:
*
* var s = new Schema({ uuid: { type: Buffer, subtype: 4 });
* var M = db.model('M', s);
* var m = new M({ uuid: 'test string' });
* m.uuid._subtype; // 4
*
* @param {Number} subtype the default subtype
* @return {SchemaType} this
* @api public
*/
SchemaBuffer.prototype.subtype = function(subtype) {
this.options.subtype = subtype;
return this;
};
/*!
* ignore
*/
function handleSingle(val) {
return this.castForQuery(val);
}
SchemaBuffer.prototype.$conditionalHandlers =
utils.options(SchemaType.prototype.$conditionalHandlers, {
$bitsAllClear: handleBitwiseOperator,
$bitsAnyClear: handleBitwiseOperator,
$bitsAllSet: handleBitwiseOperator,
$bitsAnySet: handleBitwiseOperator,
$gt: handleSingle,
$gte: handleSingle,
$lt: handleSingle,
$lte: handleSingle
});
/**
* Casts contents for queries.
*
* @param {String} $conditional
* @param {any} [value]
* @api private
*/
SchemaBuffer.prototype.castForQuery = function($conditional, val) {
let handler;
if (arguments.length === 2) {
handler = this.$conditionalHandlers[$conditional];
if (!handler) {
throw new Error('Can\'t use ' + $conditional + ' with Buffer.');
}
return handler.call(this, val);
}
val = $conditional;
const casted = this._castForQuery(val);
return casted ? casted.toObject({ transform: false, virtuals: false }) : casted;
};
/*!
* Module exports.
*/
module.exports = SchemaBuffer;
-36
View File
@@ -1,36 +0,0 @@
/*!
* Module exports.
*/
'use strict';
exports.String = require('./string');
exports.Number = require('./number');
exports.Boolean = require('./boolean');
exports.DocumentArray = require('./documentarray');
exports.Embedded = require('./embedded');
exports.Array = require('./array');
exports.Buffer = require('./buffer');
exports.Date = require('./date');
exports.ObjectId = require('./objectid');
exports.Mixed = require('./mixed');
exports.Decimal128 = exports.Decimal = require('./decimal128');
exports.Map = require('./map');
// alias
exports.Oid = exports.ObjectId;
exports.Object = exports.Mixed;
exports.Bool = exports.Boolean;
-105
View File
@@ -1,105 +0,0 @@
/*!
* Module dependencies.
*/
'use strict';
const SchemaType = require('../schematype');
const symbols = require('./symbols');
const utils = require('../utils');
/**
* Mixed SchemaType constructor.
*
* @param {String} path
* @param {Object} options
* @inherits SchemaType
* @api public
*/
function Mixed(path, options) {
if (options && options.default) {
const def = options.default;
if (Array.isArray(def) && def.length === 0) {
// make sure empty array defaults are handled
options.default = Array;
} else if (!options.shared && utils.isObject(def) && Object.keys(def).length === 0) {
// prevent odd "shared" objects between documents
options.default = function() {
return {};
};
}
}
SchemaType.call(this, path, options, 'Mixed');
this[symbols.schemaMixedSymbol] = true;
}
/**
* This schema type's name, to defend against minifiers that mangle
* function names.
*
* @api public
*/
Mixed.schemaName = 'Mixed';
/*!
* Inherits from SchemaType.
*/
Mixed.prototype = Object.create(SchemaType.prototype);
Mixed.prototype.constructor = Mixed;
/**
* Attaches a getter for all Mixed paths.
*
* ####Example:
*
* // Hide the 'hidden' path
* mongoose.Schema.Mixed.get(v => Object.assign({}, v, { hidden: null }));
*
* const Model = mongoose.model('Test', new Schema({ test: {} }));
* new Model({ test: { hidden: 'Secret!' } }).test.hidden; // null
*
* @param {Function} getter
* @return {this}
* @function get
* @static
* @api public
*/
Mixed.get = SchemaType.get;
/**
* Casts `val` for Mixed.
*
* _this is a no-op_
*
* @param {Object} value to cast
* @api private
*/
Mixed.prototype.cast = function(val) {
return val;
};
/**
* Casts contents for queries.
*
* @param {String} $cond
* @param {any} [val]
* @api private
*/
Mixed.prototype.castForQuery = function($cond, val) {
if (arguments.length === 2) {
return val;
}
return $cond;
};
/*!
* Module exports.
*/
module.exports = Mixed;
-38
View File
@@ -1,38 +0,0 @@
/*!
* Module requirements.
*/
'use strict';
const CastError = require('../../error/cast');
/*!
* ignore
*/
function handleBitwiseOperator(val) {
const _this = this;
if (Array.isArray(val)) {
return val.map(function(v) {
return _castNumber(_this.path, v);
});
} else if (Buffer.isBuffer(val)) {
return val;
}
// Assume trying to cast to number
return _castNumber(_this.path, val);
}
/*!
* ignore
*/
function _castNumber(path, num) {
const v = Number(num);
if (isNaN(v)) {
throw new CastError('number', num, path);
}
return v;
}
module.exports = handleBitwiseOperator;
-12
View File
@@ -1,12 +0,0 @@
'use strict';
const castBoolean = require('../../cast/boolean');
/*!
* ignore
*/
module.exports = function(val) {
const path = this != null ? this.path : null;
return castBoolean(val, path);
};
-102
View File
@@ -1,102 +0,0 @@
/*!
* Module requirements.
*/
'use strict';
const castArraysOfNumbers = require('./helpers').castArraysOfNumbers;
const castToNumber = require('./helpers').castToNumber;
/*!
* ignore
*/
exports.cast$geoIntersects = cast$geoIntersects;
exports.cast$near = cast$near;
exports.cast$within = cast$within;
function cast$near(val) {
const SchemaArray = require('../array');
if (Array.isArray(val)) {
castArraysOfNumbers(val, this);
return val;
}
_castMinMaxDistance(this, val);
if (val && val.$geometry) {
return cast$geometry(val, this);
}
return SchemaArray.prototype.castForQuery.call(this, val);
}
function cast$geometry(val, self) {
switch (val.$geometry.type) {
case 'Polygon':
case 'LineString':
case 'Point':
castArraysOfNumbers(val.$geometry.coordinates, self);
break;
default:
// ignore unknowns
break;
}
_castMinMaxDistance(self, val);
return val;
}
function cast$within(val) {
_castMinMaxDistance(this, val);
if (val.$box || val.$polygon) {
const type = val.$box ? '$box' : '$polygon';
val[type].forEach(arr => {
if (!Array.isArray(arr)) {
const msg = 'Invalid $within $box argument. '
+ 'Expected an array, received ' + arr;
throw new TypeError(msg);
}
arr.forEach((v, i) => {
arr[i] = castToNumber.call(this, v);
});
});
} else if (val.$center || val.$centerSphere) {
const type = val.$center ? '$center' : '$centerSphere';
val[type].forEach((item, i) => {
if (Array.isArray(item)) {
item.forEach((v, j) => {
item[j] = castToNumber.call(this, v);
});
} else {
val[type][i] = castToNumber.call(this, item);
}
});
} else if (val.$geometry) {
cast$geometry(val, this);
}
return val;
}
function cast$geoIntersects(val) {
const geo = val.$geometry;
if (!geo) {
return;
}
cast$geometry(val, this);
return val;
}
function _castMinMaxDistance(self, val) {
if (val.$maxDistance) {
val.$maxDistance = castToNumber.call(self, val.$maxDistance);
}
if (val.$minDistance) {
val.$minDistance = castToNumber.call(self, val.$minDistance);
}
}
-32
View File
@@ -1,32 +0,0 @@
'use strict';
/*!
* Module requirements.
*/
const SchemaNumber = require('../number');
/*!
* @ignore
*/
exports.castToNumber = castToNumber;
exports.castArraysOfNumbers = castArraysOfNumbers;
/*!
* @ignore
*/
function castToNumber(val) {
return SchemaNumber.cast()(val);
}
function castArraysOfNumbers(arr, self) {
arr.forEach(function(v, i) {
if (Array.isArray(v)) {
castArraysOfNumbers(v, self);
} else {
arr[i] = castToNumber.call(self, v);
}
});
}
-39
View File
@@ -1,39 +0,0 @@
'use strict';
const CastError = require('../../error/cast');
const castBoolean = require('../../cast/boolean');
const castString = require('../../cast/string');
/*!
* Casts val to an object suitable for `$text`. Throws an error if the object
* can't be casted.
*
* @param {Any} val value to cast
* @param {String} [path] path to associate with any errors that occured
* @return {Object} casted object
* @see https://docs.mongodb.com/manual/reference/operator/query/text/
* @api private
*/
module.exports = function(val, path) {
if (val == null || typeof val !== 'object') {
throw new CastError('$text', val, path);
}
if (val.$search != null) {
val.$search = castString(val.$search, path + '.$search');
}
if (val.$language != null) {
val.$language = castString(val.$language, path + '.$language');
}
if (val.$caseSensitive != null) {
val.$caseSensitive = castBoolean(val.$caseSensitive,
path + '.$castSensitive');
}
if (val.$diacriticSensitive != null) {
val.$diacriticSensitive = castBoolean(val.$diacriticSensitive,
path + '.$diacriticSensitive');
}
return val;
};
-13
View File
@@ -1,13 +0,0 @@
'use strict';
/*!
* ignore
*/
module.exports = function(val) {
if (typeof val !== 'number' && typeof val !== 'string') {
throw new Error('$type parameter must be number or string');
}
return val;
};