mongoose 8.20.0 → 9.0.0-rc0
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.
- package/eslint.config.mjs +198 -0
- package/lib/aggregate.js +17 -73
- package/lib/cast/bigint.js +1 -1
- package/lib/cast/double.js +1 -1
- package/lib/cast/uuid.js +5 -48
- package/lib/cast.js +2 -2
- package/lib/connection.js +0 -1
- package/lib/cursor/aggregationCursor.js +14 -24
- package/lib/cursor/queryCursor.js +7 -14
- package/lib/document.js +125 -121
- package/lib/drivers/node-mongodb-native/connection.js +3 -10
- package/lib/error/objectParameter.js +1 -2
- package/lib/error/validation.js +0 -8
- package/lib/helpers/clone.js +1 -1
- package/lib/helpers/common.js +1 -1
- package/lib/helpers/indexes/isIndexEqual.js +0 -1
- package/lib/helpers/model/applyDefaultsToPOJO.js +2 -2
- package/lib/helpers/model/applyHooks.js +43 -53
- package/lib/helpers/model/applyMethods.js +2 -2
- package/lib/helpers/model/applyStaticHooks.js +1 -48
- package/lib/helpers/model/castBulkWrite.js +1 -1
- package/lib/helpers/parallelLimit.js +18 -36
- package/lib/helpers/pluralize.js +3 -3
- package/lib/helpers/populate/assignRawDocsToIdStructure.js +1 -8
- package/lib/helpers/populate/createPopulateQueryFilter.js +1 -1
- package/lib/helpers/populate/getModelsMapForPopulate.js +17 -9
- package/lib/helpers/populate/getSchemaTypes.js +5 -5
- package/lib/helpers/query/cast$expr.js +8 -10
- package/lib/helpers/query/castFilterPath.js +1 -1
- package/lib/helpers/query/castUpdate.js +14 -12
- package/lib/helpers/query/getEmbeddedDiscriminatorPath.js +1 -1
- package/lib/helpers/schema/applyPlugins.js +1 -1
- package/lib/helpers/schema/getIndexes.js +1 -7
- package/lib/helpers/timestamps/setupTimestamps.js +3 -6
- package/lib/helpers/updateValidators.js +57 -111
- package/lib/model.js +419 -607
- package/lib/mongoose.js +41 -13
- package/lib/plugins/saveSubdocs.js +24 -51
- package/lib/plugins/sharding.js +5 -4
- package/lib/plugins/validateBeforeSave.js +3 -13
- package/lib/query.js +101 -145
- package/lib/queryHelpers.js +2 -2
- package/lib/schema/array.js +41 -84
- package/lib/schema/documentArray.js +57 -94
- package/lib/schema/documentArrayElement.js +16 -11
- package/lib/schema/string.js +1 -1
- package/lib/schema/subdocument.js +22 -28
- package/lib/schema/uuid.js +0 -21
- package/lib/schema.js +81 -39
- package/lib/schemaType.js +39 -57
- package/lib/types/array/index.js +2 -2
- package/lib/types/array/methods/index.js +4 -4
- package/lib/types/arraySubdocument.js +1 -1
- package/lib/types/buffer.js +10 -10
- package/lib/types/decimal128.js +1 -1
- package/lib/types/documentArray/index.js +1 -1
- package/lib/types/documentArray/methods/index.js +5 -3
- package/lib/types/double.js +1 -1
- package/lib/types/objectid.js +1 -1
- package/lib/types/subdocument.js +15 -43
- package/lib/types/uuid.js +1 -1
- package/lib/utils.js +1 -8
- package/lib/validOptions.js +3 -3
- package/package.json +11 -24
- package/types/connection.d.ts +20 -11
- package/types/document.d.ts +95 -26
- package/types/index.d.ts +143 -39
- package/types/inferhydrateddoctype.d.ts +115 -0
- package/types/inferrawdoctype.d.ts +99 -75
- package/types/inferschematype.d.ts +17 -3
- package/types/middlewares.d.ts +0 -2
- package/types/models.d.ts +131 -199
- package/types/mongooseoptions.d.ts +6 -5
- package/types/pipelinestage.d.ts +1 -1
- package/types/query.d.ts +71 -139
- package/types/schemaoptions.d.ts +1 -1
- package/types/schematypes.d.ts +14 -10
- package/types/types.d.ts +3 -4
- package/types/utility.d.ts +68 -48
- package/types/validation.d.ts +18 -14
- package/browser.js +0 -8
- package/dist/browser.umd.js +0 -2
- package/lib/browser.js +0 -141
- package/lib/browserDocument.js +0 -101
- package/lib/documentProvider.js +0 -30
- package/lib/drivers/browser/binary.js +0 -14
- package/lib/drivers/browser/decimal128.js +0 -7
- package/lib/drivers/browser/index.js +0 -13
- package/lib/drivers/browser/objectid.js +0 -29
- package/lib/helpers/promiseOrCallback.js +0 -54
package/types/utility.d.ts
CHANGED
|
@@ -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
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
: Extract<NonNullable<T[P]>, Document> extends Document<
|
|
15
|
-
|
|
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
|
-
|
|
33
|
-
:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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)[]
|
package/types/validation.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
declare module 'mongoose' {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
|
5
|
-
|
|
|
6
|
-
|
|
7
|
-
|
|
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,
|
|
22
|
-
|
|
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,
|
|
25
|
-
|
|
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,
|
|
32
|
+
interface ValidateOpts<T, THydratedDocumentType> {
|
|
28
33
|
msg?: string;
|
|
29
34
|
message?: string | ValidatorMessageFn;
|
|
30
35
|
type?: string;
|
|
31
|
-
validator: ValidateFn<T,
|
|
32
|
-
| AsyncValidateFn<T, EnforcedDocType>;
|
|
36
|
+
validator: ValidateFn<T, THydratedDocumentType> | AsyncValidateFn<T, THydratedDocumentType>;
|
|
33
37
|
propsParameter?: boolean;
|
|
34
38
|
}
|
|
35
39
|
}
|