@adriangalilea/utils 0.21.0 → 0.22.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 +73 -9
- package/dist/cli/index.d.ts +5 -19
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +6 -24
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/live.d.ts +67 -0
- package/dist/cli/live.d.ts.map +1 -0
- package/dist/cli/live.js +229 -0
- package/dist/cli/live.js.map +1 -0
- package/dist/cli/text.d.ts +29 -0
- package/dist/cli/text.d.ts.map +1 -0
- package/dist/cli/text.js +54 -0
- package/dist/cli/text.js.map +1 -0
- package/dist/universal/log.d.ts +0 -1
- package/dist/universal/log.d.ts.map +1 -1
- package/dist/universal/log.js +0 -1
- package/dist/universal/log.js.map +1 -1
- package/package.json +1 -9
package/README.md
CHANGED
|
@@ -103,6 +103,73 @@ format.percentage(0.05) // "0.05%"
|
|
|
103
103
|
format.percentage(123.456) // "123%"
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
+
### CLI presentation (`cli`)
|
|
107
|
+
|
|
108
|
+
Terminal output: aligned tables, key/value blocks, trees, and a semantic color
|
|
109
|
+
palette. Distinct from `format` (universal value formatting) — this is
|
|
110
|
+
terminal-scoped. Colors come from the logger and auto-disable on non-TTY /
|
|
111
|
+
`NO_COLOR`, and alignment is **ANSI-aware** (padding uses visible width), so a
|
|
112
|
+
`table()` renders colored in a terminal and as plain aligned text in a pipe, log
|
|
113
|
+
file, or a bot's monospace block.
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
import { table, kv, tree, indent, clip, ui } from '@adriangalilea/utils/cli'
|
|
117
|
+
|
|
118
|
+
// Semantic palette — use these, not raw colors, so intent stays consistent
|
|
119
|
+
ui.head('Name') ui.accent('id') ui.muted('note')
|
|
120
|
+
ui.ok('done') ui.warn('!') ui.bad('err') ui.ref('#abc123')
|
|
121
|
+
|
|
122
|
+
// Aligned columns (auto width; per-column align; optional bolded header).
|
|
123
|
+
// Cells may be pre-colored — widths use visible length so they still line up.
|
|
124
|
+
table(
|
|
125
|
+
[['Ada', ui.accent('ada@x.com'), ui.ref('42')],
|
|
126
|
+
['Bo', ui.accent('bo@y.com'), ui.ref('7')]],
|
|
127
|
+
{ head: ['name', 'email', 'msgs'], align: ['l', 'l', 'r'] },
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
// Key/value block (aligned keys) — for a detail view
|
|
131
|
+
kv([['name', 'Ada'], ['email', 'ada@x.com']], { indent: 2 })
|
|
132
|
+
|
|
133
|
+
// Nesting
|
|
134
|
+
tree('Ada', ['email: ada@x.com', 'phone: +1…']) // labeled node + children
|
|
135
|
+
indent(block, 4) // indent every line
|
|
136
|
+
clip('a very long value', 10) // "a very lo…" (ANSI-aware — styled input stays styled)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Run the demo: `FORCE_COLOR=1 pnpm tsx tests/cli-demo.ts`.
|
|
140
|
+
|
|
141
|
+
### Live output (`cli`) — pinned region, spinner, progress
|
|
142
|
+
|
|
143
|
+
A pinned, self-repainting region at the bottom of the terminal for progress UIs. You own the state; the region is a `render: () => string` repainted on a timer — a frame is just a string, so `table()` / `kv()` / `ui` and the widgets (`spin()`, `bar()`, `elapsed()`) compose inside it unchanged.
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
import { live, spinner, spin, bar, elapsed, table, ui } from '@adriangalilea/utils/cli'
|
|
147
|
+
|
|
148
|
+
// The one-liner: animated while fn runs, persists "✓ label 1.2s" when done
|
|
149
|
+
await spinner('connecting to imap.gmail.com', () => adapter.connect())
|
|
150
|
+
|
|
151
|
+
// The general region: declarative multi-line progress
|
|
152
|
+
const region = live(() => table(accounts.map(a => [
|
|
153
|
+
a.done === a.total ? ui.ok('✓') : spin(),
|
|
154
|
+
a.alias,
|
|
155
|
+
bar(a.done, a.total, 18),
|
|
156
|
+
ui.muted(`${a.rate}/s`),
|
|
157
|
+
])))
|
|
158
|
+
// ...mutate your state; it repaints ~12.5fps (region.refresh() for instant)
|
|
159
|
+
region.done() // final frame persists into scrollback (or .clear() to remove)
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
What makes it hold up:
|
|
163
|
+
|
|
164
|
+
- **Logging never tears the UI, with no API to learn.** While a region is active, `console.log/warn/error` — and therefore the logger — are rerouted to print *above* the region (erase → write → repaint). Keep logging from anywhere, including third-party code.
|
|
165
|
+
- **Non-TTY degrades to sane output.** In a pipe / CI / log file nothing animates: `done()` prints the final frame once, `spinner()` prints just its `✓ label 1.2s` line. Same calling code. Opt-in `heartbeat: ms` prints plain snapshots so long CI runs aren't silent.
|
|
166
|
+
- **Renders to stderr by default** — stdout stays clean for `--json` and pipes.
|
|
167
|
+
- **Crash-safe cursor**: hidden while painting, restored on done/clear, process exit, and signals — politely (if the app has its own SIGINT handler for graceful shutdown, it stays in charge).
|
|
168
|
+
- **Flicker-free**: synchronized-update escapes (`?2026`) make repaints atomic on modern terminals; lines are ANSI-aware clipped to the terminal width so the erase math never breaks.
|
|
169
|
+
- One region at a time, by design (`assert`): two pinned regions can't share the bottom of one screen — compose into a single `render()`.
|
|
170
|
+
|
|
171
|
+
Run the demo: `pnpm tsx tests/live-demo.ts` (and pipe it through `| cat` to see the non-TTY degradation).
|
|
172
|
+
|
|
106
173
|
### Offensive Programming
|
|
107
174
|
|
|
108
175
|
Fail loud, fail fast. Zero dependencies, works in Node, Deno, Bun, and browsers.
|
|
@@ -191,6 +258,7 @@ Every `SourcedError` carries `source`, `operation`, `status`, `context`, and the
|
|
|
191
258
|
- Percentage and basis point utilities
|
|
192
259
|
- Fiat and stablecoin detection
|
|
193
260
|
- **Format**: Number and currency formatting with compact notation
|
|
261
|
+
- **CLI**: ANSI-aware tables/kv/trees + semantic palette, and live output — pinned self-repainting region, spinner, progress bar, with logs flowing above and clean non-TTY degradation
|
|
194
262
|
- **Offensive Programming**: assert, panic, assertNever, must, unwrap (throw `Panic`) + SourcedError for typed boundary failures
|
|
195
263
|
- **File Operations**: Read, write with automatic path resolution
|
|
196
264
|
- **Directory Operations**: Create, list, walk directories
|
|
@@ -286,16 +354,12 @@ pnpm add @adriangalilea/utils gramio @gramio/storage @gramio/session
|
|
|
286
354
|
|
|
287
355
|
#### Threaded Mode — pin the `@gramio/contexts` fork
|
|
288
356
|
|
|
289
|
-
Telegram added [Threaded Mode](https://telegram.org/blog/threaded-conversations) for private chats (BotFather → Bot Settings → Threaded Mode). gramio's `SendMixin` skips auto-threading there, and `CallbackQueryContext` doesn't expose `threadId` at all. Fixes [PR'd upstream](https://github.com/gramiojs/contexts/pull/4); until merged, pin the fork in **your bot project's**
|
|
357
|
+
Telegram added [Threaded Mode](https://telegram.org/blog/threaded-conversations) for private chats (BotFather → Bot Settings → Threaded Mode). gramio's `SendMixin` skips auto-threading there, and `CallbackQueryContext` doesn't expose `threadId` at all. Fixes [PR'd upstream](https://github.com/gramiojs/contexts/pull/4); until merged, pin the fork in **your bot project's** workspace root (pnpm only honors overrides at the root, not transitively — and pnpm ≥11 reads them from `pnpm-workspace.yaml`, not `package.json`):
|
|
290
358
|
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
"@gramio/contexts": "github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
359
|
+
```yaml
|
|
360
|
+
# pnpm-workspace.yaml
|
|
361
|
+
overrides:
|
|
362
|
+
"@gramio/contexts": "github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"
|
|
299
363
|
```
|
|
300
364
|
|
|
301
365
|
Then `pnpm install`. Every `ctx.send` / `ctx.sendDocument` / `ctx.reply` / etc. — including from callback handlers — will auto-forward `message_thread_id` and stay in the thread the message came from. If you don't use Threaded Mode, skip this.
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `cli` — terminal presentation: aligned tables, key/value blocks, trees, a
|
|
3
|
-
* semantic palette
|
|
4
|
-
*
|
|
3
|
+
* semantic palette, and live output (pinned region, spinner, progress bar).
|
|
4
|
+
* Separate from `format` (which is universal value formatting, for every
|
|
5
|
+
* layer) — this is terminal-scoped output.
|
|
5
6
|
*
|
|
6
7
|
* Colors come from `universal/log` and auto-disable on non-TTY / NO_COLOR, so a
|
|
7
8
|
* `table()` renders colored in a terminal and as plain aligned text in a pipe,
|
|
@@ -19,21 +20,8 @@
|
|
|
19
20
|
* { head: ['name', 'email', 'label'] },
|
|
20
21
|
* ))
|
|
21
22
|
*/
|
|
22
|
-
|
|
23
|
-
export
|
|
24
|
-
/** Truncate to `n` visible chars with an ellipsis. Assumes `s` is unstyled. */
|
|
25
|
-
export declare const truncate: (s: string, n: number) => string;
|
|
26
|
-
/** Semantic palette — use these, not raw colors, so intent stays consistent. */
|
|
27
|
-
export declare const ui: {
|
|
28
|
-
head: (s: string) => string;
|
|
29
|
-
accent: (s: string) => string;
|
|
30
|
-
muted: (s: string) => string;
|
|
31
|
-
ok: (s: string) => string;
|
|
32
|
-
warn: (s: string) => string;
|
|
33
|
-
bad: (s: string) => string;
|
|
34
|
-
/** ids / refs — de-emphasized monospace-ish */
|
|
35
|
-
ref: (s: string) => string;
|
|
36
|
-
};
|
|
23
|
+
export * from "./live.js";
|
|
24
|
+
export { clip, ui, width } from "./text.js";
|
|
37
25
|
export interface TableOpts {
|
|
38
26
|
/** Column headers (bolded). */
|
|
39
27
|
head?: string[];
|
|
@@ -61,6 +49,4 @@ export declare const indent: (s: string, n: number) => string;
|
|
|
61
49
|
export declare function tree(label: string, children: string[], opts?: {
|
|
62
50
|
indent?: number;
|
|
63
51
|
}): string;
|
|
64
|
-
/** A small inline badge, e.g. `badge('golden', ui.ok)`. */
|
|
65
|
-
export declare const badge: (text: string, style?: (s: string) => string) => string;
|
|
66
52
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,SAAS;IACzB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;IACtB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,GAAE,SAAc,GAAG,MAAM,CAwBpE;AAED,8DAA8D;AAC9D,wBAAgB,EAAE,CACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EACzB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1C,MAAM,CAOR;AAED,yEAAyE;AACzE,eAAO,MAAM,MAAM,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAIjC,CAAC;AAEd,sDAAsD;AACtD,wBAAgB,IAAI,CACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5B,MAAM,CAGR"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `cli` — terminal presentation: aligned tables, key/value blocks, trees, a
|
|
3
|
-
* semantic palette
|
|
4
|
-
*
|
|
3
|
+
* semantic palette, and live output (pinned region, spinner, progress bar).
|
|
4
|
+
* Separate from `format` (which is universal value formatting, for every
|
|
5
|
+
* layer) — this is terminal-scoped output.
|
|
5
6
|
*
|
|
6
7
|
* Colors come from `universal/log` and auto-disable on non-TTY / NO_COLOR, so a
|
|
7
8
|
* `table()` renders colored in a terminal and as plain aligned text in a pipe,
|
|
@@ -19,26 +20,9 @@
|
|
|
19
20
|
* { head: ['name', 'email', 'label'] },
|
|
20
21
|
* ))
|
|
21
22
|
*/
|
|
22
|
-
import {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
/** Visible width of a string — ANSI escape codes stripped, counted by code point. */
|
|
26
|
-
export const width = (s) => [...s.replace(ANSI_RE, "")].length;
|
|
27
|
-
/** Truncate to `n` visible chars with an ellipsis. Assumes `s` is unstyled. */
|
|
28
|
-
export const truncate = (s, n) => width(s) > n ? `${[...s].slice(0, Math.max(0, n - 1)).join("")}…` : s;
|
|
29
|
-
const padEndV = (s, n) => s + " ".repeat(Math.max(0, n - width(s)));
|
|
30
|
-
const padStartV = (s, n) => " ".repeat(Math.max(0, n - width(s))) + s;
|
|
31
|
-
/** Semantic palette — use these, not raw colors, so intent stays consistent. */
|
|
32
|
-
export const ui = {
|
|
33
|
-
head: (s) => bold(s),
|
|
34
|
-
accent: (s) => cyan(s),
|
|
35
|
-
muted: (s) => dim(s),
|
|
36
|
-
ok: (s) => green(s),
|
|
37
|
-
warn: (s) => yellow(s),
|
|
38
|
-
bad: (s) => red(s),
|
|
39
|
-
/** ids / refs — de-emphasized monospace-ish */
|
|
40
|
-
ref: (s) => gray(s),
|
|
41
|
-
};
|
|
23
|
+
import { padEndV, padStartV, ui, width } from "./text.js";
|
|
24
|
+
export * from "./live.js";
|
|
25
|
+
export { clip, ui, width } from "./text.js";
|
|
42
26
|
/**
|
|
43
27
|
* Render rows as aligned columns. Cells may be pre-colored — widths use visible
|
|
44
28
|
* length so colored columns still line up. The last left-aligned column isn't
|
|
@@ -87,6 +71,4 @@ export function tree(label, children, opts = {}) {
|
|
|
87
71
|
const lead = " ".repeat(opts.indent ?? 0);
|
|
88
72
|
return [lead + label, ...children.map((c) => `${lead} ${c}`)].join("\n");
|
|
89
73
|
}
|
|
90
|
-
/** A small inline badge, e.g. `badge('golden', ui.ok)`. */
|
|
91
|
-
export const badge = (text, style = ui.muted) => style(text);
|
|
92
74
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `live` — a pinned, self-repainting terminal region, the pure widgets that
|
|
3
|
+
* animate inside it (`spin` / `bar` / `elapsed`), and the `spinner()` one-liner.
|
|
4
|
+
*
|
|
5
|
+
* The model: you own the state, the region owns the screen. A region is a
|
|
6
|
+
* `render: () => string` repainted on a timer (plus `refresh()` for instant
|
|
7
|
+
* updates). A frame is just a string — `table()` / `kv()` / `ui` compose
|
|
8
|
+
* inside it unchanged, and widgets are plain string functions.
|
|
9
|
+
*
|
|
10
|
+
* The hard problem this solves is interleaving: while a region is active,
|
|
11
|
+
* `console.log/warn/error` — and therefore the logger, which writes through
|
|
12
|
+
* console — are rerouted to print ABOVE the region (erase → write → repaint).
|
|
13
|
+
* Logging never tears the UI, and there is no new logging API to learn.
|
|
14
|
+
*
|
|
15
|
+
* Non-TTY (pipe / CI / log file): nothing animates, nothing repaints.
|
|
16
|
+
* `done(final)` prints the final frame once; the opt-in `heartbeat` prints
|
|
17
|
+
* plain snapshots for long CI silences. Same calling code either way.
|
|
18
|
+
*
|
|
19
|
+
* Crash-safe cursor: hidden while painting, restored on done/clear, process
|
|
20
|
+
* exit, and fatal signals. Signals are handled politely — if the app has its
|
|
21
|
+
* own SIGINT handler (graceful shutdown), we restore the cursor and stay out
|
|
22
|
+
* of the way; if we are the only listener, default die-on-signal is preserved.
|
|
23
|
+
*
|
|
24
|
+
* Exactly one region can be active: two pinned regions can't share the bottom
|
|
25
|
+
* of one screen. Compose everything into a single `render()` — that's the
|
|
26
|
+
* point of frames being strings.
|
|
27
|
+
*/
|
|
28
|
+
export interface LiveOpts {
|
|
29
|
+
/** Target stream. Default stderr — stdout stays clean for pipes / --json. */
|
|
30
|
+
stream?: NodeJS.WriteStream;
|
|
31
|
+
/** Repaints per second while active (default 12.5 — the spinner's cadence). */
|
|
32
|
+
fps?: number;
|
|
33
|
+
/** Non-TTY only: print a plain snapshot every N ms so long CI runs aren't silent. Default off. */
|
|
34
|
+
heartbeat?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface Live {
|
|
37
|
+
/** Repaint now (state changed and 80ms is too long to wait). */
|
|
38
|
+
refresh(): void;
|
|
39
|
+
/** Swap the render function (e.g. a new phase of the same operation). */
|
|
40
|
+
update(render: () => string): void;
|
|
41
|
+
/** Stop and persist a final frame (default: the current render) into scrollback. */
|
|
42
|
+
done(final?: string): void;
|
|
43
|
+
/** Stop and remove the region entirely. */
|
|
44
|
+
clear(): void;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Start a pinned region at the bottom of the terminal, repainting
|
|
48
|
+
* `render()` until `done()` / `clear()`. Non-TTY → inert (see module doc).
|
|
49
|
+
*/
|
|
50
|
+
export declare function live(render: () => string, opts?: LiveOpts): Live;
|
|
51
|
+
/** Spinner frame for "now" — call it inside `render()` and it animates. */
|
|
52
|
+
export declare const spin: () => string;
|
|
53
|
+
/**
|
|
54
|
+
* Progress bar, `width` cells. `done > total` clamps to full — live counters
|
|
55
|
+
* drift (e.g. a server-count proxy that overcounts) and that's the caller's
|
|
56
|
+
* data, not a bug here.
|
|
57
|
+
*/
|
|
58
|
+
export declare function bar(done: number, total: number, width?: number): string;
|
|
59
|
+
/** Compact elapsed time since a `Date.now()` timestamp: 0.4s · 12s · 1m05s · 1h02m. */
|
|
60
|
+
export declare function elapsed(since: number): string;
|
|
61
|
+
/**
|
|
62
|
+
* The one-liner: animate `label` with a spinner + elapsed time while `fn`
|
|
63
|
+
* runs, persist `✓ label 1.2s` on success, `⨯ label 1.2s message` on failure
|
|
64
|
+
* (and rethrow). Non-TTY prints just the final line.
|
|
65
|
+
*/
|
|
66
|
+
export declare function spinner<T>(label: string, fn: () => Promise<T>): Promise<T>;
|
|
67
|
+
//# sourceMappingURL=live.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/cli/live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAkBH,MAAM,WAAW,QAAQ;IACxB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,IAAI;IACpB,gEAAgE;IAChE,OAAO,IAAI,IAAI,CAAC;IAChB,yEAAyE;IACzE,MAAM,CAAC,MAAM,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACnC,oFAAoF;IACpF,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,2CAA2C;IAC3C,KAAK,IAAI,IAAI,CAAC;CACd;AA+JD;;;GAGG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAEhE;AAMD,2EAA2E;AAC3E,eAAO,MAAM,IAAI,QAAO,MACsD,CAAC;AAE/E;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAInE;AAED,uFAAuF;AACvF,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ7C;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC9B,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAClB,OAAO,CAAC,CAAC,CAAC,CAYZ"}
|
package/dist/cli/live.js
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `live` — a pinned, self-repainting terminal region, the pure widgets that
|
|
3
|
+
* animate inside it (`spin` / `bar` / `elapsed`), and the `spinner()` one-liner.
|
|
4
|
+
*
|
|
5
|
+
* The model: you own the state, the region owns the screen. A region is a
|
|
6
|
+
* `render: () => string` repainted on a timer (plus `refresh()` for instant
|
|
7
|
+
* updates). A frame is just a string — `table()` / `kv()` / `ui` compose
|
|
8
|
+
* inside it unchanged, and widgets are plain string functions.
|
|
9
|
+
*
|
|
10
|
+
* The hard problem this solves is interleaving: while a region is active,
|
|
11
|
+
* `console.log/warn/error` — and therefore the logger, which writes through
|
|
12
|
+
* console — are rerouted to print ABOVE the region (erase → write → repaint).
|
|
13
|
+
* Logging never tears the UI, and there is no new logging API to learn.
|
|
14
|
+
*
|
|
15
|
+
* Non-TTY (pipe / CI / log file): nothing animates, nothing repaints.
|
|
16
|
+
* `done(final)` prints the final frame once; the opt-in `heartbeat` prints
|
|
17
|
+
* plain snapshots for long CI silences. Same calling code either way.
|
|
18
|
+
*
|
|
19
|
+
* Crash-safe cursor: hidden while painting, restored on done/clear, process
|
|
20
|
+
* exit, and fatal signals. Signals are handled politely — if the app has its
|
|
21
|
+
* own SIGINT handler (graceful shutdown), we restore the cursor and stay out
|
|
22
|
+
* of the way; if we are the only listener, default die-on-signal is preserved.
|
|
23
|
+
*
|
|
24
|
+
* Exactly one region can be active: two pinned regions can't share the bottom
|
|
25
|
+
* of one screen. Compose everything into a single `render()` — that's the
|
|
26
|
+
* point of frames being strings.
|
|
27
|
+
*/
|
|
28
|
+
import { assert } from "../offensive.js";
|
|
29
|
+
import { cyan, dim, green, red } from "../universal/log.js";
|
|
30
|
+
import { clip } from "./text.js";
|
|
31
|
+
const HIDE_CURSOR = "\x1b[?25l";
|
|
32
|
+
const SHOW_CURSOR = "\x1b[?25h";
|
|
33
|
+
// Synchronized-update markers: modern terminals (iTerm2, kitty, Ghostty,
|
|
34
|
+
// WezTerm, recent Terminal.app) paint the wrapped write atomically — no
|
|
35
|
+
// flicker on erase+rewrite. Unknown CSIs are ignored elsewhere, so this is
|
|
36
|
+
// free to always emit.
|
|
37
|
+
const SYNC_ON = "\x1b[?2026h";
|
|
38
|
+
const SYNC_OFF = "\x1b[?2026l";
|
|
39
|
+
/** Cursor to the first line of an `n`-line region + erase to end of screen. */
|
|
40
|
+
const wipe = (n) => (n > 0 ? `\x1b[${n}F\x1b[J` : "");
|
|
41
|
+
let active = null;
|
|
42
|
+
const SIGNALS = ["SIGINT", "SIGTERM"];
|
|
43
|
+
class LiveRegion {
|
|
44
|
+
render;
|
|
45
|
+
stream;
|
|
46
|
+
tty;
|
|
47
|
+
painted = 0;
|
|
48
|
+
stopped = false;
|
|
49
|
+
timer;
|
|
50
|
+
orig;
|
|
51
|
+
sigHandlers = new Map();
|
|
52
|
+
onExit = () => {
|
|
53
|
+
this.stream.write(SHOW_CURSOR);
|
|
54
|
+
};
|
|
55
|
+
constructor(render, opts = {}) {
|
|
56
|
+
this.render = render;
|
|
57
|
+
this.stream = opts.stream ?? process.stderr;
|
|
58
|
+
this.tty = this.stream.isTTY === true;
|
|
59
|
+
if (!this.tty) {
|
|
60
|
+
if (opts.heartbeat) {
|
|
61
|
+
this.timer = setInterval(() => {
|
|
62
|
+
this.stream.write(`${this.render()}\n`);
|
|
63
|
+
}, opts.heartbeat);
|
|
64
|
+
this.timer.unref();
|
|
65
|
+
}
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
assert(active === null, "one live region at a time — compose into a single render()");
|
|
69
|
+
active = this;
|
|
70
|
+
this.patchConsole();
|
|
71
|
+
this.installGuards();
|
|
72
|
+
this.stream.write(HIDE_CURSOR);
|
|
73
|
+
this.paint();
|
|
74
|
+
this.timer = setInterval(() => this.paint(), 1000 / (opts.fps ?? 12.5));
|
|
75
|
+
this.timer.unref();
|
|
76
|
+
}
|
|
77
|
+
refresh() {
|
|
78
|
+
if (this.tty && !this.stopped)
|
|
79
|
+
this.paint();
|
|
80
|
+
}
|
|
81
|
+
update(render) {
|
|
82
|
+
this.render = render;
|
|
83
|
+
this.refresh();
|
|
84
|
+
}
|
|
85
|
+
done(final) {
|
|
86
|
+
assert(!this.stopped, "live region already stopped");
|
|
87
|
+
if (!this.tty) {
|
|
88
|
+
this.stopped = true;
|
|
89
|
+
clearInterval(this.timer);
|
|
90
|
+
this.stream.write(`${final ?? this.render()}\n`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const frame = final ?? this.render();
|
|
94
|
+
this.stop();
|
|
95
|
+
this.stream.write(`${wipe(this.painted)}${frame}\n${SHOW_CURSOR}`);
|
|
96
|
+
}
|
|
97
|
+
clear() {
|
|
98
|
+
assert(!this.stopped, "live region already stopped");
|
|
99
|
+
if (!this.tty) {
|
|
100
|
+
this.stopped = true;
|
|
101
|
+
clearInterval(this.timer);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.stop();
|
|
105
|
+
this.stream.write(wipe(this.painted) + SHOW_CURSOR);
|
|
106
|
+
}
|
|
107
|
+
// --- internals (TTY path) ---
|
|
108
|
+
paint() {
|
|
109
|
+
// `||` not `??` — a sizeless PTY (CI emulators, `script`) reports 0×0.
|
|
110
|
+
const cols = this.stream.columns || 80;
|
|
111
|
+
const rows = this.stream.rows || 24;
|
|
112
|
+
// Clip each line to the terminal width — a wrapped line would break the
|
|
113
|
+
// erase math. Clamp height to rows-1, keeping the BOTTOM of the frame
|
|
114
|
+
// (latest activity), so an oversized frame degrades instead of corrupting.
|
|
115
|
+
const lines = this.render()
|
|
116
|
+
.split("\n")
|
|
117
|
+
.map((l) => clip(l, cols - 1));
|
|
118
|
+
const frame = lines.length < rows ? lines : lines.slice(lines.length - (rows - 1));
|
|
119
|
+
this.stream.write(`${SYNC_ON}${wipe(this.painted)}${frame.join("\n")}\n${SYNC_OFF}`);
|
|
120
|
+
this.painted = frame.length;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Erase the region, run a write (a console call), repaint underneath it.
|
|
124
|
+
* The wipe opens a sync block; paint() re-asserts SYNC_ON (a no-op set)
|
|
125
|
+
* and its SYNC_OFF closes the whole erase→log→repaint atomically.
|
|
126
|
+
*/
|
|
127
|
+
above(write) {
|
|
128
|
+
this.stream.write(SYNC_ON + wipe(this.painted));
|
|
129
|
+
this.painted = 0;
|
|
130
|
+
write();
|
|
131
|
+
this.paint();
|
|
132
|
+
}
|
|
133
|
+
patchConsole() {
|
|
134
|
+
const orig = {
|
|
135
|
+
log: console.log.bind(console),
|
|
136
|
+
warn: console.warn.bind(console),
|
|
137
|
+
error: console.error.bind(console),
|
|
138
|
+
};
|
|
139
|
+
this.orig = orig;
|
|
140
|
+
console.log = (...a) => this.above(() => orig.log(...a));
|
|
141
|
+
console.warn = (...a) => this.above(() => orig.warn(...a));
|
|
142
|
+
console.error = (...a) => this.above(() => orig.error(...a));
|
|
143
|
+
}
|
|
144
|
+
installGuards() {
|
|
145
|
+
process.on("exit", this.onExit);
|
|
146
|
+
for (const sig of SIGNALS) {
|
|
147
|
+
const h = () => {
|
|
148
|
+
this.stream.write(SHOW_CURSOR);
|
|
149
|
+
// Only listener (count includes us) → preserve default semantics:
|
|
150
|
+
// re-raise and die. Otherwise the app owns shutdown; cursor is
|
|
151
|
+
// restored and its handler proceeds over a still-painting region
|
|
152
|
+
// that its own exit path will finalize.
|
|
153
|
+
if (process.listenerCount(sig) === 1) {
|
|
154
|
+
process.removeListener(sig, h);
|
|
155
|
+
process.kill(process.pid, sig);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
process.on(sig, h);
|
|
159
|
+
this.sigHandlers.set(sig, h);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
stop() {
|
|
163
|
+
this.stopped = true;
|
|
164
|
+
clearInterval(this.timer);
|
|
165
|
+
const orig = this.orig;
|
|
166
|
+
assert(orig !== undefined, "stop() before patchConsole()");
|
|
167
|
+
console.log = orig.log;
|
|
168
|
+
console.warn = orig.warn;
|
|
169
|
+
console.error = orig.error;
|
|
170
|
+
process.removeListener("exit", this.onExit);
|
|
171
|
+
for (const [sig, h] of this.sigHandlers)
|
|
172
|
+
process.removeListener(sig, h);
|
|
173
|
+
active = null;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Start a pinned region at the bottom of the terminal, repainting
|
|
178
|
+
* `render()` until `done()` / `clear()`. Non-TTY → inert (see module doc).
|
|
179
|
+
*/
|
|
180
|
+
export function live(render, opts) {
|
|
181
|
+
return new LiveRegion(render, opts);
|
|
182
|
+
}
|
|
183
|
+
// --- widgets: pure string builders, animated by being re-rendered ---
|
|
184
|
+
const SPIN_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
185
|
+
/** Spinner frame for "now" — call it inside `render()` and it animates. */
|
|
186
|
+
export const spin = () => cyan(SPIN_FRAMES[Math.floor(Date.now() / 80) % SPIN_FRAMES.length]);
|
|
187
|
+
/**
|
|
188
|
+
* Progress bar, `width` cells. `done > total` clamps to full — live counters
|
|
189
|
+
* drift (e.g. a server-count proxy that overcounts) and that's the caller's
|
|
190
|
+
* data, not a bug here.
|
|
191
|
+
*/
|
|
192
|
+
export function bar(done, total, width = 24) {
|
|
193
|
+
assert(done >= 0 && total >= 0, "bar: negative counts", done, total);
|
|
194
|
+
const fill = Math.round(Math.min(1, total === 0 ? 1 : done / total) * width);
|
|
195
|
+
return green("█".repeat(fill)) + dim("░".repeat(width - fill));
|
|
196
|
+
}
|
|
197
|
+
/** Compact elapsed time since a `Date.now()` timestamp: 0.4s · 12s · 1m05s · 1h02m. */
|
|
198
|
+
export function elapsed(since) {
|
|
199
|
+
const s = (Date.now() - since) / 1000;
|
|
200
|
+
if (s < 10)
|
|
201
|
+
return `${s.toFixed(1)}s`;
|
|
202
|
+
const r = Math.round(s);
|
|
203
|
+
if (r < 60)
|
|
204
|
+
return `${r}s`;
|
|
205
|
+
const m = Math.floor(r / 60);
|
|
206
|
+
if (m < 60)
|
|
207
|
+
return `${m}m${String(r % 60).padStart(2, "0")}s`;
|
|
208
|
+
return `${Math.floor(m / 60)}h${String(m % 60).padStart(2, "0")}m`;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* The one-liner: animate `label` with a spinner + elapsed time while `fn`
|
|
212
|
+
* runs, persist `✓ label 1.2s` on success, `⨯ label 1.2s message` on failure
|
|
213
|
+
* (and rethrow). Non-TTY prints just the final line.
|
|
214
|
+
*/
|
|
215
|
+
export async function spinner(label, fn) {
|
|
216
|
+
const start = Date.now();
|
|
217
|
+
const l = live(() => `${spin()} ${label} ${dim(elapsed(start))}`);
|
|
218
|
+
try {
|
|
219
|
+
const v = await fn();
|
|
220
|
+
l.done(`${green("✓")} ${label} ${dim(elapsed(start))}`);
|
|
221
|
+
return v;
|
|
222
|
+
}
|
|
223
|
+
catch (e) {
|
|
224
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
225
|
+
l.done(`${red("⨯")} ${label} ${dim(elapsed(start))} ${red(msg)}`);
|
|
226
|
+
throw e;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=live.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/cli/live.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared text primitives for terminal presentation: ANSI-aware measurement,
|
|
3
|
+
* clipping, padding, and the semantic `ui` palette. Both the static layer
|
|
4
|
+
* (`cli/index` — table/kv/tree) and the live layer (`cli/live` — pinned
|
|
5
|
+
* region/spinner) build on these; keeping them here avoids an import cycle.
|
|
6
|
+
*/
|
|
7
|
+
export declare const ANSI_RE: RegExp;
|
|
8
|
+
/** Visible width of a string — ANSI escape codes stripped, counted by code point. */
|
|
9
|
+
export declare const width: (s: string) => number;
|
|
10
|
+
/**
|
|
11
|
+
* Truncate to `n` visible chars (ellipsis at the cut), ANSI-aware: escape
|
|
12
|
+
* sequences pass through so styling survives, and open styles are closed
|
|
13
|
+
* with a final reset. Plain strings work too — this is THE truncate.
|
|
14
|
+
*/
|
|
15
|
+
export declare function clip(s: string, n: number): string;
|
|
16
|
+
export declare const padEndV: (s: string, n: number) => string;
|
|
17
|
+
export declare const padStartV: (s: string, n: number) => string;
|
|
18
|
+
/** Semantic palette — use these, not raw colors, so intent stays consistent. */
|
|
19
|
+
export declare const ui: {
|
|
20
|
+
head: (s: string) => string;
|
|
21
|
+
accent: (s: string) => string;
|
|
22
|
+
muted: (s: string) => string;
|
|
23
|
+
ok: (s: string) => string;
|
|
24
|
+
warn: (s: string) => string;
|
|
25
|
+
bad: (s: string) => string;
|
|
26
|
+
/** ids / refs — de-emphasized monospace-ish */
|
|
27
|
+
ref: (s: string) => string;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/cli/text.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,OAAO,QAAoB,CAAC;AAEzC,qFAAqF;AACrF,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,MAA4C,CAAC;AAK/E;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBjD;AAED,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MACL,CAAC;AAC3C,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MACP,CAAC;AAE3C,gFAAgF;AAChF,eAAO,MAAM,EAAE;cACJ,MAAM;gBACJ,MAAM;eACP,MAAM;YACT,MAAM;cACJ,MAAM;aACP,MAAM;IACf,+CAA+C;aACtC,MAAM;CACf,CAAC"}
|
package/dist/cli/text.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared text primitives for terminal presentation: ANSI-aware measurement,
|
|
3
|
+
* clipping, padding, and the semantic `ui` palette. Both the static layer
|
|
4
|
+
* (`cli/index` — table/kv/tree) and the live layer (`cli/live` — pinned
|
|
5
|
+
* region/spinner) build on these; keeping them here avoids an import cycle.
|
|
6
|
+
*/
|
|
7
|
+
import { bold, cyan, dim, gray, green, red, yellow } from "../universal/log.js";
|
|
8
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: matching ANSI escapes is the point
|
|
9
|
+
export const ANSI_RE = /\x1b\[[0-9;]*m/g;
|
|
10
|
+
/** Visible width of a string — ANSI escape codes stripped, counted by code point. */
|
|
11
|
+
export const width = (s) => [...s.replace(ANSI_RE, "")].length;
|
|
12
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: tokenizes into ANSI escapes + code points
|
|
13
|
+
const TOKEN_RE = /\x1b\[[0-9;]*m|./gsu;
|
|
14
|
+
/**
|
|
15
|
+
* Truncate to `n` visible chars (ellipsis at the cut), ANSI-aware: escape
|
|
16
|
+
* sequences pass through so styling survives, and open styles are closed
|
|
17
|
+
* with a final reset. Plain strings work too — this is THE truncate.
|
|
18
|
+
*/
|
|
19
|
+
export function clip(s, n) {
|
|
20
|
+
if (width(s) <= n)
|
|
21
|
+
return s;
|
|
22
|
+
let out = "";
|
|
23
|
+
let vis = 0;
|
|
24
|
+
let styled = false;
|
|
25
|
+
for (const t of s.match(TOKEN_RE) ?? []) {
|
|
26
|
+
if (t.startsWith("\x1b")) {
|
|
27
|
+
out += t;
|
|
28
|
+
styled = true;
|
|
29
|
+
}
|
|
30
|
+
else if (vis < n - 1) {
|
|
31
|
+
out += t;
|
|
32
|
+
vis++;
|
|
33
|
+
}
|
|
34
|
+
else if (vis === n - 1) {
|
|
35
|
+
out += "…";
|
|
36
|
+
vis++;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return styled ? `${out}\x1b[0m` : out;
|
|
40
|
+
}
|
|
41
|
+
export const padEndV = (s, n) => s + " ".repeat(Math.max(0, n - width(s)));
|
|
42
|
+
export const padStartV = (s, n) => " ".repeat(Math.max(0, n - width(s))) + s;
|
|
43
|
+
/** Semantic palette — use these, not raw colors, so intent stays consistent. */
|
|
44
|
+
export const ui = {
|
|
45
|
+
head: (s) => bold(s),
|
|
46
|
+
accent: (s) => cyan(s),
|
|
47
|
+
muted: (s) => dim(s),
|
|
48
|
+
ok: (s) => green(s),
|
|
49
|
+
warn: (s) => yellow(s),
|
|
50
|
+
bad: (s) => red(s),
|
|
51
|
+
/** ids / refs — de-emphasized monospace-ish */
|
|
52
|
+
ref: (s) => gray(s),
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/cli/text.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAEhF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAEzC,qFAAqF;AACrF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAE/E,qGAAqG;AACrG,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AAEvC;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAAC,CAAS,EAAE,CAAS;IACxC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC5B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,GAAG,IAAI,CAAC,CAAC;YACT,MAAM,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,GAAG,IAAI,CAAC,CAAC;YACT,GAAG,EAAE,CAAC;QACP,CAAC;aAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,GAAG,IAAI,GAAG,CAAC;YACX,GAAG,EAAE,CAAC;QACP,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CACvD,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CACzD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAE3C,gFAAgF;AAChF,MAAM,CAAC,MAAM,EAAE,GAAG;IACjB,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,EAAE,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9B,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,+CAA+C;IAC/C,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;CAC3B,CAAC"}
|
package/dist/universal/log.d.ts
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
* Provides colored output with Unicode symbols for different log levels
|
|
4
4
|
*
|
|
5
5
|
* Known limitations:
|
|
6
|
-
* - Global level is frozen at import time (const). No runtime setLevel().
|
|
7
6
|
* - createLogger() is just a prefix wrapper, not a real scoped instance.
|
|
8
7
|
* No per-scope level control (can't silence 'bor' but keep 'bdns' verbose).
|
|
9
8
|
* - No withTag/child pattern — consumer can't control library log levels.
|
|
@@ -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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"}
|
package/dist/universal/log.js
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
* Provides colored output with Unicode symbols for different log levels
|
|
4
4
|
*
|
|
5
5
|
* Known limitations:
|
|
6
|
-
* - Global level is frozen at import time (const). No runtime setLevel().
|
|
7
6
|
* - createLogger() is just a prefix wrapper, not a real scoped instance.
|
|
8
7
|
* No per-scope level control (can't silence 'bor' but keep 'bdns' verbose).
|
|
9
8
|
* - No withTag/child pattern — consumer can't control library log levels.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/universal/log.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/universal/log.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adriangalilea/utils",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -125,9 +125,6 @@
|
|
|
125
125
|
"typescript": "^5.9.2",
|
|
126
126
|
"zod": "^4.4.3"
|
|
127
127
|
},
|
|
128
|
-
"dependencies": {
|
|
129
|
-
"chalk": "^5.6.0"
|
|
130
|
-
},
|
|
131
128
|
"peerDependencies": {
|
|
132
129
|
"@gramio/format": ">=0.8.0",
|
|
133
130
|
"@gramio/session": ">=0.2.0",
|
|
@@ -160,11 +157,6 @@
|
|
|
160
157
|
"access": "public",
|
|
161
158
|
"registry": "https://registry.npmjs.org/"
|
|
162
159
|
},
|
|
163
|
-
"pnpm": {
|
|
164
|
-
"overrides": {
|
|
165
|
-
"@gramio/contexts": "github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
160
|
"repository": {
|
|
169
161
|
"type": "git",
|
|
170
162
|
"url": "git+https://github.com/adriangalilea/ts-utils.git"
|