@promptctl/rich-js 0.1.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 +418 -0
- package/dist/core/box.d.ts +91 -0
- package/dist/core/box.d.ts.map +1 -0
- package/dist/core/box.js +534 -0
- package/dist/core/box.js.map +1 -0
- package/dist/core/cells.d.ts +24 -0
- package/dist/core/cells.d.ts.map +1 -0
- package/dist/core/cells.js +114 -0
- package/dist/core/cells.js.map +1 -0
- package/dist/core/color.d.ts +158 -0
- package/dist/core/color.d.ts.map +1 -0
- package/dist/core/color.js +825 -0
- package/dist/core/color.js.map +1 -0
- package/dist/core/console.d.ts +100 -0
- package/dist/core/console.d.ts.map +1 -0
- package/dist/core/console.js +353 -0
- package/dist/core/console.js.map +1 -0
- package/dist/core/emoji.d.ts +25 -0
- package/dist/core/emoji.d.ts.map +1 -0
- package/dist/core/emoji.js +392 -0
- package/dist/core/emoji.js.map +1 -0
- package/dist/core/highlighter.d.ts +33 -0
- package/dist/core/highlighter.d.ts.map +1 -0
- package/dist/core/highlighter.js +103 -0
- package/dist/core/highlighter.js.map +1 -0
- package/dist/core/markup.d.ts +69 -0
- package/dist/core/markup.d.ts.map +1 -0
- package/dist/core/markup.js +401 -0
- package/dist/core/markup.js.map +1 -0
- package/dist/core/measure.d.ts +17 -0
- package/dist/core/measure.d.ts.map +1 -0
- package/dist/core/measure.js +50 -0
- package/dist/core/measure.js.map +1 -0
- package/dist/core/protocol.d.ts +32 -0
- package/dist/core/protocol.d.ts.map +1 -0
- package/dist/core/protocol.js +17 -0
- package/dist/core/protocol.js.map +1 -0
- package/dist/core/render.d.ts +51 -0
- package/dist/core/render.d.ts.map +1 -0
- package/dist/core/render.js +69 -0
- package/dist/core/render.js.map +1 -0
- package/dist/core/segment.d.ts +104 -0
- package/dist/core/segment.d.ts.map +1 -0
- package/dist/core/segment.js +364 -0
- package/dist/core/segment.js.map +1 -0
- package/dist/core/spinnerData.d.ts +11 -0
- package/dist/core/spinnerData.d.ts.map +1 -0
- package/dist/core/spinnerData.js +116 -0
- package/dist/core/spinnerData.js.map +1 -0
- package/dist/core/strip.d.ts +159 -0
- package/dist/core/strip.d.ts.map +1 -0
- package/dist/core/strip.js +237 -0
- package/dist/core/strip.js.map +1 -0
- package/dist/core/style.d.ts +115 -0
- package/dist/core/style.d.ts.map +1 -0
- package/dist/core/style.js +662 -0
- package/dist/core/style.js.map +1 -0
- package/dist/core/text.d.ts +91 -0
- package/dist/core/text.d.ts.map +1 -0
- package/dist/core/text.js +610 -0
- package/dist/core/text.js.map +1 -0
- package/dist/index.d.ts +99 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/renderables/align.d.ts +17 -0
- package/dist/renderables/align.d.ts.map +1 -0
- package/dist/renderables/align.js +47 -0
- package/dist/renderables/align.js.map +1 -0
- package/dist/renderables/columns.d.ts +28 -0
- package/dist/renderables/columns.d.ts.map +1 -0
- package/dist/renderables/columns.js +92 -0
- package/dist/renderables/columns.js.map +1 -0
- package/dist/renderables/constrain.d.ts +16 -0
- package/dist/renderables/constrain.d.ts.map +1 -0
- package/dist/renderables/constrain.js +38 -0
- package/dist/renderables/constrain.js.map +1 -0
- package/dist/renderables/flexStrip.d.ts +42 -0
- package/dist/renderables/flexStrip.d.ts.map +1 -0
- package/dist/renderables/flexStrip.js +201 -0
- package/dist/renderables/flexStrip.js.map +1 -0
- package/dist/renderables/group.d.ts +12 -0
- package/dist/renderables/group.d.ts.map +1 -0
- package/dist/renderables/group.js +16 -0
- package/dist/renderables/group.js.map +1 -0
- package/dist/renderables/json.d.ts +23 -0
- package/dist/renderables/json.d.ts.map +1 -0
- package/dist/renderables/json.js +49 -0
- package/dist/renderables/json.js.map +1 -0
- package/dist/renderables/layout.d.ts +37 -0
- package/dist/renderables/layout.d.ts.map +1 -0
- package/dist/renderables/layout.js +151 -0
- package/dist/renderables/layout.js.map +1 -0
- package/dist/renderables/live.d.ts +48 -0
- package/dist/renderables/live.d.ts.map +1 -0
- package/dist/renderables/live.js +131 -0
- package/dist/renderables/live.js.map +1 -0
- package/dist/renderables/markdown.d.ts +25 -0
- package/dist/renderables/markdown.d.ts.map +1 -0
- package/dist/renderables/markdown.js +190 -0
- package/dist/renderables/markdown.js.map +1 -0
- package/dist/renderables/padding.d.ts +26 -0
- package/dist/renderables/padding.d.ts.map +1 -0
- package/dist/renderables/padding.js +92 -0
- package/dist/renderables/padding.js.map +1 -0
- package/dist/renderables/panel.d.ts +42 -0
- package/dist/renderables/panel.d.ts.map +1 -0
- package/dist/renderables/panel.js +202 -0
- package/dist/renderables/panel.js.map +1 -0
- package/dist/renderables/pretty.d.ts +29 -0
- package/dist/renderables/pretty.d.ts.map +1 -0
- package/dist/renderables/pretty.js +141 -0
- package/dist/renderables/pretty.js.map +1 -0
- package/dist/renderables/progress.d.ts +91 -0
- package/dist/renderables/progress.d.ts.map +1 -0
- package/dist/renderables/progress.js +234 -0
- package/dist/renderables/progress.js.map +1 -0
- package/dist/renderables/progressBar.d.ts +32 -0
- package/dist/renderables/progressBar.d.ts.map +1 -0
- package/dist/renderables/progressBar.js +59 -0
- package/dist/renderables/progressBar.js.map +1 -0
- package/dist/renderables/prompt.d.ts +25 -0
- package/dist/renderables/prompt.d.ts.map +1 -0
- package/dist/renderables/prompt.js +109 -0
- package/dist/renderables/prompt.js.map +1 -0
- package/dist/renderables/rule.d.ts +25 -0
- package/dist/renderables/rule.d.ts.map +1 -0
- package/dist/renderables/rule.js +96 -0
- package/dist/renderables/rule.js.map +1 -0
- package/dist/renderables/spinner.d.ts +30 -0
- package/dist/renderables/spinner.d.ts.map +1 -0
- package/dist/renderables/spinner.js +70 -0
- package/dist/renderables/spinner.js.map +1 -0
- package/dist/renderables/status.d.ts +24 -0
- package/dist/renderables/status.d.ts.map +1 -0
- package/dist/renderables/status.js +67 -0
- package/dist/renderables/status.js.map +1 -0
- package/dist/renderables/syntax.d.ts +36 -0
- package/dist/renderables/syntax.d.ts.map +1 -0
- package/dist/renderables/syntax.js +115 -0
- package/dist/renderables/syntax.js.map +1 -0
- package/dist/renderables/table.d.ts +109 -0
- package/dist/renderables/table.d.ts.map +1 -0
- package/dist/renderables/table.js +434 -0
- package/dist/renderables/table.js.map +1 -0
- package/dist/renderables/traceback.d.ts +26 -0
- package/dist/renderables/traceback.d.ts.map +1 -0
- package/dist/renderables/traceback.js +108 -0
- package/dist/renderables/traceback.js.map +1 -0
- package/dist/renderables/tree.d.ts +30 -0
- package/dist/renderables/tree.d.ts.map +1 -0
- package/dist/renderables/tree.js +107 -0
- package/dist/renderables/tree.js.map +1 -0
- package/dist/template-bindings/index.d.ts +61 -0
- package/dist/template-bindings/index.d.ts.map +1 -0
- package/dist/template-bindings/index.js +70 -0
- package/dist/template-bindings/index.js.map +1 -0
- package/dist/template-bindings/style-funcs.d.ts +30 -0
- package/dist/template-bindings/style-funcs.d.ts.map +1 -0
- package/dist/template-bindings/style-funcs.js +172 -0
- package/dist/template-bindings/style-funcs.js.map +1 -0
- package/dist/themes/buildPalette.d.ts +31 -0
- package/dist/themes/buildPalette.d.ts.map +1 -0
- package/dist/themes/buildPalette.js +43 -0
- package/dist/themes/buildPalette.js.map +1 -0
- package/dist/themes/colorMath.d.ts +23 -0
- package/dist/themes/colorMath.d.ts.map +1 -0
- package/dist/themes/colorMath.js +99 -0
- package/dist/themes/colorMath.js.map +1 -0
- package/dist/themes/data/atom-one-dark.d.ts +4 -0
- package/dist/themes/data/atom-one-dark.d.ts.map +1 -0
- package/dist/themes/data/atom-one-dark.js +159 -0
- package/dist/themes/data/atom-one-dark.js.map +1 -0
- package/dist/themes/data/atom-one-light.d.ts +4 -0
- package/dist/themes/data/atom-one-light.d.ts.map +1 -0
- package/dist/themes/data/atom-one-light.js +159 -0
- package/dist/themes/data/atom-one-light.js.map +1 -0
- package/dist/themes/data/catppuccin-latte.d.ts +4 -0
- package/dist/themes/data/catppuccin-latte.d.ts.map +1 -0
- package/dist/themes/data/catppuccin-latte.js +159 -0
- package/dist/themes/data/catppuccin-latte.js.map +1 -0
- package/dist/themes/data/catppuccin-mocha.d.ts +4 -0
- package/dist/themes/data/catppuccin-mocha.d.ts.map +1 -0
- package/dist/themes/data/catppuccin-mocha.js +159 -0
- package/dist/themes/data/catppuccin-mocha.js.map +1 -0
- package/dist/themes/data/dracula.d.ts +4 -0
- package/dist/themes/data/dracula.d.ts.map +1 -0
- package/dist/themes/data/dracula.js +159 -0
- package/dist/themes/data/dracula.js.map +1 -0
- package/dist/themes/data/flexoki.d.ts +4 -0
- package/dist/themes/data/flexoki.d.ts.map +1 -0
- package/dist/themes/data/flexoki.js +159 -0
- package/dist/themes/data/flexoki.js.map +1 -0
- package/dist/themes/data/gruvbox.d.ts +4 -0
- package/dist/themes/data/gruvbox.d.ts.map +1 -0
- package/dist/themes/data/gruvbox.js +159 -0
- package/dist/themes/data/gruvbox.js.map +1 -0
- package/dist/themes/data/index.d.ts +29 -0
- package/dist/themes/data/index.d.ts.map +1 -0
- package/dist/themes/data/index.js +48 -0
- package/dist/themes/data/index.js.map +1 -0
- package/dist/themes/data/monokai.d.ts +4 -0
- package/dist/themes/data/monokai.d.ts.map +1 -0
- package/dist/themes/data/monokai.js +159 -0
- package/dist/themes/data/monokai.js.map +1 -0
- package/dist/themes/data/nord.d.ts +4 -0
- package/dist/themes/data/nord.d.ts.map +1 -0
- package/dist/themes/data/nord.js +159 -0
- package/dist/themes/data/nord.js.map +1 -0
- package/dist/themes/data/rose-pine-dawn.d.ts +4 -0
- package/dist/themes/data/rose-pine-dawn.d.ts.map +1 -0
- package/dist/themes/data/rose-pine-dawn.js +159 -0
- package/dist/themes/data/rose-pine-dawn.js.map +1 -0
- package/dist/themes/data/rose-pine-moon.d.ts +4 -0
- package/dist/themes/data/rose-pine-moon.d.ts.map +1 -0
- package/dist/themes/data/rose-pine-moon.js +159 -0
- package/dist/themes/data/rose-pine-moon.js.map +1 -0
- package/dist/themes/data/rose-pine.d.ts +4 -0
- package/dist/themes/data/rose-pine.d.ts.map +1 -0
- package/dist/themes/data/rose-pine.js +159 -0
- package/dist/themes/data/rose-pine.js.map +1 -0
- package/dist/themes/data/solarized-dark.d.ts +4 -0
- package/dist/themes/data/solarized-dark.d.ts.map +1 -0
- package/dist/themes/data/solarized-dark.js +159 -0
- package/dist/themes/data/solarized-dark.js.map +1 -0
- package/dist/themes/data/solarized-light.d.ts +4 -0
- package/dist/themes/data/solarized-light.d.ts.map +1 -0
- package/dist/themes/data/solarized-light.js +159 -0
- package/dist/themes/data/solarized-light.js.map +1 -0
- package/dist/themes/data/textual-ansi.d.ts +4 -0
- package/dist/themes/data/textual-ansi.d.ts.map +1 -0
- package/dist/themes/data/textual-ansi.js +159 -0
- package/dist/themes/data/textual-ansi.js.map +1 -0
- package/dist/themes/data/textual-dark.d.ts +4 -0
- package/dist/themes/data/textual-dark.d.ts.map +1 -0
- package/dist/themes/data/textual-dark.js +159 -0
- package/dist/themes/data/textual-dark.js.map +1 -0
- package/dist/themes/data/textual-light.d.ts +4 -0
- package/dist/themes/data/textual-light.d.ts.map +1 -0
- package/dist/themes/data/textual-light.js +159 -0
- package/dist/themes/data/textual-light.js.map +1 -0
- package/dist/themes/data/tokyo-night.d.ts +4 -0
- package/dist/themes/data/tokyo-night.d.ts.map +1 -0
- package/dist/themes/data/tokyo-night.js +159 -0
- package/dist/themes/data/tokyo-night.js.map +1 -0
- package/dist/themes/data/types.d.ts +15 -0
- package/dist/themes/data/types.d.ts.map +1 -0
- package/dist/themes/data/types.js +2 -0
- package/dist/themes/data/types.js.map +1 -0
- package/dist/themes/palette.d.ts +20 -0
- package/dist/themes/palette.d.ts.map +1 -0
- package/dist/themes/palette.js +27 -0
- package/dist/themes/palette.js.map +1 -0
- package/dist/themes/paletteResolver.d.ts +35 -0
- package/dist/themes/paletteResolver.d.ts.map +1 -0
- package/dist/themes/paletteResolver.js +88 -0
- package/dist/themes/paletteResolver.js.map +1 -0
- package/dist/themes/registry.d.ts +17 -0
- package/dist/themes/registry.d.ts.map +1 -0
- package/dist/themes/registry.js +33 -0
- package/dist/themes/registry.js.map +1 -0
- package/dist/themes/terminalThemes.d.ts +46 -0
- package/dist/themes/terminalThemes.d.ts.map +1 -0
- package/dist/themes/terminalThemes.js +268 -0
- package/dist/themes/terminalThemes.js.map +1 -0
- package/dist/widgets/button.d.ts +47 -0
- package/dist/widgets/button.d.ts.map +1 -0
- package/dist/widgets/button.js +183 -0
- package/dist/widgets/button.js.map +1 -0
- package/dist/widgets/checkbox.d.ts +43 -0
- package/dist/widgets/checkbox.d.ts.map +1 -0
- package/dist/widgets/checkbox.js +144 -0
- package/dist/widgets/checkbox.js.map +1 -0
- package/dist/widgets/dropdown.d.ts +67 -0
- package/dist/widgets/dropdown.d.ts.map +1 -0
- package/dist/widgets/dropdown.js +373 -0
- package/dist/widgets/dropdown.js.map +1 -0
- package/dist/widgets/event-router.d.ts +73 -0
- package/dist/widgets/event-router.d.ts.map +1 -0
- package/dist/widgets/event-router.js +479 -0
- package/dist/widgets/event-router.js.map +1 -0
- package/dist/widgets/focus-manager.d.ts +26 -0
- package/dist/widgets/focus-manager.d.ts.map +1 -0
- package/dist/widgets/focus-manager.js +179 -0
- package/dist/widgets/focus-manager.js.map +1 -0
- package/dist/widgets/index.d.ts +23 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +13 -0
- package/dist/widgets/index.js.map +1 -0
- package/dist/widgets/screen.d.ts +90 -0
- package/dist/widgets/screen.d.ts.map +1 -0
- package/dist/widgets/screen.js +440 -0
- package/dist/widgets/screen.js.map +1 -0
- package/dist/widgets/slider.d.ts +55 -0
- package/dist/widgets/slider.d.ts.map +1 -0
- package/dist/widgets/slider.js +248 -0
- package/dist/widgets/slider.js.map +1 -0
- package/dist/widgets/static-item.d.ts +41 -0
- package/dist/widgets/static-item.d.ts.map +1 -0
- package/dist/widgets/static-item.js +62 -0
- package/dist/widgets/static-item.js.map +1 -0
- package/dist/widgets/text-input.d.ts +50 -0
- package/dist/widgets/text-input.d.ts.map +1 -0
- package/dist/widgets/text-input.js +242 -0
- package/dist/widgets/text-input.js.map +1 -0
- package/dist/widgets/toggle.d.ts +46 -0
- package/dist/widgets/toggle.d.ts.map +1 -0
- package/dist/widgets/toggle.js +169 -0
- package/dist/widgets/toggle.js.map +1 -0
- package/dist/widgets/types.d.ts +92 -0
- package/dist/widgets/types.d.ts.map +1 -0
- package/dist/widgets/types.js +13 -0
- package/dist/widgets/types.js.map +1 -0
- package/dist/widgets/widget-base.d.ts +41 -0
- package/dist/widgets/widget-base.d.ts.map +1 -0
- package/dist/widgets/widget-base.js +159 -0
- package/dist/widgets/widget-base.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table — tabular data with headers, borders, auto-sizing, and alignment.
|
|
3
|
+
*/
|
|
4
|
+
import { cellLen } from "../core/cells.js";
|
|
5
|
+
import { Segment } from "../core/segment.js";
|
|
6
|
+
import { Style, NULL_STYLE } from "../core/style.js";
|
|
7
|
+
import { HEAVY_HEAD } from "../core/box.js";
|
|
8
|
+
import { RichText } from "../core/text.js";
|
|
9
|
+
function resolveStyle(style) {
|
|
10
|
+
if (style === undefined)
|
|
11
|
+
return NULL_STYLE;
|
|
12
|
+
if (typeof style === "string")
|
|
13
|
+
return Style.parse(style);
|
|
14
|
+
return style;
|
|
15
|
+
}
|
|
16
|
+
function toRenderable(content) {
|
|
17
|
+
if (content instanceof RichText)
|
|
18
|
+
return content;
|
|
19
|
+
if (typeof content === "object" && content !== null && "render" in content) {
|
|
20
|
+
return content;
|
|
21
|
+
}
|
|
22
|
+
return new RichText(String(content ?? ""), { end: "" });
|
|
23
|
+
}
|
|
24
|
+
function normalizePadding(padding) {
|
|
25
|
+
if (padding === undefined)
|
|
26
|
+
return [0, 1, 0, 1];
|
|
27
|
+
if (typeof padding === "number")
|
|
28
|
+
return [padding, padding, padding, padding];
|
|
29
|
+
if (padding.length === 2)
|
|
30
|
+
return [padding[0], padding[1], padding[0], padding[1]];
|
|
31
|
+
return padding;
|
|
32
|
+
}
|
|
33
|
+
export class Column {
|
|
34
|
+
header;
|
|
35
|
+
footer;
|
|
36
|
+
headerStyle;
|
|
37
|
+
footerStyle;
|
|
38
|
+
style;
|
|
39
|
+
justify;
|
|
40
|
+
width;
|
|
41
|
+
minWidth;
|
|
42
|
+
maxWidth;
|
|
43
|
+
ratio;
|
|
44
|
+
noWrap;
|
|
45
|
+
overflow;
|
|
46
|
+
_cells;
|
|
47
|
+
constructor(options) {
|
|
48
|
+
const headerVal = options?.header;
|
|
49
|
+
this.header = headerVal instanceof RichText
|
|
50
|
+
? headerVal
|
|
51
|
+
: new RichText(headerVal ?? "", { end: "" });
|
|
52
|
+
const footerVal = options?.footer;
|
|
53
|
+
this.footer = footerVal !== undefined
|
|
54
|
+
? (footerVal instanceof RichText ? footerVal : new RichText(footerVal, { end: "" }))
|
|
55
|
+
: undefined;
|
|
56
|
+
this.headerStyle = resolveStyle(options?.headerStyle);
|
|
57
|
+
this.footerStyle = resolveStyle(options?.footerStyle);
|
|
58
|
+
this.style = resolveStyle(options?.style);
|
|
59
|
+
this.justify = options?.justify ?? "left";
|
|
60
|
+
this.width = options?.width;
|
|
61
|
+
this.minWidth = options?.minWidth;
|
|
62
|
+
this.maxWidth = options?.maxWidth;
|
|
63
|
+
this.ratio = options?.ratio;
|
|
64
|
+
this.noWrap = options?.noWrap ?? false;
|
|
65
|
+
this.overflow = options?.overflow ?? "ellipsis";
|
|
66
|
+
this._cells = [];
|
|
67
|
+
}
|
|
68
|
+
get flexible() {
|
|
69
|
+
return this.ratio !== undefined && this.ratio > 0;
|
|
70
|
+
}
|
|
71
|
+
/** @internal */
|
|
72
|
+
addCell(cell) {
|
|
73
|
+
this._cells.push(cell);
|
|
74
|
+
}
|
|
75
|
+
/** @internal */
|
|
76
|
+
getCells() {
|
|
77
|
+
return this._cells;
|
|
78
|
+
}
|
|
79
|
+
copy() {
|
|
80
|
+
const col = new Column({
|
|
81
|
+
header: this.header.copy(),
|
|
82
|
+
footer: this.footer?.copy(),
|
|
83
|
+
justify: this.justify,
|
|
84
|
+
width: this.width,
|
|
85
|
+
minWidth: this.minWidth,
|
|
86
|
+
maxWidth: this.maxWidth,
|
|
87
|
+
ratio: this.ratio,
|
|
88
|
+
noWrap: this.noWrap,
|
|
89
|
+
overflow: this.overflow,
|
|
90
|
+
});
|
|
91
|
+
col.headerStyle = this.headerStyle;
|
|
92
|
+
col.footerStyle = this.footerStyle;
|
|
93
|
+
col.style = this.style;
|
|
94
|
+
return col;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export class Table {
|
|
98
|
+
_columns;
|
|
99
|
+
_rows;
|
|
100
|
+
box;
|
|
101
|
+
title;
|
|
102
|
+
caption;
|
|
103
|
+
expand;
|
|
104
|
+
showHeader;
|
|
105
|
+
showFooter;
|
|
106
|
+
showLines;
|
|
107
|
+
showEdge;
|
|
108
|
+
padding;
|
|
109
|
+
style;
|
|
110
|
+
headerStyle;
|
|
111
|
+
footerStyle;
|
|
112
|
+
borderStyle;
|
|
113
|
+
titleStyle;
|
|
114
|
+
captionStyle;
|
|
115
|
+
titleJustify;
|
|
116
|
+
captionJustify;
|
|
117
|
+
tableWidth;
|
|
118
|
+
minWidth;
|
|
119
|
+
rowStyles;
|
|
120
|
+
constructor(options) {
|
|
121
|
+
this._columns = [];
|
|
122
|
+
this._rows = [];
|
|
123
|
+
this.box = options?.box !== undefined ? options.box : HEAVY_HEAD;
|
|
124
|
+
const titleVal = options?.title;
|
|
125
|
+
this.title = titleVal !== undefined
|
|
126
|
+
? (titleVal instanceof RichText ? titleVal : new RichText(titleVal, { end: "" }))
|
|
127
|
+
: undefined;
|
|
128
|
+
const captionVal = options?.caption;
|
|
129
|
+
this.caption = captionVal !== undefined
|
|
130
|
+
? (captionVal instanceof RichText ? captionVal : new RichText(captionVal, { end: "" }))
|
|
131
|
+
: undefined;
|
|
132
|
+
this.expand = options?.expand ?? false;
|
|
133
|
+
this.showHeader = options?.showHeader !== false;
|
|
134
|
+
this.showFooter = options?.showFooter ?? false;
|
|
135
|
+
this.showLines = options?.showLines ?? false;
|
|
136
|
+
this.showEdge = options?.showEdge !== false;
|
|
137
|
+
this.padding = normalizePadding(options?.padding);
|
|
138
|
+
this.style = resolveStyle(options?.style);
|
|
139
|
+
this.headerStyle = resolveStyle(options?.headerStyle ?? "table.header");
|
|
140
|
+
this.footerStyle = resolveStyle(options?.footerStyle ?? "table.footer");
|
|
141
|
+
this.borderStyle = resolveStyle(options?.borderStyle);
|
|
142
|
+
this.titleStyle = resolveStyle(options?.titleStyle ?? "table.title");
|
|
143
|
+
this.captionStyle = resolveStyle(options?.captionStyle ?? "table.caption");
|
|
144
|
+
this.titleJustify = options?.titleJustify ?? "center";
|
|
145
|
+
this.captionJustify = options?.captionJustify ?? "center";
|
|
146
|
+
this.tableWidth = options?.width;
|
|
147
|
+
this.minWidth = options?.minWidth;
|
|
148
|
+
this.rowStyles = options?.rowStyles ?? [];
|
|
149
|
+
}
|
|
150
|
+
get columns() {
|
|
151
|
+
return this._columns;
|
|
152
|
+
}
|
|
153
|
+
get rowCount() {
|
|
154
|
+
return this._rows.length;
|
|
155
|
+
}
|
|
156
|
+
addColumn(header, options) {
|
|
157
|
+
const col = new Column({ ...options, header: header ?? options?.header });
|
|
158
|
+
this._columns.push(col);
|
|
159
|
+
return this;
|
|
160
|
+
}
|
|
161
|
+
addRow(...cells) {
|
|
162
|
+
// If last arg is an options object with endSection, extract it
|
|
163
|
+
let endSection = false;
|
|
164
|
+
const lastArg = cells[cells.length - 1];
|
|
165
|
+
if (typeof lastArg === "object" &&
|
|
166
|
+
lastArg !== null &&
|
|
167
|
+
!(lastArg instanceof RichText) &&
|
|
168
|
+
!("render" in lastArg) &&
|
|
169
|
+
"endSection" in lastArg) {
|
|
170
|
+
endSection = lastArg.endSection;
|
|
171
|
+
cells = cells.slice(0, -1);
|
|
172
|
+
}
|
|
173
|
+
// Auto-create columns if needed
|
|
174
|
+
while (this._columns.length < cells.length) {
|
|
175
|
+
this.addColumn();
|
|
176
|
+
}
|
|
177
|
+
this._rows.push({ cells, endSection });
|
|
178
|
+
return this;
|
|
179
|
+
}
|
|
180
|
+
addSection() {
|
|
181
|
+
if (this._rows.length > 0) {
|
|
182
|
+
this._rows[this._rows.length - 1].endSection = true;
|
|
183
|
+
}
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
*render(options) {
|
|
187
|
+
if (this._columns.length === 0) {
|
|
188
|
+
yield Segment.line();
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const box = this.box
|
|
192
|
+
? (options.asciiOnly ? this.box.substitute({ asciiOnly: true }) : this.box)
|
|
193
|
+
: null;
|
|
194
|
+
const border = this.borderStyle.isNull ? undefined : this.borderStyle;
|
|
195
|
+
// Calculate column widths
|
|
196
|
+
const totalWidth = this.tableWidth ?? (this.expand ? options.maxWidth : undefined);
|
|
197
|
+
const colWidths = this._calculateWidths(options, totalWidth);
|
|
198
|
+
const tableActualWidth = this._totalTableWidth(colWidths, box);
|
|
199
|
+
const [_padTop, padRight, _padBottom, padLeft] = this.padding;
|
|
200
|
+
// Title
|
|
201
|
+
if (this.title) {
|
|
202
|
+
yield* this._renderTitle(this.title, tableActualWidth, this.titleStyle, this.titleJustify);
|
|
203
|
+
}
|
|
204
|
+
// Top border
|
|
205
|
+
if (box && this.showEdge) {
|
|
206
|
+
yield* box.getTop(colWidths.map((w) => w + padLeft + padRight), border, true);
|
|
207
|
+
}
|
|
208
|
+
// Header row
|
|
209
|
+
if (this.showHeader && this._columns.some((c) => c.header.hasContent)) {
|
|
210
|
+
const headerCells = this._columns.map((c) => c.header);
|
|
211
|
+
yield* this._renderRow(headerCells, colWidths, box, border, this.headerStyle);
|
|
212
|
+
// Header separator
|
|
213
|
+
if (box) {
|
|
214
|
+
yield* box.getRow(colWidths.map((w) => w + padLeft + padRight), "head", border, this.showEdge);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Data rows
|
|
218
|
+
for (let rowIdx = 0; rowIdx < this._rows.length; rowIdx++) {
|
|
219
|
+
const row = this._rows[rowIdx];
|
|
220
|
+
const rowCells = [];
|
|
221
|
+
for (let colIdx = 0; colIdx < this._columns.length; colIdx++) {
|
|
222
|
+
const cell = row.cells[colIdx];
|
|
223
|
+
rowCells.push(toRenderable(cell));
|
|
224
|
+
}
|
|
225
|
+
const rowStyle = this.rowStyles.length > 0
|
|
226
|
+
? resolveStyle(this.rowStyles[rowIdx % this.rowStyles.length])
|
|
227
|
+
: NULL_STYLE;
|
|
228
|
+
yield* this._renderRow(rowCells, colWidths, box, border, rowStyle);
|
|
229
|
+
// Row separator
|
|
230
|
+
const showSep = this.showLines || row.endSection;
|
|
231
|
+
if (showSep && box && rowIdx < this._rows.length - 1) {
|
|
232
|
+
yield* box.getRow(colWidths.map((w) => w + padLeft + padRight), "row", border, this.showEdge);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Footer
|
|
236
|
+
if (this.showFooter && this._columns.some((c) => c.footer)) {
|
|
237
|
+
if (box) {
|
|
238
|
+
yield* box.getRow(colWidths.map((w) => w + padLeft + padRight), "foot", border, this.showEdge);
|
|
239
|
+
}
|
|
240
|
+
const footerCells = this._columns.map((c) => (c.footer ?? new RichText("", { end: "" })));
|
|
241
|
+
yield* this._renderRow(footerCells, colWidths, box, border, this.footerStyle);
|
|
242
|
+
}
|
|
243
|
+
// Bottom border
|
|
244
|
+
if (box && this.showEdge) {
|
|
245
|
+
yield* box.getBottom(colWidths.map((w) => w + padLeft + padRight), border, true);
|
|
246
|
+
}
|
|
247
|
+
// Caption
|
|
248
|
+
if (this.caption) {
|
|
249
|
+
yield* this._renderTitle(this.caption, tableActualWidth, this.captionStyle, this.captionJustify);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
measure(options) {
|
|
253
|
+
const colWidths = this._calculateWidths(options);
|
|
254
|
+
const total = this._totalTableWidth(colWidths, this.box);
|
|
255
|
+
return {
|
|
256
|
+
minimum: Math.max(this._columns.length * 2, this.minWidth ?? 0),
|
|
257
|
+
maximum: Math.min(total, options.maxWidth),
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
// --- Static ---
|
|
261
|
+
static grid(options) {
|
|
262
|
+
return new Table({
|
|
263
|
+
...options,
|
|
264
|
+
box: null,
|
|
265
|
+
showHeader: false,
|
|
266
|
+
showEdge: false,
|
|
267
|
+
padding: options?.padding ?? [0, 1, 0, 0],
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
// --- Private ---
|
|
271
|
+
_calculateWidths(options, totalWidth) {
|
|
272
|
+
const numCols = this._columns.length;
|
|
273
|
+
if (numCols === 0)
|
|
274
|
+
return [];
|
|
275
|
+
const [_padTop, padRight, _padBottom, padLeft] = this.padding;
|
|
276
|
+
const cellPad = padLeft + padRight;
|
|
277
|
+
const borders = this.box
|
|
278
|
+
? (this.showEdge ? 2 : 0) + (numCols - 1)
|
|
279
|
+
: 0;
|
|
280
|
+
const availableWidth = (totalWidth ?? options.maxWidth) - borders - cellPad * numCols;
|
|
281
|
+
const widths = new Array(numCols);
|
|
282
|
+
// Fixed width columns first
|
|
283
|
+
let remainingWidth = availableWidth;
|
|
284
|
+
let flexCols = 0;
|
|
285
|
+
for (let i = 0; i < numCols; i++) {
|
|
286
|
+
const col = this._columns[i];
|
|
287
|
+
if (col.width !== undefined) {
|
|
288
|
+
widths[i] = col.width;
|
|
289
|
+
remainingWidth -= col.width;
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
widths[i] = 0;
|
|
293
|
+
flexCols++;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// Distribute remaining width among flex columns
|
|
297
|
+
if (flexCols > 0) {
|
|
298
|
+
// Measure content to determine natural widths
|
|
299
|
+
const naturalWidths = [];
|
|
300
|
+
for (let i = 0; i < numCols; i++) {
|
|
301
|
+
const col = this._columns[i];
|
|
302
|
+
if (col.width !== undefined) {
|
|
303
|
+
naturalWidths.push(col.width);
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
let maxContent = cellLen(col.header.plain);
|
|
307
|
+
for (const row of this._rows) {
|
|
308
|
+
const cell = row.cells[i];
|
|
309
|
+
const cellText = String(cell ?? "");
|
|
310
|
+
maxContent = Math.max(maxContent, cellLen(cellText));
|
|
311
|
+
}
|
|
312
|
+
if (col.minWidth !== undefined)
|
|
313
|
+
maxContent = Math.max(maxContent, col.minWidth);
|
|
314
|
+
if (col.maxWidth !== undefined)
|
|
315
|
+
maxContent = Math.min(maxContent, col.maxWidth);
|
|
316
|
+
naturalWidths.push(maxContent);
|
|
317
|
+
}
|
|
318
|
+
// Check if ratio-based distribution applies
|
|
319
|
+
const hasRatios = this._columns.some((c) => c.flexible);
|
|
320
|
+
if (hasRatios) {
|
|
321
|
+
const totalRatio = this._columns.reduce((s, c) => s + (c.ratio ?? 1), 0);
|
|
322
|
+
for (let i = 0; i < numCols; i++) {
|
|
323
|
+
if (this._columns[i].width !== undefined)
|
|
324
|
+
continue;
|
|
325
|
+
const ratio = this._columns[i].ratio ?? 1;
|
|
326
|
+
widths[i] = Math.max(1, Math.floor(remainingWidth * ratio / totalRatio));
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
// Distribute equally or by natural width
|
|
331
|
+
const totalNatural = naturalWidths.reduce((s, w, i) => this._columns[i].width !== undefined ? s : s + w, 0);
|
|
332
|
+
for (let i = 0; i < numCols; i++) {
|
|
333
|
+
if (this._columns[i].width !== undefined)
|
|
334
|
+
continue;
|
|
335
|
+
const natural = naturalWidths[i];
|
|
336
|
+
if (totalNatural <= remainingWidth) {
|
|
337
|
+
widths[i] = natural;
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
widths[i] = Math.max(1, Math.floor(remainingWidth * natural / totalNatural));
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return widths;
|
|
346
|
+
}
|
|
347
|
+
_totalTableWidth(colWidths, box) {
|
|
348
|
+
const [_padTop, padRight, _padBottom, padLeft] = this.padding;
|
|
349
|
+
const cellPad = padLeft + padRight;
|
|
350
|
+
const contentWidth = colWidths.reduce((s, w) => s + w + cellPad, 0);
|
|
351
|
+
const borders = box
|
|
352
|
+
? (this.showEdge ? 2 : 0) + (colWidths.length - 1)
|
|
353
|
+
: 0;
|
|
354
|
+
return contentWidth + borders;
|
|
355
|
+
}
|
|
356
|
+
*_renderRow(cells, colWidths, box, border, rowStyle) {
|
|
357
|
+
const [_padTop, padRight, _padBottom, padLeft] = this.padding;
|
|
358
|
+
// Render each cell and split into lines
|
|
359
|
+
const cellLines = [];
|
|
360
|
+
let maxLines = 1;
|
|
361
|
+
for (let i = 0; i < this._columns.length; i++) {
|
|
362
|
+
const col = this._columns[i];
|
|
363
|
+
const cell = cells[i] ?? toRenderable("");
|
|
364
|
+
const cellWidth = colWidths[i] ?? 1;
|
|
365
|
+
const cellOpts = {
|
|
366
|
+
...({ maxWidth: cellWidth }),
|
|
367
|
+
justify: col.justify,
|
|
368
|
+
overflow: col.overflow,
|
|
369
|
+
noWrap: col.noWrap,
|
|
370
|
+
};
|
|
371
|
+
const segs = [...cell.render(cellOpts)];
|
|
372
|
+
const lines = Segment.splitLines(segs);
|
|
373
|
+
const adjusted = lines.map((line) => Segment.adjustLineLength(line, cellWidth));
|
|
374
|
+
// Ensure at least one line
|
|
375
|
+
const finalLines = adjusted.length > 0 ? adjusted : [[new Segment(" ".repeat(cellWidth))]];
|
|
376
|
+
cellLines.push(finalLines);
|
|
377
|
+
maxLines = Math.max(maxLines, finalLines.length);
|
|
378
|
+
}
|
|
379
|
+
// Render line by line
|
|
380
|
+
for (let lineIdx = 0; lineIdx < maxLines; lineIdx++) {
|
|
381
|
+
if (box && this.showEdge) {
|
|
382
|
+
yield new Segment(box.left, border);
|
|
383
|
+
}
|
|
384
|
+
for (let colIdx = 0; colIdx < this._columns.length; colIdx++) {
|
|
385
|
+
if (colIdx > 0 && box) {
|
|
386
|
+
yield new Segment(box.vertical, border);
|
|
387
|
+
}
|
|
388
|
+
const colLines = cellLines[colIdx];
|
|
389
|
+
const cellWidth = colWidths[colIdx] ?? 1;
|
|
390
|
+
// Left padding
|
|
391
|
+
if (padLeft > 0)
|
|
392
|
+
yield new Segment(" ".repeat(padLeft));
|
|
393
|
+
const line = colLines[lineIdx];
|
|
394
|
+
if (line) {
|
|
395
|
+
const adjusted = Segment.adjustLineLength(line, cellWidth);
|
|
396
|
+
const styled = rowStyle.isNull ? adjusted : [...Segment.applyStyle(adjusted, rowStyle)];
|
|
397
|
+
yield* styled;
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
yield new Segment(" ".repeat(cellWidth));
|
|
401
|
+
}
|
|
402
|
+
// Right padding
|
|
403
|
+
if (padRight > 0)
|
|
404
|
+
yield new Segment(" ".repeat(padRight));
|
|
405
|
+
}
|
|
406
|
+
if (box && this.showEdge) {
|
|
407
|
+
yield new Segment(box.right, border);
|
|
408
|
+
}
|
|
409
|
+
yield Segment.line();
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
*_renderTitle(text, tableWidth, style, justify) {
|
|
413
|
+
const titleStyle = style.isNull ? undefined : style;
|
|
414
|
+
const plain = text.plain;
|
|
415
|
+
const textWidth = cellLen(plain);
|
|
416
|
+
if (textWidth >= tableWidth) {
|
|
417
|
+
yield new Segment(plain.slice(0, tableWidth), titleStyle);
|
|
418
|
+
yield Segment.line();
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
const gap = tableWidth - textWidth;
|
|
422
|
+
const leftPad = justify === "right" ? gap
|
|
423
|
+
: justify === "center" ? Math.floor(gap / 2)
|
|
424
|
+
: 0;
|
|
425
|
+
const rightPad = gap - leftPad;
|
|
426
|
+
if (leftPad > 0)
|
|
427
|
+
yield new Segment(" ".repeat(leftPad));
|
|
428
|
+
yield new Segment(plain, titleStyle);
|
|
429
|
+
if (rightPad > 0)
|
|
430
|
+
yield new Segment(" ".repeat(rightPad));
|
|
431
|
+
yield Segment.line();
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/renderables/table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Traceback — renders error tracebacks with formatting.
|
|
3
|
+
*/
|
|
4
|
+
import { Segment } from "../core/segment.js";
|
|
5
|
+
import type { Renderable, RenderOptions } from "../core/protocol.js";
|
|
6
|
+
export interface TracebackOptions {
|
|
7
|
+
showLocals?: boolean;
|
|
8
|
+
suppress?: string[];
|
|
9
|
+
maxFrames?: number;
|
|
10
|
+
width?: number;
|
|
11
|
+
theme?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class Traceback implements Renderable {
|
|
14
|
+
readonly error: Error;
|
|
15
|
+
readonly maxFrames: number;
|
|
16
|
+
readonly suppress: string[];
|
|
17
|
+
readonly showLocals: boolean;
|
|
18
|
+
readonly width: number | undefined;
|
|
19
|
+
readonly theme: string | undefined;
|
|
20
|
+
constructor(error: Error, options?: TracebackOptions);
|
|
21
|
+
render(_options: RenderOptions): Iterable<Segment>;
|
|
22
|
+
private _renderFrame;
|
|
23
|
+
/** Install as global uncaught exception handler */
|
|
24
|
+
static install(options?: TracebackOptions): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=traceback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traceback.d.ts","sourceRoot":"","sources":["../../src/renderables/traceback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAErE,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkCD,qBAAa,SAAU,YAAW,UAAU;IAC1C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEvB,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,gBAAgB;IASnD,MAAM,CAAC,QAAQ,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IA6CnD,OAAO,CAAE,YAAY;IAkBrB,mDAAmD;IACnD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI;CAQjD"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Traceback — renders error tracebacks with formatting.
|
|
3
|
+
*/
|
|
4
|
+
import { Segment } from "../core/segment.js";
|
|
5
|
+
import { Style } from "../core/style.js";
|
|
6
|
+
import { Console } from "../core/console.js";
|
|
7
|
+
function parseStack(error) {
|
|
8
|
+
const stack = error.stack ?? "";
|
|
9
|
+
const lines = stack.split("\n");
|
|
10
|
+
const frames = [];
|
|
11
|
+
for (const line of lines) {
|
|
12
|
+
const trimmed = line.trim();
|
|
13
|
+
// Node.js format: " at functionName (file:line:column)"
|
|
14
|
+
// or: " at file:line:column"
|
|
15
|
+
const match = /^\s*at\s+(?:(.+?)\s+\()?(.+?):(\d+):(\d+)\)?/.exec(trimmed);
|
|
16
|
+
if (match) {
|
|
17
|
+
frames.push({
|
|
18
|
+
function: match[1] || undefined,
|
|
19
|
+
file: match[2],
|
|
20
|
+
line: parseInt(match[3], 10),
|
|
21
|
+
column: parseInt(match[4], 10),
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return frames;
|
|
26
|
+
}
|
|
27
|
+
export class Traceback {
|
|
28
|
+
error;
|
|
29
|
+
maxFrames;
|
|
30
|
+
suppress;
|
|
31
|
+
showLocals;
|
|
32
|
+
width;
|
|
33
|
+
theme;
|
|
34
|
+
constructor(error, options) {
|
|
35
|
+
this.error = error;
|
|
36
|
+
this.maxFrames = options?.maxFrames ?? 100;
|
|
37
|
+
this.suppress = options?.suppress ?? [];
|
|
38
|
+
this.showLocals = options?.showLocals ?? false;
|
|
39
|
+
this.width = options?.width;
|
|
40
|
+
this.theme = options?.theme;
|
|
41
|
+
}
|
|
42
|
+
*render(_options) {
|
|
43
|
+
const excTypeStyle = Style.parse("traceback.exc_type");
|
|
44
|
+
const textStyle = Style.parse("traceback.text");
|
|
45
|
+
// Error type and message
|
|
46
|
+
const errorName = this.error.name || "Error";
|
|
47
|
+
const errorMessage = this.error.message || "";
|
|
48
|
+
yield new Segment(errorName, excTypeStyle);
|
|
49
|
+
yield new Segment(": ");
|
|
50
|
+
yield new Segment(errorMessage, textStyle);
|
|
51
|
+
yield Segment.line();
|
|
52
|
+
yield Segment.line();
|
|
53
|
+
// Stack frames — suppressed frames show file/line only (not removed)
|
|
54
|
+
const frames = parseStack(this.error);
|
|
55
|
+
const filteredFrames = this.suppress.length > 0
|
|
56
|
+
? frames.map((f) => ({
|
|
57
|
+
...f,
|
|
58
|
+
suppressed: this.suppress.some((s) => f.file.includes(s)),
|
|
59
|
+
}))
|
|
60
|
+
: frames;
|
|
61
|
+
let displayFrames = filteredFrames;
|
|
62
|
+
if (this.maxFrames > 0 && displayFrames.length > this.maxFrames) {
|
|
63
|
+
const half = Math.floor(this.maxFrames / 2);
|
|
64
|
+
const first = displayFrames.slice(0, half);
|
|
65
|
+
const last = displayFrames.slice(-half);
|
|
66
|
+
const omitted = displayFrames.length - this.maxFrames;
|
|
67
|
+
for (const frame of first) {
|
|
68
|
+
yield* this._renderFrame(frame);
|
|
69
|
+
}
|
|
70
|
+
yield new Segment(` ... ${omitted} frames omitted ...`, textStyle);
|
|
71
|
+
yield Segment.line();
|
|
72
|
+
for (const frame of last) {
|
|
73
|
+
yield* this._renderFrame(frame);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
for (const frame of displayFrames) {
|
|
78
|
+
yield* this._renderFrame(frame);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
*_renderFrame(frame) {
|
|
83
|
+
const pathStyle = Style.parse("dim");
|
|
84
|
+
const lineNoStyle = Style.parse("traceback.offset");
|
|
85
|
+
yield new Segment(" ");
|
|
86
|
+
// Spec: suppressed frames show file and line only — no function name
|
|
87
|
+
if (frame.function && !frame.suppressed) {
|
|
88
|
+
yield new Segment(frame.function, Style.parse("bold"));
|
|
89
|
+
yield new Segment(" ");
|
|
90
|
+
}
|
|
91
|
+
yield new Segment(frame.file, pathStyle);
|
|
92
|
+
if (frame.line !== undefined) {
|
|
93
|
+
yield new Segment(":");
|
|
94
|
+
yield new Segment(String(frame.line), lineNoStyle);
|
|
95
|
+
}
|
|
96
|
+
yield Segment.line();
|
|
97
|
+
}
|
|
98
|
+
/** Install as global uncaught exception handler */
|
|
99
|
+
static install(options) {
|
|
100
|
+
process.on("uncaughtException", (error) => {
|
|
101
|
+
const tb = new Traceback(error, options);
|
|
102
|
+
const cons = new Console({ stderr: true });
|
|
103
|
+
cons.print(tb);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=traceback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traceback.js","sourceRoot":"","sources":["../../src/renderables/traceback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree — hierarchical view with guide lines.
|
|
3
|
+
*/
|
|
4
|
+
import { Segment } from "../core/segment.js";
|
|
5
|
+
import { Style } from "../core/style.js";
|
|
6
|
+
import { RichText } from "../core/text.js";
|
|
7
|
+
import type { Renderable, Measurable, RenderOptions } from "../core/protocol.js";
|
|
8
|
+
export interface TreeOptions {
|
|
9
|
+
expanded?: boolean;
|
|
10
|
+
hideRoot?: boolean;
|
|
11
|
+
guide_style?: string | Style;
|
|
12
|
+
style?: string | Style;
|
|
13
|
+
}
|
|
14
|
+
export declare class Tree implements Renderable, Measurable {
|
|
15
|
+
readonly label: Renderable;
|
|
16
|
+
readonly children: Tree[];
|
|
17
|
+
expanded: boolean;
|
|
18
|
+
readonly hideRoot: boolean;
|
|
19
|
+
readonly guideStyle: Style;
|
|
20
|
+
readonly style: Style;
|
|
21
|
+
constructor(label: string | RichText | Renderable, options?: TreeOptions);
|
|
22
|
+
add(label: string | RichText | Renderable, options?: TreeOptions): Tree;
|
|
23
|
+
render(options: RenderOptions): Iterable<Segment>;
|
|
24
|
+
private _renderNode;
|
|
25
|
+
measure(options: RenderOptions): {
|
|
26
|
+
minimum: number;
|
|
27
|
+
maximum: number;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/renderables/tree.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAc,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,qBAAqB,CAAC;AAa7B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACxB;AAmBD,qBAAa,IAAK,YAAW,UAAU,EAAE,UAAU;IACjD,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;gBAGpB,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,EACrC,OAAO,CAAC,EAAE,WAAW;IAUvB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI;IAUtE,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAIlD,OAAO,CAAE,WAAW;IAwDpB,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAGtE"}
|