@depup/mongoose 9.1.3-depup.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/LICENSE.md +22 -0
- package/README.md +397 -0
- package/SECURITY.md +1 -0
- package/eslint.config.mjs +198 -0
- package/index.js +64 -0
- package/lib/aggregate.js +1189 -0
- package/lib/cast/bigint.js +46 -0
- package/lib/cast/boolean.js +32 -0
- package/lib/cast/date.js +41 -0
- package/lib/cast/decimal128.js +39 -0
- package/lib/cast/double.js +50 -0
- package/lib/cast/int32.js +36 -0
- package/lib/cast/number.js +42 -0
- package/lib/cast/objectid.js +29 -0
- package/lib/cast/string.js +37 -0
- package/lib/cast/uuid.js +35 -0
- package/lib/cast.js +436 -0
- package/lib/collection.js +321 -0
- package/lib/connection.js +1855 -0
- package/lib/connectionState.js +26 -0
- package/lib/constants.js +73 -0
- package/lib/cursor/aggregationCursor.js +466 -0
- package/lib/cursor/changeStream.js +198 -0
- package/lib/cursor/queryCursor.js +622 -0
- package/lib/document.js +5521 -0
- package/lib/driver.js +15 -0
- package/lib/drivers/SPEC.md +4 -0
- package/lib/drivers/node-mongodb-native/bulkWriteResult.js +5 -0
- package/lib/drivers/node-mongodb-native/collection.js +393 -0
- package/lib/drivers/node-mongodb-native/connection.js +506 -0
- package/lib/drivers/node-mongodb-native/index.js +10 -0
- package/lib/error/browserMissingSchema.js +29 -0
- package/lib/error/bulkSaveIncompleteError.js +44 -0
- package/lib/error/bulkWriteError.js +41 -0
- package/lib/error/cast.js +158 -0
- package/lib/error/createCollectionsError.js +26 -0
- package/lib/error/divergentArray.js +40 -0
- package/lib/error/eachAsyncMultiError.js +41 -0
- package/lib/error/index.js +237 -0
- package/lib/error/invalidSchemaOption.js +32 -0
- package/lib/error/messages.js +47 -0
- package/lib/error/missingSchema.js +33 -0
- package/lib/error/mongooseError.js +13 -0
- package/lib/error/notFound.js +47 -0
- package/lib/error/objectExpected.js +31 -0
- package/lib/error/objectParameter.js +31 -0
- package/lib/error/overwriteModel.js +31 -0
- package/lib/error/parallelSave.js +33 -0
- package/lib/error/parallelValidate.js +33 -0
- package/lib/error/serverSelection.js +62 -0
- package/lib/error/setOptionError.js +103 -0
- package/lib/error/strict.js +35 -0
- package/lib/error/strictPopulate.js +31 -0
- package/lib/error/syncIndexes.js +30 -0
- package/lib/error/validation.js +97 -0
- package/lib/error/validator.js +100 -0
- package/lib/error/version.js +38 -0
- package/lib/helpers/aggregate/prepareDiscriminatorPipeline.js +39 -0
- package/lib/helpers/aggregate/stringifyFunctionOperators.js +50 -0
- package/lib/helpers/arrayDepth.js +33 -0
- package/lib/helpers/clone.js +204 -0
- package/lib/helpers/common.js +127 -0
- package/lib/helpers/createJSONSchemaTypeDefinition.js +24 -0
- package/lib/helpers/cursor/eachAsync.js +225 -0
- package/lib/helpers/discriminator/applyEmbeddedDiscriminators.js +36 -0
- package/lib/helpers/discriminator/areDiscriminatorValuesEqual.js +16 -0
- package/lib/helpers/discriminator/checkEmbeddedDiscriminatorKeyProjection.js +12 -0
- package/lib/helpers/discriminator/getConstructor.js +29 -0
- package/lib/helpers/discriminator/getDiscriminatorByValue.js +28 -0
- package/lib/helpers/discriminator/getSchemaDiscriminatorByValue.js +27 -0
- package/lib/helpers/discriminator/mergeDiscriminatorSchema.js +91 -0
- package/lib/helpers/document/applyDefaults.js +132 -0
- package/lib/helpers/document/applyTimestamps.js +106 -0
- package/lib/helpers/document/applyVirtuals.js +147 -0
- package/lib/helpers/document/cleanModifiedSubpaths.js +45 -0
- package/lib/helpers/document/compile.js +238 -0
- package/lib/helpers/document/getDeepestSubdocumentForPath.js +38 -0
- package/lib/helpers/document/getEmbeddedDiscriminatorPath.js +53 -0
- package/lib/helpers/document/handleSpreadDoc.js +35 -0
- package/lib/helpers/each.js +25 -0
- package/lib/helpers/error/combinePathErrors.js +22 -0
- package/lib/helpers/firstKey.js +8 -0
- package/lib/helpers/get.js +65 -0
- package/lib/helpers/getConstructorName.js +16 -0
- package/lib/helpers/getDefaultBulkwriteResult.js +18 -0
- package/lib/helpers/getFunctionName.js +10 -0
- package/lib/helpers/immediate.js +16 -0
- package/lib/helpers/indexes/applySchemaCollation.js +13 -0
- package/lib/helpers/indexes/decorateDiscriminatorIndexOptions.js +14 -0
- package/lib/helpers/indexes/getRelatedIndexes.js +63 -0
- package/lib/helpers/indexes/isDefaultIdIndex.js +18 -0
- package/lib/helpers/indexes/isIndexEqual.js +95 -0
- package/lib/helpers/indexes/isIndexSpecEqual.js +32 -0
- package/lib/helpers/indexes/isTextIndex.js +16 -0
- package/lib/helpers/indexes/isTimeseriesIndex.js +16 -0
- package/lib/helpers/isAsyncFunction.js +9 -0
- package/lib/helpers/isBsonType.js +15 -0
- package/lib/helpers/isMongooseObject.js +22 -0
- package/lib/helpers/isObject.js +16 -0
- package/lib/helpers/isPOJO.js +12 -0
- package/lib/helpers/isPromise.js +6 -0
- package/lib/helpers/isSimpleValidator.js +22 -0
- package/lib/helpers/minimize.js +41 -0
- package/lib/helpers/model/applyDefaultsToPOJO.js +52 -0
- package/lib/helpers/model/applyHooks.js +140 -0
- package/lib/helpers/model/applyMethods.js +70 -0
- package/lib/helpers/model/applyStaticHooks.js +33 -0
- package/lib/helpers/model/applyStatics.js +13 -0
- package/lib/helpers/model/castBulkWrite.js +316 -0
- package/lib/helpers/model/decorateBulkWriteResult.js +8 -0
- package/lib/helpers/model/discriminator.js +265 -0
- package/lib/helpers/model/pushNestedArrayPaths.js +15 -0
- package/lib/helpers/omitUndefined.js +20 -0
- package/lib/helpers/once.js +12 -0
- package/lib/helpers/parallelLimit.js +37 -0
- package/lib/helpers/path/parentPaths.js +18 -0
- package/lib/helpers/path/setDottedPath.js +33 -0
- package/lib/helpers/pluralize.js +95 -0
- package/lib/helpers/populate/assignRawDocsToIdStructure.js +129 -0
- package/lib/helpers/populate/assignVals.js +360 -0
- package/lib/helpers/populate/createPopulateQueryFilter.js +97 -0
- package/lib/helpers/populate/getModelsMapForPopulate.js +776 -0
- package/lib/helpers/populate/getSchemaTypes.js +228 -0
- package/lib/helpers/populate/getVirtual.js +103 -0
- package/lib/helpers/populate/leanPopulateMap.js +7 -0
- package/lib/helpers/populate/lookupLocalFields.js +40 -0
- package/lib/helpers/populate/markArraySubdocsPopulated.js +49 -0
- package/lib/helpers/populate/modelNamesFromRefPath.js +66 -0
- package/lib/helpers/populate/removeDeselectedForeignField.js +31 -0
- package/lib/helpers/populate/setPopulatedVirtualValue.js +33 -0
- package/lib/helpers/populate/skipPopulateValue.js +10 -0
- package/lib/helpers/populate/validateRef.js +19 -0
- package/lib/helpers/printJestWarning.js +21 -0
- package/lib/helpers/processConnectionOptions.js +65 -0
- package/lib/helpers/projection/applyProjection.js +83 -0
- package/lib/helpers/projection/hasIncludedChildren.js +41 -0
- package/lib/helpers/projection/isDefiningProjection.js +18 -0
- package/lib/helpers/projection/isExclusive.js +37 -0
- package/lib/helpers/projection/isInclusive.js +39 -0
- package/lib/helpers/projection/isNestedProjection.js +8 -0
- package/lib/helpers/projection/isPathExcluded.js +40 -0
- package/lib/helpers/projection/isPathSelectedInclusive.js +28 -0
- package/lib/helpers/projection/isSubpath.js +14 -0
- package/lib/helpers/projection/parseProjection.js +33 -0
- package/lib/helpers/query/applyGlobalOption.js +29 -0
- package/lib/helpers/query/cast$expr.js +287 -0
- package/lib/helpers/query/castFilterPath.js +54 -0
- package/lib/helpers/query/castUpdate.js +643 -0
- package/lib/helpers/query/getEmbeddedDiscriminatorPath.js +103 -0
- package/lib/helpers/query/handleImmutable.js +44 -0
- package/lib/helpers/query/handleReadPreferenceAliases.js +23 -0
- package/lib/helpers/query/hasDollarKeys.js +23 -0
- package/lib/helpers/query/isOperator.js +14 -0
- package/lib/helpers/query/sanitizeFilter.js +38 -0
- package/lib/helpers/query/sanitizeProjection.js +14 -0
- package/lib/helpers/query/selectPopulatedFields.js +62 -0
- package/lib/helpers/query/trusted.js +13 -0
- package/lib/helpers/query/validOps.js +3 -0
- package/lib/helpers/schema/addAutoId.js +7 -0
- package/lib/helpers/schema/applyBuiltinPlugins.js +12 -0
- package/lib/helpers/schema/applyPlugins.js +55 -0
- package/lib/helpers/schema/applyReadConcern.js +20 -0
- package/lib/helpers/schema/applyWriteConcern.js +39 -0
- package/lib/helpers/schema/cleanPositionalOperators.js +12 -0
- package/lib/helpers/schema/getIndexes.js +171 -0
- package/lib/helpers/schema/getKeysInSchemaOrder.js +28 -0
- package/lib/helpers/schema/getPath.js +43 -0
- package/lib/helpers/schema/getSubdocumentStrictValue.js +32 -0
- package/lib/helpers/schema/handleIdOption.js +20 -0
- package/lib/helpers/schema/handleTimestampOption.js +24 -0
- package/lib/helpers/schema/idGetter.js +34 -0
- package/lib/helpers/schema/merge.js +36 -0
- package/lib/helpers/schematype/handleImmutable.js +50 -0
- package/lib/helpers/setDefaultsOnInsert.js +158 -0
- package/lib/helpers/specialProperties.js +3 -0
- package/lib/helpers/symbols.js +20 -0
- package/lib/helpers/timers.js +3 -0
- package/lib/helpers/timestamps/setDocumentTimestamps.js +26 -0
- package/lib/helpers/timestamps/setupTimestamps.js +116 -0
- package/lib/helpers/topology/allServersUnknown.js +12 -0
- package/lib/helpers/topology/isAtlas.js +31 -0
- package/lib/helpers/topology/isSSLError.js +16 -0
- package/lib/helpers/update/applyTimestampsToChildren.js +193 -0
- package/lib/helpers/update/applyTimestampsToUpdate.js +131 -0
- package/lib/helpers/update/castArrayFilters.js +113 -0
- package/lib/helpers/update/decorateUpdateWithVersionKey.js +35 -0
- package/lib/helpers/update/modifiedPaths.js +33 -0
- package/lib/helpers/update/moveImmutableProperties.js +53 -0
- package/lib/helpers/update/removeUnusedArrayFilters.js +32 -0
- package/lib/helpers/update/updatedPathsByArrayFilter.js +27 -0
- package/lib/helpers/updateValidators.js +193 -0
- package/lib/index.js +17 -0
- package/lib/internal.js +46 -0
- package/lib/model.js +5010 -0
- package/lib/modifiedPathsSnapshot.js +9 -0
- package/lib/mongoose.js +1411 -0
- package/lib/options/populateOptions.js +36 -0
- package/lib/options/propertyOptions.js +8 -0
- package/lib/options/saveOptions.js +16 -0
- package/lib/options/schemaArrayOptions.js +78 -0
- package/lib/options/schemaBufferOptions.js +38 -0
- package/lib/options/schemaDateOptions.js +71 -0
- package/lib/options/schemaDocumentArrayOptions.js +68 -0
- package/lib/options/schemaMapOptions.js +43 -0
- package/lib/options/schemaNumberOptions.js +101 -0
- package/lib/options/schemaObjectIdOptions.js +64 -0
- package/lib/options/schemaStringOptions.js +138 -0
- package/lib/options/schemaSubdocumentOptions.js +66 -0
- package/lib/options/schemaTypeOptions.js +244 -0
- package/lib/options/schemaUnionOptions.js +32 -0
- package/lib/options/virtualOptions.js +164 -0
- package/lib/options.js +17 -0
- package/lib/plugins/index.js +6 -0
- package/lib/plugins/saveSubdocs.js +76 -0
- package/lib/plugins/sharding.js +84 -0
- package/lib/plugins/trackTransaction.js +84 -0
- package/lib/plugins/validateBeforeSave.js +41 -0
- package/lib/query.js +5673 -0
- package/lib/queryHelpers.js +387 -0
- package/lib/schema/array.js +699 -0
- package/lib/schema/bigint.js +282 -0
- package/lib/schema/boolean.js +332 -0
- package/lib/schema/buffer.js +343 -0
- package/lib/schema/date.js +467 -0
- package/lib/schema/decimal128.js +263 -0
- package/lib/schema/documentArray.js +656 -0
- package/lib/schema/documentArrayElement.js +137 -0
- package/lib/schema/double.js +246 -0
- package/lib/schema/index.js +32 -0
- package/lib/schema/int32.js +289 -0
- package/lib/schema/map.js +201 -0
- package/lib/schema/mixed.js +146 -0
- package/lib/schema/number.js +510 -0
- package/lib/schema/objectId.js +333 -0
- package/lib/schema/operators/bitwise.js +38 -0
- package/lib/schema/operators/exists.js +12 -0
- package/lib/schema/operators/geospatial.js +107 -0
- package/lib/schema/operators/helpers.js +32 -0
- package/lib/schema/operators/text.js +39 -0
- package/lib/schema/operators/type.js +20 -0
- package/lib/schema/string.js +733 -0
- package/lib/schema/subdocument.js +436 -0
- package/lib/schema/symbols.js +5 -0
- package/lib/schema/union.js +113 -0
- package/lib/schema/uuid.js +305 -0
- package/lib/schema.js +3226 -0
- package/lib/schemaType.js +1835 -0
- package/lib/stateMachine.js +232 -0
- package/lib/types/array/index.js +119 -0
- package/lib/types/array/isMongooseArray.js +5 -0
- package/lib/types/array/methods/index.js +1095 -0
- package/lib/types/arraySubdocument.js +207 -0
- package/lib/types/buffer.js +294 -0
- package/lib/types/decimal128.js +13 -0
- package/lib/types/documentArray/index.js +113 -0
- package/lib/types/documentArray/isMongooseDocumentArray.js +5 -0
- package/lib/types/documentArray/methods/index.js +415 -0
- package/lib/types/double.js +13 -0
- package/lib/types/index.js +23 -0
- package/lib/types/map.js +419 -0
- package/lib/types/objectid.js +41 -0
- package/lib/types/subdocument.js +464 -0
- package/lib/types/uuid.js +13 -0
- package/lib/utils.js +1054 -0
- package/lib/validOptions.js +42 -0
- package/lib/virtualType.js +204 -0
- package/package.json +148 -0
- package/types/aggregate.d.ts +180 -0
- package/types/augmentations.d.ts +9 -0
- package/types/callback.d.ts +8 -0
- package/types/collection.d.ts +49 -0
- package/types/connection.d.ts +297 -0
- package/types/cursor.d.ts +67 -0
- package/types/document.d.ts +374 -0
- package/types/error.d.ts +143 -0
- package/types/expressions.d.ts +3053 -0
- package/types/helpers.d.ts +32 -0
- package/types/index.d.ts +1056 -0
- package/types/indexes.d.ts +97 -0
- package/types/inferhydrateddoctype.d.ts +115 -0
- package/types/inferrawdoctype.d.ts +135 -0
- package/types/inferschematype.d.ts +337 -0
- package/types/middlewares.d.ts +59 -0
- package/types/models.d.ts +1306 -0
- package/types/mongooseoptions.d.ts +228 -0
- package/types/pipelinestage.d.ts +333 -0
- package/types/populate.d.ts +53 -0
- package/types/query.d.ts +934 -0
- package/types/schemaoptions.d.ts +282 -0
- package/types/schematypes.d.ts +654 -0
- package/types/session.d.ts +32 -0
- package/types/types.d.ts +109 -0
- package/types/utility.d.ts +175 -0
- package/types/validation.d.ts +39 -0
- package/types/virtuals.d.ts +14 -0
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Module requirements.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('../error/index');
|
|
8
|
+
const SchemaDateOptions = require('../options/schemaDateOptions');
|
|
9
|
+
const SchemaType = require('../schemaType');
|
|
10
|
+
const castDate = require('../cast/date');
|
|
11
|
+
const createJSONSchemaTypeDefinition = require('../helpers/createJSONSchemaTypeDefinition');
|
|
12
|
+
const getConstructorName = require('../helpers/getConstructorName');
|
|
13
|
+
const utils = require('../utils');
|
|
14
|
+
|
|
15
|
+
const CastError = SchemaType.CastError;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Date SchemaType constructor.
|
|
19
|
+
*
|
|
20
|
+
* @param {String} key
|
|
21
|
+
* @param {Object} options
|
|
22
|
+
* @param {Object} schemaOptions
|
|
23
|
+
* @param {Schema} parentSchema
|
|
24
|
+
* @inherits SchemaType
|
|
25
|
+
* @api public
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
function SchemaDate(key, options, _schemaOptions, parentSchema) {
|
|
29
|
+
SchemaType.call(this, key, options, 'Date', parentSchema);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* This schema type's name, to defend against minifiers that mangle
|
|
34
|
+
* function names.
|
|
35
|
+
*
|
|
36
|
+
* @api public
|
|
37
|
+
*/
|
|
38
|
+
SchemaDate.schemaName = 'Date';
|
|
39
|
+
|
|
40
|
+
SchemaDate.defaultOptions = {};
|
|
41
|
+
|
|
42
|
+
/*!
|
|
43
|
+
* Inherits from SchemaType.
|
|
44
|
+
*/
|
|
45
|
+
SchemaDate.prototype = Object.create(SchemaType.prototype);
|
|
46
|
+
SchemaDate.prototype.constructor = SchemaDate;
|
|
47
|
+
SchemaDate.prototype.OptionsConstructor = SchemaDateOptions;
|
|
48
|
+
|
|
49
|
+
/*!
|
|
50
|
+
* ignore
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
SchemaDate._cast = castDate;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Sets a default option for all Date instances.
|
|
57
|
+
*
|
|
58
|
+
* #### Example:
|
|
59
|
+
*
|
|
60
|
+
* // Make all dates have `required` of true by default.
|
|
61
|
+
* mongoose.Schema.Types.Date.set('required', true);
|
|
62
|
+
*
|
|
63
|
+
* const User = mongoose.model('User', new Schema({ test: Date }));
|
|
64
|
+
* new User({ }).validateSync().errors.test.message; // Path `test` is required.
|
|
65
|
+
*
|
|
66
|
+
* @param {String} option The option you'd like to set the value for
|
|
67
|
+
* @param {Any} value value for option
|
|
68
|
+
* @return {undefined}
|
|
69
|
+
* @function set
|
|
70
|
+
* @static
|
|
71
|
+
* @api public
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
SchemaDate.set = SchemaType.set;
|
|
75
|
+
|
|
76
|
+
SchemaDate.setters = [];
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Attaches a getter for all Date instances
|
|
80
|
+
*
|
|
81
|
+
* #### Example:
|
|
82
|
+
*
|
|
83
|
+
* // Always convert Dates to string
|
|
84
|
+
* mongoose.Schema.Types.Date.get(v => v.toString());
|
|
85
|
+
*
|
|
86
|
+
* const Model = mongoose.model('Test', new Schema({ date: { type: Date, default: () => new Date() } }));
|
|
87
|
+
* typeof (new Model({}).date); // 'string'
|
|
88
|
+
*
|
|
89
|
+
* @param {Function} getter
|
|
90
|
+
* @return {this}
|
|
91
|
+
* @function get
|
|
92
|
+
* @static
|
|
93
|
+
* @api public
|
|
94
|
+
*/
|
|
95
|
+
|
|
96
|
+
SchemaDate.get = SchemaType.get;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Get/set the function used to cast arbitrary values to dates.
|
|
100
|
+
*
|
|
101
|
+
* #### Example:
|
|
102
|
+
*
|
|
103
|
+
* // Mongoose converts empty string '' into `null` for date types. You
|
|
104
|
+
* // can create a custom caster to disable it.
|
|
105
|
+
* const original = mongoose.Schema.Types.Date.cast();
|
|
106
|
+
* mongoose.Schema.Types.Date.cast(v => {
|
|
107
|
+
* assert.ok(v !== '');
|
|
108
|
+
* return original(v);
|
|
109
|
+
* });
|
|
110
|
+
*
|
|
111
|
+
* // Or disable casting entirely
|
|
112
|
+
* mongoose.Schema.Types.Date.cast(false);
|
|
113
|
+
*
|
|
114
|
+
* @param {Function} caster
|
|
115
|
+
* @return {Function}
|
|
116
|
+
* @function cast
|
|
117
|
+
* @static
|
|
118
|
+
* @api public
|
|
119
|
+
*/
|
|
120
|
+
|
|
121
|
+
SchemaDate.cast = function cast(caster) {
|
|
122
|
+
if (arguments.length === 0) {
|
|
123
|
+
return this._cast;
|
|
124
|
+
}
|
|
125
|
+
if (caster === false) {
|
|
126
|
+
caster = this._defaultCaster;
|
|
127
|
+
}
|
|
128
|
+
this._cast = caster;
|
|
129
|
+
|
|
130
|
+
return this._cast;
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
/*!
|
|
134
|
+
* ignore
|
|
135
|
+
*/
|
|
136
|
+
|
|
137
|
+
SchemaDate._defaultCaster = v => {
|
|
138
|
+
if (v != null && !(v instanceof Date)) {
|
|
139
|
+
throw new Error();
|
|
140
|
+
}
|
|
141
|
+
return v;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Declares a TTL index (rounded to the nearest second) for _Date_ types only.
|
|
146
|
+
*
|
|
147
|
+
* This sets the `expireAfterSeconds` index option available in MongoDB >= 2.1.2.
|
|
148
|
+
* This index type is only compatible with Date types.
|
|
149
|
+
*
|
|
150
|
+
* #### Example:
|
|
151
|
+
*
|
|
152
|
+
* // expire in 24 hours
|
|
153
|
+
* new Schema({ createdAt: { type: Date, expires: 60*60*24 }});
|
|
154
|
+
*
|
|
155
|
+
* `expires` utilizes the `ms` module from [vercel](https://github.com/vercel/ms) allowing us to use a friendlier syntax:
|
|
156
|
+
*
|
|
157
|
+
* #### Example:
|
|
158
|
+
*
|
|
159
|
+
* // expire in 24 hours
|
|
160
|
+
* new Schema({ createdAt: { type: Date, expires: '24h' }});
|
|
161
|
+
*
|
|
162
|
+
* // expire in 1.5 hours
|
|
163
|
+
* new Schema({ createdAt: { type: Date, expires: '1.5h' }});
|
|
164
|
+
*
|
|
165
|
+
* // expire in 7 days
|
|
166
|
+
* const schema = new Schema({ createdAt: Date });
|
|
167
|
+
* schema.path('createdAt').expires('7d');
|
|
168
|
+
*
|
|
169
|
+
* @param {Number|String} when
|
|
170
|
+
* @added 3.0.0
|
|
171
|
+
* @return {SchemaType} this
|
|
172
|
+
* @api public
|
|
173
|
+
*/
|
|
174
|
+
|
|
175
|
+
SchemaDate.prototype.expires = function(when) {
|
|
176
|
+
if (getConstructorName(this._index) !== 'Object') {
|
|
177
|
+
this._index = {};
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
this._index.expires = when;
|
|
181
|
+
utils.expires(this._index);
|
|
182
|
+
return this;
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
/*!
|
|
186
|
+
* ignore
|
|
187
|
+
*/
|
|
188
|
+
|
|
189
|
+
SchemaDate._checkRequired = v => v instanceof Date;
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Override the function the required validator uses to check whether a string
|
|
193
|
+
* passes the `required` check.
|
|
194
|
+
*
|
|
195
|
+
* #### Example:
|
|
196
|
+
*
|
|
197
|
+
* // Allow empty strings to pass `required` check
|
|
198
|
+
* mongoose.Schema.Types.String.checkRequired(v => v != null);
|
|
199
|
+
*
|
|
200
|
+
* const M = mongoose.model({ str: { type: String, required: true } });
|
|
201
|
+
* new M({ str: '' }).validateSync(); // `null`, validation passes!
|
|
202
|
+
*
|
|
203
|
+
* @param {Function} fn
|
|
204
|
+
* @return {Function}
|
|
205
|
+
* @function checkRequired
|
|
206
|
+
* @static
|
|
207
|
+
* @api public
|
|
208
|
+
*/
|
|
209
|
+
|
|
210
|
+
SchemaDate.checkRequired = SchemaType.checkRequired;
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Check if the given value satisfies a required validator. To satisfy
|
|
214
|
+
* a required validator, the given value must be an instance of `Date`.
|
|
215
|
+
*
|
|
216
|
+
* @param {Any} value
|
|
217
|
+
* @param {Document} doc
|
|
218
|
+
* @return {Boolean}
|
|
219
|
+
* @api public
|
|
220
|
+
*/
|
|
221
|
+
|
|
222
|
+
SchemaDate.prototype.checkRequired = function(value, doc) {
|
|
223
|
+
if (typeof value === 'object' && SchemaType._isRef(this, value, doc, true)) {
|
|
224
|
+
return value != null;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// `require('util').inherits()` does **not** copy static properties, and
|
|
228
|
+
// plugins like mongoose-float use `inherits()` for pre-ES6.
|
|
229
|
+
const _checkRequired = typeof this.constructor.checkRequired === 'function' ?
|
|
230
|
+
this.constructor.checkRequired() :
|
|
231
|
+
SchemaDate.checkRequired();
|
|
232
|
+
return _checkRequired(value);
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Sets a minimum date validator.
|
|
237
|
+
*
|
|
238
|
+
* #### Example:
|
|
239
|
+
*
|
|
240
|
+
* const s = new Schema({ d: { type: Date, min: Date('1970-01-01') })
|
|
241
|
+
* const M = db.model('M', s)
|
|
242
|
+
* const m = new M({ d: Date('1969-12-31') })
|
|
243
|
+
* m.save(function (err) {
|
|
244
|
+
* console.error(err) // validator error
|
|
245
|
+
* m.d = Date('2014-12-08');
|
|
246
|
+
* m.save() // success
|
|
247
|
+
* })
|
|
248
|
+
*
|
|
249
|
+
* // custom error messages
|
|
250
|
+
* // We can also use the special {MIN} token which will be replaced with the invalid value
|
|
251
|
+
* const min = [Date('1970-01-01'), 'The value of path `{PATH}` ({VALUE}) is beneath the limit ({MIN}).'];
|
|
252
|
+
* const schema = new Schema({ d: { type: Date, min: min })
|
|
253
|
+
* const M = mongoose.model('M', schema);
|
|
254
|
+
* const s= new M({ d: Date('1969-12-31') });
|
|
255
|
+
* s.validate(function (err) {
|
|
256
|
+
* console.log(String(err)) // ValidationError: The value of path `d` (1969-12-31) is before the limit (1970-01-01).
|
|
257
|
+
* })
|
|
258
|
+
*
|
|
259
|
+
* @param {Date} value minimum date
|
|
260
|
+
* @param {String} [message] optional custom error message
|
|
261
|
+
* @return {SchemaType} this
|
|
262
|
+
* @see Customized Error Messages https://mongoosejs.com/docs/api/error.html#Error.messages
|
|
263
|
+
* @api public
|
|
264
|
+
*/
|
|
265
|
+
|
|
266
|
+
SchemaDate.prototype.min = function(value, message) {
|
|
267
|
+
if (this.minValidator) {
|
|
268
|
+
this.validators = this.validators.filter(function(v) {
|
|
269
|
+
return v.validator !== this.minValidator;
|
|
270
|
+
}, this);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (value) {
|
|
274
|
+
let msg = message || MongooseError.messages.Date.min;
|
|
275
|
+
if (typeof msg === 'string') {
|
|
276
|
+
msg = msg.replace(/{MIN}/, (value === Date.now ? 'Date.now()' : value.toString()));
|
|
277
|
+
}
|
|
278
|
+
const _this = this;
|
|
279
|
+
this.validators.push({
|
|
280
|
+
validator: this.minValidator = function(val) {
|
|
281
|
+
let _value = value;
|
|
282
|
+
if (typeof value === 'function' && value !== Date.now) {
|
|
283
|
+
_value = _value.call(this);
|
|
284
|
+
}
|
|
285
|
+
const min = (_value === Date.now ? _value() : _this.cast(_value));
|
|
286
|
+
return val === null || val.valueOf() >= min.valueOf();
|
|
287
|
+
},
|
|
288
|
+
message: msg,
|
|
289
|
+
type: 'min',
|
|
290
|
+
min: value
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return this;
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Sets a maximum date validator.
|
|
299
|
+
*
|
|
300
|
+
* #### Example:
|
|
301
|
+
*
|
|
302
|
+
* const s = new Schema({ d: { type: Date, max: Date('2014-01-01') })
|
|
303
|
+
* const M = db.model('M', s)
|
|
304
|
+
* const m = new M({ d: Date('2014-12-08') })
|
|
305
|
+
* m.save(function (err) {
|
|
306
|
+
* console.error(err) // validator error
|
|
307
|
+
* m.d = Date('2013-12-31');
|
|
308
|
+
* m.save() // success
|
|
309
|
+
* })
|
|
310
|
+
*
|
|
311
|
+
* // custom error messages
|
|
312
|
+
* // We can also use the special {MAX} token which will be replaced with the invalid value
|
|
313
|
+
* const max = [Date('2014-01-01'), 'The value of path `{PATH}` ({VALUE}) exceeds the limit ({MAX}).'];
|
|
314
|
+
* const schema = new Schema({ d: { type: Date, max: max })
|
|
315
|
+
* const M = mongoose.model('M', schema);
|
|
316
|
+
* const s= new M({ d: Date('2014-12-08') });
|
|
317
|
+
* s.validate(function (err) {
|
|
318
|
+
* console.log(String(err)) // ValidationError: The value of path `d` (2014-12-08) exceeds the limit (2014-01-01).
|
|
319
|
+
* })
|
|
320
|
+
*
|
|
321
|
+
* @param {Date} maximum date
|
|
322
|
+
* @param {String} [message] optional custom error message
|
|
323
|
+
* @return {SchemaType} this
|
|
324
|
+
* @see Customized Error Messages https://mongoosejs.com/docs/api/error.html#Error.messages
|
|
325
|
+
* @api public
|
|
326
|
+
*/
|
|
327
|
+
|
|
328
|
+
SchemaDate.prototype.max = function(value, message) {
|
|
329
|
+
if (this.maxValidator) {
|
|
330
|
+
this.validators = this.validators.filter(function(v) {
|
|
331
|
+
return v.validator !== this.maxValidator;
|
|
332
|
+
}, this);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
if (value) {
|
|
336
|
+
let msg = message || MongooseError.messages.Date.max;
|
|
337
|
+
if (typeof msg === 'string') {
|
|
338
|
+
msg = msg.replace(/{MAX}/, (value === Date.now ? 'Date.now()' : value.toString()));
|
|
339
|
+
}
|
|
340
|
+
const _this = this;
|
|
341
|
+
this.validators.push({
|
|
342
|
+
validator: this.maxValidator = function(val) {
|
|
343
|
+
let _value = value;
|
|
344
|
+
if (typeof _value === 'function' && _value !== Date.now) {
|
|
345
|
+
_value = _value.call(this);
|
|
346
|
+
}
|
|
347
|
+
const max = (_value === Date.now ? _value() : _this.cast(_value));
|
|
348
|
+
return val === null || val.valueOf() <= max.valueOf();
|
|
349
|
+
},
|
|
350
|
+
message: msg,
|
|
351
|
+
type: 'max',
|
|
352
|
+
max: value
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return this;
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* Casts to date
|
|
361
|
+
*
|
|
362
|
+
* @param {Object} value to cast
|
|
363
|
+
* @api private
|
|
364
|
+
*/
|
|
365
|
+
|
|
366
|
+
SchemaDate.prototype.cast = function(value) {
|
|
367
|
+
let castDate;
|
|
368
|
+
if (typeof this._castFunction === 'function') {
|
|
369
|
+
castDate = this._castFunction;
|
|
370
|
+
} else if (typeof this.constructor.cast === 'function') {
|
|
371
|
+
castDate = this.constructor.cast();
|
|
372
|
+
} else {
|
|
373
|
+
castDate = SchemaDate.cast();
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
try {
|
|
377
|
+
return castDate(value);
|
|
378
|
+
} catch (error) {
|
|
379
|
+
throw new CastError('date', value, this.path, error, this);
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Date Query casting.
|
|
385
|
+
*
|
|
386
|
+
* @param {Any} val
|
|
387
|
+
* @api private
|
|
388
|
+
*/
|
|
389
|
+
|
|
390
|
+
function handleSingle(val) {
|
|
391
|
+
return this.cast(val);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
const $conditionalHandlers = {
|
|
395
|
+
...SchemaType.prototype.$conditionalHandlers,
|
|
396
|
+
$gt: handleSingle,
|
|
397
|
+
$gte: handleSingle,
|
|
398
|
+
$lt: handleSingle,
|
|
399
|
+
$lte: handleSingle
|
|
400
|
+
};
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* Contains the handlers for different query operators for this schema type.
|
|
404
|
+
* For example, `$conditionalHandlers.$gte` is the function Mongoose calls to cast `$gte` filter operators.
|
|
405
|
+
*
|
|
406
|
+
* @property $conditionalHandlers
|
|
407
|
+
* @memberOf SchemaDate
|
|
408
|
+
* @instance
|
|
409
|
+
* @api public
|
|
410
|
+
*/
|
|
411
|
+
|
|
412
|
+
Object.defineProperty(SchemaDate.prototype, '$conditionalHandlers', {
|
|
413
|
+
enumerable: false,
|
|
414
|
+
value: $conditionalHandlers
|
|
415
|
+
});
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* Casts contents for queries.
|
|
419
|
+
*
|
|
420
|
+
* @param {String} $conditional
|
|
421
|
+
* @param {any} [value]
|
|
422
|
+
* @api private
|
|
423
|
+
*/
|
|
424
|
+
|
|
425
|
+
SchemaDate.prototype.castForQuery = function($conditional, val, context) {
|
|
426
|
+
if ($conditional == null) {
|
|
427
|
+
try {
|
|
428
|
+
return this.applySetters(val, context);
|
|
429
|
+
} catch (err) {
|
|
430
|
+
if (err instanceof CastError && err.path === this.path && this.$fullPath != null) {
|
|
431
|
+
err.path = this.$fullPath;
|
|
432
|
+
}
|
|
433
|
+
throw err;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
const handler = this.$conditionalHandlers[$conditional];
|
|
438
|
+
|
|
439
|
+
if (!handler) {
|
|
440
|
+
throw new Error('Can\'t use ' + $conditional + ' with Date.');
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
return handler.call(this, val);
|
|
444
|
+
};
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* Returns this schema type's representation in a JSON schema.
|
|
448
|
+
*
|
|
449
|
+
* @param [options]
|
|
450
|
+
* @param [options.useBsonType=false] If true, return a representation with `bsonType` for use with MongoDB's `$jsonSchema`.
|
|
451
|
+
* @returns {Object} JSON schema properties
|
|
452
|
+
*/
|
|
453
|
+
|
|
454
|
+
SchemaDate.prototype.toJSONSchema = function toJSONSchema(options) {
|
|
455
|
+
const isRequired = this.options.required && typeof this.options.required !== 'function';
|
|
456
|
+
return createJSONSchemaTypeDefinition('string', 'date', options?.useBsonType, isRequired);
|
|
457
|
+
};
|
|
458
|
+
|
|
459
|
+
SchemaDate.prototype.autoEncryptionType = function autoEncryptionType() {
|
|
460
|
+
return 'date';
|
|
461
|
+
};
|
|
462
|
+
|
|
463
|
+
/*!
|
|
464
|
+
* Module exports.
|
|
465
|
+
*/
|
|
466
|
+
|
|
467
|
+
module.exports = SchemaDate;
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Module dependencies.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
const SchemaType = require('../schemaType');
|
|
8
|
+
const CastError = SchemaType.CastError;
|
|
9
|
+
const castDecimal128 = require('../cast/decimal128');
|
|
10
|
+
const createJSONSchemaTypeDefinition = require('../helpers/createJSONSchemaTypeDefinition');
|
|
11
|
+
const isBsonType = require('../helpers/isBsonType');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Decimal128 SchemaType constructor.
|
|
15
|
+
*
|
|
16
|
+
* @param {String} key
|
|
17
|
+
* @param {Object} options
|
|
18
|
+
* @param {Object} schemaOptions
|
|
19
|
+
* @param {Schema} parentSchema
|
|
20
|
+
* @inherits SchemaType
|
|
21
|
+
* @api public
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
function SchemaDecimal128(key, options, _schemaOptions, parentSchema) {
|
|
25
|
+
SchemaType.call(this, key, options, 'Decimal128', parentSchema);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* This schema type's name, to defend against minifiers that mangle
|
|
30
|
+
* function names.
|
|
31
|
+
*
|
|
32
|
+
* @api public
|
|
33
|
+
*/
|
|
34
|
+
SchemaDecimal128.schemaName = 'Decimal128';
|
|
35
|
+
|
|
36
|
+
SchemaDecimal128.defaultOptions = {};
|
|
37
|
+
|
|
38
|
+
/*!
|
|
39
|
+
* Inherits from SchemaType.
|
|
40
|
+
*/
|
|
41
|
+
SchemaDecimal128.prototype = Object.create(SchemaType.prototype);
|
|
42
|
+
SchemaDecimal128.prototype.constructor = SchemaDecimal128;
|
|
43
|
+
|
|
44
|
+
/*!
|
|
45
|
+
* ignore
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
SchemaDecimal128._cast = castDecimal128;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Sets a default option for all Decimal128 instances.
|
|
52
|
+
*
|
|
53
|
+
* #### Example:
|
|
54
|
+
*
|
|
55
|
+
* // Make all decimal 128s have `required` of true by default.
|
|
56
|
+
* mongoose.Schema.Types.Decimal128.set('required', true);
|
|
57
|
+
*
|
|
58
|
+
* const User = mongoose.model('User', new Schema({ test: mongoose.Decimal128 }));
|
|
59
|
+
* new User({ }).validateSync().errors.test.message; // Path `test` is required.
|
|
60
|
+
*
|
|
61
|
+
* @param {String} option The option you'd like to set the value for
|
|
62
|
+
* @param {Any} value value for option
|
|
63
|
+
* @return {undefined}
|
|
64
|
+
* @function set
|
|
65
|
+
* @static
|
|
66
|
+
* @api public
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
SchemaDecimal128.set = SchemaType.set;
|
|
70
|
+
|
|
71
|
+
SchemaDecimal128.setters = [];
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Attaches a getter for all Decimal128 instances
|
|
75
|
+
*
|
|
76
|
+
* #### Example:
|
|
77
|
+
*
|
|
78
|
+
* // Automatically convert Decimal128s to Numbers
|
|
79
|
+
* mongoose.Schema.Types.Decimal128.get(v => v == null ? v : Number(v));
|
|
80
|
+
*
|
|
81
|
+
* @param {Function} getter
|
|
82
|
+
* @return {this}
|
|
83
|
+
* @function get
|
|
84
|
+
* @static
|
|
85
|
+
* @api public
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
SchemaDecimal128.get = SchemaType.get;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Get/set the function used to cast arbitrary values to decimals.
|
|
92
|
+
*
|
|
93
|
+
* #### Example:
|
|
94
|
+
*
|
|
95
|
+
* // Make Mongoose only refuse to cast numbers as decimal128
|
|
96
|
+
* const original = mongoose.Schema.Types.Decimal128.cast();
|
|
97
|
+
* mongoose.Decimal128.cast(v => {
|
|
98
|
+
* assert.ok(typeof v !== 'number');
|
|
99
|
+
* return original(v);
|
|
100
|
+
* });
|
|
101
|
+
*
|
|
102
|
+
* // Or disable casting entirely
|
|
103
|
+
* mongoose.Decimal128.cast(false);
|
|
104
|
+
*
|
|
105
|
+
* @param {Function} [caster]
|
|
106
|
+
* @return {Function}
|
|
107
|
+
* @function get
|
|
108
|
+
* @static
|
|
109
|
+
* @api public
|
|
110
|
+
*/
|
|
111
|
+
|
|
112
|
+
SchemaDecimal128.cast = function cast(caster) {
|
|
113
|
+
if (arguments.length === 0) {
|
|
114
|
+
return this._cast;
|
|
115
|
+
}
|
|
116
|
+
if (caster === false) {
|
|
117
|
+
caster = this._defaultCaster;
|
|
118
|
+
}
|
|
119
|
+
this._cast = caster;
|
|
120
|
+
|
|
121
|
+
return this._cast;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
/*!
|
|
125
|
+
* ignore
|
|
126
|
+
*/
|
|
127
|
+
|
|
128
|
+
SchemaDecimal128._defaultCaster = v => {
|
|
129
|
+
if (v != null && !isBsonType(v, 'Decimal128')) {
|
|
130
|
+
throw new Error();
|
|
131
|
+
}
|
|
132
|
+
return v;
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
/*!
|
|
136
|
+
* ignore
|
|
137
|
+
*/
|
|
138
|
+
|
|
139
|
+
SchemaDecimal128._checkRequired = v => isBsonType(v, 'Decimal128');
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Override the function the required validator uses to check whether a string
|
|
143
|
+
* passes the `required` check.
|
|
144
|
+
*
|
|
145
|
+
* @param {Function} fn
|
|
146
|
+
* @return {Function}
|
|
147
|
+
* @function checkRequired
|
|
148
|
+
* @static
|
|
149
|
+
* @api public
|
|
150
|
+
*/
|
|
151
|
+
|
|
152
|
+
SchemaDecimal128.checkRequired = SchemaType.checkRequired;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Check if the given value satisfies a required validator.
|
|
156
|
+
*
|
|
157
|
+
* @param {Any} value
|
|
158
|
+
* @param {Document} doc
|
|
159
|
+
* @return {Boolean}
|
|
160
|
+
* @api public
|
|
161
|
+
*/
|
|
162
|
+
|
|
163
|
+
SchemaDecimal128.prototype.checkRequired = function checkRequired(value, doc) {
|
|
164
|
+
if (SchemaType._isRef(this, value, doc, true)) {
|
|
165
|
+
return !!value;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// `require('util').inherits()` does **not** copy static properties, and
|
|
169
|
+
// plugins like mongoose-float use `inherits()` for pre-ES6.
|
|
170
|
+
const _checkRequired = typeof this.constructor.checkRequired === 'function' ?
|
|
171
|
+
this.constructor.checkRequired() :
|
|
172
|
+
SchemaDecimal128.checkRequired();
|
|
173
|
+
|
|
174
|
+
return _checkRequired(value);
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Casts to Decimal128
|
|
179
|
+
*
|
|
180
|
+
* @param {Object} value
|
|
181
|
+
* @param {Object} doc
|
|
182
|
+
* @param {Boolean} init whether this is an initialization cast
|
|
183
|
+
* @api private
|
|
184
|
+
*/
|
|
185
|
+
|
|
186
|
+
SchemaDecimal128.prototype.cast = function(value, doc, init, prev, options) {
|
|
187
|
+
if (SchemaType._isRef(this, value, doc, init)) {
|
|
188
|
+
if (isBsonType(value, 'Decimal128')) {
|
|
189
|
+
return value;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return this._castRef(value, doc, init, options);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
let castDecimal128;
|
|
196
|
+
if (typeof this._castFunction === 'function') {
|
|
197
|
+
castDecimal128 = this._castFunction;
|
|
198
|
+
} else if (typeof this.constructor.cast === 'function') {
|
|
199
|
+
castDecimal128 = this.constructor.cast();
|
|
200
|
+
} else {
|
|
201
|
+
castDecimal128 = SchemaDecimal128.cast();
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
try {
|
|
205
|
+
return castDecimal128(value);
|
|
206
|
+
} catch (error) {
|
|
207
|
+
throw new CastError('Decimal128', value, this.path, error, this);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
/*!
|
|
212
|
+
* ignore
|
|
213
|
+
*/
|
|
214
|
+
|
|
215
|
+
function handleSingle(val) {
|
|
216
|
+
return this.cast(val);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const $conditionalHandlers = {
|
|
220
|
+
...SchemaType.prototype.$conditionalHandlers,
|
|
221
|
+
$gt: handleSingle,
|
|
222
|
+
$gte: handleSingle,
|
|
223
|
+
$lt: handleSingle,
|
|
224
|
+
$lte: handleSingle
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Contains the handlers for different query operators for this schema type.
|
|
229
|
+
* For example, `$conditionalHandlers.$lte` is the function Mongoose calls to cast `$lte` filter operators.
|
|
230
|
+
*
|
|
231
|
+
* @property $conditionalHandlers
|
|
232
|
+
* @memberOf SchemaDecimal128
|
|
233
|
+
* @instance
|
|
234
|
+
* @api public
|
|
235
|
+
*/
|
|
236
|
+
|
|
237
|
+
Object.defineProperty(SchemaDecimal128.prototype, '$conditionalHandlers', {
|
|
238
|
+
enumerable: false,
|
|
239
|
+
value: $conditionalHandlers
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Returns this schema type's representation in a JSON schema.
|
|
244
|
+
*
|
|
245
|
+
* @param [options]
|
|
246
|
+
* @param [options.useBsonType=false] If true, return a representation with `bsonType` for use with MongoDB's `$jsonSchema`.
|
|
247
|
+
* @returns {Object} JSON schema properties
|
|
248
|
+
*/
|
|
249
|
+
|
|
250
|
+
SchemaDecimal128.prototype.toJSONSchema = function toJSONSchema(options) {
|
|
251
|
+
const isRequired = this.options.required && typeof this.options.required !== 'function';
|
|
252
|
+
return createJSONSchemaTypeDefinition('string', 'decimal', options?.useBsonType, isRequired);
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
SchemaDecimal128.prototype.autoEncryptionType = function autoEncryptionType() {
|
|
256
|
+
return 'decimal';
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
/*!
|
|
260
|
+
* Module exports.
|
|
261
|
+
*/
|
|
262
|
+
|
|
263
|
+
module.exports = SchemaDecimal128;
|