/// <reference types="@rbxts/types" />
/// <reference types="@rbxts/compiler-types" />
import { LogEvent } from "@rbxts/log";
import { ZirconStandardOutput, ZirconiumRuntimeErrorMessage, ZirconiumParserErrorMessage, ZirconLogOutput, ZirconLogErrorOutput } from "../Shared/Remotes";
export declare const enum ZirconContext {
    Server = 0,
    Client = 1
}
export declare type ZirconTag = string | Instance | {
    toString(): string;
};
export interface ZirconLoggable {
    toString(): string;
}
export interface ZirconDebugInfo {
    Source: string;
    LineNumber: number;
    Name: string;
}
/**
 * Extra logging data relating to the specified log message
 */
export interface ZirconLogData {
    /**
     * The player this message relates to
     */
    Player?: Player;
    /**
     * Key value pairs of metadata set by the developer. This will show in the detailed log view.
     *
     * Will layout like:
     * ```
     * KEY1		VALUE1
     * KEY2		VALUE2
     * KEY3		VALUE3
     * ```
     */
    Attributes?: Record<string, defined>;
    Variables: Array<unknown>;
    /**
     * The stack trace of this message.
     *
     * This is populated by default via Zircon
     */
    StackTrace?: string[];
    /**
     * Function stack details
     */
    FunctionStack?: ZirconDebugInfo[];
    CallDebugInfo?: ZirconDebugInfo;
}
export declare enum ZirconLogLevel {
    Verbose = 0,
    Debug = 1,
    Info = 2,
    Warning = 3,
    Error = 4,
    Wtf = 5
}
export declare const enum ZirconMessageType {
    ZirconiumOutput = "zr:output",
    ZirconiumError = "zr:error",
    ZirconiumExecutionMessage = "zr:execute",
    /** @deprecated */
    ZirconLogOutputMesage = "zirclog:message",
    /** @deprecated */
    ZirconLogErrorMessage = "zirclog:error",
    LogOutputMessage = "log:output",
    StructuredLog = "slog:output",
    StructuredError = "slog:err",
    PlainText = "plain"
}
export declare function isContextMessage(message: ConsoleMessage): message is ZrOutputMessage | ZrErrorMessage | ZirconLogMessage | ZirconLogError | ZirconStructuredLogMessage;
export declare function getMessageText(message: ConsoleMessage): string;
export declare function isLogMessage(message: ConsoleMessage): message is ZirconLogMessage | ZirconLogError | ZirconStructuredLogMessage;
export declare function getLogLevel(message: ConsoleMessage): ZirconLogLevel;
interface ZirconContextMessage {
    readonly context: ZirconContext;
}
export interface ZrOutputMessage extends ZirconContextMessage {
    readonly type: ZirconMessageType.ZirconiumOutput;
    readonly script?: string;
    readonly message: ZirconStandardOutput;
}
export interface ConsolePlainMessage {
    readonly type: ZirconMessageType.PlainText;
    readonly message: string;
}
export interface ConsoleSyntaxMessage {
    readonly type: ZirconMessageType.ZirconiumExecutionMessage;
    readonly source: string;
}
export interface ZrErrorMessage extends ZirconContextMessage {
    readonly type: ZirconMessageType.ZirconiumError;
    readonly script?: string;
    readonly error: ZirconiumRuntimeErrorMessage | ZirconiumParserErrorMessage;
}
export interface ConsoleLuauError extends ZirconContextMessage {
    readonly type: "luau:error";
    readonly error: string;
    readonly stackTrace?: string[];
}
/** @deprecated */
export interface ZirconLogMessage extends ZirconContextMessage {
    readonly type: ZirconMessageType.ZirconLogOutputMesage;
    readonly message: ZirconLogOutput;
}
export interface ZirconStructuredLogMessage extends ZirconContextMessage {
    readonly type: ZirconMessageType.StructuredLog;
    readonly data: LogEvent;
}
export interface ZirconLogErrorData {
}
/** @deprecated */
export interface ZirconLogError extends ZirconContextMessage {
    readonly type: ZirconMessageType.ZirconLogErrorMessage;
    readonly error: ZirconLogErrorOutput;
}
export declare type ConsoleMessage = ZrOutputMessage | ZrErrorMessage | ConsolePlainMessage | ConsoleLuauError | ConsoleSyntaxMessage | ZirconLogMessage | ZirconLogError | ZirconStructuredLogMessage;
export {};
