@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,31 @@
1
+ /*!
2
+ * Module dependencies.
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const MongooseError = require('./mongooseError');
8
+
9
+ /**
10
+ * Strict mode error constructor
11
+ *
12
+ * @param {string} type
13
+ * @param {string} value
14
+ * @api private
15
+ */
16
+
17
+ class ObjectExpectedError extends MongooseError {
18
+
19
+ constructor(path, val) {
20
+ const typeDescription = Array.isArray(val) ? 'array' : 'primitive value';
21
+ super('Tried to set nested object field `' + path +
22
+ `\` to ${typeDescription} \`` + val + '`');
23
+ this.path = path;
24
+ }
25
+ }
26
+
27
+ Object.defineProperty(ObjectExpectedError.prototype, 'name', {
28
+ value: 'ObjectExpectedError'
29
+ });
30
+
31
+ module.exports = ObjectExpectedError;
@@ -0,0 +1,31 @@
1
+ /*!
2
+ * Module dependencies.
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const MongooseError = require('./mongooseError');
8
+
9
+ /**
10
+ * Constructor for errors that happen when a parameter that's expected to be
11
+ * an object isn't an object
12
+ *
13
+ * @param {Any} value
14
+ * @param {String} paramName
15
+ * @param {String} fnName
16
+ * @api private
17
+ */
18
+
19
+ class ObjectParameterError extends MongooseError {
20
+ constructor(value, paramName, fnName) {
21
+ super('Parameter "' + paramName + '" to ' + fnName +
22
+ '() must be an object, got "' + (value == null ? value : value.toString()) + '" (type ' + typeof value + ')');
23
+ }
24
+ }
25
+
26
+
27
+ Object.defineProperty(ObjectParameterError.prototype, 'name', {
28
+ value: 'ObjectParameterError'
29
+ });
30
+
31
+ module.exports = ObjectParameterError;
@@ -0,0 +1,31 @@
1
+
2
+ /*!
3
+ * Module dependencies.
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ const MongooseError = require('./mongooseError');
9
+
10
+ /**
11
+ * OverwriteModel Error constructor.
12
+ * @param {String} name
13
+ * @api private
14
+ */
15
+
16
+ class OverwriteModelError extends MongooseError {
17
+
18
+ constructor(name) {
19
+ super('Cannot overwrite `' + name + '` model once compiled.');
20
+ }
21
+ }
22
+
23
+ Object.defineProperty(OverwriteModelError.prototype, 'name', {
24
+ value: 'OverwriteModelError'
25
+ });
26
+
27
+ /*!
28
+ * exports
29
+ */
30
+
31
+ module.exports = OverwriteModelError;
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ /*!
4
+ * Module dependencies.
5
+ */
6
+
7
+ const MongooseError = require('./mongooseError');
8
+
9
+
10
+ /**
11
+ * ParallelSave Error constructor.
12
+ *
13
+ * @param {Document} doc
14
+ * @api private
15
+ */
16
+
17
+ class ParallelSaveError extends MongooseError {
18
+
19
+ constructor(doc) {
20
+ const msg = 'Can\'t save() the same doc multiple times in parallel. Document: ';
21
+ super(msg + doc._doc._id);
22
+ }
23
+ }
24
+
25
+ Object.defineProperty(ParallelSaveError.prototype, 'name', {
26
+ value: 'ParallelSaveError'
27
+ });
28
+
29
+ /*!
30
+ * exports
31
+ */
32
+
33
+ module.exports = ParallelSaveError;
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ /*!
4
+ * Module dependencies.
5
+ */
6
+
7
+ const MongooseError = require('./mongooseError');
8
+
9
+
10
+ /**
11
+ * ParallelValidate Error constructor.
12
+ *
13
+ * @param {Document} doc
14
+ * @api private
15
+ */
16
+
17
+ class ParallelValidateError extends MongooseError {
18
+
19
+ constructor(doc) {
20
+ const msg = 'Can\'t validate() the same doc multiple times in parallel. Document: ';
21
+ super(msg + doc._doc._id);
22
+ }
23
+ }
24
+
25
+ Object.defineProperty(ParallelValidateError.prototype, 'name', {
26
+ value: 'ParallelValidateError'
27
+ });
28
+
29
+ /*!
30
+ * exports
31
+ */
32
+
33
+ module.exports = ParallelValidateError;
@@ -0,0 +1,62 @@
1
+ /*!
2
+ * Module dependencies.
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const MongooseError = require('./mongooseError');
8
+ const allServersUnknown = require('../helpers/topology/allServersUnknown');
9
+ const isAtlas = require('../helpers/topology/isAtlas');
10
+ const isSSLError = require('../helpers/topology/isSSLError');
11
+
12
+ /*!
13
+ * ignore
14
+ */
15
+
16
+ const atlasMessage = 'Could not connect to any servers in your MongoDB Atlas cluster. ' +
17
+ 'One common reason is that you\'re trying to access the database from ' +
18
+ 'an IP that isn\'t whitelisted. Make sure your current IP address is on your Atlas ' +
19
+ 'cluster\'s IP whitelist: https://www.mongodb.com/docs/atlas/security-whitelist/';
20
+
21
+ const sslMessage = 'Mongoose is connecting with SSL enabled, but the server is ' +
22
+ 'not accepting SSL connections. Please ensure that the MongoDB server you are ' +
23
+ 'connecting to is configured to accept SSL connections. Learn more: ' +
24
+ 'https://mongoosejs.com/docs/tutorials/ssl.html';
25
+
26
+ class MongooseServerSelectionError extends MongooseError {
27
+ /**
28
+ * MongooseServerSelectionError constructor
29
+ *
30
+ * @api private
31
+ */
32
+ assimilateError(err) {
33
+ const reason = err.reason;
34
+ // Special message for a case that is likely due to IP whitelisting issues.
35
+ const isAtlasWhitelistError = isAtlas(reason) &&
36
+ allServersUnknown(reason) &&
37
+ err.message.indexOf('bad auth') === -1 &&
38
+ err.message.indexOf('Authentication failed') === -1;
39
+
40
+ if (isAtlasWhitelistError) {
41
+ this.message = atlasMessage;
42
+ } else if (isSSLError(reason)) {
43
+ this.message = sslMessage;
44
+ } else {
45
+ this.message = err.message;
46
+ }
47
+ for (const key in err) {
48
+ if (key !== 'name') {
49
+ this[key] = err[key];
50
+ }
51
+ }
52
+ this.cause = reason;
53
+
54
+ return this;
55
+ }
56
+ }
57
+
58
+ Object.defineProperty(MongooseServerSelectionError.prototype, 'name', {
59
+ value: 'MongooseServerSelectionError'
60
+ });
61
+
62
+ module.exports = MongooseServerSelectionError;
@@ -0,0 +1,103 @@
1
+ /*!
2
+ * Module requirements
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const MongooseError = require('./mongooseError');
8
+ const util = require('util');
9
+ const combinePathErrors = require('../helpers/error/combinePathErrors');
10
+
11
+ /**
12
+ * Mongoose.set Error
13
+ *
14
+ * @api private
15
+ * @inherits MongooseError
16
+ */
17
+
18
+ class SetOptionError extends MongooseError {
19
+
20
+ constructor() {
21
+ super('');
22
+
23
+ this.errors = {};
24
+ }
25
+
26
+ /**
27
+ * Console.log helper
28
+ */
29
+ toString() {
30
+ return combinePathErrors(this);
31
+ }
32
+
33
+ /**
34
+ * inspect helper
35
+ * @api private
36
+ */
37
+ inspect() {
38
+ return Object.assign(new Error(this.message), this);
39
+ }
40
+
41
+ /**
42
+ * add message
43
+ * @param {String} key
44
+ * @param {String|Error} error
45
+ * @api private
46
+ */
47
+ addError(key, error) {
48
+ if (error instanceof SetOptionError) {
49
+ const { errors } = error;
50
+ for (const optionKey of Object.keys(errors)) {
51
+ this.addError(optionKey, errors[optionKey]);
52
+ }
53
+
54
+ return;
55
+ }
56
+
57
+ this.errors[key] = error;
58
+ this.message = combinePathErrors(this);
59
+ }
60
+ }
61
+
62
+
63
+ if (util.inspect.custom) {
64
+ // Avoid Node deprecation warning DEP0079
65
+ SetOptionError.prototype[util.inspect.custom] = SetOptionError.prototype.inspect;
66
+ }
67
+
68
+ /**
69
+ * Helper for JSON.stringify
70
+ * Ensure `name` and `message` show up in toJSON output re: gh-9847
71
+ * @api private
72
+ */
73
+ Object.defineProperty(SetOptionError.prototype, 'toJSON', {
74
+ enumerable: false,
75
+ writable: false,
76
+ configurable: true,
77
+ value: function() {
78
+ return Object.assign({}, this, { name: this.name, message: this.message });
79
+ }
80
+ });
81
+
82
+
83
+ Object.defineProperty(SetOptionError.prototype, 'name', {
84
+ value: 'SetOptionError'
85
+ });
86
+
87
+ class SetOptionInnerError extends MongooseError {
88
+ /**
89
+ * Error for the "errors" array in "SetOptionError" with consistent message
90
+ * @param {String} key
91
+ */
92
+ constructor(key) {
93
+ super(`"${key}" is not a valid option to set`);
94
+ }
95
+ }
96
+
97
+ SetOptionError.SetOptionInnerError = SetOptionInnerError;
98
+
99
+ /*!
100
+ * Module exports
101
+ */
102
+
103
+ module.exports = SetOptionError;
@@ -0,0 +1,35 @@
1
+ /*!
2
+ * Module dependencies.
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const MongooseError = require('./mongooseError');
8
+
9
+ /**
10
+ * Strict mode error constructor
11
+ *
12
+ * @param {String} path
13
+ * @param {String} [msg]
14
+ * @param {Boolean} [immutable]
15
+ * @inherits MongooseError
16
+ * @api private
17
+ */
18
+
19
+
20
+ class StrictModeError extends MongooseError {
21
+
22
+ constructor(path, msg, immutable) {
23
+ msg = msg || 'Field `' + path + '` is not in schema and strict ' +
24
+ 'mode is set to throw.';
25
+ super(msg);
26
+ this.isImmutableError = !!immutable;
27
+ this.path = path;
28
+ }
29
+ }
30
+
31
+ Object.defineProperty(StrictModeError.prototype, 'name', {
32
+ value: 'StrictModeError'
33
+ });
34
+
35
+ module.exports = StrictModeError;
@@ -0,0 +1,31 @@
1
+ /*!
2
+ * Module dependencies.
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const MongooseError = require('./mongooseError');
8
+
9
+ /**
10
+ * Strict mode error constructor
11
+ *
12
+ * @param {String} path
13
+ * @param {String} [msg]
14
+ * @inherits MongooseError
15
+ * @api private
16
+ */
17
+
18
+ class StrictPopulateError extends MongooseError {
19
+
20
+ constructor(path, msg) {
21
+ msg = msg || 'Cannot populate path `' + path + '` because it is not in your schema. ' + 'Set the `strictPopulate` option to false to override.';
22
+ super(msg);
23
+ this.path = path;
24
+ }
25
+ }
26
+
27
+ Object.defineProperty(StrictPopulateError.prototype, 'name', {
28
+ value: 'StrictPopulateError'
29
+ });
30
+
31
+ module.exports = StrictPopulateError;
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ /*!
4
+ * Module dependencies.
5
+ */
6
+
7
+ const MongooseError = require('./mongooseError');
8
+
9
+ /**
10
+ * SyncIndexes Error constructor.
11
+ *
12
+ * @param {String} message
13
+ * @param {String} errorsMap
14
+ * @inherits MongooseError
15
+ * @api private
16
+ */
17
+
18
+ class SyncIndexesError extends MongooseError {
19
+ constructor(message, errorsMap) {
20
+ super(message);
21
+ this.errors = errorsMap;
22
+ }
23
+ }
24
+
25
+ Object.defineProperty(SyncIndexesError.prototype, 'name', {
26
+ value: 'SyncIndexesError'
27
+ });
28
+
29
+
30
+ module.exports = SyncIndexesError;
@@ -0,0 +1,97 @@
1
+ /*!
2
+ * Module requirements
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const MongooseError = require('./mongooseError');
8
+ const getConstructorName = require('../helpers/getConstructorName');
9
+ const util = require('util');
10
+ const combinePathErrors = require('../helpers/error/combinePathErrors');
11
+
12
+ /**
13
+ * Document Validation Error
14
+ *
15
+ * @api private
16
+ * @param {Document} [instance]
17
+ * @inherits MongooseError
18
+ */
19
+
20
+ class ValidationError extends MongooseError {
21
+
22
+ constructor(instance) {
23
+ let _message;
24
+ if (getConstructorName(instance) === 'model') {
25
+ _message = instance.constructor.modelName + ' validation failed';
26
+ } else {
27
+ _message = 'Validation failed';
28
+ }
29
+
30
+ super(_message);
31
+
32
+ this.errors = {};
33
+ this._message = _message;
34
+
35
+ if (instance) {
36
+ instance.$errors = this.errors;
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Console.log helper
42
+ */
43
+ toString() {
44
+ return this.name + ': ' + combinePathErrors(this);
45
+ }
46
+
47
+ /**
48
+ * add message
49
+ * @param {String} path
50
+ * @param {String|Error} error
51
+ * @api private
52
+ */
53
+ addError(path, error) {
54
+ if (error instanceof ValidationError) {
55
+ const { errors } = error;
56
+ for (const errorPath of Object.keys(errors)) {
57
+ this.addError(`${path}.${errorPath}`, errors[errorPath]);
58
+ }
59
+
60
+ return;
61
+ }
62
+
63
+ this.errors[path] = error;
64
+ this.message = this._message + ': ' + combinePathErrors(this);
65
+ }
66
+ }
67
+
68
+
69
+ if (util.inspect.custom) {
70
+ // Avoid Node deprecation warning DEP0079
71
+ ValidationError.prototype[util.inspect.custom] = ValidationError.prototype.inspect;
72
+ }
73
+
74
+ /**
75
+ * Helper for JSON.stringify
76
+ * Ensure `name` and `message` show up in toJSON output re: gh-9847
77
+ * @api private
78
+ */
79
+ Object.defineProperty(ValidationError.prototype, 'toJSON', {
80
+ enumerable: false,
81
+ writable: false,
82
+ configurable: true,
83
+ value: function() {
84
+ return Object.assign({}, this, { name: this.name, message: this.message });
85
+ }
86
+ });
87
+
88
+
89
+ Object.defineProperty(ValidationError.prototype, 'name', {
90
+ value: 'ValidationError'
91
+ });
92
+
93
+ /*!
94
+ * Module exports
95
+ */
96
+
97
+ module.exports = ValidationError;
@@ -0,0 +1,100 @@
1
+ /*!
2
+ * Module dependencies.
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const MongooseError = require('./mongooseError');
8
+
9
+ /**
10
+ * Schema validator error
11
+ *
12
+ * @param {Object} properties
13
+ * @param {Document} doc
14
+ * @api private
15
+ */
16
+
17
+ class ValidatorError extends MongooseError {
18
+
19
+ constructor(properties, doc) {
20
+ let msg = properties.message;
21
+ if (!msg) {
22
+ msg = MongooseError.messages.general.default;
23
+ }
24
+
25
+ const message = formatMessage(msg, properties, doc);
26
+ super(message);
27
+
28
+ properties = Object.assign({}, properties, { message: message });
29
+ this.properties = properties;
30
+ this.kind = properties.type;
31
+ this.path = properties.path;
32
+ this.value = properties.value;
33
+ this.reason = properties.reason;
34
+ }
35
+
36
+ /**
37
+ * toString helper
38
+ * TODO remove? This defaults to `${this.name}: ${this.message}`
39
+ * @api private
40
+ */
41
+ toString() {
42
+ return this.message;
43
+ }
44
+
45
+ /**
46
+ * Ensure `name` and `message` show up in toJSON output re: gh-9296
47
+ * @api private
48
+ */
49
+
50
+ toJSON() {
51
+ return Object.assign({ name: this.name, message: this.message }, this);
52
+ }
53
+ }
54
+
55
+
56
+ Object.defineProperty(ValidatorError.prototype, 'name', {
57
+ value: 'ValidatorError'
58
+ });
59
+
60
+ /**
61
+ * The object used to define this validator. Not enumerable to hide
62
+ * it from `require('util').inspect()` output re: gh-3925
63
+ * @api private
64
+ */
65
+
66
+ Object.defineProperty(ValidatorError.prototype, 'properties', {
67
+ enumerable: false,
68
+ writable: true,
69
+ value: null
70
+ });
71
+
72
+ // Exposed for testing
73
+ ValidatorError.prototype.formatMessage = formatMessage;
74
+
75
+ /**
76
+ * Formats error messages
77
+ * @api private
78
+ */
79
+
80
+ function formatMessage(msg, properties, doc) {
81
+ if (typeof msg === 'function') {
82
+ return msg(properties, doc);
83
+ }
84
+
85
+ const propertyNames = Object.keys(properties);
86
+ for (const propertyName of propertyNames) {
87
+ if (propertyName === 'message') {
88
+ continue;
89
+ }
90
+ msg = msg.replace('{' + propertyName.toUpperCase() + '}', properties[propertyName]);
91
+ }
92
+
93
+ return msg;
94
+ }
95
+
96
+ /*!
97
+ * exports
98
+ */
99
+
100
+ module.exports = ValidatorError;
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ /*!
4
+ * Module dependencies.
5
+ */
6
+
7
+ const MongooseError = require('./mongooseError');
8
+
9
+ /**
10
+ * Version Error constructor.
11
+ *
12
+ * @param {Document} doc
13
+ * @param {Number} currentVersion
14
+ * @param {Array<String>} modifiedPaths
15
+ * @api private
16
+ */
17
+
18
+ class VersionError extends MongooseError {
19
+
20
+ constructor(doc, currentVersion, modifiedPaths) {
21
+ const modifiedPathsStr = modifiedPaths.join(', ');
22
+ super('No matching document found for id "' + doc._doc._id +
23
+ '" version ' + currentVersion + ' modifiedPaths "' + modifiedPathsStr + '"');
24
+ this.version = currentVersion;
25
+ this.modifiedPaths = modifiedPaths;
26
+ }
27
+ }
28
+
29
+
30
+ Object.defineProperty(VersionError.prototype, 'name', {
31
+ value: 'VersionError'
32
+ });
33
+
34
+ /*!
35
+ * exports
36
+ */
37
+
38
+ module.exports = VersionError;
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ module.exports = function prepareDiscriminatorPipeline(pipeline, schema, prefix) {
4
+ const discriminatorMapping = schema?.discriminatorMapping;
5
+ prefix = prefix || '';
6
+
7
+ if (discriminatorMapping && !discriminatorMapping.isRoot) {
8
+ const originalPipeline = pipeline;
9
+ const filterKey = (prefix.length > 0 ? prefix + '.' : prefix) + discriminatorMapping.key;
10
+ const discriminatorValue = discriminatorMapping.value;
11
+
12
+ // If the first pipeline stage is a match and it doesn't specify a `__t`
13
+ // key, add the discriminator key to it. This allows for potential
14
+ // aggregation query optimizations not to be disturbed by this feature.
15
+ if (originalPipeline[0] != null &&
16
+ originalPipeline[0].$match &&
17
+ (originalPipeline[0].$match[filterKey] === undefined || originalPipeline[0].$match[filterKey] === discriminatorValue)) {
18
+ originalPipeline[0].$match[filterKey] = discriminatorValue;
19
+ // `originalPipeline` is a ref, so there's no need for
20
+ // aggregate._pipeline = originalPipeline
21
+ } else if (originalPipeline[0]?.$geoNear) {
22
+ originalPipeline[0].$geoNear.query =
23
+ originalPipeline[0].$geoNear.query || {};
24
+ originalPipeline[0].$geoNear.query[filterKey] = discriminatorValue;
25
+ } else if (originalPipeline[0]?.$search) {
26
+ if (originalPipeline[1]?.$match != null) {
27
+ originalPipeline[1].$match[filterKey] = originalPipeline[1].$match[filterKey] || discriminatorValue;
28
+ } else {
29
+ const match = {};
30
+ match[filterKey] = discriminatorValue;
31
+ originalPipeline.splice(1, 0, { $match: match });
32
+ }
33
+ } else {
34
+ const match = {};
35
+ match[filterKey] = discriminatorValue;
36
+ originalPipeline.unshift({ $match: match });
37
+ }
38
+ }
39
+ };