UNPKG

2.96 kBTypeScriptView Raw
1/// <reference types="node" />
2import { type AsyncLocalStorage } from 'node:async_hooks';
3type JsonValue = JsonObject | JsonValue[] | boolean | number | string | readonly JsonValue[] | null | undefined;
4/**
5 * @see https://stackoverflow.com/a/77390832/368691
6 * @public
7 */
8export type JsonObject = {
9 [k: string]: JsonValue;
10};
11export type LogWriter = (message: string) => void;
12export type MessageContext<T = {}> = JsonObject & T;
13export type TopLevelAsyncLocalContext = {
14 messageContext: MessageContext;
15 transforms: ReadonlyArray<TransformMessageFunction<MessageContext>>;
16};
17type NestedAsyncLocalContext = TopLevelAsyncLocalContext & {
18 sequence: number;
19 sequenceRoot: string;
20};
21export type AsyncLocalContext = NestedAsyncLocalContext | TopLevelAsyncLocalContext;
22export type MessageSerializer = (message: Message<MessageContext>) => string;
23export type RoarrGlobalState = {
24 asyncLocalStorage?: AsyncLocalStorage<AsyncLocalContext>;
25 onceLog: Set<string>;
26 sequence: number;
27 serializeMessage?: MessageSerializer;
28 versions: readonly string[];
29 write: LogWriter;
30};
31type SprintfArgument = boolean | number | string | null;
32export type Message<T = MessageContext> = {
33 readonly context: T;
34 readonly message: string;
35 readonly sequence: string;
36 readonly time: number;
37 readonly version: string;
38};
39export type TransformMessageFunction<T> = (message: Message<T>) => Message<MessageContext>;
40type LogMethod<Z> = {
41 <T extends string = string>(context: Z, message: T, c?: T extends `${string}%${string}` ? SprintfArgument : never, d?: SprintfArgument, e?: SprintfArgument, f?: SprintfArgument, g?: SprintfArgument, h?: SprintfArgument, index?: SprintfArgument, index_?: SprintfArgument): void;
42 <T extends string = string>(message: T, b?: T extends `${string}%${string}` ? SprintfArgument : never, c?: SprintfArgument, d?: SprintfArgument, e?: SprintfArgument, f?: SprintfArgument, g?: SprintfArgument, h?: SprintfArgument, index?: SprintfArgument, index_?: SprintfArgument): void;
43};
44type Child<Z> = {
45 <T = Z>(context: TransformMessageFunction<MessageContext<T>>): Logger<T | Z>;
46 (context: MessageContext): Logger<Z>;
47};
48export type Logger<Z = MessageContext> = LogMethod<Z> & {
49 adopt: <T>(routine: () => T, context?: MessageContext | TransformMessageFunction<MessageContext>) => Promise<T>;
50 child: Child<Z>;
51 debug: LogMethod<Z>;
52 debugOnce: LogMethod<Z>;
53 error: LogMethod<Z>;
54 errorOnce: LogMethod<Z>;
55 fatal: LogMethod<Z>;
56 fatalOnce: LogMethod<Z>;
57 getContext: () => MessageContext;
58 info: LogMethod<Z>;
59 infoOnce: LogMethod<Z>;
60 trace: LogMethod<Z>;
61 traceOnce: LogMethod<Z>;
62 warn: LogMethod<Z>;
63 warnOnce: LogMethod<Z>;
64};
65export type MessageEventHandler = (message: Message<MessageContext>) => void;
66export type LogLevelName = 'debug' | 'error' | 'fatal' | 'info' | 'trace' | 'warn';
67export {};
68//# sourceMappingURL=types.d.ts.map
\No newline at end of file