@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,333 @@
1
+ /*!
2
+ * Module dependencies.
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const SchemaObjectIdOptions = require('../options/schemaObjectIdOptions');
8
+ const SchemaType = require('../schemaType');
9
+ const castObjectId = require('../cast/objectid');
10
+ const createJSONSchemaTypeDefinition = require('../helpers/createJSONSchemaTypeDefinition');
11
+ const getConstructorName = require('../helpers/getConstructorName');
12
+ const oid = require('../types/objectid');
13
+ const isBsonType = require('../helpers/isBsonType');
14
+ const utils = require('../utils');
15
+
16
+ const CastError = SchemaType.CastError;
17
+ let Document;
18
+
19
+ /**
20
+ * ObjectId SchemaType constructor.
21
+ *
22
+ * @param {String} key
23
+ * @param {Object} options
24
+ * @param {Object} schemaOptions
25
+ * @param {Schema} parentSchema
26
+ * @inherits SchemaType
27
+ * @api public
28
+ */
29
+
30
+ function SchemaObjectId(key, options, _schemaOptions, parentSchema) {
31
+ const isKeyHexStr = typeof key === 'string' && key.length === 24 && /^[a-f0-9]+$/i.test(key);
32
+ const suppressWarning = options?.suppressWarning;
33
+ if ((isKeyHexStr || typeof key === 'undefined') && !suppressWarning) {
34
+ utils.warn('mongoose: To create a new ObjectId please try ' +
35
+ '`Mongoose.Types.ObjectId` instead of using ' +
36
+ '`Mongoose.Schema.Types.ObjectId`. Set the `suppressWarning` option if ' +
37
+ 'you\'re trying to create a hex char path in your schema.');
38
+ }
39
+ SchemaType.call(this, key, options, 'ObjectId', parentSchema);
40
+ }
41
+
42
+ /**
43
+ * This schema type's name, to defend against minifiers that mangle
44
+ * function names.
45
+ *
46
+ * @api public
47
+ */
48
+ SchemaObjectId.schemaName = 'ObjectId';
49
+
50
+ SchemaObjectId.defaultOptions = {};
51
+
52
+ /*!
53
+ * Inherits from SchemaType.
54
+ */
55
+ SchemaObjectId.prototype = Object.create(SchemaType.prototype);
56
+ SchemaObjectId.prototype.constructor = SchemaObjectId;
57
+ SchemaObjectId.prototype.OptionsConstructor = SchemaObjectIdOptions;
58
+
59
+ /**
60
+ * Attaches a getter for all ObjectId instances
61
+ *
62
+ * #### Example:
63
+ *
64
+ * // Always convert to string when getting an ObjectId
65
+ * mongoose.ObjectId.get(v => v.toString());
66
+ *
67
+ * const Model = mongoose.model('Test', new Schema({}));
68
+ * typeof (new Model({})._id); // 'string'
69
+ *
70
+ * @param {Function} getter
71
+ * @return {this}
72
+ * @function get
73
+ * @static
74
+ * @api public
75
+ */
76
+
77
+ SchemaObjectId.get = SchemaType.get;
78
+
79
+ /**
80
+ * Sets a default option for all ObjectId instances.
81
+ *
82
+ * #### Example:
83
+ *
84
+ * // Make all object ids have option `required` equal to true.
85
+ * mongoose.Schema.Types.ObjectId.set('required', true);
86
+ *
87
+ * const Order = mongoose.model('Order', new Schema({ userId: ObjectId }));
88
+ * new Order({ }).validateSync().errors.userId.message; // Path `userId` is required.
89
+ *
90
+ * @param {String} option The option you'd like to set the value for
91
+ * @param {Any} value value for option
92
+ * @return {undefined}
93
+ * @function set
94
+ * @static
95
+ * @api public
96
+ */
97
+
98
+ SchemaObjectId.set = SchemaType.set;
99
+
100
+ SchemaObjectId.setters = [];
101
+
102
+ /**
103
+ * Adds an auto-generated ObjectId default if turnOn is true.
104
+ * @param {Boolean} turnOn auto generated ObjectId defaults
105
+ * @api public
106
+ * @return {SchemaType} this
107
+ */
108
+
109
+ SchemaObjectId.prototype.auto = function(turnOn) {
110
+ if (turnOn) {
111
+ this.default(defaultId);
112
+ this.set(resetId);
113
+ }
114
+
115
+ return this;
116
+ };
117
+
118
+ /*!
119
+ * ignore
120
+ */
121
+
122
+ SchemaObjectId._checkRequired = v => isBsonType(v, 'ObjectId');
123
+
124
+ /*!
125
+ * ignore
126
+ */
127
+
128
+ SchemaObjectId._cast = castObjectId;
129
+
130
+ /**
131
+ * Get/set the function used to cast arbitrary values to objectids.
132
+ *
133
+ * #### Example:
134
+ *
135
+ * // Make Mongoose only try to cast length 24 strings. By default, any 12
136
+ * // char string is a valid ObjectId.
137
+ * const original = mongoose.ObjectId.cast();
138
+ * mongoose.ObjectId.cast(v => {
139
+ * assert.ok(typeof v !== 'string' || v.length === 24);
140
+ * return original(v);
141
+ * });
142
+ *
143
+ * // Or disable casting entirely
144
+ * mongoose.ObjectId.cast(false);
145
+ *
146
+ * @param {Function} caster
147
+ * @return {Function}
148
+ * @function cast
149
+ * @static
150
+ * @api public
151
+ */
152
+
153
+ SchemaObjectId.cast = function cast(caster) {
154
+ if (arguments.length === 0) {
155
+ return this._cast;
156
+ }
157
+ if (caster === false) {
158
+ caster = this._defaultCaster;
159
+ }
160
+ this._cast = caster;
161
+
162
+ return this._cast;
163
+ };
164
+
165
+ /*!
166
+ * ignore
167
+ */
168
+
169
+ SchemaObjectId._defaultCaster = v => {
170
+ if (!(isBsonType(v, 'ObjectId'))) {
171
+ throw new Error(v + ' is not an instance of ObjectId');
172
+ }
173
+ return v;
174
+ };
175
+
176
+ /**
177
+ * Override the function the required validator uses to check whether a string
178
+ * passes the `required` check.
179
+ *
180
+ * #### Example:
181
+ *
182
+ * // Allow empty strings to pass `required` check
183
+ * mongoose.Schema.Types.String.checkRequired(v => v != null);
184
+ *
185
+ * const M = mongoose.model({ str: { type: String, required: true } });
186
+ * new M({ str: '' }).validateSync(); // `null`, validation passes!
187
+ *
188
+ * @param {Function} fn
189
+ * @return {Function}
190
+ * @function checkRequired
191
+ * @static
192
+ * @api public
193
+ */
194
+
195
+ SchemaObjectId.checkRequired = SchemaType.checkRequired;
196
+
197
+ /**
198
+ * Check if the given value satisfies a required validator.
199
+ *
200
+ * @param {Any} value
201
+ * @param {Document} doc
202
+ * @return {Boolean}
203
+ * @api public
204
+ */
205
+
206
+ SchemaObjectId.prototype.checkRequired = function checkRequired(value, doc) {
207
+ if (SchemaType._isRef(this, value, doc, true)) {
208
+ return !!value;
209
+ }
210
+
211
+ // `require('util').inherits()` does **not** copy static properties, and
212
+ // plugins like mongoose-float use `inherits()` for pre-ES6.
213
+ const _checkRequired = typeof this.constructor.checkRequired === 'function' ?
214
+ this.constructor.checkRequired() :
215
+ SchemaObjectId.checkRequired();
216
+
217
+ return _checkRequired(value);
218
+ };
219
+
220
+ /**
221
+ * Casts to ObjectId
222
+ *
223
+ * @param {Object} value
224
+ * @param {Object} doc
225
+ * @param {Boolean} init whether this is an initialization cast
226
+ * @api private
227
+ */
228
+
229
+ SchemaObjectId.prototype.cast = function(value, doc, init, prev, options) {
230
+ if (!(isBsonType(value, 'ObjectId')) && SchemaType._isRef(this, value, doc, init)) {
231
+ // wait! we may need to cast this to a document
232
+ if ((getConstructorName(value) || '').toLowerCase() === 'objectid') {
233
+ return new oid(value.toHexString());
234
+ }
235
+
236
+ if (value == null || utils.isNonBuiltinObject(value)) {
237
+ return this._castRef(value, doc, init, options);
238
+ }
239
+ }
240
+
241
+ let castObjectId;
242
+ if (typeof this._castFunction === 'function') {
243
+ castObjectId = this._castFunction;
244
+ } else if (typeof this.constructor.cast === 'function') {
245
+ castObjectId = this.constructor.cast();
246
+ } else {
247
+ castObjectId = SchemaObjectId.cast();
248
+ }
249
+
250
+ try {
251
+ return castObjectId(value);
252
+ } catch (error) {
253
+ throw new CastError('ObjectId', value, this.path, error, this);
254
+ }
255
+ };
256
+
257
+ /*!
258
+ * ignore
259
+ */
260
+
261
+ function handleSingle(val) {
262
+ return this.cast(val);
263
+ }
264
+
265
+ const $conditionalHandlers = {
266
+ ...SchemaType.prototype.$conditionalHandlers,
267
+ $gt: handleSingle,
268
+ $gte: handleSingle,
269
+ $lt: handleSingle,
270
+ $lte: handleSingle
271
+ };
272
+
273
+ /**
274
+ * Contains the handlers for different query operators for this schema type.
275
+ * For example, `$conditionalHandlers.$in` is the function Mongoose calls to cast `$in` filter operators.
276
+ *
277
+ * @property $conditionalHandlers
278
+ * @memberOf SchemaObjectId
279
+ * @instance
280
+ * @api public
281
+ */
282
+
283
+ Object.defineProperty(SchemaObjectId.prototype, '$conditionalHandlers', {
284
+ enumerable: false,
285
+ value: $conditionalHandlers
286
+ });
287
+
288
+ /*!
289
+ * ignore
290
+ */
291
+
292
+ function defaultId() {
293
+ return new oid();
294
+ }
295
+
296
+ defaultId.$runBeforeSetters = true;
297
+
298
+ function resetId(v) {
299
+ Document || (Document = require('../document'));
300
+
301
+ if (this instanceof Document) {
302
+ if (v === void 0) {
303
+ const _v = new oid();
304
+ return _v;
305
+ }
306
+ }
307
+
308
+ return v;
309
+ }
310
+
311
+ /**
312
+ * Returns this schema type's representation in a JSON schema.
313
+ *
314
+ * @param [options]
315
+ * @param [options.useBsonType=false] If true, return a representation with `bsonType` for use with MongoDB's `$jsonSchema`.
316
+ * @returns {Object} JSON schema properties
317
+ * @api public
318
+ */
319
+
320
+ SchemaObjectId.prototype.toJSONSchema = function toJSONSchema(options) {
321
+ const isRequired = (this.options.required && typeof this.options.required !== 'function') || this.path === '_id';
322
+ return createJSONSchemaTypeDefinition('string', 'objectId', options?.useBsonType, isRequired);
323
+ };
324
+
325
+ SchemaObjectId.prototype.autoEncryptionType = function autoEncryptionType() {
326
+ return 'objectId';
327
+ };
328
+
329
+ /*!
330
+ * Module exports.
331
+ */
332
+
333
+ module.exports = SchemaObjectId;
@@ -0,0 +1,38 @@
1
+ /*!
2
+ * Module requirements.
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const CastError = require('../../error/cast');
8
+
9
+ /*!
10
+ * ignore
11
+ */
12
+
13
+ function handleBitwiseOperator(val) {
14
+ const _this = this;
15
+ if (Array.isArray(val)) {
16
+ return val.map(function(v) {
17
+ return _castNumber(_this.path, v);
18
+ });
19
+ } else if (Buffer.isBuffer(val)) {
20
+ return val;
21
+ }
22
+ // Assume trying to cast to number
23
+ return _castNumber(_this.path, val);
24
+ }
25
+
26
+ /*!
27
+ * ignore
28
+ */
29
+
30
+ function _castNumber(path, num) {
31
+ const v = Number(num);
32
+ if (isNaN(v)) {
33
+ throw new CastError('number', num, path);
34
+ }
35
+ return v;
36
+ }
37
+
38
+ module.exports = handleBitwiseOperator;
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ const castBoolean = require('../../cast/boolean');
4
+
5
+ /*!
6
+ * ignore
7
+ */
8
+
9
+ module.exports = function(val) {
10
+ const path = this?.path ?? null;
11
+ return castBoolean(val, path);
12
+ };
@@ -0,0 +1,107 @@
1
+ /*!
2
+ * Module requirements.
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const castArraysOfNumbers = require('./helpers').castArraysOfNumbers;
8
+ const castToNumber = require('./helpers').castToNumber;
9
+
10
+ /*!
11
+ * ignore
12
+ */
13
+
14
+ exports.cast$geoIntersects = cast$geoIntersects;
15
+ exports.cast$near = cast$near;
16
+ exports.cast$within = cast$within;
17
+
18
+ function cast$near(val) {
19
+ const SchemaArray = require('../array');
20
+
21
+ if (Array.isArray(val)) {
22
+ castArraysOfNumbers(val, this);
23
+ return val;
24
+ }
25
+
26
+ _castMinMaxDistance(this, val);
27
+
28
+ if (val?.$geometry) {
29
+ return cast$geometry(val, this);
30
+ }
31
+
32
+ if (!Array.isArray(val)) {
33
+ throw new TypeError('$near must be either an array or an object ' +
34
+ 'with a $geometry property');
35
+ }
36
+
37
+ return SchemaArray.prototype.castForQuery.call(this, null, val);
38
+ }
39
+
40
+ function cast$geometry(val, self) {
41
+ switch (val.$geometry.type) {
42
+ case 'Polygon':
43
+ case 'LineString':
44
+ case 'Point':
45
+ castArraysOfNumbers(val.$geometry.coordinates, self);
46
+ break;
47
+ default:
48
+ // ignore unknowns
49
+ break;
50
+ }
51
+
52
+ _castMinMaxDistance(self, val);
53
+
54
+ return val;
55
+ }
56
+
57
+ function cast$within(val) {
58
+ _castMinMaxDistance(this, val);
59
+
60
+ if (val.$box || val.$polygon) {
61
+ const type = val.$box ? '$box' : '$polygon';
62
+ val[type].forEach(arr => {
63
+ if (!Array.isArray(arr)) {
64
+ const msg = 'Invalid $within $box argument. '
65
+ + 'Expected an array, received ' + arr;
66
+ throw new TypeError(msg);
67
+ }
68
+ arr.forEach((v, i) => {
69
+ arr[i] = castToNumber.call(this, v);
70
+ });
71
+ });
72
+ } else if (val.$center || val.$centerSphere) {
73
+ const type = val.$center ? '$center' : '$centerSphere';
74
+ val[type].forEach((item, i) => {
75
+ if (Array.isArray(item)) {
76
+ item.forEach((v, j) => {
77
+ item[j] = castToNumber.call(this, v);
78
+ });
79
+ } else {
80
+ val[type][i] = castToNumber.call(this, item);
81
+ }
82
+ });
83
+ } else if (val.$geometry) {
84
+ cast$geometry(val, this);
85
+ }
86
+
87
+ return val;
88
+ }
89
+
90
+ function cast$geoIntersects(val) {
91
+ const geo = val.$geometry;
92
+ if (!geo) {
93
+ return;
94
+ }
95
+
96
+ cast$geometry(val, this);
97
+ return val;
98
+ }
99
+
100
+ function _castMinMaxDistance(self, val) {
101
+ if (val.$maxDistance) {
102
+ val.$maxDistance = castToNumber.call(self, val.$maxDistance);
103
+ }
104
+ if (val.$minDistance) {
105
+ val.$minDistance = castToNumber.call(self, val.$minDistance);
106
+ }
107
+ }
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ /*!
4
+ * Module requirements.
5
+ */
6
+
7
+ const SchemaNumber = require('../number');
8
+
9
+ /*!
10
+ * ignore
11
+ */
12
+
13
+ exports.castToNumber = castToNumber;
14
+ exports.castArraysOfNumbers = castArraysOfNumbers;
15
+
16
+ /*!
17
+ * ignore
18
+ */
19
+
20
+ function castToNumber(val) {
21
+ return SchemaNumber.cast()(val);
22
+ }
23
+
24
+ function castArraysOfNumbers(arr, self) {
25
+ arr.forEach(function(v, i) {
26
+ if (Array.isArray(v)) {
27
+ castArraysOfNumbers(v, self);
28
+ } else {
29
+ arr[i] = castToNumber.call(self, v);
30
+ }
31
+ });
32
+ }
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ const CastError = require('../../error/cast');
4
+ const castBoolean = require('../../cast/boolean');
5
+ const castString = require('../../cast/string');
6
+
7
+ /**
8
+ * Casts val to an object suitable for `$text`. Throws an error if the object
9
+ * can't be casted.
10
+ *
11
+ * @param {Any} val value to cast
12
+ * @param {String} [path] path to associate with any errors that occured
13
+ * @return {Object} casted object
14
+ * @see https://www.mongodb.com/docs/manual/reference/operator/query/text/
15
+ * @api private
16
+ */
17
+
18
+ module.exports = function castTextSearch(val, path) {
19
+ if (val == null || typeof val !== 'object') {
20
+ throw new CastError('$text', val, path);
21
+ }
22
+
23
+ if (val.$search != null) {
24
+ val.$search = castString(val.$search, path + '.$search');
25
+ }
26
+ if (val.$language != null) {
27
+ val.$language = castString(val.$language, path + '.$language');
28
+ }
29
+ if (val.$caseSensitive != null) {
30
+ val.$caseSensitive = castBoolean(val.$caseSensitive,
31
+ path + '.$caseSensitive');
32
+ }
33
+ if (val.$diacriticSensitive != null) {
34
+ val.$diacriticSensitive = castBoolean(val.$diacriticSensitive,
35
+ path + '.$diacriticSensitive');
36
+ }
37
+
38
+ return val;
39
+ };
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ /*!
4
+ * ignore
5
+ */
6
+
7
+ module.exports = function(val) {
8
+ if (Array.isArray(val)) {
9
+ if (!val.every(v => typeof v === 'number' || typeof v === 'string')) {
10
+ throw new Error('$type array values must be strings or numbers');
11
+ }
12
+ return val;
13
+ }
14
+
15
+ if (typeof val !== 'number' && typeof val !== 'string') {
16
+ throw new Error('$type parameter must be number, string, or array of numbers and strings');
17
+ }
18
+
19
+ return val;
20
+ };