@tui-sandbox/library 12.4.1 → 12.5.1
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/dist/src/client/drawTextBox.js +7 -6
- package/dist/src/client/drawTextBox.js.map +1 -1
- package/dist/src/client/drawTextBox.test.js +41 -0
- package/dist/src/client/drawTextBox.test.js.map +1 -1
- package/dist/src/client/extractTerminalContent.d.ts +2 -0
- package/dist/src/client/extractTerminalContent.js +11 -0
- package/dist/src/client/extractTerminalContent.js.map +1 -0
- package/dist/src/client/extractTerminalContent.test.d.ts +1 -0
- package/dist/src/client/extractTerminalContent.test.js +29 -0
- package/dist/src/client/extractTerminalContent.test.js.map +1 -0
- package/dist/src/client/index.d.ts +2 -0
- package/dist/src/client/index.js +2 -0
- package/dist/src/client/index.js.map +1 -1
- package/dist/src/client/visualWidth.d.ts +1 -0
- package/dist/src/client/visualWidth.js +3 -0
- package/dist/src/client/visualWidth.js.map +1 -0
- package/dist/src/scripts/resolveTuiConfig.js +1 -1
- package/dist/src/scripts/resolveTuiConfig.js.map +1 -1
- package/dist/src/server/server.d.ts +0 -2
- package/dist/src/server/server.js.map +1 -1
- package/dist/src/server/updateTestdirectorySchemaFile.d.ts +0 -9
- package/dist/src/server/updateTestdirectorySchemaFile.js.map +1 -1
- package/dist/src/server/utilities/DisposableSingleApplication.test.js +2 -3
- package/dist/src/server/utilities/DisposableSingleApplication.test.js.map +1 -1
- package/dist/src/server/utilities/TerminalApplication.d.ts +0 -1
- package/dist/src/server/utilities/TerminalApplication.js +9 -12
- package/dist/src/server/utilities/TerminalApplication.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/server/cypress-support/tui-sandbox-template.ts +3 -14
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
import { visualWidth } from "./visualWidth.js";
|
|
1
2
|
/** Draw a Unicode box around text content with a title in the top border. */
|
|
2
3
|
export const drawTextBox = (title, content, minWidth = 88) => {
|
|
3
4
|
const header = ` ${title} `;
|
|
5
|
+
const headerWidth = visualWidth(header);
|
|
4
6
|
const contentLines = content.split("\n");
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const width = Math.max(minWidth, maxContentWidth + 4, header.length + 2);
|
|
7
|
+
const maxContentWidth = Math.max(...contentLines.map(line => visualWidth(line)));
|
|
8
|
+
const width = Math.max(minWidth, maxContentWidth + 4, headerWidth + 2);
|
|
8
9
|
const innerWidth = width - 2;
|
|
9
|
-
const topBorder = `┌${header}${"─".repeat(innerWidth -
|
|
10
|
+
const topBorder = `┌${header}${"─".repeat(innerWidth - headerWidth)}┐`;
|
|
10
11
|
const bottomBorder = `└${"─".repeat(innerWidth)}┘`;
|
|
11
12
|
const lines = contentLines.map(line => {
|
|
12
|
-
const
|
|
13
|
-
return `│ ${
|
|
13
|
+
const padding = " ".repeat(innerWidth - 2 - visualWidth(line));
|
|
14
|
+
return `│ ${line}${padding} │`;
|
|
14
15
|
});
|
|
15
16
|
return `${topBorder}\n${lines.join("\n")}\n${bottomBorder}`;
|
|
16
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawTextBox.js","sourceRoot":"","sources":["../../../src/client/drawTextBox.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,QAAQ,GAAG,EAAE,EAAU,EAAE;IACnF,MAAM,MAAM,GAAG,IAAI,KAAK,GAAG,CAAA;IAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAExC,
|
|
1
|
+
{"version":3,"file":"drawTextBox.js","sourceRoot":"","sources":["../../../src/client/drawTextBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,QAAQ,GAAG,EAAE,EAAU,EAAE;IACnF,MAAM,MAAM,GAAG,IAAI,KAAK,GAAG,CAAA;IAC3B,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAExC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAA;IAEtE,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAA;IAC5B,MAAM,SAAS,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,CAAA;IACtE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAA;IAClD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9D,OAAO,KAAK,IAAI,GAAG,OAAO,IAAI,CAAA;IAChC,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,EAAE,CAAA;AAC7D,CAAC,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import { drawTextBox } from "./drawTextBox.js";
|
|
3
|
+
import { visualWidth } from "./visualWidth.js";
|
|
3
4
|
describe("drawTextBox", () => {
|
|
4
5
|
it("draws a box around terminal content", () => {
|
|
5
6
|
const content = [
|
|
@@ -28,5 +29,45 @@ describe("drawTextBox", () => {
|
|
|
28
29
|
const lengths = lines.map(line => line.length);
|
|
29
30
|
expect(new Set(lengths).size).toBe(1);
|
|
30
31
|
});
|
|
32
|
+
it("right-aligns the border when content contains wide CJK characters", () => {
|
|
33
|
+
// "日本" is 4 cells (2 wide chars at 2 cells each); "abcd" is also 4
|
|
34
|
+
// cells. JS .length differs (2 vs 4) but visual width must match across
|
|
35
|
+
// all box lines so the right border lines up.
|
|
36
|
+
const content = ["日本", "abcd"].join("\n");
|
|
37
|
+
const lines = drawTextBox("Title", content).split("\n");
|
|
38
|
+
const widths = lines.map(visualWidth);
|
|
39
|
+
expect(new Set(widths).size).toBe(1);
|
|
40
|
+
});
|
|
41
|
+
it("right-aligns the border when the title contains wide characters", () => {
|
|
42
|
+
const lines = drawTextBox("日本語タイトル", "content").split("\n");
|
|
43
|
+
const widths = lines.map(visualWidth);
|
|
44
|
+
expect(new Set(widths).size).toBe(1);
|
|
45
|
+
});
|
|
46
|
+
it("right-aligns the border for emoji content", () => {
|
|
47
|
+
const content = ["🎉🎉", "ab"].join("\n");
|
|
48
|
+
const lines = drawTextBox("Title", content).split("\n");
|
|
49
|
+
const widths = lines.map(visualWidth);
|
|
50
|
+
expect(new Set(widths).size).toBe(1);
|
|
51
|
+
});
|
|
52
|
+
it("right-aligns the border for ZWJ-joined emoji clusters", () => {
|
|
53
|
+
// 👨👩👧👦 is one grapheme (2 cells) built from 4 code points + ZWJs
|
|
54
|
+
// (11 JS chars total). Naive .length math would over-pad by 9.
|
|
55
|
+
const content = ["👨👩👧👦", "ab"].join("\n");
|
|
56
|
+
const lines = drawTextBox("Title", content).split("\n");
|
|
57
|
+
const widths = lines.map(visualWidth);
|
|
58
|
+
expect(new Set(widths).size).toBe(1);
|
|
59
|
+
});
|
|
60
|
+
it("renders a tight box around CJK content", () => {
|
|
61
|
+
// Snapshot — verifies the right border `│` actually lines up visually
|
|
62
|
+
// when the file is viewed in a monospace context. minWidth=20 forces
|
|
63
|
+
// the box to be sized by content rather than the default minimum.
|
|
64
|
+
const content = ["日本", "abcd"].join("\n");
|
|
65
|
+
expect(drawTextBox("T", content, 20)).toMatchInlineSnapshot(`
|
|
66
|
+
"┌ T ───────────────┐
|
|
67
|
+
│ 日本 │
|
|
68
|
+
│ abcd │
|
|
69
|
+
└──────────────────┘"
|
|
70
|
+
`);
|
|
71
|
+
});
|
|
31
72
|
}); // describe
|
|
32
73
|
//# sourceMappingURL=drawTextBox.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawTextBox.test.js","sourceRoot":"","sources":["../../../src/client/drawTextBox.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,OAAO,GAAG;YACd,EAAE;YACF,2CAA2C;YAC3C,mEAAmE;YACnE,uEAAuE;YACvE,cAAc;SACf,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,CAAC,WAAW,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;GAQnF,CAAC,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,QAAQ,GACZ,gIAAgI,CAAA;QAClI,MAAM,OAAO,GAAG,CAAC,wCAAwC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEpF,MAAM,MAAM,GAAG,WAAW,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAA;QAClE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAEhC,4CAA4C;QAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9C,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA,CAAC,WAAW"}
|
|
1
|
+
{"version":3,"file":"drawTextBox.test.js","sourceRoot":"","sources":["../../../src/client/drawTextBox.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Join row text into a snapshot, dropping trailing blank rows. */
|
|
2
|
+
export const extractTerminalContent = (rowTexts) => {
|
|
3
|
+
if (rowTexts.length === 0)
|
|
4
|
+
return undefined;
|
|
5
|
+
const lines = [...rowTexts];
|
|
6
|
+
while (lines.length > 0 && lines[lines.length - 1]?.trim() === "") {
|
|
7
|
+
lines.pop();
|
|
8
|
+
}
|
|
9
|
+
return lines.length > 0 ? lines.join("\n") : undefined;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=extractTerminalContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractTerminalContent.js","sourceRoot":"","sources":["../../../src/client/extractTerminalContent.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAA+B,EAAsB,EAAE;IAC5F,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAE3C,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA;IAC3B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClE,KAAK,CAAC,GAAG,EAAE,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACxD,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { extractTerminalContent } from "./extractTerminalContent.js";
|
|
3
|
+
describe("extractTerminalContent", () => {
|
|
4
|
+
it("works with basic cases", () => {
|
|
5
|
+
expect(extractTerminalContent([]), "returns undefined for an empty rows array").toBeUndefined();
|
|
6
|
+
expect(extractTerminalContent(["", " ", "\t"]), "returns undefined when every row is blank").toBeUndefined();
|
|
7
|
+
expect(extractTerminalContent(["a", "b", "c"]), "returns undefined when every row is blank").toBe("a\nb\nc");
|
|
8
|
+
expect(extractTerminalContent(["hello", "world", "", " "]), "returns undefined when every row is blank").toBe("hello\nworld");
|
|
9
|
+
expect(extractTerminalContent(["", "hello"]), "returns undefined when every row is blank").toBe("\nhello");
|
|
10
|
+
});
|
|
11
|
+
describe("multi-byte / Unicode", () => {
|
|
12
|
+
it("preserves CJK wide characters", () => {
|
|
13
|
+
expect(extractTerminalContent(["你好世界"])).toBe("你好世界");
|
|
14
|
+
});
|
|
15
|
+
it("preserves emoji surrogate pairs", () => {
|
|
16
|
+
expect(extractTerminalContent(["🎉 Done!"])).toBe("🎉 Done!");
|
|
17
|
+
});
|
|
18
|
+
it("preserves precomposed and decomposed diacritics", () => {
|
|
19
|
+
expect(extractTerminalContent(["café"])).toBe("café");
|
|
20
|
+
expect(extractTerminalContent(["café"])).toBe("café");
|
|
21
|
+
});
|
|
22
|
+
it("treats ideographic space as blank when trimming trailing rows", () => {
|
|
23
|
+
// String.prototype.trim() removes U+3000 per spec, so a row containing
|
|
24
|
+
// only ideographic spaces is dropped from the trailing tail.
|
|
25
|
+
expect(extractTerminalContent(["text", " "])).toBe("text");
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=extractTerminalContent.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractTerminalContent.test.js","sourceRoot":"","sources":["../../../src/client/extractTerminalContent.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC,EAAE,2CAA2C,CAAC,CAAC,aAAa,EAAE,CAAA;QAC/F,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,2CAA2C,CAAC,CAAC,aAAa,EAAE,CAAA;QAC7G,MAAM,CAAC,sBAAsB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,2CAA2C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC5G,MAAM,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,2CAA2C,CAAC,CAAC,IAAI,CAC5G,cAAc,CACf,CAAA;QACD,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,2CAA2C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC5G,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,sBAAsB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACrD,MAAM,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,uEAAuE;YACvE,6DAA6D;YAC7D,MAAM,CAAC,sBAAsB,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -2,4 +2,6 @@ export type { InMemoryClipboard } from "./clipboard.js";
|
|
|
2
2
|
export { rgbify } from "./color-utilities.js";
|
|
3
3
|
export { textIsVisibleWithBackgroundColor, textIsVisibleWithColor } from "./cypress-assertions.js";
|
|
4
4
|
export { drawTextBox } from "./drawTextBox.js";
|
|
5
|
+
export { extractTerminalContent } from "./extractTerminalContent.js";
|
|
5
6
|
export type { MyNeovimConfigModification } from "./neovim/MyNeovimConfigModification.ts";
|
|
7
|
+
export { visualWidth } from "./visualWidth.js";
|
package/dist/src/client/index.js
CHANGED
|
@@ -2,4 +2,6 @@
|
|
|
2
2
|
export { rgbify } from "./color-utilities.js";
|
|
3
3
|
export { textIsVisibleWithBackgroundColor, textIsVisibleWithColor } from "./cypress-assertions.js";
|
|
4
4
|
export { drawTextBox } from "./drawTextBox.js";
|
|
5
|
+
export { extractTerminalContent } from "./extractTerminalContent.js";
|
|
6
|
+
export { visualWidth } from "./visualWidth.js";
|
|
5
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAG9E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAG9E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const visualWidth: (s: string) => number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visualWidth.js","sourceRoot":"","sources":["../../../src/client/visualWidth.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -16,7 +16,7 @@ export const resolveTuiConfig = async (cwd) => {
|
|
|
16
16
|
log(`Found configuration file in ${url.pathname}:`, JSON.stringify(file, null, 2));
|
|
17
17
|
}
|
|
18
18
|
catch (e) {
|
|
19
|
-
console.log(
|
|
19
|
+
console.log(`Using the default configuration. If you want to add a custom config, add it to ${url.pathname}`);
|
|
20
20
|
log("Config load error:", e);
|
|
21
21
|
return {
|
|
22
22
|
id: "no-config-found",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveTuiConfig.js","sourceRoot":"","sources":["../../../src/scripts/resolveTuiConfig.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAiC,MAAM,4CAA4C,CAAA;AAElH,MAAM,GAAG,GAAG,QAAQ,CAAC,2BAA2B,CAAC,CAAA;AAejD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAW,EAAmC,EAAE;IACrF,MAAM,aAAa,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IAE3D,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC,CAAA;IAEhE,IAAI,IAAa,CAAA;IACjB,IAAI,CAAC;QACH,4DAA4D;QAC5D,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7B,GAAG,CAAC,+BAA+B,GAAG,CAAC,QAAQ,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACpF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"resolveTuiConfig.js","sourceRoot":"","sources":["../../../src/scripts/resolveTuiConfig.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAiC,MAAM,4CAA4C,CAAA;AAElH,MAAM,GAAG,GAAG,QAAQ,CAAC,2BAA2B,CAAC,CAAA;AAejD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAW,EAAmC,EAAE;IACrF,MAAM,aAAa,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IAE3D,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC,CAAA;IAEhE,IAAI,IAAa,CAAA;IACjB,IAAI,CAAC;QACH,4DAA4D;QAC5D,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7B,GAAG,CAAC,+BAA+B,GAAG,CAAC,QAAQ,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACpF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,kFAAkF,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC7G,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAA;QAE5B,OAAO;YACL,EAAE,EAAE,iBAAiB;YACrB,MAAM,EAAE;gBACN,MAAM,EAAE,aAAa;gBACrB,cAAc,EAAE,GAAG,CAAC,QAAQ;aAC7B;SACF,CAAA;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAA;IACZ,MAAM,kBAAkB,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAA;IAC7E,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IACvD,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO;YACL,EAAE,EAAE,eAAe;YACnB,MAAM,EAAE;gBACN,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM;gBAChC,cAAc,EAAE,GAAG,CAAC,QAAQ;aAC7B;SACF,CAAA;IACH,CAAC;SAAM,CAAC;QACN,OAAO;YACL,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;YACzC,cAAc,EAAE,GAAG,CAAC,QAAQ;YAC5B,OAAO,EAAE,iCAAiC;SAC3C,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { inferRouterInputs } from "@trpc/server";
|
|
2
1
|
import type { TestServerConfig } from "./updateTestdirectorySchemaFile.js";
|
|
3
2
|
/** @private */
|
|
4
3
|
export declare function createAppRouter(config: TestServerConfig): Promise<import("@trpc/server").TRPCBuiltRouter<{
|
|
@@ -177,5 +176,4 @@ export declare function createAppRouter(config: TestServerConfig): Promise<impor
|
|
|
177
176
|
}>>;
|
|
178
177
|
}>>>;
|
|
179
178
|
export type AppRouter = Awaited<ReturnType<typeof createAppRouter>>;
|
|
180
|
-
export type RouterInput = inferRouterInputs<AppRouter>;
|
|
181
179
|
export declare function startTestServer(config: TestServerConfig): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG5C,eAAe;AACf,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAwB;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,QAAQ,EAAE,oBAAoB,CAAC,MAAM,CAAC;QACtC,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC;KACnC,CAAC,CAAA;IAEF,OAAO,SAAS,CAAA;AAClB,CAAC;AAID,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAwB;IAC5D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;YAChC,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC,CAAA;QACF,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;QAE/C,MAAM,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IACzC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAA;QAChD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
|
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
import * as z from "zod";
|
|
2
|
-
export type DirectoriesConfig = TestServerConfig["directories"];
|
|
3
2
|
export type TestServerConfig = z.output<typeof testServerConfigSchema>;
|
|
4
3
|
export type TestServerConfigMetadata = {
|
|
5
4
|
configFilePath: string;
|
|
6
5
|
config: TestServerConfig;
|
|
7
6
|
};
|
|
8
|
-
export type Dictionary = Record<string, string>;
|
|
9
|
-
export type CustomizeEnv = (env: Dictionary) => Promise<Dictionary>;
|
|
10
|
-
export type CustomizeMiseEnvironmentVariables = (env: Dictionary, defaultImplementation: CustomizeEnv) => Promise<Record<string, string>>;
|
|
11
7
|
export type NeovimIntegrationDefaultAppName = "nvim";
|
|
12
|
-
declare const neovimIntegration: z.ZodObject<{
|
|
13
|
-
NVIM_APPNAMEs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
14
|
-
}, z.core.$strict>;
|
|
15
|
-
export type NeovimIntegrationConfig = z.output<typeof neovimIntegration>;
|
|
16
8
|
export declare const testServerConfigSchema: z.ZodObject<{
|
|
17
9
|
directories: z.ZodObject<{
|
|
18
10
|
testEnvironmentPath: z.ZodString;
|
|
@@ -28,4 +20,3 @@ export declare const testServerConfigSchema: z.ZodObject<{
|
|
|
28
20
|
}, z.core.$strict>;
|
|
29
21
|
export type UpdateTestdirectorySchemaFileResult = "updated" | "did-nothing";
|
|
30
22
|
export declare function updateTestdirectorySchemaFile(config: TestServerConfig): Promise<UpdateTestdirectorySchemaFileResult>;
|
|
31
|
-
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateTestdirectorySchemaFile.js","sourceRoot":"","sources":["../../../src/server/updateTestdirectorySchemaFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAE7D,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,6BAA6B,CAAC,IAAI,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"updateTestdirectorySchemaFile.js","sourceRoot":"","sources":["../../../src/server/updateTestdirectorySchemaFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAE7D,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,6BAA6B,CAAC,IAAI,EAAE,CAAC,CAAA;AAUzE,MAAM,iBAAiB,GAAG,CAAC,CAAC,YAAY,CAAC;IACvC,aAAa,EAAE,CAAC;SACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,CAAC,MAAgD,CAAC,CAAC;CAC/D,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,YAAY,CAAC;IACnD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE;QAC/B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;QAC1B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;KAC3D,CAAC;IACF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACxC,YAAY,EAAE,CAAC,CAAC,YAAY,CAAC;QAC3B,MAAM,EAAE,iBAAiB;KAC1B,CAAC;CACH,CAAC,CAAA;AAIF,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,MAAwB;IAExB,MAAM,SAAS,GAAW,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAA;IAChE,IAAI,SAAS,GAAG,EAAE,CAAA;IAElB,IAAI,CAAC;QACH,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,mDAAmD,CAAC,CAAA;IAC1D,CAAC;IAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,oEAAoE;QACpE,0EAA0E;QAC1E,+CAA+C;QAC/C,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,CAAA;QAC3D,OAAO,SAAS,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,aAAa,CAAA;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -10,7 +10,7 @@ const fakeApp = {
|
|
|
10
10
|
processId: 123,
|
|
11
11
|
write: vi.fn(),
|
|
12
12
|
killAndWait: vi.fn(),
|
|
13
|
-
untilExit: Promise.resolve({ exitCode: 0
|
|
13
|
+
untilExit: Promise.resolve({ exitCode: 0 }),
|
|
14
14
|
};
|
|
15
15
|
describe("DisposableSingleApplication", () => {
|
|
16
16
|
it("has no application when created", () => {
|
|
@@ -40,10 +40,9 @@ describe("DisposableSingleApplication", () => {
|
|
|
40
40
|
it("successful exit works", async () => {
|
|
41
41
|
const app = new TestDisposableSingleApplication();
|
|
42
42
|
await app.startNextAndKillCurrent(async () => fakeApp);
|
|
43
|
-
fakeApp.untilExit = Promise.resolve({ exitCode: 1
|
|
43
|
+
fakeApp.untilExit = Promise.resolve({ exitCode: 1 });
|
|
44
44
|
await expect(app.untilExit()).resolves.toStrictEqual({
|
|
45
45
|
exitCode: 1,
|
|
46
|
-
signal: 9,
|
|
47
46
|
});
|
|
48
47
|
});
|
|
49
48
|
it("when the application throws an error, the error is propagated", async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisposableSingleApplication.test.js","sourceRoot":"","sources":["../../../../src/server/utilities/DisposableSingleApplication.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AAG9E,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;AAEpD,MAAM,+BAAgC,SAAQ,2BAA2B;IAChE,cAAc;QACnB,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;CACF;AAED,MAAM,OAAO,GAAG;IACd,SAAS,EAAE,GAAG;IACd,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;IACd,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;IACpB,SAAS,EAAE,OAAO,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"DisposableSingleApplication.test.js","sourceRoot":"","sources":["../../../../src/server/utilities/DisposableSingleApplication.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@ import type { ITerminalDimensions } from "@xterm/addon-fit";
|
|
|
3
3
|
import type { StartableApplication } from "./DisposableSingleApplication.js";
|
|
4
4
|
export type ExitInfo = {
|
|
5
5
|
exitCode: number;
|
|
6
|
-
signal: number | undefined;
|
|
7
6
|
};
|
|
8
7
|
export declare class TerminalApplication implements StartableApplication {
|
|
9
8
|
private readonly subProcess;
|
|
@@ -48,18 +48,15 @@ export class TerminalApplication {
|
|
|
48
48
|
if (!processId) {
|
|
49
49
|
throw new Error("Failed to spawn child process");
|
|
50
50
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
clearInterval(keepAlive);
|
|
61
|
-
resolve({ exitCode, signal });
|
|
62
|
-
});
|
|
51
|
+
// Keep the Node.js event loop alive until the process exits. When the
|
|
52
|
+
// child exits, zigpty destroys its internal tty.ReadStream — if that was
|
|
53
|
+
// the last active handle, Node.js would exit before the native waitpid()
|
|
54
|
+
// callback can resolve the `exited` promise.
|
|
55
|
+
// oxlint-disable-next-line no-empty-function
|
|
56
|
+
const keepAlive = setInterval(() => { }, 60_000);
|
|
57
|
+
const untilExit = ptyProcess.exited.then(exitCode => {
|
|
58
|
+
clearInterval(keepAlive);
|
|
59
|
+
return { exitCode };
|
|
63
60
|
});
|
|
64
61
|
return new TerminalApplication(ptyProcess, onStdoutOrStderr, untilExit, command);
|
|
65
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalApplication.js","sourceRoot":"","sources":["../../../../src/server/utilities/TerminalApplication.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAG1D,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAGhC,MAAM,GAAG,GAAG,QAAQ,CAAC,iCAAiC,CAAC,CAAA;AAIvD,iEAAiE;AACjE,kDAAkD;AAClD,MAAM,OAAO,mBAAmB;IAMX;IACD;IACA;IACA;IARF,SAAS,CAAQ;IAEjB,MAAM,CAAgB;IAEtC,YACmB,UAAuB,EACxB,gBAAwC,EACxC,SAA4B,EAC5B,IAAY;QAHX,eAAU,GAAV,UAAU,CAAa;QACxB,qBAAgB,GAAhB,gBAAgB,CAAwB;QACxC,cAAS,GAAT,SAAS,CAAmB;QAC5B,SAAI,GAAJ,IAAI,CAAQ;QAE5B,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,CAAA;QAE/B,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;YACzB,UAAU,EAAE,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACtC,WAAW,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE;YACpC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;SACxD,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAE5B,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;YACzC,MAAmC,CAAA;YACnC,MAAM,GAAG,GAAG,iBAAiB,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,sBAAsB,MAAM,CAAC,QAAQ,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,EAAE,CAAA;YAC9H,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;YAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,qDAAqD;IAC9C,MAAM,CAAC,KAAK,CAAC,EAClB,gBAAgB,EAChB,OAAO,EACP,IAAI,EACJ,GAAG,EACH,GAAG,EACH,UAAU,GAQX;QACC,GAAG,CAAC,aAAa,OAAO,gBAAgB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,GAAG,CAAC,CAAA;QAE1E,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YAC7C,IAAI,EAAE,aAAa;YACnB,GAAG;YACH,GAAG;YACH,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,IAAI;SACtB,CAAC,CAAA;QACF,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;QACnC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;YACzC,GAAG,CAAC,kCAAkC,QAAQ,eAAe,MAAM,EAAE,CAAC,CAAA;QACxE,CAAC,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAA;QAEhC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAClD,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"TerminalApplication.js","sourceRoot":"","sources":["../../../../src/server/utilities/TerminalApplication.ts"],"names":[],"mappings":"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"}
|