"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.serde = serde; exports.register = register; const options_1 = require("./options"); const registry_1 = require("./registry"); function decorateContainer(target, context, options) { const meta = context.metadata; const serde = (meta.serde || new options_1.SerdeOptions(target)); serde.target = target; serde.options = options; meta.serde = serde; } function decorateProperty(target, context, options) { const meta = context.metadata; const serde = (meta.serde || new options_1.SerdeOptions(target)); serde.properties.set(context.name, options); meta.serde = serde; } function serde(options) { return function (target, context) { if (target == null) { decorateProperty(target, context, options); } else decorateContainer(target, context, options); }; } function register(registry = registry_1.GlobalRegistry) { return function (target, _context) { registry.add(target); }; }