@adriangalilea/utils 8.0.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -33
- package/dist/bot/create.d.ts.map +1 -1
- package/dist/bot/create.js +8 -5
- package/dist/bot/create.js.map +1 -1
- package/dist/bot/payments/handlers.d.ts.map +1 -1
- package/dist/bot/payments/handlers.js +58 -18
- package/dist/bot/payments/handlers.js.map +1 -1
- package/dist/bot/payments/invoice.d.ts.map +1 -1
- package/dist/bot/payments/invoice.js +26 -8
- package/dist/bot/payments/invoice.js.map +1 -1
- package/dist/bot/payments/refund.d.ts.map +1 -1
- package/dist/bot/payments/refund.js +18 -10
- package/dist/bot/payments/refund.js.map +1 -1
- package/dist/bot/payments/waiver.js +3 -3
- package/dist/bot/payments/waiver.js.map +1 -1
- package/dist/bot/profile.d.ts.map +1 -1
- package/dist/bot/profile.js +18 -11
- package/dist/bot/profile.js.map +1 -1
- package/dist/bot/storage-d1.d.ts.map +1 -1
- package/dist/bot/storage-d1.js +4 -4
- package/dist/bot/storage-d1.js.map +1 -1
- package/dist/bot/storage.js +5 -5
- package/dist/bot/storage.js.map +1 -1
- package/dist/bot/worker.d.ts.map +1 -1
- package/dist/bot/worker.js +23 -11
- package/dist/bot/worker.js.map +1 -1
- package/dist/offensive.d.ts.map +1 -1
- package/dist/offensive.js +3 -4
- package/dist/offensive.js.map +1 -1
- package/dist/runtime.d.ts +6 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +12 -0
- package/dist/runtime.js.map +1 -1
- package/dist/universal/format.d.ts +3 -2
- package/dist/universal/format.d.ts.map +1 -1
- package/dist/universal/format.js +3 -2
- package/dist/universal/format.js.map +1 -1
- package/dist/universal/log.d.ts +176 -95
- package/dist/universal/log.d.ts.map +1 -1
- package/dist/universal/log.js +677 -217
- package/dist/universal/log.js.map +1 -1
- package/package.json +1 -1
package/dist/universal/log.d.ts
CHANGED
|
@@ -1,113 +1,194 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The logger: one stream of events, written the same way by go-utils,
|
|
3
|
+
* ts-utils and py-utils. The contract is the utils README
|
|
4
|
+
* (github.com/adriangalilea/utils); this file is the TypeScript side of it.
|
|
3
5
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
+
* Writing
|
|
7
|
+
* Every verb takes a message, then optional fields:
|
|
8
|
+
* log.warn("retrying", { attempt: 2 })
|
|
9
|
+
* log.error("charge failed", { err })
|
|
10
|
+
* The message says what happened, the fields say with what. Fields are a
|
|
11
|
+
* plain object; anything else panics.
|
|
6
12
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* written to (stderr), never a sibling stream.
|
|
13
|
+
* Verbs print at fixed levels
|
|
14
|
+
* error ⨯ · fail ⨯ (error) · warn ⚠ · warnOnce ⚠ (warn) · info · success ✓
|
|
15
|
+
* · wait ○ · ready ▶ · step • (info) · debug ◦ (debug) · trace » (trace).
|
|
16
|
+
* warnOnce fires once per message and scope (memory bounded).
|
|
12
17
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
+
* Scopes
|
|
19
|
+
* log.scope("api").scope("auth") carries ["api", "auth"]. Its threshold
|
|
20
|
+
* is read live from API_AUTH_LOG_LEVEL, then API_LOG_LEVEL, then
|
|
21
|
+
* LOG_LEVEL, then setLogLevel(), then info. Levels:
|
|
22
|
+
* silent < error < warn < info < debug < trace.
|
|
18
23
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
+
* Spans
|
|
25
|
+
* A span is a piece of work written as two events (start, end) and a
|
|
26
|
+
* span is a logger: what is written through it carries its span_id and
|
|
27
|
+
* trace_id, nothing else does. There is no ambient context.
|
|
28
|
+
* await log.span("sync", { repo }, async (s) => {
|
|
29
|
+
* s.info("cloned", { files })
|
|
30
|
+
* await s.span("build", async (c) => { ... })
|
|
31
|
+
* s.set({ pushed: true })
|
|
32
|
+
* })
|
|
33
|
+
* span returns what fn returns; a throw ends the span failed (the error
|
|
34
|
+
* in fields.err) and rethrows. The open form, for work that does not fit
|
|
35
|
+
* a block: const s = log.begin("upload", { size }) ... s.end() or
|
|
36
|
+
* s.end(err). Ending twice, or set() after the end, panics.
|
|
37
|
+
* Whether a span is shown is decided once, at begin, by its start's level
|
|
38
|
+
* against its scope's threshold; the end follows, so a hidden span writes
|
|
39
|
+
* no end, failed or not. What a hidden span holds attaches to the nearest
|
|
40
|
+
* shown span, a joined remote one included: its lines carry that id, its
|
|
41
|
+
* children and its traceparent() name it. With no shown ancestor its
|
|
42
|
+
* lines carry no ids. A viewer never meets a missing parent.
|
|
24
43
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* lines
|
|
29
|
-
*
|
|
30
|
-
*
|
|
44
|
+
* Traces cross processes explicitly
|
|
45
|
+
* s.traceparent() is the W3C value to hand on (HTTP header, or the
|
|
46
|
+
* TRACEPARENT env of a child). log.join(value) returns a logger whose
|
|
47
|
+
* spans are children of that remote span; its lines outside a span carry
|
|
48
|
+
* no ids. null/undefined returns the logger itself; a malformed value is
|
|
49
|
+
* ignored with one warn per distinct value. TRACEPARENT in the
|
|
50
|
+
* environment at process start is joined by every root span.
|
|
31
51
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
52
|
+
* Renderings
|
|
53
|
+
* json: one event per line, keys in the contract's order, fields sorted
|
|
54
|
+
* at every depth. human: symbols, colour (TTY, NO_COLOR, FORCE_COLOR),
|
|
55
|
+
* fields dim as key=value, an error's stack under its line, spans as
|
|
56
|
+
* "○ name" ... "✓ name 254ms" with what they hold indented.
|
|
57
|
+
* Default: Node/Bun/Deno human when stderr is a TTY, else json; browser
|
|
58
|
+
* human; Worker json.
|
|
39
59
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
60
|
+
* Configuration
|
|
61
|
+
* Each variable has a setter; the setter is the program's default and the
|
|
62
|
+
* variable, read live, overrides it: LOG_FORMAT=human|json (setLogFormat),
|
|
63
|
+
* LOG_TIME=1|0 (setLogTime, a dim local HH:MM:SS before human lines, off
|
|
64
|
+
* by default), LOG_LEVEL and {SCOPE}_LOG_LEVEL (setLogLevel), LOG_SERVICE
|
|
65
|
+
* (setLogService). Values match without regard to case, an empty variable
|
|
66
|
+
* is unset, an unknown value panics. The service defaults to the entry
|
|
67
|
+
* script's name without extension; in a Worker or browser it must be
|
|
68
|
+
* set, or the first json event panics.
|
|
47
69
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
70
|
+
* Sinks
|
|
71
|
+
* Node/Bun/Deno write every event through console.error: stderr is the
|
|
72
|
+
* log, stdout stays data, and cli/live's console patch keeps lines above
|
|
73
|
+
* a live region. Browsers and Workers use the level's console method.
|
|
52
74
|
*
|
|
53
|
-
*
|
|
54
|
-
* idioms; the record line format is identical by design.
|
|
75
|
+
* The wire shape is exported as LogEvent, and parseEvent(line) reads one back.
|
|
55
76
|
*/
|
|
56
|
-
export type
|
|
57
|
-
|
|
58
|
-
export
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
declare const LEVELS: {
|
|
62
|
-
readonly silent: 0;
|
|
63
|
-
readonly error: 1;
|
|
64
|
-
readonly warn: 2;
|
|
65
|
-
readonly info: 3;
|
|
66
|
-
readonly debug: 4;
|
|
67
|
-
readonly trace: 5;
|
|
77
|
+
export type LogLevel = "silent" | "error" | "warn" | "info" | "debug" | "trace";
|
|
78
|
+
type EventLevel = Exclude<LogLevel, "silent">;
|
|
79
|
+
export type LogVerb = "error" | "fail" | "warn" | "info" | "success" | "wait" | "ready" | "step" | "debug" | "trace";
|
|
80
|
+
export type JsonValue = null | boolean | number | string | readonly JsonValue[] | {
|
|
81
|
+
readonly [key: string]: JsonValue;
|
|
68
82
|
};
|
|
69
|
-
|
|
70
|
-
|
|
83
|
+
/** What a verb, span or set() takes: a plain object, any values (serialized by the contract's table). */
|
|
84
|
+
export type Fields = Readonly<Record<string, unknown>>;
|
|
85
|
+
interface EventBase {
|
|
86
|
+
readonly time: string;
|
|
87
|
+
readonly level: EventLevel;
|
|
88
|
+
readonly verb: LogVerb;
|
|
89
|
+
readonly msg: string;
|
|
90
|
+
readonly service: string;
|
|
91
|
+
readonly scope?: readonly string[];
|
|
92
|
+
readonly fields?: {
|
|
93
|
+
readonly [key: string]: JsonValue;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** A log line. Inside a shown span it carries the span's trace_id and span_id. */
|
|
97
|
+
export interface LineEvent extends EventBase {
|
|
98
|
+
readonly phase?: undefined;
|
|
99
|
+
readonly trace_id?: string;
|
|
100
|
+
readonly span_id?: string;
|
|
101
|
+
readonly parent_id?: undefined;
|
|
102
|
+
readonly status?: undefined;
|
|
103
|
+
readonly dur_ms?: undefined;
|
|
104
|
+
}
|
|
105
|
+
export interface SpanStartEvent extends EventBase {
|
|
106
|
+
readonly level: "info";
|
|
107
|
+
readonly verb: "wait";
|
|
108
|
+
readonly phase: "start";
|
|
109
|
+
readonly trace_id: string;
|
|
110
|
+
readonly span_id: string;
|
|
111
|
+
readonly parent_id?: string;
|
|
112
|
+
readonly status?: undefined;
|
|
113
|
+
readonly dur_ms?: undefined;
|
|
114
|
+
}
|
|
115
|
+
interface SpanEndBase extends EventBase {
|
|
116
|
+
readonly phase: "end";
|
|
117
|
+
readonly trace_id: string;
|
|
118
|
+
readonly span_id: string;
|
|
119
|
+
readonly parent_id?: string;
|
|
120
|
+
/** Monotonic, milliseconds, 3 decimals. */
|
|
121
|
+
readonly dur_ms: number;
|
|
122
|
+
}
|
|
123
|
+
export interface SpanOkEvent extends SpanEndBase {
|
|
124
|
+
readonly level: "info";
|
|
125
|
+
readonly verb: "success";
|
|
126
|
+
readonly status: "ok";
|
|
127
|
+
}
|
|
128
|
+
/** A failed span's end: the error is in fields.err. */
|
|
129
|
+
export interface SpanFailEvent extends SpanEndBase {
|
|
130
|
+
readonly level: "error";
|
|
131
|
+
readonly verb: "fail";
|
|
132
|
+
readonly status: "error";
|
|
133
|
+
}
|
|
134
|
+
export type SpanEndEvent = SpanOkEvent | SpanFailEvent;
|
|
135
|
+
/** One event of the stream, as written on the wire. Keys appear in this order. */
|
|
136
|
+
export type LogEvent = LineEvent | SpanStartEvent | SpanEndEvent;
|
|
137
|
+
export type LogFormat = "human" | "json";
|
|
138
|
+
/** The program's default level. LOG_LEVEL and {SCOPE}_LOG_LEVEL override it. */
|
|
71
139
|
export declare function setLogLevel(level: LogLevel): void;
|
|
140
|
+
/** The program's default rendering, human or json. LOG_FORMAT overrides it. */
|
|
141
|
+
export declare function setLogFormat(format: LogFormat): void;
|
|
142
|
+
/** A dim local HH:MM:SS before human lines (json always carries time). LOG_TIME overrides it. */
|
|
143
|
+
export declare function setLogTime(on: boolean): void;
|
|
144
|
+
/** The program's name in every event. LOG_SERVICE overrides it. */
|
|
145
|
+
export declare function setLogService(name: string): void;
|
|
72
146
|
export interface Logger {
|
|
73
|
-
error(
|
|
74
|
-
fail(
|
|
75
|
-
warn(
|
|
76
|
-
/** warn
|
|
77
|
-
warnOnce(
|
|
78
|
-
info(
|
|
79
|
-
success(
|
|
80
|
-
wait(
|
|
81
|
-
ready(
|
|
82
|
-
/**
|
|
83
|
-
step(
|
|
84
|
-
debug(
|
|
85
|
-
trace(
|
|
86
|
-
/**
|
|
87
|
-
time(label: string): void;
|
|
88
|
-
timeEnd(label: string): void;
|
|
89
|
-
/** Child logger: lines carry [name], level reads {NAME}_LOG_LEVEL first. */
|
|
147
|
+
error(message: string, fields?: Fields): void;
|
|
148
|
+
fail(message: string, fields?: Fields): void;
|
|
149
|
+
warn(message: string, fields?: Fields): void;
|
|
150
|
+
/** warn, once per message and scope for the process. */
|
|
151
|
+
warnOnce(message: string, fields?: Fields): void;
|
|
152
|
+
info(message: string, fields?: Fields): void;
|
|
153
|
+
success(message: string, fields?: Fields): void;
|
|
154
|
+
wait(message: string, fields?: Fields): void;
|
|
155
|
+
ready(message: string, fields?: Fields): void;
|
|
156
|
+
/** An indented sub-step. */
|
|
157
|
+
step(message: string, fields?: Fields): void;
|
|
158
|
+
debug(message: string, fields?: Fields): void;
|
|
159
|
+
trace(message: string, fields?: Fields): void;
|
|
160
|
+
/** A child logger: events carry the scope, its level reads {SCOPE}_LOG_LEVEL first. */
|
|
90
161
|
scope(name: string): Logger;
|
|
162
|
+
/**
|
|
163
|
+
* Run fn inside a span and return what it returns (a Promise when fn is
|
|
164
|
+
* async). A throw or rejection ends the span failed and is rethrown.
|
|
165
|
+
*/
|
|
166
|
+
span<T>(name: string, fn: (s: Span) => T): T;
|
|
167
|
+
span<T>(name: string, fields: Fields, fn: (s: Span) => T): T;
|
|
168
|
+
/** Open a span by hand, for work that does not fit a block. End it once with end(). */
|
|
169
|
+
begin(name: string, fields?: Fields): Span;
|
|
170
|
+
/**
|
|
171
|
+
* A logger whose spans are children of a remote span. null/undefined
|
|
172
|
+
* returns this logger; a malformed value is ignored with one warn.
|
|
173
|
+
*/
|
|
174
|
+
join(traceparent: string | null | undefined): Logger;
|
|
91
175
|
}
|
|
92
|
-
export
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
export declare const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
setLogFormat: typeof setLogFormat;
|
|
110
|
-
setLogTime: typeof setLogTime;
|
|
111
|
-
};
|
|
176
|
+
export interface Span extends Logger {
|
|
177
|
+
/** Fields learned while the span runs, carried on its end event. */
|
|
178
|
+
set(fields: Fields): void;
|
|
179
|
+
/** The W3C traceparent value to hand to a child process or request. */
|
|
180
|
+
traceparent(): string;
|
|
181
|
+
/** End the span: ok with no error, failed with one (in fields.err). Twice panics. */
|
|
182
|
+
end(err?: unknown): void;
|
|
183
|
+
}
|
|
184
|
+
/** The root logger. */
|
|
185
|
+
export declare const log: Logger;
|
|
186
|
+
/**
|
|
187
|
+
* One line of a stream as an event, or null for a line that is not one (a
|
|
188
|
+
* runtime panic, a library writing to stderr itself) so a viewer can pass it
|
|
189
|
+
* through. A JSON object with a "verb" key claims to be an event: if it
|
|
190
|
+
* breaks the contract's shape, that is a bug in a writer and it panics.
|
|
191
|
+
*/
|
|
192
|
+
export declare function parseEvent(text: string): LogEvent | null;
|
|
112
193
|
export {};
|
|
113
194
|
//# sourceMappingURL=log.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/universal/log.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/universal/log.ts"],"names":[],"mappings":"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"}
|