@reflet/express
Version:
Well-defined and well-typed express decorators
39 lines (38 loc) • 1.61 kB
JavaScript
;
// Taken from https://github.com/abraham/reflection
Object.defineProperty(exports, "__esModule", { value: true });
exports.defineMetadata = exports.getOwnMetadata = exports.getMetadata = void 0;
const Metadata = new WeakMap();
function getMetadata(metadataKey, target, propertyKey) {
return (getOwnMetadata(metadataKey, target, propertyKey) ||
(Object.getPrototypeOf(target)
? getMetadata(metadataKey, Object.getPrototypeOf(target), propertyKey)
: undefined));
}
exports.getMetadata = getMetadata;
function getOwnMetadata(metadataKey, target, propertyKey) {
if (target === undefined) {
throw new TypeError();
}
const metadataMap = getMetadataMap(target, propertyKey);
return metadataMap && metadataMap.get(metadataKey);
}
exports.getOwnMetadata = getOwnMetadata;
function defineMetadata(metadataKey, metadataValue, target, propertyKey) {
if (propertyKey && !['string', 'symbol'].includes(typeof propertyKey)) {
throw new TypeError();
}
;
(getMetadataMap(target, propertyKey) || createMetadataMap(target, propertyKey)).set(metadataKey, metadataValue);
}
exports.defineMetadata = defineMetadata;
function getMetadataMap(target, propertyKey) {
return Metadata.get(target) && Metadata.get(target).get(propertyKey);
}
function createMetadataMap(target, propertyKey) {
const targetMetadata = Metadata.get(target) || new Map();
Metadata.set(target, targetMetadata);
const metadataMap = targetMetadata.get(propertyKey) || new Map();
targetMetadata.set(propertyKey, metadataMap);
return metadataMap;
}