serde-ts/dist/ser/impl.js

38 lines
1.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.serialize = serialize;
const utils_1 = require("../utils");
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) {
const value = obj[key];
serializer.serializeEntry(key, value);
}
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 !(0, utils_1.isPlainObject)(value): return serializeClass(serializer, value);
default: return serializeObject(serializer.serializeObject(), value);
}
default: throw new UnhandledTypeError(serializer, value);
}
}