@tui-sandbox/library 12.5.3 → 12.6.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/bin/tui.js +2 -0
- package/dist/browser/assets/{index-DKOcdt_4.js → index-C1F3S38B.js} +3 -3
- package/dist/browser/index.html +1 -1
- package/dist/src/scripts/commands/commandRun.js +2 -2
- package/dist/src/scripts/commands/commandRun.js.map +1 -1
- package/dist/src/scripts/tui.js +0 -0
- package/dist/src/server/TestServer.js +32 -23
- package/dist/src/server/TestServer.js.map +1 -1
- package/dist/src/server/applications/neovim/NeovimApplication.d.ts +3 -1
- package/dist/src/server/applications/neovim/NeovimApplication.js +7 -2
- package/dist/src/server/applications/neovim/NeovimApplication.js.map +1 -1
- package/dist/src/server/applications/neovim/api.js +3 -1
- package/dist/src/server/applications/neovim/api.js.map +1 -1
- package/dist/src/server/applications/neovim/environment/TempDirectory.d.ts +1 -1
- package/dist/src/server/applications/neovim/environment/TempDirectory.js +2 -2
- package/dist/src/server/applications/neovim/environment/TempDirectory.js.map +1 -1
- package/dist/src/server/applications/neovim/environment/XdgRuntimeDirectory.d.ts +25 -0
- package/dist/src/server/applications/neovim/environment/XdgRuntimeDirectory.js +52 -0
- package/dist/src/server/applications/neovim/environment/XdgRuntimeDirectory.js.map +1 -0
- package/dist/src/server/applications/neovim/environment/XdgRuntimeDirectory.test.d.ts +1 -0
- package/dist/src/server/applications/neovim/environment/XdgRuntimeDirectory.test.js +155 -0
- package/dist/src/server/applications/neovim/environment/XdgRuntimeDirectory.test.js.map +1 -0
- package/dist/src/server/applications/terminal/TerminalTestApplication.d.ts +3 -1
- package/dist/src/server/applications/terminal/TerminalTestApplication.js +7 -3
- package/dist/src/server/applications/terminal/TerminalTestApplication.js.map +1 -1
- package/dist/src/server/applications/terminal/api.js +3 -1
- package/dist/src/server/applications/terminal/api.js.map +1 -1
- package/dist/src/server/types.d.ts +12 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +15 -15
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-C1F3S38B.js"></script>
|
|
7
7
|
<link rel="stylesheet" crossorigin href="/assets/index-DeHrVVje.css">
|
|
8
8
|
</head>
|
|
9
9
|
<body>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import assert from "assert";
|
|
2
|
-
import concurrently from "concurrently";
|
|
2
|
+
import { concurrently } from "concurrently";
|
|
3
3
|
import { debuglog } from "util";
|
|
4
4
|
import * as z from "zod";
|
|
5
5
|
const log = debuglog("tui-sandbox.commandRun");
|
|
@@ -13,7 +13,7 @@ export async function commandRun() {
|
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
name: cypressName,
|
|
16
|
-
command: `
|
|
16
|
+
command: `wait-on --timeout 60000 http-get://127.0.0.1:3000/ping && cypress run --config baseUrl=http://127.0.0.1:3000 --quiet`,
|
|
17
17
|
prefixColor: "yellow",
|
|
18
18
|
},
|
|
19
19
|
], {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandRun.js","sourceRoot":"","sources":["../../../../src/scripts/commands/commandRun.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,OAAO,YAAY,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"commandRun.js","sourceRoot":"","sources":["../../../../src/scripts/commands/commandRun.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAGxB,MAAM,GAAG,GAAG,QAAQ,CAAC,wBAAwB,CAAC,CAAA;AAI9C,MAAM,WAAW,GAAG,SAAS,CAAA;AAC7B,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,GAAG,GAAG,YAAY,CACtB;QACE;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,WAAW;YACpB,WAAW,EAAE,MAAM;SACpB;QACD;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,sHAAsH;YAC/H,WAAW,EAAE,QAAQ;SACtB;KACF,EACD;QACE,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QACpC,SAAS,EAAE,IAAI,EAAE,yCAAyC;QAC1D,gBAAgB,EAAE,iBAAiB,EAAE,+CAA+C;KACrF,CACF,CAAA;IAED,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CACnB,CAAC,CAAC,EAAE;QACF,GAAG,CAAC,qCAAqC,CAAC,CAAA;IAC5C,CAAC,EACD,CAAC,GAAY,EAAE,EAAE;QACf,GAAG,CAAC,kDAAkD,EAAE,GAAG,CAAC,CAAA;IAC9D,CAAC,CACF,CAAA;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAA;QAC/B,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;QACzE,MAAM,CAAC,cAAc,EAAE,yCAAyC,CAAC,CAAA;QACjE,OAAO,cAAc,CAAC,QAAQ,CAAA;IAChC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,sFAAsF;QACtF,sHAAsH;QACtH,MAAM,KAAK,GAAG,CAAC;aACZ,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;gBAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;aACqC,CAAC;YACxD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACO,CAAC,CAC9C;aACA,KAAK,CAAC,CAAC,CAAC,CAAA;QAEX,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;QAC1E,MAAM,CAAC,cAAc,EAAE,yCAAyC,CAAC,CAAA;QAEjE,OAAO,cAAc,CAAC,QAAQ,CAAA;IAChC,CAAC;AACH,CAAC"}
|
package/dist/src/scripts/tui.js
CHANGED
|
File without changes
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createHTTPHandler } from "@trpc/server/adapters/standalone";
|
|
2
2
|
import cors from "cors";
|
|
3
3
|
import { once } from "events";
|
|
4
|
-
import express from "express";
|
|
5
4
|
import { accessSync } from "fs";
|
|
5
|
+
import { createServer } from "http";
|
|
6
6
|
import path from "path";
|
|
7
|
+
import sirv from "sirv";
|
|
7
8
|
import { fileURLToPath } from "url";
|
|
8
9
|
import { debuglog } from "util";
|
|
9
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -16,32 +17,40 @@ export class TestServer {
|
|
|
16
17
|
}
|
|
17
18
|
async startAndRun(appRouter) {
|
|
18
19
|
log("🚀 Server starting");
|
|
19
|
-
const
|
|
20
|
-
app.use("/trpc", trpcExpress.createExpressMiddleware({
|
|
20
|
+
const trpcHandler = createHTTPHandler({
|
|
21
21
|
router: appRouter,
|
|
22
22
|
createContext: () => ({}),
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
basePath: "/trpc/",
|
|
24
|
+
middleware: cors({ origin: "*" }),
|
|
25
|
+
});
|
|
26
|
+
const publicPath = path.resolve(__dirname, "..", "..", "browser");
|
|
27
|
+
let serveStatic = (_req, _res, next) => void next?.();
|
|
28
|
+
try {
|
|
29
|
+
accessSync(publicPath);
|
|
30
|
+
serveStatic = sirv(publicPath, { single: true });
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// This is normal when developing the tui-sandbox library locally. It
|
|
34
|
+
// should always exist when using it as an npm package, however.
|
|
35
|
+
console.warn(`⚠️ Warning: Looks like the tui-sandbox root contents directory is not accessible at: ${publicPath}`);
|
|
36
|
+
}
|
|
37
|
+
const server = createServer((req, res) => {
|
|
38
|
+
const url = req.url ?? "/";
|
|
39
|
+
if (url.startsWith("/trpc/")) {
|
|
40
|
+
trpcHandler(req, res);
|
|
41
|
+
return;
|
|
31
42
|
}
|
|
32
|
-
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
-
|
|
43
|
+
if (url === "/ping") {
|
|
44
|
+
// used by the command-line test runner to see when the server is ready
|
|
45
|
+
res.end("pong");
|
|
46
|
+
return;
|
|
36
47
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
// used by the command-line test runner to see when the server is ready
|
|
42
|
-
res.send("pong");
|
|
48
|
+
serveStatic(req, res, () => {
|
|
49
|
+
res.statusCode = 404;
|
|
50
|
+
res.end("Not Found");
|
|
51
|
+
});
|
|
43
52
|
});
|
|
44
|
-
|
|
53
|
+
server.listen(this.settings.port, "0.0.0.0");
|
|
45
54
|
console.info(`✅ Server listening on port ${this.settings.port}`);
|
|
46
55
|
await Promise.race([once(process, "SIGTERM"), once(process, "SIGINT")]);
|
|
47
56
|
log("😴 Shutting down...");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestServer.js","sourceRoot":"","sources":["../../../src/server/TestServer.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"TestServer.js","sourceRoot":"","sources":["../../../src/server/TestServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { NeovimClient as NeovimApiClient } from "neovim";
|
|
|
3
3
|
import type { TestDirectory } from "../../types.js";
|
|
4
4
|
import { DisposableSingleApplication } from "../../utilities/DisposableSingleApplication.js";
|
|
5
5
|
import type { Lazy } from "../../utilities/Lazy.js";
|
|
6
|
+
import { XdgRuntimeDirectory } from "./environment/XdgRuntimeDirectory.js";
|
|
6
7
|
export type StdoutOrStderrMessage = "stdout";
|
|
7
8
|
export type StartNeovimGenericArguments = {
|
|
8
9
|
filename: string | {
|
|
@@ -36,6 +37,7 @@ type ResettableState = {
|
|
|
36
37
|
NVIM_APPNAME: string | undefined;
|
|
37
38
|
socketPath: string;
|
|
38
39
|
client: Lazy<Promise<NeovimApiClient>>;
|
|
40
|
+
xdgRuntimeDirectory: XdgRuntimeDirectory;
|
|
39
41
|
};
|
|
40
42
|
export declare class NeovimApplication implements AsyncDisposable {
|
|
41
43
|
private readonly testEnvironmentPath;
|
|
@@ -47,7 +49,7 @@ export declare class NeovimApplication implements AsyncDisposable {
|
|
|
47
49
|
* Kill the current application and start a new one with the given arguments.
|
|
48
50
|
*/
|
|
49
51
|
startNextAndKillCurrent(testDirectory: TestDirectory, startArgs: StartNeovimGenericArguments, terminalDimensions: TerminalDimensions): Promise<void>;
|
|
50
|
-
static getEnvironmentVariables(testDirectory: TestDirectory, NVIM_APPNAME: string | undefined, additionalEnvironmentVariables?: Record<string, string>): Record<string, string>;
|
|
52
|
+
static getEnvironmentVariables(testDirectory: TestDirectory, xdgRuntimeDir: string, NVIM_APPNAME: string | undefined, additionalEnvironmentVariables?: Record<string, string>): Record<string, string>;
|
|
51
53
|
[Symbol.asyncDispose](): Promise<void>;
|
|
52
54
|
}
|
|
53
55
|
export {};
|
|
@@ -7,6 +7,7 @@ import path, { join } from "path";
|
|
|
7
7
|
import { debuglog } from "util";
|
|
8
8
|
import { DisposableSingleApplication } from "../../utilities/DisposableSingleApplication.js";
|
|
9
9
|
import { TerminalApplication } from "../../utilities/TerminalApplication.js";
|
|
10
|
+
import { XdgRuntimeDirectory } from "./environment/XdgRuntimeDirectory.js";
|
|
10
11
|
import { connectNeovimApi } from "./NeovimJavascriptApiClient.js";
|
|
11
12
|
const log = debuglog("tui-sandbox-neovim-application");
|
|
12
13
|
export class NeovimApplication {
|
|
@@ -60,9 +61,10 @@ export class NeovimApplication {
|
|
|
60
61
|
const id = Math.random().toString().slice(2, 8);
|
|
61
62
|
const socketPath = `${tmpdir()}/tui-sandbox-nvim-socket-${id}`;
|
|
62
63
|
neovimArguments.push("--listen", socketPath);
|
|
64
|
+
const xdgRuntimeDirectory = await XdgRuntimeDirectory.create(testDirectory.rootPathAbsolute);
|
|
63
65
|
const stdout = this.events;
|
|
64
66
|
await this.application.startNextAndKillCurrent(async () => {
|
|
65
|
-
const env = NeovimApplication.getEnvironmentVariables(testDirectory, startArgs.NVIM_APPNAME, startArgs.additionalEnvironmentVariables);
|
|
67
|
+
const env = NeovimApplication.getEnvironmentVariables(testDirectory, xdgRuntimeDirectory.path, startArgs.NVIM_APPNAME, startArgs.additionalEnvironmentVariables);
|
|
66
68
|
return TerminalApplication.start({
|
|
67
69
|
command: "nvim",
|
|
68
70
|
args: neovimArguments,
|
|
@@ -84,16 +86,18 @@ export class NeovimApplication {
|
|
|
84
86
|
socketPath,
|
|
85
87
|
NVIM_APPNAME: startArgs.NVIM_APPNAME,
|
|
86
88
|
client: connectNeovimApi(socketPath),
|
|
89
|
+
xdgRuntimeDirectory,
|
|
87
90
|
};
|
|
88
91
|
log(`🚀 Started Neovim instance ${processId} (NVIM_APPNAME: ${startArgs.NVIM_APPNAME})`);
|
|
89
92
|
}
|
|
90
|
-
static getEnvironmentVariables(testDirectory, NVIM_APPNAME, additionalEnvironmentVariables) {
|
|
93
|
+
static getEnvironmentVariables(testDirectory, xdgRuntimeDir, NVIM_APPNAME, additionalEnvironmentVariables) {
|
|
91
94
|
return {
|
|
92
95
|
...process.env,
|
|
93
96
|
...{
|
|
94
97
|
HOME: testDirectory.rootPathAbsolute,
|
|
95
98
|
XDG_CONFIG_HOME: join(testDirectory.rootPathAbsolute, ".config"),
|
|
96
99
|
XDG_DATA_HOME: join(testDirectory.testEnvironmentPath, ".repro", "data"),
|
|
100
|
+
XDG_RUNTIME_DIR: xdgRuntimeDir,
|
|
97
101
|
TUI_SANDBOX_TEST_ENVIRONMENT_PATH: testDirectory.testEnvironmentPath,
|
|
98
102
|
},
|
|
99
103
|
NVIM_APPNAME: NVIM_APPNAME ?? "nvim",
|
|
@@ -104,6 +108,7 @@ export class NeovimApplication {
|
|
|
104
108
|
await this.application[Symbol.asyncDispose]();
|
|
105
109
|
if (!this.state)
|
|
106
110
|
return;
|
|
111
|
+
await this.state.xdgRuntimeDirectory[Symbol.asyncDispose]();
|
|
107
112
|
exec(`rm -rf ${this.state.testDirectory.rootPathAbsolute}`);
|
|
108
113
|
try {
|
|
109
114
|
await access(this.state.socketPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeovimApplication.js","sourceRoot":"","sources":["../../../../../src/server/applications/neovim/NeovimApplication.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,YAAY,MAAM,QAAQ,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAA;AAE5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEjE,MAAM,GAAG,GAAG,QAAQ,CAAC,gCAAgC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"NeovimApplication.js","sourceRoot":"","sources":["../../../../../src/server/applications/neovim/NeovimApplication.ts"],"names":[],"mappings":"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"}
|
|
@@ -146,7 +146,9 @@ export async function runBlockingShellCommand(signal, input, allowFailure) {
|
|
|
146
146
|
assert(neovim !== undefined, `Neovim instance for clientId not found - cannot run blocking shell command. Maybe neovim's not started yet?`);
|
|
147
147
|
const testDirectory = neovim.state?.testDirectory;
|
|
148
148
|
assert(testDirectory, `Test directory not found for client id ${input.tabId.tabId}. Maybe neovim's not started yet?`);
|
|
149
|
-
const
|
|
149
|
+
const xdgRuntimeDirectory = neovim.state?.xdgRuntimeDirectory;
|
|
150
|
+
assert(xdgRuntimeDirectory, `XDG runtime directory not found for client id ${input.tabId.tabId}. Maybe neovim's not started yet?`);
|
|
151
|
+
const env = NeovimApplication.getEnvironmentVariables(testDirectory, xdgRuntimeDirectory.path, neovim.state?.NVIM_APPNAME, input.envOverrides);
|
|
150
152
|
return executeBlockingShellCommand(testDirectory, input, signal, allowFailure, env);
|
|
151
153
|
}
|
|
152
154
|
export async function runLuaCode(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../../src/server/applications/neovim/api.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../../src/server/applications/neovim/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,6 @@ export type TestTempDirPrefix = "test-temp-dir-";
|
|
|
2
2
|
export declare class TempDirectory implements Disposable {
|
|
3
3
|
readonly path: string;
|
|
4
4
|
private constructor();
|
|
5
|
-
static create(): TempDirectory;
|
|
5
|
+
static create(prefix?: `${string}-`): TempDirectory;
|
|
6
6
|
[Symbol.dispose](): void;
|
|
7
7
|
}
|
|
@@ -5,8 +5,8 @@ export class TempDirectory {
|
|
|
5
5
|
constructor(path) {
|
|
6
6
|
this.path = path;
|
|
7
7
|
}
|
|
8
|
-
static create() {
|
|
9
|
-
const tmp = fs.mkdtempSync(
|
|
8
|
+
static create(prefix = "test-temp-dir-") {
|
|
9
|
+
const tmp = fs.mkdtempSync(prefix);
|
|
10
10
|
const absolutePath = nodePath.resolve(tmp);
|
|
11
11
|
return new TempDirectory(absolutePath);
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TempDirectory.js","sourceRoot":"","sources":["../../../../../../src/server/applications/neovim/environment/TempDirectory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,QAAQ,MAAM,MAAM,CAAA;AAI3B,MAAM,OAAO,aAAa;IACY;IAApC,YAAoC,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE7C,MAAM,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"TempDirectory.js","sourceRoot":"","sources":["../../../../../../src/server/applications/neovim/environment/TempDirectory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,QAAQ,MAAM,MAAM,CAAA;AAI3B,MAAM,OAAO,aAAa;IACY;IAApC,YAAoC,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE7C,MAAM,CAAC,MAAM,CAAC,SAAuB,gBAA4C;QACtF,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC1C,OAAO,IAAI,aAAa,CAAC,YAAY,CAAC,CAAA;IACxC,CAAC;IAED,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;IAC7D,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type XdgRuntimeDirPrefix = "tui-xdg-";
|
|
2
|
+
/**
|
|
3
|
+
* A short-lived, uniquely named directory used as `$XDG_RUNTIME_DIR` for a
|
|
4
|
+
* single application instance. Disposing it removes the directory (and anything
|
|
5
|
+
* the application created inside it, such as sockets).
|
|
6
|
+
*
|
|
7
|
+
* It is created under the system temp directory. `$XDG_RUNTIME_DIR` holds Unix
|
|
8
|
+
* domain sockets (for example yazi's DDS `.dds.sock`), and socket paths have a
|
|
9
|
+
* hard OS length limit (~104 bytes on macOS, ~108 on Linux). The deep path of
|
|
10
|
+
* a test directory easily exceeds it, which makes `bind()` fail with
|
|
11
|
+
* `ENAMETOOLONG` so the socket silently never appears. Keeping this directory
|
|
12
|
+
* shallow leaves room for the socket name the application appends.
|
|
13
|
+
*
|
|
14
|
+
* For discoverability while debugging, a `.xdg-runtime` symlink pointing at
|
|
15
|
+
* {@link path} is also created inside the unique test directory. The symlink is
|
|
16
|
+
* never used as `$XDG_RUNTIME_DIR` itself (that is always {@link path}, the
|
|
17
|
+
* short one), so it does not affect the socket path length.
|
|
18
|
+
*/
|
|
19
|
+
export declare class XdgRuntimeDirectory implements AsyncDisposable {
|
|
20
|
+
readonly path: string;
|
|
21
|
+
readonly symlinkPath: string;
|
|
22
|
+
private constructor();
|
|
23
|
+
static create(uniqueTestDirectory: string): Promise<XdgRuntimeDirectory>;
|
|
24
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { mkdtemp, rm, symlink } from "fs/promises";
|
|
2
|
+
import { tmpdir } from "os";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { debuglog } from "util";
|
|
5
|
+
const log = debuglog("tui-sandbox.XdgRuntimeDirectory");
|
|
6
|
+
/**
|
|
7
|
+
* A short-lived, uniquely named directory used as `$XDG_RUNTIME_DIR` for a
|
|
8
|
+
* single application instance. Disposing it removes the directory (and anything
|
|
9
|
+
* the application created inside it, such as sockets).
|
|
10
|
+
*
|
|
11
|
+
* It is created under the system temp directory. `$XDG_RUNTIME_DIR` holds Unix
|
|
12
|
+
* domain sockets (for example yazi's DDS `.dds.sock`), and socket paths have a
|
|
13
|
+
* hard OS length limit (~104 bytes on macOS, ~108 on Linux). The deep path of
|
|
14
|
+
* a test directory easily exceeds it, which makes `bind()` fail with
|
|
15
|
+
* `ENAMETOOLONG` so the socket silently never appears. Keeping this directory
|
|
16
|
+
* shallow leaves room for the socket name the application appends.
|
|
17
|
+
*
|
|
18
|
+
* For discoverability while debugging, a `.xdg-runtime` symlink pointing at
|
|
19
|
+
* {@link path} is also created inside the unique test directory. The symlink is
|
|
20
|
+
* never used as `$XDG_RUNTIME_DIR` itself (that is always {@link path}, the
|
|
21
|
+
* short one), so it does not affect the socket path length.
|
|
22
|
+
*/
|
|
23
|
+
export class XdgRuntimeDirectory {
|
|
24
|
+
path;
|
|
25
|
+
symlinkPath;
|
|
26
|
+
constructor(path, symlinkPath) {
|
|
27
|
+
this.path = path;
|
|
28
|
+
this.symlinkPath = symlinkPath;
|
|
29
|
+
}
|
|
30
|
+
static async create(uniqueTestDirectory) {
|
|
31
|
+
const path = await mkdtemp(join(tmpdir(), "tui-xdg-"));
|
|
32
|
+
// symlink it to the unique test directory for discoverability while
|
|
33
|
+
// debugging
|
|
34
|
+
const symlinkPath = join(uniqueTestDirectory, ".xdg-runtime");
|
|
35
|
+
try {
|
|
36
|
+
await symlink(path, symlinkPath, "junction");
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
// don't leak the temp directory if the symlink could not be created
|
|
40
|
+
await rm(path, { recursive: true, force: true, maxRetries: 5 });
|
|
41
|
+
throw e;
|
|
42
|
+
}
|
|
43
|
+
return new XdgRuntimeDirectory(path, symlinkPath);
|
|
44
|
+
}
|
|
45
|
+
async [Symbol.asyncDispose]() {
|
|
46
|
+
log(`Removing XDG_RUNTIME_DIR ${this.path}`);
|
|
47
|
+
await rm(this.path, { recursive: true, force: true, maxRetries: 5 });
|
|
48
|
+
log(`Removing XDG_RUNTIME_DIR symlink ${this.symlinkPath}`);
|
|
49
|
+
await rm(this.symlinkPath, { force: true });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=XdgRuntimeDirectory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XdgRuntimeDirectory.js","sourceRoot":"","sources":["../../../../../../src/server/applications/neovim/environment/XdgRuntimeDirectory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,MAAM,GAAG,GAAG,QAAQ,CAAC,iCAAiC,CAAC,CAAA;AAIvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,mBAAmB;IAEZ;IACA;IAFlB,YACkB,IAAY,EACZ,WAAmB;QADnB,SAAI,GAAJ,IAAI,CAAQ;QACZ,gBAAW,GAAX,WAAW,CAAQ;IAClC,CAAC;IAEG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,mBAA2B;QACpD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,UAAwC,CAAC,CAAC,CAAA;QAEpF,oEAAoE;QACpE,YAAY;QACZ,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAA;QAC7D,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,oEAAoE;YACpE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;YAC/D,MAAM,CAAC,CAAA;QACT,CAAC;QAED,OAAO,IAAI,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IACnD,CAAC;IAEM,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QAChC,GAAG,CAAC,4BAA4B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAC5C,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;QAEpE,GAAG,CAAC,oCAAoC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QAC3D,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
+
}
|
|
18
|
+
else if (async) {
|
|
19
|
+
env.stack.push({ async: true });
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
+
return function (env) {
|
|
25
|
+
function fail(e) {
|
|
26
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
+
env.hasError = true;
|
|
28
|
+
}
|
|
29
|
+
var r, s = 0;
|
|
30
|
+
function next() {
|
|
31
|
+
while (r = env.stack.pop()) {
|
|
32
|
+
try {
|
|
33
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
+
if (r.dispose) {
|
|
35
|
+
var result = r.dispose.call(r.value);
|
|
36
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
+
}
|
|
38
|
+
else s |= 1;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
fail(e);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
+
if (env.hasError) throw env.error;
|
|
46
|
+
}
|
|
47
|
+
return next();
|
|
48
|
+
};
|
|
49
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
+
var e = new Error(message);
|
|
51
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
+
});
|
|
53
|
+
import { existsSync, lstatSync } from "fs";
|
|
54
|
+
import { tmpdir } from "os";
|
|
55
|
+
import { join } from "path";
|
|
56
|
+
import { expect, it } from "vitest";
|
|
57
|
+
import { TempDirectory } from "./TempDirectory.js";
|
|
58
|
+
import { XdgRuntimeDirectory } from "./XdgRuntimeDirectory.js";
|
|
59
|
+
const newTestDir = () => TempDirectory.create("tui-test-");
|
|
60
|
+
/** Whether a symlink file exists at `path`, without following it (so a dangling
|
|
61
|
+
* link still counts as existing). Plain `existsSync` follows the link and would
|
|
62
|
+
* report `false` for a dangling symlink, hiding whether the link was removed. */
|
|
63
|
+
const symlinkFileExists = (path) => {
|
|
64
|
+
try {
|
|
65
|
+
return lstatSync(path).isSymbolicLink();
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
it("creates a uniquely named directory under the system temp dir", async () => {
|
|
72
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
73
|
+
try {
|
|
74
|
+
const testDir = __addDisposableResource(env_1, newTestDir(), false);
|
|
75
|
+
const dir = __addDisposableResource(env_1, await XdgRuntimeDirectory.create(testDir.path), true);
|
|
76
|
+
expect(existsSync(dir.path)).toBe(true);
|
|
77
|
+
expect(dir.path).toContain("tui-xdg-");
|
|
78
|
+
}
|
|
79
|
+
catch (e_1) {
|
|
80
|
+
env_1.error = e_1;
|
|
81
|
+
env_1.hasError = true;
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
const result_1 = __disposeResources(env_1);
|
|
85
|
+
if (result_1)
|
|
86
|
+
await result_1;
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
it("removes the directory and the symlink when disposed", async () => {
|
|
90
|
+
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
91
|
+
try {
|
|
92
|
+
const testDir = __addDisposableResource(env_2, newTestDir(), false);
|
|
93
|
+
let createdPath;
|
|
94
|
+
let createdSymlinkPath;
|
|
95
|
+
{
|
|
96
|
+
const env_3 = { stack: [], error: void 0, hasError: false };
|
|
97
|
+
try {
|
|
98
|
+
const dir = __addDisposableResource(env_3, await XdgRuntimeDirectory.create(testDir.path), true);
|
|
99
|
+
createdPath = dir.path;
|
|
100
|
+
createdSymlinkPath = dir.symlinkPath;
|
|
101
|
+
expect(existsSync(createdPath)).toBe(true);
|
|
102
|
+
expect(symlinkFileExists(createdSymlinkPath)).toBe(true);
|
|
103
|
+
}
|
|
104
|
+
catch (e_2) {
|
|
105
|
+
env_3.error = e_2;
|
|
106
|
+
env_3.hasError = true;
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
const result_2 = __disposeResources(env_3);
|
|
110
|
+
if (result_2)
|
|
111
|
+
await result_2;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// checked while `testDir` is still alive, so this asserts the dispose itself
|
|
115
|
+
// unlinked the symlink (rather than the test directory cleanup doing it)
|
|
116
|
+
expect(existsSync(createdPath)).toBe(false);
|
|
117
|
+
expect(symlinkFileExists(createdSymlinkPath)).toBe(false);
|
|
118
|
+
}
|
|
119
|
+
catch (e_3) {
|
|
120
|
+
env_2.error = e_3;
|
|
121
|
+
env_2.hasError = true;
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
__disposeResources(env_2);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
it("rejects (and does not leak a temp dir) when the symlink cannot be created", async () => {
|
|
128
|
+
// a non-existent parent makes the symlink() call fail with ENOENT
|
|
129
|
+
const missingTestDir = join(tmpdir(), "does-not-exist-3f9c1a", "nested");
|
|
130
|
+
await expect(XdgRuntimeDirectory.create(missingTestDir)).rejects.toThrow();
|
|
131
|
+
});
|
|
132
|
+
it("stays well under the OS Unix-socket path limit (this is the reason it exists)", async () => {
|
|
133
|
+
const env_4 = { stack: [], error: void 0, hasError: false };
|
|
134
|
+
try {
|
|
135
|
+
// The directory holds Unix domain sockets (e.g. yazi appends
|
|
136
|
+
// `/yazi+<uid>/.dds.sock`). The full socket path must fit in `sun_path`
|
|
137
|
+
// (~104 bytes on macOS, ~108 on Linux), so the directory itself must leave
|
|
138
|
+
// ample room.
|
|
139
|
+
const testDir = __addDisposableResource(env_4, newTestDir(), false);
|
|
140
|
+
const dir = __addDisposableResource(env_4, await XdgRuntimeDirectory.create(testDir.path), true);
|
|
141
|
+
const exampleSocketPath = join(dir.path, "yazi+1000", ".dds.sock");
|
|
142
|
+
// Use the stricter macOS limit as the bound so it holds on both platforms.
|
|
143
|
+
expect(exampleSocketPath.length).toBeLessThan(104);
|
|
144
|
+
}
|
|
145
|
+
catch (e_4) {
|
|
146
|
+
env_4.error = e_4;
|
|
147
|
+
env_4.hasError = true;
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
const result_3 = __disposeResources(env_4);
|
|
151
|
+
if (result_3)
|
|
152
|
+
await result_3;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=XdgRuntimeDirectory.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XdgRuntimeDirectory.test.js","sourceRoot":"","sources":["../../../../../../src/server/applications/neovim/environment/XdgRuntimeDirectory.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import EventEmitter from "events";
|
|
2
2
|
import type { TestDirectory } from "../../types.js";
|
|
3
3
|
import { DisposableSingleApplication } from "../../utilities/DisposableSingleApplication.js";
|
|
4
|
+
import { XdgRuntimeDirectory } from "../neovim/environment/XdgRuntimeDirectory.js";
|
|
4
5
|
import type { StdoutOrStderrMessage, TerminalDimensions } from "../neovim/NeovimApplication.js";
|
|
5
6
|
export type { StdoutOrStderrMessage };
|
|
6
7
|
type ResettableState = {
|
|
7
8
|
testDirectory: TestDirectory;
|
|
9
|
+
xdgRuntimeDirectory: XdgRuntimeDirectory;
|
|
8
10
|
};
|
|
9
11
|
export type StartTerminalGenericArguments = {
|
|
10
12
|
commandToRun: string[];
|
|
@@ -16,6 +18,6 @@ export default class TerminalTestApplication implements AsyncDisposable {
|
|
|
16
18
|
readonly events: EventEmitter;
|
|
17
19
|
constructor(application?: DisposableSingleApplication);
|
|
18
20
|
startNextAndKillCurrent(testDirectory: TestDirectory, startArgs: StartTerminalGenericArguments, terminalDimensions: TerminalDimensions): Promise<void>;
|
|
19
|
-
getEnvironmentVariables(testDirectory: TestDirectory, additionalEnvironmentVariables?: Record<string, string>): Record<string, string>;
|
|
21
|
+
getEnvironmentVariables(testDirectory: TestDirectory, xdgRuntimeDir: string, additionalEnvironmentVariables?: Record<string, string>): Record<string, string>;
|
|
20
22
|
[Symbol.asyncDispose](): Promise<void>;
|
|
21
23
|
}
|
|
@@ -5,6 +5,7 @@ import { join } from "path";
|
|
|
5
5
|
import { debuglog } from "util";
|
|
6
6
|
import { DisposableSingleApplication } from "../../utilities/DisposableSingleApplication.js";
|
|
7
7
|
import { TerminalApplication } from "../../utilities/TerminalApplication.js";
|
|
8
|
+
import { XdgRuntimeDirectory } from "../neovim/environment/XdgRuntimeDirectory.js";
|
|
8
9
|
const log = debuglog("tui-sandbox.terminal.TerminalTestApplication");
|
|
9
10
|
export default class TerminalTestApplication {
|
|
10
11
|
application;
|
|
@@ -21,9 +22,10 @@ export default class TerminalTestApplication {
|
|
|
21
22
|
assert(command, "No command to run was provided.");
|
|
22
23
|
// TODO could check if the command is executable
|
|
23
24
|
const terminalArguments = startArgs.commandToRun.slice(1);
|
|
25
|
+
const xdgRuntimeDirectory = await XdgRuntimeDirectory.create(testDirectory.rootPathAbsolute);
|
|
24
26
|
const stdout = this.events;
|
|
25
27
|
await this.application.startNextAndKillCurrent(async () => {
|
|
26
|
-
const env = this.getEnvironmentVariables(testDirectory, startArgs.additionalEnvironmentVariables);
|
|
28
|
+
const env = this.getEnvironmentVariables(testDirectory, xdgRuntimeDirectory.path, startArgs.additionalEnvironmentVariables);
|
|
27
29
|
return TerminalApplication.start({
|
|
28
30
|
command,
|
|
29
31
|
args: terminalArguments,
|
|
@@ -40,15 +42,16 @@ export default class TerminalTestApplication {
|
|
|
40
42
|
});
|
|
41
43
|
const processId = this.application.processId();
|
|
42
44
|
assert(processId !== undefined, "TerminalApplication was started without a process ID. This is a bug - please open an issue.");
|
|
43
|
-
this.state = { testDirectory };
|
|
45
|
+
this.state = { testDirectory, xdgRuntimeDirectory };
|
|
44
46
|
log(`🚀 Started Terminal instance ${processId}`);
|
|
45
47
|
}
|
|
46
|
-
getEnvironmentVariables(testDirectory, additionalEnvironmentVariables) {
|
|
48
|
+
getEnvironmentVariables(testDirectory, xdgRuntimeDir, additionalEnvironmentVariables) {
|
|
47
49
|
return {
|
|
48
50
|
...process.env,
|
|
49
51
|
HOME: testDirectory.rootPathAbsolute,
|
|
50
52
|
XDG_CONFIG_HOME: join(testDirectory.rootPathAbsolute, ".config"),
|
|
51
53
|
XDG_DATA_HOME: join(testDirectory.testEnvironmentPath, ".repro", "data"),
|
|
54
|
+
XDG_RUNTIME_DIR: xdgRuntimeDir,
|
|
52
55
|
TUI_SANDBOX_TEST_ENVIRONMENT_PATH: testDirectory.testEnvironmentPath,
|
|
53
56
|
...additionalEnvironmentVariables,
|
|
54
57
|
};
|
|
@@ -57,6 +60,7 @@ export default class TerminalTestApplication {
|
|
|
57
60
|
await this.application[Symbol.asyncDispose]();
|
|
58
61
|
if (!this.state)
|
|
59
62
|
return;
|
|
63
|
+
await this.state.xdgRuntimeDirectory[Symbol.asyncDispose]();
|
|
60
64
|
exec(`rm -rf ${this.state.testDirectory.rootPathAbsolute}`);
|
|
61
65
|
this.state = undefined;
|
|
62
66
|
}
|