@tui-sandbox/library 13.0.0 → 13.0.2
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/scripts/resolveConfig.test.js +12 -6
- package/dist/src/scripts/resolveConfig.test.js.map +1 -1
- package/dist/src/server/applications/neovim/NeovimApplication.js +5 -1
- package/dist/src/server/applications/neovim/NeovimApplication.js.map +1 -1
- package/dist/src/server/applications/neovim/environment/TempDirectory.d.ts +2 -2
- package/dist/src/server/applications/neovim/environment/TempDirectory.js +3 -2
- package/dist/src/server/applications/neovim/environment/TempDirectory.js.map +1 -1
- package/dist/src/server/applications/neovim/environment/XdgRuntimeDirectory.test.js +9 -7
- package/dist/src/server/applications/neovim/environment/XdgRuntimeDirectory.test.js.map +1 -1
- package/dist/src/server/applications/neovim/environment/createTempDir.test.js +4 -2
- package/dist/src/server/applications/neovim/environment/createTempDir.test.js.map +1 -1
- package/dist/src/server/applications/neovim/environment/resolveMiseBinPaths.d.ts +29 -0
- package/dist/src/server/applications/neovim/environment/resolveMiseBinPaths.js +52 -0
- package/dist/src/server/applications/neovim/environment/resolveMiseBinPaths.js.map +1 -0
- package/dist/src/server/applications/neovim/environment/resolveMiseBinPaths.test.d.ts +1 -0
- package/dist/src/server/applications/neovim/environment/resolveMiseBinPaths.test.js +44 -0
- package/dist/src/server/applications/neovim/environment/resolveMiseBinPaths.test.js.map +1 -0
- package/dist/src/server/applications/terminal/TerminalTestApplication.js +5 -1
- package/dist/src/server/applications/terminal/TerminalTestApplication.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -65,7 +65,7 @@ it("defaults to the default configuration if no config file is found", async ()
|
|
|
65
65
|
it("loads a custom configuration file if it exists", async () => {
|
|
66
66
|
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
67
67
|
try {
|
|
68
|
-
const dir = __addDisposableResource(env_1, TempDirectory.create(),
|
|
68
|
+
const dir = __addDisposableResource(env_1, TempDirectory.create(), true);
|
|
69
69
|
const filename = `${dir.path}/tui-sandbox.config.ts`;
|
|
70
70
|
const customConfig = {
|
|
71
71
|
directories: {
|
|
@@ -95,13 +95,15 @@ it("loads a custom configuration file if it exists", async () => {
|
|
|
95
95
|
env_1.hasError = true;
|
|
96
96
|
}
|
|
97
97
|
finally {
|
|
98
|
-
__disposeResources(env_1);
|
|
98
|
+
const result_1 = __disposeResources(env_1);
|
|
99
|
+
if (result_1)
|
|
100
|
+
await result_1;
|
|
99
101
|
}
|
|
100
102
|
});
|
|
101
103
|
it("uses the default configuration file if the config has invalid contents", async () => {
|
|
102
104
|
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
103
105
|
try {
|
|
104
|
-
const dir = __addDisposableResource(env_2, TempDirectory.create(),
|
|
106
|
+
const dir = __addDisposableResource(env_2, TempDirectory.create(), true);
|
|
105
107
|
{
|
|
106
108
|
const customConfig = {
|
|
107
109
|
// @ts-expect-error testing an invalid config on purpose
|
|
@@ -122,13 +124,15 @@ it("uses the default configuration file if the config has invalid contents", asy
|
|
|
122
124
|
env_2.hasError = true;
|
|
123
125
|
}
|
|
124
126
|
finally {
|
|
125
|
-
__disposeResources(env_2);
|
|
127
|
+
const result_2 = __disposeResources(env_2);
|
|
128
|
+
if (result_2)
|
|
129
|
+
await result_2;
|
|
126
130
|
}
|
|
127
131
|
});
|
|
128
132
|
it("fails if the config has not been exported from the config file", async () => {
|
|
129
133
|
const env_3 = { stack: [], error: void 0, hasError: false };
|
|
130
134
|
try {
|
|
131
|
-
const dir = __addDisposableResource(env_3, TempDirectory.create(),
|
|
135
|
+
const dir = __addDisposableResource(env_3, TempDirectory.create(), true);
|
|
132
136
|
{
|
|
133
137
|
const filename = `${dir.path}/tui-sandbox.config.ts`;
|
|
134
138
|
const contents = ``;
|
|
@@ -144,7 +148,9 @@ it("fails if the config has not been exported from the config file", async () =>
|
|
|
144
148
|
env_3.hasError = true;
|
|
145
149
|
}
|
|
146
150
|
finally {
|
|
147
|
-
__disposeResources(env_3);
|
|
151
|
+
const result_3 = __disposeResources(env_3);
|
|
152
|
+
if (result_3)
|
|
153
|
+
await result_3;
|
|
148
154
|
}
|
|
149
155
|
});
|
|
150
156
|
//# sourceMappingURL=resolveConfig.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveConfig.test.js","sourceRoot":"","sources":["../../../src/scripts/resolveConfig.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAA;AAE1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAA;AAEnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;IAChF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAA;IAChD,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACrB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,iBAA+D,CAAC,CAAA;IACvF,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACnF,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;;;QAC9D,
|
|
1
|
+
{"version":3,"file":"resolveConfig.test.js","sourceRoot":"","sources":["../../../src/scripts/resolveConfig.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 { prependMiseBinPathsToPath, resolveMiseBinPaths } from "./environment/resolveMiseBinPaths.js";
|
|
10
11
|
import { resolveMiseStateDirectory } from "./environment/resolveMiseStateDirectory.js";
|
|
11
12
|
import { XdgRuntimeDirectory } from "./environment/XdgRuntimeDirectory.js";
|
|
12
13
|
import { connectNeovimApi } from "./NeovimJavascriptApiClient.js";
|
|
@@ -92,7 +93,7 @@ export class NeovimApplication {
|
|
|
92
93
|
log(`🚀 Started Neovim instance ${processId} (NVIM_APPNAME: ${startArgs.NVIM_APPNAME})`);
|
|
93
94
|
}
|
|
94
95
|
static getEnvironmentVariables(config, testDirectory, xdgRuntimeDir, NVIM_APPNAME, additionalEnvironmentVariables) {
|
|
95
|
-
|
|
96
|
+
let env = {
|
|
96
97
|
...process.env,
|
|
97
98
|
...{
|
|
98
99
|
HOME: testDirectory.rootPathAbsolute,
|
|
@@ -109,6 +110,9 @@ export class NeovimApplication {
|
|
|
109
110
|
...(miseStateDirectory ? { MISE_STATE_DIR: miseStateDirectory } : {}),
|
|
110
111
|
MISE_OFFLINE: "1",
|
|
111
112
|
});
|
|
113
|
+
// put mise-managed tools' real install dirs on PATH so they are
|
|
114
|
+
// invocable in the isolated env (shims can't re-resolve there)
|
|
115
|
+
env = prependMiseBinPathsToPath(env, resolveMiseBinPaths());
|
|
112
116
|
}
|
|
113
117
|
Object.assign(env, additionalEnvironmentVariables ?? {});
|
|
114
118
|
return env;
|
|
@@ -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;AACpC,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;AAU/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAA;AAE5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAA;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEjE,MAAM,GAAG,GAAG,QAAQ,CAAC,gCAAgC,CAAC,CAAA;AAmFtD,MAAM,OAAO,iBAAiB;
|
|
1
|
+
{"version":3,"file":"NeovimApplication.js","sourceRoot":"","sources":["../../../../../src/server/applications/neovim/NeovimApplication.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type TestTempDirPrefix = "test-temp-dir-";
|
|
2
|
-
export declare class TempDirectory implements
|
|
2
|
+
export declare class TempDirectory implements AsyncDisposable {
|
|
3
3
|
readonly path: string;
|
|
4
4
|
private constructor();
|
|
5
5
|
static create(prefix?: `${string}-`): TempDirectory;
|
|
6
|
-
[Symbol.
|
|
6
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
7
7
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
|
+
import fsPromises from "fs/promises";
|
|
2
3
|
import nodePath from "path";
|
|
3
4
|
export class TempDirectory {
|
|
4
5
|
path;
|
|
@@ -10,8 +11,8 @@ export class TempDirectory {
|
|
|
10
11
|
const absolutePath = nodePath.resolve(tmp);
|
|
11
12
|
return new TempDirectory(absolutePath);
|
|
12
13
|
}
|
|
13
|
-
[Symbol.
|
|
14
|
-
|
|
14
|
+
async [Symbol.asyncDispose]() {
|
|
15
|
+
await fsPromises.rm(this.path, { recursive: true, force: true });
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
//# sourceMappingURL=TempDirectory.js.map
|
|
@@ -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,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,
|
|
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,UAAU,MAAM,aAAa,CAAA;AACpC,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,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QACzB,MAAM,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAClE,CAAC;CACF"}
|
|
@@ -71,7 +71,7 @@ const symlinkFileExists = (path) => {
|
|
|
71
71
|
it("creates a uniquely named directory under the system temp dir", async () => {
|
|
72
72
|
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
73
73
|
try {
|
|
74
|
-
const testDir = __addDisposableResource(env_1, newTestDir(),
|
|
74
|
+
const testDir = __addDisposableResource(env_1, newTestDir(), true);
|
|
75
75
|
const dir = __addDisposableResource(env_1, await XdgRuntimeDirectory.create(testDir.path), true);
|
|
76
76
|
expect(existsSync(dir.path)).toBe(true);
|
|
77
77
|
expect(dir.path).toContain("tui-xdg-");
|
|
@@ -89,7 +89,7 @@ it("creates a uniquely named directory under the system temp dir", async () => {
|
|
|
89
89
|
it("removes the directory and the symlink when disposed", async () => {
|
|
90
90
|
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
91
91
|
try {
|
|
92
|
-
const testDir = __addDisposableResource(env_2, newTestDir(),
|
|
92
|
+
const testDir = __addDisposableResource(env_2, newTestDir(), true);
|
|
93
93
|
let createdPath;
|
|
94
94
|
let createdSymlinkPath;
|
|
95
95
|
{
|
|
@@ -121,7 +121,9 @@ it("removes the directory and the symlink when disposed", async () => {
|
|
|
121
121
|
env_2.hasError = true;
|
|
122
122
|
}
|
|
123
123
|
finally {
|
|
124
|
-
__disposeResources(env_2);
|
|
124
|
+
const result_3 = __disposeResources(env_2);
|
|
125
|
+
if (result_3)
|
|
126
|
+
await result_3;
|
|
125
127
|
}
|
|
126
128
|
});
|
|
127
129
|
it("rejects (and does not leak a temp dir) when the symlink cannot be created", async () => {
|
|
@@ -136,7 +138,7 @@ it("stays well under the OS Unix-socket path limit (this is the reason it exists
|
|
|
136
138
|
// `/yazi+<uid>/.dds.sock`). The full socket path must fit in `sun_path`
|
|
137
139
|
// (~104 bytes on macOS, ~108 on Linux), so the directory itself must leave
|
|
138
140
|
// ample room.
|
|
139
|
-
const testDir = __addDisposableResource(env_4, newTestDir(),
|
|
141
|
+
const testDir = __addDisposableResource(env_4, newTestDir(), true);
|
|
140
142
|
const dir = __addDisposableResource(env_4, await XdgRuntimeDirectory.create(testDir.path), true);
|
|
141
143
|
const exampleSocketPath = join(dir.path, "yazi+1000", ".dds.sock");
|
|
142
144
|
// Use the stricter macOS limit as the bound so it holds on both platforms.
|
|
@@ -147,9 +149,9 @@ it("stays well under the OS Unix-socket path limit (this is the reason it exists
|
|
|
147
149
|
env_4.hasError = true;
|
|
148
150
|
}
|
|
149
151
|
finally {
|
|
150
|
-
const
|
|
151
|
-
if (
|
|
152
|
-
await
|
|
152
|
+
const result_4 = __disposeResources(env_4);
|
|
153
|
+
if (result_4)
|
|
154
|
+
await result_4;
|
|
153
155
|
}
|
|
154
156
|
});
|
|
155
157
|
//# sourceMappingURL=XdgRuntimeDirectory.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XdgRuntimeDirectory.test.js","sourceRoot":"","sources":["../../../../../../src/server/applications/neovim/environment/XdgRuntimeDirectory.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAE1D;;iFAEiF;AACjF,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAW,EAAE;IAClD,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAA;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAED,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;;;QAC5E,
|
|
1
|
+
{"version":3,"file":"XdgRuntimeDirectory.test.js","sourceRoot":"","sources":["../../../../../../src/server/applications/neovim/environment/XdgRuntimeDirectory.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,7 +60,7 @@ it("should create a temp dir with no contents", async () => {
|
|
|
60
60
|
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
61
61
|
try {
|
|
62
62
|
// typically the user will want to have contents, but this should not be an error
|
|
63
|
-
const dir = __addDisposableResource(env_1, TempDirectory.create(),
|
|
63
|
+
const dir = __addDisposableResource(env_1, TempDirectory.create(), true);
|
|
64
64
|
const result = await createTempDir({
|
|
65
65
|
...createDefaultConfig("cwd", {}),
|
|
66
66
|
directories: {
|
|
@@ -79,7 +79,9 @@ it("should create a temp dir with no contents", async () => {
|
|
|
79
79
|
env_1.hasError = true;
|
|
80
80
|
}
|
|
81
81
|
finally {
|
|
82
|
-
__disposeResources(env_1);
|
|
82
|
+
const result_1 = __disposeResources(env_1);
|
|
83
|
+
if (result_1)
|
|
84
|
+
await result_1;
|
|
83
85
|
}
|
|
84
86
|
});
|
|
85
87
|
//# sourceMappingURL=createTempDir.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTempDir.test.js","sourceRoot":"","sources":["../../../../../../src/server/applications/neovim/environment/createTempDir.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,QAAQ,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAGxD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;AAEpD,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;;;QACzD,iFAAiF;QACjF,
|
|
1
|
+
{"version":3,"file":"createTempDir.test.js","sourceRoot":"","sources":["../../../../../../src/server/applications/neovim/environment/createTempDir.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,QAAQ,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAGxD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;AAEpD,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;;;QACzD,iFAAiF;QACjF,MAAY,GAAG,kCAAG,aAAa,CAAC,MAAM,EAAE,OAAA,CAAA;QACxC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,GAAG,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC;YACjC,WAAW,EAAE;gBACX,mBAAmB,EAAE,GAAG,CAAC,IAAI;gBAC7B,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC;gBAC7D,iBAAiB,EAAE,QAAQ;aAC5B;SACsC,CAAC,CAAA;QAE1C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACnC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACpD,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,gBAA4C,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QACtG,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,QAAQ,CAAC,UAAiC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;;;;;;;;;;;CACpG,CAAC,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves the bin directories of the currently active, installed mise tools.
|
|
3
|
+
*
|
|
4
|
+
* IMPORTANT: resolve this from the *real* server environment, never from the
|
|
5
|
+
* isolated terminal env.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: the selection of tools is assumed stable for the lifetime of the
|
|
8
|
+
* server process - if you change the mise toolset, you must restart the server
|
|
9
|
+
* to pick up new bin paths.
|
|
10
|
+
*
|
|
11
|
+
* Issue:
|
|
12
|
+
*
|
|
13
|
+
* The test terminal runs in a lightly-isolated environment, where a mise
|
|
14
|
+
* *shim* cannot reliably re-resolve a tool -> version -> backend, so invoking
|
|
15
|
+
* e.g. `lazygit` through its shim fails with "lazygit is not a valid shim" /
|
|
16
|
+
* "No version is set for shim".
|
|
17
|
+
*
|
|
18
|
+
* Solution:
|
|
19
|
+
*
|
|
20
|
+
* Put the tools' real install dirs directly on `$PATH` so they become plain
|
|
21
|
+
* executables, working around the issue.
|
|
22
|
+
*/
|
|
23
|
+
export type RunMiseBinPaths = (cwd: string, environment: NodeJS.ProcessEnv) => string;
|
|
24
|
+
/** Parses the newline-separated output of `mise bin-paths`. */
|
|
25
|
+
export declare const parseMiseBinPaths: (stdout: string) => string[];
|
|
26
|
+
export declare const resolveMiseBinPaths: (cwd?: string, environment?: NodeJS.ProcessEnv, run?: RunMiseBinPaths) => string[];
|
|
27
|
+
/** @private Test-only: forget memoized results so each test resolves fresh. */
|
|
28
|
+
export declare const clearMiseBinPathsCache: () => void;
|
|
29
|
+
export declare const prependMiseBinPathsToPath: (env: Record<string, string>, binPaths: string[]) => Record<string, string>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { execFileSync } from "child_process";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { debuglog } from "util";
|
|
4
|
+
const log = debuglog("tui-sandbox.mise");
|
|
5
|
+
const runMiseBinPaths = (cwd, environment) => execFileSync("mise", ["bin-paths"], {
|
|
6
|
+
cwd,
|
|
7
|
+
env: environment,
|
|
8
|
+
encoding: "utf8",
|
|
9
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
10
|
+
});
|
|
11
|
+
/** Parses the newline-separated output of `mise bin-paths`. */
|
|
12
|
+
export const parseMiseBinPaths = (stdout) => stdout
|
|
13
|
+
.split("\n")
|
|
14
|
+
.map(line => line.trim())
|
|
15
|
+
.filter(line => line.length > 0);
|
|
16
|
+
// `mise bin-paths` is stable for the lifetime of the server process. Memoize
|
|
17
|
+
// per working directory to avoid shelling out when starting every test.
|
|
18
|
+
const cache = new Map();
|
|
19
|
+
export const resolveMiseBinPaths = (cwd = process.cwd(), environment = process.env, run = runMiseBinPaths) => {
|
|
20
|
+
const cached = cache.get(cwd);
|
|
21
|
+
if (cached)
|
|
22
|
+
return cached;
|
|
23
|
+
let paths;
|
|
24
|
+
try {
|
|
25
|
+
paths = run(cwd, environment);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
// Support cases where mise is used for local development but not installed
|
|
29
|
+
// in CI.
|
|
30
|
+
log(`Failed to resolve mise bin paths from ${cwd}`, err);
|
|
31
|
+
console.warn(`Failed to resolve mise bin paths from ${cwd}: ${JSON.stringify(err)}`);
|
|
32
|
+
paths = "";
|
|
33
|
+
}
|
|
34
|
+
const binPaths = parseMiseBinPaths(paths);
|
|
35
|
+
log(`Resolved ${binPaths.length} mise bin path(s) from ${cwd}`);
|
|
36
|
+
cache.set(cwd, binPaths);
|
|
37
|
+
return binPaths;
|
|
38
|
+
};
|
|
39
|
+
/** @private Test-only: forget memoized results so each test resolves fresh. */
|
|
40
|
+
export const clearMiseBinPathsCache = () => {
|
|
41
|
+
cache.clear();
|
|
42
|
+
};
|
|
43
|
+
export const prependMiseBinPathsToPath = (env, binPaths) => {
|
|
44
|
+
if (binPaths.length === 0)
|
|
45
|
+
return env;
|
|
46
|
+
const existing = env["PATH"] ?? "";
|
|
47
|
+
return {
|
|
48
|
+
...env,
|
|
49
|
+
PATH: [...binPaths, ...(existing ? [existing] : [])].join(path.delimiter),
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=resolveMiseBinPaths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveMiseBinPaths.js","sourceRoot":"","sources":["../../../../../../src/server/applications/neovim/environment/resolveMiseBinPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,MAAM,GAAG,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAA;AA0BxC,MAAM,eAAe,GAAoB,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAC5D,YAAY,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE;IAClC,GAAG;IACH,GAAG,EAAE,WAAW;IAChB,QAAQ,EAAE,MAAM;IAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;CAClC,CAAC,CAAA;AAEJ,+DAA+D;AAC/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAY,EAAE,CAC5D,MAAM;KACH,KAAK,CAAC,IAAI,CAAC;KACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAEpC,6EAA6E;AAC7E,wEAAwE;AACxE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAA;AAEzC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAc,OAAO,CAAC,GAAG,EAAE,EAC3B,cAAiC,OAAO,CAAC,GAAG,EAC5C,MAAuB,eAAe,EAC5B,EAAE;IACZ,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,IAAI,KAAa,CAAA;IACjB,IAAI,CAAC;QACH,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,2EAA2E;QAC3E,SAAS;QACT,GAAG,CAAC,yCAAyC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;QACxD,OAAO,CAAC,IAAI,CAAC,yCAAyC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACpF,KAAK,GAAG,EAAE,CAAA;IACZ,CAAC;IACD,MAAM,QAAQ,GAAa,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACnD,GAAG,CAAC,YAAY,QAAQ,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC,CAAA;IAC/D,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IACxB,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAS,EAAE;IAC/C,KAAK,CAAC,KAAK,EAAE,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAA2B,EAAE,QAAkB,EAA0B,EAAE;IACnH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAA;IACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAClC,OAAO;QACL,GAAG,GAAG;QACN,IAAI,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;KAC1E,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { afterEach, expect, it } from "vitest";
|
|
2
|
+
import { clearMiseBinPathsCache, parseMiseBinPaths, prependMiseBinPathsToPath, resolveMiseBinPaths, } from "./resolveMiseBinPaths.js";
|
|
3
|
+
afterEach(() => {
|
|
4
|
+
clearMiseBinPathsCache();
|
|
5
|
+
});
|
|
6
|
+
it("parses newline-separated bin paths and ignores blank lines", () => {
|
|
7
|
+
expect(parseMiseBinPaths("/a/bin\n/b/bin\n\n /c/bin \n")).toEqual(["/a/bin", "/b/bin", "/c/bin"]);
|
|
8
|
+
});
|
|
9
|
+
it("resolves the parsed output of `mise bin-paths`", () => {
|
|
10
|
+
const binPaths = resolveMiseBinPaths("/repo", {}, () => "/a/bin\n/b/bin\n");
|
|
11
|
+
expect(binPaths).toEqual(["/a/bin", "/b/bin"]);
|
|
12
|
+
});
|
|
13
|
+
it("memoizes per working directory (only shells out once)", () => {
|
|
14
|
+
let calls = 0;
|
|
15
|
+
const run = () => {
|
|
16
|
+
calls++;
|
|
17
|
+
return "/a/bin\n";
|
|
18
|
+
};
|
|
19
|
+
resolveMiseBinPaths("/repo", {}, run);
|
|
20
|
+
resolveMiseBinPaths("/repo", {}, run);
|
|
21
|
+
expect(calls).toBe(1);
|
|
22
|
+
});
|
|
23
|
+
it("no-ops when mise is not installed", () => {
|
|
24
|
+
// Support cases where mise is used for local development but not installed
|
|
25
|
+
// in CI.
|
|
26
|
+
expect(resolveMiseBinPaths("/repo", {}, () => {
|
|
27
|
+
throw Object.assign(new Error("(test) spawn mise ENOENT"), { code: "ENOENT" });
|
|
28
|
+
})).toEqual([]);
|
|
29
|
+
});
|
|
30
|
+
it("prepends bin paths so mise-managed tools win over system copies", () => {
|
|
31
|
+
const env = prependMiseBinPathsToPath({ PATH: "/usr/bin:/bin" }, ["/mise/lazygit/bin", "/mise/delta/bin"]);
|
|
32
|
+
expect(env["PATH"]).toBe("/mise/lazygit/bin:/mise/delta/bin:/usr/bin:/bin");
|
|
33
|
+
});
|
|
34
|
+
it("leaves the env untouched when there are no bin paths", () => {
|
|
35
|
+
const original = { PATH: "/usr/bin", HOME: "/home/user" };
|
|
36
|
+
expect(prependMiseBinPathsToPath(original, [])).toEqual(original);
|
|
37
|
+
});
|
|
38
|
+
it("handles a missing PATH", () => {
|
|
39
|
+
expect(prependMiseBinPathsToPath({ HOME: "/home/user" }, ["/mise/lazygit/bin"])).toEqual({
|
|
40
|
+
HOME: "/home/user",
|
|
41
|
+
PATH: "/mise/lazygit/bin",
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=resolveMiseBinPaths.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveMiseBinPaths.test.js","sourceRoot":"","sources":["../../../../../../src/server/applications/neovim/environment/resolveMiseBinPaths.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE9C,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AAEjC,SAAS,CAAC,GAAG,EAAE;IACb,sBAAsB,EAAE,CAAA;AAC1B,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;IACpE,MAAM,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;AACrG,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;IACxD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAA;IAC3E,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;AAChD,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;IAC/D,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,MAAM,GAAG,GAAG,GAAW,EAAE;QACvB,KAAK,EAAE,CAAA;QACP,OAAO,UAAU,CAAA;IACnB,CAAC,CAAA;IACD,mBAAmB,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IACrC,mBAAmB,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IACrC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACvB,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAC3C,2EAA2E;IAC3E,SAAS;IACT,MAAM,CACJ,mBAAmB,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE;QACpC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IAChF,CAAC,CAAC,CACH,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AACf,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;IACzE,MAAM,GAAG,GAAG,yBAAyB,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAC1G,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;AAC7E,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAC9D,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;IACzD,MAAM,CAAC,yBAAyB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;AACnE,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;IAChC,MAAM,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACvF,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,mBAAmB;KAC1B,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -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 { prependMiseBinPathsToPath, resolveMiseBinPaths } from "../neovim/environment/resolveMiseBinPaths.js";
|
|
8
9
|
import { resolveMiseStateDirectory } from "../neovim/environment/resolveMiseStateDirectory.js";
|
|
9
10
|
import { XdgRuntimeDirectory } from "../neovim/environment/XdgRuntimeDirectory.js";
|
|
10
11
|
const log = debuglog("tui-sandbox.terminal.TerminalTestApplication");
|
|
@@ -48,7 +49,7 @@ export default class TerminalTestApplication {
|
|
|
48
49
|
}
|
|
49
50
|
getEnvironmentVariables(config, testDirectory, xdgRuntimeDir, additionalEnvironmentVariables) {
|
|
50
51
|
const miseStateDirectory = resolveMiseStateDirectory();
|
|
51
|
-
|
|
52
|
+
let env = {
|
|
52
53
|
...process.env,
|
|
53
54
|
HOME: testDirectory.rootPathAbsolute,
|
|
54
55
|
XDG_CONFIG_HOME: join(testDirectory.rootPathAbsolute, ".config"),
|
|
@@ -61,6 +62,9 @@ export default class TerminalTestApplication {
|
|
|
61
62
|
...(miseStateDirectory ? { MISE_STATE_DIR: miseStateDirectory } : {}),
|
|
62
63
|
MISE_OFFLINE: "1",
|
|
63
64
|
});
|
|
65
|
+
// put mise-managed tools' real install dirs on PATH so they are
|
|
66
|
+
// invocable in the isolated env (shims can't re-resolve there)
|
|
67
|
+
env = prependMiseBinPathsToPath(env, resolveMiseBinPaths());
|
|
64
68
|
}
|
|
65
69
|
Object.assign(env, additionalEnvironmentVariables ?? {});
|
|
66
70
|
return env;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalTestApplication.js","sourceRoot":"","sources":["../../../../../src/server/applications/terminal/TerminalTestApplication.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,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAQ/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAA;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAA;AAKlF,MAAM,GAAG,GAAG,QAAQ,CAAC,8CAA8C,CAAC,CAAA;AAYpE,MAAM,CAAC,OAAO,OAAO,uBAAuB;
|
|
1
|
+
{"version":3,"file":"TerminalTestApplication.js","sourceRoot":"","sources":["../../../../../src/server/applications/terminal/TerminalTestApplication.ts"],"names":[],"mappings":"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"}
|