@mediaproc/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +72 -0
  2. package/README.md +947 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +51 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/add.d.ts +4 -0
  8. package/dist/commands/add.d.ts.map +1 -0
  9. package/dist/commands/add.js +170 -0
  10. package/dist/commands/add.js.map +1 -0
  11. package/dist/commands/config.d.ts +3 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +50 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/help.d.ts +3 -0
  16. package/dist/commands/help.d.ts.map +1 -0
  17. package/dist/commands/help.js +55 -0
  18. package/dist/commands/help.js.map +1 -0
  19. package/dist/commands/init.d.ts +3 -0
  20. package/dist/commands/init.d.ts.map +1 -0
  21. package/dist/commands/init.js +57 -0
  22. package/dist/commands/init.js.map +1 -0
  23. package/dist/commands/list.d.ts +4 -0
  24. package/dist/commands/list.d.ts.map +1 -0
  25. package/dist/commands/list.js +30 -0
  26. package/dist/commands/list.js.map +1 -0
  27. package/dist/commands/remove.d.ts +4 -0
  28. package/dist/commands/remove.d.ts.map +1 -0
  29. package/dist/commands/remove.js +38 -0
  30. package/dist/commands/remove.js.map +1 -0
  31. package/dist/commands/run.d.ts +3 -0
  32. package/dist/commands/run.d.ts.map +1 -0
  33. package/dist/commands/run.js +16 -0
  34. package/dist/commands/run.js.map +1 -0
  35. package/dist/commands/validate.d.ts +3 -0
  36. package/dist/commands/validate.d.ts.map +1 -0
  37. package/dist/commands/validate.js +16 -0
  38. package/dist/commands/validate.js.map +1 -0
  39. package/dist/index.d.ts +4 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +3 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/plugin-api.d.ts +45 -0
  44. package/dist/plugin-api.d.ts.map +1 -0
  45. package/dist/plugin-api.js +2 -0
  46. package/dist/plugin-api.js.map +1 -0
  47. package/dist/plugin-manager.d.ts +31 -0
  48. package/dist/plugin-manager.d.ts.map +1 -0
  49. package/dist/plugin-manager.js +88 -0
  50. package/dist/plugin-manager.js.map +1 -0
  51. package/dist/plugin-registry.d.ts +27 -0
  52. package/dist/plugin-registry.d.ts.map +1 -0
  53. package/dist/plugin-registry.js +167 -0
  54. package/dist/plugin-registry.js.map +1 -0
  55. package/dist/types.d.ts +36 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +2 -0
  58. package/dist/types.js.map +1 -0
  59. package/package.json +72 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;SAC9C,MAAM,CAAC,CAAC,IAAY,EAAE,QAA+C,EAAE,EAAE;QACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { cli } from './cli.js';
2
+ export { PluginManager } from './plugin-manager.js';
3
+ export type * from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,mBAAmB,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { cli } from './cli.js';
2
+ export { PluginManager } from './plugin-manager.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,45 @@
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/image';
13
+ * export const version = '1.0.0';
14
+ *
15
+ * export function register(program: Command): void {
16
+ * const imageCmd = program
17
+ * .command('image')
18
+ * .description('Image processing commands');
19
+ *
20
+ * imageCmd
21
+ * .command('resize <input>')
22
+ * .option('-w, --width <width>', 'Width')
23
+ * .option('-h, --height <height>', 'Height')
24
+ * .action(async (input, options) => {
25
+ * // Implementation
26
+ * });
27
+ * }
28
+ * ```
29
+ */
30
+ export interface PluginAPI {
31
+ /**
32
+ * Plugin name (should match package name)
33
+ */
34
+ name: string;
35
+ /**
36
+ * Plugin version
37
+ */
38
+ version: string;
39
+ /**
40
+ * Register commands with the CLI
41
+ */
42
+ register(program: Command): void | Promise<void>;
43
+ }
44
+ export type { Command };
45
+ //# sourceMappingURL=plugin-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-api.d.ts","sourceRoot":"","sources":["../src/plugin-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,YAAY,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-api.js","sourceRoot":"","sources":["../src/plugin-api.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { Command } from 'commander';
2
+ import type { MediaProcPlugin } from './types.js';
3
+ export declare class PluginManager {
4
+ private plugins;
5
+ private readonly pluginPrefix;
6
+ /**
7
+ * Discover and load all installed @mediaproc/* plugins
8
+ */
9
+ loadPlugins(program: Command): Promise<void>;
10
+ /**
11
+ * Discover installed plugins by scanning node_modules
12
+ */
13
+ private discoverPlugins;
14
+ /**
15
+ * Load a specific plugin and register its commands
16
+ */
17
+ loadPlugin(pluginName: string, program: Command): Promise<boolean>;
18
+ /**
19
+ * Get list of loaded plugins
20
+ */
21
+ getLoadedPlugins(): string[];
22
+ /**
23
+ * Check if a plugin is loaded
24
+ */
25
+ isPluginLoaded(pluginName: string): boolean;
26
+ /**
27
+ * Get plugin instance
28
+ */
29
+ getPlugin(pluginName: string): MediaProcPlugin | undefined;
30
+ }
31
+ //# sourceMappingURL=plugin-manager.d.ts.map
@@ -0,0 +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;IAE9C;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAalD;;OAEG;IACH,OAAO,CAAC,eAAe;IA4BvB;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBxE;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI3C;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;CAG3D"}
@@ -0,0 +1,88 @@
1
+ import { readFileSync, existsSync } from 'fs';
2
+ import { join } from 'path';
3
+ import chalk from 'chalk';
4
+ export class PluginManager {
5
+ plugins = new Map();
6
+ pluginPrefix = '@mediaproc/';
7
+ /**
8
+ * Discover and load all installed @mediaproc/* plugins
9
+ */
10
+ async loadPlugins(program) {
11
+ const installedPlugins = this.discoverPlugins();
12
+ for (const pluginName of installedPlugins) {
13
+ try {
14
+ await this.loadPlugin(pluginName, program);
15
+ }
16
+ catch (error) {
17
+ const errorMessage = error instanceof Error ? error.message : String(error);
18
+ console.error(chalk.yellow(`Warning: Failed to load plugin ${pluginName}:`), errorMessage);
19
+ }
20
+ }
21
+ }
22
+ /**
23
+ * Discover installed plugins by scanning node_modules
24
+ */
25
+ discoverPlugins() {
26
+ const plugins = [];
27
+ try {
28
+ // Try to read package.json to find dependencies
29
+ const packageJsonPath = join(process.cwd(), 'package.json');
30
+ if (existsSync(packageJsonPath)) {
31
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
32
+ const allDeps = {
33
+ ...packageJson.dependencies,
34
+ ...packageJson.devDependencies,
35
+ };
36
+ // Find all @mediaproc/* packages
37
+ for (const dep of Object.keys(allDeps)) {
38
+ if (dep.startsWith(this.pluginPrefix) && dep !== '@mediaproc/core') {
39
+ plugins.push(dep);
40
+ }
41
+ }
42
+ }
43
+ }
44
+ catch (error) {
45
+ // Silently fail - no plugins installed yet
46
+ }
47
+ return plugins;
48
+ }
49
+ /**
50
+ * Load a specific plugin and register its commands
51
+ */
52
+ async loadPlugin(pluginName, program) {
53
+ try {
54
+ // Dynamic import of the plugin
55
+ const plugin = await import(pluginName);
56
+ if (typeof plugin.register !== 'function') {
57
+ throw new Error(`Plugin ${pluginName} does not export a register() function`);
58
+ }
59
+ // Register plugin commands with the CLI
60
+ await plugin.register(program);
61
+ this.plugins.set(pluginName, plugin);
62
+ return true;
63
+ }
64
+ catch (error) {
65
+ const errorMessage = error instanceof Error ? error.message : String(error);
66
+ throw new Error(`Failed to load plugin ${pluginName}: ${errorMessage}`);
67
+ }
68
+ }
69
+ /**
70
+ * Get list of loaded plugins
71
+ */
72
+ getLoadedPlugins() {
73
+ return Array.from(this.plugins.keys());
74
+ }
75
+ /**
76
+ * Check if a plugin is loaded
77
+ */
78
+ isPluginLoaded(pluginName) {
79
+ return this.plugins.has(pluginName);
80
+ }
81
+ /**
82
+ * Get plugin instance
83
+ */
84
+ getPlugin(pluginName) {
85
+ return this.plugins.get(pluginName);
86
+ }
87
+ }
88
+ //# sourceMappingURL=plugin-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-manager.js","sourceRoot":"","sources":["../src/plugin-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Plugin Registry - Maps short names to full package names
3
+ * This allows users to type: mediaproc add image
4
+ * Instead of: mediaproc add @mediaproc/image
5
+ */
6
+ export interface PluginRegistryEntry {
7
+ name: string;
8
+ package: string;
9
+ description: string;
10
+ category: 'core' | 'advanced' | 'future-proof';
11
+ dependencies?: string[];
12
+ systemRequirements?: string[];
13
+ }
14
+ export declare const PLUGIN_REGISTRY: Record<string, PluginRegistryEntry>;
15
+ /**
16
+ * Resolve short name to full package name
17
+ */
18
+ export declare function resolvePluginPackage(shortName: string): string;
19
+ /**
20
+ * Get all available plugins grouped by category
21
+ */
22
+ export declare function getPluginsByCategory(): Record<string, PluginRegistryEntry[]>;
23
+ /**
24
+ * Check if a plugin exists in registry
25
+ */
26
+ export declare function isValidPlugin(name: string): boolean;
27
+ //# sourceMappingURL=plugin-registry.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Plugin Registry - Maps short names to full package names
3
+ * This allows users to type: mediaproc add image
4
+ * Instead of: mediaproc add @mediaproc/image
5
+ */
6
+ export const PLUGIN_REGISTRY = {
7
+ // Core Media Plugins
8
+ 'image': {
9
+ name: 'image',
10
+ package: '@mediaproc/image',
11
+ description: 'Image processing (resize, convert, filters, effects)',
12
+ category: 'core',
13
+ systemRequirements: ['Sharp (auto-installed)'],
14
+ },
15
+ 'video': {
16
+ name: 'video',
17
+ package: '@mediaproc/video',
18
+ description: 'Video processing (transcode, compress, extract)',
19
+ category: 'core',
20
+ systemRequirements: ['FFmpeg'],
21
+ },
22
+ 'audio': {
23
+ name: 'audio',
24
+ package: '@mediaproc/audio',
25
+ description: 'Audio processing (convert, normalize, extract)',
26
+ category: 'core',
27
+ systemRequirements: ['FFmpeg'],
28
+ },
29
+ // Document Media (Very Important)
30
+ 'document': {
31
+ name: 'document',
32
+ package: '@mediaproc/document',
33
+ description: 'PDF/DOCX/PPTX/EPUB processing, OCR, compression',
34
+ category: 'core',
35
+ systemRequirements: ['Ghostscript', 'Tesseract OCR', 'Poppler'],
36
+ },
37
+ 'doc': {
38
+ name: 'doc',
39
+ package: '@mediaproc/document',
40
+ description: 'Alias for document plugin',
41
+ category: 'core',
42
+ },
43
+ // Animation & Motion Media
44
+ 'animation': {
45
+ name: 'animation',
46
+ package: '@mediaproc/animation',
47
+ description: 'GIF/APNG/WebP animations, Lottie, SVG animations',
48
+ category: 'core',
49
+ systemRequirements: ['FFmpeg'],
50
+ },
51
+ 'anim': {
52
+ name: 'anim',
53
+ package: '@mediaproc/animation',
54
+ description: 'Alias for animation plugin',
55
+ category: 'core',
56
+ },
57
+ // 3D & Spatial Media (Advanced)
58
+ '3d': {
59
+ name: '3d',
60
+ package: '@mediaproc/3d',
61
+ description: '3D models (GLTF, GLB, OBJ), textures, HDRI, AR/VR assets',
62
+ category: 'advanced',
63
+ systemRequirements: ['gltf-transform'],
64
+ },
65
+ 'spatial': {
66
+ name: 'spatial',
67
+ package: '@mediaproc/3d',
68
+ description: 'Alias for 3d plugin',
69
+ category: 'advanced',
70
+ },
71
+ // Metadata-only Processing (Underrated but Powerful)
72
+ 'metadata': {
73
+ name: 'metadata',
74
+ package: '@mediaproc/metadata',
75
+ description: 'EXIF cleanup, GPS removal, codec inspection, compliance checks',
76
+ category: 'core',
77
+ systemRequirements: ['ExifTool'],
78
+ },
79
+ 'meta': {
80
+ name: 'meta',
81
+ package: '@mediaproc/metadata',
82
+ description: 'Alias for metadata plugin',
83
+ category: 'core',
84
+ },
85
+ 'inspect': {
86
+ name: 'inspect',
87
+ package: '@mediaproc/metadata',
88
+ description: 'Alias for metadata plugin',
89
+ category: 'core',
90
+ },
91
+ // Streaming & Packaging Media (Advanced, Industry-Relevant)
92
+ 'stream': {
93
+ name: 'stream',
94
+ package: '@mediaproc/stream',
95
+ description: 'HLS/DASH packaging, chunking, encryption, manifests',
96
+ category: 'advanced',
97
+ systemRequirements: ['FFmpeg', 'Shaka Packager (optional)'],
98
+ },
99
+ 'streaming': {
100
+ name: 'streaming',
101
+ package: '@mediaproc/stream',
102
+ description: 'Alias for stream plugin',
103
+ category: 'advanced',
104
+ },
105
+ // AI-Assisted Media (Future-Proof)
106
+ 'ai': {
107
+ name: 'ai',
108
+ package: '@mediaproc/ai',
109
+ description: 'Auto-captioning, scene detection, face blur, background removal, speech-to-text',
110
+ category: 'future-proof',
111
+ systemRequirements: ['TensorFlow/ONNX Runtime (optional)', 'Whisper (optional)'],
112
+ },
113
+ 'ml': {
114
+ name: 'ml',
115
+ package: '@mediaproc/ai',
116
+ description: 'Alias for ai plugin',
117
+ category: 'future-proof',
118
+ },
119
+ // Media Pipelines (Highest Level)
120
+ 'pipeline': {
121
+ name: 'pipeline',
122
+ package: '@mediaproc/pipeline',
123
+ description: 'Declarative YAML-based media processing workflows',
124
+ category: 'advanced',
125
+ dependencies: ['Can use any installed plugins'],
126
+ },
127
+ };
128
+ /**
129
+ * Resolve short name to full package name
130
+ */
131
+ export function resolvePluginPackage(shortName) {
132
+ // If already full package name, return as-is
133
+ if (shortName.startsWith('@mediaproc/')) {
134
+ return shortName;
135
+ }
136
+ // Look up in registry
137
+ const entry = PLUGIN_REGISTRY[shortName.toLowerCase()];
138
+ if (!entry) {
139
+ throw new Error(`Unknown plugin: ${shortName}\nRun 'mediaproc plugins' to see available plugins`);
140
+ }
141
+ return entry.package;
142
+ }
143
+ /**
144
+ * Get all available plugins grouped by category
145
+ */
146
+ export function getPluginsByCategory() {
147
+ const grouped = {
148
+ core: [],
149
+ advanced: [],
150
+ 'future-proof': [],
151
+ };
152
+ const seen = new Set();
153
+ for (const entry of Object.values(PLUGIN_REGISTRY)) {
154
+ if (!seen.has(entry.package)) {
155
+ grouped[entry.category].push(entry);
156
+ seen.add(entry.package);
157
+ }
158
+ }
159
+ return grouped;
160
+ }
161
+ /**
162
+ * Check if a plugin exists in registry
163
+ */
164
+ export function isValidPlugin(name) {
165
+ return name.startsWith('@mediaproc/') || name.toLowerCase() in PLUGIN_REGISTRY;
166
+ }
167
+ //# sourceMappingURL=plugin-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-registry.js","sourceRoot":"","sources":["../src/plugin-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { Command } from 'commander';
2
+ export interface MediaProcPlugin {
3
+ name: string;
4
+ version: string;
5
+ register: (program: Command) => void | Promise<void>;
6
+ }
7
+ export interface PluginMetadata {
8
+ name: string;
9
+ version: string;
10
+ description?: string;
11
+ author?: string;
12
+ apiVersion: string;
13
+ }
14
+ export interface CommandOptions {
15
+ input?: string;
16
+ output?: string;
17
+ quality?: number;
18
+ format?: string;
19
+ verbose?: boolean;
20
+ dryRun?: boolean;
21
+ workers?: number;
22
+ }
23
+ export interface ProcessingResult {
24
+ success: boolean;
25
+ input: string;
26
+ output?: string;
27
+ error?: string;
28
+ duration?: number;
29
+ inputSize?: number;
30
+ outputSize?: number;
31
+ }
32
+ export interface PluginConfig {
33
+ enabled: boolean;
34
+ options?: Record<string, any>;
35
+ }
36
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,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,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@mediaproc/cli",
3
+ "version": "0.1.0",
4
+ "description": "Universal media processing CLI with plugin architecture",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "mediaproc": "./dist/cli.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "build:all": "pnpm build && pnpm --filter '@mediaproc/*' build",
19
+ "clean": "rm -rf dist",
20
+ "clean:all": "pnpm clean && pnpm --filter '@mediaproc/*' clean",
21
+ "dev": "tsc --watch",
22
+ "test": "echo \"Tests not implemented yet\"",
23
+ "prepublishOnly": "pnpm clean && pnpm build",
24
+ "prepare": "pnpm build"
25
+ },
26
+ "keywords": [
27
+ "media",
28
+ "processor",
29
+ "cli",
30
+ "image",
31
+ "video",
32
+ "audio",
33
+ "document",
34
+ "ffmpeg",
35
+ "sharp",
36
+ "plugin"
37
+ ],
38
+ "author": {
39
+ "name": "0xshariq",
40
+ "url": "https://github.com/0xshariq"
41
+ },
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/0xshariq/mediaproc-cli.git"
46
+ },
47
+ "bugs": {
48
+ "url": "https://github.com/0xshariq/mediaproc-cli/issues"
49
+ },
50
+ "homepage": "https://github.com/0xshariq/mediaproc-cli#readme",
51
+ "engines": {
52
+ "node": ">=18.0.0"
53
+ },
54
+ "dependencies": {
55
+ "@gltf-transform/cli": "^4.2.1",
56
+ "@gltf-transform/core": "^4.2.1",
57
+ "@lottiefiles/dotlottie-web": "^0.60.0",
58
+ "chalk": "^5.3.0",
59
+ "commander": "^11.1.0",
60
+ "execa": "^8.0.1",
61
+ "ghostscript4js": "^3.2.3",
62
+ "node-poppler": "^9.0.1",
63
+ "ora": "^7.0.1",
64
+ "shaka-player": "^4.16.12",
65
+ "sharp": "^0.33.5",
66
+ "tesseract.js": "^7.0.0"
67
+ },
68
+ "devDependencies": {
69
+ "@types/node": "^20.10.4",
70
+ "typescript": "^5.3.3"
71
+ }
72
+ }