{"version":3,"sources":["jsdelivr-header.js","/npm/youtube-playlist-dl@1.1.0/app.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACEA,IAAI,MAAQ,QAAQ,SAChB,KAAO,QAAQ,iBAAiB,KAChC,GAAK,QAAQ,MACb,KAAO,QAAQ,QACf,KAAO,QAAQ,cACf,QAAU,QAAQ,iBAElB,YAAc,qCACd,EAAI,EAQR,SAAS,sBAAsB,EAAQ,EAAa,GAChD,QAAQ,MAAM,SACV,EAAQ,CACJ,cAAe,GACf,cAAe,IAEnB,SAAS,EAAK,GACV,GAAI,aAAe,MAEf,OADA,QAAQ,IAAI,YAAc,GACnB,EAGP,IAAI,EAAO,EAAK,MACZ,EAAI,EAEJ,EAAY,SAAS,IAiBzB,SAAsB,EAAK,EAAG,GAC1B,IAAI,EAAQ,EAAI,GAAG,MAAM,MACrB,EAAQ,oCAEZ,GADA,EAAQ,EAAM,QAAQ,EAAO,KACf,OACd,IAAI,EAAK,EAAI,GAAG,MAAM,GAEjB,EAAI,IAAO,GAAM,EAAI,KACtB,QAAQ,IAAI,EAAI,KAAO,GACvB,MAAM,OAAO,CACT,SAAS,GACL,cAAc,EAAI,EAAO,EAC7B,IACD,SAAS,GACR,sBAAsB,EAAQ,EAAI,EAAG,EAAI,EAC7C,MAGA,QAAQ,IAAI,EAAI,KAAO,GACvB,IACA,cAAc,EAAI,EAAO,GAEjC,CAtCI,CAAa,EAAK,GAAG,aACjB,EACQ,EAAK,MAAM,OACf,EAAU,IAGV,QAAQ,IAAI,4DACZ,QAAQ,IAAI,0CACZ,QAAQ,IAAI,4DACZ,QAAQ,OAEhB,GACJ,EAEA,EAAU,EA0BlB,GAER,CAEA,SAAS,cAAc,EAAI,EAAO,GAE9B,IAAI,EAAW,EAAQ,OACnB,EAAQ,KAAK,mCAAqC,EAAI,CAAC,qBACvD,EAAS,KAAK,KAAK,UAAY,cAAe,GAC9C,EAAW,KAAK,KAAK,UAAY,cAAe,EAAQ,QAE5D,GAAI,GAAG,WAAW,GACd,QAAQ,OAAO,MAAM,kBACrB,QAEC,CACD,IAAI,EAAO,EACX,EAAM,GAAG,SAAS,SAAS,GACvB,QAAQ,IAAI,aAAe,GAC3B,GACJ,IAEA,EAAM,GAAG,QAAQ,SAAS,GACtB,EAAO,EAAK,KACZ,EAAM,KAAK,GAAG,kBAAkB,GACpC,IAEA,IAAI,EAAM,EACV,EAAM,GAAG,QAAQ,SAAS,GAEtB,GADA,GAAO,EAAK,OACR,EAAM,CACN,IAAI,GAAW,EAAM,EAAO,KAAK,QAAQ,GACzC,GAAe,KAAX,EACA,OAAO,EAGP,QAAQ,OAAO,SAAS,GACxB,QAAQ,OAAO,UAAU,GACzB,QAAQ,OAAO,MAAM,EAAU,IAEvC,CACJ,IAEA,EAAM,GAAG,OAAO,WACZ,QAAQ,OAAO,SAAS,GACxB,QAAQ,OAAO,UAAU,GACzB,QAAQ,OAAO,MAAM,kBAErB,WAAW,EAAU,EACzB,GACJ,CACJ,CAEA,SAAS,WAAW,EAAU,GAC1B,QAAQ,OAAO,SAAS,GACxB,QAAQ,OAAO,UAAU,GACzB,QAAQ,OAAO,MAAM,wBAErB,IACI,EAAc,EAAS,QADf,WAC8B,QAKvB,KAAK,eAHd,cAAgB,GAGoB,OAFpC,cAAgB,GAEkC,KACxD,SAAS,EAAO,EAAQ,GACpB,QAAQ,OAAO,SAAS,GACxB,QAAQ,OAAO,UAAU,GACzB,QAAQ,OAAO,MAAM,mBACrB,YAAY,EAAU,GACR,OAAV,GACA,QAAQ,IAAI,eAAiB,EAErC,GACR,CAEA,SAAS,YAAY,EAAU,GACT,KAAK,oBAAsB,EAAW,KACpD,SAAS,EAAO,EAAQ,GACpB,IACc,OAAV,GACA,QAAQ,IAAI,eAAiB,EAGrC,GACR,CAnJA,QAAQ,IAAI,4DACZ,QAAQ,IAAI,kDACZ,QAAQ,IAAI,4DAEZ,sBAAsB,YAAa,EAAG","file":"/npm/youtube-playlist-dl@1.1.0/app.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/youtube-playlist-dl@1.1.0/app.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*\r\nName:         youtube-playlist-dl\r\nDescription:  Node.js module to download youtube playlists in either .mp4 or .mp3\r\nSource:       https://github.com/hardtacos\r\nFeedback:     https://github.com/hardtacos\r\nLicense:      MIT License (see LICENSE)\r\n*/\r\n\r\nvar async = require('async');\r\nvar exec = require('child_process').exec;\r\nvar fs = require('fs');\r\nvar path = require('path');\r\nvar ytdl = require('youtube-dl');\r\nvar youtube = require('youtube-feeds');\r\n\r\nvar playlistURL = 'PL_SdhP4NjrPsSPv22MWcslT7MglIbej9K';\r\nvar j = 1;\r\n\r\nconsole.log('--------------------------------------------------------');\r\nconsole.log('[INFO] GATHERING VIDEOS FROM SELECTED PLAYLIST');\r\nconsole.log('--------------------------------------------------------');\r\n\r\ngetVideosFromPlaylist(playlistURL, 1, j);\r\n\r\nfunction getVideosFromPlaylist(source, start_index, j) {\r\n    youtube.feeds.playlist(\r\n        source, {\r\n            'max-results': 10,\r\n            'start-index': start_index\r\n        },\r\n        function(err, data) {\r\n            if (err instanceof Error) {\r\n                console.log(\"Error 1: \" + err);\r\n                return 0;\r\n            }\r\n            else {\r\n                var list = data.items;\r\n                var i = 0;\r\n\r\n                var loopArray = function(arr) {\r\n                    displayItems(arr, i, function() {\r\n                        i++;\r\n                        if (i < data.items.length) {\r\n                            loopArray(arr);\r\n                        }\r\n                        else {\r\n                            console.log('--------------------------------------------------------');\r\n                            console.log('[INFO] ALL VIDEOS HAVE BEEN DOWNLOADED');\r\n                            console.log('--------------------------------------------------------');\r\n                            process.exit();\r\n                        }\r\n                    });\r\n                }\r\n\r\n                loopArray(list);\r\n\r\n                function displayItems(msg, i, callback) {\r\n                    var title = msg[i].video.title;\r\n                    var regex = /(\\[.*?\\] - )|(\\[.*?\\])|([^\\w- ])/g;\r\n                    title = title.replace(regex, '');\r\n                    title = title.trim();\r\n                    var id = msg[i].video.id;\r\n\r\n                    if ((j % 10 === 0) && j < 200) {\r\n                        console.log(j + \") \" + title);\r\n                        async.series([\r\n                            function(callback) {\r\n                                downloadVideo(id, title, callback);\r\n                            }\r\n                        ], function(err) {\r\n                            getVideosFromPlaylist(source, j + 1, j + 1);\r\n                        });\r\n                    }\r\n                    else {\r\n                        console.log(j + \") \" + title);\r\n                        j++;\r\n                        downloadVideo(id, title, callback);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    )\r\n}\r\n\r\nfunction downloadVideo(id, title, callback) {\r\n\r\n    var fileName = title + '.mp4';\r\n    var video = ytdl(\"https://www.youtube.com/watch?v=\" + id, ['--max-quality=18']);\r\n    var output = path.join(__dirname + \"/files/mp4s\", fileName);\r\n    var mp3Check = path.join(__dirname + \"/files/mp3s\", title + \".mp3\");\r\n\r\n    if (fs.existsSync(mp3Check)) {\r\n        process.stdout.write('---Complete \\n');\r\n        callback();\r\n    }\r\n    else {\r\n        var size = 0;\r\n        video.on('error', function(err) {\r\n            console.log(\"Error 2:  \" + err);\r\n            callback();\r\n        });\r\n\r\n        video.on('info', function(info) {\r\n            size = info.size;\r\n            video.pipe(fs.createWriteStream(output));\r\n        });\r\n\r\n        var pos = 0;\r\n        video.on('data', function(data) {\r\n            pos += data.length;\r\n            if (size) {\r\n                var percent = (pos / size * 100).toFixed(2);\r\n                if (percent == 100) {\r\n                    return 0;\r\n                }\r\n                else {\r\n                    process.stdout.cursorTo(0);\r\n                    process.stdout.clearLine(1);\r\n                    process.stdout.write(percent + '%');\r\n                }\r\n            }\r\n        });\r\n\r\n        video.on('end', function() {\r\n            process.stdout.cursorTo(0);\r\n            process.stdout.clearLine(1);\r\n            process.stdout.write('---Complete \\n');\r\n\r\n            convertMP3(fileName, callback);\r\n        });\r\n    }\r\n}\r\n\r\nfunction convertMP3(fileName, callback) {\r\n    process.stdout.cursorTo(0);\r\n    process.stdout.clearLine(1);\r\n    process.stdout.write('---Converting to MP3');\r\n\r\n    var regex = /(\\.mp4)/g;\r\n    var MP3fileName = fileName.replace(regex, '.mp3');\r\n\r\n    var mp4 = 'files/mp4s/' + fileName;\r\n    var mp3 = 'files/mp3s/' + MP3fileName;\r\n\r\n    var convertVideo = exec('ffmpeg -i \"' + mp4 + '\" \"' + mp3 + '\"',\r\n        function(error, stdout, stderr) {\r\n            process.stdout.cursorTo(0);\r\n            process.stdout.clearLine(1);\r\n            process.stdout.write('---Converted \\n');\r\n            deleteVideo(fileName, callback);\r\n            if (error !== null) {\r\n                console.log('exec error: ' + error);\r\n            }\r\n        });\r\n}\r\n\r\nfunction deleteVideo(fileName, callback) {\r\n    var removeVideo = exec('rm \"./files/mp4s/' + fileName + '\"',\r\n        function(error, stdout, stderr) {\r\n            callback();\r\n            if (error !== null) {\r\n                console.log('exec error: ' + error);\r\n                //callback();\r\n            }\r\n        });\r\n}"]}