UNPKG

@samchon/openapi

Version:

OpenAPI definitions and converters for 'typia' and 'nestia'.

278 lines (277 loc) 9.93 kB
import { OpenApi } from "../OpenApi"; /** * Route information for migration. * * The `IHttpMigrateRoute` is a structure representing a route information for * OpenAPI generator libraries, which composes an RPC (Remote Procedure Call) function * from the {@link OpenApi.IOperation OpenAPI operation}. * * As the `IHttpMigrateRoute` has a lot of special stories, when you're developing * OpenAPI generator library, please read its description carefully including * the description of its properties. * * @author Jeongho Nam - https://github.com/samchon */ export interface IHttpMigrateRoute { /** * Method of the route. * * If the {@link OpenApi.IOperation.method} is not one of below type * values, the operation would be ignored in the migration process for * the RPC (Remote Procedure Call) function. */ method: "head" | "get" | "post" | "put" | "patch" | "delete"; /** * Original path from the OpenAPI document. */ path: string; /** * Emended path for OpenAPI generator libraries. * * The difference between {@link path} is: * * 1. Path parameters are replaced with `:param` format. * 2. Always starts with `/`. */ emendedPath: string; /** * Accessor for the route. * * The `accessor` is a list of string values that are representing how to * access to the OpenAPI generated RPC (Remote Procedure Call) function * through namespace(s). * * The `accessor` is composed with the following rules. At first, namespaces * are composed by static directory names in the {@link path}. Parametric * symbols represented by `:param` or `{param}` cannot be a part of the * namespace. * * Instead, they would be a part of the function name. The function * name is composed with the {@link method HTTP method} and parametric symbols * like `getByParam` or `postByParam`. If there are multiple path parameters, * they would be concatenated by `And` like `getByParam1AndParam2`. * * For refefence, if the {@link operation}'s {@link method} is `delete`, the * function name would be replaced to `erase` instead of `delete`. It is * the reason why the `delete` is a reserved keyword in many programming * languages. * * - Example 1 * - path: `POST /shopping/sellers/sales` * - accessor: `shopping.sellers.sales.post` * - Example 2 * - endpoint: `GET /shoppings/sellers/sales/:saleId/reviews/:reviewId/comments/:id * - accessor: `shoppings.sellers.sales.reviews.getBySaleIdAndReviewIdAndCommentId` */ accessor: string[]; /** * List of path parameters. * * Note that, not a list of every parameters, but only path parameters. */ parameters: IHttpMigrateRoute.IParameter[]; /** * Metadata of headers. * * The `headers` property is a metadata of HTTP request headers for RPC function, * including the parameter variable name and schema. * * Also, its {@link IHttpMigrateRoute.IHeaders.schema} is always object or reference * to object. Even though the original {@link OpenApi.IOperation OpenAPI operation}'s * headers are separated to atomic typed properties, the `headers` property forcibly * combines them into a single object type. * * For reference, if the `headers` property has been converted to an object type * forcibly, its property {@link IHttpMigrateRoute.IHeaders.name name} and * {@link IHttpMigrateRoute.IHeaders.key key} are always "headers". */ headers: IHttpMigrateRoute.IHeaders | null; /** * Metadata of query values. * * The `query` property is a metadata of HTTP request query values for RPC function, * including the parameter variable name and schema. * * Also, its {@link IHttpMigrateRoute.IQuery.schema} is always object or reference * to object. Even though the original {@link OpenApi.IOperation OpenAPI operation}'s * query parameters are separated to atomic typed properties, the `query` property * forcibly combines them into a single object type. * * For reference, if the `query` property has been converted to an object type * forcibly, its property {@link IHttpMigrateRoute.IQuery.name name} and * {@link IHttpMigrateRoute.IQuery.key key} are always "headers". */ query: IHttpMigrateRoute.IQuery | null; /** * Metadata of request body. * * The `body` property is a metadata of HTTP request body for RPC function, * including the parameter variable name, content type, and schema. * * If the `body` property is `null`, it means the operation does not require * the request body data. */ body: IHttpMigrateRoute.IBody | null; /** * Metadata of response body for success case. * * The `success` property is a metadata of HTTP response body for RPC function, * including content type, and schema when status code is `200` or `201`. * * If the `success` property is `null`, it means the operation does not have * the response body data. In other words, the RPC function would return `void`. */ success: IHttpMigrateRoute.ISuccess | null; /** * Metadata of response body for exceptional status cases. * * The `exceptions` property is a metadata of HTTP response body for RPC * function, including content type, and schema when status code is not `200` * or `201`. * * The key of the `exceptions` property is the status code. It may be a * stringified number, but sometimes it could be a string like "default", * because the OpenAPI document allows the status code to be a string. */ exceptions: Record<string, IHttpMigrateRoute.IException>; /** * Description comment for the route function. * * The `comment` is a function returning description comment for the * RPC function of OpenAPI generated. The comment is composed with the * following rules: * * 1. Starts from the {@link OpenApi.IOperation.summary} paragraph. * 2. The next paragraphs are filled with {@link OpenApi.IOperation.description}. * 3. Parameter descriptions are added with `@param` tag. * 4. Security requirements are added with `@security` tag. * 5. Tag names are added with `@tag` tag. * 6. If {@link OpenApi.IOperation.deprecated}, `@deprecated` tag is added. */ comment: () => string; /** * Original operation from the OpenAPI document. * * The `operation` is a function returning the original * {@link OpenApi.IOperation} from the {@link OpenAPI} document. */ operation: () => OpenApi.IOperation; } export declare namespace IHttpMigrateRoute { /** * Metadata of path parameter. */ interface IParameter { /** * Name of the path parameter. */ name: string; /** * Key of the path parameter. */ key: string; /** * Metadata of path parameter data type. */ schema: OpenApi.IJsonSchema; /** * Original parameter info from the OpenAPI document. * * The `parameter` is a function returning the original * {@link OpenApi.IOperation.IParameter} from the {@link OpenAPI} document. */ parameter: () => OpenApi.IOperation.IParameter; } /** * Metadata of headers. */ interface IHeaders { /** * Name of the headers parameter. */ name: string; /** * Key of the headers parameter. */ key: string; /** * Metadata of headers data type. */ schema: OpenApi.IJsonSchema; title: () => string | undefined; description: () => string | undefined; example: () => any | undefined; examples: () => Record<string, any> | undefined; } /** * Metadata of query values. */ interface IQuery { name: string; key: string; schema: OpenApi.IJsonSchema; title: () => string | undefined; description: () => string | undefined; example: () => any | undefined; examples: () => Record<string, any> | undefined; } /** * Metadata of request body. */ interface IBody { /** * Name of the body parameter. */ name: string; /** * Key of the body parameter. */ key: string; /** * Content type of the body. */ type: "text/plain" | "application/json" | "application/x-www-form-urlencoded" | "multipart/form-data"; /** * Metadata of response body data type. */ schema: OpenApi.IJsonSchema; /** * Description comment for the request/response body. */ description: () => string | undefined; /** * Media type of the request/response body. */ media: () => OpenApi.IOperation.IMediaType; /** * Whether the body is encrypted or not. */ "x-nestia-encrypted"?: boolean; } /** * Metadata of response body. */ interface ISuccess extends IBody { /** * Status code of the response. */ status: string; } /** * Metadata of response body for exceptional status cases. */ interface IException { /** * Metadata of response body data type. */ schema: OpenApi.IJsonSchema; /** * Description comment for the exception. */ response: () => OpenApi.IOperation.IResponse; /** * Media type of the response body. */ media: () => OpenApi.IOperation.IMediaType; } }