objectypes
Version:
A type-safe library to transform and validate objects
40 lines (39 loc) • 1.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.findClassPropertiesMetadata = exports.saveClassPropertyMetadata = void 0;
const utils_1 = require("./utils");
const propertyMetadata = new Map();
function saveClassPropertyMetadata(className, metadata) {
const properties = propertyMetadata.get(className);
if (!properties) {
propertyMetadata.set(className, [metadata]);
}
else {
properties.push(metadata);
}
}
exports.saveClassPropertyMetadata = saveClassPropertyMetadata;
function findClassPropertiesMetadata(klass, namedOnly) {
var _a;
const className = (_a = klass.name) !== null && _a !== void 0 ? _a : klass.constructor.name;
const properties = propertyMetadata.get(className);
if (!properties) {
return undefined;
}
const parentClassPropertiesMetadata = findParentClassPropertiesMetadata(klass, namedOnly);
const classProperties = filterClassPropertiesIfNamed(properties, namedOnly);
return parentClassPropertiesMetadata
? [...classProperties, ...parentClassPropertiesMetadata]
: classProperties;
}
exports.findClassPropertiesMetadata = findClassPropertiesMetadata;
function findParentClassPropertiesMetadata(klass, namedOnly) {
const parentClass = (0, utils_1.findParentClass)(klass);
if (parentClass === undefined) {
return;
}
return findClassPropertiesMetadata(parentClass, namedOnly);
}
function filterClassPropertiesIfNamed(properties, namedOnly) {
return namedOnly ? properties.filter(property => property.name) : properties;
}