@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,109 @@
1
+
2
+ declare module 'mongoose' {
3
+ import mongodb = require('mongodb');
4
+
5
+ class NativeBuffer extends Buffer {}
6
+
7
+ namespace Types {
8
+ class Array<T> extends global.Array<T> {
9
+ /** Pops the array atomically at most one time per document `save()`. */
10
+ $pop(): T;
11
+
12
+ /** Atomically shifts the array at most one time per document `save()`. */
13
+ $shift(): T;
14
+
15
+ /** Adds values to the array if not already present. */
16
+ addToSet(...args: any[]): any[];
17
+
18
+ isMongooseArray: true;
19
+
20
+ /** Pushes items to the array non-atomically. */
21
+ nonAtomicPush(...args: any[]): number;
22
+
23
+ /** Wraps [`Array#push`](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/push) with proper change tracking. */
24
+ push(...args: any[]): number;
25
+
26
+ /**
27
+ * Pulls items from the array atomically. Equality is determined by casting
28
+ * the provided value to an embedded document and comparing using
29
+ * [the `Document.equals()` function.](./api/document.html#document_Document-equals)
30
+ */
31
+ pull(...args: any[]): this;
32
+
33
+ /**
34
+ * Alias of [pull](#mongoosearray_MongooseArray-pull)
35
+ */
36
+ remove(...args: any[]): this;
37
+
38
+ /** Sets the casted `val` at index `i` and marks the array modified. */
39
+ set(index: number, val: T): this;
40
+
41
+ /** Atomically shifts the array at most one time per document `save()`. */
42
+ shift(): T;
43
+
44
+ /** Returns a native js Array. */
45
+ toObject(options?: ToObjectOptions): any;
46
+ toObject<T>(options?: ToObjectOptions<T>): T;
47
+
48
+ /** Wraps [`Array#unshift`](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/unshift) with proper change tracking. */
49
+ unshift(...args: any[]): number;
50
+ }
51
+
52
+ class Buffer extends NativeBuffer {
53
+ /** Sets the subtype option and marks the buffer modified. */
54
+ subtype(subtype: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 128 | ToObjectOptions): void;
55
+
56
+ /** Converts this buffer to its Binary type representation. */
57
+ toObject(subtype?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 128): mongodb.Binary;
58
+ }
59
+
60
+ class Decimal128 extends mongodb.Decimal128 { }
61
+
62
+ class DocumentArray<T, THydratedDocumentType extends Types.Subdocument<any, any, any> = Types.Subdocument<InferId<T>, unknown, T> & T> extends Types.Array<THydratedDocumentType> {
63
+ /** DocumentArray constructor */
64
+ constructor(values: AnyObject[]);
65
+
66
+ isMongooseDocumentArray: true;
67
+
68
+ /** Creates a subdocument casted to this schema. */
69
+ create(obj: any): THydratedDocumentType;
70
+
71
+ /** Searches array items for the first document with a matching _id. */
72
+ id(id: ObjectId | string | number | Buffer): THydratedDocumentType | null;
73
+
74
+ push(...args: (AnyKeys<T> & AnyObject)[]): number;
75
+
76
+ splice(start: number, deleteCount?: number, ...args: (AnyKeys<T> & AnyObject)[]): THydratedDocumentType[];
77
+ }
78
+
79
+ class Map<V> extends global.Map<string, V> {
80
+ /** Converts a Mongoose map into a vanilla JavaScript map. */
81
+ toObject(options?: ToObjectOptions & { flattenMaps?: boolean }): any;
82
+ }
83
+
84
+ class ObjectId extends mongodb.ObjectId {
85
+ }
86
+
87
+ class Subdocument<IdType = any, TQueryHelpers = any, DocType = any> extends Document<IdType, TQueryHelpers, DocType> {
88
+ $isSingleNested: true;
89
+
90
+ /** Returns the top level document of this sub-document. */
91
+ ownerDocument(): Document;
92
+
93
+ /** Returns this sub-documents parent document. */
94
+ parent(): Document;
95
+
96
+ /** Returns this sub-documents parent document. */
97
+ $parent(): Document;
98
+ }
99
+
100
+ class ArraySubdocument<IdType = any, TQueryHelpers = unknown, DocType = unknown> extends Subdocument<IdType, TQueryHelpers, DocType> {
101
+ /** Returns this sub-documents parent array. */
102
+ parentArray(): Types.DocumentArray<unknown>;
103
+ }
104
+
105
+ class UUID extends mongodb.UUID {}
106
+
107
+ class Double extends mongodb.Double {}
108
+ }
109
+ }
@@ -0,0 +1,175 @@
1
+ declare module 'mongoose' {
2
+ type IfAny<IFTYPE, THENTYPE, ELSETYPE = IFTYPE> = 0 extends 1 & IFTYPE
3
+ ? THENTYPE
4
+ : ELSETYPE;
5
+ type IsUnknown<T> = unknown extends T ? true : false;
6
+
7
+ type IsNotNever<T> = [T] extends [never] ? false : true;
8
+ type IsAny<T> = 0 extends 1 & T ? true : false;
9
+
10
+ type WithLevel1NestedPaths<T, K extends keyof T = keyof T> = IsItRecordAndNotAny<T> extends true ? {
11
+ [P in K | NestedPaths<Required<T>, K>]: P extends K
12
+ // Handle top-level paths
13
+ // First, drill into documents so we don't end up surfacing `$assertPopulated`, etc.
14
+ ? Extract<NonNullable<T[P]>, Document> extends never
15
+ // If not a document, then return the type. Otherwise, get the DocType.
16
+ ? NonNullable<T[P]>
17
+ : Extract<NonNullable<T[P]>, Document> extends Document<any, any, infer DocType, any>
18
+ ? DocType | Exclude<NonNullable<T[P]>, Document>
19
+ : never
20
+ // Handle nested paths
21
+ : P extends `${infer Key}.${infer Rest}`
22
+ ? Key extends keyof T
23
+ ? NonNullable<T[Key]> extends (infer U)[]
24
+ ? NonNullable<T[Key]> extends Types.DocumentArray<infer TRawDocType>
25
+ ? Rest extends keyof NonNullable<TRawDocType>
26
+ ? NonNullable<TRawDocType>[Rest]
27
+ : never
28
+ : Rest extends keyof NonNullable<U>
29
+ ? NonNullable<U>[Rest]
30
+ : never
31
+ : Rest extends keyof NonNullable<T[Key]>
32
+ ? NonNullable<T[Key]>[Rest]
33
+ : never
34
+ : never
35
+ : never;
36
+ } : T;
37
+
38
+ type HasStringIndex<T> =
39
+ string extends Extract<keyof T, string> ? true : false;
40
+
41
+ type SafeObjectKeys<T> =
42
+ HasStringIndex<T> extends true ? never : Extract<keyof T, string>;
43
+
44
+ type NestedPaths<T, K extends keyof T> =
45
+ K extends string
46
+ ? T[K] extends TreatAsPrimitives
47
+ ? never
48
+ : Extract<NonNullable<T[K]>, Document> extends never
49
+ ? NonNullable<T[K]> extends Array<infer U>
50
+ ? NonNullable<T[K]> extends Types.DocumentArray<infer TRawDocType>
51
+ ? SafeObjectKeys<NonNullable<TRawDocType>> extends never
52
+ ? never
53
+ : `${K}.${SafeObjectKeys<NonNullable<TRawDocType>>}`
54
+ : NonNullable<U> extends Record<string, any>
55
+ ? SafeObjectKeys<NonNullable<U>> extends never
56
+ ? never
57
+ : `${K}.${SafeObjectKeys<NonNullable<U>>}`
58
+ : never
59
+ : NonNullable<T[K]> extends object
60
+ ? SafeObjectKeys<NonNullable<T[K]>> extends never
61
+ ? never
62
+ : `${K}.${SafeObjectKeys<NonNullable<T[K]>>}`
63
+ : never
64
+ : Extract<NonNullable<T[K]>, Document> extends Document<any, any, infer DocType, any>
65
+ ? DocType extends object
66
+ ? SafeObjectKeys<NonNullable<DocType>> extends never
67
+ ? never
68
+ : `${K}.${SafeObjectKeys<NonNullable<DocType>>}`
69
+ : never
70
+ : never
71
+ : never;
72
+
73
+ type WithoutUndefined<T> = T extends undefined ? never : T;
74
+
75
+ /**
76
+ * @summary Removes keys from a type
77
+ * @description It helps to exclude keys from a type
78
+ * @param {T} T A generic type to be checked.
79
+ * @param {K} K Keys from T that are to be excluded from the generic type
80
+ * @returns T with the keys in K excluded
81
+ */
82
+ type ExcludeKeys<T, K extends keyof T> = {
83
+ [P in keyof T as P extends K ? never : P]: T[P];
84
+ };
85
+
86
+ type Unpacked<T> = T extends (infer U)[]
87
+ ? U
88
+ : T extends ReadonlyArray<infer U>
89
+ ? U
90
+ : T;
91
+
92
+ type DeepPartial<T> =
93
+ T extends TreatAsPrimitives ? T :
94
+ T extends Array<infer U> ? DeepPartial<U>[] :
95
+ T extends Record<string, any> ? { [K in keyof T]?: DeepPartial<T[K]> } :
96
+ T;
97
+
98
+ type UnpackedIntersection<T, U> = T extends null
99
+ ? null
100
+ : T extends (infer A)[]
101
+ ? (Omit<A, keyof U> & U)[]
102
+ : keyof U extends never
103
+ ? T
104
+ : Omit<T, keyof U> & U;
105
+
106
+ type MergeType<A, B> = Omit<A, keyof B> & B;
107
+
108
+ /**
109
+ * @summary Converts Unions to one record "object".
110
+ * @description It makes intellisense dialog box easier to read as a single object instead of showing that in multiple object unions.
111
+ * @param {T} T The type to be converted.
112
+ */
113
+ type FlatRecord<T> = { [K in keyof T]: T[K] };
114
+
115
+ /** Force an operation like `{ a: 0 } & { b: 1 }` to be computed so that it displays `{ a: 0; b: 1 }`. */
116
+ export type Show<t> = { [k in keyof t]: t[k] } & unknown;
117
+
118
+ /**
119
+ * @summary Checks if a type is "Record" or "any".
120
+ * @description It Helps to check if user has provided schema type "EnforcedDocType"
121
+ * @param {T} T A generic type to be checked.
122
+ * @returns true if {@link T} is Record OR false if {@link T} is of any type.
123
+ */
124
+ type IsItRecordAndNotAny<T> = IfEquals<
125
+ T,
126
+ any,
127
+ false,
128
+ T extends Record<any, any> ? true : false
129
+ >;
130
+
131
+ /**
132
+ * @summary Checks if two types are identical.
133
+ * @param {T} T The first type to be compared with {@link U}.
134
+ * @param {U} U The seconde type to be compared with {@link T}.
135
+ * @param {Y} Y A type to be returned if {@link T} & {@link U} are identical.
136
+ * @param {N} N A type to be returned if {@link T} & {@link U} are not identical.
137
+ */
138
+ type IfEquals<T, U, Y = true, N = false> = (<G>() => G extends T
139
+ ? 1
140
+ : 0) extends <G>() => G extends U ? 1 : 0
141
+ ? Y
142
+ : N;
143
+
144
+ /**
145
+ * @summary Extracts 'this' parameter from a function, if it exists. Otherwise, returns fallback.
146
+ * @param {T} T Function type to extract 'this' parameter from.
147
+ * @param {F} F Fallback type to return if 'this' parameter does not exist.
148
+ */
149
+ type ThisParameter<T, F> = T extends { (this: infer This, ...args: never): void } ? This : F;
150
+
151
+ /**
152
+ * @summary Decorates all functions in an object with 'this' parameter.
153
+ * @param {T} T Object with functions as values to add 'D' parameter to as 'this'. {@link D}
154
+ * @param {D} D The type to be added as 'this' parameter to all functions in {@link T}.
155
+ */
156
+ type AddThisParameter<T, D> = {
157
+ [K in keyof T]: T[K] extends (...args: infer A) => infer R
158
+ ? IsUnknown<ThisParameter<T[K], unknown>> extends true
159
+ ? (this: D, ...args: A) => R
160
+ : T[K]
161
+ : T[K];
162
+ };
163
+
164
+ /**
165
+ * @summary Adds timestamp fields to a type
166
+ * @description Adds createdAt and updatedAt fields of type Date, or custom timestamp fields if specified
167
+ * @param {T} T The type to add timestamp fields to
168
+ * @param {P} P Optional SchemaTimestampsConfig or boolean to customize timestamp field names
169
+ * @returns T with timestamp fields added
170
+ */
171
+ export type WithTimestamps<
172
+ T,
173
+ P extends SchemaTimestampsConfig | boolean = true
174
+ > = ResolveTimestamps<T, { timestamps: P }>;
175
+ }
@@ -0,0 +1,39 @@
1
+ declare module 'mongoose' {
2
+ type SchemaValidator<T, THydratedDocumentType> = RegExp |
3
+ [RegExp, string] |
4
+ Function |
5
+ [Function, string] |
6
+ ValidateOpts<T, THydratedDocumentType> |
7
+ ValidateOpts<T, THydratedDocumentType>[];
8
+
9
+ interface ValidatorProps {
10
+ path: string;
11
+ fullPath: string;
12
+ value: any;
13
+ reason?: Error;
14
+ }
15
+
16
+ interface ValidatorMessageFn {
17
+ (props: ValidatorProps): string;
18
+ }
19
+
20
+ type ValidateFn<T, THydratedDocumentType> = (
21
+ this: THydratedDocumentType | Query<unknown, THydratedDocumentType>,
22
+ value: any,
23
+ props?: ValidatorProps & Record<string, any>
24
+ ) => boolean;
25
+
26
+ type AsyncValidateFn<T, THydratedDocumentType> = (
27
+ this: THydratedDocumentType | Query<unknown, THydratedDocumentType>,
28
+ value: any,
29
+ props?: ValidatorProps & Record<string, any>
30
+ ) => Promise<boolean>;
31
+
32
+ interface ValidateOpts<T, THydratedDocumentType> {
33
+ msg?: string;
34
+ message?: string | ValidatorMessageFn;
35
+ type?: string;
36
+ validator: ValidateFn<T, THydratedDocumentType> | AsyncValidateFn<T, THydratedDocumentType>;
37
+ propsParameter?: boolean;
38
+ }
39
+ }
@@ -0,0 +1,14 @@
1
+ declare module 'mongoose' {
2
+ type VirtualPathFunctions<DocType = {}, PathValueType = unknown, TInstanceMethods = {}> = {
3
+ get?: TVirtualPathFN<DocType, PathValueType, TInstanceMethods, PathValueType>;
4
+ set?: TVirtualPathFN<DocType, PathValueType, TInstanceMethods, void>;
5
+ options?: VirtualTypeOptions<HydratedDocument<DocType, TInstanceMethods>, DocType>;
6
+ };
7
+
8
+ type TVirtualPathFN<DocType = {}, PathType = unknown, TInstanceMethods = {}, TReturn = unknown> =
9
+ <T = HydratedDocument<DocType, TInstanceMethods>>(this: Document<any, any, DocType> & DocType, value: PathType, virtual: VirtualType<T>, doc: Document<any, any, DocType> & DocType) => TReturn;
10
+
11
+ type SchemaOptionsVirtualsPropertyType<DocType = any, VirtualPaths = Record<any, unknown>, TInstanceMethods = {}> = {
12
+ [K in keyof VirtualPaths]: VirtualPathFunctions<IsItRecordAndNotAny<DocType> extends true ? DocType : any, VirtualPaths[K], TInstanceMethods>
13
+ };
14
+ }