UNPKG

adonis-odm

Version:

A comprehensive MongoDB ODM for AdonisJS with Lucid-style API, type-safe relationships, embedded documents, and transaction support

40 lines 1.74 kB
import type { Document } from 'mongodb'; import type { BaseModel } from '../base_model/base_model.js'; import type { ModelQueryBuilder } from '../query_builder/model_query_builder.js'; import type { HasOne, HasMany, BelongsTo, TypeSafeLoadCallback } from './relationships.js'; /** * ENHANCED TYPE SAFETY FOR MODEL QUERY BUILDERS * * This module provides enhanced type definitions that enable seamless type safety * for relationship loading, exactly like AdonisJS Lucid. */ /** * Extract relationship property names from a model instance type */ export type ExtractRelationshipKeys<T extends BaseModel> = { [K in keyof T]: T[K] extends HasOne<any> | HasMany<any> | BelongsTo<any> ? K : never; }[keyof T]; /** * Enhanced ModelQueryBuilder interface with model-specific relationship type safety */ export interface TypeSafeModelQueryBuilder<TModel extends BaseModel> extends ModelQueryBuilder<Document> { /** * Type-safe load method with automatic relationship name inference */ load<K extends ExtractRelationshipKeys<TModel>>(relation: K, callback?: TypeSafeLoadCallback): this; /** * Fallback for string-based loading (for dynamic scenarios) */ load(relation: string, callback?: TypeSafeLoadCallback): this; } /** * Helper type to create a type-safe query builder for a specific model */ export type QueryBuilderFor<TModel extends BaseModel> = TypeSafeModelQueryBuilder<TModel>; /** * Declaration merging helper - use this in model files to enhance type safety */ export interface ModelQueryBuilderEnhancement<TModel extends BaseModel> { load<K extends ExtractRelationshipKeys<TModel>>(relation: K, callback?: TypeSafeLoadCallback): this; } //# sourceMappingURL=model_query_types.d.ts.map