import { EncoderDecoder } from '@iotize/common/converter/api'; import { Observable, Subject } from 'rxjs'; export type KeyTypeType = string | number | symbol; export interface EditableRawDataStreamInterface { /** * Stream identifier */ id: KeyType; /** * Last raw value or undefined */ rawValueSnaphot: RawType | undefined; /** * Raw values observable */ rawValues: Observable; /** * Read raw value. * It may also trigger a value changed event */ readRaw(): Promise; /** * Write raw value * @param data */ writeRaw(data: RawType): Promise; /** * Notify observers that value has changed * Both rawValues and values observable will be notified * @param newValue */ notifyRawValue(newValue: RawType): void; } export interface EditableValueDataStreamInterface { /** * Stream identifier */ id: KeyType; /** * Last value or undefined */ valueSnapshot: DataType | undefined; /** * Values observable */ values: Observable; /** * Read value. * It may also trigger a value changed event */ read(): Promise; /** * Write given value * @param value */ write(value: DataType): Promise; } /** * Data stream that can be edited (with read/write raw function) */ export interface EditableDataStreamInterface extends EditableRawDataStreamInterface, EditableValueDataStreamInterface { } export type RawBundleType = Record; export interface BundleDataStreamInterface> extends EditableDataStreamInterface, keyof DataType> { variables: EditableDataStreamInterface[]; variable(id: keyof DataType): EditableDataStreamInterface; } export declare abstract class AbstractBundleDataStream> implements BundleDataStreamInterface> { private _variables; abstract id: KeyTypeType; get variables(): EditableDataStreamInterface, keyof DataType>[]; constructor(_variables: Record>); abstract readRawInner(): Promise>; readRaw(): Promise>; read(): Promise; write(value: DataType): Promise; variable(id: Key): EditableDataStreamInterface; get rawValues(): Observable>; get rawValueSnaphot(): RawBundleType; get valueSnapshot(): DataType; get values(): Observable; notifyRawValue(v: RawBundleType): Promise; findVariable(id: keyof DataType): Record, keyof DataType>>[keyof DataType] | undefined; hasVariable(id: keyof DataType): boolean; writeRaw(values: RawBundleType): Promise; } export declare abstract class AbstractEditableDataStream implements EditableDataStreamInterface { abstract id: KeyType; private _lastRawValue?; abstract converter: EncoderDecoder; get lastRawValue(): RawType | undefined; protected rawDataStream: Subject; readonly values: Observable; constructor(); abstract readRawInner(): Promise; abstract writeRaw(value: RawType): Promise; get rawValueSnaphot(): RawType | undefined; get valueSnapshot(): DataType | undefined; get rawValues(): Observable; notifyRawValue(newValue: RawType): Promise; readRaw(): Promise; read(): Promise; write(value: DataType): Promise; private encodeValue; private decodeValue; }