Skip to content

Commit

Permalink
coverage for __v path depending on schema options.
Browse files Browse the repository at this point in the history
  • Loading branch information
ts-benchmark committed Aug 3, 2022
1 parent 2c50cdf commit 1397189
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 7 deletions.
7 changes: 5 additions & 2 deletions 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 Expand Up @@ -171,11 +171,14 @@ async function getBaseDocumentType(): Promise<void> {
}

async function getBaseDocumentTypeFromModel(): Promise<void> {
interface User {
interface UserBase {
name: string;
email: string;
avatar?: string;
}

type User = ApplySchemaOptions<UserBase>;

const schema = new Schema<User>({});
const Model = model('UserBaseDocTypeFromModel', schema);
type UserDocType = InstanceType<typeof Model>;
Expand Down
4 changes: 2 additions & 2 deletions test/types/middleware.test.ts
@@ -1,4 +1,4 @@
import { Schema, model, Model, Document, SaveOptions, Query, Aggregate, HydratedDocument, PreSaveMiddlewareFunction } from 'mongoose';
import { Schema, model, Model, Document, SaveOptions, Query, Aggregate, HydratedDocument, PreSaveMiddlewareFunction, ApplySchemaOptions } from 'mongoose';
import { expectError, expectType, expectNotType } from 'tsd';

interface ITest extends Document {
Expand Down Expand Up @@ -101,7 +101,7 @@ const Test = model<ITest>('Test', schema);

function gh11257(): void {
schema.pre('save', { document: true }, function() {
expectType<HydratedDocument<ITest>>(this);
expectType<HydratedDocument<ApplySchemaOptions<ITest>>>(this);
});
}

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<{ __v: string; test?: string; createdAt: Date; updatedAt: Date; }>({} as InferSchemaType<typeof Test3>);
}
8 changes: 6 additions & 2 deletions types/inferschematype.d.ts
Expand Up @@ -66,8 +66,8 @@ declare module 'mongoose' {
*/
type ResolveSchemaOptions<T> = Omit<MergeType<DefaultSchemaOptions, T>, 'statics' | 'methods' | 'query' | 'virtuals'>;

type ApplySchemaOptions<T, O = DefaultSchemaOptions, P extends 'paths' | 'virtuals' = 'paths'> = FlatRecord<(P extends 'paths'
? ResolveTimestamps<T, O>
type ApplySchemaOptions<T, O extends Record<any, any>= DefaultSchemaOptions, P extends 'paths' | 'virtuals' = 'paths'> = FlatRecord<(P extends 'paths'
? ResolveTimestamps<Resolve__v<T, O>, O>
: ResolveId<T, O>
)>;
}
Expand All @@ -85,6 +85,10 @@ type Resolve_id<T, O> = T extends { _id: any }
? T
: O extends { _id: false } ? T : MergeType<T, { _id: Types.ObjectId }>;

type Resolve__v<T, O extends Record<any, any>> = O extends { versionKey: false }
? T
: MergeType<T, { [T in (O extends { versionKey: true } ? DefaultSchemaOptions['versionKey'] : O['versionKey'])]: string }>;

/**
* @summary Checks if a document path is required or optional.
* @param {P} P Document path.
Expand Down

0 comments on commit 1397189

Please sign in to comment.