From 69e56d2d74c18600808a3d9e0bc46f718655d23b Mon Sep 17 00:00:00 2001 From: rowan Date: Mon, 19 May 2025 13:30:11 -0500 Subject: [PATCH] whatever --- dist/de/impl.js | 2 +- dist/de/interface.d.ts | 1 - dist/de/mixin.js | 2 +- dist/decorator.js | 8 ++++---- dist/options.d.ts | 4 ++-- dist/options.js | 3 +-- dist/ser/impl.js | 9 +-------- dist/ser/interface.d.ts | 1 - dist/ser/interface.js | 2 +- src/de/impl.ts | 2 +- src/de/interface.ts | 1 - src/de/mixin.ts | 2 +- src/decorator.ts | 8 ++++---- src/options.ts | 5 ++--- src/ser/impl.ts | 11 ++--------- src/ser/interface.ts | 4 ++-- 16 files changed, 23 insertions(+), 42 deletions(-) diff --git a/dist/de/impl.js b/dist/de/impl.js index 0fbae3e..4493749 100644 --- a/dist/de/impl.js +++ b/dist/de/impl.js @@ -5,8 +5,8 @@ const options_1 = require("../options"); const generic_1 = require("./generic"); function deserializeWith(deserializer, into, options) { const visitor = new generic_1.GenericVisitor(); - const obj = deserializer.deserializeObject(visitor); const target = new into(); + const obj = deserializer.deserializeObject(visitor); const newObject = {}; for (const property in target) { const name = options.getPropertyName(property, options_1.Stage.Deserialize); diff --git a/dist/de/interface.d.ts b/dist/de/interface.d.ts index bb0403d..aca1ddf 100644 --- a/dist/de/interface.d.ts +++ b/dist/de/interface.d.ts @@ -44,7 +44,6 @@ export interface Deserializer { deserializeSymbol>(visitor: V): T; deserializeNull>(visitor: V): T; deserializeObject>(visitor: V): T; - deserializeClass>(name: string, fields: string[], visitor: V): T; deserializeIterable>(visitor: V): T; } export interface Deserialize { diff --git a/dist/de/mixin.js b/dist/de/mixin.js index 6544f19..a3617c5 100644 --- a/dist/de/mixin.js +++ b/dist/de/mixin.js @@ -50,7 +50,7 @@ function deserialize(constructor) { let _classSuper = constructor; var Deserializable = _classThis = class extends _classSuper { static deserialize(deserializer) { - return (0, impl_1.deserializeWith)(deserializer, this, constructor[Symbol.metadata]); + return (0, impl_1.deserializeWith)(deserializer, this, this[Symbol.metadata].serde); } }; __setFunctionName(_classThis, "Deserializable"); diff --git a/dist/decorator.js b/dist/decorator.js index 61a64f4..0fea743 100644 --- a/dist/decorator.js +++ b/dist/decorator.js @@ -7,23 +7,23 @@ const registry_1 = require("./registry"); function decorateContainer(target, context, options) { const meta = context.metadata; const serde = (meta.serde || new options_1.SerdeOptions(target)); + serde.target = target; serde.options = options; meta.serde = serde; } function decorateProperty(target, context, options) { const meta = context.metadata; const serde = (meta.serde || new options_1.SerdeOptions(target)); - serde.properties.set(context, options); + serde.properties.set(context.name, options); meta.serde = serde; } function serde(options) { return function (target, context) { - if (context != null) { + if (target == null) { decorateProperty(target, context, options); } - else { + else decorateContainer(target, context, options); - } }; } function register(registry = registry_1.GlobalRegistry) { diff --git a/dist/options.d.ts b/dist/options.d.ts index ca91c62..d38ad43 100644 --- a/dist/options.d.ts +++ b/dist/options.d.ts @@ -43,11 +43,11 @@ export declare const Stage: Readonly<{ }>; export type Stage = typeof Stage[keyof typeof Stage]; export declare class SerdeOptions { - private readonly target; + target: any; readonly options: ContainerOptions; readonly properties: Map; get registry(): Registry; - constructor(target: any, options?: ContainerOptions, properties?: Map); + constructor(options?: ContainerOptions, properties?: Map); static from(target: any): SerdeOptions; getClassName(stage: Stage): any; private getPropertyRename; diff --git a/dist/options.js b/dist/options.js index a396ef4..9654cb9 100644 --- a/dist/options.js +++ b/dist/options.js @@ -12,7 +12,7 @@ class SerdeOptions { get registry() { return this.options.registry || registry_1.GlobalRegistry; } - constructor(target, options = {}, properties = new Map()) { + constructor(options = {}, properties = new Map()) { Object.defineProperty(this, "target", { enumerable: true, configurable: true, @@ -31,7 +31,6 @@ class SerdeOptions { writable: true, value: void 0 }); - this.target = target; this.options = options; this.properties = properties; } diff --git a/dist/ser/impl.js b/dist/ser/impl.js index 6200e8e..c571ae2 100644 --- a/dist/ser/impl.js +++ b/dist/ser/impl.js @@ -17,10 +17,6 @@ function serializeEntries(serializer, value, options) { } return serializer.end(); } -function serializeClass(serializer, value, options) { - const classSerializer = serializer.serializeClass(value.constructor.name); - return serializeEntries(classSerializer, Object.entries(value), options); -} function serializeObject(serializer, value, options) { return serializeEntries(serializer.serializeObject(), Object.entries(value), options); } @@ -32,7 +28,7 @@ function serializeIter(serializer, value, options) { return serializer.end(); } function defaultOptions(value) { - return value.constructor[Symbol.metadata]; + return value.constructor[Symbol.metadata].serde; } // dispatches in the order of serializeType -> serializeAny -> throw TypeError function serializeWith(serializer, value, optionsGetter = defaultOptions) { @@ -51,9 +47,6 @@ function serializeWith(serializer, value, optionsGetter = defaultOptions) { if ((0, utils_1.isIterable)(value) && (0, utils_1.isFunction)(serializer.serializeIterable)) { return serializeIter(serializer.serializeIterable(), value, options); } - if (!(0, utils_1.isPlainObject)(value)) { - return serializeClass(serializer, value, options); - } else if ((0, utils_1.isFunction)(serializer.serializeObject)) { return serializeObject(serializer, value, options); } // deliberate fallthrough when the above fail diff --git a/dist/ser/interface.d.ts b/dist/ser/interface.d.ts index af8741b..b4a028c 100644 --- a/dist/ser/interface.d.ts +++ b/dist/ser/interface.d.ts @@ -17,7 +17,6 @@ interface TypeSerializer { serializeNull(): T; serializeObject(): ObjectSerializer; serializeIterable?(): IterableSerializer; - serializeClass(name: PropertyKey): ObjectSerializer; } interface AnySerializer { serializeAny?(value?: any): T; diff --git a/dist/ser/interface.js b/dist/ser/interface.js index d0a2e57..b0fe4a5 100644 --- a/dist/ser/interface.js +++ b/dist/ser/interface.js @@ -12,7 +12,7 @@ const TypeSerializerMethods = [ 'serializeIterable', 'serializeNull', 'serializeObject', - 'serializeClass', + //'serializeClass', ]; const AnySerializerMethods = ['serializeAny']; function isGenericSerializer(value) { diff --git a/src/de/impl.ts b/src/de/impl.ts index 27ae2a4..3802642 100644 --- a/src/de/impl.ts +++ b/src/de/impl.ts @@ -6,8 +6,8 @@ type DeserializeConstructor = Deserialize & { new(): Deserialize } export function deserializeWith>(deserializer: D, into: E, options: SerdeOptions): T { const visitor = new GenericVisitor() - const obj = deserializer.deserializeObject(visitor) as any const target = new into() + const obj = deserializer.deserializeObject(visitor) as any const newObject = {} as any for (const property in target) { diff --git a/src/de/interface.ts b/src/de/interface.ts index b572ca5..d666455 100644 --- a/src/de/interface.ts +++ b/src/de/interface.ts @@ -74,7 +74,6 @@ export interface Deserializer { deserializeSymbol>(visitor: V): T deserializeNull>(visitor: V): T deserializeObject>(visitor: V): T - deserializeClass>(name: string, fields: string[], visitor: V): T deserializeIterable>(visitor: V): T } diff --git a/src/de/mixin.ts b/src/de/mixin.ts index 26e1d9c..814673e 100644 --- a/src/de/mixin.ts +++ b/src/de/mixin.ts @@ -8,7 +8,7 @@ export function deserialize(constructor: C) { static name = constructor.name static deserialize(deserializer: D): T { - return deserializeWith(deserializer, this, (constructor as any)[Symbol.metadata]) + return deserializeWith(deserializer, this, (this as any)[Symbol.metadata].serde) } } diff --git a/src/decorator.ts b/src/decorator.ts index 1817496..7dd7e29 100644 --- a/src/decorator.ts +++ b/src/decorator.ts @@ -4,6 +4,7 @@ import { GlobalRegistry, Registry } from './registry' function decorateContainer(target: any, context: any, options: ContainerOptions) { const meta = context.metadata const serde = (meta.serde || new SerdeOptions(target)) + serde.target = target serde.options = options meta.serde = serde } @@ -11,18 +12,17 @@ function decorateContainer(target: any, context: any, options: ContainerOptions) function decorateProperty(target: any, context: any, options: PropertyOptions) { const meta = context.metadata const serde = (meta.serde || new SerdeOptions(target)) - serde.properties.set(context, options) + serde.properties.set(context.name, options) meta.serde = serde } export function serde(options: ContainerOptions | PropertyOptions) { return function(target: any, context: any) { - if (context != null) { + if (target == null) { decorateProperty(target, context, options as PropertyOptions) - } else { + } else decorateContainer(target, context, options as ContainerOptions) - } } } diff --git a/src/options.ts b/src/options.ts index d99d138..c8cd724 100644 --- a/src/options.ts +++ b/src/options.ts @@ -60,7 +60,7 @@ export const Stage = Object.freeze({ export type Stage = typeof Stage[keyof typeof Stage] export class SerdeOptions { - private readonly target: any + target: any readonly options: ContainerOptions readonly properties: Map @@ -68,8 +68,7 @@ export class SerdeOptions { return this.options.registry || GlobalRegistry } - constructor(target: any, options: ContainerOptions = {}, properties: Map = new Map()) { - this.target = target + constructor(options: ContainerOptions = {}, properties: Map = new Map()) { this.options = options this.properties = properties } diff --git a/src/ser/impl.ts b/src/ser/impl.ts index 97153d2..c76ecab 100644 --- a/src/ser/impl.ts +++ b/src/ser/impl.ts @@ -1,6 +1,6 @@ import { IterableSerializer, ObjectSerializer, Serializable, Serializer } from './interface' import { SerdeOptions, Stage } from '../options' -import { ifNull, isFunction, isIterable, isPlainObject, Nullable, orElse } from '../utils' +import { ifNull, isFunction, isIterable, Nullable, orElse } from '../utils' const unhandledType = (serializer: any, value: any) => new TypeError(`'${serializer.constructor.name}' has no method for value type '${typeof value}'`) @@ -20,11 +20,6 @@ function serializeEntries>(serializer: Serializer, value: R, options?: SerdeOptions) { - const classSerializer = serializer.serializeClass!(value.constructor.name) - return serializeEntries(classSerializer, Object.entries(value) as Iterable<[K, V]>, options) -} - function serializeObject>(serializer: Serializer, value: R, options?: SerdeOptions) { return serializeEntries(serializer.serializeObject!(), Object.entries(value) as Iterable<[K, V]>, options) } @@ -40,7 +35,7 @@ function serializeIter>(serializer: IterableSerialize } function defaultOptions(value: any) { - return value.constructor[Symbol.metadata] + return value.constructor[Symbol.metadata].serde } // dispatches in the order of serializeType -> serializeAny -> throw TypeError @@ -66,8 +61,6 @@ export function serializeWith(serializer: Serializer, value: Serializable, const options = optionsGetter(value) if (isIterable(value) && isFunction(serializer.serializeIterable)) { return serializeIter(serializer.serializeIterable(), value, options) - } if (!isPlainObject(value)) { - return serializeClass(serializer, value as Record, options) } else if (isFunction(serializer.serializeObject)) { return serializeObject(serializer, value as Record, options) } // deliberate fallthrough when the above fail diff --git a/src/ser/interface.ts b/src/ser/interface.ts index fd1c3f2..5d9996a 100644 --- a/src/ser/interface.ts +++ b/src/ser/interface.ts @@ -21,7 +21,7 @@ const TypeSerializerMethods = [ 'serializeIterable', 'serializeNull', 'serializeObject', - 'serializeClass', + //'serializeClass', ] as const interface TypeSerializer { @@ -34,7 +34,7 @@ interface TypeSerializer { serializeObject(): ObjectSerializer // serializeMap?(): ObjectSerializer serializeIterable?(): IterableSerializer - serializeClass(name: PropertyKey): ObjectSerializer + //serializeClass(name: PropertyKey): ObjectSerializer } const AnySerializerMethods = ['serializeAny']