kvman 0.1.1 → 0.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/arguments.d.ts +8 -2
- package/dist/arguments.d.ts.map +1 -1
- package/dist/arguments.js +32 -0
- package/dist/arguments.js.map +1 -1
- package/dist/bundled.d.ts +2 -0
- package/dist/bundled.d.ts.map +1 -1
- package/dist/bundled.js +2 -1
- package/dist/bundled.js.map +1 -1
- package/dist/lock-file.d.ts +2 -0
- package/dist/lock-file.d.ts.map +1 -1
- package/dist/lock-file.js +5 -0
- package/dist/lock-file.js.map +1 -1
- package/dist/main.js +26 -2
- package/dist/main.js.map +1 -1
- package/dist/run-kvman.js +1 -1
- package/dist/run-kvman.js.map +1 -1
- package/dist/uninstall/installed-check.d.ts +4 -0
- package/dist/uninstall/installed-check.d.ts.map +1 -0
- package/dist/uninstall/installed-check.js +20 -0
- package/dist/uninstall/installed-check.js.map +1 -0
- package/dist/uninstall/run-program.d.ts +11 -0
- package/dist/uninstall/run-program.d.ts.map +1 -0
- package/dist/uninstall/run-program.js +21 -0
- package/dist/uninstall/run-program.js.map +1 -0
- package/dist/uninstall/run-uninstall.d.ts +12 -0
- package/dist/uninstall/run-uninstall.d.ts.map +1 -0
- package/dist/uninstall/run-uninstall.js +47 -0
- package/dist/uninstall/run-uninstall.js.map +1 -0
- package/dist/uninstall/stop-running.d.ts +13 -0
- package/dist/uninstall/stop-running.d.ts.map +1 -0
- package/dist/uninstall/stop-running.js +29 -0
- package/dist/uninstall/stop-running.js.map +1 -0
- package/dist/uninstall/uninstall-questions.d.ts +13 -0
- package/dist/uninstall/uninstall-questions.d.ts.map +1 -0
- package/dist/uninstall/uninstall-questions.js +50 -0
- package/dist/uninstall/uninstall-questions.js.map +1 -0
- package/package.json +6 -6
- package/presets/coder.json +1 -1
package/dist/arguments.d.ts
CHANGED
|
@@ -9,12 +9,18 @@ export type RunArguments = {
|
|
|
9
9
|
open: boolean;
|
|
10
10
|
logLevel: LogLevel;
|
|
11
11
|
};
|
|
12
|
+
export type UninstallArguments = {
|
|
13
|
+
kind: 'uninstall';
|
|
14
|
+
home: string | undefined;
|
|
15
|
+
yes: boolean;
|
|
16
|
+
data: 'ask' | 'keep' | 'delete';
|
|
17
|
+
};
|
|
12
18
|
export type CliArguments = {
|
|
13
19
|
kind: 'help';
|
|
14
20
|
} | {
|
|
15
21
|
kind: 'version';
|
|
16
|
-
} | RunArguments;
|
|
17
|
-
export declare const usage = "Usage:\n kvman [--mode web] [--preset coder] [--home <dir>] [--port <n>] [--yes] [--no-open] [--log-level <level>]\n kvman --help | --version\n\nOptions:\n --mode <mode> How kvman runs: web (the default).\n --preset <preset> A bundled preset, <home>/presets/<name>.json, or a preset file such as ./app.json. Default: coder.\n --home <dir> kvman's home folder. Default: KVMAN_HOME, else ~/.kvman.\n --port <n> The port to listen on (0 picks a free one). Default: the kernel.port setting (3737).\n --yes Accept new extension versions without asking.\n --no-open Don't open the browser.\n --log-level <level> debug, info (the default), warn, or error.\n --help Show this help.\n --version Show kvman's version.\n";
|
|
22
|
+
} | RunArguments | UninstallArguments;
|
|
23
|
+
export declare const usage = "Usage:\n kvman [--mode web] [--preset coder] [--home <dir>] [--port <n>] [--yes] [--no-open] [--log-level <level>]\n kvman uninstall [--home <dir>] [--yes] [--keep-data | --delete-data]\n kvman --help | --version\n\nOptions:\n --mode <mode> How kvman runs: web (the default).\n --preset <preset> A bundled preset, <home>/presets/<name>.json, or a preset file such as ./app.json. Default: coder.\n --home <dir> kvman's home folder. Default: KVMAN_HOME, else ~/.kvman.\n --port <n> The port to listen on (0 picks a free one). Default: the kernel.port setting (3737).\n --yes Accept new extension versions without asking.\n --no-open Don't open the browser.\n --log-level <level> debug, info (the default), warn, or error.\n --help Show this help.\n --version Show kvman's version.\n\nUninstall options:\n --home <dir> The home folder whose data and running kvman are meant.\n --yes Remove kvman without asking; its data is kept unless --delete-data is given.\n --keep-data Keep kvman's data without asking.\n --delete-data Delete kvman's data without asking.\n";
|
|
18
24
|
export declare function parseArguments(argv: readonly string[]): CliArguments;
|
|
19
25
|
export declare function kvmanHome(flag: string | undefined, environment: NodeJS.ProcessEnv, userFolder?: string): string;
|
|
20
26
|
//# sourceMappingURL=arguments.d.ts.map
|
package/dist/arguments.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../src/arguments.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../src/arguments.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAM9C,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAC;AAEhI,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG,YAAY,GAAG,kBAAkB,CAAC;AAEtG,eAAO,MAAM,KAAK,2rCAqBjB,CAAC;AAiEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,CAepE;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,GAAE,MAAqB,GAAG,MAAM,CAG7H"}
|
package/dist/arguments.js
CHANGED
|
@@ -4,6 +4,7 @@ import { parseArgs } from 'node:util';
|
|
|
4
4
|
import { ProblemError, z } from '@kvman/sdk';
|
|
5
5
|
export const usage = `Usage:
|
|
6
6
|
kvman [--mode web] [--preset coder] [--home <dir>] [--port <n>] [--yes] [--no-open] [--log-level <level>]
|
|
7
|
+
kvman uninstall [--home <dir>] [--yes] [--keep-data | --delete-data]
|
|
7
8
|
kvman --help | --version
|
|
8
9
|
|
|
9
10
|
Options:
|
|
@@ -16,6 +17,12 @@ Options:
|
|
|
16
17
|
--log-level <level> debug, info (the default), warn, or error.
|
|
17
18
|
--help Show this help.
|
|
18
19
|
--version Show kvman's version.
|
|
20
|
+
|
|
21
|
+
Uninstall options:
|
|
22
|
+
--home <dir> The home folder whose data and running kvman are meant.
|
|
23
|
+
--yes Remove kvman without asking; its data is kept unless --delete-data is given.
|
|
24
|
+
--keep-data Keep kvman's data without asking.
|
|
25
|
+
--delete-data Delete kvman's data without asking.
|
|
19
26
|
`;
|
|
20
27
|
const flags = {
|
|
21
28
|
mode: { type: 'string' },
|
|
@@ -28,6 +35,12 @@ const flags = {
|
|
|
28
35
|
help: { type: 'boolean' },
|
|
29
36
|
version: { type: 'boolean' },
|
|
30
37
|
};
|
|
38
|
+
const uninstallFlags = {
|
|
39
|
+
home: { type: 'string' },
|
|
40
|
+
yes: { type: 'boolean' },
|
|
41
|
+
'keep-data': { type: 'boolean' },
|
|
42
|
+
'delete-data': { type: 'boolean' },
|
|
43
|
+
};
|
|
31
44
|
const modeSchema = z.literal('web', { error: 'The mode must be web.' }).optional();
|
|
32
45
|
const logLevelSchema = z.enum(['debug', 'info', 'warn', 'error'], { error: 'The log level must be debug, info, warn, or error.' }).default('info');
|
|
33
46
|
const portSchema = z
|
|
@@ -55,7 +68,26 @@ function readFlags(argv) {
|
|
|
55
68
|
throw error;
|
|
56
69
|
}
|
|
57
70
|
}
|
|
71
|
+
function readUninstallFlags(argv) {
|
|
72
|
+
try {
|
|
73
|
+
return parseArgs({ args: [...argv], options: uninstallFlags, strict: true, allowPositionals: false });
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
if (error instanceof TypeError)
|
|
77
|
+
throw invalid(error.message);
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function parseUninstall(argv) {
|
|
82
|
+
const { values } = readUninstallFlags(argv);
|
|
83
|
+
if (values['keep-data'] === true && values['delete-data'] === true)
|
|
84
|
+
throw invalid('Give --keep-data or --delete-data, not both.');
|
|
85
|
+
const data = values['keep-data'] === true ? 'keep' : values['delete-data'] === true ? 'delete' : 'ask';
|
|
86
|
+
return { kind: 'uninstall', home: values.home, yes: values.yes === true, data };
|
|
87
|
+
}
|
|
58
88
|
export function parseArguments(argv) {
|
|
89
|
+
if (argv[0] === 'uninstall')
|
|
90
|
+
return parseUninstall(argv.slice(1));
|
|
59
91
|
const { values } = readFlags(argv);
|
|
60
92
|
if (values.help === true)
|
|
61
93
|
return { kind: 'help' };
|
package/dist/arguments.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arguments.js","sourceRoot":"","sources":["../src/arguments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"arguments.js","sourceRoot":"","sources":["../src/arguments.ts"],"names":[],"mappings":"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"}
|
package/dist/bundled.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** The `kvman` package's own folder, which holds `dist/` (or `src/`) and `presets/`. */
|
|
2
|
+
export declare const packageFolder: string;
|
|
1
3
|
export declare const bundledPresetsFolder: string;
|
|
2
4
|
export declare function bundledExtensions(folder?: string): ReadonlyMap<string, string>;
|
|
3
5
|
//# sourceMappingURL=bundled.d.ts.map
|
package/dist/bundled.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundled.d.ts","sourceRoot":"","sources":["../src/bundled.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bundled.d.ts","sourceRoot":"","sources":["../src/bundled.ts"],"names":[],"mappings":"AAUA,wFAAwF;AACxF,eAAO,MAAM,aAAa,QAAiD,CAAC;AAE5E,eAAO,MAAM,oBAAoB,QAAsC,CAAC;AASxE,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,MAAsB,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAU7F"}
|
package/dist/bundled.js
CHANGED
|
@@ -6,7 +6,8 @@ import { z } from '@kvman/sdk';
|
|
|
6
6
|
// What ships with kvman (plan 01 §1.4, ADR 0026): the bundled presets in the package's own `presets/`, and the bundled
|
|
7
7
|
// extensions, which are the package's dependencies that have a `kvman` field. Each is found as Node resolves any
|
|
8
8
|
// module, so the repository and an installed kvman take the same path.
|
|
9
|
-
|
|
9
|
+
/** The `kvman` package's own folder, which holds `dist/` (or `src/`) and `presets/`. */
|
|
10
|
+
export const packageFolder = fileURLToPath(new URL('../', import.meta.url));
|
|
10
11
|
export const bundledPresetsFolder = path.join(packageFolder, 'presets');
|
|
11
12
|
const packageSchema = z.object({ dependencies: z.record(z.string(), z.string()).optional() });
|
|
12
13
|
const dependencySchema = z.object({ kvman: z.unknown().optional() });
|
package/dist/bundled.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundled.js","sourceRoot":"","sources":["../src/bundled.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAE/B,uHAAuH;AACvH,iHAAiH;AACjH,uEAAuE;AAEvE,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"bundled.js","sourceRoot":"","sources":["../src/bundled.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAE/B,uHAAuH;AACvH,iHAAiH;AACjH,uEAAuE;AAEvE,wFAAwF;AACxF,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AAExE,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC9F,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAErE,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiB,aAAa;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvD,MAAM,kBAAkB,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/F,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,GAAG,IAAI,eAAe,CAAC,CAAC;QACtE,IAAI,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS;YAAE,SAAS;QACvF,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
package/dist/lock-file.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export type LockTaking = TakenLock | {
|
|
|
14
14
|
lock: Lock;
|
|
15
15
|
};
|
|
16
16
|
export declare function isAlive(pid: number): boolean;
|
|
17
|
+
/** The home's lock when a live process holds it: the kvman that runs on that home. */
|
|
18
|
+
export declare function liveLock(home: string, alive?: (pid: number) => boolean): Lock | undefined;
|
|
17
19
|
export declare function takeLock(home: string, pid?: number, alive?: (pid: number) => boolean): LockTaking;
|
|
18
20
|
export {};
|
|
19
21
|
//# sourceMappingURL=lock-file.d.ts.map
|
package/dist/lock-file.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock-file.d.ts","sourceRoot":"","sources":["../src/lock-file.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAO/B,QAAA,MAAM,UAAU;;;iBAAuG,CAAC;AAExH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,IAAI,IAAI,CAAA;CAAE,CAAC;AAExF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAMlE,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAS5C;
|
|
1
|
+
{"version":3,"file":"lock-file.d.ts","sourceRoot":"","sources":["../src/lock-file.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAO/B,QAAA,MAAM,UAAU;;;iBAAuG,CAAC;AAExH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,IAAI,IAAI,CAAA;CAAE,CAAC;AAExF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAMlE,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAS5C;AA+CD,sFAAsF;AACtF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAiB,GAAG,IAAI,GAAG,SAAS,CAGlG;AAgBD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAoB,EAAE,KAAK,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAiB,GAAG,UAAU,CAUvH"}
|
package/dist/lock-file.js
CHANGED
|
@@ -74,6 +74,11 @@ function removeStale(file, staleText) {
|
|
|
74
74
|
}
|
|
75
75
|
rmSync(aside, { force: true });
|
|
76
76
|
}
|
|
77
|
+
/** The home's lock when a live process holds it: the kvman that runs on that home. */
|
|
78
|
+
export function liveLock(home, alive = isAlive) {
|
|
79
|
+
const found = readLock(path.join(home, 'kvman.lock'));
|
|
80
|
+
return found?.lock !== undefined && alive(found.lock.pid) ? found.lock : undefined;
|
|
81
|
+
}
|
|
77
82
|
function taken(file, pid) {
|
|
78
83
|
return {
|
|
79
84
|
kind: 'taken',
|
package/dist/lock-file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock-file.js","sourceRoot":"","sources":["../src/lock-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/F,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAE/B,sHAAsH;AACtH,mHAAmH;AACnH,uHAAuH;AACvH,+CAA+C;AAE/C,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAQxH,SAAS,OAAO,CAAC,KAAc,EAAE,IAAY;IAC3C,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1C,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC;QAC/C,IAAI,KAAK,YAAY,WAAW;YAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACvE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,sGAAsG;AACtG,SAAS,SAAS,CAAC,IAAY,EAAE,IAAU;IACzC,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrD,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3C,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,SAAiB;IAClD,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrD,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO;QACrC,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAAE,MAAM,KAAK,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,KAAK,CAAC,IAAY,EAAE,GAAW;IACtC,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC7C,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACpD,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,GAAG;gBAAE,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE,QAAkC,OAAO;IACzG,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3C,SAAS,CAAC;QACR,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACjG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"lock-file.js","sourceRoot":"","sources":["../src/lock-file.ts"],"names":[],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
@@ -2,11 +2,18 @@
|
|
|
2
2
|
import os from 'node:os';
|
|
3
3
|
import { kernelVersion } from '@kvman/kernel';
|
|
4
4
|
import { ProblemError } from '@kvman/sdk';
|
|
5
|
+
import { setTimeout as wait } from 'node:timers/promises';
|
|
5
6
|
import { parseArguments, usage } from "./arguments.js";
|
|
7
|
+
import { packageFolder } from "./bundled.js";
|
|
8
|
+
import { isAlive } from "./lock-file.js";
|
|
6
9
|
import { runKvman } from "./run-kvman.js";
|
|
7
10
|
import { failureLines } from "./terminal.js";
|
|
11
|
+
import { programRunner } from "./uninstall/run-program.js";
|
|
12
|
+
import { runUninstall } from "./uninstall/run-uninstall.js";
|
|
13
|
+
import { sendStopSignal } from "./uninstall/stop-running.js";
|
|
8
14
|
// The `kvman` bin (plan 01 §1.2): 0 after a clean stop or a hand-over, 1 after a failed start (plan 02 §2.14), and 130
|
|
9
|
-
// after a second Ctrl+C (ADR 0009, 50).
|
|
15
|
+
// after a second Ctrl+C (ADR 0009, 50). `kvman uninstall` exits 0 when kvman was removed or the person said no, and 1
|
|
16
|
+
// when it couldn't go on (ADR 0031).
|
|
10
17
|
async function main(argv) {
|
|
11
18
|
const args = parseArguments(argv);
|
|
12
19
|
if (args.kind === 'help') {
|
|
@@ -17,12 +24,29 @@ async function main(argv) {
|
|
|
17
24
|
process.stdout.write(`${kernelVersion()}\n`);
|
|
18
25
|
return 0;
|
|
19
26
|
}
|
|
27
|
+
const terminal = { input: process.stdin, output: process.stdout, isTerminal: process.stdin.isTTY === true && process.stdout.isTTY === true };
|
|
28
|
+
if (args.kind === 'uninstall') {
|
|
29
|
+
return runUninstall(args, {
|
|
30
|
+
variables: process.env,
|
|
31
|
+
userFolder: os.homedir(),
|
|
32
|
+
platform: process.platform,
|
|
33
|
+
terminal,
|
|
34
|
+
errors: process.stderr,
|
|
35
|
+
packageFolder,
|
|
36
|
+
runProgram: programRunner(process.platform, process.stdout),
|
|
37
|
+
isAlive,
|
|
38
|
+
sendStop: sendStopSignal,
|
|
39
|
+
wait: async (milliseconds) => {
|
|
40
|
+
await wait(milliseconds);
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
20
44
|
return runKvman(args, {
|
|
21
45
|
variables: process.env,
|
|
22
46
|
startFolder: process.cwd(),
|
|
23
47
|
userFolder: os.homedir(),
|
|
24
48
|
platform: process.platform,
|
|
25
|
-
terminal
|
|
49
|
+
terminal,
|
|
26
50
|
errors: process.stderr,
|
|
27
51
|
exitAtOnce: (code) => process.exit(code),
|
|
28
52
|
});
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/run-kvman.js
CHANGED
|
@@ -52,7 +52,7 @@ export async function runKvman(args, environment) {
|
|
|
52
52
|
const lock = takeLock(home);
|
|
53
53
|
if (lock.kind === 'held')
|
|
54
54
|
return joinRunning(args, lock.lock, folders, environment);
|
|
55
|
-
// A program kvman runs (
|
|
55
|
+
// A program kvman runs (kvbuilder's `kvman-docs`) finds this kvman through `<home>/kvman.lock` (plan 01 §1.2).
|
|
56
56
|
process.env['KVMAN_HOME'] = home;
|
|
57
57
|
const presetFile = editableFile(args.preset ?? defaultPreset, folders);
|
|
58
58
|
try {
|
package/dist/run-kvman.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-kvman.js","sourceRoot":"","sources":["../src/run-kvman.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"run-kvman.js","sourceRoot":"","sources":["../src/run-kvman.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RunProgram } from './run-program.ts';
|
|
2
|
+
export type InstalledCheck = 'global' | 'elsewhere' | 'no-npm';
|
|
3
|
+
export declare function checkInstalled(packageFolder: string, runProgram: RunProgram): Promise<InstalledCheck>;
|
|
4
|
+
//# sourceMappingURL=installed-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installed-check.d.ts","sourceRoot":"","sources":["../../src/uninstall/installed-check.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAW/D,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAK3G"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { realpathSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
function realFolder(folder) {
|
|
4
|
+
try {
|
|
5
|
+
return realpathSync.native(folder);
|
|
6
|
+
}
|
|
7
|
+
catch (error) {
|
|
8
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT')
|
|
9
|
+
return undefined;
|
|
10
|
+
throw error;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export async function checkInstalled(packageFolder, runProgram) {
|
|
14
|
+
const root = await runProgram('npm', ['root', '-g'], 'captured');
|
|
15
|
+
if (!root.started || root.code !== 0)
|
|
16
|
+
return 'no-npm';
|
|
17
|
+
const globalKvman = realFolder(path.join(root.output.trim(), 'kvman'));
|
|
18
|
+
return globalKvman !== undefined && globalKvman === realFolder(packageFolder) ? 'global' : 'elsewhere';
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=installed-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installed-check.js","sourceRoot":"","sources":["../../src/uninstall/installed-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAS7B,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC3F,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,aAAqB,EAAE,UAAsB;IAChF,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IACjE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtD,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,OAAO,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;AACzG,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
export type ProgramResult = {
|
|
3
|
+
started: boolean;
|
|
4
|
+
code: number;
|
|
5
|
+
output: string;
|
|
6
|
+
};
|
|
7
|
+
/** Runs a program to its end; `shown` also copies its output to the terminal. */
|
|
8
|
+
export type RunProgram = (program: string, args: readonly string[], output: 'captured' | 'shown') => Promise<ProgramResult>;
|
|
9
|
+
export type StartProgram = typeof spawn;
|
|
10
|
+
export declare function programRunner(platform: NodeJS.Platform, terminal: NodeJS.WritableStream, start?: StartProgram): RunProgram;
|
|
11
|
+
//# sourceMappingURL=run-program.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-program.d.ts","sourceRoot":"","sources":["../../src/uninstall/run-program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAK3C,MAAM,MAAM,aAAa,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,iFAAiF;AACjF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5H,MAAM,MAAM,YAAY,GAAG,OAAO,KAAK,CAAC;AAExC,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,KAAK,GAAE,YAAoB,GAAG,UAAU,CAkBjI"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
export function programRunner(platform, terminal, start = spawn) {
|
|
3
|
+
return (program, args, output) => new Promise((resolve) => {
|
|
4
|
+
const child = platform === 'win32'
|
|
5
|
+
? start(program, [...args], { shell: true, windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] })
|
|
6
|
+
: start(program, [...args], { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
7
|
+
let text = '';
|
|
8
|
+
child.stdout.setEncoding('utf8').on('data', (chunk) => {
|
|
9
|
+
text += chunk;
|
|
10
|
+
if (output === 'shown')
|
|
11
|
+
terminal.write(chunk);
|
|
12
|
+
});
|
|
13
|
+
child.stderr.setEncoding('utf8').on('data', (chunk) => {
|
|
14
|
+
if (output === 'shown')
|
|
15
|
+
terminal.write(chunk);
|
|
16
|
+
});
|
|
17
|
+
child.once('error', () => resolve({ started: false, code: 1, output: text }));
|
|
18
|
+
child.once('close', (code) => resolve({ started: true, code: code ?? 1, output: text }));
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=run-program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-program.js","sourceRoot":"","sources":["../../src/uninstall/run-program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAY3C,MAAM,UAAU,aAAa,CAAC,QAAyB,EAAE,QAA+B,EAAE,QAAsB,KAAK;IACnH,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAC/B,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE;QACrC,MAAM,KAAK,GACT,QAAQ,KAAK,OAAO;YAClB,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YAClG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACvE,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC5D,IAAI,IAAI,KAAK,CAAC;YACd,IAAI,MAAM,KAAK,OAAO;gBAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC5D,IAAI,MAAM,KAAK,OAAO;gBAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9E,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type UninstallArguments } from '../arguments.ts';
|
|
2
|
+
import type { Terminal } from '../trust-prompt.ts';
|
|
3
|
+
import { type StopServices } from './stop-running.ts';
|
|
4
|
+
export type UninstallEnvironment = StopServices & {
|
|
5
|
+
variables: NodeJS.ProcessEnv;
|
|
6
|
+
userFolder: string;
|
|
7
|
+
terminal: Terminal;
|
|
8
|
+
errors: NodeJS.WritableStream;
|
|
9
|
+
packageFolder: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function runUninstall(args: UninstallArguments, environment: UninstallEnvironment): Promise<number>;
|
|
12
|
+
//# sourceMappingURL=run-uninstall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-uninstall.d.ts","sourceRoot":"","sources":["../../src/uninstall/run-uninstall.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQnE,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG;IAChD,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAOF,wBAAsB,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmC/G"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { rm } from 'node:fs/promises';
|
|
2
|
+
import { kvmanHome } from "../arguments.js";
|
|
3
|
+
import { liveLock } from "../lock-file.js";
|
|
4
|
+
import { checkInstalled } from "./installed-check.js";
|
|
5
|
+
import { stopRunning } from "./stop-running.js";
|
|
6
|
+
import { askWhatToRemove } from "./uninstall-questions.js";
|
|
7
|
+
const notGlobal = "This kvman wasn't installed with `npm i -g kvman`, so npm can't remove it. Remove it the way it was installed.\nNothing was removed.\n";
|
|
8
|
+
const noNpm = "npm wasn't found, so kvman can't remove itself.\nNothing was removed.\n";
|
|
9
|
+
const notStopped = "kvman didn't stop within 15 seconds.\nNothing was removed.\n";
|
|
10
|
+
const npmFailed = 'npm could not remove kvman, and your data was left alone. Run this yourself:\n npm uninstall -g kvman\n';
|
|
11
|
+
export async function runUninstall(args, environment) {
|
|
12
|
+
const { terminal, errors } = environment;
|
|
13
|
+
const home = kvmanHome(args.home, environment.variables, environment.userFolder);
|
|
14
|
+
const running = liveLock(home, (pid) => environment.isAlive(pid));
|
|
15
|
+
terminal.output.write(`This removes kvman from this computer.\n${running === undefined ? '' : 'kvman is running and will be stopped.\n'}`);
|
|
16
|
+
const answers = await askWhatToRemove(args, home, terminal);
|
|
17
|
+
if (answers.kind === 'unanswered') {
|
|
18
|
+
errors.write(`There is no terminal to ask in. Answer with ${answers.flag}.\nNothing was removed.\n`);
|
|
19
|
+
return 1;
|
|
20
|
+
}
|
|
21
|
+
if (answers.kind === 'declined') {
|
|
22
|
+
terminal.output.write('Nothing was removed.\n');
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
const installed = await checkInstalled(environment.packageFolder, environment.runProgram);
|
|
26
|
+
if (installed !== 'global') {
|
|
27
|
+
errors.write(installed === 'no-npm' ? noNpm : notGlobal);
|
|
28
|
+
return 1;
|
|
29
|
+
}
|
|
30
|
+
if (running !== undefined && !(await stopRunning(running.pid, environment))) {
|
|
31
|
+
errors.write(notStopped);
|
|
32
|
+
return 1;
|
|
33
|
+
}
|
|
34
|
+
const removed = await environment.runProgram('npm', ['uninstall', '-g', 'kvman'], 'shown');
|
|
35
|
+
if (!removed.started || removed.code !== 0) {
|
|
36
|
+
errors.write(npmFailed);
|
|
37
|
+
return 1;
|
|
38
|
+
}
|
|
39
|
+
if (!answers.deleteData) {
|
|
40
|
+
terminal.output.write(`kvman was removed. Your data was kept in ${home}\n`);
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
await rm(home, { recursive: true, force: true });
|
|
44
|
+
terminal.output.write('kvman and its data were removed.\n');
|
|
45
|
+
return 0;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=run-uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-uninstall.js","sourceRoot":"","sources":["../../src/uninstall/run-uninstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RunProgram } from './run-program.ts';
|
|
2
|
+
export type StopServices = {
|
|
3
|
+
platform: NodeJS.Platform;
|
|
4
|
+
runProgram: RunProgram;
|
|
5
|
+
isAlive(pid: number): boolean;
|
|
6
|
+
sendStop(pid: number): void;
|
|
7
|
+
wait(milliseconds: number): Promise<void>;
|
|
8
|
+
};
|
|
9
|
+
/** Whether the process is gone. */
|
|
10
|
+
export declare function stopRunning(pid: number, services: StopServices): Promise<boolean>;
|
|
11
|
+
/** SIGTERM to a process that may already be gone. */
|
|
12
|
+
export declare function sendStopSignal(pid: number): void;
|
|
13
|
+
//# sourceMappingURL=stop-running.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop-running.d.ts","sourceRoot":"","sources":["../../src/uninstall/stop-running.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AASnD,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C,CAAC;AAEF,mCAAmC;AACnC,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAQvF;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMhD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Stopping the kvman that runs on the home (ADR 0031, 7): SIGTERM on Linux and macOS, which runs the stop sequence
|
|
2
|
+
// (plan 02 §2.14); `taskkill` on Windows, where no signal reaches another process. Then it waits until the process is
|
|
3
|
+
// gone, at most 15 seconds.
|
|
4
|
+
const stopLimit = 15_000;
|
|
5
|
+
const checkEvery = 250;
|
|
6
|
+
/** Whether the process is gone. */
|
|
7
|
+
export async function stopRunning(pid, services) {
|
|
8
|
+
if (services.platform === 'win32')
|
|
9
|
+
await services.runProgram('taskkill', ['/PID', String(pid), '/T', '/F'], 'captured');
|
|
10
|
+
else
|
|
11
|
+
services.sendStop(pid);
|
|
12
|
+
for (let waited = 0; waited < stopLimit; waited += checkEvery) {
|
|
13
|
+
if (!services.isAlive(pid))
|
|
14
|
+
return true;
|
|
15
|
+
await services.wait(checkEvery);
|
|
16
|
+
}
|
|
17
|
+
return !services.isAlive(pid);
|
|
18
|
+
}
|
|
19
|
+
/** SIGTERM to a process that may already be gone. */
|
|
20
|
+
export function sendStopSignal(pid) {
|
|
21
|
+
try {
|
|
22
|
+
process.kill(pid, 'SIGTERM');
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
if (!(error instanceof Error && 'code' in error && error.code === 'ESRCH'))
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=stop-running.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop-running.js","sourceRoot":"","sources":["../../src/uninstall/stop-running.ts"],"names":[],"mappings":"AAEA,mHAAmH;AACnH,sHAAsH;AACtH,4BAA4B;AAE5B,MAAM,SAAS,GAAG,MAAM,CAAC;AACzB,MAAM,UAAU,GAAG,GAAG,CAAC;AAUvB,mCAAmC;AACnC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,QAAsB;IACnE,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO;QAAE,MAAM,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;;QACnH,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,IAAI,UAAU,EAAE,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;YAAE,MAAM,KAAK,CAAC;IAC1F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { UninstallArguments } from '../arguments.ts';
|
|
2
|
+
import type { Terminal } from '../trust-prompt.ts';
|
|
3
|
+
export type Answers = {
|
|
4
|
+
kind: 'declined';
|
|
5
|
+
} | {
|
|
6
|
+
kind: 'unanswered';
|
|
7
|
+
flag: string;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'agreed';
|
|
10
|
+
deleteData: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare function askWhatToRemove(args: UninstallArguments, home: string, terminal: Terminal): Promise<Answers>;
|
|
13
|
+
//# sourceMappingURL=uninstall-questions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall-questions.d.ts","sourceRoot":"","sources":["../../src/uninstall/uninstall-questions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAOnD,MAAM,MAAM,OAAO,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC;AAgC5H,wBAAsB,eAAe,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAYlH"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createInterface } from 'node:readline';
|
|
2
|
+
// Lines are kept as they arrive, so two answers typed or piped at once both count; the end of input answers ''.
|
|
3
|
+
function asker(terminal) {
|
|
4
|
+
const lines = createInterface({ input: terminal.input });
|
|
5
|
+
const arrived = [];
|
|
6
|
+
const waiting = [];
|
|
7
|
+
let ended = false;
|
|
8
|
+
lines.on('line', (line) => {
|
|
9
|
+
const next = waiting.shift();
|
|
10
|
+
if (next === undefined)
|
|
11
|
+
arrived.push(line);
|
|
12
|
+
else
|
|
13
|
+
next(line);
|
|
14
|
+
});
|
|
15
|
+
lines.once('close', () => {
|
|
16
|
+
ended = true;
|
|
17
|
+
for (const next of waiting.splice(0))
|
|
18
|
+
next('');
|
|
19
|
+
});
|
|
20
|
+
return {
|
|
21
|
+
ask: (question) => {
|
|
22
|
+
terminal.output.write(question);
|
|
23
|
+
const line = arrived.shift();
|
|
24
|
+
if (line !== undefined)
|
|
25
|
+
return Promise.resolve(line);
|
|
26
|
+
return ended ? Promise.resolve('') : new Promise((resolve) => waiting.push(resolve));
|
|
27
|
+
},
|
|
28
|
+
close: () => lines.close(),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const agrees = (answer) => answer.trim().toLowerCase() === 'y';
|
|
32
|
+
export async function askWhatToRemove(args, home, terminal) {
|
|
33
|
+
if (args.yes)
|
|
34
|
+
return { kind: 'agreed', deleteData: args.data === 'delete' };
|
|
35
|
+
if (!terminal.isTerminal)
|
|
36
|
+
return { kind: 'unanswered', flag: '--yes' };
|
|
37
|
+
const questions = asker(terminal);
|
|
38
|
+
try {
|
|
39
|
+
if (!agrees(await questions.ask('Remove kvman? [y/N] ')))
|
|
40
|
+
return { kind: 'declined' };
|
|
41
|
+
if (args.data !== 'ask')
|
|
42
|
+
return { kind: 'agreed', deleteData: args.data === 'delete' };
|
|
43
|
+
terminal.output.write(`\nYour data is in ${home}\n(chats, provider keys, presets).\n`);
|
|
44
|
+
return { kind: 'agreed', deleteData: agrees(await questions.ask('Delete it too? [y/N] ')) };
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
questions.close();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=uninstall-questions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall-questions.js","sourceRoot":"","sources":["../../src/uninstall/uninstall-questions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAahD,gHAAgH;AAChH,SAAS,KAAK,CAAC,QAAkB;IAC/B,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IACzD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACtC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QACvB,KAAK,GAAG,IAAI,CAAC;QACb,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,OAAO;QACL,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE;YAChB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;AAEhF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAwB,EAAE,IAAY,EAAE,QAAkB;IAC9F,IAAI,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;IAC5E,IAAI,CAAC,QAAQ,CAAC,UAAU;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACvE,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QACtF,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvF,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAI,sCAAsC,CAAC,CAAC;QACvF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC;IAC9F,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kvman",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "kvman, an app that works like a small operating system: a kernel runs extensions, and a preset shapes them.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"kvman": "./dist/main.js"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@kvman/kernel": "0.
|
|
24
|
+
"@kvman/kernel": "0.3.0",
|
|
25
25
|
"@kvman/kvai": "0.1.1",
|
|
26
|
-
"@kvman/kvcoder": "0.1.
|
|
27
|
-
"@kvman/
|
|
28
|
-
"@kvman/kvwebui": "0.1.
|
|
29
|
-
"@kvman/sdk": "0.1.
|
|
26
|
+
"@kvman/kvcoder": "0.1.3",
|
|
27
|
+
"@kvman/kvbuilder": "0.3.0",
|
|
28
|
+
"@kvman/kvwebui": "0.1.1",
|
|
29
|
+
"@kvman/sdk": "0.1.1"
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build": "tsc -p tsconfig.build.json",
|