Skip to content

Commit

Permalink
temp
Browse files Browse the repository at this point in the history
  • Loading branch information
mohammad0-0ahmad committed Jul 31, 2022
1 parent 8b42562 commit 70c6dc5
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 6 deletions.
2 changes: 1 addition & 1 deletion test/types/lean.test.ts
@@ -1,4 +1,4 @@
import { Schema, model, Document, LeanDocument, Types, BaseDocumentType, DocTypeFromUnion, DocTypeFromGeneric } from 'mongoose';
import { Schema, model, Document, LeanDocument, Types, BaseDocumentType, DocTypeFromUnion, DocTypeFromGeneric, ApplySchemaOptions } from 'mongoose';
import { expectError, expectNotType, expectType } from 'tsd';

const schema: Schema = new Schema({ name: { type: 'String' } });
Expand Down
2 changes: 1 addition & 1 deletion test/types/schema.test.ts
Expand Up @@ -705,5 +705,5 @@ function gh12122() {
expectType<DefaultSchemaOptions>({} as ObtainSchemaGeneric<typeof Test2, 'TSchemaOptions'>);

const Test3 = new Schema({ test: String }, { timestamps: true });
expectType<{ test?: string; createdAt: Date; updatedAt: Date; }>({} as InferSchemaType<typeof Test3>);
expectType<{ _id: Types.ObjectId; test?: string; createdAt: Date; updatedAt: Date; }>({} as InferSchemaType<typeof Test3>);
}
17 changes: 14 additions & 3 deletions types/inferschematype.d.ts
Expand Up @@ -66,13 +66,24 @@ declare module 'mongoose' {
*/
type ResolveSchemaOptions<T> = Omit<MergeType<DefaultSchemaOptions, T>, 'statics' | 'methods' | 'query' | 'virtuals'>;

type ApplySchemaOptions<T, O = DefaultSchemaOptions> = FlatRecord<Resolve_timestamps<T, O>>;
type ApplySchemaOptions<T, O = DefaultSchemaOptions, P extends 'paths' | 'virtuals' = 'paths'> = FlatRecord<(P extends 'paths'
? ResolveTimestamps<Resolve_id< T, O>, O>
: ResolveId<T, O>
)>;
}


type Resolve_timestamps<T, O> = O extends { timestamps: false }
type ResolveTimestamps<T, O> = O extends { timestamps: false }
? T
: T extends { timestamps: any } ? T : MergeType<T, { createdAt: Date ;updatedAt: Date }>;
: T extends { timestamps: any } ? T : MergeType<T, { createdAt: Date; updatedAt: Date }>;

type ResolveId<T, O> = O extends { id: false }
? T
: T extends { id: any } ? T : MergeType<T, { id: string }>;

type Resolve_id<T, O> = T extends { _id: any }
? T
: O extends { _id: false } ? T : MergeType<T, { _id: Types.ObjectId }>;

/**
* @summary Checks if a document path is required or optional.
Expand Down
2 changes: 1 addition & 1 deletion types/schemaoptions.d.ts
Expand Up @@ -215,7 +215,7 @@ declare module 'mongoose' {
interface DefaultSchemaOptions {
typeKey: 'type';
id: true;
_id: '_id';
_id: true;
timestamps: false;
versionKey: '__v'
}
Expand Down

0 comments on commit 70c6dc5

Please sign in to comment.