@mediaproc/cli 0.8.4 → 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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +25 -13
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +56 -131
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/help.js +1 -1
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/history.js +1 -1
- package/dist/commands/history.js.map +1 -1
- package/dist/commands/list.d.ts +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +3 -3
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/plugins.d.ts +1 -1
- package/dist/commands/plugins.d.ts.map +1 -1
- package/dist/commands/plugins.js +1 -1
- package/dist/commands/plugins.js.map +1 -1
- package/dist/commands/remove.d.ts +1 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +14 -47
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/update.d.ts +2 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +121 -142
- package/dist/commands/update.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/history-manager.d.ts.map +1 -0
- package/dist/{history-manager.js → utils/history-manager.js} +1 -1
- package/dist/utils/history-manager.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/package-manager.d.ts +37 -0
- package/dist/utils/package-manager.d.ts.map +1 -0
- package/dist/utils/package-manager.js +195 -0
- package/dist/utils/package-manager.js.map +1 -0
- package/dist/utils/plugin-helpers.d.ts +39 -0
- package/dist/utils/plugin-helpers.d.ts.map +1 -0
- package/dist/utils/plugin-helpers.js +156 -0
- package/dist/utils/plugin-helpers.js.map +1 -0
- package/dist/utils/plugins/api.d.ts +106 -0
- package/dist/utils/plugins/api.d.ts.map +1 -0
- package/dist/utils/plugins/api.js +20 -0
- package/dist/utils/plugins/api.js.map +1 -0
- package/dist/utils/plugins/index.d.ts +4 -0
- package/dist/utils/plugins/index.d.ts.map +1 -0
- package/dist/utils/plugins/index.js +7 -0
- package/dist/utils/plugins/index.js.map +1 -0
- package/dist/utils/plugins/manager.d.ts +88 -0
- package/dist/utils/plugins/manager.d.ts.map +1 -0
- package/dist/utils/plugins/manager.js +267 -0
- package/dist/utils/plugins/manager.js.map +1 -0
- package/dist/{plugin-registry.d.ts → utils/plugins/registry.d.ts} +22 -1
- package/dist/utils/plugins/registry.d.ts.map +1 -0
- package/dist/{plugin-registry.js → utils/plugins/registry.js} +105 -7
- package/dist/utils/plugins/registry.js.map +1 -0
- package/package.json +4 -18
- package/dist/commands/delete.d.ts +0 -7
- package/dist/commands/delete.d.ts.map +0 -1
- package/dist/commands/delete.js +0 -250
- package/dist/commands/delete.js.map +0 -1
- package/dist/commands/stats.d.ts +0 -3
- package/dist/commands/stats.d.ts.map +0 -1
- package/dist/commands/stats.js +0 -157
- package/dist/commands/stats.js.map +0 -1
- package/dist/history-manager.d.ts.map +0 -1
- package/dist/history-manager.js.map +0 -1
- package/dist/plugin-api.d.ts +0 -44
- package/dist/plugin-api.d.ts.map +0 -1
- package/dist/plugin-api.js +0 -2
- package/dist/plugin-api.js.map +0 -1
- package/dist/plugin-manager.d.ts +0 -42
- package/dist/plugin-manager.d.ts.map +0 -1
- package/dist/plugin-manager.js +0 -113
- package/dist/plugin-manager.js.map +0 -1
- package/dist/plugin-registry.d.ts.map +0 -1
- package/dist/plugin-registry.js.map +0 -1
- /package/dist/{history-manager.d.ts → utils/history-manager.d.ts} +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno';
|
|
2
|
+
/**
|
|
3
|
+
* Detect available package managers
|
|
4
|
+
* Checks in preferred order: pnpm > bun > yarn > npm > deno
|
|
5
|
+
* @returns Detected package manager, defaults to 'npm' if none found
|
|
6
|
+
*/
|
|
7
|
+
export declare function detectPackageManager(): Promise<PackageManager>;
|
|
8
|
+
/**
|
|
9
|
+
* Check if CLI is running from a global installation
|
|
10
|
+
*/
|
|
11
|
+
export declare function isGlobalInstall(): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* Check if a plugin is installed globally
|
|
14
|
+
* @param pluginName - Full plugin package name
|
|
15
|
+
* @returns true if plugin is installed globally, false otherwise
|
|
16
|
+
*/
|
|
17
|
+
export declare function isPluginGlobal(pluginName: string): Promise<boolean>;
|
|
18
|
+
/**
|
|
19
|
+
* Build package manager installation arguments
|
|
20
|
+
* @param packageManager - The package manager to use
|
|
21
|
+
* @param pluginNames - Plugin name(s) to install (string or array)
|
|
22
|
+
* @param options - Installation options
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildInstallArgs(packageManager: PackageManager, pluginNames: string | string[], options?: {
|
|
25
|
+
global?: boolean;
|
|
26
|
+
saveDev?: boolean;
|
|
27
|
+
}): string[];
|
|
28
|
+
/**
|
|
29
|
+
* Build package manager uninstall arguments
|
|
30
|
+
* @param packageManager - The package manager to use
|
|
31
|
+
* @param pluginNames - Plugin name(s) to uninstall (string or array)
|
|
32
|
+
* @param options - Uninstallation options
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildUninstallArgs(packageManager: PackageManager, pluginNames: string | string[], options?: {
|
|
35
|
+
global?: boolean;
|
|
36
|
+
}): string[];
|
|
37
|
+
//# sourceMappingURL=package-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAEtE;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC,CAwBpE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAqBxD;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqDzE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAC9B,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACd,GACL,MAAM,EAAE,CAkCV;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAC9B,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;CACb,GACL,MAAM,EAAE,CA8BV"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
/**
|
|
3
|
+
* Detect available package managers
|
|
4
|
+
* Checks in preferred order: pnpm > bun > yarn > npm > deno
|
|
5
|
+
* @returns Detected package manager, defaults to 'npm' if none found
|
|
6
|
+
*/
|
|
7
|
+
export async function detectPackageManager() {
|
|
8
|
+
const managers = ['pnpm', 'bun', 'yarn', 'npm', 'deno'];
|
|
9
|
+
for (const manager of managers) {
|
|
10
|
+
try {
|
|
11
|
+
// Set timeout to avoid hanging on slow systems
|
|
12
|
+
const { stdout } = await execa(manager, ['--version'], {
|
|
13
|
+
stdio: 'pipe',
|
|
14
|
+
timeout: 5000,
|
|
15
|
+
reject: false
|
|
16
|
+
});
|
|
17
|
+
// Verify we got valid output
|
|
18
|
+
if (stdout && stdout.trim()) {
|
|
19
|
+
return manager;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
// Continue to next manager if this one fails
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Always fallback to npm (should be available on most systems)
|
|
28
|
+
return 'npm';
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Check if CLI is running from a global installation
|
|
32
|
+
*/
|
|
33
|
+
export async function isGlobalInstall() {
|
|
34
|
+
const execPath = process.argv[1];
|
|
35
|
+
// Check common global paths
|
|
36
|
+
const globalPaths = [
|
|
37
|
+
'/usr/local',
|
|
38
|
+
'/usr/lib',
|
|
39
|
+
'/.nvm/',
|
|
40
|
+
'/.npm-global/',
|
|
41
|
+
'/.npm/',
|
|
42
|
+
'/AppData/Roaming/npm',
|
|
43
|
+
'/pnpm-global/',
|
|
44
|
+
'/.bun/install/global',
|
|
45
|
+
'/.yarn/global'
|
|
46
|
+
];
|
|
47
|
+
if (globalPaths.some(p => execPath.includes(p))) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Check if a plugin is installed globally
|
|
54
|
+
* @param pluginName - Full plugin package name
|
|
55
|
+
* @returns true if plugin is installed globally, false otherwise
|
|
56
|
+
*/
|
|
57
|
+
export async function isPluginGlobal(pluginName) {
|
|
58
|
+
if (!pluginName || typeof pluginName !== 'string') {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
const trimmed = pluginName.trim();
|
|
62
|
+
if (!trimmed) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
// Try npm list -g
|
|
66
|
+
try {
|
|
67
|
+
const { stdout } = await execa('npm', ['list', '-g', '--depth=0', trimmed], {
|
|
68
|
+
stdio: 'pipe',
|
|
69
|
+
reject: false,
|
|
70
|
+
timeout: 10000
|
|
71
|
+
});
|
|
72
|
+
if (stdout && stdout.includes(trimmed)) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Continue to next check
|
|
78
|
+
}
|
|
79
|
+
// Try pnpm list -g
|
|
80
|
+
try {
|
|
81
|
+
const { stdout } = await execa('pnpm', ['list', '-g', '--depth=0', trimmed], {
|
|
82
|
+
stdio: 'pipe',
|
|
83
|
+
reject: false,
|
|
84
|
+
timeout: 10000
|
|
85
|
+
});
|
|
86
|
+
if (stdout && stdout.includes(trimmed)) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Continue to next check
|
|
92
|
+
}
|
|
93
|
+
// Try yarn global list
|
|
94
|
+
try {
|
|
95
|
+
const { stdout } = await execa('yarn', ['global', 'list'], {
|
|
96
|
+
stdio: 'pipe',
|
|
97
|
+
reject: false,
|
|
98
|
+
timeout: 10000
|
|
99
|
+
});
|
|
100
|
+
if (stdout && stdout.includes(trimmed)) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// All checks failed
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Build package manager installation arguments
|
|
111
|
+
* @param packageManager - The package manager to use
|
|
112
|
+
* @param pluginNames - Plugin name(s) to install (string or array)
|
|
113
|
+
* @param options - Installation options
|
|
114
|
+
*/
|
|
115
|
+
export function buildInstallArgs(packageManager, pluginNames, options = {}) {
|
|
116
|
+
const args = [];
|
|
117
|
+
const names = Array.isArray(pluginNames) ? pluginNames : [pluginNames];
|
|
118
|
+
switch (packageManager) {
|
|
119
|
+
case 'pnpm':
|
|
120
|
+
args.push('add');
|
|
121
|
+
if (options.global)
|
|
122
|
+
args.push('-g');
|
|
123
|
+
else if (options.saveDev)
|
|
124
|
+
args.push('-D');
|
|
125
|
+
break;
|
|
126
|
+
case 'bun':
|
|
127
|
+
args.push('add');
|
|
128
|
+
if (options.global)
|
|
129
|
+
args.push('-g');
|
|
130
|
+
else if (options.saveDev)
|
|
131
|
+
args.push('-d');
|
|
132
|
+
break;
|
|
133
|
+
case 'yarn':
|
|
134
|
+
if (options.global) {
|
|
135
|
+
args.push('global', 'add');
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
args.push('add');
|
|
139
|
+
if (options.saveDev)
|
|
140
|
+
args.push('--dev');
|
|
141
|
+
}
|
|
142
|
+
break;
|
|
143
|
+
case 'deno':
|
|
144
|
+
// Deno doesn't need traditional installation
|
|
145
|
+
return [];
|
|
146
|
+
default: // npm
|
|
147
|
+
args.push('install');
|
|
148
|
+
if (options.global)
|
|
149
|
+
args.push('-g');
|
|
150
|
+
else if (options.saveDev)
|
|
151
|
+
args.push('--save-dev');
|
|
152
|
+
}
|
|
153
|
+
args.push(...names);
|
|
154
|
+
return args;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Build package manager uninstall arguments
|
|
158
|
+
* @param packageManager - The package manager to use
|
|
159
|
+
* @param pluginNames - Plugin name(s) to uninstall (string or array)
|
|
160
|
+
* @param options - Uninstallation options
|
|
161
|
+
*/
|
|
162
|
+
export function buildUninstallArgs(packageManager, pluginNames, options = {}) {
|
|
163
|
+
const args = [];
|
|
164
|
+
const names = Array.isArray(pluginNames) ? pluginNames : [pluginNames];
|
|
165
|
+
switch (packageManager) {
|
|
166
|
+
case 'pnpm':
|
|
167
|
+
args.push('remove');
|
|
168
|
+
if (options.global)
|
|
169
|
+
args.push('-g');
|
|
170
|
+
break;
|
|
171
|
+
case 'yarn':
|
|
172
|
+
if (options.global) {
|
|
173
|
+
args.push('global', 'remove');
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
args.push('remove');
|
|
177
|
+
}
|
|
178
|
+
break;
|
|
179
|
+
case 'bun':
|
|
180
|
+
args.push('remove');
|
|
181
|
+
if (options.global)
|
|
182
|
+
args.push('-g');
|
|
183
|
+
break;
|
|
184
|
+
case 'deno':
|
|
185
|
+
// Deno doesn't have traditional uninstall
|
|
186
|
+
return [];
|
|
187
|
+
default: // npm
|
|
188
|
+
args.push('uninstall');
|
|
189
|
+
if (options.global)
|
|
190
|
+
args.push('-g');
|
|
191
|
+
}
|
|
192
|
+
args.push(...names);
|
|
193
|
+
return args;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=package-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import type { PluginManager } from './plugins/manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* Verify plugin is installed and can be imported
|
|
5
|
+
* @param pluginName - Full plugin package name
|
|
6
|
+
* @param isGlobal - Optional flag to check global installation
|
|
7
|
+
*/
|
|
8
|
+
export declare function verifyPluginInstallation(pluginName: string, isGlobal?: boolean): Promise<boolean>;
|
|
9
|
+
/**
|
|
10
|
+
* Load plugin with error handling
|
|
11
|
+
* @param pluginName - Full plugin package name
|
|
12
|
+
* @param program - Commander program instance
|
|
13
|
+
* @param pluginManager - Plugin manager instance
|
|
14
|
+
*/
|
|
15
|
+
export declare function loadPluginSafe(pluginName: string, program: Command, pluginManager: PluginManager): Promise<{
|
|
16
|
+
success: boolean;
|
|
17
|
+
error?: string;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Check if plugin is already loaded
|
|
21
|
+
*/
|
|
22
|
+
export declare function isPluginLoaded(pluginName: string, pluginManager: PluginManager): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Format plugin name for display (remove @mediaproc/ prefix)
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatPluginName(pluginName: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve plugin command name (e.g., 'image' from '@mediaproc/image')
|
|
29
|
+
*/
|
|
30
|
+
export declare function getPluginCommand(pluginName: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Validate plugin name format
|
|
33
|
+
*/
|
|
34
|
+
export declare function isValidPluginName(pluginName: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Get plugin examples by package name
|
|
37
|
+
*/
|
|
38
|
+
export declare function getPluginExamples(packageName: string): string[];
|
|
39
|
+
//# sourceMappingURL=plugin-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/plugin-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,OAAO,CAAC,CAqBlB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB/C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAExF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAW7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CA0D/D"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify plugin is installed and can be imported
|
|
3
|
+
* @param pluginName - Full plugin package name
|
|
4
|
+
* @param isGlobal - Optional flag to check global installation
|
|
5
|
+
*/
|
|
6
|
+
export async function verifyPluginInstallation(pluginName, isGlobal) {
|
|
7
|
+
try {
|
|
8
|
+
// Try importing the plugin
|
|
9
|
+
await import(pluginName);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
catch (importError) {
|
|
13
|
+
// If import fails and we're checking global, verify via package manager
|
|
14
|
+
if (isGlobal !== undefined) {
|
|
15
|
+
try {
|
|
16
|
+
const { execa } = await import('execa');
|
|
17
|
+
const { stdout } = await execa('npm', ['list', '-g', '--depth=0', pluginName], {
|
|
18
|
+
stdio: 'pipe',
|
|
19
|
+
reject: false
|
|
20
|
+
});
|
|
21
|
+
return stdout.includes(pluginName);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Load plugin with error handling
|
|
32
|
+
* @param pluginName - Full plugin package name
|
|
33
|
+
* @param program - Commander program instance
|
|
34
|
+
* @param pluginManager - Plugin manager instance
|
|
35
|
+
*/
|
|
36
|
+
export async function loadPluginSafe(pluginName, program, pluginManager) {
|
|
37
|
+
try {
|
|
38
|
+
// Check if already loaded
|
|
39
|
+
if (pluginManager.getPlugin(pluginName)) {
|
|
40
|
+
return { success: true };
|
|
41
|
+
}
|
|
42
|
+
// Attempt to load
|
|
43
|
+
await pluginManager.loadPlugin(pluginName, program);
|
|
44
|
+
return { success: true };
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
48
|
+
// Check if it's a "module not found" error
|
|
49
|
+
if (errorMessage.includes('Cannot find module') || errorMessage.includes('MODULE_NOT_FOUND')) {
|
|
50
|
+
return {
|
|
51
|
+
success: false,
|
|
52
|
+
error: 'Plugin not installed. Please install it first.'
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
// Return the actual error
|
|
56
|
+
return { success: false, error: errorMessage };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if plugin is already loaded
|
|
61
|
+
*/
|
|
62
|
+
export function isPluginLoaded(pluginName, pluginManager) {
|
|
63
|
+
return pluginManager.getPlugin(pluginName) !== undefined;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Format plugin name for display (remove @mediaproc/ prefix)
|
|
67
|
+
*/
|
|
68
|
+
export function formatPluginName(pluginName) {
|
|
69
|
+
return pluginName.replace('@mediaproc/', '').replace('mediaproc-', '');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Resolve plugin command name (e.g., 'image' from '@mediaproc/image')
|
|
73
|
+
*/
|
|
74
|
+
export function getPluginCommand(pluginName) {
|
|
75
|
+
if (pluginName.startsWith('@mediaproc/')) {
|
|
76
|
+
return pluginName.replace('@mediaproc/', '');
|
|
77
|
+
}
|
|
78
|
+
if (pluginName.startsWith('mediaproc-')) {
|
|
79
|
+
return pluginName.replace('mediaproc-', '');
|
|
80
|
+
}
|
|
81
|
+
return pluginName;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validate plugin name format
|
|
85
|
+
*/
|
|
86
|
+
export function isValidPluginName(pluginName) {
|
|
87
|
+
// Must be scoped (@mediaproc/), community (mediaproc-), or valid npm package name
|
|
88
|
+
const scopedRegex = /^@[\w-]+\/[\w-]+$/;
|
|
89
|
+
const communityRegex = /^mediaproc-[\w-]+$/;
|
|
90
|
+
const npmRegex = /^[\w-]+$/;
|
|
91
|
+
return (scopedRegex.test(pluginName) ||
|
|
92
|
+
communityRegex.test(pluginName) ||
|
|
93
|
+
npmRegex.test(pluginName));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get plugin examples by package name
|
|
97
|
+
*/
|
|
98
|
+
export function getPluginExamples(packageName) {
|
|
99
|
+
const examples = {
|
|
100
|
+
'@mediaproc/image': [
|
|
101
|
+
'resize photo.jpg -w 800',
|
|
102
|
+
'convert image.png --format webp',
|
|
103
|
+
'grayscale photo.jpg',
|
|
104
|
+
'compress image.png --quality 80'
|
|
105
|
+
],
|
|
106
|
+
'@mediaproc/video': [
|
|
107
|
+
'compress movie.mp4 --quality high',
|
|
108
|
+
'transcode video.avi --format mp4',
|
|
109
|
+
'trim video.mp4 -s 00:00:10 -e 00:01:00',
|
|
110
|
+
'resize video.mp4 -s 720p'
|
|
111
|
+
],
|
|
112
|
+
'@mediaproc/audio': [
|
|
113
|
+
'convert song.wav --format mp3',
|
|
114
|
+
'normalize audio.mp3',
|
|
115
|
+
'trim music.mp3 -s 30 -d 60',
|
|
116
|
+
'extract video.mp4 --format flac'
|
|
117
|
+
],
|
|
118
|
+
'@mediaproc/document': [
|
|
119
|
+
'compress report.pdf --quality ebook',
|
|
120
|
+
'ocr scanned.pdf',
|
|
121
|
+
'convert document.docx --format pdf'
|
|
122
|
+
],
|
|
123
|
+
'@mediaproc/animation': [
|
|
124
|
+
'gifify video.mp4 --fps 15',
|
|
125
|
+
'optimize animation.gif',
|
|
126
|
+
'convert video.mp4 --format webp'
|
|
127
|
+
],
|
|
128
|
+
'@mediaproc/3d': [
|
|
129
|
+
'optimize model.glb',
|
|
130
|
+
'compress textures/',
|
|
131
|
+
'convert model.obj --format glb'
|
|
132
|
+
],
|
|
133
|
+
'@mediaproc/metadata': [
|
|
134
|
+
'inspect video.mp4',
|
|
135
|
+
'strip-metadata image.jpg',
|
|
136
|
+
'extract audio.mp3'
|
|
137
|
+
],
|
|
138
|
+
'@mediaproc/stream': [
|
|
139
|
+
'pack video.mp4 --hls',
|
|
140
|
+
'encrypt video.mp4 --drm',
|
|
141
|
+
'manifest playlist.m3u8'
|
|
142
|
+
],
|
|
143
|
+
'@mediaproc/ai': [
|
|
144
|
+
'blur-faces video.mp4',
|
|
145
|
+
'caption audio.wav',
|
|
146
|
+
'detect-scenes video.mp4'
|
|
147
|
+
],
|
|
148
|
+
'@mediaproc/pipeline': [
|
|
149
|
+
'run workflow.yaml',
|
|
150
|
+
'validate pipeline.yaml',
|
|
151
|
+
'execute batch-process.yaml'
|
|
152
|
+
]
|
|
153
|
+
};
|
|
154
|
+
return examples[packageName] || [];
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=plugin-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-helpers.js","sourceRoot":"","sources":["../../src/utils/plugin-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Plugin API for mediaproc
|
|
4
|
+
*
|
|
5
|
+
* All plugins must export a `register` function that takes a Commander program
|
|
6
|
+
* and registers their commands.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import type { Command } from 'commander';
|
|
11
|
+
*
|
|
12
|
+
* export const name = '@mediaproc/plugin-name';
|
|
13
|
+
* export const version = '1.0.0';
|
|
14
|
+
*
|
|
15
|
+
* export function register(program: Command): void {
|
|
16
|
+
* const pluginCmd = program
|
|
17
|
+
* .command('plugin')
|
|
18
|
+
* .description('plugin description')
|
|
19
|
+
* .version(version, '-v, --version', 'Output the plugin version')
|
|
20
|
+
* .helpOption('-h, --help', 'Display help for plugin');
|
|
21
|
+
*
|
|
22
|
+
* pluginCmd
|
|
23
|
+
* .command('subcommand <parameters>')
|
|
24
|
+
* .option('--flags', 'Flag description')
|
|
25
|
+
* .action(async (input, options) => {
|
|
26
|
+
* // Implementation
|
|
27
|
+
* });
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export interface PluginAPI {
|
|
32
|
+
/**
|
|
33
|
+
* Plugin name (should match package name)
|
|
34
|
+
* - Official: @mediaproc/plugin-name
|
|
35
|
+
* - Community: mediaproc-plugin-name
|
|
36
|
+
* - Third-party: any valid npm package name
|
|
37
|
+
*/
|
|
38
|
+
name: string;
|
|
39
|
+
/**
|
|
40
|
+
* Plugin version (semver format)
|
|
41
|
+
*/
|
|
42
|
+
version: string;
|
|
43
|
+
/**
|
|
44
|
+
* Register commands with the CLI
|
|
45
|
+
* This function is called when the plugin is loaded
|
|
46
|
+
*/
|
|
47
|
+
register(program: Command): void | Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Optional: Indicates if this is a built-in/bundled plugin
|
|
50
|
+
*/
|
|
51
|
+
isBuiltIn?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Optional: Plugin description
|
|
54
|
+
*/
|
|
55
|
+
description?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Optional: Plugin author
|
|
58
|
+
*/
|
|
59
|
+
author?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Optional: System requirements (e.g., FFmpeg, Sharp)
|
|
62
|
+
*/
|
|
63
|
+
systemRequirements?: string[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Plugin metadata structure
|
|
67
|
+
*/
|
|
68
|
+
export interface PluginMetadata {
|
|
69
|
+
name: string;
|
|
70
|
+
version: string;
|
|
71
|
+
description?: string;
|
|
72
|
+
author?: string;
|
|
73
|
+
homepage?: string;
|
|
74
|
+
repository?: string;
|
|
75
|
+
license?: string;
|
|
76
|
+
keywords?: string[];
|
|
77
|
+
dependencies?: Record<string, string>;
|
|
78
|
+
peerDependencies?: Record<string, string>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Plugin load result
|
|
82
|
+
*/
|
|
83
|
+
export interface PluginLoadResult {
|
|
84
|
+
success: boolean;
|
|
85
|
+
plugin?: PluginAPI;
|
|
86
|
+
error?: string;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Plugin type enum
|
|
90
|
+
*/
|
|
91
|
+
export declare enum PluginType {
|
|
92
|
+
OFFICIAL = "official",
|
|
93
|
+
COMMUNITY = "community",
|
|
94
|
+
THIRD_PARTY = "third-party"
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Plugin status
|
|
98
|
+
*/
|
|
99
|
+
export declare enum PluginStatus {
|
|
100
|
+
LOADED = "loaded",
|
|
101
|
+
NOT_INSTALLED = "not-installed",
|
|
102
|
+
LOADING = "loading",
|
|
103
|
+
ERROR = "error"
|
|
104
|
+
}
|
|
105
|
+
export type { Command };
|
|
106
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/utils/plugins/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,oBAAY,UAAU;IACpB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,WAAW,gBAAgB;CAC5B;AAED;;GAEG;AACH,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,aAAa,kBAAkB;IAC/B,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,YAAY,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin type enum
|
|
3
|
+
*/
|
|
4
|
+
export var PluginType;
|
|
5
|
+
(function (PluginType) {
|
|
6
|
+
PluginType["OFFICIAL"] = "official";
|
|
7
|
+
PluginType["COMMUNITY"] = "community";
|
|
8
|
+
PluginType["THIRD_PARTY"] = "third-party";
|
|
9
|
+
})(PluginType || (PluginType = {}));
|
|
10
|
+
/**
|
|
11
|
+
* Plugin status
|
|
12
|
+
*/
|
|
13
|
+
export var PluginStatus;
|
|
14
|
+
(function (PluginStatus) {
|
|
15
|
+
PluginStatus["LOADED"] = "loaded";
|
|
16
|
+
PluginStatus["NOT_INSTALLED"] = "not-installed";
|
|
17
|
+
PluginStatus["LOADING"] = "loading";
|
|
18
|
+
PluginStatus["ERROR"] = "error";
|
|
19
|
+
})(PluginStatus || (PluginStatus = {}));
|
|
20
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/utils/plugins/api.ts"],"names":[],"mappings":"AAkGA;;GAEG;AACH,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,mCAAqB,CAAA;IACrB,qCAAuB,CAAA;IACvB,yCAA2B,CAAA;AAC7B,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,iCAAiB,CAAA;IACjB,+CAA+B,CAAA;IAC/B,mCAAmB,CAAA;IACnB,+BAAe,CAAA;AACjB,CAAC,EALW,YAAY,KAAZ,YAAY,QAKvB"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './api.js';
|
|
2
|
+
export { PluginManager, pluginManager, getPluginNameForCommand } from './manager.js';
|
|
3
|
+
export { resolvePluginPackage, detectPluginType, getPluginsByCategory, getAllPlugins, searchPlugins, getPluginEntry, isValidPlugin, getPluginCategory, PLUGIN_REGISTRY, type PluginRegistryEntry } from './registry.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/plugins/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AAGzB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAGrF,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,KAAK,mBAAmB,EACzB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Plugin API types and interfaces
|
|
2
|
+
export * from './api.js';
|
|
3
|
+
// Plugin Manager
|
|
4
|
+
export { PluginManager, pluginManager, getPluginNameForCommand } from './manager.js';
|
|
5
|
+
// Plugin Registry
|
|
6
|
+
export { resolvePluginPackage, detectPluginType, getPluginsByCategory, getAllPlugins, searchPlugins, getPluginEntry, isValidPlugin, getPluginCategory, PLUGIN_REGISTRY } from './registry.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/plugins/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,cAAc,UAAU,CAAC;AAEzB,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAErF,kBAAkB;AAClB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,eAAe,EAEhB,MAAM,eAAe,CAAC"}
|