@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,201 @@
1
+ 'use strict';
2
+
3
+ /*!
4
+ * ignore
5
+ */
6
+
7
+ const MongooseMap = require('../types/map');
8
+ const SchemaMapOptions = require('../options/schemaMapOptions');
9
+ const SchemaType = require('../schemaType');
10
+ const createJSONSchemaTypeDefinition = require('../helpers/createJSONSchemaTypeDefinition');
11
+ const MongooseError = require('../error/mongooseError');
12
+ const Schema = require('../schema');
13
+ const utils = require('../utils');
14
+
15
+ class SchemaMap extends SchemaType {
16
+ /**
17
+ * Map SchemaType constructor.
18
+ *
19
+ * @param {String} path
20
+ * @param {Object} options
21
+ * @param {Object} schemaOptions
22
+ * @param {Schema} parentSchema
23
+ * @inherits SchemaType
24
+ * @api public
25
+ */
26
+
27
+ constructor(key, options, schemaOptions, parentSchema) {
28
+ super(key, options, 'Map', parentSchema);
29
+ this.$isSchemaMap = true;
30
+ // Create the nested schema type for the map values
31
+ this._createNestedSchemaType(parentSchema, key, options, schemaOptions);
32
+ }
33
+
34
+ /**
35
+ * Sets a default option for all Map instances.
36
+ *
37
+ * @param {String} option The option you'd like to set the value for
38
+ * @param {Any} value value for option
39
+ * @return {undefined}
40
+ * @function set
41
+ * @api public
42
+ */
43
+
44
+ set(option, value) {
45
+ return SchemaType.set(option, value);
46
+ }
47
+
48
+ /**
49
+ * Casts to Map
50
+ *
51
+ * @param {Object} value
52
+ * @param {Object} model this value is optional
53
+ * @api private
54
+ */
55
+
56
+ cast(val, doc, init, prev, options) {
57
+ if (val instanceof MongooseMap) {
58
+ return val;
59
+ }
60
+
61
+ const path = this.path;
62
+
63
+ if (init) {
64
+ const map = new MongooseMap({}, path, doc, this.$__schemaType, options);
65
+
66
+ // Use the map's path for passing to nested casts.
67
+ // If map's parent is a subdocument, use the relative path so nested casts get relative paths.
68
+ const mapPath = map.$__pathRelativeToParent != null ? map.$__pathRelativeToParent : map.$__path;
69
+
70
+ if (val instanceof global.Map) {
71
+ for (const key of val.keys()) {
72
+ let _val = val.get(key);
73
+ if (_val == null) {
74
+ _val = map.$__schemaType._castNullish(_val);
75
+ } else {
76
+ _val = map.$__schemaType.cast(_val, doc, true, null, { ...options, path: mapPath + '.' + key });
77
+ }
78
+ map.$init(key, _val);
79
+ }
80
+ } else {
81
+ for (const key of Object.keys(val)) {
82
+ let _val = val[key];
83
+ if (_val == null) {
84
+ _val = map.$__schemaType._castNullish(_val);
85
+ } else {
86
+ _val = map.$__schemaType.cast(_val, doc, true, null, { ...options, path: mapPath + '.' + key });
87
+ }
88
+ map.$init(key, _val);
89
+ }
90
+ }
91
+
92
+ return map;
93
+ }
94
+
95
+ return new MongooseMap(val, path, doc, this.$__schemaType, options);
96
+ }
97
+
98
+ /**
99
+ * Creates a copy of this map schema type.
100
+ *
101
+ * @api private
102
+ */
103
+
104
+ clone() {
105
+ const schematype = super.clone();
106
+
107
+ if (this.$__schemaType != null) {
108
+ schematype.$__schemaType = this.$__schemaType.clone();
109
+ }
110
+ return schematype;
111
+ }
112
+
113
+ /**
114
+ * Returns the embedded schema type (i.e. the `.$*` path)
115
+ *
116
+ * @api public
117
+ */
118
+
119
+ getEmbeddedSchemaType() {
120
+ return this.$__schemaType;
121
+ }
122
+
123
+ /**
124
+ * Returns this schema type's representation in a JSON schema.
125
+ *
126
+ * @param [options]
127
+ * @param [options.useBsonType=false] If true, return a representation with `bsonType` for use with MongoDB's `$jsonSchema`.
128
+ * @returns {Object} JSON schema properties
129
+ */
130
+
131
+ toJSONSchema(options) {
132
+ const useBsonType = options?.useBsonType;
133
+ const embeddedSchemaType = this.getEmbeddedSchemaType();
134
+
135
+ const isRequired = this.options.required && typeof this.options.required !== 'function';
136
+ const result = createJSONSchemaTypeDefinition('object', 'object', useBsonType, isRequired);
137
+ result.additionalProperties = embeddedSchemaType.toJSONSchema(options);
138
+
139
+ return result;
140
+ }
141
+
142
+ /**
143
+ * Returns the auto encryption type for this schema type.
144
+ *
145
+ * @api public
146
+ */
147
+
148
+ autoEncryptionType() {
149
+ return 'object';
150
+ }
151
+ }
152
+
153
+ /**
154
+ * This schema type's name, to defend against minifiers that mangle
155
+ * function names.
156
+ *
157
+ * @api public
158
+ */
159
+
160
+ SchemaMap.schemaName = 'Map';
161
+
162
+ SchemaMap.prototype.OptionsConstructor = SchemaMapOptions;
163
+
164
+ SchemaMap.defaultOptions = {};
165
+
166
+ /*!
167
+ * ignore
168
+ */
169
+
170
+ SchemaMap.prototype._createNestedSchemaType = function _createNestedSchemaType(schema, path, obj, options) {
171
+ const mapPath = path + '.$*';
172
+ let _mapType = { type: {} };
173
+ if (utils.hasUserDefinedProperty(obj, 'of')) {
174
+ const isInlineSchema = utils.isPOJO(obj.of) &&
175
+ utils.hasOwnKeys(obj.of) &&
176
+ !utils.hasUserDefinedProperty(obj.of, schema.options.typeKey);
177
+ if (isInlineSchema) {
178
+ _mapType = { [schema.options.typeKey]: new Schema(obj.of) };
179
+ } else if (utils.isPOJO(obj.of)) {
180
+ _mapType = Object.assign({}, obj.of);
181
+ } else {
182
+ _mapType = { [schema.options.typeKey]: obj.of };
183
+ }
184
+
185
+ if (_mapType[schema.options.typeKey] && _mapType[schema.options.typeKey].instanceOfSchema) {
186
+ const subdocumentSchema = _mapType[schema.options.typeKey];
187
+ subdocumentSchema.eachPath((subpath, type) => {
188
+ if (type.options.select === true || type.options.select === false) {
189
+ throw new MongooseError('Cannot use schema-level projections (`select: true` or `select: false`) within maps at path "' + path + '.' + subpath + '"');
190
+ }
191
+ });
192
+ }
193
+
194
+ if (utils.hasUserDefinedProperty(obj, 'ref')) {
195
+ _mapType.ref = obj.ref;
196
+ }
197
+ }
198
+ this.$__schemaType = schema.interpretAsType(mapPath, _mapType, options);
199
+ };
200
+
201
+ module.exports = SchemaMap;
@@ -0,0 +1,146 @@
1
+ /*!
2
+ * Module dependencies.
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ const SchemaType = require('../schemaType');
8
+ const symbols = require('./symbols');
9
+ const isObject = require('../helpers/isObject');
10
+ const utils = require('../utils');
11
+
12
+ /**
13
+ * Mixed 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 SchemaMixed(path, options, _schemaOptions, parentSchema) {
24
+ if (options?.default) {
25
+ const def = options.default;
26
+ if (Array.isArray(def) && def.length === 0) {
27
+ // make sure empty array defaults are handled
28
+ options.default = Array;
29
+ } else if (!options.shared && isObject(def) && utils.hasOwnKeys(def) === false) {
30
+ // prevent odd "shared" objects between documents
31
+ options.default = function() {
32
+ return {};
33
+ };
34
+ }
35
+ }
36
+
37
+ SchemaType.call(this, path, options, 'Mixed', parentSchema);
38
+
39
+ this[symbols.schemaMixedSymbol] = true;
40
+ }
41
+
42
+ /**
43
+ * This schema type's name, to defend against minifiers that mangle
44
+ * function names.
45
+ *
46
+ * @api public
47
+ */
48
+ SchemaMixed.schemaName = 'Mixed';
49
+
50
+ SchemaMixed.defaultOptions = {};
51
+
52
+ /*!
53
+ * Inherits from SchemaType.
54
+ */
55
+ SchemaMixed.prototype = Object.create(SchemaType.prototype);
56
+ SchemaMixed.prototype.constructor = SchemaMixed;
57
+
58
+ /**
59
+ * Attaches a getter for all Mixed paths.
60
+ *
61
+ * #### Example:
62
+ *
63
+ * // Hide the 'hidden' path
64
+ * mongoose.Schema.Types.Mixed.get(v => Object.assign({}, v, { hidden: null }));
65
+ *
66
+ * const Model = mongoose.model('Test', new Schema({ test: {} }));
67
+ * new Model({ test: { hidden: 'Secret!' } }).test.hidden; // null
68
+ *
69
+ * @param {Function} getter
70
+ * @return {this}
71
+ * @function get
72
+ * @static
73
+ * @api public
74
+ */
75
+
76
+ SchemaMixed.get = SchemaType.get;
77
+
78
+ /**
79
+ * Sets a default option for all Mixed instances.
80
+ *
81
+ * #### Example:
82
+ *
83
+ * // Make all mixed instances have `required` of true by default.
84
+ * mongoose.Schema.Types.Mixed.set('required', true);
85
+ *
86
+ * const User = mongoose.model('User', new Schema({ test: mongoose.Mixed }));
87
+ * new User({ }).validateSync().errors.test.message; // Path `test` is required.
88
+ *
89
+ * @param {String} option The option you'd like to set the value for
90
+ * @param {Any} value value for option
91
+ * @return {undefined}
92
+ * @function set
93
+ * @static
94
+ * @api public
95
+ */
96
+
97
+ SchemaMixed.set = SchemaType.set;
98
+
99
+ SchemaMixed.setters = [];
100
+
101
+ /**
102
+ * Casts `val` for Mixed.
103
+ *
104
+ * _this is a no-op_
105
+ *
106
+ * @param {Object} value to cast
107
+ * @api private
108
+ */
109
+
110
+ SchemaMixed.prototype.cast = function(val) {
111
+ if (val instanceof Error) {
112
+ return utils.errorToPOJO(val);
113
+ }
114
+ return val;
115
+ };
116
+
117
+ /**
118
+ * Casts contents for queries.
119
+ *
120
+ * @param {String} $cond
121
+ * @param {any} [val]
122
+ * @api private
123
+ */
124
+
125
+ SchemaMixed.prototype.castForQuery = function($cond, val) {
126
+ return val;
127
+ };
128
+
129
+ /**
130
+ * Returns this schema type's representation in a JSON schema.
131
+ *
132
+ * @param [options]
133
+ * @param [options.useBsonType=false] If true, return a representation with `bsonType` for use with MongoDB's `$jsonSchema`.
134
+ * @returns {Object} JSON schema properties
135
+ */
136
+
137
+ // eslint-disable-next-line no-unused-vars
138
+ SchemaMixed.prototype.toJSONSchema = function toJSONSchema(_options) {
139
+ return {};
140
+ };
141
+
142
+ /*!
143
+ * Module exports.
144
+ */
145
+
146
+ module.exports = SchemaMixed;