mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-12 17:26:17 +00:00
69 lines
1.8 KiB
JavaScript
69 lines
1.8 KiB
JavaScript
import { findStorage } from 'browser/lib/findStorage'
|
|
import resolveStorageData from './resolveStorageData'
|
|
import resolveStorageNotes from './resolveStorageNotes'
|
|
import filenamify from 'filenamify'
|
|
import * as path from 'path'
|
|
import * as fs from 'fs'
|
|
|
|
/**
|
|
* @param {String} storageKey
|
|
* @param {String} fileType
|
|
* @param {String} exportDir
|
|
*
|
|
* @return {Object}
|
|
* ```
|
|
* {
|
|
* storage: Object,
|
|
* fileType: String,
|
|
* exportDir: String
|
|
* }
|
|
* ```
|
|
*/
|
|
|
|
function exportStorage(storageKey, fileType, exportDir) {
|
|
let targetStorage
|
|
try {
|
|
targetStorage = findStorage(storageKey)
|
|
} catch (e) {
|
|
return Promise.reject(e)
|
|
}
|
|
|
|
return resolveStorageData(targetStorage)
|
|
.then(storage =>
|
|
resolveStorageNotes(storage).then(notes => ({ storage, notes }))
|
|
)
|
|
.then(function exportNotes(data) {
|
|
const { storage, notes } = data
|
|
const folderNamesMapping = {}
|
|
storage.folders.forEach(folder => {
|
|
const folderExportedDir = path.join(
|
|
exportDir,
|
|
filenamify(folder.name, { replacement: '_' })
|
|
)
|
|
folderNamesMapping[folder.key] = folderExportedDir
|
|
// make sure directory exists
|
|
try {
|
|
fs.mkdirSync(folderExportedDir)
|
|
} catch (e) {}
|
|
})
|
|
notes
|
|
.filter(note => !note.isTrashed && note.type === 'MARKDOWN_NOTE')
|
|
.forEach(markdownNote => {
|
|
const folderExportedDir = folderNamesMapping[markdownNote.folder]
|
|
const snippetName = `${filenamify(markdownNote.title, {
|
|
replacement: '_'
|
|
})}.${fileType}`
|
|
const notePath = path.join(folderExportedDir, snippetName)
|
|
fs.writeFileSync(notePath, markdownNote.content)
|
|
})
|
|
|
|
return {
|
|
storage,
|
|
fileType,
|
|
exportDir
|
|
}
|
|
})
|
|
}
|
|
|
|
module.exports = exportStorage
|