UNPKG

@reflet/express

Version:

Well-defined and well-typed express decorators

39 lines (38 loc) 1.61 kB
"use strict"; // 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; }