Interface ModelConstructor<TData, TVirtual, TInstance, TRelations>

Runtime constructor exported by each manifest. It exposes the DAL's static helpers (create, get, filterWhere, etc.) while producing instances typed as ModelInstance. Individual models extend this interface with their own static methods through ThisType in the manifest definition.

interface ModelConstructor<
    TData extends JsonObject = JsonObject,
    TVirtual extends JsonObject = JsonObject,
    TInstance extends
        ModelInstance<TData, TVirtual> = ModelInstance<TData, TVirtual>,
    TRelations extends string = string,
> {
    new ModelConstructor(data?: Partial<TData & TVirtual>): TInstance;
    dal: DataAccessLayer;
    ops: FilterWhereOperators<TData>;
    prototype: TInstance;
    schema: Record<string, ModelSchemaField<unknown>>;
    tableName: string;
    addManyRelated(
        relationName: TRelations,
        sourceId: string,
        targetIds: string[],
        options?: { onConflict?: "error" | "ignore" },
    ): Promise<void>;
    between(
        startDate: Date,
        endDate: Date,
        options?: JsonObject,
    ): ModelQueryBuilder<TData, TVirtual, TInstance, TRelations>;
    contains(
        field: string,
        value: unknown,
    ): ModelQueryBuilder<TData, TVirtual, TInstance, TRelations>;
    create(data: Partial<TData>, options?: JsonObject): Promise<TInstance>;
    createFromRow(row: JsonObject): TInstance;
    define(name: string, handler: InstanceMethod<TInstance>): void;
    defineRelation(name: string, config: JsonObject): void;
    defineView<TView extends JsonObject = JsonObject>(
        name: string,
        definition: ModelViewDefinition<TInstance, TView>,
    ): void;
    delete(id: string): Promise<boolean>;
    fetchView<TView extends JsonObject = JsonObject>(
        name: string,
        options?: ModelViewFetchOptions<TData, TVirtual, TInstance, TRelations>,
    ): Promise<TView[]>;
    filterWhere(
        criteria: Partial<
            {
                [K in string
                | number
                | symbol]:
                    | TData[K]
                    | OperatorResultForKey<FilterWhereOperators<TData>, K>
            },
        >,
    ): FilterWhereQueryBuilder<TData, TVirtual, TInstance, TRelations>;
    get(id: string, options?: GetOptions): Promise<TInstance>;
    getAll(...ids: string[]): Promise<TInstance[]>;
    getJoin(
        joinSpec: Partial<Record<TRelations, boolean | JsonObject>>,
    ): ModelQueryBuilder<TData, TVirtual, TInstance, TRelations>;
    getMultipleNotStaleOrDeleted(
        ids: string[],
    ): ModelQueryBuilder<TData, TVirtual, TInstance, TRelations>;
    getView<TView extends JsonObject = JsonObject>(
        name: string,
    ): ModelViewDefinition<TInstance, TView>;
    limit(
        count: number,
    ): ModelQueryBuilder<TData, TVirtual, TInstance, TRelations>;
    loadManyRelated(
        relationName: TRelations,
        sourceIds: string[],
    ): Promise<Map<string, ModelInstance<JsonObject, JsonObject>[]>>;
    orderBy(
        field: string,
        direction?: "ASC" | "DESC",
    ): ModelQueryBuilder<TData, TVirtual, TInstance, TRelations>;
    update(id: string, data: Partial<TData>): Promise<TInstance>;
    [key: string]: unknown;
}

Type Parameters

Hierarchy (View Summary)

Indexable

  • [key: string]: unknown

Constructors

Properties

prototype: TInstance
schema: Record<string, ModelSchemaField<unknown>>
tableName: string

Methods

  • Parameters

    • relationName: TRelations
    • sourceId: string
    • targetIds: string[]
    • Optionaloptions: { onConflict?: "error" | "ignore" }

    Returns Promise<void>