@venly/venly-core-sdk
Version:
Javascrip/Typescript SDK for Venly's Web3 Services
67 lines • 3.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.JsonConverter = JsonConverter;
exports.JsonObject = JsonObject;
exports.JsonProperty = JsonProperty;
const json_custom_convert_1 = require("./json-custom-convert");
const json_convert_options_1 = require("./json-convert-options");
function JsonConverter(target) {
if (!(target.prototype instanceof json_custom_convert_1.JsonConverterBase)) {
console.error(`The @JsonConverter decorater can only be used on classes that derive from JsonConverterBase. (converter class = ${target.name})`);
return;
}
Reflect.defineMetadata(json_convert_options_1.JsonMetaKeys.ConverterKey, target.name, target);
}
function JsonObject(converter) {
return function (target) {
Reflect.defineMetadata(json_convert_options_1.JsonMetaKeys.ClassName, target.name, target);
if (isValidConverter(converter, target))
Reflect.defineMetadata(json_convert_options_1.JsonMetaKeys.ConverterType, converter, target);
};
}
function getObjName(obj) {
if (obj == null)
return null;
if (obj.name != null)
return obj.name;
if (obj.prototype != null)
return obj.prototype.name;
if (obj.constructor != null)
return obj.constructor.name;
return null;
}
function isValidConverter(converter, targetClass, targetPropName) {
if (converter == null)
return false;
if (!Reflect.hasOwnMetadata(json_convert_options_1.JsonMetaKeys.ConverterKey, converter)) {
var errMsg = `\'${getObjName(converter)}\' is not a valid converter! Make sure to mark the class with the @JsonConverter decorator.`;
if (targetClass != null)
errMsg += `\n >> Class: ${getObjName(targetClass)}`;
if (targetPropName != null)
errMsg += `\n >> Property: ${targetPropName}`;
throw new Error(errMsg);
}
return true;
}
function mapPropertyToObject(targetObject, map) {
var props = Reflect.getOwnMetadata(json_convert_options_1.JsonMetaKeys.ClassProps, targetObject);
if (props == null)
props = new Map();
props.set(map.propertyName, map);
Reflect.defineMetadata(json_convert_options_1.JsonMetaKeys.ClassProps, props, targetObject);
}
function JsonProperty(propertyName, propertyType, converterType) {
return function (target, propertyKey) {
var map = new json_convert_options_1.JsonPropertyMap();
map.propertyName = propertyKey;
map.propertyType = propertyType;
map.jsonName = propertyName !== null && propertyName !== void 0 ? propertyName : propertyKey;
map.converterType = converterType;
mapPropertyToObject(target, map);
// Reflect.defineMetadata(JsonMetaKeys.Include, true, target, propertyKey);
// if(propertyName != null) Reflect.defineMetadata(JsonMetaKeys.PropName, propertyName, target, propertyKey);
// if(propertyType != null) Reflect.defineMetadata(JsonMetaKeys.PropType, propertyType, target, propertyKey);
// if(isValidConverter(converter, target, propertyKey)) Reflect.defineMetadata(JsonMetaKeys.ConverterType, converter, target, propertyKey);
};
}
//# sourceMappingURL=json-convert-decorators.js.map