const { BaseCommand } = require('./base-command.js'); const InteropService = require('lib/services/InteropService.js'); const BaseModel = require('lib/BaseModel.js'); const { app } = require('./app.js'); const { _ } = require('lib/locale.js'); class Command extends BaseCommand { usage() { return 'export '; } description() { return _('Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.'); } options() { const service = new InteropService(); const formats = service .modules() .filter((m) => m.type === 'exporter') .map((m) => m.format + (m.description ? ` (${m.description})` : '')); return [['--format ', _('Destination format: %s', formats.join(', '))], ['--note ', _('Exports only the given note.')], ['--notebook ', _('Exports only the given notebook.')]]; } async action(args) { const exportOptions = {}; exportOptions.path = args.path; exportOptions.format = args.options.format ? args.options.format : 'jex'; if (args.options.note) { const notes = await app().loadItems(BaseModel.TYPE_NOTE, args.options.note, { parent: app().currentFolder() }); if (!notes.length) throw new Error(_('Cannot find "%s".', args.options.note)); exportOptions.sourceNoteIds = notes.map((n) => n.id); } else if (args.options.notebook) { const folders = await app().loadItems(BaseModel.TYPE_FOLDER, args.options.notebook); if (!folders.length) throw new Error(_('Cannot find "%s".', args.options.notebook)); exportOptions.sourceFolderIds = folders.map((n) => n.id); } const service = new InteropService(); const result = await service.export(exportOptions); result.warnings.map((w) => this.stdout(w)); } } module.exports = Command;