-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbatch-command.ts
More file actions
65 lines (59 loc) · 3.46 KB
/
batch-command.ts
File metadata and controls
65 lines (59 loc) · 3.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { BatchProcessor, ConfigManager } from '@subzilla/core';
import { IBatchCommandOptions, ICommandDefinition } from '@subzilla/types';
import { BATCH_OPTIONS } from '../constants/options';
import { createStripOptions } from '../utils/strip-options';
import { BaseCommandCreator } from './base-command';
export class BatchCommandCreator extends BaseCommandCreator<IBatchCommandOptions> {
protected getDefinition(): ICommandDefinition<IBatchCommandOptions> {
return {
name: 'batch',
description: 'Convert multiple subtitle files to UTF-8',
arguments: [
{
name: 'pattern',
description: 'glob pattern for input files (e.g., "**/*.srt")',
},
],
options: BATCH_OPTIONS,
action: async (pattern: string, options: IBatchCommandOptions): Promise<void> => {
try {
const config = options.loadedConfig || (await ConfigManager.loadConfig());
const outputOptions = {
common: {
strip: createStripOptions(options, config),
backupOriginal: options.backup ?? config.output?.createBackup,
overwriteBackup: options.overwriteBackup ?? config.output?.overwriteBackup,
bom: options.bom ?? config.output?.bom,
lineEndings: options.lineEndings ?? config.output?.lineEndings,
overwriteInput: options.overwriteInput ?? config.output?.overwriteInput,
overwriteExisting: options.overwriteExisting ?? config.output?.overwriteExisting,
retryCount: options.retryCount
? parseInt(options.retryCount, 10)
: config.batch?.retryCount,
retryDelay: options.retryDelay
? parseInt(options.retryDelay, 10)
: config.batch?.retryDelay,
},
batch: {
outputDir: options.outputDir ?? config.output?.directory,
recursive: options.recursive ?? config.batch?.recursive ?? false,
parallel: options.parallel ?? config.batch?.parallel ?? false,
skipExisting: options.skipExisting ?? config.batch?.skipExisting ?? false,
maxDepth: options.maxDepth ? parseInt(options.maxDepth, 10) : config.batch?.maxDepth,
includeDirectories: options.includeDirs ?? config.batch?.includeDirectories,
excludeDirectories: options.excludeDirs ?? config.batch?.excludeDirectories,
preserveStructure: options.preserveStructure ?? config.batch?.preserveStructure ?? false,
chunkSize: options.chunkSize ?? config.batch?.chunkSize,
},
};
console.log('🧬 Output options:', outputOptions);
const batchProcessor = new BatchProcessor();
await batchProcessor.processBatch(pattern, outputOptions);
} catch (error) {
console.error('❌ Error:', (error as Error).message);
process.exit(1);
}
},
};
}
}