@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,137 @@
1
+ /*!
2
+ * Module dependencies.
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const MongooseError = require('../error/mongooseError');
8
+ const SchemaType = require('../schemaType');
9
+ const SchemaSubdocument = require('./subdocument');
10
+ const getConstructor = require('../helpers/discriminator/getConstructor');
11
+
12
+ /**
13
+ * DocumentArrayElement SchemaType constructor. Mongoose calls this internally when you define a new document array in your schema.
14
+ *
15
+ * #### Example:
16
+ * const schema = new Schema({ users: [{ name: String }] });
17
+ * schema.path('users.$'); // SchemaDocumentArrayElement with schema `new Schema({ name: String })`
18
+ *
19
+ * @param {String} path
20
+ * @param {Schema} schema
21
+ * @param {Object} options
22
+ * @param {Object} options
23
+ * @param {Schema} parentSchema
24
+ * @inherits SchemaType
25
+ * @api public
26
+ */
27
+
28
+ function SchemaDocumentArrayElement(path, schema, options, parentSchema) {
29
+ this.$parentSchemaType = options?.$parentSchemaType;
30
+ if (!this.$parentSchemaType) {
31
+ throw new MongooseError('Cannot create DocumentArrayElement schematype without a parent');
32
+ }
33
+ delete options.$parentSchemaType;
34
+
35
+ SchemaType.call(this, path, options, 'DocumentArrayElement', parentSchema);
36
+
37
+ this.$isMongooseDocumentArrayElement = true;
38
+ this.Constructor = options?.Constructor;
39
+ this.schema = schema;
40
+ }
41
+
42
+ /**
43
+ * This schema type's name, to defend against minifiers that mangle
44
+ * function names.
45
+ *
46
+ * @api public
47
+ */
48
+ SchemaDocumentArrayElement.schemaName = 'DocumentArrayElement';
49
+
50
+ SchemaDocumentArrayElement.defaultOptions = {};
51
+
52
+ /**
53
+ * Sets a default option for all SchemaDocumentArrayElement instances.
54
+ *
55
+ * #### Example:
56
+ *
57
+ * // Make all document array elements have option `_id` equal to false.
58
+ * mongoose.Schema.Types.DocumentArrayElement.set('_id', false);
59
+ *
60
+ * @param {String} option The name of the option you'd like to set
61
+ * @param {Any} value The value of the option you'd like to set.
62
+ * @return {void}
63
+ * @function set
64
+ * @static
65
+ * @api public
66
+ */
67
+
68
+ SchemaDocumentArrayElement.set = SchemaType.set;
69
+
70
+ /**
71
+ * Attaches a getter for all DocumentArrayElement instances
72
+ *
73
+ * @param {Function} getter
74
+ * @return {this}
75
+ * @function get
76
+ * @static
77
+ * @api public
78
+ */
79
+
80
+ SchemaDocumentArrayElement.get = SchemaType.get;
81
+
82
+ /*!
83
+ * Inherits from SchemaType.
84
+ */
85
+ SchemaDocumentArrayElement.prototype = Object.create(SchemaType.prototype);
86
+ SchemaDocumentArrayElement.prototype.constructor = SchemaDocumentArrayElement;
87
+
88
+ /**
89
+ * Casts `val` for DocumentArrayElement.
90
+ *
91
+ * @param {Object} value to cast
92
+ * @api private
93
+ */
94
+
95
+ SchemaDocumentArrayElement.prototype.cast = function(...args) {
96
+ return this.$parentSchemaType.cast(...args)[0];
97
+ };
98
+
99
+ /**
100
+ * Async validation on this individual array element
101
+ *
102
+ * @api public
103
+ */
104
+
105
+ SchemaDocumentArrayElement.prototype.doValidate = async function doValidate(value, scope, options) {
106
+ const Constructor = getConstructor(this.Constructor, value);
107
+
108
+ if (value && !(value instanceof Constructor)) {
109
+ value = new Constructor(value, scope, null, null, options?.index ?? null);
110
+ }
111
+
112
+ return SchemaSubdocument.prototype.doValidate.call(this, value, scope, options);
113
+ };
114
+
115
+ /**
116
+ * Clone the current SchemaType
117
+ *
118
+ * @return {DocumentArrayElement} The cloned instance
119
+ * @api private
120
+ */
121
+
122
+ SchemaDocumentArrayElement.prototype.clone = function() {
123
+ this.options.$parentSchemaType = this.$parentSchemaType;
124
+ const ret = SchemaType.prototype.clone.apply(this, arguments);
125
+ delete this.options.$parentSchemaType;
126
+
127
+ ret.Constructor = this.Constructor;
128
+ ret.schema = this.schema;
129
+
130
+ return ret;
131
+ };
132
+
133
+ /*!
134
+ * Module exports.
135
+ */
136
+
137
+ module.exports = SchemaDocumentArrayElement;
@@ -0,0 +1,246 @@
1
+ 'use strict';
2
+
3
+ /*!
4
+ * Module dependencies.
5
+ */
6
+
7
+ const CastError = require('../error/cast');
8
+ const SchemaType = require('../schemaType');
9
+ const castDouble = require('../cast/double');
10
+ const createJSONSchemaTypeDefinition = require('../helpers/createJSONSchemaTypeDefinition');
11
+
12
+ /**
13
+ * Double SchemaType constructor.
14
+ *
15
+ * @param {String} path
16
+ * @param {Object} options
17
+ * @param {Object} schemaOptions
18
+ * @param {Schema} parentSchema
19
+ * @inherits SchemaType
20
+ * @api public
21
+ */
22
+
23
+ function SchemaDouble(path, options, _schemaOptions, parentSchema) {
24
+ SchemaType.call(this, path, options, 'Double', parentSchema);
25
+ }
26
+
27
+ /**
28
+ * This schema type's name, to defend against minifiers that mangle
29
+ * function names.
30
+ *
31
+ * @api public
32
+ */
33
+ SchemaDouble.schemaName = 'Double';
34
+
35
+ SchemaDouble.defaultOptions = {};
36
+
37
+ /*!
38
+ * Inherits from SchemaType.
39
+ */
40
+ SchemaDouble.prototype = Object.create(SchemaType.prototype);
41
+ SchemaDouble.prototype.constructor = SchemaDouble;
42
+
43
+ /*!
44
+ * ignore
45
+ */
46
+
47
+ SchemaDouble._cast = castDouble;
48
+
49
+ /**
50
+ * Sets a default option for all Double instances.
51
+ *
52
+ * #### Example:
53
+ *
54
+ * // Make all Double fields required by default
55
+ * mongoose.Schema.Types.Double.set('required', true);
56
+ *
57
+ * @param {String} option The option you'd like to set the value for
58
+ * @param {Any} value value for option
59
+ * @return {undefined}
60
+ * @function set
61
+ * @static
62
+ * @api public
63
+ */
64
+
65
+ SchemaDouble.set = SchemaType.set;
66
+
67
+ SchemaDouble.setters = [];
68
+
69
+ /**
70
+ * Attaches a getter for all Double instances
71
+ *
72
+ * #### Example:
73
+ *
74
+ * // Converts Double to be a represent milliseconds upon access
75
+ * mongoose.Schema.Types.Double.get(v => v == null ? '0.000 ms' : v.toString() + ' ms');
76
+ *
77
+ * @param {Function} getter
78
+ * @return {this}
79
+ * @function get
80
+ * @static
81
+ * @api public
82
+ */
83
+
84
+ SchemaDouble.get = SchemaType.get;
85
+
86
+ /*!
87
+ * ignore
88
+ */
89
+
90
+ SchemaDouble._defaultCaster = v => {
91
+ if (v != null) {
92
+ if (v._bsontype !== 'Double') {
93
+ throw new Error();
94
+ }
95
+ }
96
+
97
+ return v;
98
+ };
99
+
100
+ /**
101
+ * Get/set the function used to cast arbitrary values to IEEE 754-2008 floating points
102
+ *
103
+ * #### Example:
104
+ *
105
+ * // Make Mongoose cast any NaNs to 0
106
+ * const defaultCast = mongoose.Schema.Types.Double.cast();
107
+ * mongoose.Schema.Types.Double.cast(v => {
108
+ * if (isNaN(v)) {
109
+ * return 0;
110
+ * }
111
+ * return defaultCast(v);
112
+ * });
113
+ *
114
+ * // Or disable casting for Doubles entirely (only JS numbers are permitted)
115
+ * mongoose.Schema.Types.Double.cast(false);
116
+ *
117
+ *
118
+ * @param {Function} caster
119
+ * @return {Function}
120
+ * @function cast
121
+ * @static
122
+ * @api public
123
+ */
124
+
125
+ SchemaDouble.cast = function cast(caster) {
126
+ if (arguments.length === 0) {
127
+ return this._cast;
128
+ }
129
+ if (caster === false) {
130
+ caster = this._defaultCaster;
131
+ }
132
+
133
+ this._cast = caster;
134
+
135
+ return this._cast;
136
+ };
137
+
138
+
139
+ /*!
140
+ * ignore
141
+ */
142
+
143
+ SchemaDouble._checkRequired = v => v != null;
144
+ /**
145
+ * Override the function the required validator uses to check whether a value
146
+ * passes the `required` check.
147
+ *
148
+ * @param {Function} fn
149
+ * @return {Function}
150
+ * @function checkRequired
151
+ * @static
152
+ * @api public
153
+ */
154
+
155
+ SchemaDouble.checkRequired = SchemaType.checkRequired;
156
+
157
+ /**
158
+ * Check if the given value satisfies a required validator.
159
+ *
160
+ * @param {Any} value
161
+ * @return {Boolean}
162
+ * @api public
163
+ */
164
+
165
+ SchemaDouble.prototype.checkRequired = function(value) {
166
+ return this.constructor._checkRequired(value);
167
+ };
168
+
169
+ /**
170
+ * Casts to Double
171
+ *
172
+ * @param {Object} value
173
+ * @param {Object} model this value is optional
174
+ * @api private
175
+ */
176
+
177
+ SchemaDouble.prototype.cast = function(value) {
178
+ let castDouble;
179
+ if (typeof this._castFunction === 'function') {
180
+ castDouble = this._castFunction;
181
+ } else if (typeof this.constructor.cast === 'function') {
182
+ castDouble = this.constructor.cast();
183
+ } else {
184
+ castDouble = SchemaDouble.cast();
185
+ }
186
+
187
+ try {
188
+ return castDouble(value);
189
+ } catch (error) {
190
+ throw new CastError('Double', value, this.path, error, this);
191
+ }
192
+ };
193
+
194
+ /*!
195
+ * ignore
196
+ */
197
+
198
+ function handleSingle(val) {
199
+ return this.cast(val);
200
+ }
201
+
202
+ const $conditionalHandlers = {
203
+ ...SchemaType.prototype.$conditionalHandlers,
204
+ $gt: handleSingle,
205
+ $gte: handleSingle,
206
+ $lt: handleSingle,
207
+ $lte: handleSingle
208
+ };
209
+
210
+ /**
211
+ * Contains the handlers for different query operators for this schema type.
212
+ * For example, `$conditionalHandlers.$lt` is the function Mongoose calls to cast `$lt` filter operators.
213
+ *
214
+ * @property $conditionalHandlers
215
+ * @memberOf SchemaDouble
216
+ * @instance
217
+ * @api public
218
+ */
219
+
220
+ Object.defineProperty(SchemaDouble.prototype, '$conditionalHandlers', {
221
+ enumerable: false,
222
+ value: $conditionalHandlers
223
+ });
224
+
225
+ /**
226
+ * Returns this schema type's representation in a JSON schema.
227
+ *
228
+ * @param [options]
229
+ * @param [options.useBsonType=false] If true, return a representation with `bsonType` for use with MongoDB's `$jsonSchema`.
230
+ * @returns {Object} JSON schema properties
231
+ */
232
+
233
+ SchemaDouble.prototype.toJSONSchema = function toJSONSchema(options) {
234
+ const isRequired = this.options.required && typeof this.options.required !== 'function';
235
+ return createJSONSchemaTypeDefinition('number', 'double', options?.useBsonType, isRequired);
236
+ };
237
+
238
+ SchemaDouble.prototype.autoEncryptionType = function autoEncryptionType() {
239
+ return 'double';
240
+ };
241
+
242
+ /*!
243
+ * Module exports.
244
+ */
245
+
246
+ module.exports = SchemaDouble;
@@ -0,0 +1,32 @@
1
+
2
+ /*!
3
+ * Module exports.
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ exports.Array = require('./array');
9
+ exports.BigInt = require('./bigint');
10
+ exports.Boolean = require('./boolean');
11
+ exports.Buffer = require('./buffer');
12
+ exports.Date = require('./date');
13
+ exports.Decimal128 = exports.Decimal = require('./decimal128');
14
+ exports.DocumentArray = require('./documentArray');
15
+ exports.DocumentArrayElement = require('./documentArrayElement');
16
+ exports.Double = require('./double');
17
+ exports.Int32 = require('./int32');
18
+ exports.Map = require('./map');
19
+ exports.Mixed = require('./mixed');
20
+ exports.Number = require('./number');
21
+ exports.ObjectId = require('./objectId');
22
+ exports.String = require('./string');
23
+ exports.Subdocument = require('./subdocument');
24
+ exports.UUID = require('./uuid');
25
+ exports.Union = require('./union');
26
+
27
+ // alias
28
+
29
+ exports.Oid = exports.ObjectId;
30
+ exports.Object = exports.Mixed;
31
+ exports.Bool = exports.Boolean;
32
+ exports.ObjectID = exports.ObjectId;
@@ -0,0 +1,289 @@
1
+ 'use strict';
2
+
3
+ /*!
4
+ * Module dependencies.
5
+ */
6
+
7
+ const CastError = require('../error/cast');
8
+ const SchemaType = require('../schemaType');
9
+ const castInt32 = require('../cast/int32');
10
+ const createJSONSchemaTypeDefinition = require('../helpers/createJSONSchemaTypeDefinition');
11
+ const handleBitwiseOperator = require('./operators/bitwise');
12
+
13
+ /**
14
+ * Int32 SchemaType constructor.
15
+ *
16
+ * @param {String} path
17
+ * @param {Object} options
18
+ * @param {Object} schemaOptions
19
+ * @param {Schema} parentSchema
20
+ * @inherits SchemaType
21
+ * @api public
22
+ */
23
+
24
+ function SchemaInt32(path, options, _schemaOptions, parentSchema) {
25
+ SchemaType.call(this, path, options, 'Int32', 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
+ SchemaInt32.schemaName = 'Int32';
35
+
36
+ SchemaInt32.defaultOptions = {};
37
+
38
+ /*!
39
+ * Inherits from SchemaType.
40
+ */
41
+ SchemaInt32.prototype = Object.create(SchemaType.prototype);
42
+ SchemaInt32.prototype.constructor = SchemaInt32;
43
+
44
+ /*!
45
+ * ignore
46
+ */
47
+
48
+ SchemaInt32._cast = castInt32;
49
+
50
+ /**
51
+ * Sets a default option for all Int32 instances.
52
+ *
53
+ * #### Example:
54
+ *
55
+ * // Make all Int32 fields required by default
56
+ * mongoose.Schema.Types.Int32.set('required', true);
57
+ *
58
+ * @param {String} option The option you'd like to set the value for
59
+ * @param {Any} value value for option
60
+ * @return {undefined}
61
+ * @function set
62
+ * @static
63
+ * @api public
64
+ */
65
+
66
+ SchemaInt32.set = SchemaType.set;
67
+
68
+ SchemaInt32.setters = [];
69
+
70
+ /**
71
+ * Attaches a getter for all Int32 instances
72
+ *
73
+ * #### Example:
74
+ *
75
+ * // Converts int32 to be a represent milliseconds upon access
76
+ * mongoose.Schema.Types.Int32.get(v => v == null ? '0 ms' : v.toString() + ' ms');
77
+ *
78
+ * @param {Function} getter
79
+ * @return {this}
80
+ * @function get
81
+ * @static
82
+ * @api public
83
+ */
84
+
85
+ SchemaInt32.get = SchemaType.get;
86
+
87
+ /*!
88
+ * ignore
89
+ */
90
+
91
+ SchemaInt32._defaultCaster = v => {
92
+ const INT32_MAX = 0x7FFFFFFF;
93
+ const INT32_MIN = -0x80000000;
94
+
95
+ if (v != null) {
96
+ if (typeof v !== 'number' || v !== (v | 0) || v < INT32_MIN || v > INT32_MAX) {
97
+ throw new Error();
98
+ }
99
+ }
100
+
101
+ return v;
102
+ };
103
+
104
+ /**
105
+ * Get/set the function used to cast arbitrary values to 32-bit integers
106
+ *
107
+ * #### Example:
108
+ *
109
+ * // Make Mongoose cast NaN to 0
110
+ * const defaultCast = mongoose.Schema.Types.Int32.cast();
111
+ * mongoose.Schema.Types.Int32.cast(v => {
112
+ * if (isNaN(v)) {
113
+ * return 0;
114
+ * }
115
+ * return defaultCast(v);
116
+ * });
117
+ *
118
+ * // Or disable casting for Int32s entirely (only JS numbers within 32-bit integer bounds and null-ish values are permitted)
119
+ * mongoose.Schema.Types.Int32.cast(false);
120
+ *
121
+ *
122
+ * @param {Function} caster
123
+ * @return {Function}
124
+ * @function cast
125
+ * @static
126
+ * @api public
127
+ */
128
+
129
+ SchemaInt32.cast = function cast(caster) {
130
+ if (arguments.length === 0) {
131
+ return this._cast;
132
+ }
133
+ if (caster === false) {
134
+ caster = this._defaultCaster;
135
+ }
136
+
137
+ this._cast = caster;
138
+
139
+ return this._cast;
140
+ };
141
+
142
+
143
+ /*!
144
+ * ignore
145
+ */
146
+
147
+ SchemaInt32._checkRequired = v => v != null;
148
+ /**
149
+ * Override the function the required validator uses to check whether a value
150
+ * passes the `required` check.
151
+ *
152
+ * @param {Function} fn
153
+ * @return {Function}
154
+ * @function checkRequired
155
+ * @static
156
+ * @api public
157
+ */
158
+
159
+ SchemaInt32.checkRequired = SchemaType.checkRequired;
160
+
161
+ /**
162
+ * Check if the given value satisfies a required validator.
163
+ *
164
+ * @param {Any} value
165
+ * @return {Boolean}
166
+ * @api public
167
+ */
168
+
169
+ SchemaInt32.prototype.checkRequired = function(value) {
170
+ return this.constructor._checkRequired(value);
171
+ };
172
+
173
+ /**
174
+ * Casts to Int32
175
+ *
176
+ * @param {Object} value
177
+ * @param {Object} model this value is optional
178
+ * @api private
179
+ */
180
+
181
+ SchemaInt32.prototype.cast = function(value) {
182
+ let castInt32;
183
+ if (typeof this._castFunction === 'function') {
184
+ castInt32 = this._castFunction;
185
+ } else if (typeof this.constructor.cast === 'function') {
186
+ castInt32 = this.constructor.cast();
187
+ } else {
188
+ castInt32 = SchemaInt32.cast();
189
+ }
190
+
191
+ try {
192
+ return castInt32(value);
193
+ } catch (error) {
194
+ throw new CastError('Int32', value, this.path, error, this);
195
+ }
196
+ };
197
+
198
+ /*!
199
+ * ignore
200
+ */
201
+
202
+ const $conditionalHandlers = {
203
+ ...SchemaType.prototype.$conditionalHandlers,
204
+ $gt: handleSingle,
205
+ $gte: handleSingle,
206
+ $lt: handleSingle,
207
+ $lte: handleSingle,
208
+ $bitsAllClear: handleBitwiseOperator,
209
+ $bitsAnyClear: handleBitwiseOperator,
210
+ $bitsAllSet: handleBitwiseOperator,
211
+ $bitsAnySet: handleBitwiseOperator
212
+ };
213
+
214
+ /**
215
+ * Contains the handlers for different query operators for this schema type.
216
+ * For example, `$conditionalHandlers.$gt` is the function Mongoose calls to cast `$gt` filter operators.
217
+ *
218
+ * @property $conditionalHandlers
219
+ * @memberOf SchemaInt32
220
+ * @instance
221
+ * @api public
222
+ */
223
+
224
+ Object.defineProperty(SchemaInt32.prototype, '$conditionalHandlers', {
225
+ enumerable: false,
226
+ value: $conditionalHandlers
227
+ });
228
+
229
+ /*!
230
+ * ignore
231
+ */
232
+
233
+ function handleSingle(val, context) {
234
+ return this.castForQuery(null, val, context);
235
+ }
236
+
237
+ /**
238
+ * Casts contents for queries.
239
+ *
240
+ * @param {String} $conditional
241
+ * @param {any} val
242
+ * @api private
243
+ */
244
+
245
+ SchemaInt32.prototype.castForQuery = function($conditional, val, context) {
246
+ let handler;
247
+ if ($conditional != null) {
248
+ handler = this.$conditionalHandlers[$conditional];
249
+
250
+ if (handler) {
251
+ return handler.call(this, val);
252
+ }
253
+
254
+ return this.applySetters(val, context);
255
+ }
256
+
257
+ try {
258
+ return this.applySetters(val, context);
259
+ } catch (err) {
260
+ if (err instanceof CastError && err.path === this.path && this.$fullPath != null) {
261
+ err.path = this.$fullPath;
262
+ }
263
+ throw err;
264
+ }
265
+ };
266
+
267
+ /**
268
+ * Returns this schema type's representation in a JSON schema.
269
+ *
270
+ * @param [options]
271
+ * @param [options.useBsonType=false] If true, return a representation with `bsonType` for use with MongoDB's `$jsonSchema`.
272
+ * @returns {Object} JSON schema properties
273
+ */
274
+
275
+ SchemaInt32.prototype.toJSONSchema = function toJSONSchema(options) {
276
+ const isRequired = this.options.required && typeof this.options.required !== 'function';
277
+ return createJSONSchemaTypeDefinition('number', 'int', options?.useBsonType, isRequired);
278
+ };
279
+
280
+ SchemaInt32.prototype.autoEncryptionType = function autoEncryptionType() {
281
+ return 'int';
282
+ };
283
+
284
+
285
+ /*!
286
+ * Module exports.
287
+ */
288
+
289
+ module.exports = SchemaInt32;