@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,193 @@
1
+ 'use strict';
2
+
3
+ /*!
4
+ * Module dependencies.
5
+ */
6
+
7
+ const ValidationError = require('../error/validation');
8
+ const cleanPositionalOperators = require('./schema/cleanPositionalOperators');
9
+ const flatten = require('./common').flatten;
10
+
11
+ /**
12
+ * Applies validators and defaults to update and findOneAndUpdate operations,
13
+ * specifically passing a null doc as `this` to validators and defaults
14
+ *
15
+ * @param {Query} query
16
+ * @param {Schema} schema
17
+ * @param {Object} castedDoc
18
+ * @param {Object} options
19
+ * @method runValidatorsOnUpdate
20
+ * @api private
21
+ */
22
+
23
+ module.exports = async function updateValidators(query, schema, castedDoc, options) {
24
+ const keys = Object.keys(castedDoc || {});
25
+ let updatedKeys = {};
26
+ let updatedValues = {};
27
+ const isPull = {};
28
+ const arrayAtomicUpdates = {};
29
+ const numKeys = keys.length;
30
+ let hasDollarUpdate = false;
31
+ let currentUpdate;
32
+ let key;
33
+
34
+ for (let i = 0; i < numKeys; ++i) {
35
+ if (keys[i].startsWith('$')) {
36
+ hasDollarUpdate = true;
37
+ if (keys[i] === '$push' || keys[i] === '$addToSet') {
38
+ const _keys = Object.keys(castedDoc[keys[i]]);
39
+ for (let ii = 0; ii < _keys.length; ++ii) {
40
+ currentUpdate = castedDoc[keys[i]][_keys[ii]];
41
+ if (currentUpdate?.$each) {
42
+ arrayAtomicUpdates[_keys[ii]] = (arrayAtomicUpdates[_keys[ii]] || []).
43
+ concat(currentUpdate.$each);
44
+ } else {
45
+ arrayAtomicUpdates[_keys[ii]] = (arrayAtomicUpdates[_keys[ii]] || []).
46
+ concat([currentUpdate]);
47
+ }
48
+ }
49
+ continue;
50
+ }
51
+ const flat = flatten(castedDoc[keys[i]], null, null, schema);
52
+ const paths = Object.keys(flat);
53
+ const numPaths = paths.length;
54
+ for (let j = 0; j < numPaths; ++j) {
55
+ const updatedPath = cleanPositionalOperators(paths[j]);
56
+ key = keys[i];
57
+ // With `$pull` we might flatten `$in`. Skip stuff nested under `$in`
58
+ // for the rest of the logic, it will get handled later.
59
+ if (updatedPath.includes('$')) {
60
+ continue;
61
+ }
62
+ if (key === '$set' || key === '$setOnInsert' ||
63
+ key === '$pull' || key === '$pullAll') {
64
+ updatedValues[updatedPath] = flat[paths[j]];
65
+ isPull[updatedPath] = key === '$pull' || key === '$pullAll';
66
+ } else if (key === '$unset') {
67
+ updatedValues[updatedPath] = undefined;
68
+ }
69
+ updatedKeys[updatedPath] = true;
70
+ }
71
+ }
72
+ }
73
+
74
+ if (!hasDollarUpdate) {
75
+ updatedValues = flatten(castedDoc, null, null, schema);
76
+ updatedKeys = Object.keys(updatedValues);
77
+ }
78
+
79
+ const updates = Object.keys(updatedValues);
80
+ const numUpdates = updates.length;
81
+ const validatorsToExecute = [];
82
+ const validationErrors = [];
83
+
84
+ const alreadyValidated = [];
85
+
86
+ const context = query;
87
+ for (let i = 0; i < numUpdates; ++i) {
88
+ const v = updatedValues[updates[i]];
89
+ const schemaPath = schema._getSchema(updates[i]);
90
+ if (schemaPath == null) {
91
+ continue;
92
+ }
93
+ if (schemaPath.instance === 'Mixed' && schemaPath.path !== updates[i]) {
94
+ continue;
95
+ }
96
+
97
+ if (v && Array.isArray(v.$in)) {
98
+ v.$in.forEach((v, i) => {
99
+ validatorsToExecute.push(
100
+ schemaPath.doValidate(v, context, { updateValidator: true }).catch(err => {
101
+ err.path = updates[i] + '.$in.' + i;
102
+ validationErrors.push(err);
103
+ })
104
+ );
105
+ });
106
+ } else {
107
+ if (isPull[updates[i]] &&
108
+ schemaPath.$isMongooseArray) {
109
+ continue;
110
+ }
111
+
112
+ if (schemaPath.$isMongooseDocumentArrayElement && v?.$__ != null) {
113
+ alreadyValidated.push(updates[i]);
114
+ validatorsToExecute.push(
115
+ schemaPath.doValidate(v, context, { updateValidator: true }).catch(err => {
116
+ if (err.errors) {
117
+ for (const key of Object.keys(err.errors)) {
118
+ const _err = err.errors[key];
119
+ _err.path = updates[i] + '.' + key;
120
+ validationErrors.push(_err);
121
+ }
122
+ } else {
123
+ err.path = updates[i];
124
+ validationErrors.push(err);
125
+ }
126
+ })
127
+ );
128
+ } else {
129
+ const isAlreadyValidated = alreadyValidated.find(path => updates[i].startsWith(path + '.'));
130
+ if (isAlreadyValidated) {
131
+ continue;
132
+ }
133
+ if (schemaPath.$isSingleNested) {
134
+ alreadyValidated.push(updates[i]);
135
+ }
136
+ validatorsToExecute.push(
137
+ schemaPath.doValidate(v, context, { updateValidator: true }).catch(err => {
138
+ if (schemaPath.schema != null &&
139
+ schemaPath.schema.options.storeSubdocValidationError === false &&
140
+ err instanceof ValidationError) {
141
+ return;
142
+ }
143
+
144
+ if (err) {
145
+ err.path = updates[i];
146
+ validationErrors.push(err);
147
+ }
148
+ })
149
+ );
150
+ }
151
+ }
152
+ }
153
+
154
+ const arrayUpdates = Object.keys(arrayAtomicUpdates);
155
+ for (const arrayUpdate of arrayUpdates) {
156
+ let schemaPath = schema._getSchema(arrayUpdate);
157
+ if (schemaPath && schemaPath.$isMongooseDocumentArray) {
158
+ validatorsToExecute.push(
159
+ schemaPath.doValidate(
160
+ arrayAtomicUpdates[arrayUpdate],
161
+ options?.context === 'query' ? query : null
162
+ ).catch(err => {
163
+ err.path = arrayUpdate;
164
+ validationErrors.push(err);
165
+ })
166
+ );
167
+ } else {
168
+ schemaPath = schema._getSchema(arrayUpdate + '.0');
169
+ for (const atomicUpdate of arrayAtomicUpdates[arrayUpdate]) {
170
+ validatorsToExecute.push(
171
+ schemaPath.doValidate(
172
+ atomicUpdate,
173
+ options?.context === 'query' ? query : null,
174
+ { updateValidator: true }
175
+ ).catch(err => {
176
+ err.path = arrayUpdate;
177
+ validationErrors.push(err);
178
+ })
179
+ );
180
+ }
181
+ }
182
+ }
183
+
184
+ await Promise.all(validatorsToExecute);
185
+ if (validationErrors.length) {
186
+ const err = new ValidationError(null);
187
+
188
+ for (const validationError of validationErrors) {
189
+ err.addError(validationError.path, validationError);
190
+ }
191
+ throw err;
192
+ }
193
+ };
package/lib/index.js ADDED
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ /*!
4
+ * Module dependencies.
5
+ */
6
+
7
+ const mongodbDriver = require('./drivers/node-mongodb-native');
8
+
9
+ require('./driver').set(mongodbDriver);
10
+
11
+ const mongoose = require('./mongoose');
12
+
13
+ mongoose.setDriver(mongodbDriver);
14
+
15
+ mongoose.Mongoose.prototype.mongo = require('mongodb');
16
+
17
+ module.exports = mongoose;
@@ -0,0 +1,46 @@
1
+ /*!
2
+ * Dependencies
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const StateMachine = require('./stateMachine');
8
+ const ActiveRoster = StateMachine.ctor('require', 'modify', 'init', 'default', 'ignore');
9
+
10
+ module.exports = exports = InternalCache;
11
+
12
+ function InternalCache() {
13
+ this.activePaths = new ActiveRoster();
14
+ }
15
+
16
+ InternalCache.prototype.strictMode = true;
17
+
18
+ InternalCache.prototype.fullPath = undefined;
19
+ InternalCache.prototype.selected = undefined;
20
+ InternalCache.prototype.shardval = undefined;
21
+ InternalCache.prototype.saveError = undefined;
22
+ InternalCache.prototype.validationError = undefined;
23
+ InternalCache.prototype.adhocPaths = undefined;
24
+ InternalCache.prototype.removing = undefined;
25
+ InternalCache.prototype.inserting = undefined;
26
+ InternalCache.prototype.saving = undefined;
27
+ InternalCache.prototype.version = undefined;
28
+ InternalCache.prototype._id = undefined;
29
+ InternalCache.prototype.ownerDocument = undefined;
30
+ InternalCache.prototype.populate = undefined; // what we want to populate in this doc
31
+ InternalCache.prototype.populated = undefined;// the _ids that have been populated
32
+ InternalCache.prototype.primitiveAtomics = undefined;
33
+
34
+ /**
35
+ * If `false`, this document was not the result of population.
36
+ * If `true`, this document is a populated doc underneath another doc
37
+ * If an object, this document is a populated doc and the `value` property of the
38
+ * object contains the original depopulated value.
39
+ */
40
+ InternalCache.prototype.wasPopulated = false;
41
+
42
+ InternalCache.prototype.scope = undefined;
43
+
44
+ InternalCache.prototype.session = null;
45
+ InternalCache.prototype.pathsToScopes = null;
46
+ InternalCache.prototype.cachedRequired = null;