@mediaproc/cli 0.6.0 ā 0.7.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 +202 -1399
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +21 -12
- package/dist/cli.js.map +1 -1
- package/dist/commands/batch.d.ts +3 -0
- package/dist/commands/batch.d.ts.map +1 -0
- package/dist/commands/batch.js +269 -0
- package/dist/commands/batch.js.map +1 -0
- package/dist/commands/benchmark.d.ts +3 -0
- package/dist/commands/benchmark.d.ts.map +1 -0
- package/dist/commands/benchmark.js +124 -0
- package/dist/commands/benchmark.js.map +1 -0
- package/dist/commands/compare.d.ts +3 -0
- package/dist/commands/compare.d.ts.map +1 -0
- package/dist/commands/compare.js +102 -0
- package/dist/commands/compare.js.map +1 -0
- package/dist/commands/detect.d.ts +6 -0
- package/dist/commands/detect.d.ts.map +1 -0
- package/dist/commands/detect.js +90 -0
- package/dist/commands/detect.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +222 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/history.d.ts +15 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +215 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +193 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/stats.d.ts +3 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +155 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/template.d.ts +3 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +184 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/watch.d.ts +3 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +106 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/commands/workspace.d.ts +3 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +201 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/utils/branding.d.ts +11 -0
- package/dist/utils/branding.d.ts.map +1 -0
- package/dist/utils/branding.js +59 -0
- package/dist/utils/branding.js.map +1 -0
- package/package.json +1 -1
- package/dist/commands/convert.d.ts +0 -7
- package/dist/commands/convert.d.ts.map +0 -1
- package/dist/commands/convert.js +0 -96
- package/dist/commands/convert.js.map +0 -1
- package/dist/commands/info.d.ts +0 -7
- package/dist/commands/info.d.ts.map +0 -1
- package/dist/commands/info.js +0 -117
- package/dist/commands/info.js.map +0 -1
- package/dist/commands/optimize.d.ts +0 -7
- package/dist/commands/optimize.d.ts.map +0 -1
- package/dist/commands/optimize.js +0 -196
- package/dist/commands/optimize.js.map +0 -1
- package/dist/commands/run.d.ts +0 -3
- package/dist/commands/run.d.ts.map +0 -1
- package/dist/commands/run.js +0 -16
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/validate.d.ts +0 -3
- package/dist/commands/validate.d.ts.map +0 -1
- package/dist/commands/validate.js +0 -16
- package/dist/commands/validate.js.map +0 -1
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { showBranding } from '../utils/branding';
|
|
3
|
+
export const searchCommand = new Command()
|
|
4
|
+
.name('search')
|
|
5
|
+
.description('Search for commands across all installed plugins')
|
|
6
|
+
.argument('<query>', 'Search query')
|
|
7
|
+
.option('-p, --plugin <name>', 'Search in specific plugin only')
|
|
8
|
+
.option('-l, --limit <number>', 'Limit number of results', '10')
|
|
9
|
+
.option('--json', 'Output results as JSON')
|
|
10
|
+
.action(async (query, options) => {
|
|
11
|
+
try {
|
|
12
|
+
const results = await searchCommands(query, options.plugin);
|
|
13
|
+
const limit = parseInt(options.limit);
|
|
14
|
+
if (results.length === 0) {
|
|
15
|
+
console.log(`\nā No commands found matching "${query}"\n`);
|
|
16
|
+
console.log('š” Tips:');
|
|
17
|
+
console.log(' ⢠Try different keywords (e.g., "resize", "convert", "compress")');
|
|
18
|
+
console.log(' ⢠Check installed plugins: \x1b[36mmediaproc list\x1b[0m');
|
|
19
|
+
console.log(' ⢠Install more plugins: \x1b[36mmediaproc add <plugin>\x1b[0m');
|
|
20
|
+
console.log(' ⢠View all available commands: \x1b[36mmediaproc <plugin> --help\x1b[0m');
|
|
21
|
+
showBranding();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (options.json) {
|
|
25
|
+
console.log(JSON.stringify(results.slice(0, limit), null, 2));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Display results in a nice table format
|
|
29
|
+
console.log(`\nš Found ${results.length} command${results.length > 1 ? 's' : ''} matching "${query}"\n`);
|
|
30
|
+
console.log('ā' + 'ā'.repeat(78) + 'ā');
|
|
31
|
+
results.slice(0, limit).forEach((result, index) => {
|
|
32
|
+
const number = `${index + 1}.`.padEnd(3);
|
|
33
|
+
const pluginCmd = `${result.plugin} ${result.command}`;
|
|
34
|
+
const category = result.category ? ` [${result.category}]` : '';
|
|
35
|
+
console.log(`ā ${number} \x1b[1m\x1b[36m${pluginCmd}\x1b[0m${category}`);
|
|
36
|
+
console.log(`ā ${result.description}`);
|
|
37
|
+
console.log(`ā \x1b[90mUsage: mediaproc ${result.plugin} ${result.command} [options]\x1b[0m`);
|
|
38
|
+
if (index < Math.min(limit, results.length) - 1) {
|
|
39
|
+
console.log('ā' + ' '.repeat(78) + 'ā');
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
console.log('ā' + 'ā'.repeat(78) + 'ā');
|
|
43
|
+
if (results.length > limit) {
|
|
44
|
+
console.log(`\nš Showing top ${limit} results (${results.length} total)`);
|
|
45
|
+
console.log(` Use \x1b[36m--limit ${results.length}\x1b[0m to see all results`);
|
|
46
|
+
}
|
|
47
|
+
console.log(`\nš” Get detailed help: \x1b[36mmediaproc <plugin> <command> --help\x1b[0m`);
|
|
48
|
+
showBranding();
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error(`\nā Search failed: ${error instanceof Error ? error.message : 'Unknown error'}\n`);
|
|
52
|
+
showBranding();
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
async function searchCommands(query, specificPlugin) {
|
|
57
|
+
const results = [];
|
|
58
|
+
const queryLower = query.toLowerCase();
|
|
59
|
+
const queryWords = queryLower.split(/\s+/).filter(w => w.length > 0);
|
|
60
|
+
// Get command database (static for now, will be dynamic with real plugins later)
|
|
61
|
+
const commandDatabase = getCommandDatabase();
|
|
62
|
+
// Search through all plugins and commands
|
|
63
|
+
for (const [plugin, commands] of Object.entries(commandDatabase)) {
|
|
64
|
+
if (specificPlugin && plugin !== specificPlugin) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
for (const [command, info] of Object.entries(commands)) {
|
|
68
|
+
const score = calculateRelevanceScore(queryLower, queryWords, plugin, command, info.description, info.category);
|
|
69
|
+
if (score > 0) {
|
|
70
|
+
results.push({
|
|
71
|
+
plugin,
|
|
72
|
+
command,
|
|
73
|
+
description: info.description,
|
|
74
|
+
category: info.category,
|
|
75
|
+
score
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Sort by relevance score (highest first)
|
|
81
|
+
results.sort((a, b) => b.score - a.score);
|
|
82
|
+
return results;
|
|
83
|
+
}
|
|
84
|
+
function calculateRelevanceScore(query, queryWords, plugin, command, description, category) {
|
|
85
|
+
let score = 0;
|
|
86
|
+
const searchText = `${plugin} ${command} ${description} ${category || ''}`.toLowerCase();
|
|
87
|
+
const commandLower = command.toLowerCase();
|
|
88
|
+
const descriptionLower = description.toLowerCase();
|
|
89
|
+
// Exact match in command name (highest priority)
|
|
90
|
+
if (commandLower === query) {
|
|
91
|
+
score += 100;
|
|
92
|
+
}
|
|
93
|
+
// Command starts with query
|
|
94
|
+
if (commandLower.startsWith(query)) {
|
|
95
|
+
score += 50;
|
|
96
|
+
}
|
|
97
|
+
// Command contains query
|
|
98
|
+
if (commandLower.includes(query)) {
|
|
99
|
+
score += 30;
|
|
100
|
+
}
|
|
101
|
+
// Description contains exact query
|
|
102
|
+
if (descriptionLower.includes(query)) {
|
|
103
|
+
score += 25;
|
|
104
|
+
}
|
|
105
|
+
// All query words present in searchable text
|
|
106
|
+
if (queryWords.every(word => searchText.includes(word))) {
|
|
107
|
+
score += 20;
|
|
108
|
+
}
|
|
109
|
+
// Individual word matches (with decreasing importance)
|
|
110
|
+
queryWords.forEach((word, index) => {
|
|
111
|
+
const wordWeight = 10 / (index + 1); // First word more important
|
|
112
|
+
if (commandLower.includes(word)) {
|
|
113
|
+
score += wordWeight * 2;
|
|
114
|
+
}
|
|
115
|
+
if (descriptionLower.includes(word)) {
|
|
116
|
+
score += wordWeight;
|
|
117
|
+
}
|
|
118
|
+
if (plugin.toLowerCase().includes(word)) {
|
|
119
|
+
score += wordWeight * 1.5;
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
return score;
|
|
123
|
+
}
|
|
124
|
+
function getCommandDatabase() {
|
|
125
|
+
// This is a comprehensive static database. In production, this should be loaded from installed plugins
|
|
126
|
+
return {
|
|
127
|
+
image: {
|
|
128
|
+
// Transform Commands
|
|
129
|
+
resize: { description: 'Resize images to specified dimensions', category: 'Transform' },
|
|
130
|
+
crop: { description: 'Crop images to specified area', category: 'Transform' },
|
|
131
|
+
rotate: { description: 'Rotate images by degrees', category: 'Transform' },
|
|
132
|
+
flip: { description: 'Flip images horizontally or vertically', category: 'Transform' },
|
|
133
|
+
trim: { description: 'Trim edges of images automatically', category: 'Transform' },
|
|
134
|
+
extend: { description: 'Extend image canvas with background', category: 'Transform' },
|
|
135
|
+
extract: { description: 'Extract region from images', category: 'Transform' },
|
|
136
|
+
// Format Commands
|
|
137
|
+
convert: { description: 'Convert images between formats (JPG, PNG, WebP, AVIF)', category: 'Format' },
|
|
138
|
+
compress: { description: 'Compress images with quality control', category: 'Format' },
|
|
139
|
+
optimize: { description: 'Optimize images for web delivery', category: 'Format' },
|
|
140
|
+
// Effect Commands
|
|
141
|
+
blur: { description: 'Apply gaussian blur effect to images', category: 'Effects' },
|
|
142
|
+
sharpen: { description: 'Sharpen images for clarity', category: 'Effects' },
|
|
143
|
+
grayscale: { description: 'Convert images to grayscale/black and white', category: 'Effects' },
|
|
144
|
+
tint: { description: 'Apply color tint overlay to images', category: 'Effects' },
|
|
145
|
+
negate: { description: 'Invert/negate image colors', category: 'Effects' },
|
|
146
|
+
normalize: { description: 'Normalize image levels and contrast', category: 'Effects' },
|
|
147
|
+
median: { description: 'Apply median filter for noise reduction', category: 'Effects' },
|
|
148
|
+
// Adjustment Commands
|
|
149
|
+
brightness: { description: 'Adjust image brightness levels', category: 'Adjustments' },
|
|
150
|
+
contrast: { description: 'Adjust image contrast', category: 'Adjustments' },
|
|
151
|
+
saturation: { description: 'Adjust color saturation intensity', category: 'Adjustments' },
|
|
152
|
+
hue: { description: 'Adjust color hue/tone', category: 'Adjustments' },
|
|
153
|
+
gamma: { description: 'Apply gamma correction to images', category: 'Adjustments' },
|
|
154
|
+
modulate: { description: 'Modulate brightness, saturation, and hue together', category: 'Adjustments' },
|
|
155
|
+
// Composition Commands
|
|
156
|
+
watermark: { description: 'Add text or image watermarks', category: 'Composition' },
|
|
157
|
+
thumbnail: { description: 'Generate thumbnails with smart cropping', category: 'Composition' },
|
|
158
|
+
border: { description: 'Add decorative borders to images', category: 'Composition' },
|
|
159
|
+
composite: { description: 'Composite/layer multiple images together', category: 'Composition' },
|
|
160
|
+
overlay: { description: 'Overlay images on top of each other with blending', category: 'Composition' },
|
|
161
|
+
mask: { description: 'Apply alpha mask to images', category: 'Composition' },
|
|
162
|
+
flatten: { description: 'Flatten transparent image layers', category: 'Composition' },
|
|
163
|
+
// Advanced Commands
|
|
164
|
+
convolve: { description: 'Apply custom convolution kernel filter', category: 'Advanced' },
|
|
165
|
+
recomb: { description: 'Recombine and remix color channels', category: 'Advanced' },
|
|
166
|
+
metadata: { description: 'View or edit image EXIF metadata', category: 'Advanced' },
|
|
167
|
+
histogram: { description: 'Generate image histogram data', category: 'Advanced' },
|
|
168
|
+
stats: { description: 'Get detailed image statistics', category: 'Advanced' },
|
|
169
|
+
},
|
|
170
|
+
video: {
|
|
171
|
+
compress: { description: 'Compress video files with quality presets', category: 'Processing' },
|
|
172
|
+
transcode: { description: 'Convert video to different codec/format (H.264, H.265, VP9)', category: 'Processing' },
|
|
173
|
+
trim: { description: 'Trim/cut video by time range or duration', category: 'Editing' },
|
|
174
|
+
resize: { description: 'Resize video dimensions and resolution', category: 'Transform' },
|
|
175
|
+
merge: { description: 'Merge/concatenate multiple video files', category: 'Editing' },
|
|
176
|
+
extract: { description: 'Extract audio track or video frames', category: 'Extraction' },
|
|
177
|
+
subtitle: { description: 'Add or extract video subtitles', category: 'Editing' },
|
|
178
|
+
thumbnail: { description: 'Generate video thumbnail at timestamp', category: 'Extraction' },
|
|
179
|
+
metadata: { description: 'View or edit video metadata', category: 'Info' },
|
|
180
|
+
},
|
|
181
|
+
audio: {
|
|
182
|
+
convert: { description: 'Convert audio between formats (MP3, AAC, WAV, FLAC)', category: 'Processing' },
|
|
183
|
+
normalize: { description: 'Normalize audio volume levels', category: 'Processing' },
|
|
184
|
+
trim: { description: 'Trim audio by time range', category: 'Editing' },
|
|
185
|
+
merge: { description: 'Merge multiple audio files into one', category: 'Editing' },
|
|
186
|
+
extract: { description: 'Extract audio from video files', category: 'Extraction' },
|
|
187
|
+
fade: { description: 'Apply fade in/out effects', category: 'Effects' },
|
|
188
|
+
volume: { description: 'Adjust audio volume levels', category: 'Adjustments' },
|
|
189
|
+
metadata: { description: 'View or edit audio metadata/tags', category: 'Info' },
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,YAAY,SA0BrB,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as os from 'os';
|
|
5
|
+
import { getHistory } from './history.js';
|
|
6
|
+
const STATS_FILE = path.join(os.homedir(), '.mediaproc', 'stats.json');
|
|
7
|
+
export const statsCommand = new Command()
|
|
8
|
+
.name('stats')
|
|
9
|
+
.description('Show MediaProc usage statistics')
|
|
10
|
+
.option('-p, --plugin <name>', 'Show stats for specific plugin')
|
|
11
|
+
.option('--period <days>', 'Time period in days', '30')
|
|
12
|
+
.option('--reset', 'Reset all statistics')
|
|
13
|
+
.option('--json', 'Output as JSON')
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
if (options.reset) {
|
|
16
|
+
resetStats();
|
|
17
|
+
console.log('\nā Statistics reset\n');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const stats = calculateStats(parseInt(options.period));
|
|
21
|
+
if (options.json) {
|
|
22
|
+
console.log(JSON.stringify(stats, null, 2));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (options.plugin) {
|
|
26
|
+
displayPluginStats(options.plugin, stats);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
displayOverallStats(stats, parseInt(options.period));
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
function calculateStats(days) {
|
|
33
|
+
const history = getHistory();
|
|
34
|
+
const cutoff = Date.now() - (days * 24 * 60 * 60 * 1000);
|
|
35
|
+
const recentHistory = history.filter(entry => entry.timestamp >= cutoff);
|
|
36
|
+
const pluginUsage = {};
|
|
37
|
+
const commandUsage = {};
|
|
38
|
+
let totalTime = 0;
|
|
39
|
+
let successCount = 0;
|
|
40
|
+
recentHistory.forEach(entry => {
|
|
41
|
+
const plugin = entry.command.split(' ')[0];
|
|
42
|
+
pluginUsage[plugin] = (pluginUsage[plugin] || 0) + 1;
|
|
43
|
+
commandUsage[entry.command] = (commandUsage[entry.command] || 0) + 1;
|
|
44
|
+
if (entry.duration) {
|
|
45
|
+
totalTime += entry.duration;
|
|
46
|
+
}
|
|
47
|
+
if (entry.success) {
|
|
48
|
+
successCount++;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return {
|
|
52
|
+
totalFiles: recentHistory.length,
|
|
53
|
+
totalTime,
|
|
54
|
+
storageSaved: 0, // Would need to track this separately
|
|
55
|
+
pluginUsage,
|
|
56
|
+
commandUsage,
|
|
57
|
+
successRate: recentHistory.length > 0 ? (successCount / recentHistory.length) * 100 : 0,
|
|
58
|
+
lastUpdated: Date.now()
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function displayOverallStats(stats, days) {
|
|
62
|
+
console.log('\nš MediaProc Statistics\n');
|
|
63
|
+
console.log('ā'.repeat(60));
|
|
64
|
+
console.log(`\nPeriod: Last ${days} days\n`);
|
|
65
|
+
console.log('š Overview:');
|
|
66
|
+
console.log(` Total files processed: ${stats.totalFiles.toLocaleString()}`);
|
|
67
|
+
console.log(` Success rate: ${stats.successRate.toFixed(1)}%`);
|
|
68
|
+
console.log(` Total processing time: ${formatDuration(stats.totalTime)}`);
|
|
69
|
+
if (stats.totalFiles > 0) {
|
|
70
|
+
console.log(` Average per file: ${formatDuration(stats.totalTime / stats.totalFiles)}`);
|
|
71
|
+
}
|
|
72
|
+
if (stats.storageSaved > 0) {
|
|
73
|
+
console.log(` Storage saved: ${formatBytes(stats.storageSaved)}`);
|
|
74
|
+
}
|
|
75
|
+
// Plugin usage
|
|
76
|
+
const topPlugins = Object.entries(stats.pluginUsage)
|
|
77
|
+
.sort((a, b) => b[1] - a[1])
|
|
78
|
+
.slice(0, 5);
|
|
79
|
+
if (topPlugins.length > 0) {
|
|
80
|
+
console.log('\nš Most Used Plugins:\n');
|
|
81
|
+
topPlugins.forEach(([plugin, count], index) => {
|
|
82
|
+
const percentage = (count / stats.totalFiles) * 100;
|
|
83
|
+
const bar = 'ā'.repeat(Math.ceil(percentage / 5));
|
|
84
|
+
console.log(`${index + 1}. ${plugin.padEnd(15)} ${bar} ${count} (${percentage.toFixed(1)}%)`);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// Command usage
|
|
88
|
+
const topCommands = Object.entries(stats.commandUsage)
|
|
89
|
+
.sort((a, b) => b[1] - a[1])
|
|
90
|
+
.slice(0, 5);
|
|
91
|
+
if (topCommands.length > 0) {
|
|
92
|
+
console.log('\nā” Most Used Commands:\n');
|
|
93
|
+
topCommands.forEach(([command, count], index) => {
|
|
94
|
+
console.log(`${index + 1}. ${command.padEnd(25)} ${count} uses`);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
console.log('\n' + 'ā'.repeat(60));
|
|
98
|
+
console.log('\nš” Commands:');
|
|
99
|
+
console.log(' mediaproc stats --plugin <name> - Plugin-specific stats');
|
|
100
|
+
console.log(' mediaproc stats --period <days> - Change time period');
|
|
101
|
+
console.log(' mediaproc stats --reset - Reset statistics\n');
|
|
102
|
+
}
|
|
103
|
+
function displayPluginStats(plugin, stats) {
|
|
104
|
+
const pluginCount = stats.pluginUsage[plugin] || 0;
|
|
105
|
+
if (pluginCount === 0) {
|
|
106
|
+
console.log(`\nā No usage data for plugin "${plugin}"\n`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
console.log(`\nš ${plugin.charAt(0).toUpperCase() + plugin.slice(1)} Plugin Statistics\n`);
|
|
110
|
+
console.log('ā'.repeat(60));
|
|
111
|
+
console.log(`\nTotal uses: ${pluginCount}`);
|
|
112
|
+
console.log(`Percentage of total: ${((pluginCount / stats.totalFiles) * 100).toFixed(1)}%`);
|
|
113
|
+
// Commands for this plugin
|
|
114
|
+
const pluginCommands = Object.entries(stats.commandUsage)
|
|
115
|
+
.filter(([cmd]) => cmd.startsWith(plugin))
|
|
116
|
+
.sort((a, b) => b[1] - a[1]);
|
|
117
|
+
if (pluginCommands.length > 0) {
|
|
118
|
+
console.log('\nā” Command Usage:\n');
|
|
119
|
+
pluginCommands.forEach(([command, count], index) => {
|
|
120
|
+
const commandName = command.replace(`${plugin} `, '');
|
|
121
|
+
const percentage = (count / pluginCount) * 100;
|
|
122
|
+
console.log(`${index + 1}. ${commandName.padEnd(20)} ${count} (${percentage.toFixed(1)}%)`);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
console.log('\n' + 'ā'.repeat(60) + '\n');
|
|
126
|
+
}
|
|
127
|
+
function resetStats() {
|
|
128
|
+
try {
|
|
129
|
+
if (fs.existsSync(STATS_FILE)) {
|
|
130
|
+
fs.unlinkSync(STATS_FILE);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.error('Error resetting stats:', error);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function formatDuration(ms) {
|
|
138
|
+
if (ms < 1000)
|
|
139
|
+
return `${ms}ms`;
|
|
140
|
+
if (ms < 60000)
|
|
141
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
142
|
+
if (ms < 3600000)
|
|
143
|
+
return `${(ms / 60000).toFixed(1)}m`;
|
|
144
|
+
return `${(ms / 3600000).toFixed(1)}h`;
|
|
145
|
+
}
|
|
146
|
+
function formatBytes(bytes) {
|
|
147
|
+
if (bytes < 1024)
|
|
148
|
+
return `${bytes}B`;
|
|
149
|
+
if (bytes < 1024 * 1024)
|
|
150
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
151
|
+
if (bytes < 1024 * 1024 * 1024)
|
|
152
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
153
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)}GB`;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,eAAe,SAKxB,CAAC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as os from 'os';
|
|
5
|
+
const TEMPLATES_FILE = path.join(os.homedir(), '.mediaproc', 'templates.json');
|
|
6
|
+
export const templateCommand = new Command()
|
|
7
|
+
.name('template')
|
|
8
|
+
.description('Manage command templates')
|
|
9
|
+
.action(() => {
|
|
10
|
+
templateCommand.help();
|
|
11
|
+
});
|
|
12
|
+
// Save template
|
|
13
|
+
templateCommand
|
|
14
|
+
.command('save')
|
|
15
|
+
.description('Save command as template')
|
|
16
|
+
.argument('<name>', 'Template name')
|
|
17
|
+
.argument('<command>', 'Command template (use {param} for parameters)')
|
|
18
|
+
.option('-d, --description <text>', 'Template description')
|
|
19
|
+
.action(async (name, command, options) => {
|
|
20
|
+
const templates = loadTemplates();
|
|
21
|
+
if (templates[name]) {
|
|
22
|
+
console.log(`\nā ļø Template "${name}" already exists. Use --force to overwrite\n`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// Extract parameters from command (anything in {braces})
|
|
26
|
+
const params = command.match(/\{([^}]+)\}/g)?.map(p => p.slice(1, -1)) || [];
|
|
27
|
+
templates[name] = {
|
|
28
|
+
name,
|
|
29
|
+
command,
|
|
30
|
+
description: options.description || '',
|
|
31
|
+
parameters: params,
|
|
32
|
+
createdAt: Date.now()
|
|
33
|
+
};
|
|
34
|
+
saveTemplates(templates);
|
|
35
|
+
console.log(`\nā Template "${name}" saved\n`);
|
|
36
|
+
console.log(`Command: ${command}`);
|
|
37
|
+
if (params.length > 0) {
|
|
38
|
+
console.log(`Parameters: ${params.join(', ')}`);
|
|
39
|
+
}
|
|
40
|
+
console.log('');
|
|
41
|
+
});
|
|
42
|
+
// Run template
|
|
43
|
+
templateCommand
|
|
44
|
+
.command('run')
|
|
45
|
+
.description('Run a saved template')
|
|
46
|
+
.argument('<name>', 'Template name')
|
|
47
|
+
.argument('[args...]', 'Template arguments (key=value)')
|
|
48
|
+
.action(async (name, args) => {
|
|
49
|
+
const templates = loadTemplates();
|
|
50
|
+
const template = templates[name];
|
|
51
|
+
if (!template) {
|
|
52
|
+
console.log(`\nā Template "${name}" not found\n`);
|
|
53
|
+
console.log('š” List templates with: mediaproc template list\n');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Parse arguments
|
|
57
|
+
const params = {};
|
|
58
|
+
args.forEach(arg => {
|
|
59
|
+
const [key, value] = arg.split('=');
|
|
60
|
+
if (key && value) {
|
|
61
|
+
params[key] = value;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
// Replace parameters in command
|
|
65
|
+
let command = template.command;
|
|
66
|
+
template.parameters.forEach(param => {
|
|
67
|
+
if (!params[param]) {
|
|
68
|
+
console.log(`\nā Missing required parameter: ${param}\n`);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
command = command.replace(`{${param}}`, params[param]);
|
|
72
|
+
});
|
|
73
|
+
console.log(`\nš Running template "${name}":\n`);
|
|
74
|
+
console.log(` ${command}\n`);
|
|
75
|
+
console.log('ā ļø Note: Actual command execution requires full implementation\n');
|
|
76
|
+
console.log(`Run manually: mediaproc ${command}\n`);
|
|
77
|
+
});
|
|
78
|
+
// List templates
|
|
79
|
+
templateCommand
|
|
80
|
+
.command('list')
|
|
81
|
+
.description('List all saved templates')
|
|
82
|
+
.option('--json', 'Output as JSON')
|
|
83
|
+
.action(async (options) => {
|
|
84
|
+
const templates = loadTemplates();
|
|
85
|
+
const templateList = Object.values(templates);
|
|
86
|
+
if (templateList.length === 0) {
|
|
87
|
+
console.log('\nš¦ No templates saved\n');
|
|
88
|
+
console.log('š” Save a template with: mediaproc template save <name> <command>\n');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (options.json) {
|
|
92
|
+
console.log(JSON.stringify(templateList, null, 2));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
console.log('\nš Saved Templates\n');
|
|
96
|
+
console.log('ā'.repeat(70));
|
|
97
|
+
templateList.forEach((template, index) => {
|
|
98
|
+
console.log(`\n${index + 1}. \x1b[36m${template.name}\x1b[0m`);
|
|
99
|
+
if (template.description) {
|
|
100
|
+
console.log(` ${template.description}`);
|
|
101
|
+
}
|
|
102
|
+
console.log(` Command: ${template.command}`);
|
|
103
|
+
if (template.parameters.length > 0) {
|
|
104
|
+
console.log(` Parameters: ${template.parameters.join(', ')}`);
|
|
105
|
+
}
|
|
106
|
+
console.log(` Created: ${new Date(template.createdAt).toLocaleDateString()}`);
|
|
107
|
+
});
|
|
108
|
+
console.log('\n' + 'ā'.repeat(70));
|
|
109
|
+
console.log('\nš” Run a template: mediaproc template run <name> [args]\n');
|
|
110
|
+
});
|
|
111
|
+
// Delete template
|
|
112
|
+
templateCommand
|
|
113
|
+
.command('delete')
|
|
114
|
+
.description('Delete a saved template')
|
|
115
|
+
.argument('<name>', 'Template name')
|
|
116
|
+
.action(async (name) => {
|
|
117
|
+
const templates = loadTemplates();
|
|
118
|
+
if (!templates[name]) {
|
|
119
|
+
console.log(`\nā Template "${name}" not found\n`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
delete templates[name];
|
|
123
|
+
saveTemplates(templates);
|
|
124
|
+
console.log(`\nā Template "${name}" deleted\n`);
|
|
125
|
+
});
|
|
126
|
+
// Show template details
|
|
127
|
+
templateCommand
|
|
128
|
+
.command('show')
|
|
129
|
+
.description('Show template details')
|
|
130
|
+
.argument('<name>', 'Template name')
|
|
131
|
+
.action(async (name) => {
|
|
132
|
+
const templates = loadTemplates();
|
|
133
|
+
const template = templates[name];
|
|
134
|
+
if (!template) {
|
|
135
|
+
console.log(`\nā Template "${name}" not found\n`);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
console.log('\nš Template Details\n');
|
|
139
|
+
console.log('ā'.repeat(60));
|
|
140
|
+
console.log(`\nName: ${template.name}`);
|
|
141
|
+
if (template.description) {
|
|
142
|
+
console.log(`Description: ${template.description}`);
|
|
143
|
+
}
|
|
144
|
+
console.log(`Command: ${template.command}`);
|
|
145
|
+
if (template.parameters.length > 0) {
|
|
146
|
+
console.log('\nParameters:');
|
|
147
|
+
template.parameters.forEach(param => {
|
|
148
|
+
console.log(` ⢠${param}`);
|
|
149
|
+
});
|
|
150
|
+
console.log('\nExample usage:');
|
|
151
|
+
const exampleArgs = template.parameters.map(p => `${p}=value`).join(' ');
|
|
152
|
+
console.log(` mediaproc template run ${template.name} ${exampleArgs}`);
|
|
153
|
+
}
|
|
154
|
+
console.log('\n' + 'ā'.repeat(60) + '\n');
|
|
155
|
+
});
|
|
156
|
+
function loadTemplates() {
|
|
157
|
+
try {
|
|
158
|
+
ensureTemplatesDirectory();
|
|
159
|
+
if (!fs.existsSync(TEMPLATES_FILE)) {
|
|
160
|
+
return {};
|
|
161
|
+
}
|
|
162
|
+
const data = fs.readFileSync(TEMPLATES_FILE, 'utf-8');
|
|
163
|
+
return JSON.parse(data);
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
return {};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function saveTemplates(templates) {
|
|
170
|
+
try {
|
|
171
|
+
ensureTemplatesDirectory();
|
|
172
|
+
fs.writeFileSync(TEMPLATES_FILE, JSON.stringify(templates, null, 2));
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
console.error('Error saving templates:', error);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function ensureTemplatesDirectory() {
|
|
179
|
+
const dir = path.dirname(TEMPLATES_FILE);
|
|
180
|
+
if (!fs.existsSync(dir)) {
|
|
181
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,YAAY,SAsDrB,CAAC"}
|