UNPKG

openapi-metadata

Version:

Auto-Generate OpenAPI specifications from Typescript decorators

1 lines 3.11 kB
{"version":3,"file":"api-property.mjs","sources":["../../src/decorators/api-property.ts"],"sourcesContent":["import type { Context } from \"../context.js\";\nimport { SymbolKeysNotSupportedError } from \"../errors/symbol-keys-not-supported.js\";\nimport { type PropertyMetadata, PropertyMetadataStorage } from \"../metadata/property.js\";\nimport { findType } from \"../utils/metadata.js\";\n\nexport type ApiPropertyOptions = Partial<PropertyMetadata>;\n\n/**\n * Configures this class member as a property of the schema.\n * Can be applied to properties, getters and methods.\n *\n * @see https://swagger.io/specification/#schema-object\n */\nexport function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator;\nexport function ApiProperty(options?: ApiPropertyOptions): MethodDecorator;\nexport function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator | MethodDecorator {\n return (prototype, propertyKey, descriptor) => {\n const isMethod = Boolean(descriptor?.value);\n\n if (typeof propertyKey === \"symbol\") {\n throw new SymbolKeysNotSupportedError();\n }\n\n const metadata = {\n name: options?.name ?? propertyKey,\n required: true,\n ...options,\n } as PropertyMetadata;\n\n if (!metadata.type && !metadata.schema && !metadata.enum) {\n (metadata as any).type = (context: Context) =>\n findType({\n context,\n metadataKey: isMethod ? \"design:returntype\" : \"design:type\",\n prototype,\n propertyKey,\n });\n }\n\n PropertyMetadataStorage.mergeMetadata(prototype, {\n [metadata.name]: metadata as PropertyMetadata,\n });\n };\n}\n\n/**\n * Configures this class member as an optional property of the schema.\n * Can be applied to properties, getters and methods.\n *\n * @see https://swagger.io/specification/#schema-object\n */\nexport function ApiPropertyOptional(options?: Omit<ApiPropertyOptions, \"required\">): PropertyDecorator;\nexport function ApiPropertyOptional(options?: Omit<ApiPropertyOptions, \"required\">): MethodDecorator;\nexport function ApiPropertyOptional(\n options?: Omit<ApiPropertyOptions, \"required\">,\n): PropertyDecorator | MethodDecorator {\n return ApiProperty({\n ...options,\n required: false,\n });\n}\n"],"names":[],"mappings":";;;;AAeO,SAAS,YAAY,OAAA,EAAmE;AAC7F,EAAA,OAAO,CAAC,SAAA,EAAW,WAAA,EAAa,UAAA,KAAe;AAC7C,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,UAAA,EAAY,KAAK,CAAA;AAE1C,IAAA,IAAI,OAAO,gBAAgB,QAAA,EAAU;AACnC,MAAA,MAAM,IAAI,2BAAA,EAA4B;AAAA,IACxC;AAEA,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,IAAA,EAAM,SAAS,IAAA,IAAQ,WAAA;AAAA,MACvB,QAAA,EAAU,IAAA;AAAA,MACV,GAAG;AAAA,KACL;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,IAAQ,CAAC,SAAS,MAAA,IAAU,CAAC,SAAS,IAAA,EAAM;AACxD,MAAC,QAAA,CAAiB,IAAA,GAAO,CAAC,OAAA,KACxB,QAAA,CAAS;AAAA,QAEP,WAAA,EAAa,WAAW,mBAAA,GAAsB,aAAA;AAAA,QAC9C,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACL;AAEA,IAAA,uBAAA,CAAwB,cAAc,SAAA,EAAW;AAAA,MAC/C,CAAC,QAAA,CAAS,IAAI,GAAG;AAAA,KAClB,CAAA;AAAA,EACH,CAAA;AACF;AAUO,SAAS,oBACd,OAAA,EACqC;AACrC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,GAAG,OAAA;AAAA,IACH,QAAA,EAAU;AAAA,GACX,CAAA;AACH;;;;"}