openapi-metadata
Version:
Auto-Generate OpenAPI specifications from Typescript decorators
37 lines (34 loc) • 1.08 kB
JavaScript
import { SymbolKeysNotSupportedError } from '../errors/symbol-keys-not-supported.mjs';
import { PropertyMetadataStorage } from '../metadata/property.mjs';
import { findType } from '../utils/metadata.mjs';
function ApiProperty(options) {
return (prototype, propertyKey, descriptor) => {
const isMethod = Boolean(descriptor?.value);
if (typeof propertyKey === "symbol") {
throw new SymbolKeysNotSupportedError();
}
const metadata = {
name: options?.name ?? propertyKey,
required: true,
...options
};
if (!metadata.type && !metadata.schema && !metadata.enum) {
metadata.type = (context) => findType({
metadataKey: isMethod ? "design:returntype" : "design:type",
prototype,
propertyKey
});
}
PropertyMetadataStorage.mergeMetadata(prototype, {
[metadata.name]: metadata
});
};
}
function ApiPropertyOptional(options) {
return ApiProperty({
...options,
required: false
});
}
export { ApiProperty, ApiPropertyOptional };
//# sourceMappingURL=api-property.mjs.map