termpainter 1.0.1 → 1.2.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.
Files changed (53) hide show
  1. package/README.md +78 -10
  2. package/dist/cjs/box.cjs +3 -3
  3. package/dist/cjs/box.d.ts.map +1 -1
  4. package/dist/cjs/box.js.map +1 -1
  5. package/dist/cjs/icons.cjs +19 -0
  6. package/dist/cjs/icons.d.cts +10 -0
  7. package/dist/cjs/icons.d.ts +10 -0
  8. package/dist/cjs/icons.d.ts.map +1 -0
  9. package/dist/cjs/icons.js.map +1 -0
  10. package/dist/cjs/index.cjs +6 -1
  11. package/dist/cjs/index.d.cts +5 -1
  12. package/dist/cjs/index.d.ts +5 -1
  13. package/dist/cjs/index.d.ts.map +1 -1
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/paint.cjs +5 -0
  16. package/dist/cjs/paint.d.cts +1 -0
  17. package/dist/cjs/paint.d.ts +1 -0
  18. package/dist/cjs/paint.d.ts.map +1 -1
  19. package/dist/cjs/paint.js.map +1 -1
  20. package/dist/cjs/spinner.cjs +26 -0
  21. package/dist/cjs/spinner.d.cts +6 -0
  22. package/dist/cjs/spinner.d.ts +6 -0
  23. package/dist/cjs/spinner.d.ts.map +1 -0
  24. package/dist/cjs/spinner.js.map +1 -0
  25. package/dist/cjs/style.cjs +27 -8
  26. package/dist/cjs/style.d.cts +7 -4
  27. package/dist/cjs/style.d.ts +7 -4
  28. package/dist/cjs/style.d.ts.map +1 -1
  29. package/dist/cjs/style.js.map +1 -1
  30. package/dist/esm/box.js +4 -4
  31. package/dist/esm/box.js.map +1 -1
  32. package/dist/esm/icons.js +15 -0
  33. package/dist/esm/icons.js.map +1 -0
  34. package/dist/esm/index.js +3 -1
  35. package/dist/esm/index.js.map +1 -1
  36. package/dist/esm/paint.js +4 -0
  37. package/dist/esm/paint.js.map +1 -1
  38. package/dist/esm/spinner.js +23 -0
  39. package/dist/esm/spinner.js.map +1 -0
  40. package/dist/esm/style.js +27 -8
  41. package/dist/esm/style.js.map +1 -1
  42. package/dist/types/box.d.ts.map +1 -1
  43. package/dist/types/icons.d.ts +10 -0
  44. package/dist/types/icons.d.ts.map +1 -0
  45. package/dist/types/index.d.ts +5 -1
  46. package/dist/types/index.d.ts.map +1 -1
  47. package/dist/types/paint.d.ts +1 -0
  48. package/dist/types/paint.d.ts.map +1 -1
  49. package/dist/types/spinner.d.ts +6 -0
  50. package/dist/types/spinner.d.ts.map +1 -0
  51. package/dist/types/style.d.ts +7 -4
  52. package/dist/types/style.d.ts.map +1 -1
  53. package/package.json +4 -1
package/README.md CHANGED
@@ -11,7 +11,7 @@ npm install termpainter
11
11
 
12
12
  ## usage
13
13
  ```ts
14
- import { style, badge, box, paint } from 'termpainter'
14
+ import { style, badge, box, paint, spin, strip, setIcons } from 'termpainter'
15
15
  ```
16
16
 
17
17
  ### styles
@@ -27,6 +27,30 @@ style.bold('Important message') // bold white
27
27
  style.highlight('termpainter') // cyan
28
28
  ```
29
29
 
30
+ ### structured log output
31
+
32
+ any `style.*` method accepts an optional second argument — a plain object whose keys and values are printed below the message, indented and with keys in cyan.
33
+ ```ts
34
+ style.info('User created', { id: 123, role: 'admin' })
35
+ // ℹ User created
36
+ // id 123
37
+ // role admin
38
+
39
+ style.error('Request failed', { status: 503, path: '/api/data' })
40
+ ```
41
+
42
+ ### debug
43
+
44
+ only outputs when `DEBUG` is set to any truthy value. silently returns an empty string otherwise. styled gray + dim with a 🔍 prefix.
45
+ ```ts
46
+ style.debug('cache miss for key xyz')
47
+ style.debug('query executed', { rows: 42, ms: 18 })
48
+ ```
49
+ ```sh
50
+ DEBUG=1 node app.js # shows debug output
51
+ node app.js # debug lines are invisible
52
+ ```
53
+
30
54
  ### badges
31
55
 
32
56
  inline labels. good for status, versions, environments.
@@ -40,10 +64,11 @@ badge('offline', 'red')
40
64
 
41
65
  ### boxes
42
66
 
43
- draws a clean unicode border around anything. multiline works fine.
67
+ draws a clean unicode border around anything. multiline works fine. fully composable — pass styled strings directly.
44
68
  ```ts
45
69
  box('Deploy complete\n3 services restarted\nAll checks passed', 'green')
46
70
  box('Critical error\nProcess exited with code 1', 'red')
71
+ box(style.success('done')) // styled content inside a box
47
72
  ```
48
73
 
49
74
  ### divider
@@ -78,18 +103,57 @@ style.timestamp('Connection failed', 'red') // timestamp in red
78
103
 
79
104
  ### paint
80
105
 
81
- low level, for when you need something the presets dont cover.
106
+ low level, for when you need something the presets don't cover.
82
107
  ```ts
83
108
  paint('custom text', { color: 'magenta', bold: true })
84
109
  paint('highlighted', { color: 'white', bg: 'blue' })
85
110
  paint('soft note', { color: 'gray', italic: true, dim: true })
86
111
  ```
87
112
 
113
+ ### spinner
114
+
115
+ animated terminal spinner. returns a handle with `succeed` and `fail` to stop it. no external dependencies.
116
+ ```ts
117
+ const s = spin('Deploying...')
118
+
119
+ // later, when done:
120
+ s.succeed('Deploy complete') // stops spinner, shows style.success
121
+ s.fail('Deploy failed') // stops spinner, shows style.error
122
+
123
+ // optional: reuse the original message
124
+ s.succeed()
125
+ s.fail()
126
+ ```
127
+
128
+ ### strip
129
+
130
+ removes all ANSI escape codes from a string. useful for writing styled output to log files or comparing strings in tests.
131
+ ```ts
132
+ const raw = strip(style.success('Build complete'))
133
+ // => '✔ Build complete'
134
+
135
+ fs.appendFileSync('app.log', strip(style.info('Server started')) + '\n')
136
+ ```
137
+
138
+ ### custom icons
139
+
140
+ override the default icons for any or all style methods. unspecified keys fall back to defaults.
141
+ ```ts
142
+ import { setIcons } from 'termpainter'
143
+
144
+ setIcons({ success: '✓', error: '✕' })
145
+
146
+ style.success('done') // ✓ done (custom icon)
147
+ style.warn('careful') // ⚠ careful (default icon unchanged)
148
+ ```
149
+
150
+ available keys: `success`, `error`, `warn`, `info`, `debug`
151
+
88
152
  ---
89
153
 
90
154
  ## color support
91
155
 
92
- termpainter automatically strips all ANSI codes when `NO_COLOR` is set, when running in CI, or when output is piped. your logs wont be full of broken escape sequences.
156
+ termpainter automatically strips all ANSI codes when `NO_COLOR` is set, when running in CI, or when output is piped. your logs won't be full of broken escape sequences.
93
157
  ```ts
94
158
  import { isColorEnabled } from 'termpainter'
95
159
 
@@ -102,10 +166,11 @@ isColorEnabled() // true in an interactive terminal, false everywhere else
102
166
 
103
167
  | function | description |
104
168
  |---|---|
105
- | `style.error(msg)` | red, prepends ✖ |
106
- | `style.success(msg)` | green, prepends ✔ |
107
- | `style.warn(msg)` | yellow, prepends ⚠ |
108
- | `style.info(msg)` | blue, prepends ℹ |
169
+ | `style.error(msg, meta?)` | red, prepends ✖ |
170
+ | `style.success(msg, meta?)` | green, prepends ✔ |
171
+ | `style.warn(msg, meta?)` | yellow, prepends ⚠ |
172
+ | `style.info(msg, meta?)` | blue, prepends ℹ |
173
+ | `style.debug(msg, meta?)` | gray+dim, 🔍 prefix, only when `DEBUG` is set |
109
174
  | `style.muted(msg)` | gray, dimmed |
110
175
  | `style.bold(msg)` | bold white |
111
176
  | `style.highlight(msg)` | cyan |
@@ -113,7 +178,10 @@ isColorEnabled() // true in an interactive terminal, false everywhere else
113
178
  | `style.table(data, color?)` | aligned key-value table, keys in cyan |
114
179
  | `style.timestamp(msg, color?)` | prepends [HH:MM:SS], default gray |
115
180
  | `badge(text, color?)` | [text] in chosen color, default white |
116
- | `box(text, color?)` | unicode border box, multiline aware |
181
+ | `box(text, color?)` | unicode border box, multiline and ANSI-aware |
182
+ | `spin(msg)` | animated spinner, returns `{ succeed(msg?), fail(msg?) }` |
183
+ | `strip(str)` | removes all ANSI escape codes from a string |
184
+ | `setIcons(icons)` | override icons for error, success, warn, info, debug |
117
185
  | `paint(text, options?)` | raw ANSI composer |
118
186
  | `isColorEnabled()` | returns true if colors are active |
119
187
 
@@ -121,4 +189,4 @@ isColorEnabled() // true in an interactive terminal, false everywhere else
121
189
 
122
190
  ## license
123
191
 
124
- MIT © Abdullah Hashmi
192
+ MIT © Abdullah Hashmi
package/dist/cjs/box.cjs CHANGED
@@ -6,12 +6,12 @@ const codes_js_1 = require('./codes.cjs');
6
6
  const env_js_1 = require('./env.cjs');
7
7
  function box(text, color = 'white') {
8
8
  const lines = text.split('\n');
9
- const width = Math.max(...lines.map((l) => l.length));
9
+ const width = Math.max(...lines.map((l) => (0, paint_js_1.strip)(l).length));
10
10
  if (!(0, env_js_1.isColorEnabled)()) {
11
11
  const top = `╭${'─'.repeat(width + 2)}╮`;
12
12
  const bottom = `╰${'─'.repeat(width + 2)}╯`;
13
13
  const middle = lines.map((line) => {
14
- const padding = ' '.repeat(width - line.length);
14
+ const padding = ' '.repeat(width - (0, paint_js_1.strip)(line).length);
15
15
  return `│ ${line}${padding} │`;
16
16
  });
17
17
  return [top, ...middle, bottom].join('\n');
@@ -20,7 +20,7 @@ function box(text, color = 'white') {
20
20
  const top = `${c}╭${'─'.repeat(width + 2)}╮${codes_js_1.RESET}`;
21
21
  const bottom = `${c}╰${'─'.repeat(width + 2)}╯${codes_js_1.RESET}`;
22
22
  const middle = lines.map((line) => {
23
- const padding = ' '.repeat(width - line.length);
23
+ const padding = ' '.repeat(width - (0, paint_js_1.strip)(line).length);
24
24
  return `${c}│${codes_js_1.RESET} ${line}${padding} ${c}│${codes_js_1.RESET}`;
25
25
  });
26
26
  return [top, ...middle, bottom].join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAS,MAAM,YAAY,CAAC;AAI/C,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,KAAe,GAAG,MAAM,CAuBhE"}
1
+ {"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAgB,MAAM,YAAY,CAAC;AAItD,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,KAAe,GAAG,MAAM,CAuBhE"}
@@ -1 +1 @@
1
- {"version":3,"file":"box.js","sourceRoot":"","sources":["../../src/box.ts"],"names":[],"mappings":";;AAIA,kBAuBC;AA3BD,yCAA+C;AAC/C,yCAAmC;AACnC,qCAA0C;AAE1C,SAAgB,GAAG,CAAC,IAAY,EAAE,QAAe,OAAO;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtD,IAAI,CAAC,IAAA,uBAAc,GAAE,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAChD,OAAO,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,GAAG,gBAAK,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,gBAAK,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,gBAAK,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC,IAAI,gBAAK,IAAI,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,gBAAK,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"box.js","sourceRoot":"","sources":["../../src/box.ts"],"names":[],"mappings":";;AAIA,kBAuBC;AA3BD,yCAAsD;AACtD,yCAAmC;AACnC,qCAA0C;AAE1C,SAAgB,GAAG,CAAC,IAAY,EAAE,QAAe,OAAO;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,gBAAK,EAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7D,IAAI,CAAC,IAAA,uBAAc,GAAE,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAA,gBAAK,EAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;YACvD,OAAO,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,GAAG,gBAAK,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,gBAAK,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,gBAAK,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAA,gBAAK,EAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC,IAAI,gBAAK,IAAI,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,gBAAK,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setIcons = setIcons;
4
+ exports.getIcons = getIcons;
5
+ const defaults = {
6
+ error: '✖',
7
+ success: '✔',
8
+ warn: '⚠',
9
+ info: 'ℹ',
10
+ debug: '🔍',
11
+ };
12
+ let current = { ...defaults };
13
+ function setIcons(icons) {
14
+ current = { ...defaults, ...icons };
15
+ }
16
+ function getIcons() {
17
+ return current;
18
+ }
19
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1,10 @@
1
+ export interface Icons {
2
+ error: string;
3
+ success: string;
4
+ warn: string;
5
+ info: string;
6
+ debug: string;
7
+ }
8
+ export declare function setIcons(icons: Partial<Icons>): void;
9
+ export declare function getIcons(): Icons;
10
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1,10 @@
1
+ export interface Icons {
2
+ error: string;
3
+ success: string;
4
+ warn: string;
5
+ info: string;
6
+ debug: string;
7
+ }
8
+ export declare function setIcons(icons: Partial<Icons>): void;
9
+ export declare function getIcons(): Icons;
10
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/icons.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAYD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAEpD;AAED,wBAAgB,QAAQ,IAAI,KAAK,CAEhC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/icons.ts"],"names":[],"mappings":";;AAkBA,4BAEC;AAED,4BAEC;AAhBD,MAAM,QAAQ,GAAU;IACtB,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,GAAG;IACZ,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,IAAI;CACZ,CAAC;AAEF,IAAI,OAAO,GAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;AAErC,SAAgB,QAAQ,CAAC,KAAqB;IAC5C,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC;AACtC,CAAC;AAED,SAAgB,QAAQ;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -14,15 +14,20 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.isColorEnabled = exports.box = exports.badge = exports.style = exports.paint = void 0;
17
+ exports.isColorEnabled = exports.setIcons = exports.spin = exports.box = exports.badge = exports.style = exports.strip = exports.paint = void 0;
18
18
  var paint_js_1 = require('./paint.cjs');
19
19
  Object.defineProperty(exports, "paint", { enumerable: true, get: function () { return paint_js_1.paint; } });
20
+ Object.defineProperty(exports, "strip", { enumerable: true, get: function () { return paint_js_1.strip; } });
20
21
  var style_js_1 = require('./style.cjs');
21
22
  Object.defineProperty(exports, "style", { enumerable: true, get: function () { return style_js_1.style; } });
22
23
  var badge_js_1 = require('./badge.cjs');
23
24
  Object.defineProperty(exports, "badge", { enumerable: true, get: function () { return badge_js_1.badge; } });
24
25
  var box_js_1 = require('./box.cjs');
25
26
  Object.defineProperty(exports, "box", { enumerable: true, get: function () { return box_js_1.box; } });
27
+ var spinner_js_1 = require('./spinner.cjs');
28
+ Object.defineProperty(exports, "spin", { enumerable: true, get: function () { return spinner_js_1.spin; } });
29
+ var icons_js_1 = require('./icons.cjs');
30
+ Object.defineProperty(exports, "setIcons", { enumerable: true, get: function () { return icons_js_1.setIcons; } });
26
31
  var env_js_1 = require('./env.cjs');
27
32
  Object.defineProperty(exports, "isColorEnabled", { enumerable: true, get: function () { return env_js_1.isColorEnabled; } });
28
33
  __exportStar(require('./codes.cjs'), exports);
@@ -1,8 +1,12 @@
1
- export { paint } from './paint.js';
1
+ export { paint, strip } from './paint.js';
2
2
  export type { PaintOptions, Color } from './paint.js';
3
3
  export { style } from './style.js';
4
4
  export { badge } from './badge.js';
5
5
  export { box } from './box.js';
6
+ export { spin } from './spinner.js';
7
+ export type { SpinnerHandle } from './spinner.js';
8
+ export { setIcons } from './icons.js';
9
+ export type { Icons } from './icons.js';
6
10
  export { isColorEnabled } from './env.js';
7
11
  export * from './codes.js';
8
12
  //# sourceMappingURL=index.d.ts.map
@@ -1,8 +1,12 @@
1
- export { paint } from './paint.js';
1
+ export { paint, strip } from './paint.js';
2
2
  export type { PaintOptions, Color } from './paint.js';
3
3
  export { style } from './style.js';
4
4
  export { badge } from './badge.js';
5
5
  export { box } from './box.js';
6
+ export { spin } from './spinner.js';
7
+ export type { SpinnerHandle } from './spinner.js';
8
+ export { setIcons } from './icons.js';
9
+ export type { Icons } from './icons.js';
6
10
  export { isColorEnabled } from './env.js';
7
11
  export * from './codes.js';
8
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,cAAc,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AAEd,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AACd,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AACd,mCAA+B;AAAtB,6FAAA,GAAG,OAAA;AACZ,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AACvB,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uCAA0C;AAAjC,iGAAA,KAAK,OAAA;AAAE,iGAAA,KAAK,OAAA;AAErB,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AACd,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AACd,mCAA+B;AAAtB,6FAAA,GAAG,OAAA;AACZ,2CAAoC;AAA3B,kGAAA,IAAI,OAAA;AAEb,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAEjB,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AACvB,6CAA2B"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.bgMap = exports.fgMap = void 0;
4
4
  exports.paint = paint;
5
+ exports.strip = strip;
5
6
  const codes_js_1 = require('./codes.cjs');
6
7
  const env_js_1 = require('./env.cjs');
7
8
  const fgMap = {
@@ -48,4 +49,8 @@ function paint(text, options = {}) {
48
49
  return text;
49
50
  return `${prefix}${text}${codes_js_1.RESET}`;
50
51
  }
52
+ function strip(str) {
53
+ // eslint-disable-next-line no-control-regex
54
+ return str.replace(/\x1b\[[0-9;]*m/g, '');
55
+ }
51
56
  //# sourceMappingURL=paint.js.map
@@ -10,5 +10,6 @@ export interface PaintOptions {
10
10
  declare const fgMap: Record<Color, string>;
11
11
  declare const bgMap: Record<Color, string>;
12
12
  export declare function paint(text: string, options?: PaintOptions): string;
13
+ export declare function strip(str: string): string;
13
14
  export { fgMap, bgMap };
14
15
  //# sourceMappingURL=paint.d.ts.map
@@ -10,5 +10,6 @@ export interface PaintOptions {
10
10
  declare const fgMap: Record<Color, string>;
11
11
  declare const bgMap: Record<Color, string>;
12
12
  export declare function paint(text: string, options?: PaintOptions): string;
13
+ export declare function strip(str: string): string;
13
14
  export { fgMap, bgMap };
14
15
  //# sourceMappingURL=paint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paint.d.ts","sourceRoot":"","sources":["../../src/paint.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE1G,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAUhC,CAAC;AAEF,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAUhC,CAAC;AAEF,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,CAWtE;AAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"paint.d.ts","sourceRoot":"","sources":["../../src/paint.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE1G,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAUhC,CAAC;AAEF,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAUhC,CAAC;AAEF,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,CAWtE;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGzC;AAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"paint.js","sourceRoot":"","sources":["../../src/paint.ts"],"names":[],"mappings":";;;AA0CA,sBAWC;AArDD,yCAIoB;AACpB,qCAA0C;AAa1C,MAAM,KAAK,GAA0B;IACnC,KAAK,EAAE,gBAAK;IACZ,GAAG,EAAE,cAAG;IACR,KAAK,EAAE,gBAAK;IACZ,MAAM,EAAE,iBAAM;IACd,IAAI,EAAE,eAAI;IACV,OAAO,EAAE,kBAAO;IAChB,IAAI,EAAE,eAAI;IACV,KAAK,EAAE,gBAAK;IACZ,IAAI,EAAE,eAAI;CACX,CAAC;AA2BO,sBAAK;AAzBd,MAAM,KAAK,GAA0B;IACnC,KAAK,EAAE,mBAAQ;IACf,GAAG,EAAE,iBAAM;IACX,KAAK,EAAE,mBAAQ;IACf,MAAM,EAAE,oBAAS;IACjB,IAAI,EAAE,kBAAO;IACb,OAAO,EAAE,qBAAU;IACnB,IAAI,EAAE,kBAAO;IACb,KAAK,EAAE,mBAAQ;IACf,IAAI,EAAE,kBAAO;CACd,CAAC;AAec,sBAAK;AAbrB,SAAgB,KAAK,CAAC,IAAY,EAAE,UAAwB,EAAE;IAC5D,IAAI,CAAC,IAAA,uBAAc,GAAE;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,OAAO,CAAC,IAAI;QAAE,MAAM,IAAI,eAAI,CAAC;IACjC,IAAI,OAAO,CAAC,GAAG;QAAE,MAAM,IAAI,cAAG,CAAC;IAC/B,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,iBAAM,CAAC;IACrC,IAAI,OAAO,CAAC,SAAS;QAAE,MAAM,IAAI,oBAAS,CAAC;IAC3C,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,gBAAK,EAAE,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"paint.js","sourceRoot":"","sources":["../../src/paint.ts"],"names":[],"mappings":";;;AA0CA,sBAWC;AAED,sBAGC;AA1DD,yCAIoB;AACpB,qCAA0C;AAa1C,MAAM,KAAK,GAA0B;IACnC,KAAK,EAAE,gBAAK;IACZ,GAAG,EAAE,cAAG;IACR,KAAK,EAAE,gBAAK;IACZ,MAAM,EAAE,iBAAM;IACd,IAAI,EAAE,eAAI;IACV,OAAO,EAAE,kBAAO;IAChB,IAAI,EAAE,eAAI;IACV,KAAK,EAAE,gBAAK;IACZ,IAAI,EAAE,eAAI;CACX,CAAC;AAgCO,sBAAK;AA9Bd,MAAM,KAAK,GAA0B;IACnC,KAAK,EAAE,mBAAQ;IACf,GAAG,EAAE,iBAAM;IACX,KAAK,EAAE,mBAAQ;IACf,MAAM,EAAE,oBAAS;IACjB,IAAI,EAAE,kBAAO;IACb,OAAO,EAAE,qBAAU;IACnB,IAAI,EAAE,kBAAO;IACb,KAAK,EAAE,mBAAQ;IACf,IAAI,EAAE,kBAAO;CACd,CAAC;AAoBc,sBAAK;AAlBrB,SAAgB,KAAK,CAAC,IAAY,EAAE,UAAwB,EAAE;IAC5D,IAAI,CAAC,IAAA,uBAAc,GAAE;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,OAAO,CAAC,IAAI;QAAE,MAAM,IAAI,eAAI,CAAC;IACjC,IAAI,OAAO,CAAC,GAAG;QAAE,MAAM,IAAI,cAAG,CAAC;IAC/B,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,iBAAM,CAAC;IACrC,IAAI,OAAO,CAAC,SAAS;QAAE,MAAM,IAAI,oBAAS,CAAC;IAC3C,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,gBAAK,EAAE,CAAC;AACpC,CAAC;AAED,SAAgB,KAAK,CAAC,GAAW;IAC/B,4CAA4C;IAC5C,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.spin = spin;
4
+ const style_js_1 = require('./style.cjs');
5
+ const FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
6
+ function spin(msg) {
7
+ let i = 0;
8
+ const timer = setInterval(() => {
9
+ const frame = FRAMES[i % FRAMES.length];
10
+ process.stdout.write(`\r${frame} ${msg}`);
11
+ i++;
12
+ }, 80);
13
+ function stop(output) {
14
+ clearInterval(timer);
15
+ process.stdout.write(`\r\x1b[K${output}\n`);
16
+ }
17
+ return {
18
+ succeed(newMsg) {
19
+ stop(style_js_1.style.success(newMsg ?? msg));
20
+ },
21
+ fail(newMsg) {
22
+ stop(style_js_1.style.error(newMsg ?? msg));
23
+ },
24
+ };
25
+ }
26
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1,6 @@
1
+ export interface SpinnerHandle {
2
+ succeed(msg?: string): void;
3
+ fail(msg?: string): void;
4
+ }
5
+ export declare function spin(msg: string): SpinnerHandle;
6
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1,6 @@
1
+ export interface SpinnerHandle {
2
+ succeed(msg?: string): void;
3
+ fail(msg?: string): void;
4
+ }
5
+ export declare function spin(msg: string): SpinnerHandle;
6
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/spinner.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAqB/C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/spinner.ts"],"names":[],"mappings":";;AASA,oBAqBC;AA9BD,yCAAmC;AAEnC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAOlE,SAAgB,IAAI,CAAC,GAAW;IAC9B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;QAC1C,CAAC,EAAE,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,IAAI,CAAC,MAAc;QAC1B,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,MAAM,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,OAAO,CAAC,MAAe;YACrB,IAAI,CAAC,gBAAK,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,MAAe;YAClB,IAAI,CAAC,gBAAK,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -2,18 +2,37 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.style = void 0;
4
4
  const paint_js_1 = require('./paint.cjs');
5
+ const icons_js_1 = require('./icons.cjs');
6
+ function formatMeta(data) {
7
+ const keys = Object.keys(data);
8
+ if (keys.length === 0)
9
+ return '';
10
+ const keyWidth = Math.max(...keys.map((k) => k.length));
11
+ return ('\n' +
12
+ keys
13
+ .map((key) => {
14
+ const paddedKey = (0, paint_js_1.paint)(key.padEnd(keyWidth), { color: 'cyan' });
15
+ return ` ${paddedKey} ${data[key]}`;
16
+ })
17
+ .join('\n'));
18
+ }
5
19
  exports.style = {
6
- error(msg) {
7
- return (0, paint_js_1.paint)(`✖ ${msg}`, { color: 'red' });
20
+ error(msg, meta) {
21
+ return (0, paint_js_1.paint)(`${(0, icons_js_1.getIcons)().error} ${msg}`, { color: 'red' }) + (meta ? formatMeta(meta) : '');
8
22
  },
9
- success(msg) {
10
- return (0, paint_js_1.paint)(`✔ ${msg}`, { color: 'green' });
23
+ success(msg, meta) {
24
+ return (0, paint_js_1.paint)(`${(0, icons_js_1.getIcons)().success} ${msg}`, { color: 'green' }) + (meta ? formatMeta(meta) : '');
11
25
  },
12
- warn(msg) {
13
- return (0, paint_js_1.paint)(`⚠ ${msg}`, { color: 'yellow' });
26
+ warn(msg, meta) {
27
+ return (0, paint_js_1.paint)(`${(0, icons_js_1.getIcons)().warn} ${msg}`, { color: 'yellow' }) + (meta ? formatMeta(meta) : '');
14
28
  },
15
- info(msg) {
16
- return (0, paint_js_1.paint)(`ℹ ${msg}`, { color: 'blue' });
29
+ info(msg, meta) {
30
+ return (0, paint_js_1.paint)(`${(0, icons_js_1.getIcons)().info} ${msg}`, { color: 'blue' }) + (meta ? formatMeta(meta) : '');
31
+ },
32
+ debug(msg, meta) {
33
+ if (!process.env['DEBUG'])
34
+ return '';
35
+ return (0, paint_js_1.paint)(`${(0, icons_js_1.getIcons)().debug} ${msg}`, { color: 'gray', dim: true }) + (meta ? formatMeta(meta) : '');
17
36
  },
18
37
  muted(msg) {
19
38
  return (0, paint_js_1.paint)(msg, { color: 'gray', dim: true });
@@ -1,9 +1,11 @@
1
1
  import { type Color } from './paint.js';
2
+ type Meta = Record<string, unknown>;
2
3
  export declare const style: {
3
- error(msg: string): string;
4
- success(msg: string): string;
5
- warn(msg: string): string;
6
- info(msg: string): string;
4
+ error(msg: string, meta?: Meta): string;
5
+ success(msg: string, meta?: Meta): string;
6
+ warn(msg: string, meta?: Meta): string;
7
+ info(msg: string, meta?: Meta): string;
8
+ debug(msg: string, meta?: Meta): string;
7
9
  muted(msg: string): string;
8
10
  bold(msg: string): string;
9
11
  highlight(msg: string): string;
@@ -11,4 +13,5 @@ export declare const style: {
11
13
  table(data: Record<string, string>, color?: Color): string;
12
14
  timestamp(msg: string, color?: Color): string;
13
15
  };
16
+ export {};
14
17
  //# sourceMappingURL=style.d.ts.map
@@ -1,9 +1,11 @@
1
1
  import { type Color } from './paint.js';
2
+ type Meta = Record<string, unknown>;
2
3
  export declare const style: {
3
- error(msg: string): string;
4
- success(msg: string): string;
5
- warn(msg: string): string;
6
- info(msg: string): string;
4
+ error(msg: string, meta?: Meta): string;
5
+ success(msg: string, meta?: Meta): string;
6
+ warn(msg: string, meta?: Meta): string;
7
+ info(msg: string, meta?: Meta): string;
8
+ debug(msg: string, meta?: Meta): string;
7
9
  muted(msg: string): string;
8
10
  bold(msg: string): string;
9
11
  highlight(msg: string): string;
@@ -11,4 +13,5 @@ export declare const style: {
11
13
  table(data: Record<string, string>, color?: Color): string;
12
14
  timestamp(msg: string, color?: Color): string;
13
15
  };
16
+ export {};
14
17
  //# sourceMappingURL=style.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,KAAK;eACL,MAAM,GAAG,MAAM;iBAGb,MAAM,GAAG,MAAM;cAGlB,MAAM,GAAG,MAAM;cAGf,MAAM,GAAG,MAAM;eAGd,MAAM,GAAG,MAAM;cAGhB,MAAM,GAAG,MAAM;mBAGV,MAAM,GAAG,MAAM;oBAIf,KAAK,GAAY,MAAM;gBAI1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAS,KAAK,GAAY,MAAM;mBAYnD,MAAM,UAAS,KAAK,GAAY,MAAM;CAQtD,CAAC"}
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAG/C,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAiBpC,eAAO,MAAM,KAAK;eACL,MAAM,SAAS,IAAI,GAAG,MAAM;iBAG1B,MAAM,SAAS,IAAI,GAAG,MAAM;cAG/B,MAAM,SAAS,IAAI,GAAG,MAAM;cAG5B,MAAM,SAAS,IAAI,GAAG,MAAM;eAG3B,MAAM,SAAS,IAAI,GAAG,MAAM;eAI5B,MAAM,GAAG,MAAM;cAGhB,MAAM,GAAG,MAAM;mBAGV,MAAM,GAAG,MAAM;oBAIf,KAAK,GAAY,MAAM;gBAI1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAS,KAAK,GAAY,MAAM;mBAYnD,MAAM,UAAS,KAAK,GAAY,MAAM;CAQtD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/style.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/style.ts"],"names":[],"mappings":"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"}
package/dist/esm/box.js CHANGED
@@ -1,14 +1,14 @@
1
- import { fgMap } from './paint.js';
1
+ import { fgMap, strip } from './paint.js';
2
2
  import { RESET } from './codes.js';
3
3
  import { isColorEnabled } from './env.js';
4
4
  export function box(text, color = 'white') {
5
5
  const lines = text.split('\n');
6
- const width = Math.max(...lines.map((l) => l.length));
6
+ const width = Math.max(...lines.map((l) => strip(l).length));
7
7
  if (!isColorEnabled()) {
8
8
  const top = `╭${'─'.repeat(width + 2)}╮`;
9
9
  const bottom = `╰${'─'.repeat(width + 2)}╯`;
10
10
  const middle = lines.map((line) => {
11
- const padding = ' '.repeat(width - line.length);
11
+ const padding = ' '.repeat(width - strip(line).length);
12
12
  return `│ ${line}${padding} │`;
13
13
  });
14
14
  return [top, ...middle, bottom].join('\n');
@@ -17,7 +17,7 @@ export function box(text, color = 'white') {
17
17
  const top = `${c}╭${'─'.repeat(width + 2)}╮${RESET}`;
18
18
  const bottom = `${c}╰${'─'.repeat(width + 2)}╯${RESET}`;
19
19
  const middle = lines.map((line) => {
20
- const padding = ' '.repeat(width - line.length);
20
+ const padding = ' '.repeat(width - strip(line).length);
21
21
  return `${c}│${RESET} ${line}${padding} ${c}│${RESET}`;
22
22
  });
23
23
  return [top, ...middle, bottom].join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"box.js","sourceRoot":"","sources":["../../src/box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,QAAe,OAAO;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtD,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAChD,OAAO,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"box.js","sourceRoot":"","sources":["../../src/box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,QAAe,OAAO;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7D,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;YACvD,OAAO,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,15 @@
1
+ const defaults = {
2
+ error: '✖',
3
+ success: '✔',
4
+ warn: '⚠',
5
+ info: 'ℹ',
6
+ debug: '🔍',
7
+ };
8
+ let current = { ...defaults };
9
+ export function setIcons(icons) {
10
+ current = { ...defaults, ...icons };
11
+ }
12
+ export function getIcons() {
13
+ return current;
14
+ }
15
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/icons.ts"],"names":[],"mappings":"AAQA,MAAM,QAAQ,GAAU;IACtB,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,GAAG;IACZ,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,IAAI;CACZ,CAAC;AAEF,IAAI,OAAO,GAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;AAErC,MAAM,UAAU,QAAQ,CAAC,KAAqB;IAC5C,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,7 +1,9 @@
1
- export { paint } from './paint.js';
1
+ export { paint, strip } from './paint.js';
2
2
  export { style } from './style.js';
3
3
  export { badge } from './badge.js';
4
4
  export { box } from './box.js';
5
+ export { spin } from './spinner.js';
6
+ export { setIcons } from './icons.js';
5
7
  export { isColorEnabled } from './env.js';
6
8
  export * from './codes.js';
7
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,cAAc,YAAY,CAAC"}
package/dist/esm/paint.js CHANGED
@@ -42,5 +42,9 @@ export function paint(text, options = {}) {
42
42
  return text;
43
43
  return `${prefix}${text}${RESET}`;
44
44
  }
45
+ export function strip(str) {
46
+ // eslint-disable-next-line no-control-regex
47
+ return str.replace(/\x1b\[[0-9;]*m/g, '');
48
+ }
45
49
  export { fgMap, bgMap };
46
50
  //# sourceMappingURL=paint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paint.js","sourceRoot":"","sources":["../../src/paint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EACnC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAC3D,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GACvF,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAa1C,MAAM,KAAK,GAA0B;IACnC,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,GAAG;IACR,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;CACX,CAAC;AAEF,MAAM,KAAK,GAA0B;IACnC,KAAK,EAAE,QAAQ;IACf,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,UAAwB,EAAE;IAC5D,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,OAAO,CAAC,IAAI;QAAE,MAAM,IAAI,IAAI,CAAC;IACjC,IAAI,OAAO,CAAC,GAAG;QAAE,MAAM,IAAI,GAAG,CAAC;IAC/B,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,MAAM,CAAC;IACrC,IAAI,OAAO,CAAC,SAAS;QAAE,MAAM,IAAI,SAAS,CAAC;IAC3C,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"paint.js","sourceRoot":"","sources":["../../src/paint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EACnC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAC3D,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GACvF,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAa1C,MAAM,KAAK,GAA0B;IACnC,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,GAAG;IACR,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;CACX,CAAC;AAEF,MAAM,KAAK,GAA0B;IACnC,KAAK,EAAE,QAAQ;IACf,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,UAAwB,EAAE;IAC5D,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,OAAO,CAAC,IAAI;QAAE,MAAM,IAAI,IAAI,CAAC;IACjC,IAAI,OAAO,CAAC,GAAG;QAAE,MAAM,IAAI,GAAG,CAAC;IAC/B,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,MAAM,CAAC;IACrC,IAAI,OAAO,CAAC,SAAS;QAAE,MAAM,IAAI,SAAS,CAAC;IAC3C,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,4CAA4C;IAC5C,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { style } from './style.js';
2
+ const FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
3
+ export function spin(msg) {
4
+ let i = 0;
5
+ const timer = setInterval(() => {
6
+ const frame = FRAMES[i % FRAMES.length];
7
+ process.stdout.write(`\r${frame} ${msg}`);
8
+ i++;
9
+ }, 80);
10
+ function stop(output) {
11
+ clearInterval(timer);
12
+ process.stdout.write(`\r\x1b[K${output}\n`);
13
+ }
14
+ return {
15
+ succeed(newMsg) {
16
+ stop(style.success(newMsg ?? msg));
17
+ },
18
+ fail(newMsg) {
19
+ stop(style.error(newMsg ?? msg));
20
+ },
21
+ };
22
+ }
23
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAOlE,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;QAC1C,CAAC,EAAE,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,IAAI,CAAC,MAAc;QAC1B,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,MAAM,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,OAAO,CAAC,MAAe;YACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,MAAe;YAClB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/esm/style.js CHANGED
@@ -1,16 +1,35 @@
1
1
  import { paint } from './paint.js';
2
+ import { getIcons } from './icons.js';
3
+ function formatMeta(data) {
4
+ const keys = Object.keys(data);
5
+ if (keys.length === 0)
6
+ return '';
7
+ const keyWidth = Math.max(...keys.map((k) => k.length));
8
+ return ('\n' +
9
+ keys
10
+ .map((key) => {
11
+ const paddedKey = paint(key.padEnd(keyWidth), { color: 'cyan' });
12
+ return ` ${paddedKey} ${data[key]}`;
13
+ })
14
+ .join('\n'));
15
+ }
2
16
  export const style = {
3
- error(msg) {
4
- return paint(`✖ ${msg}`, { color: 'red' });
17
+ error(msg, meta) {
18
+ return paint(`${getIcons().error} ${msg}`, { color: 'red' }) + (meta ? formatMeta(meta) : '');
5
19
  },
6
- success(msg) {
7
- return paint(`✔ ${msg}`, { color: 'green' });
20
+ success(msg, meta) {
21
+ return paint(`${getIcons().success} ${msg}`, { color: 'green' }) + (meta ? formatMeta(meta) : '');
8
22
  },
9
- warn(msg) {
10
- return paint(`⚠ ${msg}`, { color: 'yellow' });
23
+ warn(msg, meta) {
24
+ return paint(`${getIcons().warn} ${msg}`, { color: 'yellow' }) + (meta ? formatMeta(meta) : '');
11
25
  },
12
- info(msg) {
13
- return paint(`ℹ ${msg}`, { color: 'blue' });
26
+ info(msg, meta) {
27
+ return paint(`${getIcons().info} ${msg}`, { color: 'blue' }) + (meta ? formatMeta(meta) : '');
28
+ },
29
+ debug(msg, meta) {
30
+ if (!process.env['DEBUG'])
31
+ return '';
32
+ return paint(`${getIcons().debug} ${msg}`, { color: 'gray', dim: true }) + (meta ? formatMeta(meta) : '');
14
33
  },
15
34
  muted(msg) {
16
35
  return paint(msg, { color: 'gray', dim: true });
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,YAAY,CAAC;AAE/C,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,KAAK,CAAC,GAAW;QACf,OAAO,KAAK,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,GAAW;QACjB,OAAO,KAAK,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,CAAC,GAAW;QACd,OAAO,KAAK,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,GAAW;QACd,OAAO,KAAK,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,CAAC,GAAW;QACf,OAAO,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,GAAW;QACd,OAAO,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,SAAS,CAAC,GAAW;QACnB,OAAO,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,QAAe,MAAM;QAC3B,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAA4B,EAAE,QAAe,MAAM;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvC,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,QAAe,MAAM;QAC1C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,OAAO,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;IAC5B,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/style.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAS,MAAM,YAAY,CAAC;AAI/C,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,KAAe,GAAG,MAAM,CAuBhE"}
1
+ {"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAgB,MAAM,YAAY,CAAC;AAItD,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,KAAe,GAAG,MAAM,CAuBhE"}
@@ -0,0 +1,10 @@
1
+ export interface Icons {
2
+ error: string;
3
+ success: string;
4
+ warn: string;
5
+ info: string;
6
+ debug: string;
7
+ }
8
+ export declare function setIcons(icons: Partial<Icons>): void;
9
+ export declare function getIcons(): Icons;
10
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/icons.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAYD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAEpD;AAED,wBAAgB,QAAQ,IAAI,KAAK,CAEhC"}
@@ -1,8 +1,12 @@
1
- export { paint } from './paint.js';
1
+ export { paint, strip } from './paint.js';
2
2
  export type { PaintOptions, Color } from './paint.js';
3
3
  export { style } from './style.js';
4
4
  export { badge } from './badge.js';
5
5
  export { box } from './box.js';
6
+ export { spin } from './spinner.js';
7
+ export type { SpinnerHandle } from './spinner.js';
8
+ export { setIcons } from './icons.js';
9
+ export type { Icons } from './icons.js';
6
10
  export { isColorEnabled } from './env.js';
7
11
  export * from './codes.js';
8
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,cAAc,YAAY,CAAC"}
@@ -10,5 +10,6 @@ export interface PaintOptions {
10
10
  declare const fgMap: Record<Color, string>;
11
11
  declare const bgMap: Record<Color, string>;
12
12
  export declare function paint(text: string, options?: PaintOptions): string;
13
+ export declare function strip(str: string): string;
13
14
  export { fgMap, bgMap };
14
15
  //# sourceMappingURL=paint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paint.d.ts","sourceRoot":"","sources":["../../src/paint.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE1G,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAUhC,CAAC;AAEF,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAUhC,CAAC;AAEF,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,CAWtE;AAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"paint.d.ts","sourceRoot":"","sources":["../../src/paint.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE1G,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAUhC,CAAC;AAEF,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAUhC,CAAC;AAEF,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,CAWtE;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGzC;AAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface SpinnerHandle {
2
+ succeed(msg?: string): void;
3
+ fail(msg?: string): void;
4
+ }
5
+ export declare function spin(msg: string): SpinnerHandle;
6
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/spinner.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAqB/C"}
@@ -1,9 +1,11 @@
1
1
  import { type Color } from './paint.js';
2
+ type Meta = Record<string, unknown>;
2
3
  export declare const style: {
3
- error(msg: string): string;
4
- success(msg: string): string;
5
- warn(msg: string): string;
6
- info(msg: string): string;
4
+ error(msg: string, meta?: Meta): string;
5
+ success(msg: string, meta?: Meta): string;
6
+ warn(msg: string, meta?: Meta): string;
7
+ info(msg: string, meta?: Meta): string;
8
+ debug(msg: string, meta?: Meta): string;
7
9
  muted(msg: string): string;
8
10
  bold(msg: string): string;
9
11
  highlight(msg: string): string;
@@ -11,4 +13,5 @@ export declare const style: {
11
13
  table(data: Record<string, string>, color?: Color): string;
12
14
  timestamp(msg: string, color?: Color): string;
13
15
  };
16
+ export {};
14
17
  //# sourceMappingURL=style.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,KAAK;eACL,MAAM,GAAG,MAAM;iBAGb,MAAM,GAAG,MAAM;cAGlB,MAAM,GAAG,MAAM;cAGf,MAAM,GAAG,MAAM;eAGd,MAAM,GAAG,MAAM;cAGhB,MAAM,GAAG,MAAM;mBAGV,MAAM,GAAG,MAAM;oBAIf,KAAK,GAAY,MAAM;gBAI1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAS,KAAK,GAAY,MAAM;mBAYnD,MAAM,UAAS,KAAK,GAAY,MAAM;CAQtD,CAAC"}
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAG/C,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAiBpC,eAAO,MAAM,KAAK;eACL,MAAM,SAAS,IAAI,GAAG,MAAM;iBAG1B,MAAM,SAAS,IAAI,GAAG,MAAM;cAG/B,MAAM,SAAS,IAAI,GAAG,MAAM;cAG5B,MAAM,SAAS,IAAI,GAAG,MAAM;eAG3B,MAAM,SAAS,IAAI,GAAG,MAAM;eAI5B,MAAM,GAAG,MAAM;cAGhB,MAAM,GAAG,MAAM;mBAGV,MAAM,GAAG,MAAM;oBAIf,KAAK,GAAY,MAAM;gBAI1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAS,KAAK,GAAY,MAAM;mBAYnD,MAAM,UAAS,KAAK,GAAY,MAAM;CAQtD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termpainter",
3
- "version": "1.0.1",
3
+ "version": "1.2.0",
4
4
  "description": "Zero-dependency terminal styling toolkit for Node.js and Bun",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -54,5 +54,8 @@
54
54
  "devDependencies": {
55
55
  "@types/node": "^25.5.0",
56
56
  "typescript": "^6.0.2"
57
+ },
58
+ "dependencies": {
59
+ "termpainter": "^1.0.1"
57
60
  }
58
61
  }