Files
JsonTool/json-mapper-class/dist/to-class.js
2024-09-27 01:15:47 +08:00

62 lines
3.0 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.toClass = exports.toClasses = exports.arrayItemToClass = void 0;
const isarray_1 = __importDefault(require("isarray"));
const utils_1 = require("./utils");
exports.arrayItemToClass = (arrayVal, Clazz, options) => {
return arrayVal.map((v) => isarray_1.default(v) ? exports.arrayItemToClass(v, Clazz, options) : objectToClass(v, Clazz, options));
};
const objectToClass = (jsonObj, Clazz, options) => {
const instance = new Clazz();
const originalKeyStore = utils_1.getOriginalKeyStore(Clazz);
originalKeyStore.forEach((propertiesOptions, originalKey) => {
const originalValue = jsonObj[originalKey];
propertiesOptions.forEach((storeItemoptions) => {
const { key, beforeDeserializer, deserializer, targetClass, optional } = storeItemoptions;
const disallowIgnoreDeserializer = storeItemoptions.disallowIgnoreDeserializer || !options.ignoreDeserializer;
const disallowIgnoreBeforeDeserializer = storeItemoptions.disallowIgnoreBeforeDeserializer || !options.ignoreBeforeDeserializer;
const isValueNotExist = options.distinguishNullAndUndefined ? utils_1.isUndefined : utils_1.isNullOrUndefined;
let value = originalValue;
if (isValueNotExist(value)) {
if (!isValueNotExist(storeItemoptions.default)) {
instance[key] = storeItemoptions.default;
return;
}
if (!optional) {
throw new Error(`Can't map '${originalKey}' to ${Clazz.name}.${key}, property '${originalKey}' not found`);
}
return;
}
value =
beforeDeserializer && disallowIgnoreBeforeDeserializer
? beforeDeserializer(value, instance, jsonObj, options)
: value;
if (value && targetClass) {
if (isarray_1.default(value)) {
value = exports.arrayItemToClass(value, targetClass, options);
}
else {
value = exports.toClass(value, targetClass, options);
}
}
instance[key] =
deserializer && disallowIgnoreDeserializer ? deserializer(value, instance, jsonObj, options) : value;
});
});
return instance;
};
exports.toClasses = (rawJson, Clazz, options = {}) => {
if (!isarray_1.default(rawJson)) {
throw new Error(`rawJson ${rawJson} must be an array`);
}
const { constructor } = Clazz.prototype;
return rawJson.map((item) => objectToClass(item, constructor, options));
};
exports.toClass = (rawJson, Clazz, options = {}) => {
const { constructor } = Clazz.prototype;
return objectToClass(rawJson, constructor, options);
};