@calltelemetry/cli 0.15.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,97 @@
1
+ /** Plain-text table and value formatting helpers for CLI output. */
2
+ function visibleLength(value) {
3
+ // Strip ANSI escape sequences so colored cells still align.
4
+ // eslint-disable-next-line no-control-regex
5
+ return value.replace(/\u001b\[[0-9;]*m/g, '').length;
6
+ }
7
+ export function truncate(value, width) {
8
+ if (width <= 0)
9
+ return '';
10
+ if (visibleLength(value) <= width)
11
+ return value;
12
+ if (width <= 1)
13
+ return '…';
14
+ return `${value.slice(0, width - 1)}…`;
15
+ }
16
+ function pad(value, width, alignment) {
17
+ const missing = Math.max(0, width - visibleLength(value));
18
+ return alignment === 'right' ? `${' '.repeat(missing)}${value}` : `${value}${' '.repeat(missing)}`;
19
+ }
20
+ export function renderTable(headers, rows, options = {}) {
21
+ if (headers.length === 0)
22
+ return '';
23
+ const columnCount = headers.length;
24
+ const normalizedRows = rows.map(row => Array.from({ length: columnCount }, (_unused, index) => row[index] ?? ''));
25
+ const widths = headers.map((header, index) => {
26
+ const limit = options.maxWidth?.[index];
27
+ const candidates = [header, ...normalizedRows.map(row => row[index] ?? '')];
28
+ const natural = Math.max(...candidates.map(visibleLength));
29
+ return limit !== undefined ? Math.min(natural, limit) : natural;
30
+ });
31
+ const indent = options.indent === false ? '' : ' ';
32
+ const align = (index) => options.align?.[index] ?? 'left';
33
+ const renderRow = (cells) => {
34
+ const padded = cells.map((cell, index) => {
35
+ const width = widths[index] ?? 0;
36
+ const singleLine = String(cell).replace(/\r?\n/g, ' ');
37
+ return pad(truncate(singleLine, width), width, align(index));
38
+ });
39
+ return `${indent}${padded.join(' ').trimEnd()}`;
40
+ };
41
+ const separator = `${indent}${widths.map(width => '─'.repeat(width)).join(' ')}`;
42
+ return [renderRow(headers), separator, ...normalizedRows.map(renderRow)].join('\n');
43
+ }
44
+ export function formatBytes(bytes) {
45
+ if (bytes === null || bytes === undefined || !Number.isFinite(bytes))
46
+ return '—';
47
+ if (bytes === 0)
48
+ return '0 B';
49
+ const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
50
+ const exponent = Math.min(Math.floor(Math.log(Math.abs(bytes)) / Math.log(1024)), units.length - 1);
51
+ const value = bytes / 1024 ** exponent;
52
+ const digits = value >= 10 || exponent === 0 ? 0 : 1;
53
+ return `${value.toFixed(digits)} ${units[exponent]}`;
54
+ }
55
+ export function formatGb(value) {
56
+ if (value === null || value === undefined || value === '')
57
+ return 'org default';
58
+ const parsed = typeof value === 'number' ? value : Number(value);
59
+ if (!Number.isFinite(parsed))
60
+ return String(value);
61
+ return `${parsed} GB`;
62
+ }
63
+ export function formatQuota(usedBytes, limitGb) {
64
+ return `${formatBytes(usedBytes)} / ${formatGb(limitGb)}`;
65
+ }
66
+ export function formatPercent(value) {
67
+ if (value === null || value === undefined || !Number.isFinite(value))
68
+ return '—';
69
+ return `${value.toFixed(value >= 10 ? 0 : 1)}%`;
70
+ }
71
+ export function formatDateTime(value) {
72
+ if (!value)
73
+ return '—';
74
+ const date = new Date(value);
75
+ if (Number.isNaN(date.getTime()))
76
+ return value;
77
+ return `${date.toISOString().replace('T', ' ').slice(0, 19)}Z`;
78
+ }
79
+ export function formatAge(value) {
80
+ if (!value)
81
+ return '—';
82
+ const date = new Date(value);
83
+ if (Number.isNaN(date.getTime()))
84
+ return value;
85
+ const seconds = Math.max(0, Math.floor((Date.now() - date.getTime()) / 1000));
86
+ if (seconds < 60)
87
+ return `${seconds}s ago`;
88
+ const minutes = Math.floor(seconds / 60);
89
+ if (minutes < 60)
90
+ return `${minutes}m ago`;
91
+ const hours = Math.floor(minutes / 60);
92
+ if (hours < 48)
93
+ return `${hours}h ago`;
94
+ const days = Math.floor(hours / 24);
95
+ return `${days}d ago`;
96
+ }
97
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/utils/table.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@calltelemetry/cli",
3
- "version": "0.15.1",
3
+ "version": "1.0.0",
4
4
  "description": "Call Telemetry appliance management CLI",
5
5
  "type": "module",
6
6
  "bin": {