serde-json-ts/dist/test.js
2025-05-24 04:09:56 -05:00

1600 lines
56 KiB
JavaScript

"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);