@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.
Files changed (295) hide show
  1. package/LICENSE.md +22 -0
  2. package/README.md +397 -0
  3. package/SECURITY.md +1 -0
  4. package/eslint.config.mjs +198 -0
  5. package/index.js +64 -0
  6. package/lib/aggregate.js +1189 -0
  7. package/lib/cast/bigint.js +46 -0
  8. package/lib/cast/boolean.js +32 -0
  9. package/lib/cast/date.js +41 -0
  10. package/lib/cast/decimal128.js +39 -0
  11. package/lib/cast/double.js +50 -0
  12. package/lib/cast/int32.js +36 -0
  13. package/lib/cast/number.js +42 -0
  14. package/lib/cast/objectid.js +29 -0
  15. package/lib/cast/string.js +37 -0
  16. package/lib/cast/uuid.js +35 -0
  17. package/lib/cast.js +436 -0
  18. package/lib/collection.js +321 -0
  19. package/lib/connection.js +1855 -0
  20. package/lib/connectionState.js +26 -0
  21. package/lib/constants.js +73 -0
  22. package/lib/cursor/aggregationCursor.js +466 -0
  23. package/lib/cursor/changeStream.js +198 -0
  24. package/lib/cursor/queryCursor.js +622 -0
  25. package/lib/document.js +5521 -0
  26. package/lib/driver.js +15 -0
  27. package/lib/drivers/SPEC.md +4 -0
  28. package/lib/drivers/node-mongodb-native/bulkWriteResult.js +5 -0
  29. package/lib/drivers/node-mongodb-native/collection.js +393 -0
  30. package/lib/drivers/node-mongodb-native/connection.js +506 -0
  31. package/lib/drivers/node-mongodb-native/index.js +10 -0
  32. package/lib/error/browserMissingSchema.js +29 -0
  33. package/lib/error/bulkSaveIncompleteError.js +44 -0
  34. package/lib/error/bulkWriteError.js +41 -0
  35. package/lib/error/cast.js +158 -0
  36. package/lib/error/createCollectionsError.js +26 -0
  37. package/lib/error/divergentArray.js +40 -0
  38. package/lib/error/eachAsyncMultiError.js +41 -0
  39. package/lib/error/index.js +237 -0
  40. package/lib/error/invalidSchemaOption.js +32 -0
  41. package/lib/error/messages.js +47 -0
  42. package/lib/error/missingSchema.js +33 -0
  43. package/lib/error/mongooseError.js +13 -0
  44. package/lib/error/notFound.js +47 -0
  45. package/lib/error/objectExpected.js +31 -0
  46. package/lib/error/objectParameter.js +31 -0
  47. package/lib/error/overwriteModel.js +31 -0
  48. package/lib/error/parallelSave.js +33 -0
  49. package/lib/error/parallelValidate.js +33 -0
  50. package/lib/error/serverSelection.js +62 -0
  51. package/lib/error/setOptionError.js +103 -0
  52. package/lib/error/strict.js +35 -0
  53. package/lib/error/strictPopulate.js +31 -0
  54. package/lib/error/syncIndexes.js +30 -0
  55. package/lib/error/validation.js +97 -0
  56. package/lib/error/validator.js +100 -0
  57. package/lib/error/version.js +38 -0
  58. package/lib/helpers/aggregate/prepareDiscriminatorPipeline.js +39 -0
  59. package/lib/helpers/aggregate/stringifyFunctionOperators.js +50 -0
  60. package/lib/helpers/arrayDepth.js +33 -0
  61. package/lib/helpers/clone.js +204 -0
  62. package/lib/helpers/common.js +127 -0
  63. package/lib/helpers/createJSONSchemaTypeDefinition.js +24 -0
  64. package/lib/helpers/cursor/eachAsync.js +225 -0
  65. package/lib/helpers/discriminator/applyEmbeddedDiscriminators.js +36 -0
  66. package/lib/helpers/discriminator/areDiscriminatorValuesEqual.js +16 -0
  67. package/lib/helpers/discriminator/checkEmbeddedDiscriminatorKeyProjection.js +12 -0
  68. package/lib/helpers/discriminator/getConstructor.js +29 -0
  69. package/lib/helpers/discriminator/getDiscriminatorByValue.js +28 -0
  70. package/lib/helpers/discriminator/getSchemaDiscriminatorByValue.js +27 -0
  71. package/lib/helpers/discriminator/mergeDiscriminatorSchema.js +91 -0
  72. package/lib/helpers/document/applyDefaults.js +132 -0
  73. package/lib/helpers/document/applyTimestamps.js +106 -0
  74. package/lib/helpers/document/applyVirtuals.js +147 -0
  75. package/lib/helpers/document/cleanModifiedSubpaths.js +45 -0
  76. package/lib/helpers/document/compile.js +238 -0
  77. package/lib/helpers/document/getDeepestSubdocumentForPath.js +38 -0
  78. package/lib/helpers/document/getEmbeddedDiscriminatorPath.js +53 -0
  79. package/lib/helpers/document/handleSpreadDoc.js +35 -0
  80. package/lib/helpers/each.js +25 -0
  81. package/lib/helpers/error/combinePathErrors.js +22 -0
  82. package/lib/helpers/firstKey.js +8 -0
  83. package/lib/helpers/get.js +65 -0
  84. package/lib/helpers/getConstructorName.js +16 -0
  85. package/lib/helpers/getDefaultBulkwriteResult.js +18 -0
  86. package/lib/helpers/getFunctionName.js +10 -0
  87. package/lib/helpers/immediate.js +16 -0
  88. package/lib/helpers/indexes/applySchemaCollation.js +13 -0
  89. package/lib/helpers/indexes/decorateDiscriminatorIndexOptions.js +14 -0
  90. package/lib/helpers/indexes/getRelatedIndexes.js +63 -0
  91. package/lib/helpers/indexes/isDefaultIdIndex.js +18 -0
  92. package/lib/helpers/indexes/isIndexEqual.js +95 -0
  93. package/lib/helpers/indexes/isIndexSpecEqual.js +32 -0
  94. package/lib/helpers/indexes/isTextIndex.js +16 -0
  95. package/lib/helpers/indexes/isTimeseriesIndex.js +16 -0
  96. package/lib/helpers/isAsyncFunction.js +9 -0
  97. package/lib/helpers/isBsonType.js +15 -0
  98. package/lib/helpers/isMongooseObject.js +22 -0
  99. package/lib/helpers/isObject.js +16 -0
  100. package/lib/helpers/isPOJO.js +12 -0
  101. package/lib/helpers/isPromise.js +6 -0
  102. package/lib/helpers/isSimpleValidator.js +22 -0
  103. package/lib/helpers/minimize.js +41 -0
  104. package/lib/helpers/model/applyDefaultsToPOJO.js +52 -0
  105. package/lib/helpers/model/applyHooks.js +140 -0
  106. package/lib/helpers/model/applyMethods.js +70 -0
  107. package/lib/helpers/model/applyStaticHooks.js +33 -0
  108. package/lib/helpers/model/applyStatics.js +13 -0
  109. package/lib/helpers/model/castBulkWrite.js +316 -0
  110. package/lib/helpers/model/decorateBulkWriteResult.js +8 -0
  111. package/lib/helpers/model/discriminator.js +265 -0
  112. package/lib/helpers/model/pushNestedArrayPaths.js +15 -0
  113. package/lib/helpers/omitUndefined.js +20 -0
  114. package/lib/helpers/once.js +12 -0
  115. package/lib/helpers/parallelLimit.js +37 -0
  116. package/lib/helpers/path/parentPaths.js +18 -0
  117. package/lib/helpers/path/setDottedPath.js +33 -0
  118. package/lib/helpers/pluralize.js +95 -0
  119. package/lib/helpers/populate/assignRawDocsToIdStructure.js +129 -0
  120. package/lib/helpers/populate/assignVals.js +360 -0
  121. package/lib/helpers/populate/createPopulateQueryFilter.js +97 -0
  122. package/lib/helpers/populate/getModelsMapForPopulate.js +776 -0
  123. package/lib/helpers/populate/getSchemaTypes.js +228 -0
  124. package/lib/helpers/populate/getVirtual.js +103 -0
  125. package/lib/helpers/populate/leanPopulateMap.js +7 -0
  126. package/lib/helpers/populate/lookupLocalFields.js +40 -0
  127. package/lib/helpers/populate/markArraySubdocsPopulated.js +49 -0
  128. package/lib/helpers/populate/modelNamesFromRefPath.js +66 -0
  129. package/lib/helpers/populate/removeDeselectedForeignField.js +31 -0
  130. package/lib/helpers/populate/setPopulatedVirtualValue.js +33 -0
  131. package/lib/helpers/populate/skipPopulateValue.js +10 -0
  132. package/lib/helpers/populate/validateRef.js +19 -0
  133. package/lib/helpers/printJestWarning.js +21 -0
  134. package/lib/helpers/processConnectionOptions.js +65 -0
  135. package/lib/helpers/projection/applyProjection.js +83 -0
  136. package/lib/helpers/projection/hasIncludedChildren.js +41 -0
  137. package/lib/helpers/projection/isDefiningProjection.js +18 -0
  138. package/lib/helpers/projection/isExclusive.js +37 -0
  139. package/lib/helpers/projection/isInclusive.js +39 -0
  140. package/lib/helpers/projection/isNestedProjection.js +8 -0
  141. package/lib/helpers/projection/isPathExcluded.js +40 -0
  142. package/lib/helpers/projection/isPathSelectedInclusive.js +28 -0
  143. package/lib/helpers/projection/isSubpath.js +14 -0
  144. package/lib/helpers/projection/parseProjection.js +33 -0
  145. package/lib/helpers/query/applyGlobalOption.js +29 -0
  146. package/lib/helpers/query/cast$expr.js +287 -0
  147. package/lib/helpers/query/castFilterPath.js +54 -0
  148. package/lib/helpers/query/castUpdate.js +643 -0
  149. package/lib/helpers/query/getEmbeddedDiscriminatorPath.js +103 -0
  150. package/lib/helpers/query/handleImmutable.js +44 -0
  151. package/lib/helpers/query/handleReadPreferenceAliases.js +23 -0
  152. package/lib/helpers/query/hasDollarKeys.js +23 -0
  153. package/lib/helpers/query/isOperator.js +14 -0
  154. package/lib/helpers/query/sanitizeFilter.js +38 -0
  155. package/lib/helpers/query/sanitizeProjection.js +14 -0
  156. package/lib/helpers/query/selectPopulatedFields.js +62 -0
  157. package/lib/helpers/query/trusted.js +13 -0
  158. package/lib/helpers/query/validOps.js +3 -0
  159. package/lib/helpers/schema/addAutoId.js +7 -0
  160. package/lib/helpers/schema/applyBuiltinPlugins.js +12 -0
  161. package/lib/helpers/schema/applyPlugins.js +55 -0
  162. package/lib/helpers/schema/applyReadConcern.js +20 -0
  163. package/lib/helpers/schema/applyWriteConcern.js +39 -0
  164. package/lib/helpers/schema/cleanPositionalOperators.js +12 -0
  165. package/lib/helpers/schema/getIndexes.js +171 -0
  166. package/lib/helpers/schema/getKeysInSchemaOrder.js +28 -0
  167. package/lib/helpers/schema/getPath.js +43 -0
  168. package/lib/helpers/schema/getSubdocumentStrictValue.js +32 -0
  169. package/lib/helpers/schema/handleIdOption.js +20 -0
  170. package/lib/helpers/schema/handleTimestampOption.js +24 -0
  171. package/lib/helpers/schema/idGetter.js +34 -0
  172. package/lib/helpers/schema/merge.js +36 -0
  173. package/lib/helpers/schematype/handleImmutable.js +50 -0
  174. package/lib/helpers/setDefaultsOnInsert.js +158 -0
  175. package/lib/helpers/specialProperties.js +3 -0
  176. package/lib/helpers/symbols.js +20 -0
  177. package/lib/helpers/timers.js +3 -0
  178. package/lib/helpers/timestamps/setDocumentTimestamps.js +26 -0
  179. package/lib/helpers/timestamps/setupTimestamps.js +116 -0
  180. package/lib/helpers/topology/allServersUnknown.js +12 -0
  181. package/lib/helpers/topology/isAtlas.js +31 -0
  182. package/lib/helpers/topology/isSSLError.js +16 -0
  183. package/lib/helpers/update/applyTimestampsToChildren.js +193 -0
  184. package/lib/helpers/update/applyTimestampsToUpdate.js +131 -0
  185. package/lib/helpers/update/castArrayFilters.js +113 -0
  186. package/lib/helpers/update/decorateUpdateWithVersionKey.js +35 -0
  187. package/lib/helpers/update/modifiedPaths.js +33 -0
  188. package/lib/helpers/update/moveImmutableProperties.js +53 -0
  189. package/lib/helpers/update/removeUnusedArrayFilters.js +32 -0
  190. package/lib/helpers/update/updatedPathsByArrayFilter.js +27 -0
  191. package/lib/helpers/updateValidators.js +193 -0
  192. package/lib/index.js +17 -0
  193. package/lib/internal.js +46 -0
  194. package/lib/model.js +5010 -0
  195. package/lib/modifiedPathsSnapshot.js +9 -0
  196. package/lib/mongoose.js +1411 -0
  197. package/lib/options/populateOptions.js +36 -0
  198. package/lib/options/propertyOptions.js +8 -0
  199. package/lib/options/saveOptions.js +16 -0
  200. package/lib/options/schemaArrayOptions.js +78 -0
  201. package/lib/options/schemaBufferOptions.js +38 -0
  202. package/lib/options/schemaDateOptions.js +71 -0
  203. package/lib/options/schemaDocumentArrayOptions.js +68 -0
  204. package/lib/options/schemaMapOptions.js +43 -0
  205. package/lib/options/schemaNumberOptions.js +101 -0
  206. package/lib/options/schemaObjectIdOptions.js +64 -0
  207. package/lib/options/schemaStringOptions.js +138 -0
  208. package/lib/options/schemaSubdocumentOptions.js +66 -0
  209. package/lib/options/schemaTypeOptions.js +244 -0
  210. package/lib/options/schemaUnionOptions.js +32 -0
  211. package/lib/options/virtualOptions.js +164 -0
  212. package/lib/options.js +17 -0
  213. package/lib/plugins/index.js +6 -0
  214. package/lib/plugins/saveSubdocs.js +76 -0
  215. package/lib/plugins/sharding.js +84 -0
  216. package/lib/plugins/trackTransaction.js +84 -0
  217. package/lib/plugins/validateBeforeSave.js +41 -0
  218. package/lib/query.js +5673 -0
  219. package/lib/queryHelpers.js +387 -0
  220. package/lib/schema/array.js +699 -0
  221. package/lib/schema/bigint.js +282 -0
  222. package/lib/schema/boolean.js +332 -0
  223. package/lib/schema/buffer.js +343 -0
  224. package/lib/schema/date.js +467 -0
  225. package/lib/schema/decimal128.js +263 -0
  226. package/lib/schema/documentArray.js +656 -0
  227. package/lib/schema/documentArrayElement.js +137 -0
  228. package/lib/schema/double.js +246 -0
  229. package/lib/schema/index.js +32 -0
  230. package/lib/schema/int32.js +289 -0
  231. package/lib/schema/map.js +201 -0
  232. package/lib/schema/mixed.js +146 -0
  233. package/lib/schema/number.js +510 -0
  234. package/lib/schema/objectId.js +333 -0
  235. package/lib/schema/operators/bitwise.js +38 -0
  236. package/lib/schema/operators/exists.js +12 -0
  237. package/lib/schema/operators/geospatial.js +107 -0
  238. package/lib/schema/operators/helpers.js +32 -0
  239. package/lib/schema/operators/text.js +39 -0
  240. package/lib/schema/operators/type.js +20 -0
  241. package/lib/schema/string.js +733 -0
  242. package/lib/schema/subdocument.js +436 -0
  243. package/lib/schema/symbols.js +5 -0
  244. package/lib/schema/union.js +113 -0
  245. package/lib/schema/uuid.js +305 -0
  246. package/lib/schema.js +3226 -0
  247. package/lib/schemaType.js +1835 -0
  248. package/lib/stateMachine.js +232 -0
  249. package/lib/types/array/index.js +119 -0
  250. package/lib/types/array/isMongooseArray.js +5 -0
  251. package/lib/types/array/methods/index.js +1095 -0
  252. package/lib/types/arraySubdocument.js +207 -0
  253. package/lib/types/buffer.js +294 -0
  254. package/lib/types/decimal128.js +13 -0
  255. package/lib/types/documentArray/index.js +113 -0
  256. package/lib/types/documentArray/isMongooseDocumentArray.js +5 -0
  257. package/lib/types/documentArray/methods/index.js +415 -0
  258. package/lib/types/double.js +13 -0
  259. package/lib/types/index.js +23 -0
  260. package/lib/types/map.js +419 -0
  261. package/lib/types/objectid.js +41 -0
  262. package/lib/types/subdocument.js +464 -0
  263. package/lib/types/uuid.js +13 -0
  264. package/lib/utils.js +1054 -0
  265. package/lib/validOptions.js +42 -0
  266. package/lib/virtualType.js +204 -0
  267. package/package.json +148 -0
  268. package/types/aggregate.d.ts +180 -0
  269. package/types/augmentations.d.ts +9 -0
  270. package/types/callback.d.ts +8 -0
  271. package/types/collection.d.ts +49 -0
  272. package/types/connection.d.ts +297 -0
  273. package/types/cursor.d.ts +67 -0
  274. package/types/document.d.ts +374 -0
  275. package/types/error.d.ts +143 -0
  276. package/types/expressions.d.ts +3053 -0
  277. package/types/helpers.d.ts +32 -0
  278. package/types/index.d.ts +1056 -0
  279. package/types/indexes.d.ts +97 -0
  280. package/types/inferhydrateddoctype.d.ts +115 -0
  281. package/types/inferrawdoctype.d.ts +135 -0
  282. package/types/inferschematype.d.ts +337 -0
  283. package/types/middlewares.d.ts +59 -0
  284. package/types/models.d.ts +1306 -0
  285. package/types/mongooseoptions.d.ts +228 -0
  286. package/types/pipelinestage.d.ts +333 -0
  287. package/types/populate.d.ts +53 -0
  288. package/types/query.d.ts +934 -0
  289. package/types/schemaoptions.d.ts +282 -0
  290. package/types/schematypes.d.ts +654 -0
  291. package/types/session.d.ts +32 -0
  292. package/types/types.d.ts +109 -0
  293. package/types/utility.d.ts +175 -0
  294. package/types/validation.d.ts +39 -0
  295. package/types/virtuals.d.ts +14 -0
@@ -0,0 +1,305 @@
1
+ /*!
2
+ * Module dependencies.
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const SchemaType = require('../schemaType');
8
+ const CastError = SchemaType.CastError;
9
+ const castUUID = require('../cast/uuid');
10
+ const createJSONSchemaTypeDefinition = require('../helpers/createJSONSchemaTypeDefinition');
11
+ const utils = require('../utils');
12
+ const handleBitwiseOperator = require('./operators/bitwise');
13
+
14
+ const UUID_FORMAT = castUUID.UUID_FORMAT;
15
+
16
+ /**
17
+ * Convert binary to a uuid string
18
+ * @param {Buffer|Binary|String} uuidBin The value to process
19
+ * @returns {String} The completed uuid-string
20
+ * @api private
21
+ */
22
+ function binaryToString(uuidBin) {
23
+ // i(hasezoey) dont quite know why, but "uuidBin" may sometimes also be the already processed string
24
+ let hex;
25
+ if (typeof uuidBin !== 'string' && uuidBin != null) {
26
+ hex = uuidBin.toString('hex');
27
+ const uuidStr = hex.substring(0, 8) + '-' + hex.substring(8, 8 + 4) + '-' + hex.substring(12, 12 + 4) + '-' + hex.substring(16, 16 + 4) + '-' + hex.substring(20, 20 + 12);
28
+ return uuidStr;
29
+ }
30
+ return uuidBin;
31
+ }
32
+
33
+ /**
34
+ * UUIDv1 SchemaType constructor.
35
+ *
36
+ * @param {String} key
37
+ * @param {Object} options
38
+ * @param {Object} _schemaOptions
39
+ * @param {Schema} parentSchema
40
+ * @inherits SchemaType
41
+ * @api public
42
+ */
43
+
44
+ function SchemaUUID(key, options, _schemaOptions, parentSchema) {
45
+ SchemaType.call(this, key, options, 'UUID', parentSchema);
46
+ }
47
+
48
+ /**
49
+ * This schema type's name, to defend against minifiers that mangle
50
+ * function names.
51
+ *
52
+ * @api public
53
+ */
54
+ SchemaUUID.schemaName = 'UUID';
55
+
56
+ SchemaUUID.defaultOptions = {};
57
+
58
+ /*!
59
+ * Inherits from SchemaType.
60
+ */
61
+ SchemaUUID.prototype = Object.create(SchemaType.prototype);
62
+ SchemaUUID.prototype.constructor = SchemaUUID;
63
+
64
+ /*!
65
+ * ignore
66
+ */
67
+
68
+ SchemaUUID._cast = castUUID;
69
+
70
+ /**
71
+ * Attaches a getter for all UUID instances.
72
+ *
73
+ * #### Example:
74
+ *
75
+ * // Note that `v` is a string by default
76
+ * mongoose.Schema.UUID.get(v => v.toUpperCase());
77
+ *
78
+ * const Model = mongoose.model('Test', new Schema({ test: 'UUID' }));
79
+ * new Model({ test: uuid.v4() }).test; // UUID with all uppercase
80
+ *
81
+ * @param {Function} getter
82
+ * @return {this}
83
+ * @function get
84
+ * @static
85
+ * @api public
86
+ */
87
+
88
+ SchemaUUID.get = SchemaType.get;
89
+
90
+ /**
91
+ * Sets a default option for all UUID instances.
92
+ *
93
+ * #### Example:
94
+ *
95
+ * // Make all UUIDs have `required` of true by default.
96
+ * mongoose.Schema.UUID.set('required', true);
97
+ *
98
+ * const User = mongoose.model('User', new Schema({ test: mongoose.UUID }));
99
+ * new User({ }).validateSync().errors.test.message; // Path `test` is required.
100
+ *
101
+ * @param {String} option The option you'd like to set the value for
102
+ * @param {Any} value value for option
103
+ * @return {undefined}
104
+ * @function set
105
+ * @static
106
+ * @api public
107
+ */
108
+
109
+ SchemaUUID.set = SchemaType.set;
110
+
111
+ SchemaUUID.setters = [];
112
+
113
+ /**
114
+ * Get/set the function used to cast arbitrary values to UUIDs.
115
+ *
116
+ * #### Example:
117
+ *
118
+ * // Make Mongoose refuse to cast UUIDs with 0 length
119
+ * const original = mongoose.Schema.Types.UUID.cast();
120
+ * mongoose.UUID.cast(v => {
121
+ * assert.ok(typeof v === "string" && v.length > 0);
122
+ * return original(v);
123
+ * });
124
+ *
125
+ * // Or disable casting entirely
126
+ * mongoose.UUID.cast(false);
127
+ *
128
+ * @param {Function} [caster]
129
+ * @return {Function}
130
+ * @function get
131
+ * @static
132
+ * @api public
133
+ */
134
+
135
+ SchemaUUID.cast = function cast(caster) {
136
+ if (arguments.length === 0) {
137
+ return this._cast;
138
+ }
139
+ if (caster === false) {
140
+ caster = this._defaultCaster;
141
+ }
142
+ this._cast = caster;
143
+
144
+ return this._cast;
145
+ };
146
+
147
+ /*!
148
+ * ignore
149
+ */
150
+
151
+ SchemaUUID._checkRequired = v => v != null;
152
+
153
+ /**
154
+ * Override the function the required validator uses to check whether a string
155
+ * passes the `required` check.
156
+ *
157
+ * @param {Function} fn
158
+ * @return {Function}
159
+ * @function checkRequired
160
+ * @static
161
+ * @api public
162
+ */
163
+
164
+ SchemaUUID.checkRequired = SchemaType.checkRequired;
165
+
166
+ /**
167
+ * Check if the given value satisfies a required validator.
168
+ *
169
+ * @param {Any} value
170
+ * @return {Boolean}
171
+ * @api public
172
+ */
173
+
174
+ SchemaUUID.prototype.checkRequired = function checkRequired(value) {
175
+ if (Buffer.isBuffer(value)) {
176
+ value = binaryToString(value);
177
+ }
178
+ return value != null && UUID_FORMAT.test(value);
179
+ };
180
+
181
+ /**
182
+ * Casts to UUID
183
+ *
184
+ * @param {Object} value
185
+ * @param {Object} doc
186
+ * @param {Boolean} init whether this is an initialization cast
187
+ * @api private
188
+ */
189
+
190
+ SchemaUUID.prototype.cast = function(value, doc, init, prev, options) {
191
+ if (utils.isNonBuiltinObject(value) &&
192
+ SchemaType._isRef(this, value, doc, init)) {
193
+ return this._castRef(value, doc, init, options);
194
+ }
195
+
196
+ let castFn;
197
+ if (typeof this._castFunction === 'function') {
198
+ castFn = this._castFunction;
199
+ } else if (typeof this.constructor.cast === 'function') {
200
+ castFn = this.constructor.cast();
201
+ } else {
202
+ castFn = SchemaUUID.cast();
203
+ }
204
+
205
+ try {
206
+ return castFn(value);
207
+ } catch (error) {
208
+ throw new CastError(SchemaUUID.schemaName, value, this.path, error, this);
209
+ }
210
+ };
211
+
212
+ /*!
213
+ * ignore
214
+ */
215
+
216
+ function handleSingle(val) {
217
+ return this.cast(val);
218
+ }
219
+
220
+ /*!
221
+ * ignore
222
+ */
223
+
224
+ function handleArray(val) {
225
+ return val.map((m) => {
226
+ return this.cast(m);
227
+ });
228
+ }
229
+
230
+ const $conditionalHandlers = {
231
+ ...SchemaType.prototype.$conditionalHandlers,
232
+ $bitsAllClear: handleBitwiseOperator,
233
+ $bitsAnyClear: handleBitwiseOperator,
234
+ $bitsAllSet: handleBitwiseOperator,
235
+ $bitsAnySet: handleBitwiseOperator,
236
+ $all: handleArray,
237
+ $in: handleArray,
238
+ $ne: handleSingle,
239
+ $nin: handleArray
240
+ };
241
+
242
+ /**
243
+ * Contains the handlers for different query operators for this schema type.
244
+ * For example, `$conditionalHandlers.$exists` is the function Mongoose calls to cast `$exists` filter operators.
245
+ *
246
+ * @property $conditionalHandlers
247
+ * @memberOf SchemaUUID
248
+ * @instance
249
+ * @api public
250
+ */
251
+
252
+ Object.defineProperty(SchemaUUID.prototype, '$conditionalHandlers', {
253
+ enumerable: false,
254
+ value: $conditionalHandlers
255
+ });
256
+
257
+ /**
258
+ * Casts contents for queries.
259
+ *
260
+ * @param {String} $conditional
261
+ * @param {any} val
262
+ * @api private
263
+ */
264
+
265
+ SchemaUUID.prototype.castForQuery = function($conditional, val, context) {
266
+ let handler;
267
+ if ($conditional != null) {
268
+ handler = this.$conditionalHandlers[$conditional];
269
+ if (!handler)
270
+ throw new Error('Can\'t use ' + $conditional + ' with UUID.');
271
+ return handler.call(this, val, context);
272
+ }
273
+
274
+ try {
275
+ return this.applySetters(val, context);
276
+ } catch (err) {
277
+ if (err instanceof CastError && err.path === this.path && this.$fullPath != null) {
278
+ err.path = this.$fullPath;
279
+ }
280
+ throw err;
281
+ }
282
+ };
283
+
284
+ /**
285
+ * Returns this schema type's representation in a JSON schema.
286
+ *
287
+ * @param [options]
288
+ * @param [options.useBsonType=false] If true, return a representation with `bsonType` for use with MongoDB's `$jsonSchema`.
289
+ * @returns {Object} JSON schema properties
290
+ */
291
+
292
+ SchemaUUID.prototype.toJSONSchema = function toJSONSchema(options) {
293
+ const isRequired = this.options.required && typeof this.options.required !== 'function';
294
+ return createJSONSchemaTypeDefinition('string', 'binData', options?.useBsonType, isRequired);
295
+ };
296
+
297
+ SchemaUUID.prototype.autoEncryptionType = function autoEncryptionType() {
298
+ return 'binData';
299
+ };
300
+
301
+ /*!
302
+ * Module exports.
303
+ */
304
+
305
+ module.exports = SchemaUUID;