@nockdev/cli 1.0.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/CHANGELOG.md +31 -0
- package/README.md +85 -0
- package/bin/nock.js +17 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +149 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/plugins.d.ts +3 -0
- package/dist/core/plugins.d.ts.map +1 -0
- package/dist/core/plugins.js +90 -0
- package/dist/core/plugins.js.map +1 -0
- package/dist/core/telemetry.d.ts +2 -0
- package/dist/core/telemetry.d.ts.map +1 -0
- package/dist/core/telemetry.js +63 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/core/version.d.ts +4 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +23 -0
- package/dist/core/version.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/manager.d.ts +77 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +474 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/types.d.ts +131 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +4 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/utils/constants.d.ts +11 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +13 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/errors.d.ts +17 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +32 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/exit-codes.d.ts +22 -0
- package/dist/utils/exit-codes.d.ts.map +1 -0
- package/dist/utils/exit-codes.js +23 -0
- package/dist/utils/exit-codes.js.map +1 -0
- package/dist/utils/manifest-cache.d.ts +71 -0
- package/dist/utils/manifest-cache.d.ts.map +1 -0
- package/dist/utils/manifest-cache.js +154 -0
- package/dist/utils/manifest-cache.js.map +1 -0
- package/dist/utils/official-plugins.d.ts +13 -0
- package/dist/utils/official-plugins.d.ts.map +1 -0
- package/dist/utils/official-plugins.js +25 -0
- package/dist/utils/official-plugins.js.map +1 -0
- package/dist/utils/telemetry.d.ts +58 -0
- package/dist/utils/telemetry.d.ts.map +1 -0
- package/dist/utils/telemetry.js +191 -0
- package/dist/utils/telemetry.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
// packages/cli/src/plugins/manager.ts
|
|
2
|
+
// Plugin Manager v1.0.0
|
|
3
|
+
import * as fs from "node:fs";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
import { pathToFileURL } from "node:url";
|
|
6
|
+
import { homedir, platform } from "node:os";
|
|
7
|
+
import { execSync } from "node:child_process";
|
|
8
|
+
import pc from "picocolors";
|
|
9
|
+
import { CLI_VERSION, NOCK_DIR_NAME, PLUGINS_DIR_NAME, MANIFEST_FILE } from "../utils/constants.js";
|
|
10
|
+
export class PluginManager {
|
|
11
|
+
plugins = new Map();
|
|
12
|
+
linkedPlugins = new Map(); // topic -> path
|
|
13
|
+
nockDir;
|
|
14
|
+
pluginsDir;
|
|
15
|
+
manifestPath;
|
|
16
|
+
options;
|
|
17
|
+
constructor(options = {}) {
|
|
18
|
+
this.nockDir = path.join(homedir(), NOCK_DIR_NAME);
|
|
19
|
+
this.pluginsDir = options.pluginsDir || path.join(this.nockDir, PLUGINS_DIR_NAME);
|
|
20
|
+
this.manifestPath = path.join(this.nockDir, MANIFEST_FILE);
|
|
21
|
+
this.options = {
|
|
22
|
+
verbose: options.verbose || false,
|
|
23
|
+
quiet: options.quiet || false,
|
|
24
|
+
pluginsDir: this.pluginsDir,
|
|
25
|
+
};
|
|
26
|
+
this.ensureDirectories();
|
|
27
|
+
}
|
|
28
|
+
ensureDirectories() {
|
|
29
|
+
if (!fs.existsSync(this.nockDir)) {
|
|
30
|
+
fs.mkdirSync(this.nockDir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
if (!fs.existsSync(this.pluginsDir)) {
|
|
33
|
+
fs.mkdirSync(this.pluginsDir, { recursive: true });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Load all installed plugins
|
|
38
|
+
*/
|
|
39
|
+
async loadAll() {
|
|
40
|
+
const manifest = this.readManifest();
|
|
41
|
+
// Load installed plugins
|
|
42
|
+
for (const packageName of manifest.installed) {
|
|
43
|
+
try {
|
|
44
|
+
await this.load(packageName);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
if (!this.options.quiet) {
|
|
48
|
+
console.warn(pc.yellow(`⚠ Failed to load ${packageName}: ${error.message}`));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Load linked plugins (local dev)
|
|
53
|
+
for (const linkedPath of manifest.linked || []) {
|
|
54
|
+
try {
|
|
55
|
+
await this.loadFromPath(linkedPath);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (!this.options.quiet) {
|
|
59
|
+
console.warn(pc.yellow(`⚠ Failed to load linked ${linkedPath}: ${error.message}`));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (this.options.verbose && this.plugins.size > 0) {
|
|
64
|
+
console.log(pc.dim(`Loaded ${this.plugins.size} plugin(s)`));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Load a single plugin by package name
|
|
69
|
+
*/
|
|
70
|
+
async load(packageName) {
|
|
71
|
+
// Check node_modules in plugins directory
|
|
72
|
+
const pluginPath = path.join(this.pluginsDir, "node_modules", packageName);
|
|
73
|
+
if (!fs.existsSync(pluginPath)) {
|
|
74
|
+
throw new Error(`Plugin not installed: ${packageName}`);
|
|
75
|
+
}
|
|
76
|
+
// Get package.json to find main entry
|
|
77
|
+
const pkgJsonPath = path.join(pluginPath, "package.json");
|
|
78
|
+
if (!fs.existsSync(pkgJsonPath)) {
|
|
79
|
+
throw new Error(`Invalid plugin: missing package.json`);
|
|
80
|
+
}
|
|
81
|
+
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8"));
|
|
82
|
+
const mainEntry = pkgJson.main || "dist/index.js";
|
|
83
|
+
const entryPath = path.join(pluginPath, mainEntry);
|
|
84
|
+
if (!fs.existsSync(entryPath)) {
|
|
85
|
+
throw new Error(`Plugin entry not found: ${mainEntry}`);
|
|
86
|
+
}
|
|
87
|
+
// Dynamic import (ESM)
|
|
88
|
+
const fileUrl = pathToFileURL(entryPath).href;
|
|
89
|
+
const module = await import(fileUrl);
|
|
90
|
+
const plugin = module.default;
|
|
91
|
+
// Validate plugin structure
|
|
92
|
+
this.validate(plugin);
|
|
93
|
+
// Register by topic
|
|
94
|
+
this.plugins.set(plugin.topic, plugin);
|
|
95
|
+
// Initialize if hook exists
|
|
96
|
+
if (plugin.init) {
|
|
97
|
+
await plugin.init(this.createContext());
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Load plugin from absolute path (for linked plugins)
|
|
102
|
+
*/
|
|
103
|
+
async loadFromPath(pluginPath) {
|
|
104
|
+
if (!fs.existsSync(pluginPath)) {
|
|
105
|
+
throw new Error(`Plugin path not found: ${pluginPath}`);
|
|
106
|
+
}
|
|
107
|
+
const pkgJsonPath = path.join(pluginPath, "package.json");
|
|
108
|
+
if (!fs.existsSync(pkgJsonPath)) {
|
|
109
|
+
throw new Error(`Invalid plugin: missing package.json at ${pluginPath}`);
|
|
110
|
+
}
|
|
111
|
+
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8"));
|
|
112
|
+
const mainEntry = pkgJson.main || "dist/index.js";
|
|
113
|
+
const entryPath = path.join(pluginPath, mainEntry);
|
|
114
|
+
if (!fs.existsSync(entryPath)) {
|
|
115
|
+
throw new Error(`Plugin entry not found: ${mainEntry}`);
|
|
116
|
+
}
|
|
117
|
+
const fileUrl = pathToFileURL(entryPath).href;
|
|
118
|
+
const module = await import(fileUrl);
|
|
119
|
+
const plugin = module.default;
|
|
120
|
+
this.validate(plugin);
|
|
121
|
+
this.plugins.set(plugin.topic, plugin);
|
|
122
|
+
this.linkedPlugins.set(plugin.topic, pluginPath);
|
|
123
|
+
if (plugin.init) {
|
|
124
|
+
await plugin.init(this.createContext());
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Link a local plugin for development
|
|
129
|
+
*/
|
|
130
|
+
async link(pluginPath) {
|
|
131
|
+
const absolutePath = path.resolve(pluginPath);
|
|
132
|
+
if (!fs.existsSync(absolutePath)) {
|
|
133
|
+
throw new Error(`Path not found: ${absolutePath}`);
|
|
134
|
+
}
|
|
135
|
+
if (!this.options.quiet) {
|
|
136
|
+
console.log(pc.cyan(`🔗 Linking ${absolutePath}...`));
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
await this.loadFromPath(absolutePath);
|
|
140
|
+
// Update manifest
|
|
141
|
+
const manifest = this.readManifest();
|
|
142
|
+
if (!manifest.linked.includes(absolutePath)) {
|
|
143
|
+
manifest.linked.push(absolutePath);
|
|
144
|
+
manifest.lastUpdated = new Date().toISOString();
|
|
145
|
+
this.writeManifest(manifest);
|
|
146
|
+
}
|
|
147
|
+
const plugin = [...this.plugins.values()].find(p => this.linkedPlugins.get(p.topic) === absolutePath);
|
|
148
|
+
if (!this.options.quiet) {
|
|
149
|
+
console.log(pc.green(`✔ Linked ${plugin?.name || absolutePath}`));
|
|
150
|
+
if (plugin) {
|
|
151
|
+
console.log(pc.dim(` Topic: ${plugin.topic} | ${plugin.commands.length} commands`));
|
|
152
|
+
console.log(pc.dim(` Usage: nock ${plugin.topic} <command>`));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
throw new Error(`Failed to link plugin: ${error.message}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Unlink a local plugin
|
|
162
|
+
*/
|
|
163
|
+
async unlink(pluginPath) {
|
|
164
|
+
const absolutePath = path.resolve(pluginPath);
|
|
165
|
+
if (!this.options.quiet) {
|
|
166
|
+
console.log(pc.cyan(`🔗 Unlinking ${absolutePath}...`));
|
|
167
|
+
}
|
|
168
|
+
// Find plugin by linked path
|
|
169
|
+
const topic = [...this.linkedPlugins.entries()].find(([, p]) => p === absolutePath)?.[0];
|
|
170
|
+
if (topic) {
|
|
171
|
+
const plugin = this.plugins.get(topic);
|
|
172
|
+
if (plugin?.destroy) {
|
|
173
|
+
await plugin.destroy();
|
|
174
|
+
}
|
|
175
|
+
this.plugins.delete(topic);
|
|
176
|
+
this.linkedPlugins.delete(topic);
|
|
177
|
+
}
|
|
178
|
+
// Update manifest
|
|
179
|
+
const manifest = this.readManifest();
|
|
180
|
+
manifest.linked = manifest.linked.filter(p => p !== absolutePath);
|
|
181
|
+
manifest.lastUpdated = new Date().toISOString();
|
|
182
|
+
this.writeManifest(manifest);
|
|
183
|
+
if (!this.options.quiet) {
|
|
184
|
+
console.log(pc.green(`✔ Unlinked ${absolutePath}`));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Install plugin from npm
|
|
189
|
+
*/
|
|
190
|
+
async install(packageName) {
|
|
191
|
+
if (!this.options.quiet) {
|
|
192
|
+
console.log(pc.cyan(`📦 Installing ${packageName}...`));
|
|
193
|
+
}
|
|
194
|
+
try {
|
|
195
|
+
// Ensure package.json exists in plugins dir
|
|
196
|
+
const pkgJsonPath = path.join(this.pluginsDir, "package.json");
|
|
197
|
+
if (!fs.existsSync(pkgJsonPath)) {
|
|
198
|
+
fs.writeFileSync(pkgJsonPath, JSON.stringify({ private: true, type: "module" }, null, 2));
|
|
199
|
+
}
|
|
200
|
+
// Install via npm
|
|
201
|
+
execSync(`npm install ${packageName}`, {
|
|
202
|
+
cwd: this.pluginsDir,
|
|
203
|
+
stdio: this.options.verbose ? "inherit" : "pipe",
|
|
204
|
+
});
|
|
205
|
+
// Update manifest
|
|
206
|
+
const manifest = this.readManifest();
|
|
207
|
+
if (!manifest.installed.includes(packageName)) {
|
|
208
|
+
manifest.installed.push(packageName);
|
|
209
|
+
manifest.lastUpdated = new Date().toISOString();
|
|
210
|
+
this.writeManifest(manifest);
|
|
211
|
+
}
|
|
212
|
+
// Load the plugin
|
|
213
|
+
await this.load(packageName);
|
|
214
|
+
if (!this.options.quiet) {
|
|
215
|
+
const plugin = [...this.plugins.values()].find((p) => p.name === packageName);
|
|
216
|
+
console.log(pc.green(`✔ Installed ${packageName}`));
|
|
217
|
+
if (plugin) {
|
|
218
|
+
console.log(pc.dim(` Topic: ${plugin.topic} | ${plugin.commands.length} commands`));
|
|
219
|
+
console.log(pc.dim(` Usage: nock ${plugin.topic} <command>`));
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
throw new Error(`Failed to install ${packageName}: ${error.message}`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Remove plugin
|
|
229
|
+
*/
|
|
230
|
+
async remove(packageName) {
|
|
231
|
+
if (!this.options.quiet) {
|
|
232
|
+
console.log(pc.cyan(`🗑 Removing ${packageName}...`));
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
// Find plugin by name to get topic
|
|
236
|
+
const plugin = [...this.plugins.values()].find((p) => p.name === packageName);
|
|
237
|
+
// Call destroy hook if exists
|
|
238
|
+
if (plugin?.destroy) {
|
|
239
|
+
await plugin.destroy();
|
|
240
|
+
}
|
|
241
|
+
// Uninstall via npm
|
|
242
|
+
execSync(`npm uninstall ${packageName}`, {
|
|
243
|
+
cwd: this.pluginsDir,
|
|
244
|
+
stdio: this.options.verbose ? "inherit" : "pipe",
|
|
245
|
+
});
|
|
246
|
+
// Update manifest
|
|
247
|
+
const manifest = this.readManifest();
|
|
248
|
+
manifest.installed = manifest.installed.filter((p) => p !== packageName);
|
|
249
|
+
manifest.lastUpdated = new Date().toISOString();
|
|
250
|
+
this.writeManifest(manifest);
|
|
251
|
+
// Remove from memory
|
|
252
|
+
if (plugin) {
|
|
253
|
+
this.plugins.delete(plugin.topic);
|
|
254
|
+
}
|
|
255
|
+
if (!this.options.quiet) {
|
|
256
|
+
console.log(pc.green(`✔ Removed ${packageName}`));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
throw new Error(`Failed to remove ${packageName}: ${error.message}`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Update plugin(s)
|
|
265
|
+
*/
|
|
266
|
+
async update(packageName) {
|
|
267
|
+
const toUpdate = packageName
|
|
268
|
+
? [packageName]
|
|
269
|
+
: this.readManifest().installed;
|
|
270
|
+
for (const pkg of toUpdate) {
|
|
271
|
+
if (!this.options.quiet) {
|
|
272
|
+
console.log(pc.cyan(`⬆ Updating ${pkg}...`));
|
|
273
|
+
}
|
|
274
|
+
try {
|
|
275
|
+
execSync(`npm update ${pkg}`, {
|
|
276
|
+
cwd: this.pluginsDir,
|
|
277
|
+
stdio: this.options.verbose ? "inherit" : "pipe",
|
|
278
|
+
});
|
|
279
|
+
// Reload
|
|
280
|
+
await this.load(pkg);
|
|
281
|
+
if (!this.options.quiet) {
|
|
282
|
+
const plugin = [...this.plugins.values()].find((p) => p.name === pkg);
|
|
283
|
+
console.log(pc.green(`✔ Updated ${pkg} to ${plugin?.version || "latest"}`));
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
if (!this.options.quiet) {
|
|
288
|
+
console.warn(pc.yellow(`⚠ Failed to update ${pkg}: ${error.message}`));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Route command to plugin
|
|
295
|
+
*/
|
|
296
|
+
async route(topic, args, flags) {
|
|
297
|
+
const plugin = this.plugins.get(topic);
|
|
298
|
+
if (!plugin)
|
|
299
|
+
return false;
|
|
300
|
+
const [commandName, ...restArgs] = args;
|
|
301
|
+
// If no command, show plugin help
|
|
302
|
+
if (!commandName) {
|
|
303
|
+
this.showPluginHelp(plugin);
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
// Find command by name or alias
|
|
307
|
+
const command = plugin.commands.find((c) => c.name === commandName || c.aliases?.includes(commandName));
|
|
308
|
+
if (!command) {
|
|
309
|
+
// Enhanced error with suggestions
|
|
310
|
+
const available = plugin.commands.map(c => c.name);
|
|
311
|
+
const suggestion = this.findSimilar(commandName, available);
|
|
312
|
+
console.log(pc.red(`✖ Unknown command: ${topic} ${commandName}`));
|
|
313
|
+
if (suggestion) {
|
|
314
|
+
console.log(pc.yellow(` Did you mean: ${pc.cyan(`nock ${topic} ${suggestion}`)}?`));
|
|
315
|
+
}
|
|
316
|
+
console.log(pc.dim(`\n Run ${pc.cyan(`nock ${topic} --help`)} for available commands.`));
|
|
317
|
+
return true;
|
|
318
|
+
}
|
|
319
|
+
// Run prerun hooks
|
|
320
|
+
await this.runHook("prerun", { command, args: restArgs, flags });
|
|
321
|
+
// Execute
|
|
322
|
+
await command.run(restArgs, flags);
|
|
323
|
+
// Run postrun hooks
|
|
324
|
+
await this.runHook("postrun", { command, args: restArgs, flags });
|
|
325
|
+
return true;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* List installed plugins
|
|
329
|
+
*/
|
|
330
|
+
list() {
|
|
331
|
+
return Array.from(this.plugins.values()).map((p) => ({
|
|
332
|
+
name: p.name,
|
|
333
|
+
version: p.version,
|
|
334
|
+
topic: p.topic,
|
|
335
|
+
description: p.description,
|
|
336
|
+
commandCount: p.commands.length,
|
|
337
|
+
path: path.join(this.pluginsDir, "node_modules", p.name),
|
|
338
|
+
}));
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Get all commands from all plugins
|
|
342
|
+
*/
|
|
343
|
+
getAllCommands() {
|
|
344
|
+
return Array.from(this.plugins.values()).flatMap((p) => p.commands);
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Show help for all plugins
|
|
348
|
+
*/
|
|
349
|
+
showAllPluginsHelp() {
|
|
350
|
+
if (this.plugins.size === 0)
|
|
351
|
+
return;
|
|
352
|
+
console.log(pc.bold("\nInstalled Plugins:"));
|
|
353
|
+
for (const plugin of this.plugins.values()) {
|
|
354
|
+
console.log(` ${pc.green(plugin.topic)} (${plugin.name}@${plugin.version})`);
|
|
355
|
+
console.log(` ${plugin.description}`);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
showPluginHelp(plugin) {
|
|
359
|
+
console.log(`
|
|
360
|
+
${pc.cyan(plugin.name)} ${pc.dim(`v${plugin.version}`)}
|
|
361
|
+
${plugin.description}
|
|
362
|
+
|
|
363
|
+
${pc.bold("Commands:")}
|
|
364
|
+
${plugin.commands
|
|
365
|
+
.map((c) => ` ${pc.green(c.name)}${c.aliases?.length ? pc.dim(` (${c.aliases.join(", ")})`) : ""}
|
|
366
|
+
${c.description}`)
|
|
367
|
+
.join("\n")}
|
|
368
|
+
|
|
369
|
+
${pc.bold("Usage:")}
|
|
370
|
+
nock ${plugin.topic} <command> [options]
|
|
371
|
+
`);
|
|
372
|
+
}
|
|
373
|
+
validate(plugin) {
|
|
374
|
+
if (!plugin.name)
|
|
375
|
+
throw new Error("Invalid plugin: missing name");
|
|
376
|
+
if (!plugin.version)
|
|
377
|
+
throw new Error("Invalid plugin: missing version");
|
|
378
|
+
if (!plugin.topic)
|
|
379
|
+
throw new Error("Invalid plugin: missing topic");
|
|
380
|
+
if (!plugin.description)
|
|
381
|
+
throw new Error("Invalid plugin: missing description");
|
|
382
|
+
if (!plugin.commands || !Array.isArray(plugin.commands) || plugin.commands.length === 0) {
|
|
383
|
+
throw new Error("Invalid plugin: commands must be non-empty array");
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
createContext() {
|
|
387
|
+
return {
|
|
388
|
+
cliVersion: CLI_VERSION,
|
|
389
|
+
pluginsDir: this.pluginsDir,
|
|
390
|
+
projectRoot: process.cwd(),
|
|
391
|
+
verbose: this.options.verbose,
|
|
392
|
+
quiet: this.options.quiet,
|
|
393
|
+
homeDir: homedir(),
|
|
394
|
+
platform: platform(),
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
readManifest() {
|
|
398
|
+
if (!fs.existsSync(this.manifestPath)) {
|
|
399
|
+
return { installed: [], linked: [], lastUpdated: "" };
|
|
400
|
+
}
|
|
401
|
+
try {
|
|
402
|
+
const manifest = JSON.parse(fs.readFileSync(this.manifestPath, "utf-8"));
|
|
403
|
+
return { ...manifest, linked: manifest.linked || [] };
|
|
404
|
+
}
|
|
405
|
+
catch {
|
|
406
|
+
return { installed: [], linked: [], lastUpdated: "" };
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
writeManifest(manifest) {
|
|
410
|
+
fs.writeFileSync(this.manifestPath, JSON.stringify(manifest, null, 2));
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Run hooks of a specific type across all plugins
|
|
414
|
+
*/
|
|
415
|
+
async runHook(event, payload) {
|
|
416
|
+
for (const plugin of this.plugins.values()) {
|
|
417
|
+
if (!plugin.hooks)
|
|
418
|
+
continue;
|
|
419
|
+
const hooks = plugin.hooks
|
|
420
|
+
.filter(h => h.event === event)
|
|
421
|
+
.sort((a, b) => (a.priority || 100) - (b.priority || 100));
|
|
422
|
+
for (const hook of hooks) {
|
|
423
|
+
try {
|
|
424
|
+
await hook.handler(payload);
|
|
425
|
+
}
|
|
426
|
+
catch (error) {
|
|
427
|
+
if (!this.options.quiet) {
|
|
428
|
+
console.warn(pc.yellow(`⚠ Hook ${event} failed: ${error.message}`));
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Find similar command name for suggestions (Levenshtein distance)
|
|
436
|
+
*/
|
|
437
|
+
findSimilar(input, candidates) {
|
|
438
|
+
const threshold = 3; // Max edit distance
|
|
439
|
+
let best = null;
|
|
440
|
+
let bestDistance = Infinity;
|
|
441
|
+
for (const candidate of candidates) {
|
|
442
|
+
const distance = this.levenshtein(input.toLowerCase(), candidate.toLowerCase());
|
|
443
|
+
if (distance < bestDistance && distance <= threshold) {
|
|
444
|
+
bestDistance = distance;
|
|
445
|
+
best = candidate;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
return best;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Simple Levenshtein distance implementation
|
|
452
|
+
*/
|
|
453
|
+
levenshtein(a, b) {
|
|
454
|
+
const matrix = [];
|
|
455
|
+
for (let i = 0; i <= b.length; i++) {
|
|
456
|
+
matrix[i] = [i];
|
|
457
|
+
}
|
|
458
|
+
for (let j = 0; j <= a.length; j++) {
|
|
459
|
+
matrix[0][j] = j;
|
|
460
|
+
}
|
|
461
|
+
for (let i = 1; i <= b.length; i++) {
|
|
462
|
+
for (let j = 1; j <= a.length; j++) {
|
|
463
|
+
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
|
464
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return matrix[b.length][a.length];
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main plugin interface - all plugins must implement this
|
|
3
|
+
*/
|
|
4
|
+
export interface NockPlugin {
|
|
5
|
+
/** Package name (e.g., "@nockdev/awf") */
|
|
6
|
+
name: string;
|
|
7
|
+
/** Semantic version */
|
|
8
|
+
version: string;
|
|
9
|
+
/** Topic/namespace for commands (e.g., "awf") */
|
|
10
|
+
topic: string;
|
|
11
|
+
/** Short description */
|
|
12
|
+
description: string;
|
|
13
|
+
/** Commands provided by this plugin */
|
|
14
|
+
commands: PluginCommand[];
|
|
15
|
+
/** Lifecycle hooks (optional) */
|
|
16
|
+
hooks?: PluginHook[];
|
|
17
|
+
/** Plugin initialization (optional) */
|
|
18
|
+
init?(context: PluginContext): Promise<void>;
|
|
19
|
+
/** Plugin shutdown (optional) */
|
|
20
|
+
destroy?(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Command definition
|
|
24
|
+
*/
|
|
25
|
+
export interface PluginCommand {
|
|
26
|
+
/** Command name (e.g., "init") */
|
|
27
|
+
name: string;
|
|
28
|
+
/** Full command ID (e.g., "awf:init") */
|
|
29
|
+
id: string;
|
|
30
|
+
/** Description shown in help */
|
|
31
|
+
description: string;
|
|
32
|
+
/** Aliases (e.g., ["i"] for init) */
|
|
33
|
+
aliases?: string[];
|
|
34
|
+
/** Flag definitions */
|
|
35
|
+
flags?: Record<string, FlagDefinition>;
|
|
36
|
+
/** Arguments definition */
|
|
37
|
+
args?: ArgumentDefinition[];
|
|
38
|
+
/** Usage examples */
|
|
39
|
+
examples?: string[];
|
|
40
|
+
/** Execute the command */
|
|
41
|
+
run(args: string[], flags: Record<string, unknown>): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Flag definition for command options
|
|
45
|
+
*/
|
|
46
|
+
export interface FlagDefinition {
|
|
47
|
+
/** Value type */
|
|
48
|
+
type: "string" | "boolean" | "number";
|
|
49
|
+
/** Description for help text */
|
|
50
|
+
description: string;
|
|
51
|
+
/** Short alias (e.g., "v" for --verbose) */
|
|
52
|
+
alias?: string;
|
|
53
|
+
/** Default value */
|
|
54
|
+
default?: unknown;
|
|
55
|
+
/** Whether flag is required */
|
|
56
|
+
required?: boolean;
|
|
57
|
+
/** Valid choices for string type */
|
|
58
|
+
choices?: string[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Argument definition for positional args
|
|
62
|
+
*/
|
|
63
|
+
export interface ArgumentDefinition {
|
|
64
|
+
/** Argument name */
|
|
65
|
+
name: string;
|
|
66
|
+
/** Description for help text */
|
|
67
|
+
description: string;
|
|
68
|
+
/** Whether argument is required */
|
|
69
|
+
required?: boolean;
|
|
70
|
+
/** Whether multiple values are allowed */
|
|
71
|
+
multiple?: boolean;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Hook definition for plugin lifecycle events
|
|
75
|
+
*/
|
|
76
|
+
export interface PluginHook {
|
|
77
|
+
/** Event name (e.g., "cli:beforeRun") */
|
|
78
|
+
event: string;
|
|
79
|
+
/** Handler function */
|
|
80
|
+
handler: (payload: unknown) => Promise<void>;
|
|
81
|
+
/** Priority (lower = earlier) */
|
|
82
|
+
priority?: number;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Context passed to plugins during initialization
|
|
86
|
+
*/
|
|
87
|
+
export interface PluginContext {
|
|
88
|
+
/** CLI version */
|
|
89
|
+
cliVersion: string;
|
|
90
|
+
/** Plugins directory path */
|
|
91
|
+
pluginsDir: string;
|
|
92
|
+
/** Current working directory */
|
|
93
|
+
projectRoot: string;
|
|
94
|
+
/** Verbose mode enabled */
|
|
95
|
+
verbose: boolean;
|
|
96
|
+
/** Quiet mode enabled */
|
|
97
|
+
quiet: boolean;
|
|
98
|
+
/** User home directory */
|
|
99
|
+
homeDir: string;
|
|
100
|
+
/** OS platform */
|
|
101
|
+
platform: NodeJS.Platform;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Installed plugin metadata
|
|
105
|
+
*/
|
|
106
|
+
export interface InstalledPlugin {
|
|
107
|
+
/** Package name */
|
|
108
|
+
name: string;
|
|
109
|
+
/** Version */
|
|
110
|
+
version: string;
|
|
111
|
+
/** Topic/namespace */
|
|
112
|
+
topic: string;
|
|
113
|
+
/** Description */
|
|
114
|
+
description: string;
|
|
115
|
+
/** Number of commands */
|
|
116
|
+
commandCount: number;
|
|
117
|
+
/** Installation path */
|
|
118
|
+
path: string;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Plugin Manager options
|
|
122
|
+
*/
|
|
123
|
+
export interface PluginManagerOptions {
|
|
124
|
+
/** Enable verbose logging */
|
|
125
|
+
verbose?: boolean;
|
|
126
|
+
/** Suppress all output */
|
|
127
|
+
quiet?: boolean;
|
|
128
|
+
/** Custom plugins directory */
|
|
129
|
+
pluginsDir?: string;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** CLI version - SSoT */
|
|
2
|
+
export declare const CLI_VERSION = "1.0.0";
|
|
3
|
+
/** CLI name */
|
|
4
|
+
export declare const CLI_NAME = "@nockdev/cli";
|
|
5
|
+
/** Default plugins directory name */
|
|
6
|
+
export declare const PLUGINS_DIR_NAME = "plugins";
|
|
7
|
+
/** Manifest file name */
|
|
8
|
+
export declare const MANIFEST_FILE = "plugins.json";
|
|
9
|
+
/** NOCK home directory name */
|
|
10
|
+
export declare const NOCK_DIR_NAME = ".nock";
|
|
11
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAGA,yBAAyB;AACzB,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,eAAe;AACf,eAAO,MAAM,QAAQ,iBAAiB,CAAC;AAEvC,qCAAqC;AACrC,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C,yBAAyB;AACzB,eAAO,MAAM,aAAa,iBAAiB,CAAC;AAE5C,+BAA+B;AAC/B,eAAO,MAAM,aAAa,UAAU,CAAC"}
|