@mediaproc/cli 0.2.0 → 0.4.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 +204 -18
- package/dist/__tests__/plugin-manager.test.d.ts +2 -0
- package/dist/__tests__/plugin-manager.test.d.ts.map +1 -0
- package/dist/__tests__/plugin-manager.test.js +7 -0
- package/dist/__tests__/plugin-manager.test.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +13 -12
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +108 -39
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +70 -27
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/convert.d.ts +3 -2
- package/dist/commands/convert.d.ts.map +1 -1
- package/dist/commands/convert.js +59 -37
- package/dist/commands/convert.js.map +1 -1
- package/dist/commands/help.js +2 -2
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/info.d.ts +3 -2
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +17 -3
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +25 -47
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +60 -13
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/optimize.d.ts +3 -2
- package/dist/commands/optimize.d.ts.map +1 -1
- package/dist/commands/optimize.js +25 -19
- package/dist/commands/optimize.js.map +1 -1
- package/dist/commands/plugins.d.ts +4 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +79 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +73 -10
- package/dist/commands/remove.js.map +1 -1
- package/dist/config-manager.d.ts +110 -0
- package/dist/config-manager.d.ts.map +1 -0
- package/dist/config-manager.js +201 -0
- package/dist/config-manager.js.map +1 -0
- package/dist/plugin-manager.d.ts +25 -10
- package/dist/plugin-manager.d.ts.map +1 -1
- package/dist/plugin-manager.js +51 -49
- package/dist/plugin-manager.js.map +1 -1
- package/dist/plugin-registry.d.ts +9 -0
- package/dist/plugin-registry.d.ts.map +1 -1
- package/dist/plugin-registry.js +41 -6
- package/dist/plugin-registry.js.map +1 -1
- package/package.json +10 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../src/config-manager.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE;QACP,CAAC,MAAM,EAAE,MAAM,GAAG;YACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;SACtB,CAAC;KACL,CAAC;IACF,SAAS,CAAC,EAAE;QACR,CAAC,IAAI,EAAE,MAAM,GAAG;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,KAAK,CAAC;gBACT,MAAM,EAAE,MAAM,CAAC;gBACf,OAAO,EAAE,MAAM,CAAC;gBAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;aACjC,CAAC,CAAC;SACN,CAAC;KACL,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAiC;IACnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAiD;IAEpF,OAAO,CAAC,MAAM,CAAgC;IAE9C;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,MAAM;IAI7B;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,MAAM;IAI9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,IAAI,IAAI,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,IAAI,IAAI,IAAI;IAeZ;;OAEG;IACH,GAAG,IAAI,eAAe;IAOtB;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAK9C;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAK3C;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQ5C;;OAEG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAO/C;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQzC;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAM5C;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAK/B;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAK5B;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAgBlC;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAe1B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,MAAM,IAAI,OAAO;CAGpB"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
/**
|
|
5
|
+
* Configuration manager for MediaProc
|
|
6
|
+
* Handles reading/writing config from ~/.mediaproc/config.json
|
|
7
|
+
*/
|
|
8
|
+
export class ConfigManager {
|
|
9
|
+
static CONFIG_DIR = join(homedir(), '.mediaproc');
|
|
10
|
+
static CONFIG_FILE = join(ConfigManager.CONFIG_DIR, 'config.json');
|
|
11
|
+
config = null;
|
|
12
|
+
/**
|
|
13
|
+
* Get the config directory path
|
|
14
|
+
*/
|
|
15
|
+
static getConfigDir() {
|
|
16
|
+
return ConfigManager.CONFIG_DIR;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get the config file path
|
|
20
|
+
*/
|
|
21
|
+
static getConfigPath() {
|
|
22
|
+
return ConfigManager.CONFIG_FILE;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Ensure config directory exists
|
|
26
|
+
*/
|
|
27
|
+
ensureConfigDir() {
|
|
28
|
+
if (!existsSync(ConfigManager.CONFIG_DIR)) {
|
|
29
|
+
mkdirSync(ConfigManager.CONFIG_DIR, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Load config from file
|
|
34
|
+
*/
|
|
35
|
+
load() {
|
|
36
|
+
if (this.config) {
|
|
37
|
+
return this.config;
|
|
38
|
+
}
|
|
39
|
+
this.ensureConfigDir();
|
|
40
|
+
if (!existsSync(ConfigManager.CONFIG_FILE)) {
|
|
41
|
+
// Create default config
|
|
42
|
+
this.config = this.createDefaultConfig();
|
|
43
|
+
this.save();
|
|
44
|
+
return this.config;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const data = readFileSync(ConfigManager.CONFIG_FILE, 'utf-8');
|
|
48
|
+
this.config = JSON.parse(data);
|
|
49
|
+
return this.config;
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.error('Failed to parse config file, creating new one');
|
|
53
|
+
this.config = this.createDefaultConfig();
|
|
54
|
+
this.save();
|
|
55
|
+
return this.config;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create default config
|
|
60
|
+
*/
|
|
61
|
+
createDefaultConfig() {
|
|
62
|
+
return {
|
|
63
|
+
version: '1.0',
|
|
64
|
+
installedPlugins: [],
|
|
65
|
+
loadedPlugins: [],
|
|
66
|
+
defaults: {},
|
|
67
|
+
pipelines: {},
|
|
68
|
+
lastUpdated: new Date().toISOString(),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Save config to file
|
|
73
|
+
*/
|
|
74
|
+
save() {
|
|
75
|
+
if (!this.config) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
this.ensureConfigDir();
|
|
79
|
+
this.config.lastUpdated = new Date().toISOString();
|
|
80
|
+
writeFileSync(ConfigManager.CONFIG_FILE, JSON.stringify(this.config, null, 2), 'utf-8');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get current config
|
|
84
|
+
*/
|
|
85
|
+
get() {
|
|
86
|
+
if (!this.config) {
|
|
87
|
+
return this.load();
|
|
88
|
+
}
|
|
89
|
+
return this.config;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if a plugin is installed
|
|
93
|
+
*/
|
|
94
|
+
isPluginInstalled(pluginName) {
|
|
95
|
+
const config = this.get();
|
|
96
|
+
return config.installedPlugins.includes(pluginName);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if a plugin is loaded
|
|
100
|
+
*/
|
|
101
|
+
isPluginLoaded(pluginName) {
|
|
102
|
+
const config = this.get();
|
|
103
|
+
return config.loadedPlugins.includes(pluginName);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Add plugin to installed list
|
|
107
|
+
*/
|
|
108
|
+
addInstalledPlugin(pluginName) {
|
|
109
|
+
const config = this.get();
|
|
110
|
+
if (!config.installedPlugins.includes(pluginName)) {
|
|
111
|
+
config.installedPlugins.push(pluginName);
|
|
112
|
+
this.save();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Remove plugin from installed list
|
|
117
|
+
*/
|
|
118
|
+
removeInstalledPlugin(pluginName) {
|
|
119
|
+
const config = this.get();
|
|
120
|
+
config.installedPlugins = config.installedPlugins.filter(p => p !== pluginName);
|
|
121
|
+
config.loadedPlugins = config.loadedPlugins.filter(p => p !== pluginName);
|
|
122
|
+
this.save();
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Add plugin to loaded list
|
|
126
|
+
*/
|
|
127
|
+
addLoadedPlugin(pluginName) {
|
|
128
|
+
const config = this.get();
|
|
129
|
+
if (!config.loadedPlugins.includes(pluginName)) {
|
|
130
|
+
config.loadedPlugins.push(pluginName);
|
|
131
|
+
this.save();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Remove plugin from loaded list
|
|
136
|
+
*/
|
|
137
|
+
removeLoadedPlugin(pluginName) {
|
|
138
|
+
const config = this.get();
|
|
139
|
+
config.loadedPlugins = config.loadedPlugins.filter(p => p !== pluginName);
|
|
140
|
+
this.save();
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get list of installed plugins
|
|
144
|
+
*/
|
|
145
|
+
getInstalledPlugins() {
|
|
146
|
+
const config = this.get();
|
|
147
|
+
return [...config.installedPlugins];
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get list of loaded plugins
|
|
151
|
+
*/
|
|
152
|
+
getLoadedPlugins() {
|
|
153
|
+
const config = this.get();
|
|
154
|
+
return [...config.loadedPlugins];
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Set a configuration value
|
|
158
|
+
*/
|
|
159
|
+
set(key, value) {
|
|
160
|
+
const config = this.get();
|
|
161
|
+
const keys = key.split('.');
|
|
162
|
+
let current = config;
|
|
163
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
164
|
+
if (!current[keys[i]]) {
|
|
165
|
+
current[keys[i]] = {};
|
|
166
|
+
}
|
|
167
|
+
current = current[keys[i]];
|
|
168
|
+
}
|
|
169
|
+
current[keys[keys.length - 1]] = value;
|
|
170
|
+
this.save();
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get a configuration value
|
|
174
|
+
*/
|
|
175
|
+
getValue(key) {
|
|
176
|
+
const config = this.get();
|
|
177
|
+
const keys = key.split('.');
|
|
178
|
+
let current = config;
|
|
179
|
+
for (const k of keys) {
|
|
180
|
+
if (current[k] === undefined) {
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
current = current[k];
|
|
184
|
+
}
|
|
185
|
+
return current;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Reset config to defaults
|
|
189
|
+
*/
|
|
190
|
+
reset() {
|
|
191
|
+
this.config = this.createDefaultConfig();
|
|
192
|
+
this.save();
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Check if config file exists
|
|
196
|
+
*/
|
|
197
|
+
exists() {
|
|
198
|
+
return existsSync(ConfigManager.CONFIG_FILE);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../src/config-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin-manager.d.ts
CHANGED
|
@@ -1,40 +1,55 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import type { MediaProcPlugin } from './types.js';
|
|
3
|
+
import { ConfigManager } from './config-manager.js';
|
|
3
4
|
export declare class PluginManager {
|
|
4
5
|
private plugins;
|
|
5
6
|
private readonly pluginPrefix;
|
|
7
|
+
private configManager;
|
|
8
|
+
constructor();
|
|
6
9
|
private readonly officialPlugins;
|
|
7
10
|
/**
|
|
8
|
-
*
|
|
11
|
+
* Check if a plugin is official (@mediaproc/* package)
|
|
9
12
|
*/
|
|
10
|
-
|
|
13
|
+
isOfficialPlugin(pluginName: string): boolean;
|
|
11
14
|
/**
|
|
12
|
-
*
|
|
15
|
+
* Get the plugin prefix
|
|
13
16
|
*/
|
|
14
|
-
|
|
17
|
+
getPluginPrefix(): string;
|
|
15
18
|
/**
|
|
16
19
|
* Load a specific plugin and register its commands
|
|
17
20
|
*/
|
|
18
21
|
loadPlugin(pluginName: string, program: Command, isBuiltIn?: boolean): Promise<boolean>;
|
|
19
22
|
/**
|
|
20
|
-
* Get list of loaded plugins
|
|
23
|
+
* Get list of loaded plugins (currently in memory)
|
|
21
24
|
*/
|
|
22
25
|
getLoadedPlugins(): string[];
|
|
23
26
|
/**
|
|
24
|
-
* Get
|
|
27
|
+
* Get list of installed plugins from config
|
|
25
28
|
*/
|
|
26
|
-
|
|
29
|
+
getInstalledPlugins(): string[];
|
|
27
30
|
/**
|
|
28
|
-
* Check if a plugin is
|
|
31
|
+
* Check if a plugin is installed (from config)
|
|
29
32
|
*/
|
|
30
|
-
|
|
33
|
+
isPluginInstalled(pluginName: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Get official plugins list
|
|
36
|
+
*/
|
|
37
|
+
getOfficialPlugins(): string[];
|
|
31
38
|
/**
|
|
32
|
-
* Check if a plugin is loaded
|
|
39
|
+
* Check if a plugin is loaded (in memory)
|
|
33
40
|
*/
|
|
34
41
|
isPluginLoaded(pluginName: string): boolean;
|
|
35
42
|
/**
|
|
36
43
|
* Get plugin instance
|
|
37
44
|
*/
|
|
38
45
|
getPlugin(pluginName: string): MediaProcPlugin | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Unload a plugin (remove from registry)
|
|
48
|
+
*/
|
|
49
|
+
unloadPlugin(pluginName: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Get the config manager instance
|
|
52
|
+
*/
|
|
53
|
+
getConfigManager(): ConfigManager;
|
|
39
54
|
}
|
|
40
55
|
//# sourceMappingURL=plugin-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-manager.d.ts","sourceRoot":"","sources":["../src/plugin-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin-manager.d.ts","sourceRoot":"","sources":["../src/plugin-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,aAAa,CAAgB;;IAOrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAW9B;IAEF;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAK7C;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAgC3F;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI9C;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI3C;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI1D;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAUzC;;OAEG;IACH,gBAAgB,IAAI,aAAa;CAGlC"}
|
package/dist/plugin-manager.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { join } from 'path';
|
|
3
|
-
import chalk from 'chalk';
|
|
1
|
+
import { ConfigManager } from './config-manager.js';
|
|
4
2
|
export class PluginManager {
|
|
5
3
|
plugins = new Map();
|
|
6
4
|
pluginPrefix = '@mediaproc/';
|
|
5
|
+
configManager;
|
|
6
|
+
constructor() {
|
|
7
|
+
this.configManager = new ConfigManager();
|
|
8
|
+
}
|
|
7
9
|
// Official plugins (recommended, but installed on-demand)
|
|
8
10
|
officialPlugins = [
|
|
9
11
|
'@mediaproc/image',
|
|
@@ -18,52 +20,26 @@ export class PluginManager {
|
|
|
18
20
|
'@mediaproc/pipeline',
|
|
19
21
|
];
|
|
20
22
|
/**
|
|
21
|
-
*
|
|
23
|
+
* Check if a plugin is official (@mediaproc/* package)
|
|
22
24
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
try {
|
|
27
|
-
const isOfficial = this.officialPlugins.includes(pluginName);
|
|
28
|
-
await this.loadPlugin(pluginName, program, isOfficial);
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
32
|
-
console.error(chalk.yellow(`Warning: Failed to load plugin ${pluginName}:`), errorMessage);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
25
|
+
isOfficialPlugin(pluginName) {
|
|
26
|
+
// Check if it's in the official list OR starts with @mediaproc/
|
|
27
|
+
return this.officialPlugins.includes(pluginName) || pluginName.startsWith(this.pluginPrefix);
|
|
35
28
|
}
|
|
36
29
|
/**
|
|
37
|
-
*
|
|
30
|
+
* Get the plugin prefix
|
|
38
31
|
*/
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
// Try to read package.json to find dependencies
|
|
43
|
-
const packageJsonPath = join(process.cwd(), 'package.json');
|
|
44
|
-
if (existsSync(packageJsonPath)) {
|
|
45
|
-
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
46
|
-
const allDeps = {
|
|
47
|
-
...packageJson.dependencies,
|
|
48
|
-
...packageJson.devDependencies,
|
|
49
|
-
};
|
|
50
|
-
// Find all @mediaproc/* packages
|
|
51
|
-
for (const dep of Object.keys(allDeps)) {
|
|
52
|
-
if (dep.startsWith(this.pluginPrefix) && dep !== '@mediaproc/core') {
|
|
53
|
-
plugins.push(dep);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
// Silently fail - no plugins installed yet
|
|
60
|
-
}
|
|
61
|
-
return plugins;
|
|
32
|
+
getPluginPrefix() {
|
|
33
|
+
return this.pluginPrefix;
|
|
62
34
|
}
|
|
63
35
|
/**
|
|
64
36
|
* Load a specific plugin and register its commands
|
|
65
37
|
*/
|
|
66
38
|
async loadPlugin(pluginName, program, isBuiltIn = false) {
|
|
39
|
+
// Skip if already loaded
|
|
40
|
+
if (this.plugins.has(pluginName)) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
67
43
|
try {
|
|
68
44
|
// Dynamic import of the plugin
|
|
69
45
|
const plugin = await import(pluginName);
|
|
@@ -76,6 +52,8 @@ export class PluginManager {
|
|
|
76
52
|
...plugin,
|
|
77
53
|
isBuiltIn
|
|
78
54
|
});
|
|
55
|
+
// Update config to mark as loaded
|
|
56
|
+
this.configManager.addLoadedPlugin(pluginName);
|
|
79
57
|
return true;
|
|
80
58
|
}
|
|
81
59
|
catch (error) {
|
|
@@ -84,28 +62,34 @@ export class PluginManager {
|
|
|
84
62
|
}
|
|
85
63
|
}
|
|
86
64
|
/**
|
|
87
|
-
* Get list of loaded plugins
|
|
65
|
+
* Get list of loaded plugins (currently in memory)
|
|
88
66
|
*/
|
|
89
67
|
getLoadedPlugins() {
|
|
90
68
|
return Array.from(this.plugins.keys());
|
|
91
69
|
}
|
|
92
70
|
/**
|
|
93
|
-
* Get
|
|
71
|
+
* Get list of installed plugins from config
|
|
94
72
|
*/
|
|
95
|
-
|
|
96
|
-
return
|
|
73
|
+
getInstalledPlugins() {
|
|
74
|
+
return this.configManager.getInstalledPlugins();
|
|
97
75
|
}
|
|
98
76
|
/**
|
|
99
|
-
* Check if a plugin is
|
|
77
|
+
* Check if a plugin is installed (from config)
|
|
100
78
|
*/
|
|
101
|
-
|
|
102
|
-
return this.
|
|
79
|
+
isPluginInstalled(pluginName) {
|
|
80
|
+
return this.configManager.isPluginInstalled(pluginName);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get official plugins list
|
|
84
|
+
*/
|
|
85
|
+
getOfficialPlugins() {
|
|
86
|
+
return [...this.officialPlugins];
|
|
103
87
|
}
|
|
104
88
|
/**
|
|
105
|
-
* Check if a plugin is loaded
|
|
89
|
+
* Check if a plugin is loaded (in memory)
|
|
106
90
|
*/
|
|
107
91
|
isPluginLoaded(pluginName) {
|
|
108
|
-
return this.
|
|
92
|
+
return this.configManager.isPluginLoaded(pluginName);
|
|
109
93
|
}
|
|
110
94
|
/**
|
|
111
95
|
* Get plugin instance
|
|
@@ -113,5 +97,23 @@ export class PluginManager {
|
|
|
113
97
|
getPlugin(pluginName) {
|
|
114
98
|
return this.plugins.get(pluginName);
|
|
115
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Unload a plugin (remove from registry)
|
|
102
|
+
*/
|
|
103
|
+
unloadPlugin(pluginName) {
|
|
104
|
+
if (this.plugins.has(pluginName)) {
|
|
105
|
+
this.plugins.delete(pluginName);
|
|
106
|
+
// Update config to mark as unloaded
|
|
107
|
+
this.configManager.removeLoadedPlugin(pluginName);
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get the config manager instance
|
|
114
|
+
*/
|
|
115
|
+
getConfigManager() {
|
|
116
|
+
return this.configManager;
|
|
117
|
+
}
|
|
116
118
|
}
|
|
117
119
|
//# sourceMappingURL=plugin-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-manager.js","sourceRoot":"","sources":["../src/plugin-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin-manager.js","sourceRoot":"","sources":["../src/plugin-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,14 +8,23 @@ export interface PluginRegistryEntry {
|
|
|
8
8
|
package: string;
|
|
9
9
|
description: string;
|
|
10
10
|
category: 'core' | 'advanced' | 'future-proof';
|
|
11
|
+
type: 'official' | 'community';
|
|
11
12
|
dependencies?: string[];
|
|
12
13
|
systemRequirements?: string[];
|
|
13
14
|
}
|
|
14
15
|
export declare const PLUGIN_REGISTRY: Record<string, PluginRegistryEntry>;
|
|
15
16
|
/**
|
|
16
17
|
* Resolve short name to full package name
|
|
18
|
+
* Handles three types of plugins:
|
|
19
|
+
* 1. Official: @mediaproc/<name> (e.g., @mediaproc/image)
|
|
20
|
+
* 2. Community: mediaproc-<name> (e.g., mediaproc-super-filters)
|
|
21
|
+
* 3. Third-party: any npm package (e.g., my-custom-mediaproc-plugin)
|
|
17
22
|
*/
|
|
18
23
|
export declare function resolvePluginPackage(shortName: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Detect plugin type from package name
|
|
26
|
+
*/
|
|
27
|
+
export declare function detectPluginType(packageName: string): 'official' | 'community' | 'third-party';
|
|
19
28
|
/**
|
|
20
29
|
* Get all available plugins grouped by category
|
|
21
30
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-registry.d.ts","sourceRoot":"","sources":["../src/plugin-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,cAAc,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"plugin-registry.d.ts","sourceRoot":"","sources":["../src/plugin-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,cAAc,CAAC;IAC/C,IAAI,EAAE,UAAU,GAAG,WAAW,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CA0J/D,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAe9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,CAQ9F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAiB5E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD"}
|
package/dist/plugin-registry.js
CHANGED
|
@@ -10,6 +10,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
10
10
|
package: '@mediaproc/image',
|
|
11
11
|
description: 'Image processing (resize, convert, filters, effects)',
|
|
12
12
|
category: 'core',
|
|
13
|
+
type: 'official',
|
|
13
14
|
systemRequirements: ['Sharp (auto-installed)'],
|
|
14
15
|
},
|
|
15
16
|
'video': {
|
|
@@ -17,6 +18,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
17
18
|
package: '@mediaproc/video',
|
|
18
19
|
description: 'Video processing (transcode, compress, extract)',
|
|
19
20
|
category: 'core',
|
|
21
|
+
type: 'official',
|
|
20
22
|
systemRequirements: ['FFmpeg'],
|
|
21
23
|
},
|
|
22
24
|
'audio': {
|
|
@@ -24,6 +26,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
24
26
|
package: '@mediaproc/audio',
|
|
25
27
|
description: 'Audio processing (convert, normalize, extract)',
|
|
26
28
|
category: 'core',
|
|
29
|
+
type: 'official',
|
|
27
30
|
systemRequirements: ['FFmpeg'],
|
|
28
31
|
},
|
|
29
32
|
// Document Media (Very Important)
|
|
@@ -32,6 +35,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
32
35
|
package: '@mediaproc/document',
|
|
33
36
|
description: 'PDF/DOCX/PPTX/EPUB processing, OCR, compression',
|
|
34
37
|
category: 'core',
|
|
38
|
+
type: 'official',
|
|
35
39
|
systemRequirements: ['Ghostscript', 'Tesseract OCR', 'Poppler'],
|
|
36
40
|
},
|
|
37
41
|
'doc': {
|
|
@@ -39,6 +43,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
39
43
|
package: '@mediaproc/document',
|
|
40
44
|
description: 'Alias for document plugin',
|
|
41
45
|
category: 'core',
|
|
46
|
+
type: 'official',
|
|
42
47
|
},
|
|
43
48
|
// Animation & Motion Media
|
|
44
49
|
'animation': {
|
|
@@ -46,6 +51,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
46
51
|
package: '@mediaproc/animation',
|
|
47
52
|
description: 'GIF/APNG/WebP animations, Lottie, SVG animations',
|
|
48
53
|
category: 'core',
|
|
54
|
+
type: 'official',
|
|
49
55
|
systemRequirements: ['FFmpeg'],
|
|
50
56
|
},
|
|
51
57
|
'anim': {
|
|
@@ -53,6 +59,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
53
59
|
package: '@mediaproc/animation',
|
|
54
60
|
description: 'Alias for animation plugin',
|
|
55
61
|
category: 'core',
|
|
62
|
+
type: 'official',
|
|
56
63
|
},
|
|
57
64
|
// 3D & Spatial Media (Advanced)
|
|
58
65
|
'3d': {
|
|
@@ -60,6 +67,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
60
67
|
package: '@mediaproc/3d',
|
|
61
68
|
description: '3D models (GLTF, GLB, OBJ), textures, HDRI, AR/VR assets',
|
|
62
69
|
category: 'advanced',
|
|
70
|
+
type: 'official',
|
|
63
71
|
systemRequirements: ['gltf-transform'],
|
|
64
72
|
},
|
|
65
73
|
'spatial': {
|
|
@@ -67,6 +75,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
67
75
|
package: '@mediaproc/3d',
|
|
68
76
|
description: 'Alias for 3d plugin',
|
|
69
77
|
category: 'advanced',
|
|
78
|
+
type: 'official',
|
|
70
79
|
},
|
|
71
80
|
// Metadata-only Processing (Underrated but Powerful)
|
|
72
81
|
'metadata': {
|
|
@@ -74,6 +83,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
74
83
|
package: '@mediaproc/metadata',
|
|
75
84
|
description: 'EXIF cleanup, GPS removal, codec inspection, compliance checks',
|
|
76
85
|
category: 'core',
|
|
86
|
+
type: 'official',
|
|
77
87
|
systemRequirements: ['ExifTool'],
|
|
78
88
|
},
|
|
79
89
|
'meta': {
|
|
@@ -81,12 +91,14 @@ export const PLUGIN_REGISTRY = {
|
|
|
81
91
|
package: '@mediaproc/metadata',
|
|
82
92
|
description: 'Alias for metadata plugin',
|
|
83
93
|
category: 'core',
|
|
94
|
+
type: 'official',
|
|
84
95
|
},
|
|
85
96
|
'inspect': {
|
|
86
97
|
name: 'inspect',
|
|
87
98
|
package: '@mediaproc/metadata',
|
|
88
99
|
description: 'Alias for metadata plugin',
|
|
89
100
|
category: 'core',
|
|
101
|
+
type: 'official',
|
|
90
102
|
},
|
|
91
103
|
// Streaming & Packaging Media (Advanced, Industry-Relevant)
|
|
92
104
|
'stream': {
|
|
@@ -94,6 +106,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
94
106
|
package: '@mediaproc/stream',
|
|
95
107
|
description: 'HLS/DASH packaging, chunking, encryption, manifests',
|
|
96
108
|
category: 'advanced',
|
|
109
|
+
type: 'official',
|
|
97
110
|
systemRequirements: ['FFmpeg', 'Shaka Packager (optional)'],
|
|
98
111
|
},
|
|
99
112
|
'streaming': {
|
|
@@ -101,6 +114,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
101
114
|
package: '@mediaproc/stream',
|
|
102
115
|
description: 'Alias for stream plugin',
|
|
103
116
|
category: 'advanced',
|
|
117
|
+
type: 'official',
|
|
104
118
|
},
|
|
105
119
|
// AI-Assisted Media (Future-Proof)
|
|
106
120
|
'ai': {
|
|
@@ -108,6 +122,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
108
122
|
package: '@mediaproc/ai',
|
|
109
123
|
description: 'Auto-captioning, scene detection, face blur, background removal, speech-to-text',
|
|
110
124
|
category: 'future-proof',
|
|
125
|
+
type: 'official',
|
|
111
126
|
systemRequirements: ['TensorFlow/ONNX Runtime (optional)', 'Whisper (optional)'],
|
|
112
127
|
},
|
|
113
128
|
'ml': {
|
|
@@ -115,6 +130,7 @@ export const PLUGIN_REGISTRY = {
|
|
|
115
130
|
package: '@mediaproc/ai',
|
|
116
131
|
description: 'Alias for ai plugin',
|
|
117
132
|
category: 'future-proof',
|
|
133
|
+
type: 'official',
|
|
118
134
|
},
|
|
119
135
|
// Media Pipelines (Highest Level)
|
|
120
136
|
'pipeline': {
|
|
@@ -122,23 +138,42 @@ export const PLUGIN_REGISTRY = {
|
|
|
122
138
|
package: '@mediaproc/pipeline',
|
|
123
139
|
description: 'Declarative YAML-based media processing workflows',
|
|
124
140
|
category: 'advanced',
|
|
141
|
+
type: 'official',
|
|
125
142
|
dependencies: ['Can use any installed plugins'],
|
|
126
143
|
},
|
|
127
144
|
};
|
|
128
145
|
/**
|
|
129
146
|
* Resolve short name to full package name
|
|
147
|
+
* Handles three types of plugins:
|
|
148
|
+
* 1. Official: @mediaproc/<name> (e.g., @mediaproc/image)
|
|
149
|
+
* 2. Community: mediaproc-<name> (e.g., mediaproc-super-filters)
|
|
150
|
+
* 3. Third-party: any npm package (e.g., my-custom-mediaproc-plugin)
|
|
130
151
|
*/
|
|
131
152
|
export function resolvePluginPackage(shortName) {
|
|
132
|
-
//
|
|
133
|
-
if (shortName.startsWith('
|
|
153
|
+
// Already a full package name - return as-is
|
|
154
|
+
if (shortName.includes('/') || shortName.startsWith('mediaproc-')) {
|
|
134
155
|
return shortName;
|
|
135
156
|
}
|
|
136
|
-
// Look up in registry
|
|
157
|
+
// Look up in official registry first
|
|
137
158
|
const entry = PLUGIN_REGISTRY[shortName.toLowerCase()];
|
|
138
|
-
if (
|
|
139
|
-
|
|
159
|
+
if (entry) {
|
|
160
|
+
return entry.package;
|
|
140
161
|
}
|
|
141
|
-
|
|
162
|
+
// Not in registry - could be community or third-party
|
|
163
|
+
// Assume community format: mediaproc-<name>
|
|
164
|
+
return `mediaproc-${shortName}`;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Detect plugin type from package name
|
|
168
|
+
*/
|
|
169
|
+
export function detectPluginType(packageName) {
|
|
170
|
+
if (packageName.startsWith('@mediaproc/')) {
|
|
171
|
+
return 'official';
|
|
172
|
+
}
|
|
173
|
+
if (packageName.startsWith('mediaproc-')) {
|
|
174
|
+
return 'community';
|
|
175
|
+
}
|
|
176
|
+
return 'third-party';
|
|
142
177
|
}
|
|
143
178
|
/**
|
|
144
179
|
* Get all available plugins grouped by category
|