Files
openapi-types/3.1/data-types/string.ts
2025-10-01 19:33:18 +00:00

205 lines
4.9 KiB
TypeScript

import type { Extension } from "../extensions";
import type { XML } from "../xml";
/**
* -----
* String Schema
* -----
*
* A schema for string values. Includes string-specific validation properties
* that are only valid when `type: "string"` is specified.
*
* | Version | Reference |
* |---|-----|
* | 3.1.1 | {@link https://spec.openapis.org/oas/v3.1.1#data-types | OpenAPI 3.1.1 Data Types} |
* | 3.1.0 | {@link https://spec.openapis.org/oas/v3.1.0#data-types | OpenAPI 3.1.0 Data Types} |
*
* -----
* Fields
* -----
*
* @property `type: "string"` - Required The type identifier for string schemas
* @property `format` - Optional The format of the string
* @property `maxLength` - Optional Maximum length of the string
* @property `minLength` - Optional Minimum length of the string
* @property `pattern` - Optional Regular expression pattern
* @property `enum` - Optional Array of allowed values
* @property `const` - Optional Single allowed value
* @property `examples` - Optional Array of example values
* @property `default` - Optional Default value
* @property `title` - Optional Short title for the schema
* @property `description` - Optional Description of the schema
* @property `contentMediaType` - Optional The media type of the content
* @property `contentEncoding` - Optional The encoding of the content
* @property `xml` - Optional XML representation metadata
* @property `x-${string}` - Specification Extensions
*
* @note
* All validation properties are optional. The `type` field must be "string".
*
* -----
* Examples
* -----
*
* @example (basic string):
* ```ts
* const stringSchema: StringSchema = {
* type: "string"
* };
* ```
*
* @example (string with format and validation):
* ```ts
* const stringSchema: StringSchema = {
* type: "string",
* format: "email",
* maxLength: 255,
* minLength: 5
* };
* ```
*
* @example (string with enum):
* ```ts
* const stringSchema: StringSchema = {
* type: "string",
* enum: ["active", "inactive", "pending"]
* };
* ```
*
* @example (string with pattern):
* ```ts
* const stringSchema: StringSchema = {
* type: "string",
* pattern: "^[A-Za-z0-9]+$"
* };
* ```
*
* @example (string with content encoding):
* ```ts
* const stringSchema: StringSchema = {
* type: "string",
* contentMediaType: "image/png",
* contentEncoding: "base64"
* };
* ```
*/
export interface StringSchema extends Extension {
/**
* The type identifier for string schemas.
* Must be "string".
*/
type: "string";
/**
* The format of the string.
* See OpenAPI 3.1.x Data Type Formats for further details.
*
* Example: `"email"`, `"date-time"`, `"uuid"`
*/
format?: string;
/**
* The maximum length of the string.
* Must be a non-negative integer.
*
* Example: `255`
*/
maxLength?: number;
/**
* The minimum length of the string.
* Must be a non-negative integer.
*
* Example: `1`
*/
minLength?: number;
/**
* A regular expression pattern that the string must match.
* Should be a valid ECMA 262 regular expression.
*
* Example: `"^[A-Za-z0-9]+$"`
*/
pattern?: string;
/**
* An array of allowed values for the string.
* The value must be one of the values in this array.
*
* Example: `["active", "inactive", "pending"]`
*/
enum?: string[];
/**
* A single allowed value for the string.
* The value must be exactly this value.
*
* Example: `"active"`
*/
const?: string;
/**
* An example value for the string.
* This is for documentation purposes only.
*
* Example: `"example@email.com"`
*/
example?: string;
/**
* An array of example values for the string.
* These are for documentation purposes only.
*
* Example: `["example@email.com", "test@domain.com"]`
*/
examples?: string[];
/**
* The default value for the string.
* This value will be used if no value is provided.
*
* Example: `"default"`
*/
default?: string;
/**
* A short title for the schema.
* This is for documentation purposes only.
*
* Example: `"User Email"`
*/
title?: string;
/**
* A description of the schema.
* CommonMark syntax MAY be used for rich text representation.
*
* Example: `"The email address of the user"`
*/
description?: string;
/**
* The media type of the content. This is used to specify the media type
* of the content when the string represents encoded content.
*
* Example: `"image/png"`, `"application/json"`
*/
contentMediaType?: string;
/**
* The encoding of the content. This is used to specify how the content
* is encoded when the string represents encoded content.
*
* Example: `"base64"`, `"base64url"`, `"quoted-printable"`
*/
contentEncoding?: string;
/**
* XML representation metadata for the schema.
* Allows for fine-tuned XML model definitions.
*
* Example: `{ name: "userName", attribute: false }`
*/
xml?: XML;
}