@adriangalilea/utils 10.7.0 → 10.9.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 CHANGED
@@ -347,6 +347,18 @@ stripAnsi(styled) // the string minus its escapes
347
347
  `cli`'s ANSI-aware `width()` / `clip()` measure strings styled with these
348
348
  (they share `ANSI_RE`).
349
349
 
350
+ The semantic roles live here too, the one map of role to escape that `cli`'s
351
+ `ui` paints with: `ROLES` (`head`, `accent`, `muted`, `ok`, `warn`, `bad`,
352
+ `ref`) and `inRole(role, s)`, always on. A page that draws a CLI's output (a
353
+ terminal on a landing page) writes it in the same roles, so the two cannot
354
+ disagree on a colour.
355
+
356
+ ```typescript
357
+ import { inRole } from '@adriangalilea/utils/ansi'
358
+
359
+ `${inRole('muted', 'code')} ${inRole('head', 'BCDF-GHJK')}`
360
+ ```
361
+
350
362
  ### Time (`time`)
351
363
 
352
364
  Humanized time — three questions, three functions: how long is a duration
@@ -515,7 +527,7 @@ What makes it hold up:
515
527
  - **Renders to stderr by default** — stdout stays clean for `--json` and pipes.
516
528
  - **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).
517
529
  - **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.
518
- - **Measurement is grapheme-aware**: a ZWJ emoji / flag counts as one visible unit in `width()`/`clip()`/`table()` alignment. East-Asian double-width (CJK) is a known TODO — those columns can drift a cell.
530
+ - **Measurement is in terminal cells**: a ZWJ emoji / flag is one grapheme, and CJK characters and emoji take two cells, so `width()`/`clip()`/`table()` line up what a terminal shows (py-utils `cli` measures the same way). `clip()` never splits a wide character at the cut.
519
531
  - One **region** at a time, by design (`assert`): two pinned regions can't share the bottom of one screen — compose into a single `render()`. A `spinner()` started *under* an active region is legitimate composition and degrades gracefully: its final line prints above the region.
520
532
 
521
533
  Run the demo: `pnpm tsx tests/live-demo.ts` (and pipe it through `| cat` to see the non-TTY degradation).
@@ -69,6 +69,7 @@ export declare function elapsed(since: number): string;
69
69
  * (a helper deep in a call stack, under a dashboard), it degrades the same
70
70
  * way — the final line lands ABOVE the region via the console routing. Only
71
71
  * a second live() region screams; a nested spinner is legitimate composition.
72
+ * Every line it writes goes to stderr: stdout stays data for pipes / --json.
72
73
  */
73
74
  export declare function spinner<T>(label: string, fn: (set: (label: string) => void) => Promise<T>): Promise<T>;
74
75
  //# sourceMappingURL=live.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/cli/live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAiBH,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;;;;;GAKG;AACH,wBAAgB,GAAG,CAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,EACV,KAAK,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAc,GAClC,MAAM,CAIR;AAED,uFAAuF;AACvF,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ7C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC9B,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAC9C,OAAO,CAAC,CAAC,CAAC,CAqBZ"}
1
+ {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/cli/live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAiBH,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;;;;;GAKG;AACH,wBAAgB,GAAG,CAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,EACV,KAAK,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAc,GAClC,MAAM,CAIR;AAED,uFAAuF;AACvF,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ7C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC9B,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAC9C,OAAO,CAAC,CAAC,CAAC,CAqBZ"}
package/dist/cli/live.js CHANGED
@@ -217,6 +217,7 @@ export function elapsed(since) {
217
217
  * (a helper deep in a call stack, under a dashboard), it degrades the same
218
218
  * way — the final line lands ABOVE the region via the console routing. Only
219
219
  * a second live() region screams; a nested spinner is legitimate composition.
220
+ * Every line it writes goes to stderr: stdout stays data for pipes / --json.
220
221
  */
221
222
  export async function spinner(label, fn) {
222
223
  const start = Date.now();
@@ -227,7 +228,7 @@ export async function spinner(label, fn) {
227
228
  const l = active === null
228
229
  ? live(() => `${spin()} ${current} ${dim(elapsed(start))}`)
229
230
  : null;
230
- const persist = (line) => l ? l.done(line) : console.log(line);
231
+ const persist = (line) => l ? l.done(line) : console.error(line);
231
232
  try {
232
233
  const v = await fn(set);
233
234
  persist(`${green("✓")} ${current} ${dim(elapsed(start))}`);
@@ -1 +1 @@
1
- {"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/cli/live.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/cli/live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,WAAW,GAAG,WAAW,CAAC;AAChC,MAAM,WAAW,GAAG,WAAW,CAAC;AAChC,yEAAyE;AACzE,wEAAwE;AACxE,2EAA2E;AAC3E,uBAAuB;AACvB,MAAM,OAAO,GAAG,aAAa,CAAC;AAC9B,MAAM,QAAQ,GAAG,aAAa,CAAC;AAE/B,+EAA+E;AAC/E,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAsBtE,IAAI,MAAM,GAAsB,IAAI,CAAC;AAIrC,MAAM,OAAO,GAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEhD,MAAM,UAAU;IACP,MAAM,CAAe;IACZ,MAAM,CAAqB;IAC3B,GAAG,CAAU;IACtB,OAAO,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,KAAK,CAAC;IAChB,KAAK,CAA6C;IAClD,IAAI,CAA6B;IACjC,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,MAAM,GAAG,GAAS,EAAE;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,YAAY,MAAoB,EAAE,OAAiB,EAAE;QACpD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QAC5C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;QAEtC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;oBAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACzC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACnB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC;YACD,OAAO;QACR,CAAC;QAED,MAAM,CACL,MAAM,KAAK,IAAI,EACf,4DAA4D,CAC5D,CAAC;QACF,MAAM,GAAG,IAAI,CAAC;QACd,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,OAAO;QACN,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,MAAoB;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,KAAc;QAClB,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACjD,OAAO;QACR,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,KAAK,WAAW,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,KAAK;QACJ,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO;QACR,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,+BAA+B;IAEvB,KAAK;QACZ,uEAAuE;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACpC,wEAAwE;QACxE,sEAAsE;QACtE,2EAA2E;QAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;aACzB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,KAAK,GACV,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,KAAK,CAChB,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CACjE,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,KAAiB;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAEO,YAAY;QACnB,MAAM,IAAI,GAAmB;YAC5B,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;SAClC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,CAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,CAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAEO,aAAa;QACpB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,GAAS,EAAE;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC/B,kEAAkE;gBAClE,+DAA+D;gBAC/D,iEAAiE;gBACjE,wCAAwC;gBACxC,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAC/B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChC,CAAC;YACF,CAAC,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;IACF,CAAC;IAEO,IAAI;QACX,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,8BAA8B,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACvB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACzB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3B,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,GAAG,IAAI,CAAC;IACf,CAAC;CACD;AAED;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,MAAoB,EAAE,IAAe;IACzD,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,uEAAuE;AAEvE,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEvE,2EAA2E;AAC3E,MAAM,CAAC,MAAM,IAAI,GAAG,GAAW,EAAE,CAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,CAAW,CAAC,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAClB,IAAY,EACZ,KAAa,EACb,KAAK,GAAG,EAAE,EACV,QAA+B,KAAK;IAEpC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,sBAAsB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;IAC7E,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,OAAO,CAAC,KAAa;IACpC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IAC9D,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AACpE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC5B,KAAa,EACb,EAAgD;IAEhD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,GAAG,GAAG,CAAC,CAAS,EAAQ,EAAE;QAC/B,OAAO,GAAG,CAAC,CAAC;IACb,CAAC,CAAC;IACF,MAAM,CAAC,GACN,MAAM,KAAK,IAAI;QACd,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,OAAO,GAAG,CAAC,IAAY,EAAQ,EAAE,CACtC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC;QACJ,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,CAAC;IACV,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,CAAC;IACT,CAAC;AACF,CAAC"}
@@ -13,17 +13,20 @@ export declare const green: (s: string) => string;
13
13
  export declare const yellow: (s: string) => string;
14
14
  export declare const cyan: (s: string) => string;
15
15
  export declare const gray: (s: string) => string;
16
- /** Visible width of a string — ANSI escapes stripped, counted by grapheme cluster. */
16
+ /** Visible width of a string in terminal cells — ANSI escapes stripped. */
17
17
  export declare const width: (s: string) => number;
18
18
  /**
19
- * Truncate to `n` visible graphemes (ellipsis at the cut), ANSI-aware: escape
19
+ * Truncate to `n` visible cells (ellipsis at the cut), ANSI-aware: escape
20
20
  * sequences pass through so styling survives, and open styles are closed
21
- * with a final reset. Plain strings work too — this is THE truncate.
21
+ * with a final reset. A wide character never straddles the cut. Plain
22
+ * strings work too — this is THE truncate.
22
23
  */
23
24
  export declare function clip(s: string, n: number): string;
24
25
  export declare const padEndV: (s: string, n: number) => string;
25
26
  export declare const padStartV: (s: string, n: number) => string;
26
27
  /** Semantic palette — use these, not raw colors, so intent stays consistent. */
28
+ /** The semantic palette: each role painted with its escape from `ROLES` (the
29
+ * one map, ../universal/ansi), when this process colors at all. */
27
30
  export declare const ui: {
28
31
  head: (s: string) => string;
29
32
  accent: (s: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/cli/text.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAwB,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,OAAO,EAAE,CAAC;AAkBnB,eAAO,MAAM,IAAI,MAHT,MAAM,KAAG,MAGc,CAAC;AAChC,eAAO,MAAM,GAAG,MAJR,MAAM,KAAG,MAIY,CAAC;AAC9B,eAAO,MAAM,GAAG,MALR,MAAM,KAAG,MAKc,CAAC;AAChC,eAAO,MAAM,KAAK,MANV,MAAM,KAAG,MAMgB,CAAC;AAClC,eAAO,MAAM,MAAM,MAPX,MAAM,KAAG,MAOiB,CAAC;AACnC,eAAO,MAAM,IAAI,MART,MAAM,KAAG,MAQe,CAAC;AACjC,eAAO,MAAM,IAAI,MATT,MAAM,KAAG,MASe,CAAC;AAYjC,sFAAsF;AACtF,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,MACoB,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBjD;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"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/cli/text.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAA+B,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EAAE,OAAO,EAAE,CAAC;AAkBnB,eAAO,MAAM,IAAI,MAHT,MAAM,KAAG,MAGc,CAAC;AAChC,eAAO,MAAM,GAAG,MAJR,MAAM,KAAG,MAIY,CAAC;AAC9B,eAAO,MAAM,GAAG,MALR,MAAM,KAAG,MAKc,CAAC;AAChC,eAAO,MAAM,KAAK,MANV,MAAM,KAAG,MAMgB,CAAC;AAClC,eAAO,MAAM,MAAM,MAPX,MAAM,KAAG,MAOiB,CAAC;AACnC,eAAO,MAAM,IAAI,MART,MAAM,KAAG,MAQe,CAAC;AACjC,eAAO,MAAM,IAAI,MATT,MAAM,KAAG,MASe,CAAC;AAuCjC,2EAA2E;AAC3E,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,MAKjC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA2BjD;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;oEACoE;AACpE,eAAO,MAAM,EAAE;cAnGP,MAAM,KAAG,MAAM;gBAAf,MAAM,KAAG,MAAM;eAAf,MAAM,KAAG,MAAM;YAAf,MAAM,KAAG,MAAM;cAAf,MAAM,KAAG,MAAM;aAAf,MAAM,KAAG,MAAM;IA0GtB,+CAA+C;aA1GxC,MAAM,KAAG,MAAM;CA4GtB,CAAC"}
package/dist/cli/text.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * (`cli/index` — table/kv/tree) and the live layer (`cli/live` — pinned
5
5
  * region/spinner) build on these; keeping them here avoids an import cycle.
6
6
  */
7
- import { ANSI_RE, BOLD, DIM, fg, RESET } from "../universal/ansi.js";
7
+ import { ANSI_RE, BOLD, DIM, fg, RESET, ROLES } from "../universal/ansi.js";
8
8
  export { ANSI_RE };
9
9
  // The palette makes ONE whether-to-color decision for both cli layers, and
10
10
  // cli writes to both streams (static output → stdout, live regions → stderr),
@@ -30,22 +30,55 @@ export const gray = paint(fg(8));
30
30
  const ANSI_SPLIT_RE = /(\x1b\[[0-9;]*m)/;
31
31
  // Grapheme clusters, not code points: what the terminal renders as ONE symbol
32
32
  // (ZWJ emoji 👨‍👩‍👧, flags 🇪🇸, skin tones) is several code points — counting
33
- // pieces breaks alignment.
34
- // CJK and wide emoji occupy TWO terminal cells but count as one here, so
35
- // CJK-heavy columns drift by a cell per wide grapheme.
33
+ // pieces breaks alignment. Each cluster then takes the cells a terminal gives
34
+ // it: two for East Asian wide/fullwidth characters and emoji-presentation
35
+ // symbols, one otherwise (py-utils measures the same way).
36
36
  const GRAPHEMES = new Intl.Segmenter();
37
- /** Visible width of a string — ANSI escapes stripped, counted by grapheme cluster. */
38
- export const width = (s) => [...GRAPHEMES.segment(s.replace(ANSI_RE, ""))].length;
37
+ // East Asian Wide/Fullwidth blocks (the wcwidth core table): Hangul Jamo, CJK
38
+ // radicals through Yi, Hangul syllables, compatibility ideographs, vertical
39
+ // and fullwidth forms, the supplementary ideographic planes.
40
+ const WIDE = [
41
+ [0x1100, 0x115f],
42
+ [0x2e80, 0x303e],
43
+ [0x3041, 0x33ff],
44
+ [0x3400, 0x4dbf],
45
+ [0x4e00, 0x9fff],
46
+ [0xa000, 0xa4cf],
47
+ [0xac00, 0xd7a3],
48
+ [0xf900, 0xfaff],
49
+ [0xfe30, 0xfe4f],
50
+ [0xff00, 0xff60],
51
+ [0xffe0, 0xffe6],
52
+ [0x20000, 0x2fffd],
53
+ [0x30000, 0x3fffd],
54
+ ];
55
+ const EMOJI_PRESENTATION = /\p{Emoji_Presentation}|️/u;
56
+ /** Terminal cells one grapheme cluster occupies. */
57
+ function cells(grapheme) {
58
+ const cp = grapheme.codePointAt(0) ?? 0;
59
+ if (WIDE.some(([lo, hi]) => cp >= lo && cp <= hi))
60
+ return 2;
61
+ return EMOJI_PRESENTATION.test(grapheme) ? 2 : 1;
62
+ }
63
+ /** Visible width of a string in terminal cells — ANSI escapes stripped. */
64
+ export const width = (s) => {
65
+ let w = 0;
66
+ for (const g of GRAPHEMES.segment(s.replace(ANSI_RE, "")))
67
+ w += cells(g.segment);
68
+ return w;
69
+ };
39
70
  /**
40
- * Truncate to `n` visible graphemes (ellipsis at the cut), ANSI-aware: escape
71
+ * Truncate to `n` visible cells (ellipsis at the cut), ANSI-aware: escape
41
72
  * sequences pass through so styling survives, and open styles are closed
42
- * with a final reset. Plain strings work too — this is THE truncate.
73
+ * with a final reset. A wide character never straddles the cut. Plain
74
+ * strings work too — this is THE truncate.
43
75
  */
44
76
  export function clip(s, n) {
45
77
  if (width(s) <= n)
46
78
  return s;
47
79
  let out = "";
48
- let vis = 0;
80
+ let used = 0;
81
+ let cut = false;
49
82
  let styled = false;
50
83
  for (const part of s.split(ANSI_SPLIT_RE)) {
51
84
  if (part === "")
@@ -56,13 +89,16 @@ export function clip(s, n) {
56
89
  continue;
57
90
  }
58
91
  for (const g of GRAPHEMES.segment(part)) {
59
- if (vis < n - 1) {
92
+ if (cut)
93
+ break;
94
+ const w = cells(g.segment);
95
+ if (used + w <= n - 1) {
60
96
  out += g.segment;
61
- vis++;
97
+ used += w;
62
98
  }
63
- else if (vis === n - 1) {
99
+ else {
64
100
  out += "…";
65
- vis++;
101
+ cut = true;
66
102
  }
67
103
  }
68
104
  }
@@ -72,14 +108,16 @@ export function clip(s, n) {
72
108
  export const padEndV = (s, n) => s + " ".repeat(Math.max(0, n - width(s)));
73
109
  export const padStartV = (s, n) => " ".repeat(Math.max(0, n - width(s))) + s;
74
110
  /** Semantic palette — use these, not raw colors, so intent stays consistent. */
111
+ /** The semantic palette: each role painted with its escape from `ROLES` (the
112
+ * one map, ../universal/ansi), when this process colors at all. */
75
113
  export const ui = {
76
- head: (s) => bold(s),
77
- accent: (s) => cyan(s),
78
- muted: (s) => dim(s),
79
- ok: (s) => green(s),
80
- warn: (s) => yellow(s),
81
- bad: (s) => red(s),
114
+ head: paint(ROLES.head),
115
+ accent: paint(ROLES.accent),
116
+ muted: paint(ROLES.muted),
117
+ ok: paint(ROLES.ok),
118
+ warn: paint(ROLES.warn),
119
+ bad: paint(ROLES.bad),
82
120
  /** ids / refs — de-emphasized monospace-ish */
83
- ref: (s) => gray(s),
121
+ ref: paint(ROLES.ref),
84
122
  };
85
123
  //# sourceMappingURL=text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/cli/text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/cli/text.ts"],"names":[],"mappings":"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"}
@@ -25,4 +25,23 @@ export declare function rgb(r: number, g: number, b: number): string;
25
25
  export declare const ANSI_RE: RegExp;
26
26
  /** The string minus its ANSI style escapes. */
27
27
  export declare const stripAnsi: (s: string) => string;
28
+ /**
29
+ * The house's semantic roles, each as the escape that opens it: what `cli`'s
30
+ * `ui` paints with whenever it paints. The one map of role to colour, so what
31
+ * a CLI prints and a page drawing that CLI's output (a terminal on a landing)
32
+ * cannot disagree.
33
+ */
34
+ export declare const ROLES: {
35
+ readonly head: "\u001B[1m";
36
+ readonly accent: string;
37
+ readonly muted: "\u001B[2m";
38
+ readonly ok: string;
39
+ readonly warn: string;
40
+ readonly bad: string;
41
+ /** ids / refs: de-emphasized */
42
+ readonly ref: string;
43
+ };
44
+ export type Role = keyof typeof ROLES;
45
+ /** `s` in a role, always on: for a consumer that renders ANSI whatever stdout is. */
46
+ export declare const inRole: (role: Role, s: string) => string;
28
47
  //# sourceMappingURL=ansi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ansi.d.ts","sourceRoot":"","sources":["../../src/universal/ansi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,eAAO,MAAM,KAAK,cAAY,CAAC;AAC/B,eAAO,MAAM,IAAI,cAAY,CAAC;AAC9B,eAAO,MAAM,GAAG,cAAY,CAAC;AAC7B,eAAO,MAAM,MAAM,cAAY,CAAC;AAChC,eAAO,MAAM,SAAS,cAAY,CAAC;AAEnC,2CAA2C;AAC3C,wBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGpC;AAED,2CAA2C;AAC3C,wBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGpC;AAED,gFAAgF;AAChF,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAS3D;AAGD,eAAO,MAAM,OAAO,QAAoB,CAAC;AAEzC,+CAA+C;AAC/C,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAAgC,CAAC"}
1
+ {"version":3,"file":"ansi.d.ts","sourceRoot":"","sources":["../../src/universal/ansi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,eAAO,MAAM,KAAK,cAAY,CAAC;AAC/B,eAAO,MAAM,IAAI,cAAY,CAAC;AAC9B,eAAO,MAAM,GAAG,cAAY,CAAC;AAC7B,eAAO,MAAM,MAAM,cAAY,CAAC;AAChC,eAAO,MAAM,SAAS,cAAY,CAAC;AAEnC,2CAA2C;AAC3C,wBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGpC;AAED,2CAA2C;AAC3C,wBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGpC;AAED,gFAAgF;AAChF,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAS3D;AAGD,eAAO,MAAM,OAAO,QAAoB,CAAC;AAEzC,+CAA+C;AAC/C,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAAgC,CAAC;AAEvE;;;;;GAKG;AACH,eAAO,MAAM,KAAK;;;;;;;IAOjB,gCAAgC;;CAEvB,CAAC;AAEX,MAAM,MAAM,IAAI,GAAG,MAAM,OAAO,KAAK,CAAC;AAEtC,qFAAqF;AACrF,eAAO,MAAM,MAAM,GAAI,MAAM,IAAI,EAAE,GAAG,MAAM,KAAG,MAClB,CAAC"}
@@ -36,4 +36,22 @@ export function rgb(r, g, b) {
36
36
  export const ANSI_RE = /\x1b\[[0-9;]*m/g;
37
37
  /** The string minus its ANSI style escapes. */
38
38
  export const stripAnsi = (s) => s.replace(ANSI_RE, "");
39
+ /**
40
+ * The house's semantic roles, each as the escape that opens it: what `cli`'s
41
+ * `ui` paints with whenever it paints. The one map of role to colour, so what
42
+ * a CLI prints and a page drawing that CLI's output (a terminal on a landing)
43
+ * cannot disagree.
44
+ */
45
+ export const ROLES = {
46
+ head: BOLD,
47
+ accent: fg(6),
48
+ muted: DIM,
49
+ ok: fg(2),
50
+ warn: fg(3),
51
+ bad: fg(1),
52
+ /** ids / refs: de-emphasized */
53
+ ref: fg(8),
54
+ };
55
+ /** `s` in a role, always on: for a consumer that renders ANSI whatever stdout is. */
56
+ export const inRole = (role, s) => `${ROLES[role]}${s}${RESET}`;
39
57
  //# sourceMappingURL=ansi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ansi.js","sourceRoot":"","sources":["../../src/universal/ansi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAG,SAAS,CAAC;AAC9B,MAAM,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC;AAC7B,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC;AAEnC,2CAA2C;AAC3C,MAAM,UAAU,EAAE,CAAC,CAAS;IAC3B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,aAAa,CAAC,GAAG,CAAC;AAC1B,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,EAAE,CAAC,CAAS;IAC3B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,aAAa,CAAC,GAAG,CAAC;AAC1B,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAClD,MAAM,CACL,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EACjE,iBAAiB,EACjB,CAAC,EACD,CAAC,EACD,CAAC,CACD,CAAC;IACF,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACpC,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAEzC,+CAA+C;AAC/C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"ansi.js","sourceRoot":"","sources":["../../src/universal/ansi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAG,SAAS,CAAC;AAC9B,MAAM,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC;AAC7B,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC;AAEnC,2CAA2C;AAC3C,MAAM,UAAU,EAAE,CAAC,CAAS;IAC3B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,aAAa,CAAC,GAAG,CAAC;AAC1B,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,EAAE,CAAC,CAAS;IAC3B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,aAAa,CAAC,GAAG,CAAC;AAC1B,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAClD,MAAM,CACL,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EACjE,iBAAiB,EACjB,CAAC,EACD,CAAC,EACD,CAAC,CACD,CAAC;IACF,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACpC,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAEzC,+CAA+C;AAC/C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACb,KAAK,EAAE,GAAG;IACV,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACT,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACX,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACV,gCAAgC;IAChC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;CACD,CAAC;AAIX,qFAAqF;AACrF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAU,EAAE,CAAS,EAAU,EAAE,CACvD,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adriangalilea/utils",
3
- "version": "10.7.0",
3
+ "version": "10.9.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",