@lab900/typescript-serializer
Version:
JSON serialization/deserialization of Typescript objects
25 lines (24 loc) • 1.16 kB
JavaScript
import 'reflect-metadata';
export const ENTITY_PROPERTY_METADATA = 'serialize:field:json-property-name';
export const ENTITY_METADATA_KEYS = 'serialize:class:fields';
export const SERIALIZED_PARAM_METADATA = 'serialize:param';
function isMetadataPresentForProperty(target) {
return propertyKey => Reflect.hasMetadata(ENTITY_PROPERTY_METADATA, target, propertyKey);
}
function getMetadataFromProperty(target, propertyKey) {
return Reflect.getMetadata(ENTITY_PROPERTY_METADATA, target, propertyKey);
}
export function getEntityMetadata(prototype) {
const properties = Array.from((Reflect.getMetadata(ENTITY_METADATA_KEYS, prototype) || new Set()).values());
return properties.filter(isMetadataPresentForProperty(prototype)).map(v => getMetadataFromProperty(prototype, v));
}
export function defineProperty(target, propertyName) {
const currentSet = Reflect.getMetadata(ENTITY_METADATA_KEYS, target);
if (currentSet === undefined) {
const fields = new Set([propertyName.toString()]);
Reflect.defineMetadata(ENTITY_METADATA_KEYS, fields, target);
}
else {
currentSet.add(propertyName.toString());
}
}