serde-ts/dist/ser/decorator.js
2025-05-22 03:35:53 -05:00

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;