@tui-sandbox/library 12.2.4 → 12.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/assets/{index-BiCHXrmL.js → index-Hg3KfzVr.js} +25 -25
- package/dist/browser/index.html +1 -1
- package/dist/src/browser/neovim-client.d.ts +3 -0
- package/dist/src/browser/neovim-client.js +7 -5
- package/dist/src/browser/neovim-client.js.map +1 -1
- package/dist/src/client/neovim/neovim-terminal-client.d.ts +9 -2
- package/dist/src/client/neovim/neovim-terminal-client.js +31 -35
- package/dist/src/client/neovim/neovim-terminal-client.js.map +1 -1
- package/dist/src/client/startTerminal.d.ts +2 -0
- package/dist/src/client/startTerminal.js +3 -0
- package/dist/src/client/startTerminal.js.map +1 -1
- package/dist/src/client/terminal/terminal-terminal-client.d.ts +7 -4
- package/dist/src/client/terminal/terminal-terminal-client.js +26 -26
- package/dist/src/client/terminal/terminal-terminal-client.js.map +1 -1
- package/dist/src/server/cypress-support/contents.js +17 -6
- package/dist/src/server/cypress-support/contents.js.map +1 -1
- package/dist/src/server/dirtree/index.test.js +2 -0
- package/dist/src/server/dirtree/index.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/browser/index.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<title>tui-sandbox integration tests</title>
|
|
6
|
-
<script type="module" crossorigin src="/assets/index-
|
|
6
|
+
<script type="module" crossorigin src="/assets/index-Hg3KfzVr.js"></script>
|
|
7
7
|
<link rel="stylesheet" crossorigin href="/assets/index-BibnzQaA.css">
|
|
8
8
|
</head>
|
|
9
9
|
<body>
|
|
@@ -7,6 +7,7 @@ import type { ExCommandClientInput, LuaCodeClientInput, PollLuaCodeClientInput,
|
|
|
7
7
|
import type { StartTerminalGenericArguments } from "../server/applications/terminal/TerminalTestApplication.js";
|
|
8
8
|
import type { BlockingCommandClientInput } from "../server/blockingCommandInputSchema.js";
|
|
9
9
|
import type { BlockingShellCommandOutput, RunExCommandOutput, RunLuaCodeOutput, StartNeovimGenericArguments, TestDirectory } from "../server/types.js";
|
|
10
|
+
import { Lazy } from "../server/utilities/Lazy.js";
|
|
10
11
|
export type GenericNeovimBrowserApi = {
|
|
11
12
|
runBlockingShellCommand(input: BlockingCommandClientInput): Promise<BlockingShellCommandOutput>;
|
|
12
13
|
runLuaCode(input: LuaCodeClientInput): Promise<RunLuaCodeOutput>;
|
|
@@ -15,6 +16,7 @@ export type GenericNeovimBrowserApi = {
|
|
|
15
16
|
runExCommand(input: ExCommandClientInput): Promise<RunExCommandOutput>;
|
|
16
17
|
dir: TestDirectory;
|
|
17
18
|
clipboard: InMemoryClipboard;
|
|
19
|
+
title: Lazy<string>;
|
|
18
20
|
};
|
|
19
21
|
declare global {
|
|
20
22
|
interface Window {
|
|
@@ -26,6 +28,7 @@ export type GenericTerminalBrowserApi = {
|
|
|
26
28
|
dir: TestDirectory;
|
|
27
29
|
runBlockingShellCommand(input: BlockingCommandClientInput): Promise<BlockingShellCommandOutput>;
|
|
28
30
|
clipboard: InMemoryClipboard;
|
|
31
|
+
title: Lazy<string>;
|
|
29
32
|
};
|
|
30
33
|
export type BrowserTerminalSettings = {
|
|
31
34
|
configureTerminal?: (term: {
|
|
@@ -8,11 +8,11 @@ if (!app) {
|
|
|
8
8
|
throw new Error("No app element found");
|
|
9
9
|
}
|
|
10
10
|
// limitation: right now only one client can be used in the same test
|
|
11
|
-
const neovimClient = new Lazy(() =>
|
|
12
|
-
const terminalClient = new Lazy(() =>
|
|
11
|
+
const neovimClient = new Lazy(() => NeovimTerminalClient.create(app));
|
|
12
|
+
const terminalClient = new Lazy(() => TerminalTerminalClient.create(app));
|
|
13
13
|
/** Entrypoint for the test runner (cypress) */
|
|
14
14
|
window.startNeovim = async function (startArgs) {
|
|
15
|
-
const neovim = neovimClient.get();
|
|
15
|
+
const neovim = await neovimClient.get();
|
|
16
16
|
const testDirectory = await neovim.startNeovim({
|
|
17
17
|
additionalEnvironmentVariables: startArgs?.additionalEnvironmentVariables,
|
|
18
18
|
filename: startArgs?.filename ?? "initial-file.txt",
|
|
@@ -38,19 +38,21 @@ window.startNeovim = async function (startArgs) {
|
|
|
38
38
|
},
|
|
39
39
|
dir: testDirectory,
|
|
40
40
|
clipboard: neovim.clipboard,
|
|
41
|
+
title: neovim.terminalApi.title,
|
|
41
42
|
};
|
|
42
43
|
return neovimBrowserApi;
|
|
43
44
|
};
|
|
44
45
|
/** Entrypoint for the test runner (cypress) */
|
|
45
46
|
window.startTerminalApplication = async function (args) {
|
|
46
|
-
const terminal = terminalClient.get();
|
|
47
|
+
const terminal = await terminalClient.get();
|
|
47
48
|
const testDirectory = await terminal.startTerminalApplication(args);
|
|
48
49
|
const terminalBrowserApi = {
|
|
49
50
|
dir: testDirectory,
|
|
50
51
|
runBlockingShellCommand(input) {
|
|
51
52
|
return terminal.runBlockingShellCommand(input);
|
|
52
53
|
},
|
|
53
|
-
clipboard: terminal.clipboard,
|
|
54
|
+
clipboard: terminal.terminalApi.clipboard,
|
|
55
|
+
title: terminal.terminalApi.title,
|
|
54
56
|
};
|
|
55
57
|
return terminalBrowserApi;
|
|
56
58
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neovim-client.js","sourceRoot":"","sources":["../../../src/browser/neovim-client.ts"],"names":[],"mappings":"AACA,OAAO,4BAA4B,CAAA;AAEnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAA;AAEjF,OAAO,qBAAqB,CAAA;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAA;AAiBvF,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAElD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAc,MAAM,CAAC,CAAA;AACvD,IAAI,CAAC,GAAG,EAAE,CAAC;IACT,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;AACzC,CAAC;AAED,qEAAqE;AACrE,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"neovim-client.js","sourceRoot":"","sources":["../../../src/browser/neovim-client.ts"],"names":[],"mappings":"AACA,OAAO,4BAA4B,CAAA;AAEnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAA;AAEjF,OAAO,qBAAqB,CAAA;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAA;AAiBvF,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAElD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAc,MAAM,CAAC,CAAA;AACvD,IAAI,CAAC,GAAG,EAAE,CAAC;IACT,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;AACzC,CAAC;AAED,qEAAqE;AACrE,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AACrE,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAazE,+CAA+C;AAC/C,MAAM,CAAC,WAAW,GAAG,KAAK,WAAW,SAAuC;IAC1E,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAA;IACvC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;QAC7C,8BAA8B,EAAE,SAAS,EAAE,8BAA8B;QACzE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,kBAAkB;QACnD,0BAA0B,EAAE,SAAS,EAAE,0BAA0B,IAAI,EAAE;QACvE,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,SAAS,EAAE,YAAY;KACS,CAAC,CAAA;IAEjD,MAAM,gBAAgB,GAA4B;QAChD,uBAAuB,CAAC,KAAiC;YACvD,OAAO,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAA;QAC9C,CAAC;QACD,UAAU,CAAC,KAAK;YACd,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QACjC,CAAC;QACD,MAAM,CAAC,KAAK;YACV,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC;QACD,cAAc,CAAC,KAAK;YAClB,OAAO,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QACrC,CAAC;QACD,YAAY,CAAC,KAAK;YAChB,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACnC,CAAC;QACD,GAAG,EAAE,aAAa;QAClB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK;KAChC,CAAA;IAED,OAAO,gBAAgB,CAAA;AACzB,CAAC,CAAA;AA0CD,+CAA+C;AAC/C,MAAM,CAAC,wBAAwB,GAAG,KAAK,WACrC,IAAmC;IAEnC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,CAAA;IAC3C,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAA;IAEnE,MAAM,kBAAkB,GAA8B;QACpD,GAAG,EAAE,aAAa;QAClB,uBAAuB,CAAC,KAAK;YAC3B,OAAO,QAAQ,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAA;QAChD,CAAC;QACD,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,SAAS;QACzC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK;KAClC,CAAA;IACD,OAAO,kBAAkB,CAAA;AAC3B,CAAC,CAAA"}
|
|
@@ -1,17 +1,24 @@
|
|
|
1
|
+
import { createTRPCClient } from "@trpc/client";
|
|
2
|
+
import type { Terminal } from "@xterm/xterm";
|
|
1
3
|
import type { ExCommandClientInput, LuaCodeClientInput, PollLuaCodeClientInput, RunLuaFileClientInput } from "../..//server/applications/neovim/neovimRouter.js";
|
|
4
|
+
import type { AppRouter } from "../..//server/server.js";
|
|
2
5
|
import type { BlockingShellCommandOutput, RunExCommandOutput, RunLuaCodeOutput, StartNeovimGenericArguments, TestDirectory } from "../..//server/types.js";
|
|
3
6
|
import type { BlockingCommandClientInput } from "../../server/blockingCommandInputSchema.js";
|
|
7
|
+
import type { TabId } from "../../server/utilities/tabId.js";
|
|
8
|
+
import { BatchedAsyncQueue, type TerminalInputEvent } from "../BatchedAsyncQueue.js";
|
|
4
9
|
import type { InMemoryClipboard } from "../clipboard.js";
|
|
10
|
+
import { type TuiTerminalApi } from "../startTerminal.js";
|
|
5
11
|
/** Manages the terminal state in the browser as well as the (browser's)
|
|
6
12
|
* connection to the server side terminal application api. */
|
|
7
13
|
export declare class NeovimTerminalClient {
|
|
8
|
-
private readonly ready;
|
|
9
14
|
private readonly tabId;
|
|
10
15
|
private readonly terminal;
|
|
11
16
|
private readonly trpc;
|
|
12
17
|
readonly clipboard: InMemoryClipboard;
|
|
13
18
|
private readonly inputQueue;
|
|
14
|
-
|
|
19
|
+
readonly terminalApi: TuiTerminalApi;
|
|
20
|
+
constructor(tabId: TabId, terminal: Terminal, trpc: ReturnType<typeof createTRPCClient<AppRouter>>, clipboard: InMemoryClipboard, inputQueue: BatchedAsyncQueue<TerminalInputEvent>, terminalApi: TuiTerminalApi);
|
|
21
|
+
static create(app: HTMLElement): Promise<NeovimTerminalClient>;
|
|
15
22
|
startNeovim(args: StartNeovimGenericArguments): Promise<TestDirectory>;
|
|
16
23
|
runBlockingShellCommand(input: BlockingCommandClientInput): Promise<BlockingShellCommandOutput>;
|
|
17
24
|
runLuaCode(input: LuaCodeClientInput): Promise<RunLuaCodeOutput>;
|
|
@@ -1,64 +1,65 @@
|
|
|
1
1
|
import { createTRPCClient, httpBatchLink, httpSubscriptionLink, splitLink } from "@trpc/client";
|
|
2
|
+
import { Lazy } from "../../server/utilities/Lazy.js";
|
|
2
3
|
import { BatchedAsyncQueue } from "../BatchedAsyncQueue.js";
|
|
3
4
|
import { InMemoryClipboardProvider } from "../clipboard.js";
|
|
4
5
|
import { getTabId, startTerminal } from "../startTerminal.js";
|
|
5
6
|
/** Manages the terminal state in the browser as well as the (browser's)
|
|
6
7
|
* connection to the server side terminal application api. */
|
|
7
8
|
export class NeovimTerminalClient {
|
|
8
|
-
ready;
|
|
9
9
|
tabId;
|
|
10
10
|
terminal;
|
|
11
11
|
trpc;
|
|
12
12
|
clipboard;
|
|
13
13
|
inputQueue;
|
|
14
|
-
|
|
14
|
+
terminalApi;
|
|
15
|
+
constructor(tabId, terminal, trpc, clipboard, inputQueue, terminalApi) {
|
|
16
|
+
this.tabId = tabId;
|
|
17
|
+
this.terminal = terminal;
|
|
18
|
+
this.trpc = trpc;
|
|
19
|
+
this.clipboard = clipboard;
|
|
20
|
+
this.inputQueue = inputQueue;
|
|
21
|
+
this.terminalApi = terminalApi;
|
|
22
|
+
}
|
|
23
|
+
static async create(app) {
|
|
15
24
|
const trpc = createTRPCClient({
|
|
16
25
|
links: [
|
|
17
26
|
splitLink({
|
|
18
27
|
condition: operation => operation.type === "subscription",
|
|
19
|
-
true: httpSubscriptionLink({
|
|
20
|
-
|
|
21
|
-
}),
|
|
22
|
-
false: httpBatchLink({
|
|
23
|
-
url: "/trpc",
|
|
24
|
-
}),
|
|
28
|
+
true: httpSubscriptionLink({ url: "/trpc" }),
|
|
29
|
+
false: httpBatchLink({ url: "/trpc" }),
|
|
25
30
|
}),
|
|
26
31
|
],
|
|
27
32
|
});
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
const keys = events.join("");
|
|
38
|
-
await trpc.neovim.sendStdin.mutate({ tabId: this.tabId, data: keys });
|
|
39
|
-
}, controller.signal);
|
|
40
|
-
}
|
|
33
|
+
const tabId = getTabId();
|
|
34
|
+
const controller = new AbortController();
|
|
35
|
+
window.addEventListener("pagehide", () => {
|
|
36
|
+
controller.abort();
|
|
37
|
+
});
|
|
38
|
+
const inputQueue = new BatchedAsyncQueue(async (events) => {
|
|
39
|
+
const keys = events.join("");
|
|
40
|
+
await trpc.neovim.sendStdin.mutate({ tabId, data: keys });
|
|
41
|
+
}, controller.signal);
|
|
41
42
|
const clipboard = new InMemoryClipboardProvider();
|
|
42
|
-
const
|
|
43
|
+
const terminalApi = {
|
|
43
44
|
onMouseEvent: (data) => {
|
|
44
|
-
|
|
45
|
+
inputQueue.enqueue(data);
|
|
45
46
|
},
|
|
46
47
|
onKeyPress: (event) => {
|
|
47
|
-
|
|
48
|
+
inputQueue.enqueue(event.key);
|
|
48
49
|
},
|
|
49
50
|
clipboard,
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
title: new Lazy(() => "title not set yet"),
|
|
52
|
+
};
|
|
53
|
+
const terminal = startTerminal(app, terminalApi);
|
|
53
54
|
// start listening to Neovim stdout - this will take some (short) amount of
|
|
54
55
|
// time to complete
|
|
55
|
-
|
|
56
|
+
await new Promise(resolve => {
|
|
56
57
|
console.log("Subscribing to stdout");
|
|
57
58
|
trpc.neovim.onStdout.subscribe({ client: tabId }, {
|
|
58
59
|
onStarted() {
|
|
59
60
|
resolve();
|
|
60
61
|
},
|
|
61
|
-
onData(data) {
|
|
62
|
+
onData: (data) => {
|
|
62
63
|
terminal.write(data);
|
|
63
64
|
},
|
|
64
65
|
onError(err) {
|
|
@@ -66,9 +67,9 @@ export class NeovimTerminalClient {
|
|
|
66
67
|
},
|
|
67
68
|
});
|
|
68
69
|
});
|
|
70
|
+
return new NeovimTerminalClient(tabId, terminal, trpc, clipboard, inputQueue, terminalApi);
|
|
69
71
|
}
|
|
70
72
|
async startNeovim(args) {
|
|
71
|
-
await this.ready;
|
|
72
73
|
const testDirectory = await this.trpc.neovim.start.mutate({
|
|
73
74
|
startNeovimArguments: {
|
|
74
75
|
filename: args.filename,
|
|
@@ -86,15 +87,12 @@ export class NeovimTerminalClient {
|
|
|
86
87
|
return testDirectory;
|
|
87
88
|
}
|
|
88
89
|
async runBlockingShellCommand(input) {
|
|
89
|
-
await this.ready;
|
|
90
90
|
return this.trpc.neovim.runBlockingShellCommand.mutate({ ...input, tabId: this.tabId });
|
|
91
91
|
}
|
|
92
92
|
async runLuaCode(input) {
|
|
93
|
-
await this.ready;
|
|
94
93
|
return this.trpc.neovim.runLuaCode.mutate({ ...input, tabId: this.tabId });
|
|
95
94
|
}
|
|
96
95
|
async doFile(input) {
|
|
97
|
-
await this.ready;
|
|
98
96
|
return this.trpc.neovim.runExCommand.mutate({
|
|
99
97
|
...input,
|
|
100
98
|
tabId: this.tabId,
|
|
@@ -102,11 +100,9 @@ export class NeovimTerminalClient {
|
|
|
102
100
|
});
|
|
103
101
|
}
|
|
104
102
|
async waitForLuaCode(input) {
|
|
105
|
-
await this.ready;
|
|
106
103
|
return this.trpc.neovim.waitForLuaCode.mutate({ ...input, tabId: this.tabId });
|
|
107
104
|
}
|
|
108
105
|
async runExCommand(input) {
|
|
109
|
-
await this.ready;
|
|
110
106
|
return this.trpc.neovim.runExCommand.mutate({ ...input, tabId: this.tabId });
|
|
111
107
|
}
|
|
112
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neovim-terminal-client.js","sourceRoot":"","sources":["../../../../src/client/neovim/neovim-terminal-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAiB/F,OAAO,EAAE,iBAAiB,EAA2B,MAAM,yBAAyB,CAAA;AAEpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"neovim-terminal-client.js","sourceRoot":"","sources":["../../../../src/client/neovim/neovim-terminal-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAiB/F,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAA;AAErD,OAAO,EAAE,iBAAiB,EAA2B,MAAM,yBAAyB,CAAA;AAEpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAuB,MAAM,qBAAqB,CAAA;AAElF;6DAC6D;AAC7D,MAAM,OAAO,oBAAoB;IAEZ;IACA;IACA;IACD;IACC;IACD;IANlB,YACmB,KAAY,EACZ,QAAkB,EAClB,IAAoD,EACrD,SAA4B,EAC3B,UAAiD,EAClD,WAA2B;QAL1B,UAAK,GAAL,KAAK,CAAO;QACZ,aAAQ,GAAR,QAAQ,CAAU;QAClB,SAAI,GAAJ,IAAI,CAAgD;QACrD,cAAS,GAAT,SAAS,CAAmB;QAC3B,eAAU,GAAV,UAAU,CAAuC;QAClD,gBAAW,GAAX,WAAW,CAAgB;IAC1C,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAgB;QAClC,MAAM,IAAI,GAAG,gBAAgB,CAAY;YACvC,KAAK,EAAE;gBACL,SAAS,CAAC;oBACR,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,cAAc;oBACzD,IAAI,EAAE,oBAAoB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;oBAC5C,KAAK,EAAE,aAAa,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;iBACvC,CAAC;aACH;SACF,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;QAExB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE;YACvC,UAAU,CAAC,KAAK,EAAE,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAqB,KAAK,EAAE,MAAgB,EAAE,EAAE;YACtF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3D,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;QAErB,MAAM,SAAS,GAAG,IAAI,yBAAyB,EAAE,CAAA;QACjD,MAAM,WAAW,GAAmB;YAClC,YAAY,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC7B,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC1B,CAAC;YACD,UAAU,EAAE,CAAC,KAA+C,EAAE,EAAE;gBAC9D,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC/B,CAAC;YACD,SAAS;YACT,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC;SAC3C,CAAA;QACD,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;QAEhD,2EAA2E;QAC3E,mBAAmB;QACnB,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YAChC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;YACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAC5B,EAAE,MAAM,EAAE,KAAK,EAAE,EACjB;gBACE,SAAS;oBACP,OAAO,EAAE,CAAA;gBACX,CAAC;gBACD,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;oBACvB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACtB,CAAC;gBACD,OAAO,CAAC,GAAY;oBAClB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAA;gBAClD,CAAC;aACF,CACF,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,IAAI,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAA;IAC5F,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,IAAiC;QACxD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YACxD,oBAAoB,EAAE;gBACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,8BAA8B,EAAE,IAAI,CAAC,8BAA8B;gBACnE,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;gBAC3D,YAAY,EAAE,IAAI,CAAC,YAAY;aAChC;YACD,kBAAkB,EAAE;gBAClB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;gBACxB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;aACzB;YACD,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAA;QAEF,KAAK,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAA;QACtC,OAAO,aAAa,CAAA;IACtB,CAAC;IAEM,KAAK,CAAC,uBAAuB,CAAC,KAAiC;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IACzF,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,KAAyB;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAC5E,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAA4B;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;YAC1C,GAAG,KAAK;YACR,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,eAAe,KAAK,CAAC,OAAO,IAAI;SAC1C,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,KAA6B;QACvD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAChF,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,KAA2B;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAC9E,CAAC;CACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Terminal } from "@xterm/xterm";
|
|
2
|
+
import type { Lazy } from "../server/index.js";
|
|
2
3
|
import type { TabId } from "../server/utilities/tabId.ts";
|
|
3
4
|
import type { InMemoryClipboardProvider } from "./clipboard.js";
|
|
4
5
|
export type TuiTerminalApi = {
|
|
@@ -8,6 +9,7 @@ export type TuiTerminalApi = {
|
|
|
8
9
|
domEvent: KeyboardEvent;
|
|
9
10
|
}) => void;
|
|
10
11
|
clipboard: InMemoryClipboardProvider;
|
|
12
|
+
title: Lazy<string>;
|
|
11
13
|
};
|
|
12
14
|
export declare function startTerminal(app: HTMLElement, api: TuiTerminalApi): Terminal;
|
|
13
15
|
/** An identifier unique to a browser tab, so that each tab can have its own
|
|
@@ -12,6 +12,9 @@ export function startTerminal(app, api) {
|
|
|
12
12
|
convertEol: true,
|
|
13
13
|
fontSize: 13,
|
|
14
14
|
});
|
|
15
|
+
terminal.onTitleChange(title => {
|
|
16
|
+
api.title.set(title);
|
|
17
|
+
});
|
|
15
18
|
const colors = flavors.macchiato.colors;
|
|
16
19
|
terminal.options.theme = {
|
|
17
20
|
background: colors.base.hex,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startTerminal.js","sourceRoot":"","sources":["../../../src/client/startTerminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"startTerminal.js","sourceRoot":"","sources":["../../../src/client/startTerminal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
+
import { createTRPCClient } from "@trpc/client";
|
|
2
|
+
import type { Terminal } from "@xterm/xterm";
|
|
1
3
|
import type { StartTerminalBrowserArguments } from "../../browser/neovim-client.js";
|
|
2
4
|
import type { BlockingCommandClientInput } from "../../server/blockingCommandInputSchema.js";
|
|
5
|
+
import type { AppRouter } from "../../server/server.js";
|
|
3
6
|
import type { BlockingShellCommandOutput, ServerTestDirectory } from "../../server/types.js";
|
|
4
|
-
import type {
|
|
7
|
+
import type { TabId } from "../../server/utilities/tabId.js";
|
|
8
|
+
import { BatchedAsyncQueue, type TerminalInputEvent } from "../BatchedAsyncQueue.js";
|
|
5
9
|
import type { TuiTerminalApi } from "../startTerminal.js";
|
|
6
10
|
/** Manages the terminal state in the browser as well as the (browser's)
|
|
7
11
|
* connection to the server side terminal application api. */
|
|
8
12
|
export declare class TerminalTerminalClient {
|
|
9
|
-
private readonly ready;
|
|
10
13
|
private readonly tabId;
|
|
11
14
|
private readonly terminal;
|
|
12
15
|
private readonly trpc;
|
|
13
16
|
private readonly inputQueue;
|
|
14
|
-
readonly clipboard: InMemoryClipboard;
|
|
15
17
|
readonly terminalApi: TuiTerminalApi;
|
|
16
|
-
constructor(
|
|
18
|
+
constructor(tabId: TabId, terminal: Terminal, trpc: ReturnType<typeof createTRPCClient<AppRouter>>, inputQueue: BatchedAsyncQueue<TerminalInputEvent>, terminalApi: TuiTerminalApi);
|
|
19
|
+
static create(app: HTMLElement): Promise<TerminalTerminalClient>;
|
|
17
20
|
startTerminalApplication(args: StartTerminalBrowserArguments): Promise<ServerTestDirectory>;
|
|
18
21
|
runBlockingShellCommand(input: BlockingCommandClientInput): Promise<BlockingShellCommandOutput>;
|
|
19
22
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createTRPCClient, httpBatchLink, httpSubscriptionLink, splitLink } from "@trpc/client";
|
|
2
|
+
import { Lazy } from "../../server/utilities/Lazy.js";
|
|
2
3
|
import { BatchedAsyncQueue } from "../BatchedAsyncQueue.js";
|
|
3
4
|
import { InMemoryClipboardProvider } from "../clipboard.js";
|
|
4
5
|
import { getTabId, startTerminal } from "../startTerminal.js";
|
|
@@ -6,14 +7,19 @@ import { supportDA1 } from "./terminal-config.js";
|
|
|
6
7
|
/** Manages the terminal state in the browser as well as the (browser's)
|
|
7
8
|
* connection to the server side terminal application api. */
|
|
8
9
|
export class TerminalTerminalClient {
|
|
9
|
-
ready;
|
|
10
10
|
tabId;
|
|
11
11
|
terminal;
|
|
12
12
|
trpc;
|
|
13
13
|
inputQueue;
|
|
14
|
-
clipboard;
|
|
15
14
|
terminalApi;
|
|
16
|
-
constructor(
|
|
15
|
+
constructor(tabId, terminal, trpc, inputQueue, terminalApi) {
|
|
16
|
+
this.tabId = tabId;
|
|
17
|
+
this.terminal = terminal;
|
|
18
|
+
this.trpc = trpc;
|
|
19
|
+
this.inputQueue = inputQueue;
|
|
20
|
+
this.terminalApi = terminalApi;
|
|
21
|
+
}
|
|
22
|
+
static async create(app) {
|
|
17
23
|
const trpc = createTRPCClient({
|
|
18
24
|
links: [
|
|
19
25
|
splitLink({
|
|
@@ -27,41 +33,36 @@ export class TerminalTerminalClient {
|
|
|
27
33
|
}),
|
|
28
34
|
],
|
|
29
35
|
});
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
const keys = events.join("");
|
|
40
|
-
await trpc.terminal.sendStdin.mutate({ tabId: this.tabId, data: keys });
|
|
41
|
-
}, controller.signal);
|
|
42
|
-
}
|
|
36
|
+
const tabId = getTabId();
|
|
37
|
+
const controller = new AbortController();
|
|
38
|
+
window.addEventListener("pagehide", () => {
|
|
39
|
+
controller.abort();
|
|
40
|
+
});
|
|
41
|
+
const inputQueue = new BatchedAsyncQueue(async (events) => {
|
|
42
|
+
const keys = events.join("");
|
|
43
|
+
await trpc.terminal.sendStdin.mutate({ tabId, data: keys });
|
|
44
|
+
}, controller.signal);
|
|
43
45
|
const clipboard = new InMemoryClipboardProvider();
|
|
44
|
-
|
|
46
|
+
const terminalApi = {
|
|
45
47
|
onMouseEvent: (data) => {
|
|
46
|
-
|
|
48
|
+
inputQueue.enqueue(data);
|
|
47
49
|
},
|
|
48
50
|
onKeyPress: (event) => {
|
|
49
|
-
|
|
51
|
+
inputQueue.enqueue(event.key);
|
|
50
52
|
},
|
|
51
53
|
clipboard,
|
|
54
|
+
title: new Lazy(() => "title not set yet"),
|
|
52
55
|
};
|
|
53
|
-
|
|
54
|
-
const terminal = startTerminal(app, this.terminalApi);
|
|
55
|
-
this.terminal = terminal;
|
|
56
|
+
const terminal = startTerminal(app, terminalApi);
|
|
56
57
|
// start listening to stdout - this will take some (short) amount of time
|
|
57
58
|
// to complete
|
|
58
|
-
|
|
59
|
+
await new Promise(resolve => {
|
|
59
60
|
console.log("Subscribing to stdout");
|
|
60
61
|
trpc.terminal.onStdout.subscribe({ client: tabId }, {
|
|
61
62
|
onStarted() {
|
|
62
63
|
resolve();
|
|
63
64
|
},
|
|
64
|
-
onData(data) {
|
|
65
|
+
onData: (data) => {
|
|
65
66
|
terminal.write(data);
|
|
66
67
|
},
|
|
67
68
|
onError(err) {
|
|
@@ -69,9 +70,9 @@ export class TerminalTerminalClient {
|
|
|
69
70
|
},
|
|
70
71
|
});
|
|
71
72
|
});
|
|
73
|
+
return new TerminalTerminalClient(tabId, terminal, trpc, inputQueue, terminalApi);
|
|
72
74
|
}
|
|
73
75
|
async startTerminalApplication(args) {
|
|
74
|
-
await this.ready;
|
|
75
76
|
args.browserSettings.configureTerminal?.({
|
|
76
77
|
terminal: this.terminal,
|
|
77
78
|
api: this.terminalApi,
|
|
@@ -96,7 +97,6 @@ export class TerminalTerminalClient {
|
|
|
96
97
|
return testDirectory;
|
|
97
98
|
}
|
|
98
99
|
async runBlockingShellCommand(input) {
|
|
99
|
-
await this.ready;
|
|
100
100
|
return this.trpc.terminal.runBlockingShellCommand.mutate({ ...input, tabId: this.tabId });
|
|
101
101
|
}
|
|
102
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-terminal-client.js","sourceRoot":"","sources":["../../../../src/client/terminal/terminal-terminal-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAM/F,OAAO,EAAE,iBAAiB,EAA2B,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"terminal-terminal-client.js","sourceRoot":"","sources":["../../../../src/client/terminal/terminal-terminal-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,10 @@ export type TerminalTestApplicationContext = {
|
|
|
48
48
|
system(): Cypress.Chainable<string>
|
|
49
49
|
primary(): Cypress.Chainable<string>
|
|
50
50
|
}
|
|
51
|
+
|
|
52
|
+
title: {
|
|
53
|
+
current(): Cypress.Chainable<string>
|
|
54
|
+
}
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
/** The api that can be used in tests after a Neovim instance has been started. */
|
|
@@ -94,6 +98,10 @@ export type NeovimContext = {
|
|
|
94
98
|
system(): Cypress.Chainable<string>
|
|
95
99
|
primary(): Cypress.Chainable<string>
|
|
96
100
|
}
|
|
101
|
+
|
|
102
|
+
title: {
|
|
103
|
+
current(): Cypress.Chainable<string>
|
|
104
|
+
}
|
|
97
105
|
}
|
|
98
106
|
|
|
99
107
|
/** Arguments for starting the neovim server. They are built based on your test
|
|
@@ -154,6 +162,10 @@ Cypress.Commands.add("startNeovim", (startArguments?: MyStartNeovimServerArgumen
|
|
|
154
162
|
return cy.then(() => underlyingNeovim.clipboard.system())
|
|
155
163
|
},
|
|
156
164
|
},
|
|
165
|
+
|
|
166
|
+
title: {
|
|
167
|
+
current: () => cy.then(() => underlyingNeovim.title.get()),
|
|
168
|
+
},
|
|
157
169
|
}
|
|
158
170
|
|
|
159
171
|
return api
|
|
@@ -191,12 +203,11 @@ Cypress.Commands.add("startTerminalApplication", (args: StartTerminalGenericArgu
|
|
|
191
203
|
cy.typeIntoTerminal(text, options)
|
|
192
204
|
},
|
|
193
205
|
clipboard: {
|
|
194
|
-
primary()
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
},
|
|
206
|
+
primary: () => cy.then(() => terminal.clipboard.primary()),
|
|
207
|
+
system: () => cy.then(() => terminal.clipboard.system()),
|
|
208
|
+
},
|
|
209
|
+
title: {
|
|
210
|
+
current: () => cy.then(() => terminal.title.get()),
|
|
200
211
|
},
|
|
201
212
|
}
|
|
202
213
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contents.js","sourceRoot":"","sources":["../../../../src/server/cypress-support/contents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAEjD,MAAM,CAAC,KAAK,UAAU,gCAAgC;IACpD,uEAAuE;IACvE,2BAA2B;IAC3B,IAAI,IAAI,GAAG
|
|
1
|
+
{"version":3,"file":"contents.js","sourceRoot":"","sources":["../../../../src/server/cypress-support/contents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAEjD,MAAM,CAAC,KAAK,UAAU,gCAAgC;IACpD,uEAAuE;IACvE,2BAA2B;IAC3B,IAAI,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4QZ,CAAA;IAEC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAA;IAC/C,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;IAE/D,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -81,6 +81,7 @@ describe("dirtree", () => {
|
|
|
81
81
|
name: z.literal("don't_crash_when_modification_contains_unescaped_characters\\".lua"),
|
|
82
82
|
type: z.literal("file"),
|
|
83
83
|
}),
|
|
84
|
+
"set_terminal_title.lua": z.object({ name: z.literal("set_terminal_title.lua"), type: z.literal("file") }),
|
|
84
85
|
subdir: z.object({
|
|
85
86
|
name: z.literal("subdir/"),
|
|
86
87
|
type: z.literal("directory"),
|
|
@@ -177,6 +178,7 @@ describe("dirtree", () => {
|
|
|
177
178
|
"config-modifications/add_command_to_count_open_buffers.lua",
|
|
178
179
|
"config-modifications/add_command_to_update_buffer_after_timeout.lua",
|
|
179
180
|
"config-modifications/don't_crash_when_modification_contains_unescaped_characters\\".lua",
|
|
181
|
+
"config-modifications/set_terminal_title.lua",
|
|
180
182
|
"config-modifications/subdir/subdir-modification.lua",
|
|
181
183
|
"config-modifications/subdir",
|
|
182
184
|
"config-modifications",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/server/dirtree/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE1E,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAC3B,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,CAAC,CACxG,CAAA;IAED,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAA;QAEpC,MAAM,CAAC,MAAM,CAAC,CAAA;QACd,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACjB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,MAAM,GAAqB;YAC/B,GAAG,mBAAmB,CAAC,eAAe,EAAE,EAAE,CAAC;YAC3C,YAAY,EAAE;gBACZ,MAAM,EAAE;oBACN,aAAa,EAAE,CAAC,MAAgD,EAAE,UAAU,CAAC;iBAC9E;aACF;SACF,CAAA;QACD,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAEzF,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/server/dirtree/index.test.ts"],"names":[],"mappings":"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"}
|