openapi-metadata
Version:
Auto-Generate OpenAPI specifications from Typescript decorators
94 lines (80 loc) • 3.51 kB
JavaScript
;
const deepmerge = require('deepmerge');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
const deepmerge__default = /*#__PURE__*/_interopDefaultCompat(deepmerge);
function createMetadataStorage(key, defaultMetadata) {
function defineMetadata(object, metadata, propertyKey) {
if (propertyKey) {
Reflect.defineMetadata(key, metadata, object, propertyKey);
} else {
Reflect.defineMetadata(key, metadata, object);
}
}
function getMetadata(object, propertyKey, withParent = false) {
if (propertyKey) {
let metadata = Reflect.getMetadata(key, object, propertyKey) ?? defaultMetadata;
if (withParent) {
metadata = deepmerge__default(getMetadata(object.constructor), metadata);
}
return metadata;
} else {
return Reflect.getMetadata(key, object) ?? defaultMetadata;
}
}
function mergeMetadata(object, metadata, propertyKey) {
const existing = getMetadata(object, propertyKey);
const merged = deepmerge__default(existing, metadata);
defineMetadata(object, merged, propertyKey);
return merged;
}
return {
defineMetadata,
getMetadata,
mergeMetadata
};
}
const OperationBodyMetadataKey = Symbol("OperationBody");
const OperationBodyMetadataStorage = createMetadataStorage(OperationBodyMetadataKey);
const PropertyMetadataKey = Symbol("Property");
const PropertyMetadataStorage = createMetadataStorage(PropertyMetadataKey);
const OperationParameterMetadataKey = Symbol("OperationParameter");
const OperationParameterMetadataStorage = createMetadataStorage(
OperationParameterMetadataKey,
[]
);
const OperationResponseMetadataKey = Symbol("OperationResponse");
const OperationResponseMetadataStorage = createMetadataStorage(
OperationResponseMetadataKey,
{}
);
const OperationSecurityMetadataKey = Symbol("OperationSecurity");
const OperationSecurityMetadataStorage = createMetadataStorage(
OperationSecurityMetadataKey,
{}
);
const OperationMetadataKey = Symbol("Operation");
const OperationMetadataStorage = createMetadataStorage(OperationMetadataKey, {});
const ExcludeMetadataKey = Symbol("Exclude");
const ExcludeMetadataStorage = createMetadataStorage(ExcludeMetadataKey, false);
const ExtraModelsMetadataKey = Symbol("ExtraModels");
const ExtraModelsMetadataStorage = createMetadataStorage(
ExtraModelsMetadataKey,
[]
);
exports.ExcludeMetadataKey = ExcludeMetadataKey;
exports.ExcludeMetadataStorage = ExcludeMetadataStorage;
exports.ExtraModelsMetadataKey = ExtraModelsMetadataKey;
exports.ExtraModelsMetadataStorage = ExtraModelsMetadataStorage;
exports.OperationBodyMetadataKey = OperationBodyMetadataKey;
exports.OperationBodyMetadataStorage = OperationBodyMetadataStorage;
exports.OperationMetadataKey = OperationMetadataKey;
exports.OperationMetadataStorage = OperationMetadataStorage;
exports.OperationParameterMetadataKey = OperationParameterMetadataKey;
exports.OperationParameterMetadataStorage = OperationParameterMetadataStorage;
exports.OperationResponseMetadataKey = OperationResponseMetadataKey;
exports.OperationResponseMetadataStorage = OperationResponseMetadataStorage;
exports.OperationSecurityMetadataKey = OperationSecurityMetadataKey;
exports.OperationSecurityMetadataStorage = OperationSecurityMetadataStorage;
exports.PropertyMetadataKey = PropertyMetadataKey;
exports.PropertyMetadataStorage = PropertyMetadataStorage;
exports.createMetadataStorage = createMetadataStorage;