@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.
Files changed (54) hide show
  1. package/README.md +204 -18
  2. package/dist/__tests__/plugin-manager.test.d.ts +2 -0
  3. package/dist/__tests__/plugin-manager.test.d.ts.map +1 -0
  4. package/dist/__tests__/plugin-manager.test.js +7 -0
  5. package/dist/__tests__/plugin-manager.test.js.map +1 -0
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +13 -12
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands/add.d.ts.map +1 -1
  10. package/dist/commands/add.js +108 -39
  11. package/dist/commands/add.js.map +1 -1
  12. package/dist/commands/config.d.ts.map +1 -1
  13. package/dist/commands/config.js +70 -27
  14. package/dist/commands/config.js.map +1 -1
  15. package/dist/commands/convert.d.ts +3 -2
  16. package/dist/commands/convert.d.ts.map +1 -1
  17. package/dist/commands/convert.js +59 -37
  18. package/dist/commands/convert.js.map +1 -1
  19. package/dist/commands/help.js +2 -2
  20. package/dist/commands/help.js.map +1 -1
  21. package/dist/commands/info.d.ts +3 -2
  22. package/dist/commands/info.d.ts.map +1 -1
  23. package/dist/commands/info.js +17 -3
  24. package/dist/commands/info.js.map +1 -1
  25. package/dist/commands/init.d.ts.map +1 -1
  26. package/dist/commands/init.js +25 -47
  27. package/dist/commands/init.js.map +1 -1
  28. package/dist/commands/list.d.ts.map +1 -1
  29. package/dist/commands/list.js +60 -13
  30. package/dist/commands/list.js.map +1 -1
  31. package/dist/commands/optimize.d.ts +3 -2
  32. package/dist/commands/optimize.d.ts.map +1 -1
  33. package/dist/commands/optimize.js +25 -19
  34. package/dist/commands/optimize.js.map +1 -1
  35. package/dist/commands/plugins.d.ts +4 -0
  36. package/dist/commands/plugins.d.ts.map +1 -0
  37. package/dist/commands/plugins.js +79 -0
  38. package/dist/commands/plugins.js.map +1 -0
  39. package/dist/commands/remove.d.ts.map +1 -1
  40. package/dist/commands/remove.js +73 -10
  41. package/dist/commands/remove.js.map +1 -1
  42. package/dist/config-manager.d.ts +110 -0
  43. package/dist/config-manager.d.ts.map +1 -0
  44. package/dist/config-manager.js +201 -0
  45. package/dist/config-manager.js.map +1 -0
  46. package/dist/plugin-manager.d.ts +25 -10
  47. package/dist/plugin-manager.d.ts.map +1 -1
  48. package/dist/plugin-manager.js +51 -49
  49. package/dist/plugin-manager.js.map +1 -1
  50. package/dist/plugin-registry.d.ts +9 -0
  51. package/dist/plugin-registry.d.ts.map +1 -1
  52. package/dist/plugin-registry.js +41 -6
  53. package/dist/plugin-registry.js.map +1 -1
  54. 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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"}
@@ -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
- * Discover and load all installed plugins dynamically
11
+ * Check if a plugin is official (@mediaproc/* package)
9
12
  */
10
- loadPlugins(program: Command): Promise<void>;
13
+ isOfficialPlugin(pluginName: string): boolean;
11
14
  /**
12
- * Discover installed plugins by scanning node_modules
15
+ * Get the plugin prefix
13
16
  */
14
- private discoverPlugins;
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 official plugins list
27
+ * Get list of installed plugins from config
25
28
  */
26
- getOfficialPlugins(): string[];
29
+ getInstalledPlugins(): string[];
27
30
  /**
28
- * Check if a plugin is official
31
+ * Check if a plugin is installed (from config)
29
32
  */
30
- isOfficialPlugin(pluginName: string): boolean;
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":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAG9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAW9B;IAEF;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAclD;;OAEG;IACH,OAAO,CAAC,eAAe;IA4BvB;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAwB3F;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI3C;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;CAG3D"}
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"}
@@ -1,9 +1,11 @@
1
- import { readFileSync, existsSync } from 'fs';
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
- * Discover and load all installed plugins dynamically
23
+ * Check if a plugin is official (@mediaproc/* package)
22
24
  */
23
- async loadPlugins(program) {
24
- const installedPlugins = this.discoverPlugins();
25
- for (const pluginName of installedPlugins) {
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
- * Discover installed plugins by scanning node_modules
30
+ * Get the plugin prefix
38
31
  */
39
- discoverPlugins() {
40
- const plugins = [];
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 official plugins list
71
+ * Get list of installed plugins from config
94
72
  */
95
- getOfficialPlugins() {
96
- return [...this.officialPlugins];
73
+ getInstalledPlugins() {
74
+ return this.configManager.getInstalledPlugins();
97
75
  }
98
76
  /**
99
- * Check if a plugin is official
77
+ * Check if a plugin is installed (from config)
100
78
  */
101
- isOfficialPlugin(pluginName) {
102
- return this.officialPlugins.includes(pluginName);
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.plugins.has(pluginName);
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":"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"}
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,CAyI/D,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAe9D;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"}
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"}
@@ -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
- // If already full package name, return as-is
133
- if (shortName.startsWith('@mediaproc/')) {
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 (!entry) {
139
- throw new Error(`Unknown plugin: ${shortName}\nRun 'mediaproc plugins' to see available plugins`);
159
+ if (entry) {
160
+ return entry.package;
140
161
  }
141
- return entry.package;
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