diff options
author | Florrie <towerofnix@gmail.com> | 2017-08-07 16:43:02 -0300 |
---|---|---|
committer | Florrie <towerofnix@gmail.com> | 2017-08-07 16:43:39 -0300 |
commit | 7cd692dc759b167967b83d2333d52169d2b45045 (patch) | |
tree | 8d03deefaee26fbb948dd7e82258d6f58f20c806 /src/smart-playlist.js | |
parent | e2d48882c6f7840f88bf663d42f6f0fa4dfb17ce (diff) |
Desmartify playlists in play.js
Diffstat (limited to 'src/smart-playlist.js')
-rw-r--r-- | src/smart-playlist.js | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/smart-playlist.js b/src/smart-playlist.js index e65ff1f..76cd877 100644 --- a/src/smart-playlist.js +++ b/src/smart-playlist.js @@ -8,30 +8,32 @@ const readFile = promisify(fs.readFile) async function processItem(item) { // Object.assign is used so that we keep original properties, e.g. "name" - // or "apply". + // or "apply". (It's also used so we return copies of original objects.) - if ('items' in item) { - return Object.assign(item, { - items: await Promise.all(item.items.map(processItem)) - }) - } else if ('source' in item) { + if ('source' in item) { const [ name, ...args ] = item.source const crawlModule = getCrawlerByName(name) if (crawlModule === null) { console.error(`No crawler by name ${name} - skipped item:`, item) - return Object.assign(item, {failed: true}) + return Object.assign({}, item, {failed: true}) } const { crawl } = crawlModule - return Object.assign(item, await crawl(...args)) + return Object.assign({}, item, await crawl(...args)) + } else if ('items' in item) { + return Object.assign({}, item, { + items: await Promise.all(item.items.map(processItem)) + }) } else { - return item + return Object.assign({}, item) } } +module.exports = processItem + async function main(opts) { // TODO: Error when no file is given |