@furystack/rest
Version:
Generic REST package
45 lines • 1.58 kB
TypeScript
import type { ApiEndpointSchema } from './api-endpoint-schema.js';
import type { Method } from './methods.js';
import type { OpenApiDocument } from './openapi-document.js';
/**
* Defines the shape of a REST API as a mapping of HTTP methods to path-endpoint pairs.
* Each endpoint describes its result type and optionally its URL parameters, query parameters,
* request body, headers, and metadata like tags/deprecated/summary/description.
*
* This type is the shared contract between `@furystack/rest-service` (server) and
* `@furystack/rest-client-fetch` (client). It can also be derived from an OpenAPI document
* using `OpenApiToRestApi<T>`.
*/
export type RestApi = {
[TMethod in Method]?: {
[TUrl: string]: {
result: unknown;
url?: unknown;
query?: unknown;
body?: unknown;
headers?: unknown;
tags?: string[];
deprecated?: boolean;
summary?: string;
description?: string;
};
};
};
/**
* Represents an API with a GET action to retrieve its schema and OpenAPI document.
* This type extends the base RestApi type to include specific GET endpoints for schema and OpenAPI retrieval.
*/
export type WithSchemaAction<T extends RestApi> = T & {
GET: {
'/schema': {
result: ApiEndpointSchema<T>;
headers: {
accept: 'application/schema+json';
};
};
'/openapi.json': {
result: OpenApiDocument;
};
};
};
//# sourceMappingURL=rest-api.d.ts.map