78 lines
2.7 KiB
JavaScript
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);
|
|
}
|
|
}
|