"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name); var __typeError = (msg) => { throw TypeError(msg); }; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)]; var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"]; var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn; var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) }); var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]); var __runInitializers = (array, flags, self, value) => { for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value); return value; }; var __decorateElement = (array, flags, name, decorators, target, extra) => { var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16); var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5]; var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []); var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() { return __privateGet(this, extra); }, set [name](x) { return __privateSet(this, extra, x); } }, name)); k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name); for (var i = decorators.length - 1; i >= 0; i--) { ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers); if (k) { ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x }; if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name]; if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y; } it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1; if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it); else if (typeof it !== "object" || it === null) __typeError("Object expected"); else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn); } return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target; }; var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj); var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value); var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method); // ../serde-ts/node_modules/@tsmetadata/polyfill/lib/index.js var require_lib = __commonJS({ "../serde-ts/node_modules/@tsmetadata/polyfill/lib/index.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); Symbol.metadata ??= Symbol("Symbol.metadata"); } }); // ../serde-ts/dist/utils.js var require_utils = __commonJS({ "../serde-ts/dist/utils.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.IterResult = void 0; exports2.isPlainObject = isPlainObject; exports2.isFunction = isFunction; exports2.isIterable = isIterable; exports2.isString = isString; exports2.isNumber = isNumber; function isPlainObject(value) { return Object.getPrototypeOf(value) === Object.prototype; } function isFunction(value) { return value != null && typeof value === "function"; } function isIterable(value) { return isFunction(value[Symbol.iterator]); } function isString(value) { return typeof value === "string"; } function isNumber(value) { return !isNaN(value); } var IterResult2 = class { static Next(value) { return { done: false, value }; } static Done() { return { done: true, value: void 0 }; } }; exports2.IterResult = IterResult2; } }); // ../serde-ts/dist/ser/impl.js var require_impl = __commonJS({ "../serde-ts/dist/ser/impl.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.serialize = serialize3; var utils_1 = require_utils(); var UnhandledTypeError = class extends TypeError { constructor(serializer, value) { super(`unhandled type: '${typeof value}' for serializer ${serializer.constructor.name}`); } }; function serializeObject(serializer, obj, options) { for (const key in obj) { const value = obj[key]; if (options === null || options === void 0 ? void 0 : options.shouldSerialize(key, value)) { const name = (options === null || options === void 0 ? void 0 : options.getSerializationPropertyName(key)) || key; serializer.serializeEntry(name, value); } } return serializer.end(); } function serializeClass(serializer, value, options) { const name = value.constructor.name; const ser = serializer.serializeClass(name); return serializeObject(ser, value, options); } var defaultGetter = (value) => { var _a; return (_a = value.constructor[Symbol.metadata]) === null || _a === void 0 ? void 0 : _a.serde; }; function serialize3(serializer, value, optionsGetter = defaultGetter) { switch (typeof value) { case "string": return serializer.serializeString(value); case "number": return serializer.serializeNumber(value); case "bigint": return serializer.serializeBigInt(value); case "boolean": return serializer.serializeBoolean(value); case "symbol": return serializer.serializeSymbol(value); case "undefined": return serializer.serializeNull(); case "object": const options = optionsGetter(value); switch (true) { case value == null: return serializer.serializeNull(); case !(0, utils_1.isPlainObject)(value): return serializeClass(serializer, value, options); default: return serializeObject(serializer.serializeObject(), value, options); } default: throw new UnhandledTypeError(serializer, value); } } } }); // ../serde-ts/dist/registry.js var require_registry = __commonJS({ "../serde-ts/dist/registry.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.registerDeserializer = exports2.registerSerializer = exports2.GlobalRegistry = exports2.Registry = void 0; var Registry2 = class { constructor() { Object.defineProperty(this, "serializers", { enumerable: true, configurable: true, writable: true, value: /* @__PURE__ */ new Map() }); Object.defineProperty(this, "deserializers", { enumerable: true, configurable: true, writable: true, value: /* @__PURE__ */ new Map() }); } registerSerializer(ctor, serialize3) { this.serializers.set(ctor, serialize3); } registerDeserializer(ctor, deserialize3) { this.deserializers.set(ctor, deserialize3); } }; exports2.Registry = Registry2; exports2.GlobalRegistry = new Registry2(); exports2.registerSerializer = exports2.GlobalRegistry.registerSerializer.bind(exports2.GlobalRegistry); exports2.registerDeserializer = exports2.GlobalRegistry.registerDeserializer.bind(exports2.GlobalRegistry); } }); // ../serde-ts/dist/de/generic.js var require_generic = __commonJS({ "../serde-ts/dist/de/generic.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.ProxyDeserializer = exports2.ProxyVisitor = exports2.GenericSeed = void 0; var utils_1 = require_utils(); var GenericSeed2 = class _GenericSeed { constructor(visitor = new ProxyVisitor2()) { Object.defineProperty(this, "visitor", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.visitor = visitor; } static deserialize(deserializer, visitor = new ProxyVisitor2()) { return deserializer.deserializeAny(visitor); } deserialize(deserializer) { return _GenericSeed.deserialize(deserializer, this.visitor); } }; exports2.GenericSeed = GenericSeed2; var ProxyMapAccess = class _ProxyMapAccess { constructor(access, options) { Object.defineProperty(this, "access", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "options", { enumerable: true, configurable: true, writable: true, value: void 0 }); if (access instanceof _ProxyMapAccess) { return this; } this.access = access; this.options = options; } wrapResponse(result) { var _a, _b, _c, _d; if (result.done) { return result; } else if ((0, utils_1.isString)(result.value)) { const key = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.getDeserializationPropertyName(result.value)) !== null && _b !== void 0 ? _b : result.value; return utils_1.IterResult.Next(key); } else if (Array.isArray(result.value)) { const [alias, value] = result.value; const key = (_d = (_c = this.options) === null || _c === void 0 ? void 0 : _c.getDeserializationPropertyName(alias)) !== null && _d !== void 0 ? _d : alias; return utils_1.IterResult.Next([ key, value ]); } else { return result; } } nextKeySeed(seed) { return this.wrapResponse(this.access.nextKeySeed(seed)); } nextValueSeed(seed) { return this.access.nextValueSeed(seed); } nextEntrySeed(kseed, vseed) { return this.wrapResponse(this.access.nextEntrySeed(kseed, vseed)); } nextKey() { return this.wrapResponse(this.access.nextKey()); } nextValue() { return this.access.nextValue(); } nextEntry() { return this.wrapResponse(this.access.nextEntry()); } sizeHint() { var _a, _b; return (_b = (_a = this.access).sizeHint) === null || _b === void 0 ? void 0 : _b.call(_a); } *generate(next) { let item; while ((item = next()) && !item.done) { yield item.value; } } keys(seed) { return this.generate(seed == null ? this.nextKey.bind(this) : this.nextKeySeed.bind(this, seed)); } values(seed) { return this.generate(seed == null ? this.nextValue.bind(this) : this.nextValueSeed.bind(this, seed)); } entries(kseed, vseed) { return this.generate(kseed == null || vseed == null ? this.nextEntry.bind(this) : this.nextEntrySeed.bind(this, kseed, vseed)); } [Symbol.iterator]() { return this.entries(); } }; var ProxyVisitor2 = class _ProxyVisitor { constructor(overrides, options) { Object.defineProperty(this, "overrides", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "options", { enumerable: true, configurable: true, writable: true, value: void 0 }); if (overrides instanceof _ProxyVisitor) { return overrides; } this.overrides = overrides; this.options = options; } visitBoolean(value) { var _a, _b, _c; return (_c = (_b = (_a = this.overrides) === null || _a === void 0 ? void 0 : _a.visitBoolean) === null || _b === void 0 ? void 0 : _b.call(_a, value)) !== null && _c !== void 0 ? _c : value; } visitNumber(value) { var _a, _b, _c; return (_c = (_b = (_a = this.overrides) === null || _a === void 0 ? void 0 : _a.visitNumber) === null || _b === void 0 ? void 0 : _b.call(_a, value)) !== null && _c !== void 0 ? _c : value; } visitBigInt(value) { var _a, _b, _c; return (_c = (_b = (_a = this.overrides) === null || _a === void 0 ? void 0 : _a.visitBigInt) === null || _b === void 0 ? void 0 : _b.call(_a, value)) !== null && _c !== void 0 ? _c : value; } visitString(value) { var _a, _b, _c; return (_c = (_b = (_a = this.overrides) === null || _a === void 0 ? void 0 : _a.visitString) === null || _b === void 0 ? void 0 : _b.call(_a, value)) !== null && _c !== void 0 ? _c : value; } visitSymbol(value) { var _a, _b, _c; return (_c = (_b = (_a = this.overrides) === null || _a === void 0 ? void 0 : _a.visitSymbol) === null || _b === void 0 ? void 0 : _b.call(_a, value)) !== null && _c !== void 0 ? _c : value; } visitNull() { var _a, _b, _c; return (_c = (_b = (_a = this.overrides) === null || _a === void 0 ? void 0 : _a.visitNull) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : null; } visitObject(access) { var _a, _b; const proxy = new ProxyMapAccess(access, this.options); if ((0, utils_1.isFunction)((_a = this.overrides) === null || _a === void 0 ? void 0 : _a.visitObject)) { return (_b = this.overrides) === null || _b === void 0 ? void 0 : _b.visitObject(proxy); } const result = []; let entry; while ((entry = proxy.nextEntry()) && !entry.done) { result.push(entry.value); } return Object.fromEntries(result); } visitIterable(access) { var _a, _b; if ((0, utils_1.isFunction)((_a = this.overrides) === null || _a === void 0 ? void 0 : _a.visitIterable)) { return (_b = this.overrides) === null || _b === void 0 ? void 0 : _b.visitIterable(access); } const result = []; let element; while (element = access.nextElement()) { result.push(element); } return result; } }; exports2.ProxyVisitor = ProxyVisitor2; var ProxyDeserializer = class { constructor(deserializer, options) { Object.defineProperty(this, "deserializer", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "options", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.deserializer = deserializer; this.options = options; } deserializeAny(visitor) { return this.deserializer.deserializeAny(new ProxyVisitor2(visitor, this.options)); } deserializeBoolean(visitor) { return this.deserializer.deserializeBoolean(new ProxyVisitor2(visitor, this.options)); } deserializeNumber(visitor) { return this.deserializer.deserializeNumber(new ProxyVisitor2(visitor, this.options)); } deserializeBigInt(visitor) { return this.deserializer.deserializeBigInt(new ProxyVisitor2(visitor, this.options)); } deserializeString(visitor) { return this.deserializer.deserializeString(new ProxyVisitor2(visitor, this.options)); } deserializeSymbol(visitor) { return this.deserializer.deserializeSymbol(new ProxyVisitor2(visitor, this.options)); } deserializeNull(visitor) { return this.deserializer.deserializeNull(new ProxyVisitor2(visitor, this.options)); } deserializeObject(visitor) { return this.deserializer.deserializeObject(new ProxyVisitor2(visitor, this.options)); } deserializeIterable(visitor) { return this.deserializer.deserializeIterable(new ProxyVisitor2(visitor, this.options)); } deserializeFunction(visitor) { return this.deserializer.deserializeFunction(new ProxyVisitor2(visitor, this.options)); } }; exports2.ProxyDeserializer = ProxyDeserializer; } }); // ../serde-ts/dist/de/impl.js var require_impl2 = __commonJS({ "../serde-ts/dist/de/impl.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.deserialize = deserialize3; var registry_1 = require_registry(); var generic_1 = require_generic(); function deserialize3(deserializer, into, registry = registry_1.GlobalRegistry) { var _a; const de2 = registry.deserializers.get(into); if (de2 == null) { throw new ReferenceError(`No deserializer for ${into.name}`); } else { return de2(new generic_1.ProxyDeserializer(deserializer, (_a = into === null || into === void 0 ? void 0 : into[Symbol.metadata]) === null || _a === void 0 ? void 0 : _a.serde)); } } } }); // ../serde-ts/dist/case.js var require_case = __commonJS({ "../serde-ts/dist/case.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.CaseConvention = void 0; exports2.convertCase = convertCase; exports2.CaseConvention = Object.freeze({ Lowercase: 0, Uppercase: 1, PascalCase: 2, CamelCase: 3, SnakeCase: 4, ScreamingSnakeCase: 5, KebabCase: 6, ScreamingKebabCase: 7 }); var wordBoundaryRegex = /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g; function identifyWords(value) { return value && value.match(wordBoundaryRegex); } var lower = (ch) => ch.toLowerCase(); var upper = (ch) => ch.toUpperCase(); var first = (xs) => xs && xs[0]; var tail = (xs) => xs && xs.slice(1); function upperFirst(xs) { return upper(first(xs)) + tail(xs); } function toPascalCase(words) { return words.map(lower).map(upperFirst).join(""); } var joinMap = (fn, delim, xs) => { return xs.map(fn).join(delim); }; function convertCase(value, convention) { const words = identifyWords(value); if (!words || words.length <= 0) { return ""; } switch (convention) { case exports2.CaseConvention.Lowercase: return words.join("").toLowerCase(); case exports2.CaseConvention.Uppercase: return words.join("").toUpperCase(); case exports2.CaseConvention.PascalCase: return toPascalCase(words); case exports2.CaseConvention.CamelCase: const pascal = toPascalCase(words); return first(pascal).toLowerCase() + tail(pascal); case exports2.CaseConvention.SnakeCase: return joinMap(lower, "_", words); case exports2.CaseConvention.ScreamingSnakeCase: return joinMap(upper, "_", words); case exports2.CaseConvention.KebabCase: return joinMap(lower, "-", words); case exports2.CaseConvention.ScreamingKebabCase: return joinMap(upper, "-", words); } } } }); // ../serde-ts/dist/option.js var require_option = __commonJS({ "../serde-ts/dist/option.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.SerdeOptions = exports2.PropertyMap = exports2.Stage = void 0; var case_1 = require_case(); var utils_1 = require_utils(); exports2.Stage = Object.freeze({ Serialize: 0, Deserialize: 1 }); var PropertyMap = class extends Map { constructor(options, iterable) { super(iterable); Object.defineProperty(this, "options", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "aliases", { enumerable: true, configurable: true, writable: true, value: /* @__PURE__ */ new Map() }); this.options = options; this.buildAliasMap(); } setAliasesFromOptions(key, options) { this.aliases.set(key, key); if (options.alias != null) { this.addAlias(options.alias, key); } if ((0, utils_1.isString)(options.rename)) { this.aliases.set(options.rename, key); } else if ((0, utils_1.isNumber)(this.options.container.renameAll)) { this.aliases.set(this.options.applyCaseConvention(exports2.Stage.Deserialize, key), key); } } set(key, value) { super.set(key, value); this.setAliasesFromOptions(key, value); return this; } addAlias(alias, key) { if ((0, utils_1.isString)(alias)) { this.aliases.set(alias, key); } else if ((0, utils_1.isIterable)(alias)) { for (const a of alias) { this.addAlias(a, key); } } } getFieldFromAlias(alias) { return this.aliases.get(alias); } buildAliasMap() { for (const [key, value] of this.entries()) { if (value.alias != null) { this.addAlias(value.alias, key); } } } }; exports2.PropertyMap = PropertyMap; var SerdeOptions = class { constructor(target, container = {}, properties = new PropertyMap(this)) { 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 === exports2.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 === exports2.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(exports2.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(exports2.Stage.Deserialize, defaultName); } getCaseConvention(stage) { var _a, _b; if ((0, utils_1.isNumber)(this.container.renameAll)) { if (stage === exports2.Stage.Serialize) { return this.container.renameAll; } else { return case_1.CaseConvention.CamelCase; } } else if (stage === exports2.Stage.Serialize && (0, utils_1.isNumber)((_a = this.container.renameAll) === null || _a === void 0 ? void 0 : _a.serialize)) { return this.container.renameAll.serialize; } else if (stage === exports2.Stage.Deserialize && (0, utils_1.isNumber)((_b = this.container.renameAll) === null || _b === void 0 ? void 0 : _b.deserialize)) { return this.container.renameAll.deserialize; } } applyCaseConvention(stage, property) { const convention = this.getCaseConvention(stage); return convention != null ? (0, case_1.convertCase)(property, convention) : property; } getPropertyRename(stage, property) { var _a, _b; const options = this.properties.get(property); if (options == null) { return; } else if ((0, utils_1.isString)(options.rename)) { return options.rename; } else if (stage == exports2.Stage.Serialize && (0, utils_1.isString)((_a = options.rename) === null || _a === void 0 ? void 0 : _a.serialize)) { return options.rename.serialize; } else if (stage == exports2.Stage.Deserialize && (0, utils_1.isString)((_b = options.rename) === null || _b === void 0 ? void 0 : _b.deserialize)) { return options.rename.deserialize; } } getSerializationPropertyName(property) { return this.getPropertyRename(exports2.Stage.Serialize, property) || this.applyCaseConvention(exports2.Stage.Serialize, property); } getNameFromAlias(alias) { return this.properties.getFieldFromAlias(alias); } getDeserializationPropertyName(property) { return this.getNameFromAlias(property) || this.applyCaseConvention(exports2.Stage.Deserialize, property); } 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 === exports2.Stage.Serialize && typeof ((_a = options.skip) === null || _a === void 0 ? void 0 : _a.serialize) === "boolean") { return options.skip.serialize; } else if (stage === exports2.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 === exports2.Stage.Deserialize && typeof ((_c = options.skip) === null || _c === void 0 ? void 0 : _c.deserialize) === "boolean") { return options.skip.deserialize; } else if (stage === exports2.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(exports2.Stage.Serialize, property, value); } shouldDeserialize(property, value) { return !this.shouldSkip(exports2.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(); } } }; exports2.SerdeOptions = SerdeOptions; } }); // ../serde-ts/dist/decorator.js var require_decorator = __commonJS({ "../serde-ts/dist/decorator.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.serde = serde2; var option_1 = require_option(); var ContextKind = Object.freeze({ Class: "class", Method: "method", Getter: "getter", Setter: "setter", Field: "field", Accessor: "accessor" }); function decorateClass(target, context, options) { const serde3 = context.metadata.serde; context.metadata.serde = new option_1.SerdeOptions(target, options, serde3 === null || serde3 === void 0 ? void 0 : serde3.properties); } function decorateField(context, options) { const serde3 = context.metadata.serde || new option_1.SerdeOptions(void 0); serde3.properties.set(context.name, options); context.metadata.serde = serde3; } function serde2(options) { return function(target, context) { switch (context.kind) { case ContextKind.Class: decorateClass(target, context, options); break; case ContextKind.Field: decorateField(context, options); default: break; } }; } } }); // ../serde-ts/dist/index.js var require_dist = __commonJS({ "../serde-ts/dist/index.js"(exports2) { "use strict"; var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) { if (k2 === void 0) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); } : function(o, m, k, k2) { if (k2 === void 0) k2 = k; o[k2] = m[k]; }); var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); } : function(o, v) { o["default"] = v; }); var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ function() { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function(o2) { var ar = []; for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function(mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) { for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); } __setModuleDefault(result, mod); return result; }; }(); var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p); }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.de = exports2.ser = void 0; require_lib(); exports2.ser = __importStar(require_impl()); exports2.de = __importStar(require_impl2()); __exportStar(require_decorator(), exports2); __exportStar(require_option(), exports2); __exportStar(require_case(), exports2); __exportStar(require_registry(), exports2); __exportStar(require_utils(), exports2); } }); // ../serde-ts/dist/de/interface.js var require_interface = __commonJS({ "../serde-ts/dist/de/interface.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.IterableAccess = exports2.MapAccess = void 0; var utils_1 = require_utils(); var MapAccess2 = class { nextEntrySeed(kseed, vseed) { const key = this.nextKeySeed(kseed); if (!key.done) { const value = this.nextValueSeed(vseed); if (!value.done) { return utils_1.IterResult.Next([key.value, value.value]); } } return utils_1.IterResult.Done(); } nextEntry() { const key = this.nextKey(); if (!key.done) { const value = this.nextValue(); if (!value.done) { return utils_1.IterResult.Next([key.value, value.value]); } } return utils_1.IterResult.Done(); } *generate(next) { let item; while (item = next()) { yield item.value; } } keys(seed) { return this.generate(seed == null ? this.nextKey.bind(this) : this.nextKeySeed.bind(this, seed)); } values(seed) { return this.generate(seed == null ? this.nextValue.bind(this) : this.nextValueSeed.bind(this, seed)); } entries(kseed, vseed) { return this.generate(kseed == null || vseed == null ? this.nextEntry.bind(this) : this.nextEntrySeed.bind(this, kseed, vseed)); } [Symbol.iterator]() { return this.entries(); } }; exports2.MapAccess = MapAccess2; var IterableAccess = class { }; exports2.IterableAccess = IterableAccess; } }); // ../serde-ts/dist/de/forward.js var require_forward = __commonJS({ "../serde-ts/dist/de/forward.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Forward = exports2.ForwardIterableAccess = exports2.ForwardMapAccess = void 0; var utils_1 = require_utils(); var interface_1 = require_interface(); var ForwardMapAccess = class _ForwardMapAccess extends interface_1.MapAccess { constructor(keys, values) { super(); Object.defineProperty(this, "_keys", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "_values", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "kindex", { enumerable: true, configurable: true, writable: true, value: 0 }); Object.defineProperty(this, "vindex", { enumerable: true, configurable: true, writable: true, value: 0 }); this._keys = keys; this._values = values; } static fromObject(obj) { return new _ForwardMapAccess(Object.keys(obj), Object.values(obj)); } nextKeySeed(_seed) { return this.nextKey(); } nextValueSeed(_seed) { return this.nextValue(); } nextKey() { if (this.kindex < this.keys.length) { return utils_1.IterResult.Next(this._keys[this.kindex++]); } else { return utils_1.IterResult.Done(); } } nextValue() { if (this.vindex < this.values.length) { return utils_1.IterResult.Next(this._values[this.vindex++]); } else { return utils_1.IterResult.Done(); } } }; exports2.ForwardMapAccess = ForwardMapAccess; var ForwardIterableAccess = class extends interface_1.IterableAccess { constructor(items) { super(); Object.defineProperty(this, "items", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "index", { enumerable: true, configurable: true, writable: true, value: 0 }); this.items = items; } nextElement() { if (this.index < this.items.length) { return utils_1.IterResult.Next(this.items[this.index++]); } else { return utils_1.IterResult.Done(); } } }; exports2.ForwardIterableAccess = ForwardIterableAccess; var Forward2 = class { constructor(value) { Object.defineProperty(this, "value", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.value = value; } static with(value) { return new this(value); } deserializeAny(_visitor) { throw new Error("Can't forward to deserializeAny"); } deserializeBoolean(visitor) { return visitor.visitBoolean(this.value); } deserializeNumber(visitor) { return visitor.visitNumber(this.value); } deserializeBigInt(visitor) { return visitor.visitBigInt(this.value); } deserializeString(visitor) { return visitor.visitString(this.value); } deserializeSymbol(visitor) { return visitor.visitSymbol(this.value); } deserializeNull(visitor) { return visitor.visitNull(); } deserializeObject(visitor) { return visitor.visitObject(ForwardMapAccess.fromObject(this.value)); } deserializeIterable(visitor) { return visitor.visitIterable(new ForwardIterableAccess(this.value)); } deserializeFunction(_visitor) { throw new Error("Method not implemented."); } }; exports2.Forward = Forward2; } }); // ../serde-ts/dist/de/index.js var require_de = __commonJS({ "../serde-ts/dist/de/index.js"(exports2) { "use strict"; var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) { if (k2 === void 0) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); } : function(o, m, k, k2) { if (k2 === void 0) k2 = k; o[k2] = m[k]; }); var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p); }; Object.defineProperty(exports2, "__esModule", { value: true }); __exportStar(require_forward(), exports2); __exportStar(require_generic(), exports2); __exportStar(require_impl2(), exports2); __exportStar(require_interface(), exports2); } }); // ../serde-ts/dist/ser/interface.js var require_interface2 = __commonJS({ "../serde-ts/dist/ser/interface.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Serializer = exports2.SerializeIterable = exports2.SerializeObject = void 0; var SerializeObject2 = class { serializeEntry(key, value) { this.serializeKey(key); this.serializeValue(value); } }; exports2.SerializeObject = SerializeObject2; var SerializeIterable = class { }; exports2.SerializeIterable = SerializeIterable; var Serializer = class { serializeAny(_value) { throw new Error("Method not implemented."); } serializeBoolean(_value) { throw new Error("Method not implemented."); } serializeNumber(_value) { throw new Error("Method not implemented."); } serializeBigInt(_value) { throw new Error("Method not implemented."); } serializeString(_value) { throw new Error("Method not implemented."); } serializeSymbol(_value) { throw new Error("Method not implemented."); } serializeNull() { throw new Error("Method not implemented."); } serializeObject() { throw new Error("Method not implemented."); } serializeClass(_name) { throw new Error("Method not implemented."); } }; exports2.Serializer = Serializer; } }); // ../serde-ts/dist/ser/index.js var require_ser = __commonJS({ "../serde-ts/dist/ser/index.js"(exports2) { "use strict"; var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) { if (k2 === void 0) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); } : function(o, m, k, k2) { if (k2 === void 0) k2 = k; o[k2] = m[k]; }); var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p); }; Object.defineProperty(exports2, "__esModule", { value: true }); __exportStar(require_impl(), exports2); __exportStar(require_interface2(), exports2); } }); // test.ts var import_serde2 = __toESM(require_dist()); var import_de4 = __toESM(require_de()); // src/ser.ts var import_ser = __toESM(require_ser()); var JSONObjectSerializer = class extends import_ser.SerializeObject { ser; first = true; constructor(serializer) { super(); this.ser = serializer; serializer.write("{"); } serializeKey(key) { if (!this.first) { this.ser.write(","); } else { this.first = false; } (0, import_ser.serialize)(this.ser, key); this.ser.write(":"); } serializeValue(value) { (0, import_ser.serialize)(this.ser, value); } end() { this.ser.write("}"); } }; var JSONIterableSerializer = class { ser; first = true; constructor(serializer) { this.ser = serializer; serializer.write("["); } serializeElement(element) { if (!this.first) { this.ser.write(","); } else { this.first = false; } (0, import_ser.serialize)(this.ser, element); } end() { this.ser.write("]"); } }; var JSONSerializer = class { output = ""; write(value) { this.output += value; } serializeString(value) { this.write(`"${value}"`); } serializeBoolean(value) { this.write(value.toString()); } serializeSymbol(value) { const key = Symbol.keyFor(value); if (key) { this.write(key); } else { return this.serializeString(value.toString()); } } serializeObject() { return new JSONObjectSerializer(this); } serializeClass(_name) { return this.serializeObject(); } serializeNumber(value) { this.write(value.toString()); } serializeBigInt(value) { this.write(value.toString()); } serializeIterable() { return new JSONIterableSerializer(this); } serializeNull() { return this.write("null"); } }; // src/index.ts var import_de2 = __toESM(require_de()); // src/de.ts var import_serde = __toESM(require_dist()); var import_de = __toESM(require_de()); // src/err.ts var unexpected = (expected, actual, position) => new SyntaxError(`Expected ${expected} at position ${position} (got '${actual}')`); // src/de.ts var clamp = (value, min, max) => { return Math.min(Math.max(value, min), max); }; var isNumeric = (value) => { return !isNaN(value); }; var isNumericToken = (value) => { return value === Token.Period || value === Token.Hyphen || Token.Digit.includes(value); }; var encoder = new TextEncoder(); var b = (strings) => encoder.encode(strings[0]); var char = (strings) => b(strings)[0]; var Literal = Object.freeze({ True: b`true`, False: b`false` }); var Token = Object.freeze({ Space: char` `, LeftCurly: char`{`, RightCurly: char`}`, LeftSquare: char`[`, RightSquare: char`]`, Quote: char`"`, ForwardSlash: char`\\`, Digit: b`0123456789`, Hyphen: char`-`, Period: char`.`, Comma: char`,`, Colon: char`:` }); var CommaSeparated = class extends import_de.MapAccess { de; defaultSeed; first = true; constructor(deserializer, visitor = new import_de.ProxyVisitor()) { super(); this.de = deserializer; this.defaultSeed = new import_de.GenericSeed(visitor); } seed() { return this.defaultSeed.deserialize.bind(this.defaultSeed); } nextItemSeed(seed, end) { if (this.de.buffer.peek().next() === end) { return import_serde.IterResult.Done(); } if (!this.first) { const take = this.de.buffer.take(); if (take.next() !== Token.Comma) { throw unexpected(",", take.toString(), this.de.buffer.position); } } this.first = false; return import_serde.IterResult.Next(seed(this.de)); } nextKeySeed(seed) { return this.nextItemSeed(seed, Token.RightCurly); } nextValueSeed(seed) { const next = this.de.buffer.next(); if (next !== Token.Colon) { throw unexpected(":", String.fromCharCode(next), this.de.buffer.position); } return import_serde.IterResult.Next(seed(this.de)); } nextItem(end) { return this.nextItemSeed(this.seed(), end); } nextKey() { return this.nextItem(Token.RightCurly); } nextValue() { return this.nextValueSeed(this.seed()); } nextElement() { return this.nextItem(Token.RightSquare); } }; var ByteArray = class _ByteArray { view; encoder; decoder; index = 0; get position() { return this.index; } get length() { return this.view.byteLength; } constructor(view, encoder2 = new TextEncoder(), decoder = new TextDecoder()) { this.view = view; this.encoder = encoder2; this.decoder = decoder; } static fromArrayBuffer(value, encoder2, decoder) { return new this(new Uint8Array(value), encoder2, decoder); } static fromString(value, encoder2 = new TextEncoder(), decoder) { return this.fromArrayBuffer( encoder2.encode(value), encoder2, decoder ); } next() { const value = this.view[this.index]; this.index += 1; return value; } nextChar() { return this.take().toString(); } done() { return this.index >= this.view.byteLength; } toBytes() { return this.view.slice(this.index); } toString() { return this.decoder.decode(this.toBytes()); } take(limit = 1) { const bytes = this.peek(limit); this.index += limit; return bytes; } at(index) { return this.view[this.index + index]; } takeWhile(fn) { let index = 0; while (!this.done() && fn(this.at(index))) { index += 1; } return this.take(index); } takeUntil(fn) { return this.takeWhile((v) => !fn(v)); } drop(limit) { this.index += limit; return this; } dropWhile(fn) { let index = 0; while (!this.done() && fn(this.at(index))) { index += 1; } return this.drop(index); } dropUntil(fn) { return this.dropWhile((v) => !fn(v)); } peek(limit = 1) { const index = this.index; return this.slice(index, index + limit); } startsWith(value) { if (typeof value === "string") { return this.startsWith(this.encoder.encode(value)); } const length = value.byteLength; const bytes = new Uint8Array(value); return this.peek(length).toBytes().every((v, i) => v === bytes[i]); } slice(start, end) { return new _ByteArray( this.view.subarray(start, end), this.encoder, this.decoder ); } indexOf(value, start = 0) { const search = new Uint8Array(isNumeric(value) ? [value] : value); start = clamp(start, this.index, this.length); const bytes = this.slice(start); for (let i = 0, len = bytes.length; i < len; i++) { if (bytes.at(i) === search[0] && bytes.slice(i).startsWith(search)) { return i; } } return -1; } }; var JSONDeserializer = class { buffer; registry; constructor(buffer, registry = import_serde.GlobalRegistry) { this.buffer = buffer; this.registry = registry; } static fromString(value) { return new this(ByteArray.fromString(value)); } deserializeAny(visitor) { const peek = this.buffer.peek(); const nextByte = peek.take(); const byte = nextByte.next(); switch (true) { case b`n`.includes(byte): return this.deserializeNull(visitor); case b`tf`.includes(byte): return this.deserializeBoolean(visitor); case b`-0123456789`.includes(byte): return this.deserializeNumber(visitor); case Token.Quote === byte: return this.deserializeString(visitor); case Token.LeftSquare === byte: return this.deserializeIterable(visitor); case Token.LeftCurly === byte: return this.deserializeObject(visitor); default: throw new SyntaxError(`Invalid syntax at position ${this.buffer.position}: "${nextByte.toString()}"`); } } deserializeNull(visitor) { if (this.buffer.startsWith("null")) { this.buffer.take(4); } return visitor.visitNull(); } deserializeObject(visitor) { let next = this.buffer.take(); if (next.next() === Token.LeftCurly) { const value = visitor.visitObject(new CommaSeparated(this)); next = this.buffer.take(); if (next.next() === Token.RightCurly) { return value; } else { throw unexpected("}", next.toString(), this.buffer.position); } } else { throw unexpected("{", next.toString(), this.buffer.position); } } deserializeClass(_name, visitor) { return this.deserializeObject(visitor); } deserializeString(visitor) { const next = this.buffer.take(); if (next.next() === Token.Quote) { let index = -1; do { index = this.buffer.indexOf(Token.Quote, index); } while (index > -1 && this.buffer.at(index - 1) === Token.ForwardSlash); if (index === -1) { throw new SyntaxError("Unterminated string literal"); } const bytes = this.buffer.take(index); this.buffer.take(); return visitor.visitString(bytes.toString()); } else { throw unexpected('"', next.toString(), this.buffer.position); } } deserializeNumber(visitor) { const next = this.buffer.peek().next(); if (isNumericToken(next)) { const digits = this.buffer.takeWhile(isNumericToken).toString(); if (digits.length >= 16) { const number = BigInt(digits); return visitor.visitBigInt(number); } else if (digits.length > 0) { let number = parseInt(digits.toString(), 10); return visitor.visitNumber(number); } } throw unexpected('"-", ".", or 0..=9', next.toString(), this.buffer.position); } deserializeBigInt(visitor) { return this.deserializeNumber(visitor); } deserializeBoolean(visitor) { const next = this.buffer.next(); let length = 3; switch (next) { case Literal.False[0]: length = 4; case Literal.True[0]: break; default: throw unexpected('"true" or "false"', this.buffer.next().toString(), this.buffer.position); } this.buffer.take(length); return visitor.visitBoolean(length === 3); } deserializeSymbol(_visitor) { throw new Error("Method not implemented."); } deserializeIterable(visitor) { let next = this.buffer.take(); if (next.next() === Token.LeftSquare) { const value = visitor.visitIterable(new CommaSeparated(this)); next = this.buffer.take(); if (next.next() === Token.RightSquare) { return value; } else { throw unexpected("]", next.toString(), this.buffer.position); } } else { throw unexpected("[", next.toString(), this.buffer.position); } } deserializeFunction(_visitor) { throw new Error("Method not implemented."); } }; // src/index.ts var import_ser3 = __toESM(require_ser()); function toString(value) { const serializer = new JSONSerializer(); (0, import_ser3.serialize)(serializer, value); return serializer.output; } function fromString(value, into) { const deserializer = JSONDeserializer.fromString(value); return (0, import_de2.deserialize)(deserializer, into); } // test.ts var _value_dec, _init; _value_dec = [(0, import_serde2.serde)({ rename: "a_string" })]; var InnerStruct = class { constructor(v) { __publicField(this, "value", __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this); this.value = v; } }; _init = __decoratorStart(null); __decorateElement(_init, 5, "value", _value_dec, InnerStruct); __decoratorMetadata(_init, InnerStruct); var _aNumber_dec, _TestStruct_decorators, _init2; _TestStruct_decorators = [(0, import_serde2.serde)({ renameAll: { serialize: import_serde2.CaseConvention.SnakeCase, deserialize: import_serde2.CaseConvention.CamelCase } })], _aNumber_dec = [(0, import_serde2.serde)({ rename: "a_number", skip: (v) => v == 79 })]; var TestStruct = class { constructor(str2, n) { __publicField(this, "aNumber", __runInitializers(_init2, 8, this)), __runInitializers(_init2, 11, this); __publicField(this, "innerStruct"); this.aNumber = n; this.innerStruct = new InnerStruct(str2); } }; _init2 = __decoratorStart(null); __decorateElement(_init2, 5, "aNumber", _aNumber_dec, TestStruct); TestStruct = __decorateElement(_init2, 0, "TestStruct", _TestStruct_decorators, TestStruct); __runInitializers(_init2, 1, TestStruct); var test = new TestStruct("hi :3", 69); (0, import_serde2.registerSerializer)(InnerStruct, (ser, value) => ser.serializeAny?.(value)); (0, import_serde2.registerDeserializer)(InnerStruct, (de2) => de2.deserializeObject({ visitObject(access) { let value; let entry; while ((entry = access.nextEntry()) && !entry.done) { const [key, val] = entry.value; if (key === "value") { value = val; break; } } return new InnerStruct(value); } })); (0, import_serde2.registerDeserializer)(TestStruct, (de2) => de2.deserializeObject({ visitObject(access) { let str2, num; for (const entry of access) { const [key, value] = entry; switch (key) { case "aNumber": num = value; break; case "innerStruct": const inner = (0, import_de4.deserialize)(import_de4.Forward.with(value), InnerStruct); str2 = inner.value; break; } } return new TestStruct(str2, num); } })); (0, import_serde2.registerSerializer)(TestStruct, (ser, value) => ser.serializeAny(value)); var str = toString(test); console.log(str); var de = fromString(str, TestStruct); console.log(de);