@tui-sandbox/library 13.0.0 → 13.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/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/resolveMiseBinPaths.d.ts +29 -0
- package/dist/src/server/applications/neovim/environment/resolveMiseBinPaths.js +41 -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 +50 -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
|
@@ -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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"}
|
|
@@ -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,41 @@
|
|
|
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
|
+
const binPaths = parseMiseBinPaths(run(cwd, environment));
|
|
24
|
+
log(`Resolved ${binPaths.length} mise bin path(s) from ${cwd}`);
|
|
25
|
+
cache.set(cwd, binPaths);
|
|
26
|
+
return binPaths;
|
|
27
|
+
};
|
|
28
|
+
/** @private Test-only: forget memoized results so each test resolves fresh. */
|
|
29
|
+
export const clearMiseBinPathsCache = () => {
|
|
30
|
+
cache.clear();
|
|
31
|
+
};
|
|
32
|
+
export const prependMiseBinPathsToPath = (env, binPaths) => {
|
|
33
|
+
if (binPaths.length === 0)
|
|
34
|
+
return env;
|
|
35
|
+
const existing = env["PATH"] ?? "";
|
|
36
|
+
return {
|
|
37
|
+
...env,
|
|
38
|
+
PATH: [...binPaths, ...(existing ? [existing] : [])].join(path.delimiter),
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
//# 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,MAAM,QAAQ,GAAa,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAA;IACnE,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,50 @@
|
|
|
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("crashes when mise is not installed", () => {
|
|
24
|
+
// The mise integration is opt-in, so a failure here means the user asked for
|
|
25
|
+
// mise but it could not be used. resolveMiseBinPaths must crash rather than
|
|
26
|
+
// silently continue, so the misconfiguration is not hidden.
|
|
27
|
+
expect(() => resolveMiseBinPaths("/repo", {}, () => {
|
|
28
|
+
throw Object.assign(new Error("spawn mise ENOENT"), { code: "ENOENT" });
|
|
29
|
+
})).toThrow(/ENOENT/);
|
|
30
|
+
});
|
|
31
|
+
it("crashes when `mise bin-paths` exits non-zero", () => {
|
|
32
|
+
expect(() => resolveMiseBinPaths("/repo", {}, () => {
|
|
33
|
+
throw new Error("Command failed");
|
|
34
|
+
})).toThrow(/Command failed/);
|
|
35
|
+
});
|
|
36
|
+
it("prepends bin paths so mise-managed tools win over system copies", () => {
|
|
37
|
+
const env = prependMiseBinPathsToPath({ PATH: "/usr/bin:/bin" }, ["/mise/lazygit/bin", "/mise/delta/bin"]);
|
|
38
|
+
expect(env["PATH"]).toBe("/mise/lazygit/bin:/mise/delta/bin:/usr/bin:/bin");
|
|
39
|
+
});
|
|
40
|
+
it("leaves the env untouched when there are no bin paths", () => {
|
|
41
|
+
const original = { PATH: "/usr/bin", HOME: "/home/user" };
|
|
42
|
+
expect(prependMiseBinPathsToPath(original, [])).toEqual(original);
|
|
43
|
+
});
|
|
44
|
+
it("handles a missing PATH", () => {
|
|
45
|
+
expect(prependMiseBinPathsToPath({ HOME: "/home/user" }, ["/mise/lazygit/bin"])).toEqual({
|
|
46
|
+
HOME: "/home/user",
|
|
47
|
+
PATH: "/mise/lazygit/bin",
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
//# 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":"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"}
|
|
@@ -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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"}
|