@promptctl/rich-js 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +99 -31
- package/dist/core/box.d.ts +96 -42
- package/dist/core/box.d.ts.map +1 -1
- package/dist/core/box.js +348 -490
- package/dist/core/box.js.map +1 -1
- package/dist/core/cells.d.ts +46 -1
- package/dist/core/cells.d.ts.map +1 -1
- package/dist/core/cells.js +55 -14
- package/dist/core/cells.js.map +1 -1
- package/dist/core/color.d.ts.map +1 -1
- package/dist/core/color.js +22 -8
- package/dist/core/color.js.map +1 -1
- package/dist/core/console.d.ts +30 -14
- package/dist/core/console.d.ts.map +1 -1
- package/dist/core/console.js +176 -104
- package/dist/core/console.js.map +1 -1
- package/dist/core/highlighter.d.ts +2 -1
- package/dist/core/highlighter.d.ts.map +1 -1
- package/dist/core/highlighter.js +28 -6
- package/dist/core/highlighter.js.map +1 -1
- package/dist/{renderables → core}/json.d.ts +8 -3
- package/dist/core/json.d.ts.map +1 -0
- package/dist/{renderables → core}/json.js +7 -2
- package/dist/core/json.js.map +1 -0
- package/dist/core/markup.d.ts +6 -9
- package/dist/core/markup.d.ts.map +1 -1
- package/dist/core/markup.js +153 -47
- package/dist/core/markup.js.map +1 -1
- package/dist/core/measure.d.ts +11 -0
- package/dist/core/measure.d.ts.map +1 -1
- package/dist/core/measure.js +15 -3
- package/dist/core/measure.js.map +1 -1
- package/dist/core/oklch.d.ts +22 -0
- package/dist/core/oklch.d.ts.map +1 -1
- package/dist/core/oklch.js +62 -18
- package/dist/core/oklch.js.map +1 -1
- package/dist/core/pretty.d.ts +122 -0
- package/dist/core/pretty.d.ts.map +1 -0
- package/dist/core/pretty.js +398 -0
- package/dist/core/pretty.js.map +1 -0
- package/dist/core/protocol.d.ts +80 -0
- package/dist/core/protocol.d.ts.map +1 -1
- package/dist/core/protocol.js +85 -0
- package/dist/core/protocol.js.map +1 -1
- package/dist/core/segment.d.ts +26 -0
- package/dist/core/segment.d.ts.map +1 -1
- package/dist/core/segment.js +45 -0
- package/dist/core/segment.js.map +1 -1
- package/dist/core/strip.d.ts +9 -5
- package/dist/core/strip.d.ts.map +1 -1
- package/dist/core/strip.js +39 -41
- package/dist/core/strip.js.map +1 -1
- package/dist/core/style.d.ts +19 -0
- package/dist/core/style.d.ts.map +1 -1
- package/dist/core/style.js +46 -38
- package/dist/core/style.js.map +1 -1
- package/dist/core/subscription.d.ts +13 -0
- package/dist/core/subscription.d.ts.map +1 -0
- package/dist/core/subscription.js +13 -0
- package/dist/core/subscription.js.map +1 -0
- package/dist/core/text.d.ts +102 -4
- package/dist/core/text.d.ts.map +1 -1
- package/dist/core/text.js +332 -162
- package/dist/core/text.js.map +1 -1
- package/dist/core/wrap.d.ts +42 -0
- package/dist/core/wrap.d.ts.map +1 -0
- package/dist/core/wrap.js +128 -0
- package/dist/core/wrap.js.map +1 -0
- package/dist/host/host-stream.d.ts.map +1 -0
- package/dist/host/host-stream.js.map +1 -0
- package/dist/host/index.d.ts +4 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +3 -0
- package/dist/host/index.js.map +1 -0
- package/dist/{widgets → host}/terminal-host.d.ts +20 -64
- package/dist/host/terminal-host.d.ts.map +1 -0
- package/dist/host/terminal-host.js +133 -0
- package/dist/host/terminal-host.js.map +1 -0
- package/dist/index.d.ts +13 -36
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -22
- package/dist/index.js.map +1 -1
- package/dist/node/terminal-host.d.ts +85 -0
- package/dist/node/terminal-host.d.ts.map +1 -0
- package/dist/node/terminal-host.js +161 -0
- package/dist/node/terminal-host.js.map +1 -0
- package/dist/node/traceback.d.ts +28 -0
- package/dist/node/traceback.d.ts.map +1 -0
- package/dist/node/traceback.js +113 -0
- package/dist/node/traceback.js.map +1 -0
- package/dist/renderables/columns.d.ts +24 -2
- package/dist/renderables/columns.d.ts.map +1 -1
- package/dist/renderables/columns.js +91 -32
- package/dist/renderables/columns.js.map +1 -1
- package/dist/renderables/layout.d.ts +61 -5
- package/dist/renderables/layout.d.ts.map +1 -1
- package/dist/renderables/layout.js +191 -19
- package/dist/renderables/layout.js.map +1 -1
- package/dist/renderables/markdown.d.ts +1 -1
- package/dist/renderables/markdown.d.ts.map +1 -1
- package/dist/renderables/markdown.js +7 -14
- package/dist/renderables/markdown.js.map +1 -1
- package/dist/renderables/padding.d.ts +16 -3
- package/dist/renderables/padding.d.ts.map +1 -1
- package/dist/renderables/padding.js +96 -47
- package/dist/renderables/padding.js.map +1 -1
- package/dist/renderables/panel.d.ts +48 -7
- package/dist/renderables/panel.d.ts.map +1 -1
- package/dist/renderables/panel.js +175 -106
- package/dist/renderables/panel.js.map +1 -1
- package/dist/renderables/progress.d.ts +3 -3
- package/dist/renderables/progress.d.ts.map +1 -1
- package/dist/renderables/progress.js +11 -9
- package/dist/renderables/progress.js.map +1 -1
- package/dist/renderables/progressBar.d.ts +3 -3
- package/dist/renderables/progressBar.d.ts.map +1 -1
- package/dist/renderables/progressBar.js +9 -15
- package/dist/renderables/progressBar.js.map +1 -1
- package/dist/renderables/prompt.js +1 -1
- package/dist/renderables/prompt.js.map +1 -1
- package/dist/renderables/rule.d.ts +1 -1
- package/dist/renderables/rule.d.ts.map +1 -1
- package/dist/renderables/rule.js +5 -10
- package/dist/renderables/rule.js.map +1 -1
- package/dist/renderables/spinner.d.ts +2 -2
- package/dist/renderables/spinner.d.ts.map +1 -1
- package/dist/renderables/spinner.js +6 -11
- package/dist/renderables/spinner.js.map +1 -1
- package/dist/renderables/status.d.ts.map +1 -1
- package/dist/renderables/status.js +5 -11
- package/dist/renderables/status.js.map +1 -1
- package/dist/renderables/table.d.ts +90 -16
- package/dist/renderables/table.d.ts.map +1 -1
- package/dist/renderables/table.js +481 -223
- package/dist/renderables/table.js.map +1 -1
- package/dist/renderables/traceback.d.ts +7 -3
- package/dist/renderables/traceback.d.ts.map +1 -1
- package/dist/renderables/traceback.js +15 -18
- package/dist/renderables/traceback.js.map +1 -1
- package/dist/renderables/tree.d.ts +29 -4
- package/dist/renderables/tree.d.ts.map +1 -1
- package/dist/renderables/tree.js +86 -33
- package/dist/renderables/tree.js.map +1 -1
- package/dist/template-bindings/color-funcs.d.ts +3 -3
- package/dist/template-bindings/color-funcs.js +3 -3
- package/dist/template-bindings/helpers.d.ts.map +1 -1
- package/dist/template-bindings/helpers.js +19 -1
- package/dist/template-bindings/helpers.js.map +1 -1
- package/dist/template-bindings/index.d.ts +6 -7
- package/dist/template-bindings/index.d.ts.map +1 -1
- package/dist/template-bindings/index.js +6 -7
- package/dist/template-bindings/index.js.map +1 -1
- package/dist/template-bindings/palette-funcs.d.ts +17 -5
- package/dist/template-bindings/palette-funcs.d.ts.map +1 -1
- package/dist/template-bindings/palette-funcs.js +69 -6
- package/dist/template-bindings/palette-funcs.js.map +1 -1
- package/dist/template-bindings/style-funcs.d.ts +1 -1
- package/dist/template-bindings/style-funcs.js +1 -1
- package/dist/themes/ramp.d.ts +84 -0
- package/dist/themes/ramp.d.ts.map +1 -0
- package/dist/themes/ramp.js +123 -0
- package/dist/themes/ramp.js.map +1 -0
- package/dist/widgets/dropdown.d.ts +1 -1
- package/dist/widgets/dropdown.js +1 -1
- package/dist/widgets/event-router.d.ts +3 -2
- package/dist/widgets/event-router.d.ts.map +1 -1
- package/dist/widgets/focus-manager.d.ts +2 -1
- package/dist/widgets/focus-manager.d.ts.map +1 -1
- package/dist/widgets/index.d.ts +3 -6
- package/dist/widgets/index.d.ts.map +1 -1
- package/dist/widgets/index.js +4 -3
- package/dist/widgets/index.js.map +1 -1
- package/dist/widgets/screen.d.ts +1 -1
- package/dist/widgets/screen.d.ts.map +1 -1
- package/dist/widgets/text-input.d.ts +2 -3
- package/dist/widgets/text-input.d.ts.map +1 -1
- package/dist/widgets/text-input.js +4 -12
- package/dist/widgets/text-input.js.map +1 -1
- package/dist/widgets/types.d.ts +1 -1
- package/dist/widgets/types.d.ts.map +1 -1
- package/dist/widgets/types.js.map +1 -1
- package/dist/widgets/widget-base.d.ts +2 -1
- package/dist/widgets/widget-base.d.ts.map +1 -1
- package/package.json +38 -6
- package/dist/renderables/json.d.ts.map +0 -1
- package/dist/renderables/json.js.map +0 -1
- package/dist/renderables/pretty.d.ts +0 -29
- package/dist/renderables/pretty.d.ts.map +0 -1
- package/dist/renderables/pretty.js +0 -141
- package/dist/renderables/pretty.js.map +0 -1
- package/dist/themes/paletteResolver.d.ts +0 -35
- package/dist/themes/paletteResolver.d.ts.map +0 -1
- package/dist/themes/paletteResolver.js +0 -88
- package/dist/themes/paletteResolver.js.map +0 -1
- package/dist/widgets/host-stream.d.ts.map +0 -1
- package/dist/widgets/host-stream.js.map +0 -1
- package/dist/widgets/terminal-host.d.ts.map +0 -1
- package/dist/widgets/terminal-host.js +0 -258
- package/dist/widgets/terminal-host.js.map +0 -1
- /package/dist/{widgets → host}/host-stream.d.ts +0 -0
- /package/dist/{widgets → host}/host-stream.js +0 -0
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { darken, alphaBlend, contrastFor } from "./colorMath.js";
|
|
2
|
-
const AUTO_NAME = "auto";
|
|
3
|
-
// Modifier matches the trailing "-darken-N" or "-lighten-N" of a name part.
|
|
4
|
-
// Anchored right (`.+` is greedy) because var names themselves contain
|
|
5
|
-
// hyphens — `"primary-background-darken-3"` must split into the var
|
|
6
|
-
// `primary-background` and the modifier `darken-3`, not `primary` /
|
|
7
|
-
// `background-darken-3`.
|
|
8
|
-
const MODIFIER_RE = /^(.+)-(darken|lighten)-(\d+)$/;
|
|
9
|
-
const ALPHA_RE = /^(\d+(?:\.\d+)?)%$/;
|
|
10
|
-
function parse(spec) {
|
|
11
|
-
const trimmed = spec.trim();
|
|
12
|
-
if (trimmed === "")
|
|
13
|
-
return null;
|
|
14
|
-
const [namePart, alphaPart, ...rest] = trimmed.split(/\s+/);
|
|
15
|
-
if (namePart === undefined || rest.length > 0)
|
|
16
|
-
return null;
|
|
17
|
-
let alpha = null;
|
|
18
|
-
if (alphaPart !== undefined) {
|
|
19
|
-
const m = ALPHA_RE.exec(alphaPart);
|
|
20
|
-
if (m === null)
|
|
21
|
-
return null;
|
|
22
|
-
const pct = parseFloat(m[1]);
|
|
23
|
-
if (pct < 0 || pct > 100)
|
|
24
|
-
return null;
|
|
25
|
-
alpha = pct / 100;
|
|
26
|
-
}
|
|
27
|
-
const mod = MODIFIER_RE.exec(namePart);
|
|
28
|
-
if (mod !== null) {
|
|
29
|
-
const levels = parseInt(mod[3], 10);
|
|
30
|
-
return {
|
|
31
|
-
name: mod[1],
|
|
32
|
-
darkenLevels: mod[2] === "darken" ? levels : -levels,
|
|
33
|
-
alpha,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
return { name: namePart, darkenLevels: 0, alpha };
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Resolves Textual-style spec strings against a Palette into ColorRgba values.
|
|
40
|
-
*
|
|
41
|
-
* Spec grammar:
|
|
42
|
-
* spec = name ("-darken-" N | "-lighten-" N)? (" " NN "%")?
|
|
43
|
-
* name = "auto" | <palette var name>
|
|
44
|
-
*
|
|
45
|
-
* Examples (against gruvbox):
|
|
46
|
-
* "primary" → palette["primary"]
|
|
47
|
-
* "primary-background" → palette["primary-background"] (name has hyphens)
|
|
48
|
-
* "primary-darken-3" → darken(palette["primary"], 3)
|
|
49
|
-
* "primary 50%" → alphaBlend(palette["primary"], against, 0.5)
|
|
50
|
-
* "auto 33%" → alphaBlend(contrastFor(against), against, 0.33)
|
|
51
|
-
* "primary-darken-3 50%" → alphaBlend(darken(palette["primary"], 3), against, 0.5)
|
|
52
|
-
*
|
|
53
|
-
* Returns null on: invalid syntax, missing var, or missing required `against`.
|
|
54
|
-
* Pure: same inputs always yield the same output, no internal state.
|
|
55
|
-
*/
|
|
56
|
-
export class PaletteResolver {
|
|
57
|
-
palette;
|
|
58
|
-
constructor(palette) {
|
|
59
|
-
this.palette = palette;
|
|
60
|
-
}
|
|
61
|
-
resolve(spec, ctx) {
|
|
62
|
-
const parsed = parse(spec);
|
|
63
|
-
if (parsed === null)
|
|
64
|
-
return null;
|
|
65
|
-
// [LAW:one-type-per-behavior] `auto` is a synthetic var whose "lookup"
|
|
66
|
-
// depends on ctx; named vars look up in the palette. Both produce a
|
|
67
|
-
// ColorRgba | null, so the pipeline downstream is identical.
|
|
68
|
-
const base = this.lookupBase(parsed.name, ctx);
|
|
69
|
-
if (base === null)
|
|
70
|
-
return null;
|
|
71
|
-
// [LAW:dataflow-not-control-flow] darken at level 0 is a no-op (modulo
|
|
72
|
-
// ±1 RGB roundtrip); we always run it and let the data (levels) decide
|
|
73
|
-
// the magnitude. Negative levels lighten — same op, different value.
|
|
74
|
-
const modified = darken(base, parsed.darkenLevels);
|
|
75
|
-
if (parsed.alpha === null)
|
|
76
|
-
return modified;
|
|
77
|
-
if (!ctx?.against)
|
|
78
|
-
return null;
|
|
79
|
-
return alphaBlend(modified, ctx.against, parsed.alpha);
|
|
80
|
-
}
|
|
81
|
-
lookupBase(name, ctx) {
|
|
82
|
-
if (name === AUTO_NAME) {
|
|
83
|
-
return ctx?.against ? contrastFor(ctx.against) : null;
|
|
84
|
-
}
|
|
85
|
-
return this.palette.get(name) ?? null;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=paletteResolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paletteResolver.js","sourceRoot":"","sources":["../../src/themes/paletteResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"host-stream.d.ts","sourceRoot":"","sources":["../../src/widgets/host-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,CAO1D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"host-stream.js","sourceRoot":"","sources":["../../src/widgets/host-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,IAAkB;IAC3C,OAAO;QACL,KAAK,CAAC,KAA0B;YAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-host.d.ts","sourceRoot":"","sources":["../../src/widgets/terminal-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TerminalHost — the capability seam between the interactive runtime and its
|
|
3
|
-
* I/O environment.
|
|
4
|
-
*
|
|
5
|
-
* [LAW:locality-or-seam] The missing seam *was* the missing type. Before this
|
|
6
|
-
* type existed, Screen and EventRouter reached for ambient `process.stdin`/
|
|
7
|
-
* `process.stdout`, which crystallised them to node. With a `TerminalHost`
|
|
8
|
-
* value flowing across one boundary, the same runtime code runs against any
|
|
9
|
-
* implementation — node's TTY (`NodeTerminalHost`, this file) or a browser
|
|
10
|
-
* xterm.js terminal (a downstream ticket's adapter).
|
|
11
|
-
*
|
|
12
|
-
* [LAW:dataflow-not-control-flow] The runtime never branches on "am I in
|
|
13
|
-
* node or browser." The host is the value that differs; the code path is
|
|
14
|
-
* the same. Variability lives in which host is constructed at the program
|
|
15
|
-
* entry, not in any `if` inside the runtime.
|
|
16
|
-
*
|
|
17
|
-
* [LAW:no-shared-mutable-globals] This file is the *single owner* of node
|
|
18
|
-
* TTY access in the codebase. Every other module receives a `TerminalHost`
|
|
19
|
-
* from outside. If you find yourself reaching for `process.stdin`,
|
|
20
|
-
* `process.stdout`, or `setRawMode` anywhere else in the runtime or in a
|
|
21
|
-
* demo, fix the call site to take a `TerminalHost` parameter instead —
|
|
22
|
-
* the seam is already here; use it.
|
|
23
|
-
*
|
|
24
|
-
* [boundaries: capabilities over context] A `TerminalHost` grants exactly
|
|
25
|
-
* the I/O capabilities the runtime needs: write bytes, read input, query
|
|
26
|
-
* size, observe resize, switch raw mode, lifecycle. It is not an
|
|
27
|
-
* omniscient handle to "the process."
|
|
28
|
-
*/
|
|
29
|
-
const DEFAULT_COLS = 80;
|
|
30
|
-
const DEFAULT_ROWS = 24;
|
|
31
|
-
export class NodeTerminalHost {
|
|
32
|
-
stdin;
|
|
33
|
-
stdout;
|
|
34
|
-
dataHandlers = new Set();
|
|
35
|
-
resizeHandlers = new Set();
|
|
36
|
-
dataListener;
|
|
37
|
-
resizeListener;
|
|
38
|
-
rawModeRequested = false;
|
|
39
|
-
constructor(options = {}) {
|
|
40
|
-
// [LAW:no-shared-mutable-globals] The ONLY place in the codebase that
|
|
41
|
-
// reaches for `process.stdin`/`process.stdout` directly. All other
|
|
42
|
-
// callers receive a `TerminalHost` and stay environment-agnostic.
|
|
43
|
-
this.stdin = options.stdin ?? process.stdin;
|
|
44
|
-
this.stdout = options.stdout ?? process.stdout;
|
|
45
|
-
}
|
|
46
|
-
get isTTY() {
|
|
47
|
-
return !!this.stdin.isTTY && !!this.stdout.isTTY;
|
|
48
|
-
}
|
|
49
|
-
write(data) {
|
|
50
|
-
this.stdout.write(data);
|
|
51
|
-
}
|
|
52
|
-
size() {
|
|
53
|
-
return {
|
|
54
|
-
cols: this.stdout.columns ?? DEFAULT_COLS,
|
|
55
|
-
rows: this.stdout.rows ?? DEFAULT_ROWS,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
setRawMode(raw) {
|
|
59
|
-
this.rawModeRequested = raw;
|
|
60
|
-
this.applyRawMode(raw);
|
|
61
|
-
}
|
|
62
|
-
// [LAW:single-enforcer] One site decides what to do when toggling raw
|
|
63
|
-
// mode on the underlying transport fails. Both `setRawMode` (call from
|
|
64
|
-
// outside) and `stop` (cleanup) go through this helper so neither
|
|
65
|
-
// caller has to branch on capability or exception-handling.
|
|
66
|
-
//
|
|
67
|
-
// [LAW:dataflow-not-control-flow] Two shapes of "the transport can't do
|
|
68
|
-
// this" are absorbed identically: the optional chain handles "method
|
|
69
|
-
// missing" (non-TTY streams, PassThrough in tests); the try/catch
|
|
70
|
-
// handles "method exists but threw" (node's `setRawMode` throws on
|
|
71
|
-
// closed or non-TTY streams). Callers see neither shape — they always
|
|
72
|
-
// call `setRawMode(bool)`, and the host decides what's possible.
|
|
73
|
-
//
|
|
74
|
-
// The catch is silent because the only call sites are lifecycle
|
|
75
|
-
// transitions: if the stream is already gone, there is nothing
|
|
76
|
-
// semantically meaningful for the host to do, and surfacing the
|
|
77
|
-
// exception would only make teardown brittle without giving the caller
|
|
78
|
-
// a recovery path. The demos this replaces did `try { ... } catch {}`
|
|
79
|
-
// at every call site for exactly this reason — absorbing it once here
|
|
80
|
-
// means the pattern stops spreading.
|
|
81
|
-
applyRawMode(raw) {
|
|
82
|
-
try {
|
|
83
|
-
this.stdin.setRawMode?.(raw);
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
// Underlying stream couldn't honor the request (closed, no longer
|
|
87
|
-
// a TTY, etc.). Lifecycle continues.
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
onData(handler) {
|
|
91
|
-
this.dataHandlers.add(handler);
|
|
92
|
-
// [LAW:single-enforcer] One underlying `data` listener fans out to all
|
|
93
|
-
// subscribers — keeps stdin's flowing/paused state derivable from
|
|
94
|
-
// "any subscribers?" instead of from per-call ref-counts scattered
|
|
95
|
-
// through the runtime.
|
|
96
|
-
if (!this.dataListener) {
|
|
97
|
-
this.dataListener = (chunk) => {
|
|
98
|
-
for (const h of this.dataHandlers)
|
|
99
|
-
h(chunk);
|
|
100
|
-
};
|
|
101
|
-
this.stdin.on("data", this.dataListener);
|
|
102
|
-
this.stdin.resume?.();
|
|
103
|
-
}
|
|
104
|
-
return () => {
|
|
105
|
-
this.dataHandlers.delete(handler);
|
|
106
|
-
if (this.dataHandlers.size === 0 && this.dataListener) {
|
|
107
|
-
this.stdin.off("data", this.dataListener);
|
|
108
|
-
this.dataListener = undefined;
|
|
109
|
-
// Returning stdin to paused state mirrors the symmetric "no
|
|
110
|
-
// subscribers → no flow" invariant. Without this, removing the
|
|
111
|
-
// last subscriber leaves stdin in flowing mode and the process
|
|
112
|
-
// hangs forever waiting for an event nobody is listening for.
|
|
113
|
-
this.stdin.pause?.();
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
onResize(handler) {
|
|
118
|
-
this.resizeHandlers.add(handler);
|
|
119
|
-
if (!this.resizeListener) {
|
|
120
|
-
this.resizeListener = () => {
|
|
121
|
-
const size = this.size();
|
|
122
|
-
for (const h of this.resizeHandlers)
|
|
123
|
-
h(size);
|
|
124
|
-
};
|
|
125
|
-
this.stdout.on("resize", this.resizeListener);
|
|
126
|
-
}
|
|
127
|
-
return () => {
|
|
128
|
-
this.resizeHandlers.delete(handler);
|
|
129
|
-
if (this.resizeHandlers.size === 0 && this.resizeListener) {
|
|
130
|
-
this.stdout.off("resize", this.resizeListener);
|
|
131
|
-
this.resizeListener = undefined;
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
start() {
|
|
136
|
-
// No-op on node: stdin/stdout are always available. Lifecycle exists
|
|
137
|
-
// so the browser host (downstream ticket) can attach to the DOM here
|
|
138
|
-
// without the runtime branching on "do I need to start?"
|
|
139
|
-
}
|
|
140
|
-
stop() {
|
|
141
|
-
// [LAW:one-source-of-truth] Symmetric teardown: drop every subscriber
|
|
142
|
-
// and detach the underlying stream listeners. After stop(), the host
|
|
143
|
-
// is in the same shape a freshly-constructed one would be in. Calling
|
|
144
|
-
// stop() repeatedly is safe — the dataListener/resizeListener guards
|
|
145
|
-
// make later calls no-ops.
|
|
146
|
-
if (this.dataListener) {
|
|
147
|
-
this.stdin.off("data", this.dataListener);
|
|
148
|
-
this.dataListener = undefined;
|
|
149
|
-
this.stdin.pause?.();
|
|
150
|
-
}
|
|
151
|
-
if (this.resizeListener) {
|
|
152
|
-
this.stdout.off("resize", this.resizeListener);
|
|
153
|
-
this.resizeListener = undefined;
|
|
154
|
-
}
|
|
155
|
-
this.dataHandlers.clear();
|
|
156
|
-
this.resizeHandlers.clear();
|
|
157
|
-
if (this.rawModeRequested) {
|
|
158
|
-
this.applyRawMode(false);
|
|
159
|
-
this.rawModeRequested = false;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
export class BrowserTerminalHost {
|
|
164
|
-
terminal;
|
|
165
|
-
dataHandlers = new Set();
|
|
166
|
-
resizeHandlers = new Set();
|
|
167
|
-
dataSubscription;
|
|
168
|
-
resizeSubscription;
|
|
169
|
-
constructor(options) {
|
|
170
|
-
this.terminal = options.terminal;
|
|
171
|
-
}
|
|
172
|
-
// [LAW:dataflow-not-control-flow] xterm.js is always an interactive
|
|
173
|
-
// terminal — there is no "non-TTY" code path in the browser. The
|
|
174
|
-
// runtime never branches on the value; this is the only sensible
|
|
175
|
-
// constant for this host.
|
|
176
|
-
get isTTY() {
|
|
177
|
-
return true;
|
|
178
|
-
}
|
|
179
|
-
write(data) {
|
|
180
|
-
this.terminal.write(data);
|
|
181
|
-
}
|
|
182
|
-
size() {
|
|
183
|
-
return { cols: this.terminal.cols, rows: this.terminal.rows };
|
|
184
|
-
}
|
|
185
|
-
// [LAW:dataflow-not-control-flow] xterm.js delivers keystrokes raw
|
|
186
|
-
// unconditionally — there is no cooked mode to toggle. The no-op
|
|
187
|
-
// matches the TerminalHost contract's documented "silently no-op when
|
|
188
|
-
// the transport has no cooked mode," so callers stay uniform across
|
|
189
|
-
// hosts. (Mirror: NodeTerminalHost on a non-TTY stream takes the same
|
|
190
|
-
// no-op path via the optional-chain in `applyRawMode`.)
|
|
191
|
-
setRawMode(_raw) { }
|
|
192
|
-
// [LAW:single-enforcer] One underlying `terminal.onData` subscription
|
|
193
|
-
// fans out to every host-level handler — the same lazy-attach,
|
|
194
|
-
// last-unsubscribe-detaches shape as NodeTerminalHost.onData. The
|
|
195
|
-
// runtime never sees the underlying subscription; it sees a single
|
|
196
|
-
// uniform `(handler) => Unsubscribe` API across hosts.
|
|
197
|
-
onData(handler) {
|
|
198
|
-
this.dataHandlers.add(handler);
|
|
199
|
-
if (!this.dataSubscription) {
|
|
200
|
-
this.dataSubscription = this.terminal.onData((chunk) => {
|
|
201
|
-
for (const h of this.dataHandlers)
|
|
202
|
-
h(chunk);
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
return () => {
|
|
206
|
-
this.dataHandlers.delete(handler);
|
|
207
|
-
if (this.dataHandlers.size === 0 && this.dataSubscription) {
|
|
208
|
-
this.dataSubscription.dispose();
|
|
209
|
-
this.dataSubscription = undefined;
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
onResize(handler) {
|
|
214
|
-
this.resizeHandlers.add(handler);
|
|
215
|
-
if (!this.resizeSubscription) {
|
|
216
|
-
this.resizeSubscription = this.terminal.onResize((size) => {
|
|
217
|
-
const snapshot = { cols: size.cols, rows: size.rows };
|
|
218
|
-
for (const h of this.resizeHandlers)
|
|
219
|
-
h(snapshot);
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
return () => {
|
|
223
|
-
this.resizeHandlers.delete(handler);
|
|
224
|
-
if (this.resizeHandlers.size === 0 && this.resizeSubscription) {
|
|
225
|
-
this.resizeSubscription.dispose();
|
|
226
|
-
this.resizeSubscription = undefined;
|
|
227
|
-
}
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
start() {
|
|
231
|
-
// [LAW:one-source-of-truth] The host does NOT own the terminal's DOM
|
|
232
|
-
// lifecycle (`terminal.open` / `terminal.dispose`). That is the
|
|
233
|
-
// caller's responsibility, exactly as NodeTerminalHost does not own
|
|
234
|
-
// `process.stdin`/`process.stdout`. start() is here so the runtime
|
|
235
|
-
// can call it uniformly across hosts; for this host there is
|
|
236
|
-
// nothing to do at this seam.
|
|
237
|
-
}
|
|
238
|
-
stop() {
|
|
239
|
-
// [LAW:one-source-of-truth] Symmetric teardown mirroring
|
|
240
|
-
// NodeTerminalHost.stop: drop every host-level subscriber and
|
|
241
|
-
// dispose the underlying terminal subscriptions. The terminal
|
|
242
|
-
// itself stays alive — re-subscribing via onData/onResize after
|
|
243
|
-
// stop() works, since the lazy-attach path re-creates the
|
|
244
|
-
// subscription on next subscribe. Calling stop() repeatedly is
|
|
245
|
-
// safe — the subscription guards make later calls no-ops.
|
|
246
|
-
if (this.dataSubscription) {
|
|
247
|
-
this.dataSubscription.dispose();
|
|
248
|
-
this.dataSubscription = undefined;
|
|
249
|
-
}
|
|
250
|
-
if (this.resizeSubscription) {
|
|
251
|
-
this.resizeSubscription.dispose();
|
|
252
|
-
this.resizeSubscription = undefined;
|
|
253
|
-
}
|
|
254
|
-
this.dataHandlers.clear();
|
|
255
|
-
this.resizeHandlers.clear();
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
//# sourceMappingURL=terminal-host.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-host.js","sourceRoot":"","sources":["../../src/widgets/terminal-host.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|