107 lines
4.6 KiB
TypeScript
107 lines
4.6 KiB
TypeScript
import { Registry } from '../registry';
|
|
import { Constructor } from '../utils';
|
|
type Nullable<T> = T | undefined;
|
|
export declare class IterResult {
|
|
static Next<T>(value: T): IteratorResult<T>;
|
|
static Done<T>(): IteratorResult<T>;
|
|
}
|
|
export interface IMapAccess {
|
|
nextKeySeed<T, K extends Deserialize>(seed: K): IteratorResult<T>;
|
|
nextValueSeed<T, V extends Deserialize>(seed: V): IteratorResult<T>;
|
|
nextEntrySeed<TK, TV, K extends Deserialize, V extends Deserialize>(kseed: K, vseed: V): IteratorResult<[TK, TV]>;
|
|
nextKey<T>(): IteratorResult<T>;
|
|
nextValue<V>(): IteratorResult<V>;
|
|
nextEntry<K, V>(): IteratorResult<[K, V]>;
|
|
sizeHint?(): Nullable<number>;
|
|
}
|
|
export declare abstract class MapAccess {
|
|
abstract nextKeySeed<T, K extends Deserialize>(seed: K): IteratorResult<T>;
|
|
abstract nextValueSeed<T, V extends Deserialize>(seed: V): IteratorResult<T>;
|
|
nextEntrySeed<TK, TV, K extends Deserialize, V extends Deserialize>(kseed: K, vseed: V): IteratorResult<[TK, TV]>;
|
|
abstract nextKey<T>(): IteratorResult<T>;
|
|
abstract nextValue<V>(): IteratorResult<V>;
|
|
nextEntry<K, V>(): IteratorResult<[K, V]>;
|
|
}
|
|
export interface IIterableAccess {
|
|
nextElement<T>(): IteratorResult<T>;
|
|
sizeHint?(): Nullable<number>;
|
|
}
|
|
export declare abstract class IterableAccess implements IIterableAccess {
|
|
abstract nextElement<T>(): IteratorResult<T>;
|
|
}
|
|
export interface IVisitor<T> {
|
|
visitBoolean(value: boolean): T;
|
|
visitNumber(value: number): T;
|
|
visitBigInt(value: bigint): T;
|
|
visitString(value: string): T;
|
|
visitSymbol(value: symbol): T;
|
|
visitNull(): T;
|
|
visitObject(access: IMapAccess): T;
|
|
visitIterable(access: IIterableAccess): T;
|
|
}
|
|
export declare class GenericSeed<T> {
|
|
readonly visitor: IVisitor<T>;
|
|
constructor(visitor?: IVisitor<T>);
|
|
static deserialize<T, D extends IDeserializer>(deserializer: D, visitor?: IVisitor<T>): T;
|
|
deserialize<D extends IDeserializer>(deserializer: D): T;
|
|
}
|
|
export declare class GenericVisitor<T> implements IVisitor<T> {
|
|
visitBoolean(value: boolean): T;
|
|
visitNumber(value: number): T;
|
|
visitBigInt(value: bigint): T;
|
|
visitString(value: string): T;
|
|
visitSymbol(value: symbol): T;
|
|
visitNull(): T;
|
|
visitObject(access: IMapAccess): T;
|
|
visitIterable(access: IIterableAccess): T;
|
|
}
|
|
export interface IDeserializer {
|
|
deserializeAny<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeBoolean<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeNumber<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeBigInt<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeString<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeSymbol<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeNull<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeObject<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeIterable<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeFunction<T, V extends IVisitor<T>>(visitor: V): T;
|
|
}
|
|
export declare class ForwardMapAccess extends MapAccess {
|
|
private readonly keys;
|
|
private readonly values;
|
|
private kindex;
|
|
private vindex;
|
|
constructor(keys: string[], values: any[]);
|
|
static fromObject(obj: object): ForwardMapAccess;
|
|
nextKeySeed<T, K extends Deserialize>(_seed: K): IteratorResult<T>;
|
|
nextValueSeed<T, V extends Deserialize>(_seed: V): IteratorResult<T>;
|
|
nextKey<T>(): IteratorResult<T>;
|
|
nextValue<V>(): IteratorResult<V>;
|
|
}
|
|
export declare class ForwardIterableAccess extends IterableAccess {
|
|
private readonly items;
|
|
private index;
|
|
constructor(items: any[]);
|
|
nextElement<T>(): IteratorResult<T>;
|
|
}
|
|
export declare class Forward implements IDeserializer {
|
|
private readonly value;
|
|
constructor(value: any);
|
|
static with(value: any): Forward;
|
|
deserializeAny<T, V extends IVisitor<T>>(_visitor: V): T;
|
|
deserializeBoolean<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeNumber<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeBigInt<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeString<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeSymbol<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeNull<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeObject<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeIterable<T, V extends IVisitor<T>>(visitor: V): T;
|
|
deserializeFunction<T, V extends IVisitor<T>>(_visitor: V): T;
|
|
}
|
|
export interface Deserialize {
|
|
<T>(deserializer: IDeserializer): T;
|
|
}
|
|
export declare function deserialize<T, D extends IDeserializer>(deserializer: D, into: Constructor<T>, registry?: Registry): T;
|
|
export {};
|