mongoose 8.20.0 → 9.0.0-rc1

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 (90) hide show
  1. package/eslint.config.mjs +198 -0
  2. package/lib/aggregate.js +17 -73
  3. package/lib/cast/bigint.js +1 -1
  4. package/lib/cast/double.js +1 -1
  5. package/lib/cast/uuid.js +5 -48
  6. package/lib/cast.js +2 -2
  7. package/lib/connection.js +0 -1
  8. package/lib/cursor/aggregationCursor.js +14 -24
  9. package/lib/cursor/queryCursor.js +7 -14
  10. package/lib/document.js +125 -121
  11. package/lib/drivers/node-mongodb-native/connection.js +3 -10
  12. package/lib/error/objectParameter.js +1 -2
  13. package/lib/error/validation.js +0 -8
  14. package/lib/helpers/clone.js +1 -1
  15. package/lib/helpers/common.js +1 -1
  16. package/lib/helpers/indexes/isIndexEqual.js +0 -1
  17. package/lib/helpers/model/applyDefaultsToPOJO.js +2 -2
  18. package/lib/helpers/model/applyHooks.js +43 -53
  19. package/lib/helpers/model/applyMethods.js +2 -2
  20. package/lib/helpers/model/applyStaticHooks.js +1 -48
  21. package/lib/helpers/model/castBulkWrite.js +1 -1
  22. package/lib/helpers/parallelLimit.js +18 -36
  23. package/lib/helpers/pluralize.js +3 -3
  24. package/lib/helpers/populate/assignRawDocsToIdStructure.js +1 -8
  25. package/lib/helpers/populate/createPopulateQueryFilter.js +1 -1
  26. package/lib/helpers/populate/getModelsMapForPopulate.js +17 -9
  27. package/lib/helpers/populate/getSchemaTypes.js +5 -5
  28. package/lib/helpers/query/cast$expr.js +8 -10
  29. package/lib/helpers/query/castFilterPath.js +1 -1
  30. package/lib/helpers/query/castUpdate.js +14 -12
  31. package/lib/helpers/query/getEmbeddedDiscriminatorPath.js +1 -1
  32. package/lib/helpers/schema/applyPlugins.js +1 -1
  33. package/lib/helpers/schema/getIndexes.js +1 -7
  34. package/lib/helpers/timestamps/setupTimestamps.js +3 -6
  35. package/lib/helpers/updateValidators.js +57 -111
  36. package/lib/model.js +419 -607
  37. package/lib/mongoose.js +41 -13
  38. package/lib/plugins/saveSubdocs.js +24 -51
  39. package/lib/plugins/sharding.js +5 -4
  40. package/lib/plugins/validateBeforeSave.js +3 -13
  41. package/lib/query.js +101 -145
  42. package/lib/queryHelpers.js +2 -2
  43. package/lib/schema/array.js +41 -84
  44. package/lib/schema/documentArray.js +57 -94
  45. package/lib/schema/documentArrayElement.js +16 -11
  46. package/lib/schema/string.js +1 -1
  47. package/lib/schema/subdocument.js +22 -28
  48. package/lib/schema/uuid.js +0 -21
  49. package/lib/schema.js +81 -39
  50. package/lib/schemaType.js +39 -57
  51. package/lib/types/array/index.js +2 -2
  52. package/lib/types/array/methods/index.js +4 -4
  53. package/lib/types/arraySubdocument.js +1 -1
  54. package/lib/types/buffer.js +10 -10
  55. package/lib/types/decimal128.js +1 -1
  56. package/lib/types/documentArray/index.js +1 -1
  57. package/lib/types/documentArray/methods/index.js +5 -3
  58. package/lib/types/double.js +1 -1
  59. package/lib/types/objectid.js +1 -1
  60. package/lib/types/subdocument.js +15 -43
  61. package/lib/types/uuid.js +1 -1
  62. package/lib/utils.js +1 -8
  63. package/lib/validOptions.js +3 -3
  64. package/package.json +11 -24
  65. package/types/connection.d.ts +20 -11
  66. package/types/document.d.ts +95 -26
  67. package/types/index.d.ts +143 -39
  68. package/types/inferhydrateddoctype.d.ts +115 -0
  69. package/types/inferrawdoctype.d.ts +99 -75
  70. package/types/inferschematype.d.ts +17 -3
  71. package/types/middlewares.d.ts +0 -2
  72. package/types/models.d.ts +131 -199
  73. package/types/mongooseoptions.d.ts +6 -5
  74. package/types/pipelinestage.d.ts +1 -1
  75. package/types/query.d.ts +71 -139
  76. package/types/schemaoptions.d.ts +1 -1
  77. package/types/schematypes.d.ts +14 -10
  78. package/types/types.d.ts +3 -4
  79. package/types/utility.d.ts +68 -48
  80. package/types/validation.d.ts +18 -14
  81. package/browser.js +0 -8
  82. package/dist/browser.umd.js +0 -2
  83. package/lib/browser.js +0 -141
  84. package/lib/browserDocument.js +0 -101
  85. package/lib/documentProvider.js +0 -30
  86. package/lib/drivers/browser/binary.js +0 -14
  87. package/lib/drivers/browser/decimal128.js +0 -7
  88. package/lib/drivers/browser/index.js +0 -13
  89. package/lib/drivers/browser/objectid.js +0 -29
  90. package/lib/helpers/promiseOrCallback.js +0 -54
@@ -4,57 +4,71 @@ declare module 'mongoose' {
4
4
  : ELSETYPE;
5
5
  type IfUnknown<IFTYPE, THENTYPE> = unknown extends IFTYPE ? THENTYPE : IFTYPE;
6
6
 
7
- type WithLevel1NestedPaths<T, K extends keyof T = keyof T> = {
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 ? {
8
11
  [P in K | NestedPaths<Required<T>, K>]: P extends K
9
- ? // Handle top-level paths
10
- // First, drill into documents so we don't end up surfacing `$assertPopulated`, etc.
11
- Extract<NonNullable<T[P]>, Document> extends never
12
- ? // If not a document, then return the type. Otherwise, get the DocType.
13
- NonNullable<T[P]>
14
- : Extract<NonNullable<T[P]>, Document> extends Document<
15
- any,
16
- any,
17
- infer DocType,
18
- any
19
- >
20
- ? DocType
21
- : never
22
- : // Handle nested paths
23
- P extends `${infer Key}.${infer Rest}`
24
- ? Key extends keyof T
25
- ? T[Key] extends (infer U)[]
26
- ? Rest extends keyof NonNullable<U>
27
- ? NonNullable<U>[Rest]
28
- : never
29
- : Rest extends keyof NonNullable<T[Key]>
30
- ? NonNullable<T[Key]>[Rest]
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
31
19
  : never
32
- : never
33
- : never;
34
- };
35
-
36
- type NestedPaths<T, K extends keyof T> = K extends string
37
- ? T[K] extends TreatAsPrimitives
38
- ? never
39
- : Extract<NonNullable<T[K]>, Document> extends never
40
- ? T[K] extends Array<infer U>
41
- ? U extends Record<string, any>
42
- ? `${K}.${keyof NonNullable<U> & string}`
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
43
34
  : never
44
- : T[K] extends Record<string, any> | null | undefined
45
- ? `${K}.${keyof NonNullable<T[K]> & string}`
46
- : never
47
- : Extract<NonNullable<T[K]>, Document> extends Document<
48
- any,
49
- any,
50
- infer DocType,
51
- any
52
- >
53
- ? DocType extends Record<string, any>
54
- ? `${K}.${keyof NonNullable<DocType> & string}`
55
- : never
56
- : never
57
- : 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;
58
72
 
59
73
  type WithoutUndefined<T> = T extends undefined ? never : T;
60
74
 
@@ -75,6 +89,12 @@ declare module 'mongoose' {
75
89
  ? U
76
90
  : T;
77
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
+
78
98
  type UnpackedIntersection<T, U> = T extends null
79
99
  ? null
80
100
  : T extends (infer A)[]
@@ -1,11 +1,10 @@
1
1
  declare module 'mongoose' {
2
-
3
- type SchemaValidator<T, EnforcedDocType, THydratedDocumentType> = RegExp
4
- | [RegExp, string]
5
- | Function
6
- | [Function, string]
7
- | ValidateOpts<T, THydratedDocumentType>
8
- | ValidateOpts<T, THydratedDocumentType>[];
2
+ type SchemaValidator<T, THydratedDocumentType> = RegExp |
3
+ [RegExp, string] |
4
+ Function |
5
+ [Function, string] |
6
+ ValidateOpts<T, THydratedDocumentType> |
7
+ ValidateOpts<T, THydratedDocumentType>[];
9
8
 
10
9
  interface ValidatorProps {
11
10
  path: string;
@@ -18,18 +17,23 @@ declare module 'mongoose' {
18
17
  (props: ValidatorProps): string;
19
18
  }
20
19
 
21
- type ValidateFn<T, EnforcedDocType> =
22
- (this: EnforcedDocType, value: any, props?: ValidatorProps & Record<string, any>) => boolean;
20
+ type ValidateFn<T, THydratedDocumentType> = (
21
+ this: THydratedDocumentType | Query<unknown, THydratedDocumentType>,
22
+ value: any,
23
+ props?: ValidatorProps & Record<string, any>
24
+ ) => boolean;
23
25
 
24
- type AsyncValidateFn<T, EnforcedDocType> =
25
- (this: EnforcedDocType, value: any, props?: ValidatorProps & Record<string, any>) => Promise<boolean>;
26
+ type AsyncValidateFn<T, THydratedDocumentType> = (
27
+ this: THydratedDocumentType | Query<unknown, THydratedDocumentType>,
28
+ value: any,
29
+ props?: ValidatorProps & Record<string, any>
30
+ ) => Promise<boolean>;
26
31
 
27
- interface ValidateOpts<T, EnforcedDocType> {
32
+ interface ValidateOpts<T, THydratedDocumentType> {
28
33
  msg?: string;
29
34
  message?: string | ValidatorMessageFn;
30
35
  type?: string;
31
- validator: ValidateFn<T, EnforcedDocType>
32
- | AsyncValidateFn<T, EnforcedDocType>;
36
+ validator: ValidateFn<T, THydratedDocumentType> | AsyncValidateFn<T, THydratedDocumentType>;
33
37
  propsParameter?: boolean;
34
38
  }
35
39
  }
package/browser.js DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * Export lib/mongoose
3
- *
4
- */
5
-
6
- 'use strict';
7
-
8
- module.exports = require('./lib/browser');