@kamaras/venpm 0.1.0 → 0.2.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/README.md +163 -24
- package/dist/cli/completions.d.ts +3 -0
- package/dist/cli/completions.d.ts.map +1 -0
- package/dist/cli/completions.js +78 -0
- package/dist/cli/completions.js.map +1 -0
- package/dist/cli/config-cmd.d.ts.map +1 -1
- package/dist/cli/config-cmd.js +31 -22
- package/dist/cli/config-cmd.js.map +1 -1
- package/dist/cli/context.d.ts +1 -4
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js +28 -7
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +22 -32
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +37 -23
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/first-run.d.ts +4 -0
- package/dist/cli/first-run.d.ts.map +1 -0
- package/dist/cli/first-run.js +51 -0
- package/dist/cli/first-run.js.map +1 -0
- package/dist/cli/help.d.ts +3 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +42 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/info.d.ts.map +1 -1
- package/dist/cli/info.js +48 -53
- package/dist/cli/info.js.map +1 -1
- package/dist/cli/install.d.ts.map +1 -1
- package/dist/cli/install.js +53 -68
- package/dist/cli/install.js.map +1 -1
- package/dist/cli/list.d.ts.map +1 -1
- package/dist/cli/list.js +20 -20
- package/dist/cli/list.js.map +1 -1
- package/dist/cli/rebuild.js +37 -34
- package/dist/cli/rebuild.js.map +1 -1
- package/dist/cli/repo.d.ts.map +1 -1
- package/dist/cli/repo.js +22 -32
- package/dist/cli/repo.js.map +1 -1
- package/dist/cli/search.d.ts.map +1 -1
- package/dist/cli/search.js +19 -20
- package/dist/cli/search.js.map +1 -1
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +17 -20
- package/dist/cli/uninstall.js.map +1 -1
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +28 -40
- package/dist/cli/update.js.map +1 -1
- package/dist/cli/validate.d.ts.map +1 -1
- package/dist/cli/validate.js +14 -21
- package/dist/cli/validate.js.map +1 -1
- package/dist/core/ansi.d.ts +14 -0
- package/dist/core/ansi.d.ts.map +1 -0
- package/dist/core/ansi.js +36 -0
- package/dist/core/ansi.js.map +1 -0
- package/dist/core/builder.d.ts +1 -0
- package/dist/core/builder.d.ts.map +1 -1
- package/dist/core/builder.js +18 -7
- package/dist/core/builder.js.map +1 -1
- package/dist/core/errors.d.ts +36 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +70 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/fuzzy.d.ts +3 -0
- package/dist/core/fuzzy.d.ts.map +1 -0
- package/dist/core/fuzzy.js +30 -0
- package/dist/core/fuzzy.js.map +1 -0
- package/dist/core/json-renderer.d.ts +5 -0
- package/dist/core/json-renderer.d.ts.map +1 -0
- package/dist/core/json-renderer.js +48 -0
- package/dist/core/json-renderer.js.map +1 -0
- package/dist/core/json.d.ts +5 -3
- package/dist/core/json.d.ts.map +1 -1
- package/dist/core/json.js +8 -4
- package/dist/core/json.js.map +1 -1
- package/dist/core/progress.d.ts +11 -0
- package/dist/core/progress.d.ts.map +1 -0
- package/dist/core/progress.js +53 -0
- package/dist/core/progress.js.map +1 -0
- package/dist/core/prompt.d.ts +1 -0
- package/dist/core/prompt.d.ts.map +1 -1
- package/dist/core/prompt.js +73 -4
- package/dist/core/prompt.js.map +1 -1
- package/dist/core/renderer.d.ts +13 -0
- package/dist/core/renderer.d.ts.map +1 -0
- package/dist/core/renderer.js +157 -0
- package/dist/core/renderer.js.map +1 -0
- package/dist/core/stream-renderer.d.ts +5 -0
- package/dist/core/stream-renderer.d.ts.map +1 -0
- package/dist/core/stream-renderer.js +71 -0
- package/dist/core/stream-renderer.js.map +1 -0
- package/dist/core/types.d.ts +48 -8
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/log.d.ts +0 -8
- package/dist/core/log.d.ts.map +0 -1
- package/dist/core/log.js +0 -24
- package/dist/core/log.js.map +0 -1
package/dist/cli/install.js
CHANGED
|
@@ -8,11 +8,12 @@ import { fetchPlugin, fetchViaLocal } from "../core/fetcher.js";
|
|
|
8
8
|
import { buildAndDeploy } from "../core/builder.js";
|
|
9
9
|
import { detectVencordPath, detectDiscordBinary } from "../core/detect.js";
|
|
10
10
|
import { getConfigPath, getLockfilePath } from "../core/paths.js";
|
|
11
|
-
import {
|
|
11
|
+
import { ErrorCode, makeError, exitCodeForError } from "../core/errors.js";
|
|
12
|
+
import { findCandidates } from "../core/fuzzy.js";
|
|
12
13
|
import { createRealIOContext } from "./context.js";
|
|
13
14
|
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
14
15
|
export async function executeInstall(ctx, pluginName, options) {
|
|
15
|
-
const { fs, http, git, shell, prompter,
|
|
16
|
+
const { fs, http, git, shell, prompter, renderer } = ctx;
|
|
16
17
|
// 1. Load config and lockfile
|
|
17
18
|
const configPath = options.config ?? getConfigPath();
|
|
18
19
|
const lockfilePath = getLockfilePath();
|
|
@@ -21,13 +22,9 @@ export async function executeInstall(ctx, pluginName, options) {
|
|
|
21
22
|
// 2. Resolve Vencord path
|
|
22
23
|
const vencordPath = config.vencord.path ?? await detectVencordPath(fs);
|
|
23
24
|
if (!vencordPath) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
logger.error("Could not find Vencord source path. Set vencord.path in config or VENPM_VENCORD_PATH env var.");
|
|
30
|
-
process.exitCode = 1;
|
|
25
|
+
renderer.error(makeError(ErrorCode.VENCORD_NOT_FOUND, "Could not find Vencord source path. Set vencord.path in config or VENPM_VENCORD_PATH env var."));
|
|
26
|
+
renderer.finish(false);
|
|
27
|
+
process.exitCode = exitCodeForError(ErrorCode.VENCORD_NOT_FOUND);
|
|
31
28
|
return;
|
|
32
29
|
}
|
|
33
30
|
const userpluginDir = join(vencordPath, "src", "userplugins");
|
|
@@ -35,7 +32,7 @@ export async function executeInstall(ctx, pluginName, options) {
|
|
|
35
32
|
if (options.local) {
|
|
36
33
|
const localPath = options.local;
|
|
37
34
|
const dest = join(userpluginDir, pluginName);
|
|
38
|
-
|
|
35
|
+
renderer.text(`Symlinking ${localPath} → ${dest}`);
|
|
39
36
|
await fetchViaLocal(fs, localPath, dest);
|
|
40
37
|
lockfile = addInstalled(lockfile, pluginName, {
|
|
41
38
|
version: "local",
|
|
@@ -45,43 +42,39 @@ export async function executeInstall(ctx, pluginName, options) {
|
|
|
45
42
|
installed_at: new Date().toISOString(),
|
|
46
43
|
});
|
|
47
44
|
await saveLockfile(fs, lockfilePath, lockfile);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
logger.success(`Installed ${pluginName} from local path`);
|
|
45
|
+
renderer.success(`Installed ${pluginName} from local path`);
|
|
46
|
+
renderer.finish(true, { installed: [{ name: pluginName, version: "local", method: "local" }], warnings: [] });
|
|
53
47
|
return;
|
|
54
48
|
}
|
|
55
49
|
// 4. Fetch all indexes (with cache)
|
|
50
|
+
const p = renderer.progress("fetch-indexes", "Fetching indexes...");
|
|
56
51
|
const cache = await loadCache(fs);
|
|
57
52
|
const { results: fetchedIndexes, updatedCache } = await fetchAllIndexes(http, config.repos, { cache });
|
|
58
53
|
await saveCache(fs, updatedCache);
|
|
59
54
|
const validIndexes = fetchedIndexes.filter(fi => fi.index !== undefined);
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
55
|
+
const fetchErrors = fetchedIndexes.filter(fi => fi.error);
|
|
56
|
+
p.succeed(`${validIndexes.length} repo(s) fetched`);
|
|
57
|
+
for (const fi of fetchErrors) {
|
|
58
|
+
renderer.warn(`Failed to fetch index from repo "${fi.repoName}": ${fi.error}`);
|
|
64
59
|
}
|
|
65
60
|
// 5. Resolve plugin
|
|
66
61
|
const match = resolvePlugin(fetchedIndexes, pluginName, options.from);
|
|
67
62
|
if (!match) {
|
|
63
|
+
const allPluginNames = fetchedIndexes.flatMap(fi => Object.keys(fi.index?.plugins ?? {}));
|
|
64
|
+
const candidates = findCandidates(pluginName, allPluginNames);
|
|
68
65
|
const msg = options.from
|
|
69
66
|
? `Plugin "${pluginName}" not found in repo "${options.from}"`
|
|
70
67
|
: `Plugin "${pluginName}" not found in any configured repo`;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
logger.error(msg);
|
|
77
|
-
process.exitCode = 1;
|
|
68
|
+
renderer.error(makeError(ErrorCode.PLUGIN_NOT_FOUND, msg, { candidates }));
|
|
69
|
+
renderer.finish(false);
|
|
70
|
+
process.exitCode = exitCodeForError(ErrorCode.PLUGIN_NOT_FOUND);
|
|
78
71
|
return;
|
|
79
72
|
}
|
|
80
73
|
// Check for multiple matches (without --from, warn if plugin appears in multiple repos)
|
|
81
74
|
if (!options.from) {
|
|
82
75
|
const allMatches = fetchedIndexes.filter(fi => fi.index?.plugins[pluginName]);
|
|
83
76
|
if (allMatches.length > 1) {
|
|
84
|
-
|
|
77
|
+
renderer.warn(`Plugin "${pluginName}" found in multiple repos: ${allMatches.map(fi => fi.repoName).join(", ")}. ` +
|
|
85
78
|
`Using "${match.repoName}". Use --from <repo> to specify.`);
|
|
86
79
|
}
|
|
87
80
|
}
|
|
@@ -106,41 +99,44 @@ export async function executeInstall(ctx, pluginName, options) {
|
|
|
106
99
|
}
|
|
107
100
|
catch (err) {
|
|
108
101
|
if (err instanceof ResolverError) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
logger.error(err.message);
|
|
115
|
-
process.exitCode = 1;
|
|
102
|
+
renderer.error(makeError(ErrorCode.CIRCULAR_DEPENDENCY, err.message));
|
|
103
|
+
renderer.finish(false);
|
|
104
|
+
process.exitCode = exitCodeForError(ErrorCode.CIRCULAR_DEPENDENCY);
|
|
116
105
|
return;
|
|
117
106
|
}
|
|
118
107
|
throw err;
|
|
119
108
|
}
|
|
120
109
|
if (plan.entries.length === 0) {
|
|
121
|
-
|
|
110
|
+
renderer.text(`Plugin "${pluginName}" is already installed.`);
|
|
111
|
+
renderer.finish(true, { installed: [], warnings: [] });
|
|
122
112
|
return;
|
|
123
113
|
}
|
|
124
114
|
// 7. Show plan and confirm
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
115
|
+
renderer.heading("Install plan");
|
|
116
|
+
renderer.table(["Plugin", "Version", "Method", "Type"], plan.entries.map(entry => [
|
|
117
|
+
entry.name,
|
|
118
|
+
entry.version,
|
|
119
|
+
entry.method,
|
|
120
|
+
entry.isDependency ? "dependency" : "direct",
|
|
121
|
+
]));
|
|
130
122
|
// Warn about missing optional dependencies
|
|
123
|
+
const warnings = [];
|
|
131
124
|
if (plan.missingOptional?.length) {
|
|
132
|
-
|
|
133
|
-
|
|
125
|
+
const warnMsg = `Recommended plugins not installed: ${plan.missingOptional.join(", ")}`;
|
|
126
|
+
renderer.warn(warnMsg);
|
|
127
|
+
renderer.text(` Install with: venpm install ${plan.missingOptional.join(" ")}`);
|
|
128
|
+
warnings.push(warnMsg);
|
|
134
129
|
}
|
|
135
130
|
const confirmed = await prompter.confirm(`Proceed with installation?`, true);
|
|
136
131
|
if (!confirmed) {
|
|
137
|
-
|
|
132
|
+
renderer.text("Installation cancelled.");
|
|
133
|
+
renderer.finish(false);
|
|
138
134
|
return;
|
|
139
135
|
}
|
|
140
136
|
// 8. Fetch each entry and update lockfile
|
|
141
137
|
const installedEntries = [];
|
|
142
138
|
for (const entry of plan.entries) {
|
|
143
|
-
|
|
139
|
+
const ep = renderer.progress(`install-${entry.name}`, `Installing ${entry.name}@${entry.version} via ${entry.method}...`);
|
|
144
140
|
try {
|
|
145
141
|
const result = await fetchPlugin(entry, userpluginDir, { fs, git, http });
|
|
146
142
|
lockfile = addInstalled(lockfile, entry.name, {
|
|
@@ -153,31 +149,20 @@ export async function executeInstall(ctx, pluginName, options) {
|
|
|
153
149
|
path: result.path,
|
|
154
150
|
});
|
|
155
151
|
installedEntries.push({ name: entry.name, version: entry.version, method: result.method });
|
|
152
|
+
ep.succeed(`${entry.name}@${entry.version}`);
|
|
156
153
|
}
|
|
157
154
|
catch (err) {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
logger.error(msg);
|
|
165
|
-
process.exitCode = 1;
|
|
155
|
+
ep.fail(`${entry.name}: ${err instanceof Error ? err.message : err}`);
|
|
156
|
+
renderer.error(makeError(ErrorCode.BUILD_FAILED, `Failed to install ${entry.name}: ${err instanceof Error ? err.message : err}`));
|
|
157
|
+
renderer.finish(false);
|
|
158
|
+
process.exitCode = exitCodeForError(ErrorCode.BUILD_FAILED);
|
|
166
159
|
return;
|
|
167
160
|
}
|
|
168
161
|
}
|
|
169
162
|
// 9. Save lockfile
|
|
170
163
|
await saveLockfile(fs, lockfilePath, lockfile);
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
installed: installedEntries,
|
|
174
|
-
warnings: plan.missingOptional?.length
|
|
175
|
-
? [`Recommended plugins not installed: ${plan.missingOptional.join(", ")}`]
|
|
176
|
-
: [],
|
|
177
|
-
}));
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
logger.success(`Successfully installed ${pluginName}`);
|
|
164
|
+
renderer.success(`Successfully installed ${pluginName}`);
|
|
165
|
+
renderer.finish(true, { installed: installedEntries, warnings });
|
|
181
166
|
// 10. Handle rebuild
|
|
182
167
|
const effectiveRebuildMode = resolveRebuildMode(options, config.rebuild);
|
|
183
168
|
if (effectiveRebuildMode === "always" || options.rebuild) {
|
|
@@ -202,8 +187,8 @@ function resolveRebuildMode(options, configMode) {
|
|
|
202
187
|
return configMode;
|
|
203
188
|
}
|
|
204
189
|
async function runRebuild(ctx, vencordPath) {
|
|
205
|
-
const { fs, shell,
|
|
206
|
-
|
|
190
|
+
const { fs, shell, renderer } = ctx;
|
|
191
|
+
const p = renderer.progress("rebuild", "Rebuilding Vencord...");
|
|
207
192
|
const discordBinary = await detectDiscordBinary(fs);
|
|
208
193
|
try {
|
|
209
194
|
const result = await buildAndDeploy(fs, shell, vencordPath, {
|
|
@@ -211,14 +196,14 @@ async function runRebuild(ctx, vencordPath) {
|
|
|
211
196
|
discordBinary: discordBinary ?? undefined,
|
|
212
197
|
});
|
|
213
198
|
if (result.deployed) {
|
|
214
|
-
|
|
199
|
+
p.succeed(`Deployed to ${result.deployPath}`);
|
|
215
200
|
}
|
|
216
201
|
else {
|
|
217
|
-
|
|
202
|
+
p.succeed("Build complete (deploy path not found, skipped deploy)");
|
|
218
203
|
}
|
|
219
204
|
}
|
|
220
205
|
catch (err) {
|
|
221
|
-
|
|
206
|
+
p.fail(`Rebuild failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
222
207
|
}
|
|
223
208
|
}
|
|
224
209
|
// ─── CLI Registration ─────────────────────────────────────────────────────────
|
|
@@ -235,7 +220,7 @@ export function registerInstallCommand(program) {
|
|
|
235
220
|
.option("--rebuild", "Force Vencord rebuild")
|
|
236
221
|
.action(async (pluginName, opts) => {
|
|
237
222
|
const globalOpts = program.opts();
|
|
238
|
-
const ctx = createRealIOContext(
|
|
223
|
+
const ctx = createRealIOContext(globalOpts);
|
|
239
224
|
const options = {
|
|
240
225
|
...globalOpts,
|
|
241
226
|
version: opts["version"],
|
package/dist/cli/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/list.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/cli/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/cli/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKjE,wBAAsB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC5F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS1D"}
|
package/dist/cli/list.js
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
import { loadLockfile } from "../core/lockfile.js";
|
|
2
2
|
import { getLockfilePath } from "../core/paths.js";
|
|
3
|
-
import { jsonSuccess, writeJson } from "../core/json.js";
|
|
4
3
|
import { createRealIOContext } from "./context.js";
|
|
5
4
|
export async function executeList(ctx, options = {}) {
|
|
5
|
+
const { renderer } = ctx;
|
|
6
6
|
const lockfile = await loadLockfile(ctx.fs, getLockfilePath());
|
|
7
7
|
const installed = Object.entries(lockfile.installed);
|
|
8
|
-
if (options.json) {
|
|
9
|
-
writeJson(jsonSuccess({
|
|
10
|
-
plugins: installed.map(([name, info]) => ({
|
|
11
|
-
name,
|
|
12
|
-
version: info.version,
|
|
13
|
-
repo: info.repo,
|
|
14
|
-
method: info.method,
|
|
15
|
-
pinned: info.pinned,
|
|
16
|
-
})),
|
|
17
|
-
}));
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
8
|
if (installed.length === 0) {
|
|
21
|
-
|
|
9
|
+
renderer.text("No plugins installed");
|
|
10
|
+
renderer.finish(true, { plugins: [] });
|
|
22
11
|
return;
|
|
23
12
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
13
|
+
renderer.heading(`Installed plugins (${installed.length})`);
|
|
14
|
+
renderer.table(["Name", "Version", "Repo", "Method", "Pinned"], installed.map(([name, info]) => [
|
|
15
|
+
name,
|
|
16
|
+
info.version,
|
|
17
|
+
info.repo,
|
|
18
|
+
info.method,
|
|
19
|
+
info.pinned ? "yes" : "no",
|
|
20
|
+
]));
|
|
21
|
+
renderer.finish(true, {
|
|
22
|
+
plugins: installed.map(([name, info]) => ({
|
|
23
|
+
name,
|
|
24
|
+
version: info.version,
|
|
25
|
+
repo: info.repo,
|
|
26
|
+
method: info.method,
|
|
27
|
+
pinned: info.pinned,
|
|
28
|
+
})),
|
|
29
|
+
});
|
|
30
30
|
}
|
|
31
31
|
export function registerListCommand(program) {
|
|
32
32
|
program
|
package/dist/cli/list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/cli/list.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/cli/list.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAc,EAAE,UAAyB,EAAE;IACzE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IACzB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACtC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,OAAO;IACX,CAAC;IAED,QAAQ,CAAC,OAAO,CAAC,sBAAsB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5D,QAAQ,CAAC,KAAK,CACV,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAC/C,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI;QACJ,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;KAC7B,CAAC,CACL,CAAC;IAEF,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE;QAClB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC,CAAC;KACN,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAChD,OAAO;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAiB,CAAC;QACjD,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACX,CAAC"}
|
package/dist/cli/rebuild.js
CHANGED
|
@@ -2,71 +2,74 @@ import { loadConfig } from "../core/config.js";
|
|
|
2
2
|
import { getConfigPath } from "../core/paths.js";
|
|
3
3
|
import { detectVencordPath, detectDiscordBinary } from "../core/detect.js";
|
|
4
4
|
import { buildAndDeploy } from "../core/builder.js";
|
|
5
|
-
import {
|
|
5
|
+
import { ErrorCode, makeError, exitCodeForError } from "../core/errors.js";
|
|
6
6
|
import { createRealIOContext } from "./context.js";
|
|
7
7
|
export function registerRebuildCommand(program) {
|
|
8
8
|
program
|
|
9
9
|
.command("rebuild")
|
|
10
10
|
.description("Rebuild Vencord after plugin changes")
|
|
11
|
-
.
|
|
11
|
+
.option("--no-restart", "Skip Discord restart without prompting")
|
|
12
|
+
.option("--restart", "Restart Discord without prompting")
|
|
13
|
+
.action(async (cmdOptions) => {
|
|
12
14
|
const globalOpts = program.opts();
|
|
13
15
|
const ctx = createRealIOContext(globalOpts);
|
|
16
|
+
const { renderer } = ctx;
|
|
14
17
|
const configPath = globalOpts.config ?? getConfigPath();
|
|
15
18
|
const config = await loadConfig(ctx.fs, configPath);
|
|
16
19
|
// Resolve Vencord path
|
|
17
20
|
const vencordPath = config.vencord.path ?? await detectVencordPath(ctx.fs);
|
|
18
21
|
if (!vencordPath) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
ctx.logger.error("Vencord path not found. Set vencord.path in config or $VENPM_VENCORD_PATH.");
|
|
24
|
-
process.exitCode = 1;
|
|
22
|
+
renderer.error(makeError(ErrorCode.VENCORD_NOT_FOUND, "Vencord path not found. Set vencord.path in config or $VENPM_VENCORD_PATH."));
|
|
23
|
+
renderer.finish(false);
|
|
24
|
+
process.exitCode = exitCodeForError(ErrorCode.VENCORD_NOT_FOUND);
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
27
|
// Resolve Discord binary for optional restart
|
|
28
28
|
const discordBinary = config.discord.binary ?? await detectDiscordBinary(ctx.fs);
|
|
29
|
-
// Determine restart behaviour
|
|
29
|
+
// Determine restart behaviour — explicit flags override config
|
|
30
30
|
let shouldRestart = false;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
if (cmdOptions.noRestart) {
|
|
32
|
+
shouldRestart = false;
|
|
33
|
+
}
|
|
34
|
+
else if (cmdOptions.restart) {
|
|
35
|
+
shouldRestart = !!discordBinary;
|
|
34
36
|
}
|
|
35
|
-
else
|
|
36
|
-
|
|
37
|
+
else {
|
|
38
|
+
const restartMode = config.discord.restart;
|
|
39
|
+
if (restartMode === "always" && discordBinary) {
|
|
40
|
+
shouldRestart = true;
|
|
41
|
+
}
|
|
42
|
+
else if (restartMode === "ask" && discordBinary) {
|
|
43
|
+
shouldRestart = await ctx.prompter.confirm("Restart Discord after rebuild?", false);
|
|
44
|
+
}
|
|
37
45
|
}
|
|
38
|
-
|
|
46
|
+
const p = renderer.progress("rebuild", `Building Vencord at ${vencordPath}...`);
|
|
39
47
|
try {
|
|
40
48
|
const result = await buildAndDeploy(ctx.fs, ctx.shell, vencordPath, {
|
|
41
49
|
restart: shouldRestart,
|
|
42
50
|
discordBinary: discordBinary ?? undefined,
|
|
43
51
|
});
|
|
44
|
-
|
|
45
|
-
writeJson(jsonSuccess({
|
|
46
|
-
built: true,
|
|
47
|
-
deployed: result.deployed,
|
|
48
|
-
restarted: shouldRestart && !!discordBinary,
|
|
49
|
-
}));
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
ctx.logger.success("Build complete");
|
|
52
|
+
p.succeed("Build complete");
|
|
53
53
|
if (result.deployed && result.deployPath) {
|
|
54
|
-
|
|
54
|
+
renderer.text(`Deployed to ${result.deployPath}`);
|
|
55
55
|
}
|
|
56
56
|
else if (!result.deployed) {
|
|
57
|
-
|
|
57
|
+
renderer.warn("Deploy target not found — skipped copy step");
|
|
58
58
|
}
|
|
59
|
-
if (
|
|
60
|
-
|
|
59
|
+
if (result.restarted) {
|
|
60
|
+
renderer.text("Discord restarted");
|
|
61
61
|
}
|
|
62
|
+
renderer.finish(true, {
|
|
63
|
+
built: true,
|
|
64
|
+
deployed: result.deployed,
|
|
65
|
+
restarted: result.restarted,
|
|
66
|
+
});
|
|
62
67
|
}
|
|
63
68
|
catch (err) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
ctx.logger.error(`Build failed: ${err.message}`);
|
|
69
|
-
process.exitCode = 1;
|
|
69
|
+
p.fail("Build failed");
|
|
70
|
+
renderer.error(makeError(ErrorCode.BUILD_FAILED, `Build failed: ${err.message}`));
|
|
71
|
+
renderer.finish(false);
|
|
72
|
+
process.exitCode = exitCodeForError(ErrorCode.BUILD_FAILED);
|
|
70
73
|
return;
|
|
71
74
|
}
|
|
72
75
|
});
|
package/dist/cli/rebuild.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rebuild.js","sourceRoot":"","sources":["../../src/cli/rebuild.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"rebuild.js","sourceRoot":"","sources":["../../src/cli/rebuild.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/repo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/cli/repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/cli/repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4F1D"}
|
package/dist/cli/repo.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { loadConfig, saveConfig } from "../core/config.js";
|
|
2
2
|
import { getConfigPath } from "../core/paths.js";
|
|
3
|
-
import {
|
|
3
|
+
import { ErrorCode, makeError, exitCodeForError } from "../core/errors.js";
|
|
4
4
|
import { createRealIOContext } from "./context.js";
|
|
5
5
|
export function registerRepoCommand(program) {
|
|
6
6
|
const repo = program
|
|
@@ -13,6 +13,7 @@ export function registerRepoCommand(program) {
|
|
|
13
13
|
.action(async (url, options) => {
|
|
14
14
|
const parentOpts = program.opts();
|
|
15
15
|
const ctx = createRealIOContext(parentOpts);
|
|
16
|
+
const { renderer } = ctx;
|
|
16
17
|
const configPath = parentOpts.config ?? getConfigPath();
|
|
17
18
|
const config = await loadConfig(ctx.fs, configPath);
|
|
18
19
|
let name = options.name;
|
|
@@ -26,21 +27,15 @@ export function registerRepoCommand(program) {
|
|
|
26
27
|
}
|
|
27
28
|
const existing = config.repos.find(r => r.name === name);
|
|
28
29
|
if (existing) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
ctx.logger.error(`Repository with name "${name}" already exists (${existing.url})`);
|
|
34
|
-
process.exitCode = 1;
|
|
30
|
+
renderer.error(makeError(ErrorCode.REPO_FETCH_FAILED, `Repository with name "${name}" already exists (${existing.url})`));
|
|
31
|
+
renderer.finish(false);
|
|
32
|
+
process.exitCode = exitCodeForError(ErrorCode.REPO_FETCH_FAILED);
|
|
35
33
|
return;
|
|
36
34
|
}
|
|
37
35
|
config.repos.push({ name, url });
|
|
38
36
|
await saveConfig(ctx.fs, configPath, config);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
ctx.logger.success(`Added repository "${name}" → ${url}`);
|
|
37
|
+
renderer.success(`Added repository "${name}" → ${url}`);
|
|
38
|
+
renderer.finish(true, { name, url });
|
|
44
39
|
});
|
|
45
40
|
repo
|
|
46
41
|
.command("remove <name>")
|
|
@@ -48,25 +43,23 @@ export function registerRepoCommand(program) {
|
|
|
48
43
|
.action(async (name) => {
|
|
49
44
|
const parentOpts = program.opts();
|
|
50
45
|
const ctx = createRealIOContext(parentOpts);
|
|
46
|
+
const { renderer } = ctx;
|
|
51
47
|
const configPath = parentOpts.config ?? getConfigPath();
|
|
52
48
|
const config = await loadConfig(ctx.fs, configPath);
|
|
53
49
|
const index = config.repos.findIndex(r => r.name === name);
|
|
54
50
|
if (index === -1) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
process.exitCode =
|
|
51
|
+
const repoNames = config.repos.map(r => r.name);
|
|
52
|
+
renderer.error(makeError(ErrorCode.REPO_FETCH_FAILED, `Repository "${name}" not found`, {
|
|
53
|
+
candidates: repoNames.length > 0 ? repoNames : undefined,
|
|
54
|
+
}));
|
|
55
|
+
renderer.finish(false);
|
|
56
|
+
process.exitCode = exitCodeForError(ErrorCode.REPO_FETCH_FAILED);
|
|
61
57
|
return;
|
|
62
58
|
}
|
|
63
59
|
config.repos.splice(index, 1);
|
|
64
60
|
await saveConfig(ctx.fs, configPath, config);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
ctx.logger.success(`Removed repository "${name}"`);
|
|
61
|
+
renderer.success(`Removed repository "${name}"`);
|
|
62
|
+
renderer.finish(true, { removed: name });
|
|
70
63
|
});
|
|
71
64
|
repo
|
|
72
65
|
.command("list")
|
|
@@ -74,20 +67,17 @@ export function registerRepoCommand(program) {
|
|
|
74
67
|
.action(async () => {
|
|
75
68
|
const parentOpts = program.opts();
|
|
76
69
|
const ctx = createRealIOContext(parentOpts);
|
|
70
|
+
const { renderer } = ctx;
|
|
77
71
|
const configPath = parentOpts.config ?? getConfigPath();
|
|
78
72
|
const config = await loadConfig(ctx.fs, configPath);
|
|
79
|
-
if (parentOpts.json) {
|
|
80
|
-
writeJson(jsonSuccess({ repos: config.repos.map(r => ({ name: r.name, url: r.url })) }));
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
73
|
if (config.repos.length === 0) {
|
|
84
|
-
|
|
74
|
+
renderer.text("No repositories configured");
|
|
75
|
+
renderer.finish(true, { repos: [] });
|
|
85
76
|
return;
|
|
86
77
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
78
|
+
renderer.heading(`Configured repositories (${config.repos.length})`);
|
|
79
|
+
renderer.table(["Name", "URL"], config.repos.map(r => [r.name, r.url]));
|
|
80
|
+
renderer.finish(true, { repos: config.repos.map(r => ({ name: r.name, url: r.url })) });
|
|
91
81
|
});
|
|
92
82
|
}
|
|
93
83
|
//# sourceMappingURL=repo.js.map
|