@promptctl/rich-js 0.7.0 → 0.8.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 (137) hide show
  1. package/README.md +31 -30
  2. package/dist/core/box.d.ts +3 -3
  3. package/dist/core/box.d.ts.map +1 -1
  4. package/dist/core/box.js.map +1 -1
  5. package/dist/core/cells.d.ts +46 -1
  6. package/dist/core/cells.d.ts.map +1 -1
  7. package/dist/core/cells.js +55 -14
  8. package/dist/core/cells.js.map +1 -1
  9. package/dist/core/console.d.ts +28 -10
  10. package/dist/core/console.d.ts.map +1 -1
  11. package/dist/core/console.js +141 -80
  12. package/dist/core/console.js.map +1 -1
  13. package/dist/core/markup.d.ts +0 -2
  14. package/dist/core/markup.d.ts.map +1 -1
  15. package/dist/core/markup.js +31 -17
  16. package/dist/core/markup.js.map +1 -1
  17. package/dist/core/measure.d.ts +11 -0
  18. package/dist/core/measure.d.ts.map +1 -1
  19. package/dist/core/measure.js +15 -3
  20. package/dist/core/measure.js.map +1 -1
  21. package/dist/core/oklch.d.ts +22 -0
  22. package/dist/core/oklch.d.ts.map +1 -1
  23. package/dist/core/oklch.js +62 -18
  24. package/dist/core/oklch.js.map +1 -1
  25. package/dist/core/pretty.d.ts +87 -0
  26. package/dist/core/pretty.d.ts.map +1 -0
  27. package/dist/core/pretty.js +304 -0
  28. package/dist/core/pretty.js.map +1 -0
  29. package/dist/core/protocol.d.ts +64 -0
  30. package/dist/core/protocol.d.ts.map +1 -1
  31. package/dist/core/protocol.js +72 -0
  32. package/dist/core/protocol.js.map +1 -1
  33. package/dist/core/segment.d.ts +21 -0
  34. package/dist/core/segment.d.ts.map +1 -1
  35. package/dist/core/segment.js +40 -1
  36. package/dist/core/segment.js.map +1 -1
  37. package/dist/core/subscription.d.ts +13 -0
  38. package/dist/core/subscription.d.ts.map +1 -0
  39. package/dist/core/subscription.js +13 -0
  40. package/dist/core/subscription.js.map +1 -0
  41. package/dist/core/text.d.ts.map +1 -1
  42. package/dist/core/text.js +45 -13
  43. package/dist/core/text.js.map +1 -1
  44. package/dist/host/host-stream.d.ts +31 -0
  45. package/dist/host/host-stream.d.ts.map +1 -0
  46. package/dist/host/host-stream.js +36 -0
  47. package/dist/host/host-stream.js.map +1 -0
  48. package/dist/host/index.d.ts +4 -0
  49. package/dist/host/index.d.ts.map +1 -0
  50. package/dist/host/index.js +3 -0
  51. package/dist/host/index.js.map +1 -0
  52. package/dist/host/terminal-host.d.ts +144 -0
  53. package/dist/host/terminal-host.d.ts.map +1 -0
  54. package/dist/host/terminal-host.js +133 -0
  55. package/dist/host/terminal-host.js.map +1 -0
  56. package/dist/index.d.ts +10 -33
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +33 -21
  59. package/dist/index.js.map +1 -1
  60. package/dist/node/terminal-host.d.ts +85 -0
  61. package/dist/node/terminal-host.d.ts.map +1 -0
  62. package/dist/node/terminal-host.js +161 -0
  63. package/dist/node/terminal-host.js.map +1 -0
  64. package/dist/node/traceback.d.ts +28 -0
  65. package/dist/node/traceback.d.ts.map +1 -0
  66. package/dist/node/traceback.js +113 -0
  67. package/dist/node/traceback.js.map +1 -0
  68. package/dist/renderables/columns.d.ts +24 -2
  69. package/dist/renderables/columns.d.ts.map +1 -1
  70. package/dist/renderables/columns.js +91 -32
  71. package/dist/renderables/columns.js.map +1 -1
  72. package/dist/renderables/layout.d.ts +61 -5
  73. package/dist/renderables/layout.d.ts.map +1 -1
  74. package/dist/renderables/layout.js +191 -19
  75. package/dist/renderables/layout.js.map +1 -1
  76. package/dist/renderables/padding.d.ts +15 -2
  77. package/dist/renderables/padding.d.ts.map +1 -1
  78. package/dist/renderables/padding.js +92 -37
  79. package/dist/renderables/padding.js.map +1 -1
  80. package/dist/renderables/panel.d.ts +44 -3
  81. package/dist/renderables/panel.d.ts.map +1 -1
  82. package/dist/renderables/panel.js +149 -80
  83. package/dist/renderables/panel.js.map +1 -1
  84. package/dist/renderables/table.d.ts +40 -4
  85. package/dist/renderables/table.d.ts.map +1 -1
  86. package/dist/renderables/table.js +276 -158
  87. package/dist/renderables/table.js.map +1 -1
  88. package/dist/renderables/traceback.d.ts +6 -2
  89. package/dist/renderables/traceback.d.ts.map +1 -1
  90. package/dist/renderables/traceback.js +6 -10
  91. package/dist/renderables/traceback.js.map +1 -1
  92. package/dist/renderables/tree.d.ts +27 -2
  93. package/dist/renderables/tree.d.ts.map +1 -1
  94. package/dist/renderables/tree.js +82 -23
  95. package/dist/renderables/tree.js.map +1 -1
  96. package/dist/template-bindings/color-funcs.d.ts +3 -3
  97. package/dist/template-bindings/color-funcs.js +3 -3
  98. package/dist/template-bindings/index.d.ts +6 -7
  99. package/dist/template-bindings/index.d.ts.map +1 -1
  100. package/dist/template-bindings/index.js +6 -7
  101. package/dist/template-bindings/index.js.map +1 -1
  102. package/dist/template-bindings/palette-funcs.d.ts +17 -5
  103. package/dist/template-bindings/palette-funcs.d.ts.map +1 -1
  104. package/dist/template-bindings/palette-funcs.js +69 -6
  105. package/dist/template-bindings/palette-funcs.js.map +1 -1
  106. package/dist/template-bindings/style-funcs.d.ts +1 -1
  107. package/dist/template-bindings/style-funcs.js +1 -1
  108. package/dist/themes/ramp.d.ts +84 -0
  109. package/dist/themes/ramp.d.ts.map +1 -0
  110. package/dist/themes/ramp.js +123 -0
  111. package/dist/themes/ramp.js.map +1 -0
  112. package/dist/widgets/dropdown.d.ts +1 -1
  113. package/dist/widgets/dropdown.js +1 -1
  114. package/dist/widgets/event-router.d.ts +3 -2
  115. package/dist/widgets/event-router.d.ts.map +1 -1
  116. package/dist/widgets/focus-manager.d.ts +2 -1
  117. package/dist/widgets/focus-manager.d.ts.map +1 -1
  118. package/dist/widgets/index.d.ts +3 -6
  119. package/dist/widgets/index.d.ts.map +1 -1
  120. package/dist/widgets/index.js +4 -3
  121. package/dist/widgets/index.js.map +1 -1
  122. package/dist/widgets/screen.d.ts +1 -1
  123. package/dist/widgets/screen.d.ts.map +1 -1
  124. package/dist/widgets/terminal-host.d.ts +13 -63
  125. package/dist/widgets/terminal-host.d.ts.map +1 -1
  126. package/dist/widgets/terminal-host.js +11 -142
  127. package/dist/widgets/terminal-host.js.map +1 -1
  128. package/dist/widgets/text-input.d.ts +2 -3
  129. package/dist/widgets/text-input.d.ts.map +1 -1
  130. package/dist/widgets/text-input.js +4 -12
  131. package/dist/widgets/text-input.js.map +1 -1
  132. package/dist/widgets/types.d.ts +1 -1
  133. package/dist/widgets/types.d.ts.map +1 -1
  134. package/dist/widgets/types.js.map +1 -1
  135. package/dist/widgets/widget-base.d.ts +2 -1
  136. package/dist/widgets/widget-base.d.ts.map +1 -1
  137. package/package.json +20 -4
@@ -11,9 +11,21 @@ export class Measurement {
11
11
  get span() {
12
12
  return this.maximum - this.minimum;
13
13
  }
14
+ /**
15
+ * A range with no cell meaning becomes one with the nearest meaning there is:
16
+ * negative floors to zero, an inverted pair collapses to its ceiling, and NaN
17
+ * reads as zero cells the same way `cellCount` reads it.
18
+ *
19
+ * NaN and Infinity are not treated alike here, and the difference is the whole
20
+ * point. `Infinity` is a maximum a renderable means — `Table` reports it when
21
+ * a column asks for every cell there is, and `withBoundedWidth` throws on it
22
+ * so a caller learns their offer was unanswerable. Flooring it to zero would
23
+ * turn that loud failure into a table measured at no width at all.
24
+ */
14
25
  normalize() {
15
- const min = Math.max(0, Math.min(this.minimum, this.maximum));
16
- const max = Math.max(0, this.maximum);
26
+ const cells = (n) => (Number.isNaN(n) ? 0 : n);
27
+ const min = Math.max(0, Math.min(cells(this.minimum), cells(this.maximum)));
28
+ const max = Math.max(0, cells(this.maximum));
17
29
  return new Measurement(min, max);
18
30
  }
19
31
  withMaximum(width) {
@@ -32,7 +44,7 @@ export class Measurement {
32
44
  if (options.maxWidth < 1)
33
45
  return new Measurement(0, 0);
34
46
  const { minimum, maximum } = measurable.measure(options);
35
- return new Measurement(minimum, Math.min(maximum, options.maxWidth));
47
+ return new Measurement(minimum, Math.min(maximum, options.maxWidth)).normalize();
36
48
  }
37
49
  }
38
50
  export function measureRenderables(options, measurables) {
@@ -1 +1 @@
1
- {"version":3,"file":"measure.js","sourceRoot":"","sources":["../../src/core/measure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"measure.js","sourceRoot":"","sources":["../../src/core/measure.ts"],"names":[],"mappings":"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"}
@@ -93,6 +93,28 @@ export declare class Oklch {
93
93
  * `alpha === 1`. Callers invoke unconditionally; the data decides.
94
94
  */
95
95
  applyKey(k: ThemeKey): Oklch;
96
+ /**
97
+ * The color `t` of the way from this one toward `toward`, in OKLCH.
98
+ * `t = 0` is this color, `t = 1` is `toward`; pure.
99
+ *
100
+ * Lightness, chroma and alpha interpolate linearly. Hue takes the shorter
101
+ * arc around the wheel, so blue → red passes through magenta rather than
102
+ * sweeping across green. An achromatic endpoint has no hue of its own —
103
+ * `fromRgba` pins it to 0, which is red — so it adopts the other
104
+ * endpoint's hue (CSS Color 4's "powerless" rule): gray → red stays a red
105
+ * that gains chroma, instead of rotating through the wheel from 0°.
106
+ *
107
+ * `t` must lie in [0, 1]: this is interpolation, not extrapolation, and a
108
+ * `t` outside it (NaN included) is a RangeError, never a colour off the
109
+ * far end of the segment. [LAW:no-silent-failure]
110
+ *
111
+ * [LAW:one-source-of-truth] Achromatic means the same `ACHROMATIC_EPS`
112
+ * that `fromRgba` and `applyKey` pin hue by, so a gray produced by either
113
+ * is a gray here — and the result's hue goes through the same `hueOf`, so
114
+ * a gray produced HERE (t = 0 from a gray, t = 1 toward one) is a gray
115
+ * there too.
116
+ */
117
+ mix(toward: Oklch, t: number): Oklch;
96
118
  /** Linear-sRGB coordinates for an explicit (l, C, h). Pure; `toRgba` passes
97
119
  * already-normalized values so this never sees out-of-range inputs. */
98
120
  private toLinearRgb;
@@ -1 +1 @@
1
- {"version":3,"file":"oklch.d.ts","sourceRoot":"","sources":["../../src/core/oklch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAMvC;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,wDAAwD;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,QAAQ,EAAE,QAKrB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAK7B,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAOlD;AAwCD;;;;;;;;;;;GAWG;AACH,qBAAa,KAAK;IAEd,QAAQ,CAAC,CAAC,EAAE,MAAM;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAHb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,GAAE,MAAU;IAU5B,oFAAoF;IACpF,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK;IA0BxC;;;;;;OAMG;IACH,MAAM,IAAI,SAAS;IAgBnB;;;;;;OAMG;IACH,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK;IAY5B;2EACuE;IACvE,OAAO,CAAC,WAAW;IAoBnB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;CAa1B"}
1
+ {"version":3,"file":"oklch.d.ts","sourceRoot":"","sources":["../../src/core/oklch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAMvC;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,wDAAwD;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,QAAQ,EAAE,QAKrB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAK7B,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAOlD;AA0DD;;;;;;;;;;;GAWG;AACH,qBAAa,KAAK;IAEd,QAAQ,CAAC,CAAC,EAAE,MAAM;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAHb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,GAAE,MAAU;IAU5B,oFAAoF;IACpF,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK;IAwBxC;;;;;;OAMG;IACH,MAAM,IAAI,SAAS;IAgBnB;;;;;;OAMG;IACH,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK;IAQ5B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK;IAwBpC;2EACuE;IACvE,OAAO,CAAC,WAAW;IAoBnB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;CAa1B"}
@@ -67,11 +67,26 @@ function clamp01(v) {
67
67
  // Small tolerance so float-fuzz at the gamut edge doesn't trigger needless
68
68
  // chroma reduction on colors that are already representable.
69
69
  const GAMUT_EPS = 1e-4;
70
- // [LAW:one-source-of-truth] Below this chroma a color is treated as
71
- // achromatic, and hue is pinned to 0 so round-trips stay stable. Used
72
- // by `fromRgba` (after polar conversion) and `applyKey` (after chroma
73
- // scaling collapses C toward 0). Same threshold both places.
70
+ // [LAW:one-source-of-truth] Below this chroma a color is achromatic and its
71
+ // hue is pinned to 0 so round-trips stay stable — the one threshold every
72
+ // chroma reader here shares.
74
73
  const ACHROMATIC_EPS = 1e-7;
74
+ // The one spelling of that pin: every producer of an `Oklch` (`fromRgba`,
75
+ // `applyKey`, `mix`) passes its result's chroma and hue through here, so a
76
+ // gray from any of them carries the same hue. The constructor does not —
77
+ // it passes intermediates through by contract. [LAW:single-enforcer]
78
+ const hueOf = (c, h) => (c < ACHROMATIC_EPS ? 0 : h);
79
+ // Endpoint-exact: `t = 0` returns `a` and `t = 1` returns `b` bit-for-bit,
80
+ // which `a + (b - a) * t` does not (the subtraction rounds). One shape for
81
+ // every axis `mix` interpolates. [LAW:one-source-of-truth]
82
+ const lerp = (a, b, t) => a * (1 - t) + b * t;
83
+ // Hue into [0, 360). Exact on a hue already there (fmod is exact), and exact
84
+ // on `x - 360` for a representable x (the sum is x itself), which is what
85
+ // `mix` relies on. One spelling for every producer. [LAW:one-source-of-truth]
86
+ const wrapHue = (h) => {
87
+ const w = h % 360;
88
+ return w < 0 ? w + 360 : w;
89
+ };
75
90
  function inGamut(r, g, b) {
76
91
  return (r >= -GAMUT_EPS && r <= 1 + GAMUT_EPS &&
77
92
  g >= -GAMUT_EPS && g <= 1 + GAMUT_EPS &&
@@ -128,12 +143,8 @@ export class Oklch {
128
143
  const aLab = 1.9779984951 * lCube - 2.4285922050 * mCube + 0.4505937099 * sCube;
129
144
  const bLab = 0.0259040371 * lCube + 0.7827717662 * mCube - 0.8086757660 * sCube;
130
145
  const C = Math.sqrt(aLab * aLab + bLab * bLab);
131
- let H = Math.atan2(bLab, aLab) * (180 / Math.PI);
132
- if (H < 0)
133
- H += 360;
134
- if (C < ACHROMATIC_EPS)
135
- H = 0;
136
- return new Oklch(L, C, H, a);
146
+ const H = wrapHue(Math.atan2(bLab, aLab) * (180 / Math.PI));
147
+ return new Oklch(L, C, hueOf(C, H), a);
137
148
  }
138
149
  /**
139
150
  * Polar → OKLab → linear → sRGB (with chroma-bisection gamut clamping).
@@ -169,14 +180,47 @@ export class Oklch {
169
180
  return this;
170
181
  const newL = clamp01(this.l * k.lightnessScale + k.lightnessShift);
171
182
  const newC = Math.max(0, this.c * k.chromaScale);
172
- let newH = (this.h + k.hueShift) % 360;
173
- if (newH < 0)
174
- newH += 360;
175
- // Same achromatic convention as fromRgba: collapsed chroma → pinned hue,
176
- // so applyKey({chromaScale:0}).toRgba() → fromRgba round-trips stably.
177
- if (newC < ACHROMATIC_EPS)
178
- newH = 0;
179
- return new Oklch(newL, newC, newH, this.alpha);
183
+ const newH = wrapHue(this.h + k.hueShift);
184
+ return new Oklch(newL, newC, hueOf(newC, newH), this.alpha);
185
+ }
186
+ /**
187
+ * The color `t` of the way from this one toward `toward`, in OKLCH.
188
+ * `t = 0` is this color, `t = 1` is `toward`; pure.
189
+ *
190
+ * Lightness, chroma and alpha interpolate linearly. Hue takes the shorter
191
+ * arc around the wheel, so blue → red passes through magenta rather than
192
+ * sweeping across green. An achromatic endpoint has no hue of its own —
193
+ * `fromRgba` pins it to 0, which is red — so it adopts the other
194
+ * endpoint's hue (CSS Color 4's "powerless" rule): gray → red stays a red
195
+ * that gains chroma, instead of rotating through the wheel from 0°.
196
+ *
197
+ * `t` must lie in [0, 1]: this is interpolation, not extrapolation, and a
198
+ * `t` outside it (NaN included) is a RangeError, never a colour off the
199
+ * far end of the segment. [LAW:no-silent-failure]
200
+ *
201
+ * [LAW:one-source-of-truth] Achromatic means the same `ACHROMATIC_EPS`
202
+ * that `fromRgba` and `applyKey` pin hue by, so a gray produced by either
203
+ * is a gray here — and the result's hue goes through the same `hueOf`, so
204
+ * a gray produced HERE (t = 0 from a gray, t = 1 toward one) is a gray
205
+ * there too.
206
+ */
207
+ mix(toward, t) {
208
+ if (!(t >= 0 && t <= 1)) {
209
+ throw new RangeError(`Oklch.mix: t must be in [0, 1]; got ${t}`);
210
+ }
211
+ const thisHasHue = this.c >= ACHROMATIC_EPS;
212
+ const towardHasHue = toward.c >= ACHROMATIC_EPS;
213
+ const fromH = wrapHue(thisHasHue ? this.h : towardHasHue ? toward.h : 0);
214
+ const toH = wrapHue(towardHasHue ? toward.h : fromH);
215
+ // Shorter arc: endpoints more than half a turn apart lerp across 0°, the
216
+ // larger one taken a turn down. `x - 360` for x ≥ 180 is exact
217
+ // (Sterbenz), so the endpoints survive the shift and the wrap bit-for-bit
218
+ // — an addition of 360 would not.
219
+ const arc = toH - fromH;
220
+ const fromU = arc < -180 ? fromH - 360 : fromH;
221
+ const toU = arc > 180 ? toH - 360 : toH;
222
+ const c = lerp(this.c, toward.c, t);
223
+ return new Oklch(lerp(this.l, toward.l, t), c, hueOf(c, wrapHue(lerp(fromU, toU, t))), lerp(this.alpha, toward.alpha, t));
180
224
  }
181
225
  /** Linear-sRGB coordinates for an explicit (l, C, h). Pure; `toRgba` passes
182
226
  * already-normalized values so this never sees out-of-range inputs. */
@@ -1 +1 @@
1
- {"version":3,"file":"oklch.js","sourceRoot":"","sources":["../../src/core/oklch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oklch.js","sourceRoot":"","sources":["../../src/core/oklch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Pretty — formats JavaScript data structures with highlighting.
3
+ *
4
+ * Lives in `core/` beside `markup` and `emoji` because it does their job: turn
5
+ * foreign input into `RichText`. It composes no other renderable — the trait
6
+ * every file in `renderables/` shares and this one does not — and its imports
7
+ * are core primitives only. `Console.print` accepts `unknown` and must turn any
8
+ * of it into something renderable, so the formatter has to sit where `console`
9
+ * can reach it without an upward edge. [LAW:one-way-deps]
10
+ */
11
+ import { Segment } from "./segment.js";
12
+ import type { Highlighter } from "./highlighter.js";
13
+ import type { Renderable, Measurable, RenderOptions } from "./protocol.js";
14
+ export interface PrettyOptions {
15
+ indent?: number;
16
+ expandAll?: boolean;
17
+ maxLength?: number;
18
+ maxString?: number;
19
+ /**
20
+ * How many levels of nesting to descend before eliding. Unbounded by default.
21
+ *
22
+ * `Console.print` supplies a bound because it formats whatever it is handed;
23
+ * a caller constructing a `Pretty` has seen their data and can say what they
24
+ * want. Past the cap a container renders as `[...]`, `{...}`, `Map {...}` or
25
+ * `Set {...}` — visible, so the reader knows the value continues.
26
+ */
27
+ maxDepth?: number;
28
+ indentGuides?: boolean;
29
+ /**
30
+ * Who colours the formatted text. Defaults to a `ReprHighlighter`.
31
+ *
32
+ * Passed rather than imported so a caller's choice survives. `Console.print`
33
+ * routes data arguments through here, and its `highlight` flag and custom
34
+ * `highlighter` have to reach the output the same way they reach a printed
35
+ * string — a `Pretty` reaching for its own singleton would silently outrank
36
+ * both. `NullHighlighter` is the "none" case.
37
+ */
38
+ highlighter?: Highlighter;
39
+ }
40
+ export declare class Pretty implements Renderable, Measurable {
41
+ readonly data: unknown;
42
+ readonly indent: number;
43
+ readonly expandAll: boolean;
44
+ readonly maxLength: number | undefined;
45
+ readonly maxString: number | undefined;
46
+ readonly maxDepth: number;
47
+ readonly indentGuides: boolean;
48
+ readonly highlighter: Highlighter;
49
+ constructor(data: unknown, options?: PrettyOptions);
50
+ render(options: RenderOptions): Iterable<Segment>;
51
+ measure(_options: RenderOptions): {
52
+ minimum: number;
53
+ maximum: number;
54
+ };
55
+ /**
56
+ * Where the traversal is, in the two senses that differ.
57
+ *
58
+ * `inset` is how far the output is indented; it resets to 0 whenever a value
59
+ * is measured for a single line, because a compact form carries no
60
+ * indentation. `level` is how deep in the data we are, and only ever
61
+ * increases. Collapsing the two into one number is the mistake this pair
62
+ * exists to make unrepresentable: the depth cap read the layout number, so
63
+ * every compact probe reset it and the cap never fired at all.
64
+ *
65
+ * `open` holds the objects between the root and here, not every object seen.
66
+ * A value joins on the way down and leaves on the way back up, so a cycle is
67
+ * caught while a DAG — one object reached twice through sibling positions —
68
+ * still renders both times. A never-emptied set would call the second sibling
69
+ * circular. [LAW:no-ambient-temporal-coupling] the traversal owns its state
70
+ * explicitly; a field on the instance would leak between renders.
71
+ */
72
+ private _format;
73
+ /**
74
+ * One position's value, or the marker for why reading it failed.
75
+ *
76
+ * A key and an index are the same job — read one slot of a container someone
77
+ * else built — so they share one method rather than two that must agree.
78
+ * [LAW:one-type-per-behavior] This is also the read that costs the least when
79
+ * it fails: neighbours are unaffected, so `{ a: 1, b: [Threw: …], c: 3 }`
80
+ * still shows everything that could be read.
81
+ */
82
+ private _at;
83
+ /** The arms for a non-null object, with `value` already on the open path. */
84
+ private _formatObject;
85
+ private _addIndentGuides;
86
+ }
87
+ //# sourceMappingURL=pretty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pretty.d.ts","sourceRoot":"","sources":["../../src/core/pretty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AA6FD,qBAAa,MAAO,YAAW,UAAU,EAAE,UAAU;IACnD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;gBAEtB,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa;IAWjD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAYlD,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAUtE;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,OAAO;IAqCf;;;;;;;;OAQG;IACH,OAAO,CAAC,GAAG;IAQX,6EAA6E;IAC7E,OAAO,CAAC,aAAa;IAoFrB,OAAO,CAAC,gBAAgB;CAczB"}
@@ -0,0 +1,304 @@
1
+ /**
2
+ * Pretty — formats JavaScript data structures with highlighting.
3
+ *
4
+ * Lives in `core/` beside `markup` and `emoji` because it does their job: turn
5
+ * foreign input into `RichText`. It composes no other renderable — the trait
6
+ * every file in `renderables/` shares and this one does not — and its imports
7
+ * are core primitives only. `Console.print` accepts `unknown` and must turn any
8
+ * of it into something renderable, so the formatter has to sit where `console`
9
+ * can reach it without an upward edge. [LAW:one-way-deps]
10
+ */
11
+ import { cellLen } from "./cells.js";
12
+ import { Style } from "./style.js";
13
+ import { RichText } from "./text.js";
14
+ import { ReprHighlighter } from "./highlighter.js";
15
+ const reprHighlighter = new ReprHighlighter();
16
+ const rootFrame = (maxWidth) => ({ inset: 0, level: 0, maxWidth, open: new WeakSet() });
17
+ /**
18
+ * The elements of an indexed sequence, or `null` for anything that isn't one.
19
+ *
20
+ * A typed array is an array with a fixed element type, and neither of the two
21
+ * questions asked elsewhere in this file recognises it: `Array.isArray` says
22
+ * false, and its own `toString` answers the bare `1,2,3` — no brackets, nothing
23
+ * for the highlighter to colour per element. Both spellings reach the one arm
24
+ * that knows what a sequence looks like. `DataView` is excluded because it is a
25
+ * window onto bytes, not a sequence of values.
26
+ *
27
+ * Returned as `ArrayLike` rather than a materialised array because both
28
+ * spellings already are one. Converting here would box every element of a
29
+ * multi-megabyte `Buffer` to keep the first `maxLength` of them — bounding the
30
+ * output while leaving the cost of producing it unbounded.
31
+ */
32
+ function indexedElements(value) {
33
+ if (Array.isArray(value))
34
+ return value;
35
+ if (ArrayBuffer.isView(value) && !(value instanceof DataView)) {
36
+ return value;
37
+ }
38
+ return null;
39
+ }
40
+ /**
41
+ * The first `limit` items of a sequence, pulled and no more.
42
+ *
43
+ * A `Map` or `Set` reaches its size through `.size`, which iterates nothing, so
44
+ * spreading one only ever served to throw the tail away — `print` of a
45
+ * half-million-entry cache walked all of it to show a hundred. `Infinity` is
46
+ * the unbounded case and never breaks.
47
+ */
48
+ function take(source, limit) {
49
+ const taken = [];
50
+ if (limit <= 0)
51
+ return taken;
52
+ for (const item of source) {
53
+ taken.push(item);
54
+ if (taken.length >= limit)
55
+ break;
56
+ }
57
+ return taken;
58
+ }
59
+ /**
60
+ * What a value renders as when reading it threw instead of producing it.
61
+ *
62
+ * `Pretty` reflects on data it did not create, and every reflection it performs
63
+ * — a property getter, `Object.keys`, an iterator, `toString` — can throw. The
64
+ * message travels into the output, so the failure stays visible and attributed
65
+ * to the position that produced it. [LAW:no-silent-failure] the error is
66
+ * carried rather than swallowed; a marker naming its cause is not an
67
+ * answer-shaped void, and a diagnostic that takes the program down over one
68
+ * lazily-computed field is unusable on the objects it is most wanted for.
69
+ */
70
+ function threw(error) {
71
+ return `[Threw: ${error instanceof Error ? error.message : String(error)}]`;
72
+ }
73
+ /**
74
+ * Does this value carry its own string form, or must we reflect on its keys?
75
+ *
76
+ * A `Date`, an `Error`, a `RegExp`, or any object that defines `toString`
77
+ * answers the display question itself, and reflecting on such a value throws
78
+ * that answer away — `Object.keys(new Date())` is empty, so key-reflection
79
+ * renders it `{}`. Inheriting `Object.prototype.toString` is the opposite
80
+ * signal: it yields `[object Object]`, a non-answer, so the keys are all the
81
+ * information there is.
82
+ *
83
+ * Both clauses are load-bearing. The identity check separates the two
84
+ * populations; the `typeof` check is what makes `Object.create(null)` — which
85
+ * has no `toString` at all — reflect rather than throw.
86
+ */
87
+ function describesItself(value) {
88
+ const asRecord = value;
89
+ return (typeof asRecord[Symbol.toPrimitive] === "function" ||
90
+ (typeof asRecord.toString === "function" &&
91
+ asRecord.toString !== Object.prototype.toString));
92
+ }
93
+ export class Pretty {
94
+ data;
95
+ indent;
96
+ expandAll;
97
+ maxLength;
98
+ maxString;
99
+ maxDepth;
100
+ indentGuides;
101
+ highlighter;
102
+ constructor(data, options) {
103
+ this.data = data;
104
+ this.indent = options?.indent ?? 4;
105
+ this.expandAll = options?.expandAll ?? false;
106
+ this.maxLength = options?.maxLength;
107
+ this.maxString = options?.maxString;
108
+ this.maxDepth = options?.maxDepth ?? Infinity;
109
+ this.indentGuides = options?.indentGuides !== false;
110
+ this.highlighter = options?.highlighter ?? reprHighlighter;
111
+ }
112
+ *render(options) {
113
+ const formatted = this._format(this.data, rootFrame(options.maxWidth));
114
+ const text = new RichText(formatted, { end: "" });
115
+ this.highlighter.highlight(text);
116
+ if (this.indentGuides) {
117
+ this._addIndentGuides(text);
118
+ }
119
+ yield* text.render(options);
120
+ }
121
+ measure(_options) {
122
+ const formatted = this._format(this.data, rootFrame(_options.maxWidth));
123
+ const lines = formatted.split("\n");
124
+ let max = 0;
125
+ for (const line of lines) {
126
+ max = Math.max(max, cellLen(line));
127
+ }
128
+ return { minimum: 1, maximum: Math.min(max, _options.maxWidth) };
129
+ }
130
+ /**
131
+ * Where the traversal is, in the two senses that differ.
132
+ *
133
+ * `inset` is how far the output is indented; it resets to 0 whenever a value
134
+ * is measured for a single line, because a compact form carries no
135
+ * indentation. `level` is how deep in the data we are, and only ever
136
+ * increases. Collapsing the two into one number is the mistake this pair
137
+ * exists to make unrepresentable: the depth cap read the layout number, so
138
+ * every compact probe reset it and the cap never fired at all.
139
+ *
140
+ * `open` holds the objects between the root and here, not every object seen.
141
+ * A value joins on the way down and leaves on the way back up, so a cycle is
142
+ * caught while a DAG — one object reached twice through sibling positions —
143
+ * still renders both times. A never-emptied set would call the second sibling
144
+ * circular. [LAW:no-ambient-temporal-coupling] the traversal owns its state
145
+ * explicitly; a field on the instance would leak between renders.
146
+ */
147
+ _format(value, at) {
148
+ if (value === null)
149
+ return "null";
150
+ if (value === undefined)
151
+ return "undefined";
152
+ switch (typeof value) {
153
+ case "string": {
154
+ let str = value;
155
+ if (this.maxString !== undefined && str.length > this.maxString) {
156
+ str = str.slice(0, this.maxString) + `+${value.length - this.maxString}`;
157
+ }
158
+ return JSON.stringify(str);
159
+ }
160
+ case "number":
161
+ case "bigint":
162
+ return String(value);
163
+ case "boolean":
164
+ return String(value);
165
+ case "symbol":
166
+ return value.toString();
167
+ case "function":
168
+ return `[Function: ${value.name || "anonymous"}]`;
169
+ }
170
+ if (at.open.has(value))
171
+ return "[Circular]";
172
+ at.open.add(value);
173
+ try {
174
+ return this._formatObject(value, at);
175
+ }
176
+ catch (error) {
177
+ // The container's *shape* would not be read — `Object.keys`, an iterator,
178
+ // `toString`. Nothing can be enumerated, so the whole container degrades;
179
+ // a value that merely would not be read degrades alone, in `_at`.
180
+ return threw(error);
181
+ }
182
+ finally {
183
+ at.open.delete(value);
184
+ }
185
+ }
186
+ /**
187
+ * One position's value, or the marker for why reading it failed.
188
+ *
189
+ * A key and an index are the same job — read one slot of a container someone
190
+ * else built — so they share one method rather than two that must agree.
191
+ * [LAW:one-type-per-behavior] This is also the read that costs the least when
192
+ * it fails: neighbours are unaffected, so `{ a: 1, b: [Threw: …], c: 3 }`
193
+ * still shows everything that could be read.
194
+ */
195
+ _at(container, key, at) {
196
+ try {
197
+ return this._format(container[key], at);
198
+ }
199
+ catch (error) {
200
+ return threw(error);
201
+ }
202
+ }
203
+ /** The arms for a non-null object, with `value` already on the open path. */
204
+ _formatObject(value, at) {
205
+ const { maxWidth, open } = at;
206
+ const indentStr = " ".repeat(this.indent * at.inset);
207
+ const innerIndent = " ".repeat(this.indent * (at.inset + 1));
208
+ const deeper = { inset: at.inset + 1, level: at.level + 1, maxWidth, open };
209
+ const onOneLine = { inset: 0, level: at.level + 1, maxWidth, open };
210
+ const elements = indexedElements(value);
211
+ if (elements !== null) {
212
+ if (elements.length === 0)
213
+ return "[]";
214
+ if (at.level >= this.maxDepth)
215
+ return "[...]";
216
+ // Positions rather than values: each index is read through `_at`, so one
217
+ // throwing accessor costs its own slot instead of the whole sequence.
218
+ const shown = Math.min(elements.length, this.maxLength ?? elements.length);
219
+ const positions = Array.from({ length: shown }, (_, i) => i);
220
+ const remaining = elements.length - shown;
221
+ // Try compact first
222
+ if (!this.expandAll) {
223
+ const pieces = positions.map((i) => this._at(elements, i, onOneLine));
224
+ if (remaining > 0)
225
+ pieces.push(`... +${remaining}`);
226
+ const compact = "[" + pieces.join(", ") + "]";
227
+ if (cellLen(indentStr + compact) <= maxWidth)
228
+ return compact;
229
+ }
230
+ const parts = positions.map((i) => innerIndent + this._at(elements, i, deeper));
231
+ if (remaining > 0)
232
+ parts.push(innerIndent + `... +${remaining}`);
233
+ return "[\n" + parts.join(",\n") + "\n" + indentStr + "]";
234
+ }
235
+ if (value instanceof Map) {
236
+ if (value.size === 0)
237
+ return "Map {}";
238
+ if (at.level >= this.maxDepth)
239
+ return "Map {...}";
240
+ const items = take(value.entries(), this.maxLength ?? Infinity);
241
+ const parts = items.map(([k, v]) => innerIndent + this._format(k, deeper) + " => " + this._format(v, deeper));
242
+ const dropped = value.size - items.length;
243
+ if (dropped > 0)
244
+ parts.push(innerIndent + `... +${dropped}`);
245
+ return "Map {\n" + parts.join(",\n") + "\n" + indentStr + "}";
246
+ }
247
+ if (value instanceof Set) {
248
+ if (value.size === 0)
249
+ return "Set {}";
250
+ if (at.level >= this.maxDepth)
251
+ return "Set {...}";
252
+ const items = take(value, this.maxLength ?? Infinity);
253
+ const parts = items.map((v) => innerIndent + this._format(v, deeper));
254
+ const dropped = value.size - items.length;
255
+ if (dropped > 0)
256
+ parts.push(innerIndent + `... +${dropped}`);
257
+ return "Set {\n" + parts.join(",\n") + "\n" + indentStr + "}";
258
+ }
259
+ // Objects that answer the display question themselves. Sits below the
260
+ // Array/Map/Set arms deliberately: an array also overrides `toString`, but
261
+ // "1,2,3" is a poorer answer than the structural form above.
262
+ if (describesItself(value))
263
+ return String(value);
264
+ // Plain objects — no self-description, so the keys are the whole story.
265
+ {
266
+ const obj = value;
267
+ const keys = Object.keys(obj);
268
+ if (keys.length === 0)
269
+ return "{}";
270
+ if (at.level >= this.maxDepth)
271
+ return "{...}";
272
+ const items = this.maxLength !== undefined ? keys.slice(0, this.maxLength) : keys;
273
+ const remaining = this.maxLength !== undefined ? Math.max(0, keys.length - this.maxLength) : 0;
274
+ // Try compact
275
+ if (!this.expandAll) {
276
+ const pieces = items.map((k) => `${k}: ${this._at(obj, k, onOneLine)}`);
277
+ if (remaining > 0)
278
+ pieces.push(`... +${remaining}`);
279
+ const compact = "{ " + pieces.join(", ") + " }";
280
+ if (cellLen(indentStr + compact) <= maxWidth)
281
+ return compact;
282
+ }
283
+ const parts = items.map((k) => innerIndent + `${k}: ${this._at(obj, k, deeper)}`);
284
+ if (remaining > 0)
285
+ parts.push(innerIndent + `... +${remaining}`);
286
+ return "{\n" + parts.join(",\n") + "\n" + indentStr + "}";
287
+ }
288
+ }
289
+ _addIndentGuides(text) {
290
+ const guideStyle = Style.parse("repr.indent");
291
+ const lines = text.plain.split("\n");
292
+ let offset = 0;
293
+ for (const line of lines) {
294
+ const leadingSpaces = line.length - line.trimStart().length;
295
+ for (let i = 0; i < leadingSpaces; i += this.indent) {
296
+ if (i + offset < text.length) {
297
+ text.stylize(guideStyle, offset + i, offset + i + 1);
298
+ }
299
+ }
300
+ offset += line.length + 1; // +1 for newline
301
+ }
302
+ }
303
+ }
304
+ //# sourceMappingURL=pretty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pretty.js","sourceRoot":"","sources":["../../src/core/pretty.ts"],"names":[],"mappings":"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"}