@mediaproc/image 1.4.7 → 1.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/watermark.d.ts.map +1 -1
- package/dist/commands/watermark.js +23 -20
- package/dist/commands/watermark.js.map +1 -1
- package/package.json +6 -6
- package/dist/commands/auto-enhance.d.ts +0 -3
- package/dist/commands/auto-enhance.d.ts.map +0 -1
- package/dist/commands/auto-enhance.js +0 -172
- package/dist/commands/auto-enhance.js.map +0 -1
- package/dist/commands/auto-orient.d.ts +0 -3
- package/dist/commands/auto-orient.d.ts.map +0 -1
- package/dist/commands/auto-orient.js +0 -131
- package/dist/commands/auto-orient.js.map +0 -1
- package/dist/commands/grid.d.ts +0 -3
- package/dist/commands/grid.d.ts.map +0 -1
- package/dist/commands/grid.js +0 -230
- package/dist/commands/grid.js.map +0 -1
- package/dist/commands/smart-crop.d.ts +0 -3
- package/dist/commands/smart-crop.d.ts.map +0 -1
- package/dist/commands/smart-crop.js +0 -158
- package/dist/commands/smart-crop.js.map +0 -1
- package/dist/commands/stack.d.ts +0 -3
- package/dist/commands/stack.d.ts.map +0 -1
- package/dist/commands/stack.js +0 -242
- package/dist/commands/stack.js.map +0 -1
- package/dist/utils/branding.d.ts +0 -6
- package/dist/utils/branding.d.ts.map +0 -1
- package/dist/utils/branding.js +0 -45
- package/dist/utils/branding.js.map +0 -1
- package/dist/utils/colorUtils.d.ts +0 -7
- package/dist/utils/colorUtils.d.ts.map +0 -1
- package/dist/utils/colorUtils.js +0 -82
- package/dist/utils/colorUtils.js.map +0 -1
- package/dist/utils/explainFormatter.d.ts +0 -2
- package/dist/utils/explainFormatter.d.ts.map +0 -1
- package/dist/utils/explainFormatter.js +0 -4
- package/dist/utils/explainFormatter.js.map +0 -1
- package/dist/utils/helpFormatter.d.ts +0 -63
- package/dist/utils/helpFormatter.d.ts.map +0 -1
- package/dist/utils/helpFormatter.js +0 -171
- package/dist/utils/helpFormatter.js.map +0 -1
- package/dist/utils/pathValidator.d.ts +0 -48
- package/dist/utils/pathValidator.d.ts.map +0 -1
- package/dist/utils/pathValidator.js +0 -183
- package/dist/utils/pathValidator.js.map +0 -1
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Standardized Help Formatter for MediaProc Image CLI
|
|
3
|
-
* Creates consistent, beautiful help displays for all image commands
|
|
4
|
-
*/
|
|
5
|
-
import chalk from 'chalk';
|
|
6
|
-
/**
|
|
7
|
-
* Create a gradient-like effect using chalk
|
|
8
|
-
*/
|
|
9
|
-
function createGradientText(text, startColor) {
|
|
10
|
-
// Simple gradient simulation using chalk colors
|
|
11
|
-
return chalk.hex(startColor)(text);
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Create a box around content
|
|
15
|
-
*/
|
|
16
|
-
function createBox(content, borderColor = 'cyan') {
|
|
17
|
-
const lines = content.split('\n');
|
|
18
|
-
const maxLength = Math.max(...lines.map(line => stripAnsi(line).length));
|
|
19
|
-
const width = Math.min(maxLength + 4, 100);
|
|
20
|
-
const colorFn = chalk[borderColor];
|
|
21
|
-
const topBorder = colorFn('╭' + '─'.repeat(width - 2) + '╮');
|
|
22
|
-
const bottomBorder = colorFn('╰' + '─'.repeat(width - 2) + '╯');
|
|
23
|
-
const boxedLines = lines.map(line => {
|
|
24
|
-
const stripped = stripAnsi(line);
|
|
25
|
-
const padding = ' '.repeat(Math.max(0, width - stripped.length - 4));
|
|
26
|
-
return colorFn('│ ') + line + padding + colorFn(' │');
|
|
27
|
-
});
|
|
28
|
-
return '\n' + topBorder + '\n' + boxedLines.join('\n') + '\n' + bottomBorder + '\n';
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Strip ANSI codes from string for length calculation
|
|
32
|
-
*/
|
|
33
|
-
function stripAnsi(str) {
|
|
34
|
-
return str.replace(/\x1b\[[0-9;]*m/g, '');
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Create standardized help display for commands
|
|
38
|
-
*/
|
|
39
|
-
export function createStandardHelp(config) {
|
|
40
|
-
let helpContent = '';
|
|
41
|
-
// Header
|
|
42
|
-
helpContent += createGradientText(`${config.emoji} MediaProc Image - ${config.commandName} Command`, '#4facfe') + '\n\n';
|
|
43
|
-
// Description
|
|
44
|
-
helpContent += chalk.white(config.description) + '\n\n';
|
|
45
|
-
// Usage
|
|
46
|
-
helpContent += chalk.cyan.bold('Usage:') + '\n';
|
|
47
|
-
config.usage.forEach(usage => {
|
|
48
|
-
helpContent += chalk.white(` ${chalk.magenta('mediaproc')} ${chalk.cyan('image')} ${usage}`) + '\n';
|
|
49
|
-
});
|
|
50
|
-
helpContent += '\n';
|
|
51
|
-
// Options
|
|
52
|
-
helpContent += chalk.cyan.bold('Options:') + '\n';
|
|
53
|
-
// Check if help flag already exists
|
|
54
|
-
const hasHelpFlag = config.options && config.options.some(option => option.flag.includes('-h') || option.flag.includes('--help'));
|
|
55
|
-
// Add custom options first
|
|
56
|
-
if (config.options && config.options.length > 0) {
|
|
57
|
-
config.options.forEach(option => {
|
|
58
|
-
const flagPart = chalk.yellow(option.flag.padEnd(30));
|
|
59
|
-
const descPart = chalk.gray(option.description);
|
|
60
|
-
helpContent += ` ${flagPart} ${descPart}\n`;
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
// Add the global help flag only if it doesn't already exist
|
|
64
|
-
if (!hasHelpFlag) {
|
|
65
|
-
helpContent += ` ${chalk.yellow('-h, --help'.padEnd(30))} ${chalk.gray('Show this help message')}\n`;
|
|
66
|
-
}
|
|
67
|
-
helpContent += '\n';
|
|
68
|
-
// Examples
|
|
69
|
-
if (config.examples && config.examples.length > 0) {
|
|
70
|
-
helpContent += chalk.cyan.bold('Examples:') + '\n';
|
|
71
|
-
config.examples.forEach(example => {
|
|
72
|
-
// Check if command already starts with 'mediaproc image', if not add it
|
|
73
|
-
const command = example.command.startsWith('mediaproc image ')
|
|
74
|
-
? example.command
|
|
75
|
-
: `mediaproc image ${example.command}`;
|
|
76
|
-
const formattedCommand = command
|
|
77
|
-
.replace(/^mediaproc /, `${chalk.magenta('mediaproc')} `)
|
|
78
|
-
.replace(/image /, `${chalk.cyan('image')} `);
|
|
79
|
-
helpContent += chalk.white(` ${formattedCommand}`) + '\n';
|
|
80
|
-
helpContent += chalk.dim(` → ${example.description}`) + '\n\n';
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
// Additional sections
|
|
84
|
-
if (config.additionalSections && config.additionalSections.length > 0) {
|
|
85
|
-
config.additionalSections.forEach(section => {
|
|
86
|
-
helpContent += chalk.hex('#00d2d3').bold(`💡 ${section.title}:`) + '\n';
|
|
87
|
-
section.items.forEach(item => {
|
|
88
|
-
helpContent += chalk.hex('#95afc0')(` • ${item}`) + '\n';
|
|
89
|
-
});
|
|
90
|
-
helpContent += '\n';
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
// Tips
|
|
94
|
-
if (config.tips && config.tips.length > 0) {
|
|
95
|
-
config.tips.forEach(tip => {
|
|
96
|
-
helpContent += chalk.yellow(`💡 Tip: ${tip}`) + '\n';
|
|
97
|
-
});
|
|
98
|
-
helpContent += '\n';
|
|
99
|
-
}
|
|
100
|
-
// Footer
|
|
101
|
-
helpContent += chalk.dim(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`) + '\n';
|
|
102
|
-
helpContent += chalk.hex('#636e72')(`🖼️ MediaProc Image Plugin • Powered by Sharp • High Performance`);
|
|
103
|
-
console.log(createBox(helpContent, 'cyan'));
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Quick help display for commands with minimal options
|
|
107
|
-
*/
|
|
108
|
-
export function createQuickHelp(commandName, emoji, description, usage, options) {
|
|
109
|
-
let helpContent = '';
|
|
110
|
-
helpContent += createGradientText(`${emoji} ${commandName.toUpperCase()} COMMAND`, '#4facfe') + '\n\n';
|
|
111
|
-
helpContent += chalk.white(description) + '\n\n';
|
|
112
|
-
helpContent += chalk.cyan.bold('Usage:') + '\n';
|
|
113
|
-
helpContent += chalk.white(` ${chalk.magenta('mediaproc')} ${chalk.cyan('image')} ${usage}`) + '\n\n';
|
|
114
|
-
if (options.length > 0) {
|
|
115
|
-
helpContent += chalk.cyan.bold('Options:') + '\n';
|
|
116
|
-
options.forEach(option => {
|
|
117
|
-
helpContent += chalk.gray(` ${option}`) + '\n';
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
console.log(createBox(helpContent, 'cyan'));
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Create error help display
|
|
124
|
-
*/
|
|
125
|
-
export function createErrorHelp(commandName, error, suggestion) {
|
|
126
|
-
let helpContent = '';
|
|
127
|
-
helpContent += chalk.red.bold(`❌ ${commandName.toUpperCase()} ERROR`) + '\n\n';
|
|
128
|
-
helpContent += chalk.white(error) + '\n';
|
|
129
|
-
if (suggestion) {
|
|
130
|
-
helpContent += '\n' + chalk.yellow(`💡 Suggestion: ${suggestion}`) + '\n';
|
|
131
|
-
}
|
|
132
|
-
helpContent += '\n' + chalk.gray(`Run: `) + chalk.cyan(`mediaproc image ${commandName} --help`) + chalk.gray(` for more information`);
|
|
133
|
-
console.log(createBox(helpContent, 'red'));
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Create success message display
|
|
137
|
-
*/
|
|
138
|
-
export function createSuccessMessage(message, details) {
|
|
139
|
-
let content = chalk.green.bold('✓ ' + message) + '\n';
|
|
140
|
-
if (details && details.length > 0) {
|
|
141
|
-
content += '\n';
|
|
142
|
-
details.forEach(detail => {
|
|
143
|
-
content += chalk.dim(` ${detail}`) + '\n';
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
console.log(content);
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Create info message display
|
|
150
|
-
*/
|
|
151
|
-
export function createInfoMessage(title, items) {
|
|
152
|
-
let content = chalk.blue.bold('ℹ ' + title) + '\n';
|
|
153
|
-
items.forEach(item => {
|
|
154
|
-
content += chalk.gray(` • ${item}`) + '\n';
|
|
155
|
-
});
|
|
156
|
-
console.log(content);
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Create warning message display
|
|
160
|
-
*/
|
|
161
|
-
export function createWarningMessage(message, details) {
|
|
162
|
-
let content = chalk.yellow.bold('⚠ ' + message) + '\n';
|
|
163
|
-
if (details && details.length > 0) {
|
|
164
|
-
content += '\n';
|
|
165
|
-
details.forEach(detail => {
|
|
166
|
-
content += chalk.dim(` ${detail}`) + '\n';
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
console.log(content);
|
|
170
|
-
}
|
|
171
|
-
//# sourceMappingURL=helpFormatter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpFormatter.js","sourceRoot":"","sources":["../../src/utils/helpFormatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Supported image file extensions
|
|
3
|
-
*/
|
|
4
|
-
export declare const IMAGE_EXTENSIONS: string[];
|
|
5
|
-
/**
|
|
6
|
-
* Parse input path and return array of files
|
|
7
|
-
* Supports:
|
|
8
|
-
* - Single file: "image.jpg"
|
|
9
|
-
* - Multiple files with commas: "image1.jpg,image2.jpg,image3.jpg"
|
|
10
|
-
* - Directory: "input-images/" (finds all matching files)
|
|
11
|
-
*/
|
|
12
|
-
export declare function parseInputPaths(inputPath: string, allowedExtensions?: string[]): string[];
|
|
13
|
-
/**
|
|
14
|
-
* Resolve output paths for input files
|
|
15
|
-
*
|
|
16
|
-
* Logic:
|
|
17
|
-
* 1. Single file + output has extension (e.g., output.jpg) = Use exact file path
|
|
18
|
-
* 2. Multiple files + output has extension = Invalid (error)
|
|
19
|
-
* 3. No output provided = Use current directory
|
|
20
|
-
* 4. Output directory provided = Use that directory
|
|
21
|
-
*
|
|
22
|
-
* @param inputFiles - Array of input file paths
|
|
23
|
-
* @param outputPath - Output path (file or directory, or undefined for current dir)
|
|
24
|
-
* @param suffix - Suffix to add to filenames (default: empty)
|
|
25
|
-
* @param newExtension - New extension for output files (default: same as input)
|
|
26
|
-
*/
|
|
27
|
-
export declare function resolveOutputPaths(inputFiles: string[], outputPath: string | undefined, options?: {
|
|
28
|
-
suffix?: string;
|
|
29
|
-
newExtension?: string;
|
|
30
|
-
}): Map<string, string>;
|
|
31
|
-
/**
|
|
32
|
-
* Validate input and output paths
|
|
33
|
-
* Returns validated input files, output directory, and any errors
|
|
34
|
-
*/
|
|
35
|
-
export declare function validatePaths(inputPath: string, outputPath: string | undefined, options?: {
|
|
36
|
-
allowedExtensions?: string[];
|
|
37
|
-
suffix?: string;
|
|
38
|
-
newExtension?: string;
|
|
39
|
-
}): {
|
|
40
|
-
inputFiles: string[];
|
|
41
|
-
outputPath: string | undefined;
|
|
42
|
-
errors: string[];
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Get file name from path
|
|
46
|
-
*/
|
|
47
|
-
export declare function getFileName(filePath: string): string;
|
|
48
|
-
//# sourceMappingURL=pathValidator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pathValidator.d.ts","sourceRoot":"","sources":["../../src/utils/pathValidator.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,eAAO,MAAM,gBAAgB,UAc5B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,iBAAiB,GAAE,MAAM,EAAqB,GAC7C,MAAM,EAAE,CA8BV;AAkCD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA6DrB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,GAAE;IACP,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL;IACD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CA2BA;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
/**
|
|
4
|
-
* Supported image file extensions
|
|
5
|
-
*/
|
|
6
|
-
export const IMAGE_EXTENSIONS = [
|
|
7
|
-
'.jpg',
|
|
8
|
-
'.jpeg',
|
|
9
|
-
'.png',
|
|
10
|
-
'.gif',
|
|
11
|
-
'.bmp',
|
|
12
|
-
'.webp',
|
|
13
|
-
'.tiff',
|
|
14
|
-
'.tif',
|
|
15
|
-
'.svg',
|
|
16
|
-
'.ico',
|
|
17
|
-
'.heic',
|
|
18
|
-
'.heif',
|
|
19
|
-
'.avif',
|
|
20
|
-
];
|
|
21
|
-
/**
|
|
22
|
-
* Parse input path and return array of files
|
|
23
|
-
* Supports:
|
|
24
|
-
* - Single file: "image.jpg"
|
|
25
|
-
* - Multiple files with commas: "image1.jpg,image2.jpg,image3.jpg"
|
|
26
|
-
* - Directory: "input-images/" (finds all matching files)
|
|
27
|
-
*/
|
|
28
|
-
export function parseInputPaths(inputPath, allowedExtensions = IMAGE_EXTENSIONS) {
|
|
29
|
-
const files = [];
|
|
30
|
-
// Split by comma for multiple files
|
|
31
|
-
const paths = inputPath.split(',').map(p => p.trim());
|
|
32
|
-
for (const p of paths) {
|
|
33
|
-
const resolvedPath = path.resolve(p);
|
|
34
|
-
// Check if path exists
|
|
35
|
-
if (!fs.existsSync(resolvedPath)) {
|
|
36
|
-
continue; // Skip non-existent paths
|
|
37
|
-
}
|
|
38
|
-
const stats = fs.statSync(resolvedPath);
|
|
39
|
-
if (stats.isFile()) {
|
|
40
|
-
// Check if file has allowed extension
|
|
41
|
-
const ext = path.extname(resolvedPath).toLowerCase();
|
|
42
|
-
if (allowedExtensions.includes(ext)) {
|
|
43
|
-
files.push(resolvedPath);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
else if (stats.isDirectory()) {
|
|
47
|
-
// Recursively find all files in directory
|
|
48
|
-
const dirFiles = findFilesInDirectory(resolvedPath, allowedExtensions);
|
|
49
|
-
files.push(...dirFiles);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return files;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Recursively find all files with allowed extensions in a directory
|
|
56
|
-
*/
|
|
57
|
-
function findFilesInDirectory(dir, allowedExtensions) {
|
|
58
|
-
const files = [];
|
|
59
|
-
try {
|
|
60
|
-
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
61
|
-
for (const entry of entries) {
|
|
62
|
-
const fullPath = path.join(dir, entry.name);
|
|
63
|
-
if (entry.isDirectory()) {
|
|
64
|
-
// Recursively search subdirectories
|
|
65
|
-
files.push(...findFilesInDirectory(fullPath, allowedExtensions));
|
|
66
|
-
}
|
|
67
|
-
else if (entry.isFile()) {
|
|
68
|
-
const ext = path.extname(fullPath).toLowerCase();
|
|
69
|
-
if (allowedExtensions.includes(ext)) {
|
|
70
|
-
files.push(fullPath);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
// Ignore directories that can't be read
|
|
77
|
-
}
|
|
78
|
-
return files;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Resolve output paths for input files
|
|
82
|
-
*
|
|
83
|
-
* Logic:
|
|
84
|
-
* 1. Single file + output has extension (e.g., output.jpg) = Use exact file path
|
|
85
|
-
* 2. Multiple files + output has extension = Invalid (error)
|
|
86
|
-
* 3. No output provided = Use current directory
|
|
87
|
-
* 4. Output directory provided = Use that directory
|
|
88
|
-
*
|
|
89
|
-
* @param inputFiles - Array of input file paths
|
|
90
|
-
* @param outputPath - Output path (file or directory, or undefined for current dir)
|
|
91
|
-
* @param suffix - Suffix to add to filenames (default: empty)
|
|
92
|
-
* @param newExtension - New extension for output files (default: same as input)
|
|
93
|
-
*/
|
|
94
|
-
export function resolveOutputPaths(inputFiles, outputPath, options = {}) {
|
|
95
|
-
const { suffix = '', newExtension } = options;
|
|
96
|
-
const outputMap = new Map();
|
|
97
|
-
// No input files - return empty map
|
|
98
|
-
if (inputFiles.length === 0) {
|
|
99
|
-
return outputMap;
|
|
100
|
-
}
|
|
101
|
-
// Determine output directory or file
|
|
102
|
-
let outputDir;
|
|
103
|
-
let isExplicitFile = false;
|
|
104
|
-
if (!outputPath) {
|
|
105
|
-
// No output provided - use current directory
|
|
106
|
-
outputDir = process.cwd();
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
const resolvedOutput = path.resolve(outputPath);
|
|
110
|
-
const outputExt = path.extname(resolvedOutput).toLowerCase();
|
|
111
|
-
if (outputExt) {
|
|
112
|
-
// Output has extension - it's a file path
|
|
113
|
-
if (inputFiles.length > 1) {
|
|
114
|
-
throw new Error('Cannot specify a file output path for multiple input files. Use a directory instead.');
|
|
115
|
-
}
|
|
116
|
-
// Single file with explicit output file
|
|
117
|
-
isExplicitFile = true;
|
|
118
|
-
outputDir = resolvedOutput;
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
// No extension - it's a directory path
|
|
122
|
-
outputDir = resolvedOutput;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
// Case 1: Single file with explicit output file path
|
|
126
|
-
if (isExplicitFile && inputFiles.length === 1) {
|
|
127
|
-
// Create parent directory if needed
|
|
128
|
-
const parentDir = path.dirname(outputDir);
|
|
129
|
-
if (!fs.existsSync(parentDir)) {
|
|
130
|
-
fs.mkdirSync(parentDir, { recursive: true });
|
|
131
|
-
}
|
|
132
|
-
outputMap.set(inputFiles[0], outputDir);
|
|
133
|
-
return outputMap;
|
|
134
|
-
}
|
|
135
|
-
// Case 2: Multiple files or directory output
|
|
136
|
-
// Create output directory if it doesn't exist
|
|
137
|
-
if (!fs.existsSync(outputDir)) {
|
|
138
|
-
fs.mkdirSync(outputDir, { recursive: true });
|
|
139
|
-
}
|
|
140
|
-
// Map each input file to output path
|
|
141
|
-
for (const inputFile of inputFiles) {
|
|
142
|
-
const inputParsed = path.parse(inputFile);
|
|
143
|
-
const ext = newExtension || inputParsed.ext;
|
|
144
|
-
const outputFilename = `${inputParsed.name}${suffix}${ext}`;
|
|
145
|
-
const outputFilePath = path.join(outputDir, outputFilename);
|
|
146
|
-
outputMap.set(inputFile, outputFilePath);
|
|
147
|
-
}
|
|
148
|
-
return outputMap;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Validate input and output paths
|
|
152
|
-
* Returns validated input files, output directory, and any errors
|
|
153
|
-
*/
|
|
154
|
-
export function validatePaths(inputPath, outputPath, options = {}) {
|
|
155
|
-
const { allowedExtensions = IMAGE_EXTENSIONS } = options;
|
|
156
|
-
const errors = [];
|
|
157
|
-
// Parse input files
|
|
158
|
-
const inputFiles = parseInputPaths(inputPath, allowedExtensions);
|
|
159
|
-
if (inputFiles.length === 0) {
|
|
160
|
-
errors.push(`No valid files found. Supported extensions: ${allowedExtensions.join(', ')}`);
|
|
161
|
-
}
|
|
162
|
-
// Validate output path if provided
|
|
163
|
-
if (outputPath) {
|
|
164
|
-
const resolvedOutput = path.resolve(outputPath);
|
|
165
|
-
const outputExt = path.extname(resolvedOutput).toLowerCase();
|
|
166
|
-
// If output has extension but multiple input files
|
|
167
|
-
if (outputExt && inputFiles.length > 1) {
|
|
168
|
-
errors.push('Cannot specify a file output path for multiple input files. Use a directory instead.');
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return {
|
|
172
|
-
inputFiles,
|
|
173
|
-
outputPath,
|
|
174
|
-
errors,
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Get file name from path
|
|
179
|
-
*/
|
|
180
|
-
export function getFileName(filePath) {
|
|
181
|
-
return path.basename(filePath);
|
|
182
|
-
}
|
|
183
|
-
//# sourceMappingURL=pathValidator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pathValidator.js","sourceRoot":"","sources":["../../src/utils/pathValidator.ts"],"names":[],"mappings":"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"}
|