@samchon/openapi
Version:
OpenAPI definitions and converters for 'typia' and 'nestia'.
133 lines (132 loc) • 3.79 kB
text/typescript
/**
* Common attributes for JSON schema types.
*
* `IJsonSchemaAttribute` is a common interface for all JSON schema
* types supported in here `@samchon/openapi`. Here is the list of
* affected JSON schema types in `@samchon/openapi`, and you can extend
* the interface by declaring module augmentation.
*
* - {@link OpenApi.IJsonSchema}
* - {@link OpenApiV3_1.IJsonSchema}
* - {@link OpenApiV3.IJsonSchema}
* - {@link SwaggerV2.IJsonSchema}
* - {@link IChatGptSchema}
* - {@link IClaudeSchema}
* - {@link IGeminiSchema}
* - {@link ILlmSchemaV3}
* - {@link ILlmSchemaV3_1}
*
* For example, if you extend the `IJsonSchemaAttribute` interface
* like below, every JSON schema types in `@samchon/openapi` will have
* a new custom attribute `x-wrtn-placeholder`.
*
* Also, if you augment the nested type like
* `IJsonSchemaAttribute.IString`, you can add the custom attribute
* to every string types in the JSON schema. In the below example case,
* every string types will have a new custom attribute
* `x-wrtn-secret-key`.
*
* ```typescript
* declare module "@samchon/openapi" {
* export interface IJsonSchemaAttribute {
* /// Placeholder value for frontend application
* ///
* /// Placeholder ia label shown in the input field as a hint.
* /// For example, when an email input field exists, the label
* /// value would be "Insert your email address here".
* "x-wrtn-placeholder"?: string;
* }
* export namespace IJsonSchemaAttribute {
* export interface IString {
* /// Secret key for the schema.
* ///
* /// `x-wrtn-secret-key` is a property means a secret key
* /// that is required for the target API endpoint calling.
* /// If the secret key is not filled, the API call would
* /// be failed.
* "x-wrtn-secret-key"?: string;
* }
* }
* }
* ```
*
* @author Jeongho Nam - https://github.com/samchon
*/
export interface IJsonSchemaAttribute {
/**
* Title of the schema.
*/
title?: string;
/**
* Detailed description of the schema.
*/
description?: string;
/**
* Whether the type is deprecated or not.
*/
deprecated?: boolean;
/**
* Example value.
*/
example?: any;
/**
* List of example values as key-value pairs.
*/
examples?: Record<string, any>;
}
export declare namespace IJsonSchemaAttribute {
/**
* Common attributes for boolean types.
*/
export interface IBoolean extends ISignificant<"boolean"> {
}
/**
* Common attributes for integer types.
*/
export interface IInteger extends ISignificant<"integer"> {
}
/**
* Common attributes for number types.
*/
export interface INumber extends ISignificant<"number"> {
}
/**
* Common attributes for string types.
*/
export interface IString extends ISignificant<"string"> {
}
/**
* Common attributes for object types.
*/
export interface IObject extends ISignificant<"object"> {
}
/**
* Common attributes for array types.
*/
export interface IArray extends ISignificant<"array"> {
}
/**
* Common attributes for null types.
*/
export interface INull extends ISignificant<"null"> {
}
/**
* Common attributes for unknown types.
*/
export interface IUnknown extends IJsonSchemaAttribute {
/**
* Type is never be defined.
*/
type?: undefined;
}
/**
* Significant attributes that can be applied to the most types.
*/
interface ISignificant<Type extends string> extends IJsonSchemaAttribute {
/**
* Discriminator value of the type.
*/
type: Type;
}
export {};
}