UNPKG

@rxap/reflect-metadata

Version:

Provides utilities for working with Reflect Metadata. It includes functions for setting, getting, and manipulating metadata on objects and properties. This package also offers functionalities for change detection using proxies and metadata.

103 lines 4.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hasMetadata = hasMetadata; exports.setMetadata = setMetadata; exports.clearMetadata = clearMetadata; exports.getMetadata = getMetadata; exports.getOwnMetadata = getOwnMetadata; exports.getMetadataKeys = getMetadataKeys; exports.addToMetadata = addToMetadata; exports.mergeWithMetadata = mergeWithMetadata; exports.removeFromMetadata = removeFromMetadata; exports.setMetadataMap = setMetadataMap; exports.setMetadataMapSet = setMetadataMapSet; exports.setMetadataMapMap = setMetadataMapMap; require("reflect-metadata"); const utilities_1 = require("@rxap/utilities"); function hasMetadata(metadataKey, target, propertyKey) { return Reflect.hasMetadata(metadataKey, target, propertyKey); } function setMetadata(metadataKey, metadataValue, target, propertyKey) { Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey); } function clearMetadata(metadataKey, target, propertyKey) { Reflect.deleteMetadata(metadataKey, target, propertyKey); } function getMetadata(metadataKey, target, propertyKey) { return Reflect.getMetadata(metadataKey, target, propertyKey) || null; } function getOwnMetadata(metadataKey, target, propertyKey) { return Reflect.getOwnMetadata(metadataKey, target, propertyKey) || null; } function getMetadataKeys(target, propertyKey) { return Reflect.getMetadataKeys(target, propertyKey); } function addToMetadata(metadataKey, metadataValue, target, propertyKey) { if (!hasMetadata(metadataKey, target, propertyKey)) { setMetadata(metadataKey, [], target, propertyKey); } const metadata = getMetadata(metadataKey, target, propertyKey) || []; setMetadata(metadataKey, [...metadata, metadataValue].filter((0, utilities_1.unique)()), target, propertyKey); } function mergeWithMetadata(metadataKey, metadataValue, target, propertyKey) { if (!hasMetadata(metadataKey, target, propertyKey)) { setMetadata(metadataKey, {}, target, propertyKey); } const metadata = getMetadata(metadataKey, target, propertyKey) || {}; setMetadata(metadataKey, (0, utilities_1.deepMerge)(metadata, metadataValue), target, propertyKey); } function removeFromMetadata(metadataKey, metadataValue, target, propertyKey, isEqual = (a, b) => a === b) { const metadata = getMetadata(metadataKey, target, propertyKey) || []; setMetadata(metadataKey, metadata.filter(value => !isEqual(value, metadataValue)), target, propertyKey); } function setMetadataMap(key, value, metadataKey, target, propertyKey) { let map = getOwnMetadata(metadataKey, target, propertyKey); if (!map) { const parentMap = getMetadata(metadataKey, target, propertyKey); if (parentMap) { map = new Map(parentMap.entries()); } else { map = new Map(); } } map.set(key, value); setMetadata(metadataKey, map, target, propertyKey); } function setMetadataMapSet(key, value, metadataKey, target, propertyKey) { let map = getOwnMetadata(metadataKey, target, propertyKey); if (!map) { const parentMap = getMetadata(metadataKey, target, propertyKey); if (parentMap) { map = new Map(parentMap.entries()); } else { map = new Map(); } } if (!map.has(key)) { map.set(key, new Set()); } const set = map.get(key); set.add(value); setMetadata(metadataKey, map, target, propertyKey); } function setMetadataMapMap(key, key2, value, metadataKey, target, propertyKey) { let map = getOwnMetadata(metadataKey, target, propertyKey); if (!map) { const parentMap = getMetadata(metadataKey, target, propertyKey); if (parentMap) { map = new Map(parentMap.entries()); } else { map = new Map(); } } if (!map.has(key)) { map.set(key, new Map()); } const innerMap = map.get(key); innerMap.set(key2, value); setMetadata(metadataKey, map, target, propertyKey); } //# sourceMappingURL=meta-data.js.map