« get me outta code hell

Desmartify playlists in play.js - http-music - Command-line music player + utils (not a server!)
about summary refs log tree commit diff
path: root/src/smart-playlist.js
diff options
context:
space:
mode:
authorFlorrie <towerofnix@gmail.com>2017-08-07 16:43:02 -0300
committerFlorrie <towerofnix@gmail.com>2017-08-07 16:43:39 -0300
commit7cd692dc759b167967b83d2333d52169d2b45045 (patch)
tree8d03deefaee26fbb948dd7e82258d6f58f20c806 /src/smart-playlist.js
parente2d48882c6f7840f88bf663d42f6f0fa4dfb17ce (diff)
Desmartify playlists in play.js
Diffstat (limited to 'src/smart-playlist.js')
-rw-r--r--src/smart-playlist.js20
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