import { Constants , getJsonIgnoreDecorator , getJsonPropertyDecorator , getPropertyDecorator } from './ReflectHelper' ; /**
 * Decorator names
 */ export const JSON_PROPERTY_DECORATOR_NAME = 'JsonProperty' ; /**
 * Decorator metadata definition for JsonProperty
 */ export interface JsonPropertyDecoratorMetadata { name ? : string ; required ? : boolean ; access ? : AccessType ; type ? : any ; serializer ? : any ; deserializer ? : any ; } export enum AccessType { READ_ONLY , WRITE_ONLY , BOTH } export interface Serializer { serialize ( value ) : any ; } export interface Deserializer { deserialize ( value ) : any ; } /**
 * JsonProperty Decorator function.
 */ export const JsonProperty = ( metadata ? ) : any => { if ( typeof metadata === 'string' ) { return getJsonPropertyDecorator ( { name : metadata as string , required : false , access : AccessType . BOTH } ) ; } else { return getJsonPropertyDecorator ( metadata ) ; } } ; export param { string } key returns export const CacheKey = ( key ) : Function => { return ( f ) => { const functionName = 'getJsonObjectMapperCacheKey' ; const functionImpl = new Function ( `return '${ key }';` ) ; f [ functionName ] = functionImpl ; } ; } ; /**
 * JsonIgnore Decorator function.
 */ export const JsonIgnore = ( ) : Function => { return getJsonIgnoreDecorator ( ) ; } ; /**
 * Json convertion error type.
 */ export class JsonConverstionError { private json : string ; private message : string ; private stack : string ; constructor ( message , json ) { this . json = json ; this . message = message ; this . stack = ( new Error ( ) ) . stack ; } }