@inaiat/fastify-papr
Version:
Fastify Papr Plugin Integration
41 lines (40 loc) • 1.89 kB
TypeScript
import { BaseSchema, Model, SchemaOptions } from "papr";
import { Db, IndexDescription } from "mongodb";
//#region src/types.d.ts
type PaprSchemaTuple = readonly [BaseSchema, unknown];
type PaprDocument<TSchema extends PaprSchemaTuple> = TSchema[0];
type PaprSchemaDefinition<TSchema extends PaprSchemaTuple> = Extract<TSchema[1], SchemaOptions<PaprDocument<TSchema>>>;
type PaprModel<TSchema extends PaprSchemaTuple> = Model<PaprDocument<TSchema>, PaprSchemaDefinition<TSchema>>;
/**
* Main interface for the fastify-papr plugin
* Contains all registered models and their connections
*/
type FastifyPaprModel = Model<any, any>;
type FastifyPaprConnection = Record<string, FastifyPaprModel>;
interface FastifyPapr {
[key: string]: FastifyPaprModel | FastifyPaprConnection | undefined;
}
/**
* Represents a model registration with its schema and optional indexes
*/
type ModelRegistration = {
/** Collection name in MongoDB */name: string; /** Schema definition pair (schema and options) */
schema: [BaseSchema, SchemaOptions<Partial<BaseSchema>>]; /** Optional MongoDB indexes to create */
indexes?: IndexDescription[];
};
/**
* Maps model registrations to FastifyPapr property names
*/
type ModelRegistrationPair<TKey extends string = string> = Record<TKey, ModelRegistration>;
/**
* Configuration options for the fastify-papr plugin
*/
type FastifyPaprOptions = {
/** Optional name for multiple database support */name?: string; /** MongoDB database instance */
db: Db; /** Models to register */
models: ModelRegistrationPair; /** Whether to skip schema validation reconciliation */
disableSchemaReconciliation?: boolean;
};
//#endregion
export { FastifyPapr, FastifyPaprConnection, FastifyPaprModel, FastifyPaprOptions, ModelRegistration, ModelRegistrationPair, PaprDocument, PaprModel, PaprSchemaDefinition, PaprSchemaTuple };
//# sourceMappingURL=types.d.ts.map