Interface VersionedModelConstructor<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 VersionedModelConstructor<
    TData extends JsonObject = JsonObject,
    TVirtual extends JsonObject = JsonObject,
    TInstance extends
        VersionedModelInstance<TData, TVirtual> = VersionedModelInstance<
        TData,
        TVirtual,
    >,
    TRelations extends string = string,
> {
    new VersionedModelConstructor(
        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>;
    createFirstRevision(
        user: RevisionActor,
        options?: RevisionMetadata,
    ): 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>;
    getNotStaleOrDeleted(
        id: string,
        joinOptions?: JoinOptions,
    ): Promise<TInstance>;
    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>