@elench/testkit 0.1.114 → 0.1.115

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 (184) hide show
  1. package/lib/cli/assistant/app.mjs +4 -2
  2. package/lib/cli/assistant/session.mjs +5 -1
  3. package/lib/cli/assistant/state.mjs +1 -2
  4. package/lib/cli/components/blocks/run-tree.mjs +7 -2
  5. package/lib/cli/components/hooks/use-element-layout.mjs +63 -0
  6. package/lib/cli/components/hooks/use-spinner-frame.mjs +26 -0
  7. package/node_modules/@alcalzone/ansi-tokenize/README.md +0 -5
  8. package/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.d.ts +8 -0
  9. package/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.js +10 -8
  10. package/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.js.map +1 -1
  11. package/node_modules/@alcalzone/ansi-tokenize/build/tokenize.d.ts +1 -5
  12. package/node_modules/@alcalzone/ansi-tokenize/build/tokenize.js +9 -45
  13. package/node_modules/@alcalzone/ansi-tokenize/build/tokenize.js.map +1 -1
  14. package/node_modules/@alcalzone/ansi-tokenize/package.json +1 -1
  15. package/node_modules/@elench/next-analysis/package.json +1 -1
  16. package/node_modules/@elench/testkit-bridge/package.json +2 -2
  17. package/node_modules/@elench/testkit-protocol/package.json +1 -1
  18. package/node_modules/@elench/ts-analysis/package.json +1 -1
  19. package/node_modules/cli-boxes/index.d.ts +95 -90
  20. package/node_modules/cli-boxes/index.js +5 -2
  21. package/node_modules/cli-boxes/package.json +6 -13
  22. package/node_modules/cli-boxes/readme.md +15 -3
  23. package/node_modules/cli-truncate/index.d.ts +1 -1
  24. package/node_modules/cli-truncate/package.json +4 -4
  25. package/node_modules/cli-truncate/readme.md +1 -0
  26. package/node_modules/ink/build/apply-styles.js +175 -0
  27. package/node_modules/ink/build/build-layout.js +77 -0
  28. package/node_modules/ink/build/calculate-wrapped-text.js +53 -0
  29. package/node_modules/ink/build/components/App.d.ts +1 -4
  30. package/node_modules/ink/build/components/App.js +22 -142
  31. package/node_modules/ink/build/components/App.js.map +1 -1
  32. package/node_modules/ink/build/components/AppContext.d.ts +3 -23
  33. package/node_modules/ink/build/components/AppContext.js +4 -7
  34. package/node_modules/ink/build/components/AppContext.js.map +1 -1
  35. package/node_modules/ink/build/components/Box.d.ts +3 -16
  36. package/node_modules/ink/build/components/Color.js +62 -0
  37. package/node_modules/ink/build/components/Cursor.d.ts +83 -0
  38. package/node_modules/ink/build/components/Cursor.js +53 -0
  39. package/node_modules/ink/build/components/Cursor.js.map +1 -0
  40. package/node_modules/ink/build/components/ErrorBoundary.d.ts +2 -2
  41. package/node_modules/ink/build/components/ErrorOverview.js +6 -6
  42. package/node_modules/ink/build/components/ErrorOverview.js.map +1 -1
  43. package/node_modules/ink/build/components/Static.js.map +1 -1
  44. package/node_modules/ink/build/components/StdinContext.d.ts +1 -7
  45. package/node_modules/ink/build/components/StdinContext.js +0 -1
  46. package/node_modules/ink/build/components/StdinContext.js.map +1 -1
  47. package/node_modules/ink/build/components/Text.d.ts +1 -1
  48. package/node_modules/ink/build/components/Text.js +1 -1
  49. package/node_modules/ink/build/components/Text.js.map +1 -1
  50. package/node_modules/ink/build/components/Transform.d.ts +1 -1
  51. package/node_modules/ink/build/devtools-window-polyfill.js +4 -7
  52. package/node_modules/ink/build/devtools-window-polyfill.js.map +1 -1
  53. package/node_modules/ink/build/devtools.js +6 -31
  54. package/node_modules/ink/build/devtools.js.map +1 -1
  55. package/node_modules/ink/build/dom.d.ts +1 -5
  56. package/node_modules/ink/build/dom.js +1 -20
  57. package/node_modules/ink/build/dom.js.map +1 -1
  58. package/node_modules/ink/build/experimental/apply-style.js +140 -0
  59. package/node_modules/ink/build/experimental/dom.js +123 -0
  60. package/node_modules/ink/build/experimental/output.js +91 -0
  61. package/node_modules/ink/build/experimental/reconciler.js +141 -0
  62. package/node_modules/ink/build/experimental/renderer.js +81 -0
  63. package/node_modules/ink/build/hooks/use-app.d.ts +1 -1
  64. package/node_modules/ink/build/hooks/use-app.js +1 -1
  65. package/node_modules/ink/build/hooks/use-cursor.d.ts +1 -1
  66. package/node_modules/ink/build/hooks/use-cursor.js +1 -1
  67. package/node_modules/ink/build/hooks/use-focus-manager.d.ts +2 -17
  68. package/node_modules/ink/build/hooks/use-focus-manager.js +1 -2
  69. package/node_modules/ink/build/hooks/use-focus-manager.js.map +1 -1
  70. package/node_modules/ink/build/hooks/use-focus.d.ts +1 -2
  71. package/node_modules/ink/build/hooks/use-focus.js +4 -5
  72. package/node_modules/ink/build/hooks/use-focus.js.map +1 -1
  73. package/node_modules/ink/build/hooks/use-input.d.ts +1 -2
  74. package/node_modules/ink/build/hooks/use-input.js +80 -82
  75. package/node_modules/ink/build/hooks/use-input.js.map +1 -1
  76. package/node_modules/ink/build/hooks/use-is-screen-reader-enabled.d.ts +1 -2
  77. package/node_modules/ink/build/hooks/use-is-screen-reader-enabled.js +1 -2
  78. package/node_modules/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -1
  79. package/node_modules/ink/build/hooks/use-stderr.d.ts +1 -1
  80. package/node_modules/ink/build/hooks/use-stderr.js +1 -1
  81. package/node_modules/ink/build/hooks/use-stdin.d.ts +2 -4
  82. package/node_modules/ink/build/hooks/use-stdin.js +1 -2
  83. package/node_modules/ink/build/hooks/use-stdin.js.map +1 -1
  84. package/node_modules/ink/build/hooks/use-stdout.d.ts +1 -1
  85. package/node_modules/ink/build/hooks/use-stdout.js +1 -1
  86. package/node_modules/ink/build/hooks/useInput.js +38 -0
  87. package/node_modules/ink/build/index.d.ts +1 -8
  88. package/node_modules/ink/build/index.js +0 -4
  89. package/node_modules/ink/build/index.js.map +1 -1
  90. package/node_modules/ink/build/ink.d.ts +3 -48
  91. package/node_modules/ink/build/ink.js +155 -325
  92. package/node_modules/ink/build/ink.js.map +1 -1
  93. package/node_modules/ink/build/input-parser.d.ts +1 -4
  94. package/node_modules/ink/build/input-parser.js +30 -70
  95. package/node_modules/ink/build/input-parser.js.map +1 -1
  96. package/node_modules/ink/build/instance.js +205 -0
  97. package/node_modules/ink/build/layout.d.ts +7 -0
  98. package/node_modules/ink/build/layout.js +33 -0
  99. package/node_modules/ink/build/layout.js.map +1 -0
  100. package/node_modules/ink/build/log-update.d.ts +0 -1
  101. package/node_modules/ink/build/log-update.js +1 -13
  102. package/node_modules/ink/build/log-update.js.map +1 -1
  103. package/node_modules/ink/build/measure-element.d.ts +0 -4
  104. package/node_modules/ink/build/measure-element.js +0 -4
  105. package/node_modules/ink/build/measure-element.js.map +1 -1
  106. package/node_modules/ink/build/options.d.ts +52 -0
  107. package/node_modules/ink/build/options.js +2 -0
  108. package/node_modules/ink/build/options.js.map +1 -0
  109. package/node_modules/ink/build/output.js +0 -25
  110. package/node_modules/ink/build/output.js.map +1 -1
  111. package/node_modules/ink/build/parse-keypress.d.ts +3 -1
  112. package/node_modules/ink/build/parse-keypress.js +17 -19
  113. package/node_modules/ink/build/parse-keypress.js.map +1 -1
  114. package/node_modules/ink/build/reconciler.js +27 -46
  115. package/node_modules/ink/build/reconciler.js.map +1 -1
  116. package/node_modules/ink/build/render-border.js +18 -29
  117. package/node_modules/ink/build/render-border.js.map +1 -1
  118. package/node_modules/ink/build/render-to-string.js +1 -2
  119. package/node_modules/ink/build/render-to-string.js.map +1 -1
  120. package/node_modules/ink/build/render.d.ts +2 -57
  121. package/node_modules/ink/build/render.js +11 -18
  122. package/node_modules/ink/build/render.js.map +1 -1
  123. package/node_modules/ink/build/screen-reader-update.d.ts +13 -0
  124. package/node_modules/ink/build/screen-reader-update.js +38 -0
  125. package/node_modules/ink/build/screen-reader-update.js.map +1 -0
  126. package/node_modules/ink/build/styles.d.ts +16 -78
  127. package/node_modules/ink/build/styles.js +31 -102
  128. package/node_modules/ink/build/styles.js.map +1 -1
  129. package/node_modules/ink/build/utils.d.ts +2 -9
  130. package/node_modules/ink/build/utils.js +3 -18
  131. package/node_modules/ink/build/utils.js.map +1 -1
  132. package/node_modules/ink/build/wrap-text.js +0 -7
  133. package/node_modules/ink/build/wrap-text.js.map +1 -1
  134. package/node_modules/ink/build/write-synchronized.d.ts +1 -1
  135. package/node_modules/ink/build/write-synchronized.js +2 -4
  136. package/node_modules/ink/build/write-synchronized.js.map +1 -1
  137. package/node_modules/ink/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
  138. package/node_modules/ink/node_modules/emoji-regex/README.md +107 -0
  139. package/node_modules/ink/node_modules/emoji-regex/index.d.ts +3 -0
  140. package/node_modules/ink/node_modules/emoji-regex/index.js +4 -0
  141. package/node_modules/ink/node_modules/emoji-regex/index.mjs +4 -0
  142. package/node_modules/ink/node_modules/emoji-regex/package.json +45 -0
  143. package/node_modules/{wrap-ansi → ink/node_modules/wrap-ansi}/index.d.ts +1 -1
  144. package/node_modules/ink/node_modules/wrap-ansi/index.js +222 -0
  145. package/node_modules/ink/node_modules/wrap-ansi/node_modules/string-width/index.d.ts +39 -0
  146. package/node_modules/ink/node_modules/wrap-ansi/node_modules/string-width/index.js +82 -0
  147. package/node_modules/ink/node_modules/wrap-ansi/node_modules/string-width/license +9 -0
  148. package/node_modules/ink/node_modules/wrap-ansi/node_modules/string-width/package.json +64 -0
  149. package/node_modules/ink/node_modules/wrap-ansi/node_modules/string-width/readme.md +66 -0
  150. package/node_modules/{wrap-ansi → ink/node_modules/wrap-ansi}/package.json +11 -11
  151. package/node_modules/{wrap-ansi → ink/node_modules/wrap-ansi}/readme.md +0 -2
  152. package/node_modules/ink/package.json +98 -34
  153. package/node_modules/ink/readme.md +48 -554
  154. package/node_modules/slice-ansi/index.d.ts +1 -1
  155. package/node_modules/slice-ansi/index.js +89 -146
  156. package/node_modules/slice-ansi/package.json +5 -5
  157. package/node_modules/slice-ansi/readme.md +0 -1
  158. package/node_modules/slice-ansi/tokenize-ansi.js +1 -1
  159. package/package.json +11 -10
  160. package/packages/testkit-bridge/node_modules/@elench/testkit-protocol/dist/index.d.ts +188 -0
  161. package/packages/testkit-bridge/node_modules/@elench/testkit-protocol/dist/index.d.ts.map +1 -0
  162. package/packages/testkit-bridge/node_modules/@elench/testkit-protocol/dist/index.js +293 -0
  163. package/packages/testkit-bridge/node_modules/@elench/testkit-protocol/dist/index.js.map +1 -0
  164. package/packages/testkit-bridge/node_modules/@elench/testkit-protocol/package.json +25 -0
  165. package/node_modules/@alcalzone/ansi-tokenize/build/consts.d.ts +0 -17
  166. package/node_modules/@alcalzone/ansi-tokenize/build/consts.js +0 -28
  167. package/node_modules/@alcalzone/ansi-tokenize/build/consts.js.map +0 -1
  168. package/node_modules/ink/build/components/AnimationContext.d.ts +0 -9
  169. package/node_modules/ink/build/components/AnimationContext.js +0 -13
  170. package/node_modules/ink/build/components/AnimationContext.js.map +0 -1
  171. package/node_modules/ink/build/hooks/use-animation.d.ts +0 -49
  172. package/node_modules/ink/build/hooks/use-animation.js +0 -87
  173. package/node_modules/ink/build/hooks/use-animation.js.map +0 -1
  174. package/node_modules/ink/build/hooks/use-box-metrics.d.ts +0 -59
  175. package/node_modules/ink/build/hooks/use-box-metrics.js +0 -88
  176. package/node_modules/ink/build/hooks/use-box-metrics.js.map +0 -1
  177. package/node_modules/ink/build/hooks/use-paste.d.ts +0 -35
  178. package/node_modules/ink/build/hooks/use-paste.js +0 -62
  179. package/node_modules/ink/build/hooks/use-paste.js.map +0 -1
  180. package/node_modules/ink/build/hooks/use-window-size.d.ts +0 -18
  181. package/node_modules/ink/build/hooks/use-window-size.js +0 -22
  182. package/node_modules/ink/build/hooks/use-window-size.js.map +0 -1
  183. package/node_modules/wrap-ansi/index.js +0 -468
  184. /package/node_modules/{wrap-ansi → ink/node_modules/wrap-ansi}/license +0 -0
@@ -1,7 +1,8 @@
1
1
  import React, { createElement, useEffect, useMemo, useRef, useState } from "react";
2
- import { Box, Text, useApp, useBoxMetrics, useCursor, useInput, useStdout } from "ink";
2
+ import { Box, Text, useApp, useCursor, useInput, useStdout } from "ink";
3
3
  import { bold, cyan, dim, green, red, yellow } from "../terminal/colors.mjs";
4
4
  import { RunTreeView } from "../components/blocks/run-tree.mjs";
5
+ import { useElementLayout } from "../components/hooks/use-element-layout.mjs";
5
6
  import { colorCodeLine } from "./code-block.mjs";
6
7
  import { getComposerDisplayModel } from "./composer.mjs";
7
8
  import { MarkdownBlock } from "./markdown-block.mjs";
@@ -370,7 +371,8 @@ function colorCommandStatus(block, status) {
370
371
 
371
372
  function ComposerBar({ view, busy }) {
372
373
  const ref = useRef(null);
373
- const metrics = useBoxMetrics(ref);
374
+ const { stdout } = useStdout();
375
+ const metrics = useElementLayout(ref, { stdout });
374
376
  const { setCursorPosition } = useCursor();
375
377
  const display = getComposerDisplayModel(
376
378
  {
@@ -81,7 +81,11 @@ export async function runAssistantConversationTurn({
81
81
  onEvent(event) {
82
82
  appendProviderTrace(tracePath, event);
83
83
  onProviderEvent?.(event);
84
- if (event.type === "status" || event.type === "tool-start" || event.type === "tool-update" || event.type === "tool-end") {
84
+ if (
85
+ event.display !== false &&
86
+ !event.transient &&
87
+ (event.type === "status" || event.type === "tool-start" || event.type === "tool-update" || event.type === "tool-end")
88
+ ) {
85
89
  onStatus?.(formatProviderEvent(event));
86
90
  }
87
91
  },
@@ -757,14 +757,13 @@ function createProviderTurnState() {
757
757
  assistantMessageId: null,
758
758
  assistantMessageIdsByProviderItem: new Map(),
759
759
  providerToolMessageIdsByProviderItem: new Map(),
760
- lastActivityText: null,
760
+ lastActivityText: null,
761
761
  };
762
762
  }
763
763
 
764
764
  function handleProviderEvent(turn, event, { appendMessage, updateMessage, setStatus } = {}) {
765
765
  if (!event) return;
766
766
  if (event.transient || event.display === false) {
767
- if (event.type === "status" && event.text) setStatus?.(event.text);
768
767
  return;
769
768
  }
770
769
  if (event.type === "assistant-delta") {
@@ -1,5 +1,5 @@
1
1
  import React, { createElement, useEffect, useMemo, useState } from "react";
2
- import { Box, Text, useAnimation, useApp, useInput } from "ink";
2
+ import { Box, Text, useApp, useInput } from "ink";
3
3
  import figures from "figures";
4
4
  import { formatDuration } from "../../../runner/formatting.mjs";
5
5
  import {
@@ -14,6 +14,7 @@ import {
14
14
  import { renderSummaryBox } from "../primitives/summary-box.mjs";
15
15
  import { getTerminalWidth } from "../../terminal/layout.mjs";
16
16
  import { renderFailureDetail, renderPassedDetail } from "../../renderers/run/inline-detail.mjs";
17
+ import { useSpinnerFrame } from "../hooks/use-spinner-frame.mjs";
17
18
 
18
19
  const SPINNER_FRAMES = ["|", "/", "-", "\\"];
19
20
 
@@ -27,7 +28,11 @@ export function RunTreeView({
27
28
  const { exit } = useApp();
28
29
  const controlledSnapshot = Boolean(snapshotOverride);
29
30
  const [snapshot, setSnapshot] = useState(() => snapshotOverride || runState.getSnapshot());
30
- const { frame } = useAnimation({ interval: 80, isActive: !controlledSnapshot && !snapshot.finished });
31
+ const frame = useSpinnerFrame({
32
+ frameCount: SPINNER_FRAMES.length,
33
+ intervalMs: 80,
34
+ isActive: !controlledSnapshot && !snapshot.finished,
35
+ });
31
36
  const spinnerFrame = SPINNER_FRAMES[frame % SPINNER_FRAMES.length];
32
37
 
33
38
  useEffect(() => {
@@ -0,0 +1,63 @@
1
+ import { useCallback, useEffect, useMemo, useState } from "react";
2
+
3
+ const EMPTY_LAYOUT = Object.freeze({
4
+ width: 0,
5
+ height: 0,
6
+ left: 0,
7
+ top: 0,
8
+ hasMeasured: false,
9
+ });
10
+
11
+ export function readElementLayout(ref) {
12
+ const node = ref?.current || null;
13
+ const rawLayout = node?.yogaNode?.getComputedLayout?.() || null;
14
+ if (!node || !rawLayout) return EMPTY_LAYOUT;
15
+
16
+ return {
17
+ width: normalizeLayoutNumber(rawLayout.width),
18
+ height: normalizeLayoutNumber(rawLayout.height),
19
+ left: normalizeLayoutNumber(rawLayout.left),
20
+ top: normalizeLayoutNumber(rawLayout.top),
21
+ hasMeasured: true,
22
+ };
23
+ }
24
+
25
+ export function layoutsEqual(left, right) {
26
+ return (
27
+ left.width === right.width &&
28
+ left.height === right.height &&
29
+ left.left === right.left &&
30
+ left.top === right.top &&
31
+ left.hasMeasured === right.hasMeasured
32
+ );
33
+ }
34
+
35
+ export function useElementLayout(ref, { stdout } = {}) {
36
+ const [layout, setLayout] = useState(EMPTY_LAYOUT);
37
+
38
+ const updateLayout = useCallback(() => {
39
+ const nextLayout = readElementLayout(ref);
40
+ setLayout((currentLayout) => layoutsEqual(currentLayout, nextLayout) ? currentLayout : nextLayout);
41
+ }, [ref]);
42
+
43
+ useEffect(updateLayout);
44
+
45
+ useEffect(() => {
46
+ if (!stdout?.on) return undefined;
47
+
48
+ stdout.on("resize", updateLayout);
49
+ return () => {
50
+ if (stdout.off) {
51
+ stdout.off("resize", updateLayout);
52
+ return;
53
+ }
54
+ stdout.removeListener?.("resize", updateLayout);
55
+ };
56
+ }, [stdout, updateLayout]);
57
+
58
+ return useMemo(() => layout, [layout]);
59
+ }
60
+
61
+ function normalizeLayoutNumber(value) {
62
+ return Number.isFinite(value) ? value : 0;
63
+ }
@@ -0,0 +1,26 @@
1
+ import { useEffect, useState } from "react";
2
+
3
+ export function nextSpinnerFrame(frame, frameCount) {
4
+ const normalizedFrameCount = Number.isInteger(frameCount) && frameCount > 0 ? frameCount : 1;
5
+ return (frame + 1) % normalizedFrameCount;
6
+ }
7
+
8
+ export function useSpinnerFrame({
9
+ frameCount,
10
+ intervalMs = 80,
11
+ isActive = true,
12
+ } = {}) {
13
+ const [frame, setFrame] = useState(0);
14
+
15
+ useEffect(() => {
16
+ if (!isActive) return undefined;
17
+
18
+ const timer = setInterval(() => {
19
+ setFrame((currentFrame) => nextSpinnerFrame(currentFrame, frameCount));
20
+ }, intervalMs);
21
+
22
+ return () => clearInterval(timer);
23
+ }, [frameCount, intervalMs, isActive]);
24
+
25
+ return frame;
26
+ }
@@ -231,11 +231,6 @@ This automatically figures out the least amount of escape codes necessary to ach
231
231
  Placeholder for next release:
232
232
  ### __WORK IN PROGRESS__
233
233
  -->
234
- ### 0.3.0 (2026-02-20)
235
-
236
- - Fix: preserve non-hyperlink OSC sequences when tokenizing (#54)
237
- - Fix: support ST-terminated OSC hyperlinks (#53)
238
-
239
234
  ### 0.2.5 (2026-02-11)
240
235
 
241
236
  - Fix: preserve grapheme clusters when tokenizing (#51)
@@ -1,5 +1,13 @@
1
1
  import type { AnsiCode } from "./tokenize.js";
2
+ export declare const ESCAPES: Set<number>;
3
+ export declare const CSI: number;
4
+ export declare const OSC: number;
2
5
  export declare const endCodesSet: Set<string>;
6
+ export declare const linkCodePrefix = "\u001B]8;";
7
+ export declare const linkCodePrefixCharCodes: number[];
8
+ export declare const linkCodeSuffix = "\u0007";
9
+ export declare const linkCodeSuffixCharCode: number;
10
+ export declare const linkEndCode: string;
3
11
  export declare function getLinkStartCode(url: string, params?: Record<string, string>): string;
4
12
  export declare function getEndCode(code: string): string;
5
13
  export declare function ansiCodesToString(codes: AnsiCode[]): string;
@@ -1,11 +1,18 @@
1
1
  import ansiStyles from "ansi-styles";
2
- import { linkCodePrefix, linkCodeSuffix, linkEndCode, linkEndCodeC1ST, linkEndCodeST, } from "./consts.js";
2
+ export const ESCAPES = new Set([27, 155]); // \x1b and \x9b
3
+ export const CSI = "[".codePointAt(0);
4
+ export const OSC = "]".codePointAt(0);
3
5
  export const endCodesSet = new Set();
4
6
  const endCodesMap = new Map();
5
7
  for (const [start, end] of ansiStyles.codes) {
6
8
  endCodesSet.add(ansiStyles.color.ansi(end));
7
9
  endCodesMap.set(ansiStyles.color.ansi(start), ansiStyles.color.ansi(end));
8
10
  }
11
+ export const linkCodePrefix = "\x1B]8;"; // OSC 8 link prefix (params and URL follow)
12
+ export const linkCodePrefixCharCodes = linkCodePrefix.split("").map((char) => char.charCodeAt(0));
13
+ export const linkCodeSuffix = "\x07";
14
+ export const linkCodeSuffixCharCode = linkCodeSuffix.charCodeAt(0);
15
+ export const linkEndCode = `\x1B]8;;${linkCodeSuffix}`;
9
16
  export function getLinkStartCode(url, params) {
10
17
  const paramsStr = params
11
18
  ? Object.entries(params)
@@ -21,13 +28,8 @@ export function getEndCode(code) {
21
28
  return endCodesMap.get(code);
22
29
  // We have a few special cases to handle here:
23
30
  // Links:
24
- if (code.startsWith(linkCodePrefix)) {
25
- if (code.endsWith("\x1B\\"))
26
- return linkEndCodeST;
27
- if (code.endsWith("\x9C"))
28
- return linkEndCodeC1ST;
29
- return linkEndCode; // BEL (\x07)
30
- }
31
+ if (code.startsWith(linkCodePrefix))
32
+ return linkEndCode;
31
33
  code = code.slice(2);
32
34
  // 8-bit/24-bit colors:
33
35
  if (code.startsWith("38")) {
@@ -1 +1 @@
1
- {"version":3,"file":"ansiCodes.js","sourceRoot":"","sources":["../src/ansiCodes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ansiCodes.js","sourceRoot":"","sources":["../src/ansiCodes.ts"],"names":[],"mappings":"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"}
@@ -3,14 +3,10 @@ export interface AnsiCode {
3
3
  code: string;
4
4
  endCode: string;
5
5
  }
6
- export interface ControlCode {
7
- type: "control";
8
- code: string;
9
- }
10
6
  export interface Char {
11
7
  type: "char";
12
8
  value: string;
13
9
  fullWidth: boolean;
14
10
  }
15
- export type Token = AnsiCode | ControlCode | Char;
11
+ export type Token = AnsiCode | Char;
16
12
  export declare function tokenize(str: string, endChar?: number): Token[];
@@ -1,6 +1,5 @@
1
1
  import isFullwidthCodePoint from "is-fullwidth-code-point";
2
- import { getEndCode } from "./ansiCodes.js";
3
- import { CC_0, CC_9, CC_BEL, CC_BACKSLASH, CC_C1_ST, CC_ESC, CC_M, CC_CSI, CC_OSC, CC_SEMI, ESCAPES, linkCodePrefix, linkCodePrefixCharCodes, } from "./consts.js";
2
+ import { CSI, ESCAPES, getEndCode, linkCodePrefix, linkCodePrefixCharCodes, OSC, } from "./ansiCodes.js";
4
3
  const segmenter = new Intl.Segmenter(undefined, { granularity: "grapheme" });
5
4
  function isFullwidthGrapheme(grapheme, baseCodePoint) {
6
5
  if (isFullwidthCodePoint(baseCodePoint))
@@ -26,38 +25,15 @@ function parseLinkCode(string, offset) {
26
25
  if (paramsEndIndex === -1)
27
26
  return undefined;
28
27
  // This is a link code (with or without the URL part). Find the end of it.
29
- const endIndex = findOSCTerminatorIndex(string, paramsEndIndex + 1);
30
- if (endIndex === -1)
31
- return undefined;
32
- return string.slice(0, endIndex + 1);
33
- }
34
- // HOT PATH: Generic fallback for non-link OSC sequences (window title, notifications, etc.)
35
- function parseOSCSequence(string, offset) {
36
- string = string.slice(offset);
37
- // Find the OSC terminator (starting after "ESC ]")
38
- const endIndex = findOSCTerminatorIndex(string, 2);
28
+ const endIndex = string.indexOf("\x07", paramsEndIndex + 1);
39
29
  if (endIndex === -1)
40
30
  return undefined;
41
31
  return string.slice(0, endIndex + 1);
42
32
  }
43
- /**
44
- * Finds the index of the last character of the first OSC terminator at or after startIndex.
45
- * Recognizes BEL (\x07), C1 ST (\x9C), and ESC+backslash (\x1B\x5C).
46
- * Returns -1 if no terminator is found.
47
- */
48
- function findOSCTerminatorIndex(string, startIndex) {
49
- for (let i = startIndex; i < string.length; i++) {
50
- const ch = string.charCodeAt(i);
51
- if (ch === CC_BEL)
52
- return i;
53
- if (ch === CC_C1_ST)
54
- return i;
55
- if (ch === CC_ESC && i + 1 < string.length && string.charCodeAt(i + 1) === CC_BACKSLASH) {
56
- return i + 1;
57
- }
58
- }
59
- return -1;
60
- }
33
+ const CC_0 = "0".charCodeAt(0);
34
+ const CC_9 = "9".charCodeAt(0);
35
+ const CC_SEMI = ";".charCodeAt(0);
36
+ const CC_M = "m".charCodeAt(0);
61
37
  /**
62
38
  * Scans through the given string and finds the index of the last character of an SGR sequence
63
39
  * like `\x1B[38;2;123;123;123m`. This assumes that the string has been checked to start with `\x1B[`.
@@ -135,30 +111,18 @@ export function tokenize(str, endChar = Number.POSITIVE_INFINITY) {
135
111
  let code;
136
112
  // Peek the next code point to determine the type of ANSI sequence
137
113
  const nextCodePoint = str.codePointAt(index + 1);
138
- if (nextCodePoint === CC_OSC) {
139
- // ] = operating system commands
114
+ if (nextCodePoint === OSC) {
115
+ // ] = operating system commands, like links
140
116
  code = parseLinkCode(str, index);
141
117
  if (code) {
142
- // OSC 8 hyperlinks are paired codes with an endCode
143
118
  ret.push({
144
119
  type: "ansi",
145
120
  code: code,
146
121
  endCode: getEndCode(code),
147
122
  });
148
123
  }
149
- else {
150
- // Other OSC sequences (window title, etc.) are self-contained
151
- // control codes with no endCode.
152
- code = parseOSCSequence(str, index);
153
- if (code) {
154
- ret.push({
155
- type: "control",
156
- code: code,
157
- });
158
- }
159
- }
160
124
  }
161
- else if (nextCodePoint === CC_CSI) {
125
+ else if (nextCodePoint === CSI) {
162
126
  // [ = control sequence introducer, like SGR sequences [...m
163
127
  code = parseSGRSequence(str, index);
164
128
  if (code) {
@@ -1 +1 @@
1
- {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../src/tokenize.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EACN,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,cAAc,EACd,uBAAuB,GACvB,MAAM,aAAa,CAAC;AAErB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAE7E,SAAS,mBAAmB,CAAC,QAAgB,EAAE,aAAqB;IACnE,IAAI,oBAAoB,CAAC,aAAa,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,mEAAmE;IACnE,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,4DAA4D;IAC5D,IAAI,aAAa,IAAI,OAAO,IAAI,aAAa,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC;IACtE,OAAO,KAAK,CAAC;AACd,CAAC;AAqBD,+EAA+E;AAC/E,SAAS,aAAa,CAAC,MAAc,EAAE,MAAc;IACpD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACpE,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,uBAAuB,CAAC,KAAK,CAAC,EAAE;YAChE,OAAO,SAAS,CAAC;SACjB;KACD;IACD,sCAAsC;IACtC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAClE,IAAI,cAAc,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;IACpE,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAEtC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,4FAA4F;AAC5F,SAAS,gBAAgB,CAAC,MAAc,EAAE,MAAc;IACvD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,mDAAmD;IACnD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnD,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,MAAc,EAAE,UAAkB;IACjE,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAChD,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,EAAE,KAAK,MAAM;YAAE,OAAO,CAAC,CAAC;QAC5B,IAAI,EAAE,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,EAAE,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,YAAY,EAAE;YACxF,OAAO,CAAC,GAAG,CAAC,CAAC;SACb;KACD;IACD,OAAO,CAAC,CAAC,CAAC;AACX,CAAC;AAED;;;;GAIG;AACH,SAAS,uBAAuB,CAAC,GAAW;IAC3C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChD,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvC,sCAAsC;QACtC,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACpC,kCAAkC;QAClC,IAAI,QAAQ,KAAK,OAAO;YAAE,SAAS;QACnC,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI;YAAE,SAAS;QACnD,6BAA6B;QAC7B,MAAM;KACN;IAED,OAAO,CAAC,CAAC,CAAC;AACX,CAAC;AAED,+EAA+E;AAC/E,SAAS,gBAAgB,CAAC,MAAc,EAAE,MAAc;IACvD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO;IAE5B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,IAAY;IAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACxB,sBAAsB;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC;KACd;IAED,MAAM,SAAS,GAAG,IAAI;QACrB,6CAA6C;SAC5C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACZ,KAAK,CAAC,GAAG,CAAC,CAAC;IAEb,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,uEAAuE;QACvE,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,EAAE;YACzC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;gBACzD,0CAA0C;gBAC1C,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9C,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;aACT;iBAAM,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;gBAChE,0CAA0C;gBAC1C,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9C,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;aACT;SACD;QAED,gDAAgD;QAChD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAClB;IAED,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,UAAkB,MAAM,CAAC,iBAAiB;IAC/E,MAAM,GAAG,GAAY,EAAE,CAAC;IACxB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACxD,qDAAqD;QACrD,IAAI,KAAK,GAAG,YAAY;YAAE,SAAS;QAEnC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAE1C,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC3B,IAAI,IAAwB,CAAC;YAE7B,kEAAkE;YAClE,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,aAAa,KAAK,MAAM,EAAE;gBAC7B,gCAAgC;gBAChC,IAAI,GAAG,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACjC,IAAI,IAAI,EAAE;oBACT,oDAAoD;oBACpD,GAAG,CAAC,IAAI,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC;qBACzB,CAAC,CAAC;iBACH;qBAAM;oBACN,8DAA8D;oBAC9D,iCAAiC;oBACjC,IAAI,GAAG,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACpC,IAAI,IAAI,EAAE;wBACT,GAAG,CAAC,IAAI,CAAC;4BACR,IAAI,EAAE,SAAS;4BACf,IAAI,EAAE,IAAI;yBACV,CAAC,CAAC;qBACH;iBACD;aACD;iBAAM,IAAI,aAAa,KAAK,MAAM,EAAE;gBACpC,4DAA4D;gBAC5D,IAAI,GAAG,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACpC,IAAI,IAAI,EAAE;oBACT,8CAA8C;oBAC9C,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;oBAC9C,KAAK,MAAM,cAAc,IAAI,KAAK,EAAE;wBACnC,GAAG,CAAC,IAAI,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,cAAc;4BACpB,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC;yBACnC,CAAC,CAAC;qBACH;iBACD;aACD;YAED,IAAI,IAAI,EAAE;gBACT,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;gBACnC,SAAS;aACT;SACD;QAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE1D,GAAG,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,OAAO;YACd,SAAS;SACT,CAAC,CAAC;QAEH,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7B,IAAI,OAAO,IAAI,OAAO,EAAE;YACvB,MAAM;SACN;KACD;IAED,OAAO,GAAG,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../src/tokenize.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alcalzone/ansi-tokenize",
3
- "version": "0.3.0",
3
+ "version": "0.2.5",
4
4
  "description": "Efficiently modify strings containing ANSI escape codes",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elench/next-analysis",
3
- "version": "0.1.114",
3
+ "version": "0.1.115",
4
4
  "description": "SWC-backed Next.js source analysis primitives for Erench tools",
5
5
  "type": "module",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elench/testkit-bridge",
3
- "version": "0.1.114",
3
+ "version": "0.1.115",
4
4
  "description": "Browser bridge helpers for testkit",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "typecheck": "tsc -p tsconfig.json --noEmit"
23
23
  },
24
24
  "dependencies": {
25
- "@elench/testkit-protocol": "0.1.114"
25
+ "@elench/testkit-protocol": "0.1.115"
26
26
  },
27
27
  "private": false
28
28
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elench/testkit-protocol",
3
- "version": "0.1.114",
3
+ "version": "0.1.115",
4
4
  "description": "Shared browser protocol for testkit bridge and extension consumers",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elench/ts-analysis",
3
- "version": "0.1.114",
3
+ "version": "0.1.115",
4
4
  "description": "TypeScript compiler-backed source analysis primitives for Erench tools",
5
5
  "type": "module",
6
6
  "exports": {
@@ -1,108 +1,110 @@
1
- /**
2
- Style of the box border.
3
- */
4
- export type BoxStyle = {
5
- readonly topLeft: string;
6
- readonly top: string;
7
- readonly topRight: string;
8
- readonly right: string;
9
- readonly bottomRight: string;
10
- readonly bottom: string;
11
- readonly bottomLeft: string;
12
- readonly left: string;
13
- };
14
-
15
- /**
16
- All box styles.
17
- */
18
- export type Boxes = {
1
+ declare namespace cliBoxes {
19
2
  /**
20
- @example
21
- ```
22
- ┌────┐
23
- │ │
24
- └────┘
25
- ```
3
+ Style of the box border.
26
4
  */
27
- readonly single: BoxStyle;
5
+ interface BoxStyle {
6
+ readonly topLeft: string;
7
+ readonly top: string;
8
+ readonly topRight: string;
9
+ readonly right: string;
10
+ readonly bottomRight: string;
11
+ readonly bottom: string;
12
+ readonly bottomLeft: string;
13
+ readonly left: string;
14
+ }
28
15
 
29
16
  /**
30
- @example
31
- ```
32
- ╔════╗
33
- ║ ║
34
- ╚════╝
35
- ```
17
+ All box styles.
36
18
  */
37
- readonly double: BoxStyle;
19
+ interface Boxes {
20
+ /**
21
+ @example
22
+ ```
23
+ ┌────┐
24
+ │ │
25
+ └────┘
26
+ ```
27
+ */
28
+ readonly single: BoxStyle;
38
29
 
39
- /**
40
- @example
41
- ```
42
- ╭────╮
43
-
44
- ╰────╯
45
- ```
46
- */
47
- readonly round: BoxStyle;
30
+ /**
31
+ @example
32
+ ```
33
+ ╔════╗
34
+
35
+ ╚════╝
36
+ ```
37
+ */
38
+ readonly double: BoxStyle;
48
39
 
49
- /**
50
- @example
51
- ```
52
- ┏━━━━┓
53
-
54
- ┗━━━━┛
55
- ```
56
- */
57
- readonly bold: BoxStyle;
40
+ /**
41
+ @example
42
+ ```
43
+ ╭────╮
44
+
45
+ ╰────╯
46
+ ```
47
+ */
48
+ readonly round: BoxStyle;
58
49
 
59
- /**
60
- @example
61
- ```
62
- ╓────╖
63
-
64
- ╙────╜
65
- ```
66
- */
67
- readonly singleDouble: BoxStyle;
50
+ /**
51
+ @example
52
+ ```
53
+ ┏━━━━┓
54
+
55
+ ┗━━━━┛
56
+ ```
57
+ */
58
+ readonly bold: BoxStyle;
68
59
 
69
- /**
70
- @example
71
- ```
72
- ╒════╕
73
-
74
- ╘════╛
75
- ```
76
- */
77
- readonly doubleSingle: BoxStyle;
60
+ /**
61
+ @example
62
+ ```
63
+ ╓────╖
64
+
65
+ ╙────╜
66
+ ```
67
+ */
68
+ readonly singleDouble: BoxStyle;
78
69
 
79
- /**
80
- @example
81
- ```
82
- +----+
83
- | |
84
- +----+
85
- ```
86
- */
87
- readonly classic: BoxStyle;
70
+ /**
71
+ @example
72
+ ```
73
+ ╒════╕
74
+
75
+ ╘════╛
76
+ ```
77
+ */
78
+ readonly doubleSingle: BoxStyle;
88
79
 
89
- /**
90
- @example
91
- ```
92
- ↘↓↓↓↓↙
93
-
94
- ↗↑↑↑↑↖
95
- ```
96
- */
97
- readonly arrow: BoxStyle;
98
- };
80
+ /**
81
+ @example
82
+ ```
83
+ +----+
84
+ | |
85
+ +----+
86
+ ```
87
+ */
88
+ readonly classic: BoxStyle;
89
+
90
+ /**
91
+ @example
92
+ ```
93
+ ↘↓↓↓↓↙
94
+ → ←
95
+ ↗↑↑↑↑↖
96
+ ```
97
+ */
98
+ readonly arrow: BoxStyle;
99
+ }
100
+ }
99
101
 
100
102
  /**
101
103
  Boxes for use in the terminal.
102
104
 
103
105
  @example
104
106
  ```
105
- import cliBoxes from 'cli-boxes';
107
+ import cliBoxes = require('cli-boxes');
106
108
 
107
109
  console.log(cliBoxes.single);
108
110
  // {
@@ -117,6 +119,9 @@ console.log(cliBoxes.single);
117
119
  // }
118
120
  ```
119
121
  */
120
- declare const cliBoxes: Boxes;
122
+ declare const cliBoxes: cliBoxes.Boxes & {
123
+ // TODO: Remove this for the next major release
124
+ default: typeof cliBoxes;
125
+ };
121
126
 
122
- export default cliBoxes;
127
+ export = cliBoxes;
@@ -1,3 +1,6 @@
1
- import cliBoxes from './boxes.json' with {type: 'json'};
1
+ 'use strict';
2
+ const cliBoxes = require('./boxes.json');
2
3
 
3
- export default cliBoxes;
4
+ module.exports = cliBoxes;
5
+ // TODO: Remove this for the next major release
6
+ module.exports.default = cliBoxes;