UNPKG

@samchon/openapi

Version:

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

1 lines 10.4 kB
{"version":3,"file":"OpenApiTypeChecker.mjs","sources":["../../src/utils/OpenApiTypeChecker.ts"],"sourcesContent":["import { OpenApi } from \"../OpenApi\";\nimport { IOpenApiSchemaError } from \"../structures/IOpenApiSchemaError\";\nimport { IResult } from \"../structures/IResult\";\nimport { OpenApiTypeCheckerBase } from \"./internal/OpenApiTypeCheckerBase\";\n\n/**\n * Type checker of OpenAPI type schema.\n *\n * `OpenApiTypeChecker` is a type checker of {@link OpenApi.IJsonSchema}.\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\nexport namespace OpenApiTypeChecker {\n /* -----------------------------------------------------------\n TYPE CHECKERS\n ----------------------------------------------------------- */\n /**\n * Test whether the schema is a nul type.\n *\n * @param schema Target schema\n * @returns Whether null type or not\n */\n export const isNull = (\n schema: OpenApi.IJsonSchema,\n ): schema is OpenApi.IJsonSchema.INull =>\n OpenApiTypeCheckerBase.isNull(schema);\n\n /**\n * Test whether the schema is an unknown type.\n *\n * @param schema Target schema\n * @returns Whether unknown type or not\n */\n export const isUnknown = (\n schema: OpenApi.IJsonSchema,\n ): schema is OpenApi.IJsonSchema.IUnknown =>\n OpenApiTypeCheckerBase.isUnknown(schema);\n\n /**\n * Test whether the schema is a constant type.\n *\n * @param schema Target schema\n * @returns Whether constant type or not\n */\n export const isConstant = (\n schema: OpenApi.IJsonSchema,\n ): schema is OpenApi.IJsonSchema.IConstant =>\n OpenApiTypeCheckerBase.isConstant(schema);\n\n /**\n * Test whether the schema is a boolean type.\n *\n * @param schema Target schema\n * @returns Whether boolean type or not\n */\n export const isBoolean = (\n schema: OpenApi.IJsonSchema,\n ): schema is OpenApi.IJsonSchema.IBoolean =>\n OpenApiTypeCheckerBase.isBoolean(schema);\n\n /**\n * Test whether the schema is an integer type.\n *\n * @param schema Target schema\n * @returns Whether integer type or not\n */\n export const isInteger = (\n schema: OpenApi.IJsonSchema,\n ): schema is OpenApi.IJsonSchema.IInteger =>\n OpenApiTypeCheckerBase.isInteger(schema);\n\n /**\n * Test whether the schema is a number type.\n *\n * @param schema Target schema\n * @returns Whether number type or not\n */\n export const isNumber = (\n schema: OpenApi.IJsonSchema,\n ): schema is OpenApi.IJsonSchema.INumber =>\n OpenApiTypeCheckerBase.isNumber(schema);\n\n /**\n * Test whether the schema is a string type.\n *\n * @param schema Target schema\n * @returns Whether string type or not\n */\n export const isString = (\n schema: OpenApi.IJsonSchema,\n ): schema is OpenApi.IJsonSchema.IString =>\n OpenApiTypeCheckerBase.isString(schema);\n\n /**\n * Test whether the schema is an array type.\n *\n * @param schema Target schema\n * @returns Whether array type or not\n */\n export const isArray = (\n schema: OpenApi.IJsonSchema,\n ): schema is OpenApi.IJsonSchema.IArray =>\n OpenApiTypeCheckerBase.isArray(schema);\n\n /**\n * Test whether the schema is a tuple type.\n *\n * @param schema Target schema\n * @returns Whether tuple type or not\n */\n export const isTuple = (\n schema: OpenApi.IJsonSchema,\n ): schema is OpenApi.IJsonSchema.ITuple =>\n OpenApiTypeCheckerBase.isTuple(schema);\n\n /**\n * Test whether the schema is an object type.\n *\n * @param schema Target schema\n * @returns Whether object type or not\n */\n export const isObject = (\n schema: OpenApi.IJsonSchema,\n ): schema is OpenApi.IJsonSchema.IObject =>\n OpenApiTypeCheckerBase.isObject(schema);\n\n /**\n * Test whether the schema is a reference type.\n *\n * @param schema Target schema\n * @returns Whether reference type or not\n */\n export const isReference = (\n schema: OpenApi.IJsonSchema,\n ): schema is OpenApi.IJsonSchema.IReference =>\n OpenApiTypeCheckerBase.isReference(schema);\n\n /**\n * Test whether the schema is an union type.\n *\n * @param schema Target schema\n * @returns Whether union type or not\n */\n export const isOneOf = (\n schema: OpenApi.IJsonSchema,\n ): schema is OpenApi.IJsonSchema.IOneOf =>\n OpenApiTypeCheckerBase.isOneOf(schema);\n\n /**\n * Test whether the schema is recursive reference type.\n *\n * Test whether the target schema is a reference type, and test one thing more\n * that the reference is self-recursive or not.\n *\n * @param props Properties for recursive reference test\n * @returns Whether the schema is recursive reference type or not\n */\n export const isRecursiveReference = (props: {\n components: OpenApi.IComponents;\n schema: OpenApi.IJsonSchema;\n }): boolean =>\n OpenApiTypeCheckerBase.isRecursiveReference({\n prefix: \"#/components/schemas/\",\n components: props.components,\n schema: props.schema,\n });\n\n /* -----------------------------------------------------------\n OPERATORS\n ----------------------------------------------------------- */\n /**\n * Escape from the {@link OpenApi.IJsonSchema.IReference} type.\n *\n * Escape from the {@link OpenApi.IJsonSchema.IReference} type, replacing the\n * every references to the actual schemas. If the escape is successful, the\n * returned schema never contains any {@link OpenApi.IJsonSchema.IReference}\n * type in its structure.\n *\n * If the schema has a recursive reference, the recursive reference would be\n * repeated as much as the `props.recursive` depth. If you've configured the\n * `props.recursive` as `false` or `0`, it would be failed and return an\n * {@link IOpenApiSchemaError}. Also, if there's a\n * {@link OpenApi.IJsonSchema.IReference} type which cannot find the matched\n * type in the {@link OpenApi.IComponents.schemas}, it would also be failed and\n * return an {@link IOpenApiSchemaError} either.\n *\n * @param props Properties for escaping\n * @returns Escaped schema, or error with reason\n */\n export const escape = (props: {\n components: OpenApi.IComponents;\n schema: OpenApi.IJsonSchema;\n recursive: false | number;\n accessor?: string;\n refAccessor?: string;\n }): IResult<OpenApi.IJsonSchema, IOpenApiSchemaError> =>\n OpenApiTypeCheckerBase.escape({\n ...props,\n prefix: \"#/components/schemas/\",\n method: \"OpenApiTypeChecker.method\",\n });\n\n /**\n * Unreference the schema.\n *\n * Unreference the schema, replacing the {@link OpenApi.IJsonSchema.IReference}\n * type to the actual schema. Different with {@link escape} is, the\n * `unreference` function does not resolve every references in the schema, but\n * resolve only one time.\n *\n * If there's a {@link OpenApi.IJsonSchema.IReference} type which cannot find\n * the matched type in the {@link OpenApi.IComponents.schemas}, and you've\n * called this `unreference()` function with the reference, it would also be\n * failed and return an {@link IOpenApiSchemaError} value.\n *\n * @param props Properties of unreference\n * @returns Unreferenced schema\n */\n export const unreference = (props: {\n components: OpenApi.IComponents;\n schema: OpenApi.IJsonSchema;\n accessor?: string;\n refAccessor?: string;\n }): IResult<OpenApi.IJsonSchema, IOpenApiSchemaError> =>\n OpenApiTypeCheckerBase.unreference({\n ...props,\n prefix: \"#/components/schemas/\",\n method: \"OpenApiTypeChecker.unreference\",\n });\n\n /**\n * Visit every nested schemas.\n *\n * Visit every nested schemas of the target, and apply the `props.closure`\n * function.\n *\n * Here is the list of occurring nested visitings:\n *\n * - {@link OpenApi.IJsonSchema.IOneOf.oneOf}\n * - {@link OpenApi.IJsonSchema.IReference}\n * - {@link OpenApi.IJsonSchema.IObject.properties}\n * - {@link OpenApi.IJsonSchema.IObject.additionalProperties}\n * - {@link OpenApi.IJsonSchema.IArray.items}\n * - {@link OpenApi.IJsonSchema.ITuple.prefixItems}\n * - {@link OpenApi.IJsonSchema.ITuple.additionalItems}\n *\n * @param props Properties for visiting\n */\n export const visit = (props: {\n closure: (schema: OpenApi.IJsonSchema, accessor: string) => void;\n components: OpenApi.IComponents;\n schema: OpenApi.IJsonSchema;\n accessor?: string;\n refAccessor?: string;\n }): void =>\n OpenApiTypeCheckerBase.visit({\n ...props,\n prefix: \"#/components/schemas/\",\n });\n\n /**\n * Test whether the `x` schema covers the `y` schema.\n *\n * @param props Properties for testing\n * @returns Whether the `x` schema covers the `y` schema\n */\n export const covers = (props: {\n components: OpenApi.IComponents;\n x: OpenApi.IJsonSchema;\n y: OpenApi.IJsonSchema;\n }): boolean =>\n OpenApiTypeCheckerBase.covers({\n prefix: \"#/components/schemas/\",\n components: props.components,\n x: props.x,\n y: props.y,\n });\n}\n"],"names":["OpenApiTypeChecker","isNull","schema","OpenApiTypeCheckerBase","isUnknown","isConstant","isBoolean","isInteger","isNumber","isString","isArray","isTuple","isObject","isReference","isOneOf","isRecursiveReference","props","prefix","components","escape","method","unreference","visit","covers","x","y"],"mappings":";;AAYM,IAAWA;;CAAjB,SAAiBA;IAUFA,mBAAAC,SACXC,UAEAC,uBAAuBF,OAAOC;IAQnBF,mBAAAI,YACXF,UAEAC,uBAAuBC,UAAUF;IAQtBF,mBAAAK,aACXH,UAEAC,uBAAuBE,WAAWH;IAQvBF,mBAAAM,YACXJ,UAEAC,uBAAuBG,UAAUJ;IAQtBF,mBAAAO,YACXL,UAEAC,uBAAuBI,UAAUL;IAQtBF,mBAAAQ,WACXN,UAEAC,uBAAuBK,SAASN;IAQrBF,mBAAAS,WACXP,UAEAC,uBAAuBM,SAASP;IAQrBF,mBAAAU,UACXR,UAEAC,uBAAuBO,QAAQR;IAQpBF,mBAAAW,UACXT,UAEAC,uBAAuBQ,QAAQT;IAQpBF,mBAAAY,WACXV,UAEAC,uBAAuBS,SAASV;IAQrBF,mBAAAa,cACXX,UAEAC,uBAAuBU,YAAYX;IAQxBF,mBAAAc,UACXZ,UAEAC,uBAAuBW,QAAQZ;IAWpBF,mBAAoBe,uBAAIC,SAInCb,uBAAuBY,qBAAqB;QAC1CE,QAAQ;QACRC,YAAYF,MAAME;QAClBhB,QAAQc,MAAMd;;IAyBLF,mBAAMmB,SAAIH,SAOrBb,uBAAuBgB,OAAO;WACzBH;QACHC,QAAQ;QACRG,QAAQ;;IAmBCpB,mBAAWqB,cAAIL,SAM1Bb,uBAAuBkB,YAAY;WAC9BL;QACHC,QAAQ;QACRG,QAAQ;;IAqBCpB,mBAAKsB,QAAIN,SAOpBb,uBAAuBmB,MAAM;WACxBN;QACHC,QAAQ;;IASCjB,mBAAMuB,SAAIP,SAKrBb,uBAAuBoB,OAAO;QAC5BN,QAAQ;QACRC,YAAYF,MAAME;QAClBM,GAAGR,MAAMQ;QACTC,GAAGT,MAAMS;;AAEd,EAzQD,CAAiBzB,uBAAAA,qBAyQhB,CAAA;;"}