diff --git a/dist/de/index.d.ts b/dist/de/index.d.ts index fefcc75..7d961fa 100644 --- a/dist/de/index.d.ts +++ b/dist/de/index.d.ts @@ -1,4 +1,3 @@ -export * from './forward'; export * from './generic'; export * from './impl'; export * from './interface'; diff --git a/dist/de/index.js b/dist/de/index.js index bfbd240..94c91a2 100644 --- a/dist/de/index.js +++ b/dist/de/index.js @@ -14,7 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./forward"), exports); __exportStar(require("./generic"), exports); __exportStar(require("./impl"), exports); __exportStar(require("./interface"), exports); diff --git a/dist/de/interface.d.ts b/dist/de/interface.d.ts index b39a496..ffd531f 100644 --- a/dist/de/interface.d.ts +++ b/dist/de/interface.d.ts @@ -15,6 +15,7 @@ export interface IMapAccess { export declare abstract class MapAccess { abstract nextKeySeed>(seed: K): IteratorResult; abstract nextValueSeed>(seed: V): IteratorResult; + private orDefaultSeed; nextEntrySeed, V extends Deserialize>(kseed: K, vseed: V): IteratorResult<[TK, TV]>; nextKey(): IteratorResult; nextValue(): IteratorResult; diff --git a/dist/de/interface.js b/dist/de/interface.js index b473fc9..d6a2a9d 100644 --- a/dist/de/interface.js +++ b/dist/de/interface.js @@ -5,6 +5,9 @@ exports.isVisitor = isVisitor; const utils_1 = require("../utils"); const generic_1 = require("./generic"); class MapAccess { + orDefaultSeed(seed) { + return seed || generic_1.GenericSeed.deserialize; + } nextEntrySeed(kseed, vseed) { const key = this.nextKeySeed(kseed); if (!key.done) { @@ -48,9 +51,9 @@ class MapAccess { this.nextValueSeed.bind(this, seed)); } entries(kseed, vseed) { - return this.generate(kseed == null || vseed == null ? + return this.generate(kseed == null && vseed == null ? this.nextEntry.bind(this) : - this.nextEntrySeed.bind(this, kseed, vseed)); + this.nextEntrySeed.bind(this, this.orDefaultSeed(kseed), this.orDefaultSeed(vseed))); } [Symbol.iterator]() { return this.entries(); diff --git a/dist/ser/interface.d.ts b/dist/ser/interface.d.ts index 139dfeb..54aeb32 100644 --- a/dist/ser/interface.d.ts +++ b/dist/ser/interface.d.ts @@ -26,12 +26,11 @@ export interface ISerializer { serializeString(value: string): T; serializeSymbol(value: symbol): T; serializeNull(): T; - serializeObject(): ISerializeObject; - serializeIterable(): ISerializeIterable; - serializeClass(name: string): ISerializeObject; + serializeIterable(len?: number): ISerializeIterable; + serializeObject(len?: number): ISerializeObject; + serializeClass(name: string, len?: number): ISerializeObject; } export declare class Serializer implements ISerializer { - serializeIterable(): ISerializeIterable; serializeAny(_value: any): T; serializeBoolean(_value: boolean): T; serializeNumber(_value: number): T; @@ -39,8 +38,9 @@ export declare class Serializer implements ISerializer { serializeString(_value: string): T; serializeSymbol(_value: symbol): T; serializeNull(): T; - serializeObject(): ISerializeObject; - serializeClass(_name: string): ISerializeObject; + serializeIterable(_len: number): ISerializeIterable; + serializeObject(_len: number): ISerializeObject; + serializeClass(_name: string, _len: number): ISerializeObject; } export interface Serialize { (serializer: ISerializer, value: U): T; diff --git a/dist/ser/interface.js b/dist/ser/interface.js index 7e836d0..cdf11bd 100644 --- a/dist/ser/interface.js +++ b/dist/ser/interface.js @@ -12,9 +12,6 @@ class SerializeIterable { } exports.SerializeIterable = SerializeIterable; class Serializer { - serializeIterable() { - throw new Error("Method not implemented."); - } serializeAny(_value) { throw new Error("Method not implemented."); } @@ -36,10 +33,13 @@ class Serializer { serializeNull() { throw new Error('Method not implemented.'); } - serializeObject() { + serializeIterable(_len) { + throw new Error("Method not implemented."); + } + serializeObject(_len) { throw new Error('Method not implemented.'); } - serializeClass(_name) { + serializeClass(_name, _len) { throw new Error('Method not implemented.'); } } diff --git a/src/de/forward.ts b/src/de/forward.ts deleted file mode 100644 index d535dcd..0000000 --- a/src/de/forward.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { IterResult } from '../utils' -import { Deserialize, IDeserializer, IterableAccess, IVisitor, MapAccess } from './interface' - -export class ForwardMapAccess extends MapAccess { - private readonly _keys: string[] - private readonly _values: any[] - - private kindex: number = 0 - private vindex: number = 0 - - constructor(keys: string[], values: any[]) { - super() - this._keys = keys - this._values = values - } - - static fromObject(obj: object): ForwardMapAccess { - return new ForwardMapAccess( - Object.keys(obj), - Object.values(obj) - ) - } - - nextKeySeed>(_seed: K): IteratorResult { - return this.nextKey() - } - - nextValueSeed>(_seed: V): IteratorResult { - return this.nextValue() - } - - nextKey(): IteratorResult { - if (this.kindex < this.keys.length) { - return IterResult.Next(this._keys[this.kindex++]) as IteratorResult - } else { - return IterResult.Done() - } - } - - nextValue(): IteratorResult { - if (this.vindex < this.values.length) { - return IterResult.Next(this._values[this.vindex++]) as IteratorResult - } else { - return IterResult.Done() - } - } -} - -export class ForwardIterableAccess extends IterableAccess { - private readonly items: any[] - private index: number = 0 - - constructor(items: any[]) { - super() - this.items = items - } - - nextElement(): IteratorResult { - if (this.index < this.items.length) { - return IterResult.Next(this.items[this.index++]) as IteratorResult - } else { - return IterResult.Done() - } - } -} - -export class Forward implements IDeserializer { - private readonly value: any - - constructor(value: any) { - this.value = value - } - - static with(value: any): Forward { - return new this(value) - } - - deserializeAny>(_visitor: V): T { - throw new Error("Can't forward to deserializeAny") - } - - deserializeBoolean>(visitor: V): T { - return visitor.visitBoolean(this.value) - } - - deserializeNumber>(visitor: V): T { - return visitor.visitNumber(this.value) - } - - deserializeBigInt>(visitor: V): T { - return visitor.visitBigInt(this.value) - } - - deserializeString>(visitor: V): T { - return visitor.visitString(this.value) - } - - deserializeSymbol>(visitor: V): T { - return visitor.visitSymbol(this.value) - } - - deserializeNull>(visitor: V): T { - return visitor.visitNull() - } - - deserializeObject>(visitor: V): T { - return visitor.visitObject(ForwardMapAccess.fromObject(this.value)) - } - - deserializeIterable>(visitor: V): T { - return visitor.visitIterable(new ForwardIterableAccess(this.value)) - } - - deserializeFunction>(_visitor: V): T { - throw new Error('Method not implemented.') - } -} - diff --git a/src/de/index.ts b/src/de/index.ts index bf995e2..61be4af 100644 --- a/src/de/index.ts +++ b/src/de/index.ts @@ -1,4 +1,3 @@ -export * from './forward' export * from './generic' export * from './impl' export * from './interface'