146 lines
6.2 KiB
JavaScript
146 lines
6.2 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.SerdeOptions = exports.Stage = void 0;
|
|
const case_1 = require("../case");
|
|
const utils_1 = require("../utils");
|
|
exports.Stage = Object.freeze({
|
|
Serialize: 0,
|
|
Deserialize: 1
|
|
});
|
|
class SerdeOptions {
|
|
constructor(target, container = {}, properties = new Map()) {
|
|
Object.defineProperty(this, "target", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "container", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "properties", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
this.target = target;
|
|
this.container = container;
|
|
this.properties = properties;
|
|
}
|
|
getClassName(stage, defaultName) {
|
|
var _a, _b, _c, _d;
|
|
if (defaultName === void 0) { defaultName = (_b = (_a = this.target) === null || _a === void 0 ? void 0 : _a.constructor) === null || _b === void 0 ? void 0 : _b.name; }
|
|
if ((0, utils_1.isString)(this.container.rename)) {
|
|
return this.container.rename;
|
|
}
|
|
else if (stage === exports.Stage.Serialize && (0, utils_1.isString)((_c = this.container.rename) === null || _c === void 0 ? void 0 : _c.serialize)) {
|
|
return this.container.rename.serialize;
|
|
}
|
|
else if (stage === exports.Stage.Deserialize && (0, utils_1.isString)((_d = this.container.rename) === null || _d === void 0 ? void 0 : _d.deserialize)) {
|
|
return this.container.rename.serialize;
|
|
}
|
|
else {
|
|
return defaultName;
|
|
}
|
|
}
|
|
getSerializedClassName(defaultName) {
|
|
var _a, _b;
|
|
if (defaultName === void 0) { defaultName = (_b = (_a = this.target) === null || _a === void 0 ? void 0 : _a.constructor) === null || _b === void 0 ? void 0 : _b.name; }
|
|
return this.getClassName(exports.Stage.Serialize, defaultName);
|
|
}
|
|
getDeserializedClassName(defaultName) {
|
|
var _a, _b;
|
|
if (defaultName === void 0) { defaultName = (_b = (_a = this.target) === null || _a === void 0 ? void 0 : _a.constructor) === null || _b === void 0 ? void 0 : _b.name; }
|
|
return this.getClassName(exports.Stage.Deserialize, defaultName);
|
|
}
|
|
applyPropertyCase(stage, property) {
|
|
var _a, _b;
|
|
if ((0, utils_1.isNumber)(this.container.renameAll)) {
|
|
return (0, case_1.convertCase)(property, this.container.renameAll);
|
|
}
|
|
else if (stage === exports.Stage.Serialize && (0, utils_1.isNumber)((_a = this.container.renameAll) === null || _a === void 0 ? void 0 : _a.serialize)) {
|
|
return (0, case_1.convertCase)(property, this.container.renameAll.serialize);
|
|
}
|
|
else if (stage === exports.Stage.Deserialize && (0, utils_1.isNumber)((_b = this.container.renameAll) === null || _b === void 0 ? void 0 : _b.deserialize)) {
|
|
return (0, case_1.convertCase)(property, this.container.renameAll.deserialize);
|
|
}
|
|
else {
|
|
return property;
|
|
}
|
|
}
|
|
getPropertyName(stage, property) {
|
|
var _a, _b;
|
|
const options = this.properties.get(property);
|
|
if (options == null) {
|
|
return property;
|
|
}
|
|
else if ((0, utils_1.isString)(options.rename)) {
|
|
return options.rename;
|
|
}
|
|
else if (stage == exports.Stage.Serialize && (0, utils_1.isString)((_a = options.rename) === null || _a === void 0 ? void 0 : _a.serialize)) {
|
|
return options.rename.serialize;
|
|
}
|
|
else if (stage == exports.Stage.Deserialize && (0, utils_1.isString)((_b = options.rename) === null || _b === void 0 ? void 0 : _b.deserialize)) {
|
|
return options.rename.deserialize;
|
|
}
|
|
else {
|
|
return property;
|
|
}
|
|
}
|
|
getSerializationPropertyName(property) {
|
|
const name = this.getPropertyName(exports.Stage.Serialize, property);
|
|
return this.applyPropertyCase(exports.Stage.Serialize, name);
|
|
}
|
|
getDeserializationPropertyName(property) {
|
|
const name = this.getPropertyName(exports.Stage.Deserialize, property);
|
|
return this.applyPropertyCase(exports.Stage.Deserialize, name);
|
|
}
|
|
shouldSkip(stage, property, value) {
|
|
var _a, _b, _c, _d;
|
|
const options = this.properties.get(property);
|
|
if (options == null) {
|
|
return false;
|
|
}
|
|
else if (typeof options.skip === 'boolean') {
|
|
return options.skip;
|
|
}
|
|
else if ((0, utils_1.isFunction)(options.skip)) {
|
|
return options.skip(value);
|
|
}
|
|
else if (stage === exports.Stage.Serialize && typeof ((_a = options.skip) === null || _a === void 0 ? void 0 : _a.serialize) === 'boolean') {
|
|
return options.skip.serialize;
|
|
}
|
|
else if (stage === exports.Stage.Serialize && (0, utils_1.isFunction)((_b = options.skip) === null || _b === void 0 ? void 0 : _b.serialize)) {
|
|
return options.skip.serialize(value);
|
|
}
|
|
else if (stage === exports.Stage.Deserialize && typeof ((_c = options.skip) === null || _c === void 0 ? void 0 : _c.deserialize) === 'boolean') {
|
|
return options.skip.deserialize;
|
|
}
|
|
else if (stage === exports.Stage.Deserialize && (0, utils_1.isFunction)((_d = options.skip) === null || _d === void 0 ? void 0 : _d.deserialize)) {
|
|
return options.skip.deserialize(value);
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
shouldSerialize(property, value) {
|
|
return !this.shouldSkip(exports.Stage.Serialize, property, value);
|
|
}
|
|
shouldDeserialize(property, value) {
|
|
return !this.shouldSkip(exports.Stage.Deserialize, property, value);
|
|
}
|
|
defaultFor(property) {
|
|
const options = this.properties.get(property);
|
|
if (options != null && (0, utils_1.isFunction)(options.default)) {
|
|
return options.default();
|
|
}
|
|
else if ((0, utils_1.isFunction)(this.container.default)) {
|
|
return this.container.default();
|
|
}
|
|
}
|
|
}
|
|
exports.SerdeOptions = SerdeOptions;
|