serde-ts/dist/decorator.js

34 lines
1.1 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.serde = serde;
const option_1 = require("./option");
const ContextKind = Object.freeze({
Class: 'class',
Method: 'method',
Getter: 'getter',
Setter: 'setter',
Field: 'field',
Accessor: 'accessor'
});
function decorateClass(target, context, options) {
const serde = context.metadata.serde;
context.metadata.serde = new option_1.SerdeOptions(target, options, serde === null || serde === void 0 ? void 0 : serde.properties);
}
function decorateField(context, options) {
const serde = context.metadata.serde || new option_1.SerdeOptions(undefined);
serde.properties.set(context.name, options);
context.metadata.serde = serde;
}
function serde(options) {
return function (target, context) {
switch (context.kind) {
case ContextKind.Class:
decorateClass(target, context, options);
break;
case ContextKind.Field:
decorateField(context, options);
default:
break;
}
};
}