/** * Type declarations for @farm.js/core/api * * These provide stable type definitions that don't depend on build hashes. */ declare module "@farm.js/core/api" { export { createApiClients, type ApiClients } from "@farm.js/core/client"; import type { z } from "zod"; /** * HTTP methods supported by API routes */ export type HttpMethod = | "GET" | "HEAD" | "QUERY" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS"; export type MultipartField = string | number | boolean | bigint | Blob | Date | null | undefined; export type MultipartValues = Record; export type TypedFormData = FormData & { readonly __farmMultipartInput: TValues; }; export type MultipartSchema = TSchema & { readonly __farmMultipartSchema: true; }; export type FarmStreamResponse = Response & { readonly __farmStreamItem: TItem; }; export interface FarmAPIStream extends AsyncIterable { readonly response: Response; cancel(reason?: unknown): Promise; } export function multipart( schema: TSchema, ): MultipartSchema; export function isMultipartSchema( value: unknown, ): value is MultipartSchema<{ parse(data: unknown): unknown }>; export function toFormData( values: TValues, ): TypedFormData; export function jsonStream( source: AsyncIterable | Iterable, init?: ResponseInit, ): FarmStreamResponse; export function isJSONStreamResponse(response: { headers?: Pick | null; }): boolean; export function readJSONStream(response: Response): FarmAPIStream; export function isFarmAPIStream(value: unknown): value is FarmAPIStream; /** * API endpoint context */ export interface EndpointContext { /** Request body (parsed) */ body: TBody; /** Query parameters */ query: TQuery; /** URL path parameters */ params: TParams; /** Request headers */ headers: Headers; /** Raw request object */ request: Request; } /** * API endpoint handler */ export type EndpointHandler< TContext extends EndpointContext = EndpointContext, TResponse = unknown, > = (ctx: TContext) => TResponse | Promise; /** * API endpoint configuration */ export interface EndpointConfig< TBody = unknown, TQuery = unknown, TParams = unknown, TResponse = unknown, > { /** HTTP method */ method?: HttpMethod; /** Request body schema (Zod) */ body?: z.ZodType; /** Query parameters schema (Zod) */ query?: z.ZodType; /** URL parameters schema (Zod) */ params?: z.ZodType; /** Response schema (Zod) */ response?: z.ZodType; /** Endpoint handler */ handler: EndpointHandler, TResponse>; } /** * Create an API endpoint */ export function endpoint< TBody = unknown, TQuery = unknown, TParams = unknown, TResponse = unknown, >( config: EndpointConfig, ): EndpointConfig; /** * API route manager */ export class APIRouteManager { constructor(options?: { srcDir?: string; debug?: boolean }); discover(root: string): Promise; getRoutes(): Map; handle(request: Request): Promise; } /** * Farm API plugin for Vite */ export function farmApiPlugin(options?: { srcDir?: string; debug?: boolean }): unknown; }