import { OperatorFunction, Observable } from 'rxjs';
import { BasicLogger } from './basicLogger';
import { TagNotification } from '../notifications';
export declare type LogNotification = TagNotification | 'audit';
export interface ILogTextParams {
    prefix: string;
    tags?: unknown[];
    suffix?: unknown[];
}
export declare type LogOn<K extends string = string> = Array<LogNotification | Observable<K>>;
export interface ILogStreamParamsCore<T, Y> extends ILogTextParams {
    on?: LogOn;
    project?: (stream: Observable<T>) => Observable<Y>;
    logger?: BasicLogger;
}
export declare type LogTextParamsMap = Partial<Record<LogNotification, ILogTextParams>>;
export declare type LogStreamParams<T, Y> = ILogStreamParamsCore<T, Y> & LogTextParamsMap;
export declare type LogEventsArg<T, Y> = LogStreamParams<T, Y> | string;
export declare function logEventsParams<T, Y>(arg: LogEventsArg<T, Y>, defaultLogger?: Readonly<{
    log: (message?: unknown, ...parameters: unknown[]) => void;
    warn: (message?: unknown, ...parameters: unknown[]) => void;
    error: (message?: unknown, ...parameters: unknown[]) => void;
}>): LogStreamParams<T, Y> & {
    logger: BasicLogger;
};
export declare function logEvents<T, Y>(paramsRaw: LogEventsArg<T, Y>): OperatorFunction<T, T>;
export declare type LogEventsOperator<T, Y> = (paramsRaw: LogEventsArg<T, Y>) => OperatorFunction<T, T>;
export declare function createTaggedLogEvents(tags: unknown[], logger?: Readonly<{
    log: (message?: unknown, ...parameters: unknown[]) => void;
    warn: (message?: unknown, ...parameters: unknown[]) => void;
    error: (message?: unknown, ...parameters: unknown[]) => void;
}>): {
    <T, Y>(paramsRaw: LogEventsArg<T, Y>): OperatorFunction<T, T>;
    withTags(...extraTags: unknown[]): any;
};
export declare type TaggedLogEventsOperator = ReturnType<typeof createTaggedLogEvents>;
