1 |
|
2 | import { type AsyncLocalStorage } from 'node:async_hooks';
|
3 | type JsonValue = JsonObject | JsonValue[] | boolean | number | string | readonly JsonValue[] | null | undefined;
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | export type JsonObject = {
|
9 | [k: string]: JsonValue;
|
10 | };
|
11 | export type LogWriter = (message: string) => void;
|
12 | export type MessageContext<T = {}> = JsonObject & T;
|
13 | export type TopLevelAsyncLocalContext = {
|
14 | messageContext: MessageContext;
|
15 | transforms: ReadonlyArray<TransformMessageFunction<MessageContext>>;
|
16 | };
|
17 | type NestedAsyncLocalContext = TopLevelAsyncLocalContext & {
|
18 | sequence: number;
|
19 | sequenceRoot: string;
|
20 | };
|
21 | export type AsyncLocalContext = NestedAsyncLocalContext | TopLevelAsyncLocalContext;
|
22 | export type MessageSerializer = (message: Message<MessageContext>) => string;
|
23 | export type RoarrGlobalState = {
|
24 | asyncLocalStorage?: AsyncLocalStorage<AsyncLocalContext>;
|
25 | onceLog: Set<string>;
|
26 | sequence: number;
|
27 | serializeMessage?: MessageSerializer;
|
28 | versions: readonly string[];
|
29 | write: LogWriter;
|
30 | };
|
31 | type SprintfArgument = boolean | number | string | null;
|
32 | export 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 | };
|
39 | export type TransformMessageFunction<T> = (message: Message<T>) => Message<MessageContext>;
|
40 | type 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 | };
|
44 | type Child<Z> = {
|
45 | <T = Z>(context: TransformMessageFunction<MessageContext<T>>): Logger<T | Z>;
|
46 | (context: MessageContext): Logger<Z>;
|
47 | };
|
48 | export 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 | };
|
65 | export type MessageEventHandler = (message: Message<MessageContext>) => void;
|
66 | export type LogLevelName = 'debug' | 'error' | 'fatal' | 'info' | 'trace' | 'warn';
|
67 | export {};
|
68 |
|
\ | No newline at end of file |