{"version":3,"file":"OpenApiV3.mjs","sources":["../src/OpenApiV3.ts"],"sourcesContent":["import { IJsonSchemaAttribute } from \"./structures/IJsonSchemaAttribute\";\n\n/**\n * OpenAPI 3.0 definition.\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\nexport namespace OpenApiV3 {\n  export type Method =\n    | \"get\"\n    | \"post\"\n    | \"put\"\n    | \"delete\"\n    | \"options\"\n    | \"head\"\n    | \"patch\"\n    | \"trace\";\n\n  /**\n   * @internal\n   */\n  export const is = (input: any): input is IDocument =>\n    typeof input === \"object\" &&\n    input !== null &&\n    typeof input.openapi === \"string\" &&\n    input.openapi.startsWith(\"3.0\");\n\n  /* -----------------------------------------------------------\n    DOCUMENTS\n  ----------------------------------------------------------- */\n  export interface IDocument {\n    openapi: \"3.0\" | `3.0.${number}`;\n    servers?: IServer[];\n    info?: IDocument.IInfo;\n    components?: IComponents;\n    paths?: Record<string, IPath>;\n    security?: Record<string, string[]>[];\n    tags?: IDocument.ITag[];\n  }\n  export namespace IDocument {\n    export interface IInfo {\n      title: string;\n      description?: string;\n      termsOfService?: string;\n      contact?: IContact;\n      license?: ILicense;\n      version: string;\n    }\n    export interface ITag {\n      name: string;\n      description?: string;\n    }\n    export interface IContact {\n      name?: string;\n      url?: string;\n      email?: string;\n    }\n    export interface ILicense {\n      name: string;\n      url?: string;\n    }\n  }\n\n  export interface IServer {\n    url: string;\n    description?: string;\n    variables?: Record<string, IServer.IVariable>;\n  }\n  export namespace IServer {\n    export interface IVariable {\n      default: string;\n      enum?: string[];\n      description?: string;\n    }\n  }\n\n  /* -----------------------------------------------------------\n    PATH ITEMS\n  ----------------------------------------------------------- */\n  export interface IPath\n    extends Partial<Record<Method, IOperation | undefined>> {\n    parameters?: Array<\n      | IOperation.IParameter\n      | IJsonSchema.IReference<`#/components/headers/${string}`>\n      | IJsonSchema.IReference<`#/components/parameters/${string}`>\n    >;\n    servers?: IServer[];\n    summary?: string;\n    description?: string;\n  }\n\n  export interface IOperation {\n    operationId?: string;\n    parameters?: Array<\n      | IOperation.IParameter\n      | IJsonSchema.IReference<`#/components/headers/${string}`>\n      | IJsonSchema.IReference<`#/components/parameters/${string}`>\n    >;\n    requestBody?:\n      | IOperation.IRequestBody\n      | IJsonSchema.IReference<`#/components/requestBodies/${string}`>;\n    responses?: Record<\n      string,\n      | IOperation.IResponse\n      | IJsonSchema.IReference<`#/components/responses/${string}`>\n    >;\n    servers?: IServer[];\n    summary?: string;\n    description?: string;\n    security?: Record<string, string[]>[];\n    tags?: string[];\n    deprecated?: boolean;\n  }\n  export namespace IOperation {\n    export interface IParameter {\n      name?: string;\n      in: \"path\" | \"query\" | \"header\" | \"cookie\";\n      schema: IJsonSchema;\n      required?: boolean;\n      description?: string;\n      example?: any;\n      examples?: Record<\n        string,\n        IExample | IJsonSchema.IReference<`#/components/examples/${string}`>\n      >;\n    }\n    export interface IRequestBody {\n      description?: string;\n      required?: boolean;\n      content?: Record<string, IMediaType>;\n    }\n    export interface IResponse {\n      content?: Record<string, IMediaType>;\n      headers?: Record<\n        string,\n        | Omit<IOperation.IParameter, \"in\">\n        | IJsonSchema.IReference<`#/components/headers/${string}`>\n      >;\n      description?: string;\n    }\n    export interface IMediaType {\n      schema?: IJsonSchema;\n      example?: any;\n      examples?: Record<\n        string,\n        IExample | IJsonSchema.IReference<`#/components/examples/${string}`>\n      >;\n    }\n  }\n\n  export interface IExample {\n    summary?: string;\n    description?: string;\n    value?: any;\n    externalValue?: string;\n  }\n\n  /* -----------------------------------------------------------\n    SCHEMA DEFINITIONS\n  ----------------------------------------------------------- */\n  export interface IComponents {\n    schemas?: Record<string, IJsonSchema>;\n    responses?: Record<string, IOperation.IResponse>;\n    parameters?: Record<string, IOperation.IParameter>;\n    requestBodies?: Record<string, IOperation.IRequestBody>;\n    securitySchemes?: Record<string, ISecurityScheme>;\n    headers?: Record<string, Omit<IOperation.IParameter, \"in\">>;\n    examples?: Record<string, IExample>;\n  }\n\n  export type IJsonSchema =\n    | IJsonSchema.IBoolean\n    | IJsonSchema.IInteger\n    | IJsonSchema.INumber\n    | IJsonSchema.IString\n    | IJsonSchema.IArray\n    | IJsonSchema.IObject\n    | IJsonSchema.IReference\n    | IJsonSchema.IAllOf\n    | IJsonSchema.IAnyOf\n    | IJsonSchema.IOneOf\n    | IJsonSchema.INullOnly\n    | IJsonSchema.IUnknown;\n  export namespace IJsonSchema {\n    export interface IBoolean extends __ISignificant<\"boolean\"> {\n      nullable?: boolean;\n      default?: boolean | null;\n      enum?: Array<boolean | null>;\n    }\n    export interface IInteger extends __ISignificant<\"integer\"> {\n      nullable?: boolean;\n      /** @type int64 */ default?: number | null;\n      /** @type int64 */ enum?: Array<number | null>;\n      /** @type int64 */ minimum?: number;\n      /** @type int64 */ maximum?: number;\n      exclusiveMinimum?: boolean;\n      exclusiveMaximum?: boolean;\n      /**\n       * @type uint64\n       * @exclusiveMinimum 0\n       */\n      multipleOf?: number;\n    }\n    export interface INumber extends __ISignificant<\"number\"> {\n      nullable?: boolean;\n      default?: number | null;\n      enum?: Array<number | null>;\n      minimum?: number;\n      maximum?: number;\n      exclusiveMinimum?: boolean;\n      exclusiveMaximum?: boolean;\n      /** @exclusiveMinimum 0 */ multipleOf?: number;\n    }\n    export interface IString extends __ISignificant<\"string\"> {\n      nullable?: boolean;\n      default?: string | null;\n      enum?: Array<string | null>;\n      format?:\n        | \"binary\"\n        | \"byte\"\n        | \"password\"\n        | \"regex\"\n        | \"uuid\"\n        | \"email\"\n        | \"hostname\"\n        | \"idn-email\"\n        | \"idn-hostname\"\n        | \"iri\"\n        | \"iri-reference\"\n        | \"ipv4\"\n        | \"ipv6\"\n        | \"uri\"\n        | \"uri-reference\"\n        | \"uri-template\"\n        | \"url\"\n        | \"date-time\"\n        | \"date\"\n        | \"time\"\n        | \"duration\"\n        | \"json-pointer\"\n        | \"relative-json-pointer\"\n        | (string & {});\n      pattern?: string;\n      /** @type uint64 */ minLength?: number;\n      /** @type uint64 */ maxLength?: number;\n    }\n\n    export interface IArray extends IJsonSchemaAttribute.IArray {\n      nullable?: boolean;\n      items: IJsonSchema;\n      uniqueItems?: boolean;\n      /** @type uint64 */ minItems?: number;\n      /** @type uint64 */ maxItems?: number;\n    }\n    export interface IObject extends IJsonSchemaAttribute.IObject {\n      nullable?: boolean;\n      properties?: Record<string, IJsonSchema>;\n      required?: string[];\n      additionalProperties?: boolean | IJsonSchema;\n      maxProperties?: number;\n      minProperties?: number;\n    }\n    export interface IReference<Key = string> extends IJsonSchemaAttribute {\n      $ref: Key;\n    }\n\n    export interface IAllOf extends IJsonSchemaAttribute {\n      allOf: IJsonSchema[];\n    }\n    export interface IAnyOf extends IJsonSchemaAttribute {\n      anyOf: IJsonSchema[];\n    }\n    export interface IOneOf extends IJsonSchemaAttribute {\n      oneOf: IJsonSchema[];\n      discriminator?: IOneOf.IDiscriminator;\n    }\n    export namespace IOneOf {\n      export interface IDiscriminator {\n        propertyName: string;\n        mapping?: Record<string, string>;\n      }\n    }\n\n    export interface INullOnly extends IJsonSchemaAttribute.INull {\n      default?: null;\n    }\n    export interface IUnknown extends IJsonSchemaAttribute.IUnknown {\n      default?: any;\n    }\n\n    /**\n     * @deprecated\n     * @hidden\n     */\n    export interface __ISignificant<Type extends string>\n      extends IJsonSchemaAttribute {\n      type: Type;\n      nullable?: boolean;\n    }\n\n    /**\n     * @deprecated\n     * @hidden\n     */\n    export type __IAttribute = IJsonSchemaAttribute;\n  }\n\n  export type ISecurityScheme =\n    | ISecurityScheme.IApiKey\n    | ISecurityScheme.IHttpBasic\n    | ISecurityScheme.IHttpBearer\n    | ISecurityScheme.IOAuth2\n    | ISecurityScheme.IOpenId;\n  export namespace ISecurityScheme {\n    export interface IApiKey {\n      type: \"apiKey\";\n      in?: \"header\" | \"query\" | \"cookie\";\n      name?: string;\n      description?: string;\n    }\n    export interface IHttpBasic {\n      type: \"http\";\n      scheme: \"basic\";\n      description?: string;\n    }\n    export interface IHttpBearer {\n      type: \"http\";\n      scheme: \"bearer\";\n      bearerFormat?: string;\n      description?: string;\n    }\n    export interface IOAuth2 {\n      type: \"oauth2\";\n      flows: IOAuth2.IFlowSet;\n      description?: string;\n    }\n    export interface IOpenId {\n      type: \"openIdConnect\";\n      openIdConnectUrl: string;\n      description?: string;\n    }\n    export namespace IOAuth2 {\n      export interface IFlowSet {\n        authorizationCode?: IFlow;\n        implicit?: Omit<IFlow, \"tokenUrl\">;\n        password?: Omit<IFlow, \"authorizationUrl\">;\n        clientCredentials?: Omit<IFlow, \"authorizationUrl\">;\n      }\n      export interface IFlow {\n        authorizationUrl?: string;\n        tokenUrl?: string;\n        refreshUrl?: string;\n        scopes?: Record<string, string>;\n      }\n    }\n  }\n}\n"],"names":["OpenApiV3","is","input","openapi","startsWith"],"mappings":"AAOM,IAAWA;;CAAjB,SAAiBA;IAcFA,UAAEC,KAAIC,gBACVA,UAAU,YACjBA,UAAU,eACHA,MAAMC,YAAY,YACzBD,MAAMC,QAAQC,WAAW;AA2U5B,EA7VD,CAAiBJ,cAAAA,YA6VhB,CAAA;;"}