@kamaras/venpm 0.0.1 → 0.1.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.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -0
  3. package/actions/publish-index/action.yml +50 -0
  4. package/dist/cli/config-cmd.d.ts +3 -0
  5. package/dist/cli/config-cmd.d.ts.map +1 -0
  6. package/dist/cli/config-cmd.js +100 -0
  7. package/dist/cli/config-cmd.js.map +1 -0
  8. package/dist/cli/context.d.ts +6 -0
  9. package/dist/cli/context.d.ts.map +1 -0
  10. package/dist/cli/context.js +149 -0
  11. package/dist/cli/context.js.map +1 -0
  12. package/dist/cli/create.d.ts +23 -0
  13. package/dist/cli/create.d.ts.map +1 -0
  14. package/dist/cli/create.js +238 -0
  15. package/dist/cli/create.js.map +1 -0
  16. package/dist/cli/doctor.d.ts +3 -0
  17. package/dist/cli/doctor.d.ts.map +1 -0
  18. package/dist/cli/doctor.js +67 -0
  19. package/dist/cli/doctor.js.map +1 -0
  20. package/dist/cli/info.d.ts +5 -0
  21. package/dist/cli/info.d.ts.map +1 -0
  22. package/dist/cli/info.js +105 -0
  23. package/dist/cli/info.js.map +1 -0
  24. package/dist/cli/install.d.ts +5 -0
  25. package/dist/cli/install.d.ts.map +1 -0
  26. package/dist/cli/install.js +252 -0
  27. package/dist/cli/install.js.map +1 -0
  28. package/dist/cli/list.d.ts +5 -0
  29. package/dist/cli/list.d.ts.map +1 -0
  30. package/dist/cli/list.js +41 -0
  31. package/dist/cli/list.js.map +1 -0
  32. package/dist/cli/rebuild.d.ts +3 -0
  33. package/dist/cli/rebuild.d.ts.map +1 -0
  34. package/dist/cli/rebuild.js +74 -0
  35. package/dist/cli/rebuild.js.map +1 -0
  36. package/dist/cli/repo.d.ts +3 -0
  37. package/dist/cli/repo.d.ts.map +1 -0
  38. package/dist/cli/repo.js +93 -0
  39. package/dist/cli/repo.js.map +1 -0
  40. package/dist/cli/search.d.ts +5 -0
  41. package/dist/cli/search.d.ts.map +1 -0
  42. package/dist/cli/search.js +50 -0
  43. package/dist/cli/search.js.map +1 -0
  44. package/dist/cli/uninstall.d.ts +5 -0
  45. package/dist/cli/uninstall.d.ts.map +1 -0
  46. package/dist/cli/uninstall.js +69 -0
  47. package/dist/cli/uninstall.js.map +1 -0
  48. package/dist/cli/update.d.ts +5 -0
  49. package/dist/cli/update.d.ts.map +1 -0
  50. package/dist/cli/update.js +161 -0
  51. package/dist/cli/update.js.map +1 -0
  52. package/dist/cli/validate.d.ts +3 -0
  53. package/dist/cli/validate.d.ts.map +1 -0
  54. package/dist/cli/validate.js +99 -0
  55. package/dist/cli/validate.js.map +1 -0
  56. package/dist/core/builder.d.ts +31 -0
  57. package/dist/core/builder.d.ts.map +1 -0
  58. package/dist/core/builder.js +65 -0
  59. package/dist/core/builder.js.map +1 -0
  60. package/dist/core/cache.d.ts +17 -0
  61. package/dist/core/cache.d.ts.map +1 -0
  62. package/dist/core/cache.js +36 -0
  63. package/dist/core/cache.js.map +1 -0
  64. package/dist/core/config.d.ts +7 -0
  65. package/dist/core/config.d.ts.map +1 -0
  66. package/dist/core/config.js +32 -0
  67. package/dist/core/config.js.map +1 -0
  68. package/dist/core/detect.d.ts +28 -0
  69. package/dist/core/detect.d.ts.map +1 -0
  70. package/dist/core/detect.js +100 -0
  71. package/dist/core/detect.js.map +1 -0
  72. package/dist/core/fetcher.d.ts +21 -0
  73. package/dist/core/fetcher.d.ts.map +1 -0
  74. package/dist/core/fetcher.js +92 -0
  75. package/dist/core/fetcher.js.map +1 -0
  76. package/dist/core/json.d.ts +9 -0
  77. package/dist/core/json.d.ts.map +1 -0
  78. package/dist/core/json.js +10 -0
  79. package/dist/core/json.js.map +1 -0
  80. package/dist/core/lockfile.d.ts +9 -0
  81. package/dist/core/lockfile.d.ts.map +1 -0
  82. package/dist/core/lockfile.js +30 -0
  83. package/dist/core/lockfile.js.map +1 -0
  84. package/dist/core/log.d.ts +8 -0
  85. package/dist/core/log.d.ts.map +1 -0
  86. package/dist/core/log.js +24 -0
  87. package/dist/core/log.js.map +1 -0
  88. package/dist/core/paths.d.ts +4 -0
  89. package/dist/core/paths.d.ts.map +1 -0
  90. package/dist/core/paths.js +33 -0
  91. package/dist/core/paths.js.map +1 -0
  92. package/dist/core/prompt.d.ts +5 -0
  93. package/dist/core/prompt.d.ts.map +1 -0
  94. package/dist/core/prompt.js +67 -0
  95. package/dist/core/prompt.js.map +1 -0
  96. package/dist/core/registry.d.ts +52 -0
  97. package/dist/core/registry.d.ts.map +1 -0
  98. package/dist/core/registry.js +134 -0
  99. package/dist/core/registry.js.map +1 -0
  100. package/dist/core/resolver.d.ts +47 -0
  101. package/dist/core/resolver.d.ts.map +1 -0
  102. package/dist/core/resolver.js +153 -0
  103. package/dist/core/resolver.js.map +1 -0
  104. package/dist/core/schema.d.ts +8 -0
  105. package/dist/core/schema.d.ts.map +1 -0
  106. package/dist/core/schema.js +47 -0
  107. package/dist/core/schema.js.map +1 -0
  108. package/dist/core/types.d.ts +206 -0
  109. package/dist/core/types.d.ts.map +1 -0
  110. package/dist/core/types.js +3 -0
  111. package/dist/core/types.js.map +1 -0
  112. package/dist/index.d.ts +3 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +37 -0
  115. package/dist/index.js.map +1 -0
  116. package/package.json +42 -6
  117. package/schemas/v1/config.schema.json +53 -0
  118. package/schemas/v1/lockfile.schema.json +43 -0
  119. package/schemas/v1/plugins.schema.json +69 -0
@@ -0,0 +1,238 @@
1
+ import { join, dirname, basename } from "node:path";
2
+ import { jsonSuccess, jsonError, writeJson } from "../core/json.js";
3
+ import { createRealIOContext } from "./context.js";
4
+ // ─── Ancestor index walking ───────────────────────────────────────────────────
5
+ /**
6
+ * Walk up ancestor directories from startPath looking for a plugins.json whose
7
+ * $schema contains "venpm". Returns { path, data } if found, null otherwise.
8
+ */
9
+ export async function findAncestorIndex(fs, startPath) {
10
+ let dir = startPath;
11
+ while (true) {
12
+ const candidate = join(dir, "plugins.json");
13
+ if (await fs.exists(candidate)) {
14
+ try {
15
+ const raw = await fs.readFile(candidate, "utf8");
16
+ const parsed = JSON.parse(raw);
17
+ if (typeof parsed.$schema === "string" && parsed.$schema.includes("venpm")) {
18
+ return { path: candidate, data: parsed };
19
+ }
20
+ }
21
+ catch {
22
+ // ignore parse errors — keep walking up
23
+ }
24
+ }
25
+ const parent = dirname(dir);
26
+ if (parent === dir)
27
+ break; // reached filesystem root
28
+ dir = parent;
29
+ }
30
+ return null;
31
+ }
32
+ // ─── Mode Detection ───────────────────────────────────────────────────────────
33
+ /**
34
+ * Walk up ancestor directories from targetPath looking for a venpm plugins.json.
35
+ * Returns "plugin" if found, "repo" otherwise.
36
+ */
37
+ export async function detectCreateMode(fs, targetPath) {
38
+ const ancestor = await findAncestorIndex(fs, targetPath);
39
+ return ancestor ? "plugin" : "repo";
40
+ }
41
+ // ─── Scaffold helpers ─────────────────────────────────────────────────────────
42
+ const PLUGINS_JSON_SCHEMA = "https://venpm.dev/schemas/v1/plugins.json";
43
+ async function scaffoldRepo(ctx, targetPath) {
44
+ const createdFiles = [];
45
+ const name = basename(targetPath).replace(/[^a-zA-Z0-9_-]/g, "-");
46
+ // Create directory structure
47
+ await ctx.fs.mkdir(targetPath, { recursive: true });
48
+ await ctx.fs.mkdir(join(targetPath, "plugins"), { recursive: true });
49
+ await ctx.fs.mkdir(join(targetPath, ".github", "workflows"), { recursive: true });
50
+ // plugins.json
51
+ const pluginsJson = {
52
+ $schema: PLUGINS_JSON_SCHEMA,
53
+ name,
54
+ description: `${name} plugin repository`,
55
+ plugins: {},
56
+ };
57
+ await ctx.fs.writeFile(join(targetPath, "plugins.json"), JSON.stringify(pluginsJson, null, 2) + "\n");
58
+ createdFiles.push("plugins.json");
59
+ ctx.logger.success(`Created plugins.json`);
60
+ // .github/workflows/publish.yml
61
+ const publishYml = [
62
+ "name: Publish",
63
+ "",
64
+ "on:",
65
+ " push:",
66
+ " branches: [main, master]",
67
+ " workflow_dispatch:",
68
+ "",
69
+ "jobs:",
70
+ " publish:",
71
+ " runs-on: ubuntu-latest",
72
+ " steps:",
73
+ " - uses: actions/checkout@v4",
74
+ " - uses: actions/setup-node@v4",
75
+ " with:",
76
+ " node-version: '20'",
77
+ " - name: Validate plugins.json",
78
+ " run: npx venpm validate plugins.json",
79
+ "",
80
+ ].join("\n");
81
+ await ctx.fs.writeFile(join(targetPath, ".github", "workflows", "publish.yml"), publishYml);
82
+ createdFiles.push(".github/workflows/publish.yml");
83
+ ctx.logger.success(`Created .github/workflows/publish.yml`);
84
+ // README.md
85
+ const readme = [
86
+ `# ${name}`,
87
+ "",
88
+ "A venpm plugin repository.",
89
+ "",
90
+ "## Install",
91
+ "",
92
+ "```bash",
93
+ `venpm repo add ${name} <url-to-your-plugins.json>`,
94
+ "venpm install <PluginName>",
95
+ "```",
96
+ "",
97
+ "## Adding plugins",
98
+ "",
99
+ "```bash",
100
+ "venpm create plugins/<PluginName>",
101
+ "```",
102
+ "",
103
+ ].join("\n");
104
+ await ctx.fs.writeFile(join(targetPath, "README.md"), readme);
105
+ createdFiles.push("README.md");
106
+ ctx.logger.success(`Created README.md`);
107
+ ctx.logger.info(`Repo scaffold complete at ${targetPath}`);
108
+ return createdFiles;
109
+ }
110
+ async function scaffoldPlugin(ctx, targetPath, options, ancestorPluginsJson) {
111
+ const createdFiles = [];
112
+ const pluginName = basename(targetPath);
113
+ const ext = options.tsx ? "tsx" : "ts";
114
+ await ctx.fs.mkdir(targetPath, { recursive: true });
115
+ // index.ts / index.tsx
116
+ const indexContent = options.tsx
117
+ ? [
118
+ `import definePlugin from "@utils/types";`,
119
+ ``,
120
+ `export default definePlugin({`,
121
+ ` name: "${pluginName}",`,
122
+ ` description: "TODO: describe ${pluginName}",`,
123
+ ` authors: [{ name: "kamaras", id: "0" }],`,
124
+ ``,
125
+ ` start() {},`,
126
+ ` stop() {},`,
127
+ `});`,
128
+ ``,
129
+ ].join("\n")
130
+ : [
131
+ `import definePlugin from "@utils/types";`,
132
+ ``,
133
+ `export default definePlugin({`,
134
+ ` name: "${pluginName}",`,
135
+ ` description: "TODO: describe ${pluginName}",`,
136
+ ` authors: [{ name: "kamaras", id: "0" }],`,
137
+ ``,
138
+ ` start() {},`,
139
+ ` stop() {},`,
140
+ `});`,
141
+ ``,
142
+ ].join("\n");
143
+ await ctx.fs.writeFile(join(targetPath, `index.${ext}`), indexContent);
144
+ createdFiles.push(`index.${ext}`);
145
+ ctx.logger.success(`Created index.${ext}`);
146
+ // Optional style.css
147
+ if (options.css) {
148
+ await ctx.fs.writeFile(join(targetPath, "style.css"), `/* ${pluginName} styles */\n`);
149
+ createdFiles.push("style.css");
150
+ ctx.logger.success(`Created style.css`);
151
+ }
152
+ // Optional native.ts
153
+ if (options.native) {
154
+ const nativeContent = [
155
+ `// native.ts — runs in Node.js (Electron main process)`,
156
+ `// Use this for fs, child_process, and other Node.js-only APIs.`,
157
+ ``,
158
+ ].join("\n");
159
+ await ctx.fs.writeFile(join(targetPath, "native.ts"), nativeContent);
160
+ createdFiles.push("native.ts");
161
+ ctx.logger.success(`Created native.ts`);
162
+ }
163
+ // Update ancestor plugins.json
164
+ try {
165
+ const raw = await ctx.fs.readFile(ancestorPluginsJson, "utf8");
166
+ const index = JSON.parse(raw);
167
+ if (!index.plugins[pluginName]) {
168
+ index.plugins[pluginName] = {
169
+ version: "0.1.0",
170
+ description: `TODO: describe ${pluginName}`,
171
+ authors: [{ name: "kamaras", id: "0" }],
172
+ source: { local: `./${pluginName}` },
173
+ };
174
+ await ctx.fs.writeFile(ancestorPluginsJson, JSON.stringify(index, null, 2) + "\n");
175
+ ctx.logger.success(`Added "${pluginName}" entry to plugins.json`);
176
+ }
177
+ else {
178
+ ctx.logger.warn(`"${pluginName}" already exists in plugins.json — skipping entry update`);
179
+ }
180
+ }
181
+ catch (err) {
182
+ ctx.logger.warn(`Could not update plugins.json: ${err}`);
183
+ }
184
+ ctx.logger.info(`Plugin scaffold complete at ${targetPath}`);
185
+ return createdFiles;
186
+ }
187
+ // ─── Main execute ─────────────────────────────────────────────────────────────
188
+ export async function executeCreate(ctx, targetPath, options) {
189
+ const ancestor = await findAncestorIndex(ctx.fs, targetPath);
190
+ let mode;
191
+ let files;
192
+ if (!ancestor) {
193
+ mode = "repo";
194
+ files = await scaffoldRepo(ctx, targetPath);
195
+ }
196
+ else {
197
+ mode = "plugin";
198
+ files = await scaffoldPlugin(ctx, targetPath, options, ancestor.path);
199
+ }
200
+ if (options.json) {
201
+ writeJson(jsonSuccess({ mode, path: targetPath, files }));
202
+ }
203
+ }
204
+ // ─── CLI Registration ─────────────────────────────────────────────────────────
205
+ export function registerCreateCommand(program) {
206
+ program
207
+ .command("create <path>")
208
+ .description("Scaffold a new plugin repo or plugin")
209
+ .option("--tsx", "Use .tsx instead of .ts")
210
+ .option("--css", "Add style.css")
211
+ .option("--native", "Add native.ts")
212
+ .action(async (targetPath, cmdOptions) => {
213
+ const parentOpts = program.opts();
214
+ const globalOptions = {
215
+ config: parentOpts.config,
216
+ verbose: parentOpts.verbose,
217
+ json: parentOpts.json,
218
+ };
219
+ const ctx = createRealIOContext({
220
+ ...globalOptions,
221
+ yes: parentOpts.yes,
222
+ });
223
+ const createOptions = { ...globalOptions, ...cmdOptions };
224
+ try {
225
+ await executeCreate(ctx, targetPath, createOptions);
226
+ }
227
+ catch (err) {
228
+ if (globalOptions.json) {
229
+ writeJson(jsonError(err.message));
230
+ }
231
+ else {
232
+ ctx.logger.error(err.message);
233
+ }
234
+ process.exitCode = 1;
235
+ }
236
+ });
237
+ }
238
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/cli/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerDoctorCommand(program: Command): void;
3
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+D5D"}
@@ -0,0 +1,67 @@
1
+ import { loadConfig } from "../core/config.js";
2
+ import { getConfigPath } from "../core/paths.js";
3
+ import { detectVencordPath, detectDiscordBinary, checkGitAvailable, checkPnpmAvailable, } from "../core/detect.js";
4
+ import { jsonSuccess, writeJson } from "../core/json.js";
5
+ import { createRealIOContext } from "./context.js";
6
+ import { createRequire } from "node:module";
7
+ const _require = createRequire(import.meta.url);
8
+ const { version: venpmVersion } = _require("../../package.json");
9
+ export function registerDoctorCommand(program) {
10
+ program
11
+ .command("doctor")
12
+ .description("Check venpm environment and configuration")
13
+ .action(async () => {
14
+ const globalOpts = program.opts();
15
+ const ctx = createRealIOContext(globalOpts);
16
+ const configPath = globalOpts.config ?? getConfigPath();
17
+ const config = await loadConfig(ctx.fs, configPath);
18
+ // Collect all check results
19
+ const gitOk = await checkGitAvailable(ctx.shell);
20
+ const pnpmOk = await checkPnpmAvailable(ctx.shell);
21
+ const configuredVencordPath = config.vencord.path;
22
+ const detectedVencordPath = configuredVencordPath ? null : await detectVencordPath(ctx.fs);
23
+ const vencordPath = configuredVencordPath ?? detectedVencordPath ?? null;
24
+ const configuredBinary = config.discord.binary;
25
+ const detectedBinary = configuredBinary ? null : await detectDiscordBinary(ctx.fs);
26
+ const discordBinary = configuredBinary ?? detectedBinary ?? null;
27
+ const repoCount = config.repos.length;
28
+ if (globalOpts.json) {
29
+ writeJson(jsonSuccess({
30
+ git: gitOk,
31
+ pnpm: pnpmOk,
32
+ vencordPath,
33
+ discordBinary,
34
+ repos: repoCount,
35
+ venpmVersion,
36
+ }));
37
+ return;
38
+ }
39
+ const ok = "✓";
40
+ const fail = "✗";
41
+ const warn = "~";
42
+ console.log(`${gitOk ? ok : fail} git: ${gitOk ? "available" : "not found"}`);
43
+ console.log(`${pnpmOk ? ok : fail} pnpm: ${pnpmOk ? "available" : "not found"}`);
44
+ if (configuredVencordPath) {
45
+ const exists = await ctx.fs.exists(configuredVencordPath);
46
+ console.log(`${exists ? ok : fail} Vencord path (config): ${configuredVencordPath}${exists ? "" : " (not found)"}`);
47
+ }
48
+ else if (detectedVencordPath) {
49
+ console.log(`${warn} Vencord path (auto-detected): ${detectedVencordPath}`);
50
+ }
51
+ else {
52
+ console.log(`${fail} Vencord path: not found (set vencord.path in config or $VENPM_VENCORD_PATH)`);
53
+ }
54
+ if (configuredBinary) {
55
+ const exists = await ctx.fs.exists(configuredBinary);
56
+ console.log(`${exists ? ok : fail} Discord binary (config): ${configuredBinary}${exists ? "" : " (not found)"}`);
57
+ }
58
+ else if (detectedBinary) {
59
+ console.log(`${warn} Discord binary (auto-detected): ${detectedBinary}`);
60
+ }
61
+ else {
62
+ console.log(`${fail} Discord binary: not found (set discord.binary in config)`);
63
+ }
64
+ console.log(`${repoCount > 0 ? ok : warn} Repositories: ${repoCount} configured`);
65
+ });
66
+ }
67
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from "commander";
2
+ import type { IOContext, GlobalOptions } from "../core/types.js";
3
+ export declare function executeInfo(ctx: IOContext, pluginName: string, options?: GlobalOptions): Promise<void>;
4
+ export declare function registerInfoCommand(program: Command): void;
5
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/cli/info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AASjE,wBAAsB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4FhH;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS1D"}
@@ -0,0 +1,105 @@
1
+ import { loadConfig } from "../core/config.js";
2
+ import { loadLockfile, getInstalled } from "../core/lockfile.js";
3
+ import { getConfigPath, getLockfilePath } from "../core/paths.js";
4
+ import { fetchAllIndexes, resolvePlugin } from "../core/registry.js";
5
+ import { loadCache, saveCache } from "../core/cache.js";
6
+ import { jsonSuccess, jsonError, writeJson } from "../core/json.js";
7
+ import { createRealIOContext } from "./context.js";
8
+ export async function executeInfo(ctx, pluginName, options = {}) {
9
+ const configPath = options.config ?? getConfigPath();
10
+ const [config, lockfile] = await Promise.all([
11
+ loadConfig(ctx.fs, configPath),
12
+ loadLockfile(ctx.fs, getLockfilePath()),
13
+ ]);
14
+ const cache = await loadCache(ctx.fs);
15
+ const { results: indexes, updatedCache } = await fetchAllIndexes(ctx.http, config.repos, { cache });
16
+ await saveCache(ctx.fs, updatedCache);
17
+ for (const fi of indexes) {
18
+ if (fi.error) {
19
+ ctx.logger.warn(`Failed to fetch index from "${fi.repoName}": ${fi.error}`);
20
+ }
21
+ }
22
+ const match = resolvePlugin(indexes, pluginName);
23
+ const installedInfo = getInstalled(lockfile, pluginName);
24
+ if (!match && !installedInfo) {
25
+ if (options.json) {
26
+ writeJson(jsonError(`Plugin "${pluginName}" not found in any index and is not installed`));
27
+ return;
28
+ }
29
+ ctx.logger.error(`Plugin "${pluginName}" not found in any index and is not installed`);
30
+ return;
31
+ }
32
+ if (options.json) {
33
+ writeJson(jsonSuccess({
34
+ name: pluginName,
35
+ version: match?.entry.version ?? null,
36
+ description: match?.entry.description ?? null,
37
+ authors: match?.entry.authors ?? [],
38
+ repo: match?.repoName ?? null,
39
+ dependencies: match?.entry.dependencies ?? [],
40
+ optionalDependencies: match?.entry.optionalDependencies ?? [],
41
+ versions: match?.entry.versions ? Object.keys(match.entry.versions) : [],
42
+ installed: !!installedInfo,
43
+ installedVersion: installedInfo?.version ?? null,
44
+ }));
45
+ return;
46
+ }
47
+ ctx.logger.info(`Plugin: ${pluginName}\n`);
48
+ if (match) {
49
+ const { entry, repoName } = match;
50
+ ctx.logger.info(` Repository: ${repoName}`);
51
+ ctx.logger.info(` Version: ${entry.version}`);
52
+ if (entry.description) {
53
+ ctx.logger.info(` Description: ${entry.description}`);
54
+ }
55
+ if (entry.authors && entry.authors.length > 0) {
56
+ const authorList = entry.authors.map(a => a.name).join(", ");
57
+ ctx.logger.info(` Authors: ${authorList}`);
58
+ }
59
+ if (entry.license) {
60
+ ctx.logger.info(` License: ${entry.license}`);
61
+ }
62
+ if (entry.dependencies && entry.dependencies.length > 0) {
63
+ ctx.logger.info(` Depends on: ${entry.dependencies.join(", ")}`);
64
+ }
65
+ if (entry.discord) {
66
+ ctx.logger.info(` Discord: ${entry.discord}`);
67
+ }
68
+ if (entry.vencord) {
69
+ ctx.logger.info(` Vencord: ${entry.vencord}`);
70
+ }
71
+ const sourceKeys = Object.keys(entry.source).filter(k => entry.source[k]);
72
+ ctx.logger.info(` Source: ${sourceKeys.join(", ")}`);
73
+ if (entry.versions) {
74
+ const versionList = Object.keys(entry.versions).join(", ");
75
+ ctx.logger.info(` Versions: ${versionList}`);
76
+ }
77
+ }
78
+ else {
79
+ ctx.logger.warn(` (Plugin not found in any currently reachable index)`);
80
+ }
81
+ if (installedInfo) {
82
+ ctx.logger.info(`\n Installed:`);
83
+ ctx.logger.info(` Version: ${installedInfo.version}`);
84
+ ctx.logger.info(` Method: ${installedInfo.method}`);
85
+ ctx.logger.info(` Pinned: ${installedInfo.pinned ? "yes" : "no"}`);
86
+ ctx.logger.info(` Installed at: ${installedInfo.installed_at}`);
87
+ if (installedInfo.git_ref) {
88
+ ctx.logger.info(` Git ref: ${installedInfo.git_ref}`);
89
+ }
90
+ }
91
+ else {
92
+ ctx.logger.info(`\n Not installed.`);
93
+ }
94
+ }
95
+ export function registerInfoCommand(program) {
96
+ program
97
+ .command("info <plugin>")
98
+ .description("Show details about a plugin")
99
+ .action(async (plugin) => {
100
+ const globalOpts = program.opts();
101
+ const ctx = createRealIOContext(globalOpts);
102
+ await executeInfo(ctx, plugin, globalOpts);
103
+ });
104
+ }
105
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/cli/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from "commander";
2
+ import type { IOContext, InstallOptions } from "../core/types.js";
3
+ export declare function executeInstall(ctx: IOContext, pluginName: string, options: InstallOptions): Promise<void>;
4
+ export declare function registerInstallCommand(program: Command): void;
5
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAe,MAAM,kBAAkB,CAAC;AAe/E,wBAAsB,cAAc,CAChC,GAAG,EAAE,SAAS,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CA0Mf;AA+BD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B7D"}