import * as i0 from '@angular/core';
import { Provider, InjectionToken } from '@angular/core';
import * as _ngworker_lumberjack from '@ngworker/lumberjack';
import { LumberjackLogDriverConfig, LumberjackLogPayload, LumberjackLogDriver, LumberjackLogDriverLog } from '@ngworker/lumberjack';

/**
 * Settings used by the console driver.
 */
type LumberjackConsoleDriverConfig = Omit<LumberjackLogDriverConfig, 'identifier'> & Partial<Pick<LumberjackLogDriverConfig, 'identifier'>>;

/**
 * Returns the [dependency-injection providers](https://angular.io/guide/glossary#provider)
 *
 * for the `LumberjackConsoleDriver` and its `LumberjackConsoleDriverConfig`.
 * @usageNotes
 *
 * The function is useful when you want to bootstrap an application using
 * the `bootstrapApplication` function and want to make available the `LumberjackConsoleDriver` providers.
 *
 * ```typescript
 * bootstrapApplication(RootComponent, {
 *   providers: [
 *    provideLumberjack({...}),
 *    provideLumberjackConsoleDriver({...})
 *   ]
 * });
 * ```
 *
 * @publicApi
 */
declare function provideLumberjackConsoleDriver(config?: Partial<LumberjackConsoleDriverConfig>): Provider[];

/**
 * Browser console abstraction used by the console driver.
 */
type LumberjackConsole = Pick<Console, 'debug' | 'error' | 'info' | 'trace' | 'warn'>;

/**
 * Wraps the browser console abstraction used by the console driver to make it
 * overridable in tests or add additional information to console logs.
 */
declare const lumberjackConsoleToken: InjectionToken<LumberjackConsole>;

/**
 * The console driver outputs logs to the browser console.
 *
 * It forwards the formatted log and the optional log payload to the relevant
 * method of the browser console API.
 */
declare class LumberjackConsoleDriver<TPayload extends LumberjackLogPayload | void = void> implements LumberjackLogDriver<TPayload> {
    #private;
    static readonly driverIdentifier = "LumberjackConsoleDriver";
    readonly config: _ngworker_lumberjack.LumberjackLogDriverConfig;
    /**
     * Output console error.
     *
     * @param param0 The log and its text representation.
     */
    logCritical({ formattedLog, log: { payload } }: LumberjackLogDriverLog<TPayload>): void;
    /**
     * Output console debug message.
     *
     * @param param0 The log and its text representation.
     */
    logDebug({ formattedLog, log: { payload } }: LumberjackLogDriverLog<TPayload>): void;
    /**
     * Output console error.
     *
     * @param param0 The log and its text representation.
     */
    logError({ formattedLog, log: { payload } }: LumberjackLogDriverLog<TPayload>): void;
    /**
     * Output console info.
     *
     * @param param0 The log and its text representation.
     */
    logInfo({ formattedLog, log: { payload } }: LumberjackLogDriverLog<TPayload>): void;
    /**
     * Output console trace.
     *
     * @param param0 The log and its text representation.
     */
    logTrace({ formattedLog, log: { payload } }: LumberjackLogDriverLog<TPayload>): void;
    /**
     * Output console warning.
     *
     * @param param0 The log and its text representation.
     */
    logWarning({ formattedLog, log: { payload } }: LumberjackLogDriverLog<TPayload>): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<LumberjackConsoleDriver<any>, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<LumberjackConsoleDriver<any>>;
}

export { LumberjackConsoleDriver, lumberjackConsoleToken, provideLumberjackConsoleDriver };
export type { LumberjackConsole };
