///
import { Readable } from 'stream';
import { JsonStreamOptions } from '../jsonStreamOptions';
import { NextStackElement, StackElementType } from './types';
export declare class StackElement {
private options;
protected isComplete: boolean;
depth: number;
protected value: any;
constructor(value: any, options: JsonStreamOptions, depth: any);
parseValue(value: any, _options?: JsonStreamOptions): any;
static factory(value: any, options: JsonStreamOptions, depth?: number): StackElementType;
spaceStart(char: string): string;
spaceEnd(char: string): string;
newSpacedElement(char: string, start?: boolean): StackElementType;
newElement(value: any, depth?: number): StackElementType;
completed(): void;
nextState(next: any, elements?: any[], done?: boolean): NextStackElement;
next(size: number): Promise | NextStackElement;
debug(msg: string): void;
}
export declare class ObjectStackElement extends StackElement {
protected _first: boolean;
protected value: [any, any][];
constructor(value: Record, options: JsonStreamOptions, depth: number);
get isEmpty(): boolean;
parseValue(value: any, options: JsonStreamOptions): [string, unknown][];
shouldValueBeStringified(value: any): boolean;
next(size: number): NextStackElement;
}
export declare class PromiseStackElement extends StackElement {
next(size: number): Promise;
}
export declare class ArrayStackElement extends StackElement {
atIndex: number;
constructor(value: any, options: JsonStreamOptions, depth: number);
next(size: number): NextStackElement;
}
export declare enum StreamStackElementState {
FIRST = 0,
WAITING = 1,
READABLE = 2,
ENDED = 3,
ERROR = 4
}
export declare class StreamStackElement extends StackElement {
protected value: Readable;
protected state: StreamStackElementState;
protected rejections: Set<(reason: any) => void>;
protected error: Error;
constructor(value: Readable, options: JsonStreamOptions, depth: number);
handleError(error: Error): void;
endState(): NextStackElement;
firstState(): any;
initValidate(): void;
untilReadable(): {
cleanup: () => void;
promise: Promise;
};
untilEnd(): {
cleanup: () => void;
promise: Promise;
};
nextWhenReadable(size: number): Promise | NextStackElement;
nextWhenWaiting(size: number): Promise;
next(size: number): Promise;
end(): void;
}
export declare class ArrayStreamStackElement extends StreamStackElement {
protected _secondStateSent: boolean;
constructor(value: any, options: JsonStreamOptions, depth: number);
endState(): NextStackElement;
firstState(): NextStackElement;
nextState(next: string, elements?: any[]): NextStackElement;
}
export declare class ArrayObjectStreamStackElement extends ArrayStreamStackElement {
nextWhenReadable(size: number): Promise;
}
export declare class StringStreamStackElement extends StreamStackElement {
constructor(value: Readable, options: JsonStreamOptions, depth: number);
endState(): NextStackElement;
firstState(): NextStackElement;
nextWhenReadable(size: number): Promise;
}