UNPKG

@sequencemedia/music-library

Version:

Watch Apple Music Library XML and parse to JSON, JS, ES, or M3U

109 lines (91 loc) 2.2 kB
import chokidar from 'chokidar' import debug from 'debug' import musicLibraryParser from '@sequencemedia/music-library-parser' import { DEFAULT_ERROR_MESSAGE, DEFAULT_FUNC } from '#music-library/common' import normalise from '#music-library/common/normalise' const { library: { transform: { toJSON: transformToJSON, toJS: transformToJS, toES: transformToES } } } = musicLibraryParser const log = debug('@sequencemedia/music-library:transform') const error = debug('@sequencemedia/music-library:transform:error') log('`music-library` is awake') function handleError ({ message = DEFAULT_ERROR_MESSAGE } = {}) { error(`Error in watcher. The message was "${message}"`) } export function toJSON (jar, xml, func = DEFAULT_FUNC) { const j = jar ? normalise(jar) : jar const x = xml ? normalise(xml) : xml return ( chokidar.watch(x, { awaitWriteFinish: true }) .on('ready', async function handleReady () { func( await transformToJSON(j, x) ) }) .on('change', async function handleChange () { func( await transformToJSON(j, x) ) }) .on('error', handleError) ) } export function toJS (jar, xml, func = DEFAULT_FUNC) { const j = jar ? normalise(jar) : jar const x = xml ? normalise(xml) : xml return ( chokidar.watch(x, { awaitWriteFinish: true }) .on('ready', async function handleReady () { func( await transformToJS(j, x) ) }) .on('change', async function handleChange () { func( await transformToJS(j, x) ) }) .on('error', handleError) ) } export function toES (jar, xml, func = DEFAULT_FUNC) { const j = jar ? normalise(jar) : jar const x = xml ? normalise(xml) : xml return ( chokidar.watch(x, { awaitWriteFinish: true }) .on('ready', async function handleReady () { func( await transformToES(j, x) ) }) .on('change', async function handleChange () { func( await transformToES(j, x) ) }) .on('error', handleError) ) }