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
TypeScript
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