serde-ts/dist/ser/impl.js

78 lines
2.7 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Serializer = exports.SerializeIterable = exports.SerializeObject = void 0;
exports.serialize = serialize;
class SerializeObject {
serializeEntry(key, value) {
this.serializeKey(key);
this.serializeValue(value);
}
}
exports.SerializeObject = SerializeObject;
class SerializeIterable {
}
exports.SerializeIterable = SerializeIterable;
class Serializer {
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.');
}
}
exports.Serializer = Serializer;
const isPlainObject = (value) => (value === null || value === void 0 ? void 0 : value.constructor) === Object;
class UnhandledTypeError extends TypeError {
constructor(serializer, value) {
super(`unhandled type: "${typeof value}" for serializer ${serializer.constructor.name}`);
}
}
function serializeObject(serializer, obj) {
for (const key in obj) {
serializer.serializeEntry(key, obj[key]);
}
return serializer.end();
}
function serializeClass(serializer, value) {
const name = value.constructor.name;
const ser = serializer.serializeClass(name);
return serializeObject(ser, value);
}
function serialize(serializer, value) {
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":
switch (true) {
case value == null: return serializer.serializeNull();
case !isPlainObject(value): return serializeClass(serializer, value);
default: return serializeObject(serializer.serializeObject(), value);
}
default: throw new UnhandledTypeError(serializer, value);
}
}