@api-buddy/types
Version:
Shared types for API Buddy
215 lines • 8.94 kB
TypeScript
import type { BaseAdapter } from './base.js';
import { AdapterType } from './types.js';
import { z } from 'zod';
/**
* Supported comparison operators for database queries
*/
export type Operator = '==' | '!=' | '<' | '<=' | '>' | '>=' | 'in' | 'not-in' | 'array-contains' | 'array-contains-any';
/**
* Schema for validating query operators
*/
export declare const operatorSchema: z.ZodUnion<[z.ZodLiteral<"==">, z.ZodLiteral<"!=">, z.ZodLiteral<"<">, z.ZodLiteral<"<=">, z.ZodLiteral<">">, z.ZodLiteral<">=">, z.ZodLiteral<"in">, z.ZodLiteral<"not-in">, z.ZodLiteral<"array-contains">, z.ZodLiteral<"array-contains-any">]>;
/**
* Represents a filter condition for database queries
*/
export interface QueryFilter<T = unknown> {
/** The field to filter on */
field: string;
/** The comparison operator */
operator: Operator;
/** The value to compare against */
value: T;
}
/**
* Schema for validating query filters
*/
export declare const queryFilterSchema: z.ZodObject<{
field: z.ZodString;
operator: z.ZodUnion<[z.ZodLiteral<"==">, z.ZodLiteral<"!=">, z.ZodLiteral<"<">, z.ZodLiteral<"<=">, z.ZodLiteral<">">, z.ZodLiteral<">=">, z.ZodLiteral<"in">, z.ZodLiteral<"not-in">, z.ZodLiteral<"array-contains">, z.ZodLiteral<"array-contains-any">]>;
value: z.ZodAny;
}, "strip", z.ZodTypeAny, {
field: string;
operator: "==" | "!=" | "<" | "<=" | ">" | ">=" | "in" | "not-in" | "array-contains" | "array-contains-any";
value?: any;
}, {
field: string;
operator: "==" | "!=" | "<" | "<=" | ">" | ">=" | "in" | "not-in" | "array-contains" | "array-contains-any";
value?: any;
}>;
/**
* Options for database adapter queries
* @template T - Type of the document being queried
*/
export interface DatabaseAdapterQueryOptions<T = unknown> {
/** Filter conditions */
where?: QueryFilter[];
/** Sorting order as [field, direction] */
orderBy?: [string, 'asc' | 'desc'];
/** Maximum number of results to return */
limit?: number;
/** Cursor for pagination - start after this document */
startAfter?: unknown;
/** Cursor for pagination - end before this document */
endBefore?: unknown;
/** Fields to include in the result */
select?: (keyof T)[];
/** Number of documents to skip */
offset?: number;
}
/**
* Schema for validating database query options
*/
export declare const databaseQueryOptionsSchema: z.ZodObject<{
where: z.ZodOptional<z.ZodArray<z.ZodObject<{
field: z.ZodString;
operator: z.ZodUnion<[z.ZodLiteral<"==">, z.ZodLiteral<"!=">, z.ZodLiteral<"<">, z.ZodLiteral<"<=">, z.ZodLiteral<">">, z.ZodLiteral<">=">, z.ZodLiteral<"in">, z.ZodLiteral<"not-in">, z.ZodLiteral<"array-contains">, z.ZodLiteral<"array-contains-any">]>;
value: z.ZodAny;
}, "strip", z.ZodTypeAny, {
field: string;
operator: "==" | "!=" | "<" | "<=" | ">" | ">=" | "in" | "not-in" | "array-contains" | "array-contains-any";
value?: any;
}, {
field: string;
operator: "==" | "!=" | "<" | "<=" | ">" | ">=" | "in" | "not-in" | "array-contains" | "array-contains-any";
value?: any;
}>, "many">>;
orderBy: z.ZodOptional<z.ZodTuple<[z.ZodString, z.ZodEnum<["asc", "desc"]>], null>>;
limit: z.ZodOptional<z.ZodNumber>;
startAfter: z.ZodOptional<z.ZodAny>;
endBefore: z.ZodOptional<z.ZodAny>;
select: z.ZodOptional<z.ZodArray<z.ZodAny, "many">>;
offset: z.ZodOptional<z.ZodNumber>;
}, "strict", z.ZodTypeAny, {
where?: {
field: string;
operator: "==" | "!=" | "<" | "<=" | ">" | ">=" | "in" | "not-in" | "array-contains" | "array-contains-any";
value?: any;
}[] | undefined;
orderBy?: [string, "asc" | "desc"] | undefined;
limit?: number | undefined;
startAfter?: any;
endBefore?: any;
select?: any[] | undefined;
offset?: number | undefined;
}, {
where?: {
field: string;
operator: "==" | "!=" | "<" | "<=" | ">" | ">=" | "in" | "not-in" | "array-contains" | "array-contains-any";
value?: any;
}[] | undefined;
orderBy?: [string, "asc" | "desc"] | undefined;
limit?: number | undefined;
startAfter?: any;
endBefore?: any;
select?: any[] | undefined;
offset?: number | undefined;
}>;
/**
* Options for database transactions
*/
export interface TransactionOptions {
/** Maximum number of retry attempts */
maxAttempts?: number;
/** Whether to allow writes in the transaction */
readOnly?: boolean;
/** Transaction timeout in milliseconds */
timeout?: number;
}
/**
* Schema for validating transaction options
*/
export declare const transactionOptionsSchema: z.ZodObject<{
maxAttempts: z.ZodOptional<z.ZodNumber>;
readOnly: z.ZodOptional<z.ZodBoolean>;
timeout: z.ZodOptional<z.ZodNumber>;
}, "strict", z.ZodTypeAny, {
maxAttempts?: number | undefined;
readOnly?: boolean | undefined;
timeout?: number | undefined;
}, {
maxAttempts?: number | undefined;
readOnly?: boolean | undefined;
timeout?: number | undefined;
}>;
/**
* Interface for database adapters
* @template T - Default document type
* @template TConfig - Type of the configuration object
*/
export interface DatabaseAdapter<T = unknown, TConfig = unknown> extends BaseAdapter<TConfig> {
readonly type: AdapterType.DATABASE;
/**
* Creates a new document in the specified collection
* @param collection - The name of the collection
* @param data - The document data (without ID)
* @returns A promise that resolves to the created document with ID
* @throws {DatabaseError} If the operation fails
*/
create(collection: string, data: Omit<T, 'id'>): Promise<T & {
id: string;
}>;
/**
* Finds multiple documents matching the query options
* @param collection - The name of the collection
* @param options - Query options for filtering, sorting, and pagination
* @returns A promise that resolves to an array of matching documents
* @throws {DatabaseError} If the operation fails
*/
findMany(collection: string, options?: DatabaseAdapterQueryOptions<T>): Promise<T[]>;
/**
* Reads a document by ID
* @param collection - The name of the collection
* @param id - The document ID
* @returns A promise that resolves to the document, or null if not found
* @throws {DatabaseError} If the operation fails
*/
read(collection: string, id: string): Promise<T | null>;
/**
* Updates a document
* @param collection - The name of the collection
* @param id - The document ID
* @param data - The fields to update
* @returns A promise that resolves to the updated document
* @throws {DatabaseError} If the operation fails
*/
update(collection: string, id: string, data: Partial<T>): Promise<T>;
/**
* Deletes a document
* @param collection - The name of the collection
* @param id - The document ID
* @returns A promise that resolves when the operation completes
* @throws {DatabaseError} If the operation fails
*/
delete(collection: string, id: string): Promise<void>;
/**
* Finds documents matching the query options
* @template TQuery - Type of the document being queried
* @param collection - The name of the collection
* @param options - Query options
* @returns A promise that resolves to an array of matching documents
* @throws {DatabaseError} If the operation fails
*/
find<TQuery = T>(collection: string, options?: DatabaseAdapterQueryOptions<TQuery>): Promise<TQuery[]>;
/**
* Finds a single document by ID with optional query options
* @template TQuery - Type of the document being queried
* @param collection - The name of the collection
* @param id - The document ID
* @param options - Additional query options
* @returns A promise that resolves to the document, or null if not found
* @throws {DatabaseError} If the operation fails
*/
findOne<TQuery = T>(collection: string, id: string, options?: Omit<DatabaseAdapterQueryOptions<TQuery>, 'limit' | 'offset'>): Promise<TQuery | null>;
/**
* Counts documents matching the query criteria
* @template TQuery - Type of the document being queried
* @param collection - The name of the collection
* @param options - Query options
* @returns A promise that resolves to the count of matching documents
* @throws {DatabaseError} If the operation fails
*/
count<TQuery = T>(collection: string, options?: Pick<DatabaseAdapterQueryOptions<TQuery>, 'where'>): Promise<number>;
subscribe(collection: string, callback: (data: T[]) => void, options?: DatabaseAdapterQueryOptions<T>): () => void;
transaction<U>(updateFunction: (transaction: any) => Promise<U>): Promise<U>;
}
//# sourceMappingURL=database.d.ts.map