polish-cli
Version:
AI-powered file organization for Obsidian with automatic markdown conversion
69 lines • 2.92 kB
JavaScript
export { FileType } from './types/index.js';
export { ConfigService } from './services/ConfigService.js';
export { ProfileManager } from './services/ProfileManager.js';
export { ClaudeService } from './services/ClaudeService.js';
export { FileScanner } from './modules/FileScanner.js';
export { FileProcessor } from './modules/FileProcessor.js';
export { MarkdownGenerator } from './modules/MarkdownGenerator.js';
export { ContentExtractor } from './modules/ContentExtractor.js';
import { ProfileManager } from './services/ProfileManager.js';
import { ConfigService } from './services/ConfigService.js';
// Main Polish class for programmatic use
export class Polish {
config;
profileManager;
profileName;
constructor(config, profileName) {
this.profileManager = new ProfileManager();
this.profileName = profileName;
if (config) {
const configService = new ConfigService();
this.config = { ...configService.getDefaultConfig(), ...config };
}
else {
// Will be loaded in loadConfig or organize methods
this.config = new ConfigService().getDefaultConfig();
}
}
async loadConfig() {
try {
await this.profileManager.initialize();
if (this.profileName) {
const profile = await this.profileManager.getProfile(this.profileName);
if (!profile) {
throw new Error(`Profile '${this.profileName}' not found`);
}
this.config = profile.config;
}
else {
this.config = await this.profileManager.getActiveConfig();
}
}
catch (error) {
console.warn('Could not load profile config, using defaults');
}
}
async organize(options = {}) {
// Ensure config is loaded
if (!this.config || this.config === new ConfigService().getDefaultConfig()) {
await this.loadConfig();
}
const { FileScanner } = await import('./modules/FileScanner.js');
const { FileProcessor } = await import('./modules/FileProcessor.js');
const { ClaudeService } = await import('./services/ClaudeService.js');
const claudeService = new ClaudeService(this.config.api);
const fileScanner = new FileScanner(this.config);
const fileProcessor = new FileProcessor(this.config, claudeService);
const sources = options.sources ?
options.sources.map(path => ({ path, includeSubfolders: true })) :
this.config.sources;
const files = await fileScanner.scan(sources);
return await fileProcessor.processFiles(files, {
dryRun: options.dryRun || false,
copy: options.copy || false,
batchSize: 10,
onProgress: options.onProgress,
});
}
}
//# sourceMappingURL=index.js.map