@goatlab/fluent
Version:
Readable query Interface & API generator for TS and Node
129 lines (128 loc) • 3.63 kB
TypeScript
/**
* Inspiration: https://github.com/laravel/framework/blob/9.x/src/Illuminate/Database/Eloquent/Model.php
*/
import { DataSource, MongoRepository, ObjectLiteral, Repository } from 'typeorm';
import { z } from 'zod';
import { BaseConnector } from '../BaseConnector';
import { FluentConnectorInterface } from '../FluentConnectorInterface';
import { LoadedResult, QueryOutput } from './../types';
import type { AnyObject, FluentQuery } from '../types';
export interface TypeOrmConnectorParams<Input, Output> {
entity: any;
dataSource: DataSource | (() => DataSource);
inputSchema: z.ZodType<Input>;
outputSchema?: z.ZodType<Output>;
}
export declare class TypeOrmConnector<ModelDTO extends ObjectLiteral & {
id?: string;
} = {
id?: string;
} & AnyObject, InputDTO = ModelDTO, OutputDTO = InputDTO> extends BaseConnector<ModelDTO, InputDTO, OutputDTO> implements FluentConnectorInterface<ModelDTO, InputDTO, OutputDTO> {
private repository;
private readonly dataSourceOrGetter;
private cachedDataSource;
private get dataSource();
private readonly inputSchema;
private readonly outputSchema;
private readonly entity;
constructor({ entity, dataSource, inputSchema, outputSchema, }: TypeOrmConnectorParams<InputDTO, OutputDTO>);
initDB(): number;
/**
* Insert the data object into the database.
* @param data
*/
insert(data: InputDTO): Promise<OutputDTO>;
insertMany(data: InputDTO[]): Promise<OutputDTO[]>;
findMany<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO>[]>;
/**
* PATCH operation
* @param data
*/
updateById(id: string, data: InputDTO): Promise<OutputDTO>;
/**
*
* PUT operation. All fields not included in the data
* param will be set to null
*
* @param id
* @param data
*/
replaceById(id: string, data: InputDTO): Promise<OutputDTO>;
/**
*
* @param id
* @returns
*/
deleteById(id: string): Promise<string>;
/**
*
* @returns
*/
clear(): Promise<boolean>;
/**
*
* @param query
* @returns
*/
loadFirst(query?: FluentQuery<ModelDTO>): LoadedResult<this>;
/**
*
* @param id
* @returns
*/
loadById(id: string): LoadedResult<this>;
/**
*
* Returns the TypeOrm Repository, you can use it
* form more complex queries and to get
* the TypeOrm query builder
*
* @param query
*/
raw(): Repository<ModelDTO>;
/**
*
* Returns the TypeOrm Repository, you can use it
* form more complex queries and to get
* the TypeOrm query builder
*
* @param query
*/
mongoRaw(): MongoRepository<ModelDTO>;
/**
* Creates a Clone of the current instance of the class
* @returns
*/
protected clone(): any;
/**
* Apply select filter to remove fields explicitly set to false
* @param results The query results
* @param select The select configuration
* @returns Filtered results
*/
private applySelectFilter;
private applyInclusiveSelection;
private applyExclusiveSelection;
private copyNestedField;
private deleteNestedField;
/**
*
* @param query
* @returns
*/
private generateTypeOrmQuery;
/**
*
* @param query
* @returns
*/
private customTypeOrmRelatedFind;
private getTypeOrmQueryBuilderSelect;
private getTypeOrmQueryBuilderSubqueries;
/**
*
* @param query
* @returns
*/
private customMongoRelatedFind;
}