Spaces:
Runtime error
Runtime error
File size: 2,789 Bytes
9756872 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | /*!
* Module dependencies.
*/
'use strict';
const SchemaType = require('../schemaType');
const symbols = require('./symbols');
const isObject = require('../helpers/isObject');
const utils = require('../utils');
/**
* Mixed SchemaType constructor.
*
* @param {String} path
* @param {Object} options
* @inherits SchemaType
* @api public
*/
function SchemaMixed(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 && 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
*/
SchemaMixed.schemaName = 'Mixed';
SchemaMixed.defaultOptions = {};
/*!
* Inherits from SchemaType.
*/
SchemaMixed.prototype = Object.create(SchemaType.prototype);
SchemaMixed.prototype.constructor = SchemaMixed;
/**
* 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
*/
SchemaMixed.get = SchemaType.get;
/**
* Sets a default option for all Mixed instances.
*
* #### Example:
*
* // Make all mixed instances have `required` of true by default.
* mongoose.Schema.Mixed.set('required', true);
*
* const User = mongoose.model('User', new Schema({ test: mongoose.Mixed }));
* new User({ }).validateSync().errors.test.message; // Path `test` is required.
*
* @param {String} option The option you'd like to set the value for
* @param {Any} value value for option
* @return {undefined}
* @function set
* @static
* @api public
*/
SchemaMixed.set = SchemaType.set;
SchemaMixed.setters = [];
/**
* Casts `val` for Mixed.
*
* _this is a no-op_
*
* @param {Object} value to cast
* @api private
*/
SchemaMixed.prototype.cast = function(val) {
if (val instanceof Error) {
return utils.errorToPOJO(val);
}
return val;
};
/**
* Casts contents for queries.
*
* @param {String} $cond
* @param {any} [val]
* @api private
*/
SchemaMixed.prototype.castForQuery = function($cond, val) {
return val;
};
/*!
* Module exports.
*/
module.exports = SchemaMixed;
|