{"version":3,"sources":["jsdelivr-header.js","/npm/nyuu@0.4.2/lib/fileuploader.js"],"names":[],"mappings":"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","file":"/npm/nyuu@0.4.2/lib/fileuploader.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/nyuu@0.4.2/lib/fileuploader.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\n\nvar async = require('async');\nvar path = require('path');\nvar fs = require('fs');\nvar Uploader = require('./uploadmgr');\nvar StreamReader, FileReader;\nvar EventEmitter = require('events').EventEmitter;\nvar Nyutil;\n\nexports.log = null;\nexports.setLogger = function(log) {\n\texports.log = log;\n\tUploader.setLogger(log);\n};\n\nexports.upload = function(_files, opts, cb) {\n\tvar files = {};\n\tvar hasUnseekableFiles = false;\n\tvar archiveAll = [];\n\tvar ee = new EventEmitter();\n\t\n\tvar processDirFile = function(stats, cb) {\n\t\tif(stats.isDirectory() && exports.log) {\n\t\t\texports.log.warn('Skipping directory: ' + stats.file);\n\t\t\treturn cb();\n\t\t}\n\t\tif(stats.isSymbolicLink()) return cb();\n\t\tif(!stats.isFile()) return cb(new Error('Unknown file type for file: ' + stats.file));\n\t\tif(!stats.size && exports.log) {\n\t\t\texports.log.warn('Skipping empty file: ' + stats.file);\n\t\t\treturn cb();\n\t\t}\n\t\t// TODO: consider making the basename relative to root specified folder\n\t\tvar nam = opts.fileNameTransform(stats.file);\n\t\tif(nam || nam === '')\n\t\t\tfiles[stats.file] = {size: stats.size, name: nam, stat: stats};\n\t\tcb();\n\t};\n\t\n\tvar stat = opts.skipSymlinks ? fs.lstat : fs.stat;\n\t// TODO: consider merging the following with recurseDir ?\n\tasync.eachSeries(_files, function(file, cb) {\n\t\tif(typeof file == 'string') {\n\t\t\tstat(file, function(err, stats) {\n\t\t\t\tif(err) return cb(err);\n\t\t\t\t\n\t\t\t\tstats.file = file;\n\t\t\t\tif(stats.isDirectory()) {\n\t\t\t\t\tswitch(opts.subdirs) {\n\t\t\t\t\t\tcase 'keep':\n\t\t\t\t\t\t\t// recurse thru subdirs\n\t\t\t\t\t\t\t(Nyutil || (Nyutil = require('./util'))).recurseDir(file, opts.skipSymlinks, processDirFile, cb);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t\tcase 'include':\n\t\t\t\t\t\t\t(Nyutil || (Nyutil = require('./util'))).dirStatList(file, opts.skipSymlinks, function(err, list) {\n\t\t\t\t\t\t\t\tif(err) return cb(err);\n\t\t\t\t\t\t\t\tasync.eachSeries(list, processDirFile, cb);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t\tcase 'archive':\n\t\t\t\t\t\t\tfiles[file] = {archive: true, name: path.basename(file) + '.7z'}; // mark as archive dir\n\t\t\t\t\t\t\thasUnseekableFiles = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'archiveAll':\n\t\t\t\t\t\t\tarchiveAll.push(file);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'skip':\n\t\t\t\t\t\t\tif(exports.log) exports.log.warn('Skipping directory: ' + file);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(stats.isFile()) {\n\t\t\t\t\tif(stats.size) {\n\t\t\t\t\t\tvar nam = opts.fileNameTransform(file);\n\t\t\t\t\t\tif(nam || nam === '')\n\t\t\t\t\t\t\tfiles[file] = {size: stats.size, name: nam, stat: stats};\n\t\t\t\t\t} else if(exports.log)\n\t\t\t\t\t\texports.log.warn('Skipping empty file: ' + file);\n\t\t\t\t}\n\t\t\t\telse if(!stats.isSymbolicLink()) {\n\t\t\t\t\treturn cb(new Error('Unknown file type for file: ' + file));\n\t\t\t\t}\n\t\t\t\tcb();\n\t\t\t});\n\t\t} else if(typeof file == 'object') {\n\t\t\t// TODO: consider archiving from streams??\n\t\t\t\n\t\t\tvar a = ['size', 'name'];\n\t\t\tfor(var key in a) {\n\t\t\t\tif(!file[a[key]])\n\t\t\t\t\treturn cb(new Error('File '+a[key]+' not specified for file ' + file));\n\t\t\t}\n\t\t\tif(file.stream) {\n\t\t\t\tfiles['\\0_stream_' + file.name] = file;\n\t\t\t\thasUnseekableFiles = true;\n\t\t\t} else if(file.filename)\n\t\t\t\tfiles[file.filename] = file;\n\t\t\telse\n\t\t\t\treturn cb(new Error('Invalid file specification ' + file));\n\t\t\tcb();\n\t\t} else {\n\t\t\treturn cb(new Error('Invalid file specification ' + file));\n\t\t}\n\t}, setImmediate.bind(null, function(err) {\n\t\tif(err) return cb(err);\n\t\t\n\t\tif(archiveAll.length) {\n\t\t\tfiles['\\0_archive'] = {archive: true, name: 'all.7z'}; // TODO: need to make this much better\n\t\t\thasUnseekableFiles = true;\n\t\t}\n\t\t\n\t\tvar filenames = Object.keys(files);\n\t\tif(!filenames.length)\n\t\t\treturn cb(new Error('No files to process'));\n\t\t\n\t\t// sort files into collections\n\t\tvar fileColCount = {};\n\t\t// TODO: consider re-ordering ability\n\t\tif(opts.groupFiles) {\n\t\t\t// group by base filename\n\t\t\tvar re_group_fname = /(\\.[a-z0-9]{1,10}){0,2}(\\.vol\\d+[\\-+]\\d+\\.par2)?(\\.\\d+|\\.part\\d+)?$/i;\n\t\t\tfilenames.forEach(function(filename) {\n\t\t\t\tvar file = files[filename];\n\t\t\t\tvar col = file.name.replace(re_group_fname, '');\n\t\t\t\tfile.collection = col;\n\t\t\t\tif(col in fileColCount)\n\t\t\t\t\tfileColCount[col]++;\n\t\t\t\telse\n\t\t\t\t\tfileColCount[col] = 1;\n\t\t\t\tfile.num = fileColCount[col];\n\t\t\t});\n\t\t} else {\n\t\t\t// one collection\n\t\t\tfileColCount._ = filenames.length;\n\t\t\tvar counter = 1;\n\t\t\tfilenames.forEach(function(filename) {\n\t\t\t\tfiles[filename].collection = '_';\n\t\t\t\tfiles[filename].num = counter++;\n\t\t\t});\n\t\t}\n\t\t\n\t\tvar reqSize = opts.diskReqSize || (Math.ceil(1048576/opts.articleSize)*opts.articleSize);\n\t\t\n\t\tif(!hasUnseekableFiles && (opts.check.queueCache === null || opts.check.queueCache === undefined)) {\n\t\t\t// TODO: avoid overwriting?\n\t\t\t// kinda ugly, as we just rely on the Uploader class to set the default if it has unseekable streams...\n\t\t\topts.check.queueCache = 5;\n\t\t}\n\t\t\n\t\t// if copying input, prepare for it\n\t\tvar StreamWriter, copyBufPool, StreamTee;\n\t\tif(opts.inputCopy) {\n\t\t\tStreamWriter = require('./streamwriter');\n\t\t\t// TODO: do we wish to make the use of BufferPool optional?\n\t\t\tcopyBufPool = new (require('./bufferpool'))(reqSize, 0);\n\t\t\tStreamTee = require('./streamtee');\n\t\t}\n\t\t\n\t\tvar up = new Uploader(opts, cb);\n\t\tee.emit('start', files, up.uploader);\n\t\tup.setupNzbs(files, fileColCount);\n\t\tvar inputBuffer;\n\t\tasync.eachSeries(filenames, function(filename, cb) {\n\t\t\tvar file = files[filename];\n\t\t\tif(file.archive) {\n\t\t\t\t// creating an archive of directory\n\t\t\t\tif(archiveAll.length) {\n\t\t\t\t\t// TODO: all dirs into one archive\n\t\t\t\t} else {\n\t\t\t\t\t// TODO:\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar reader;\n\t\t\t\tif(!file.stream) {\n\t\t\t\t\tif(!inputBuffer)\n\t\t\t\t\t\tinputBuffer = (Buffer.allocUnsafe || Buffer)((opts.diskBufferSize+1) * reqSize);\n\t\t\t\t\treader = new (FileReader || (FileReader = require('./filereader')))(filename, reqSize, inputBuffer);\n\t\t\t\t} else {\n\t\t\t\t\tvar stream = file.stream;\n\t\t\t\t\tif(typeof stream == 'function') { // to support deferred loading\n\t\t\t\t\t\tstream = stream();\n\t\t\t\t\t}\n\t\t\t\t\tif((typeof stream != 'object') || !stream.readable)\n\t\t\t\t\t\treturn cb(new Error('Cannot read from file ' + file.name));\n\t\t\t\t\t\n\t\t\t\t\treader = new (StreamReader || (StreamReader = require('./streamreader')))(stream, opts.diskBufferSize);\n\t\t\t\t}\n\t\t\t\tee.emit('processing_file', file);\n\t\t\t\t\n\t\t\t\t// if input copying is enabled, tee the stream out here\n\t\t\t\tif(opts.inputCopy) {\n\t\t\t\t\tvar copy = opts.inputCopy;\n\t\t\t\t\tif(typeof opts.inputCopy == 'function') {\n\t\t\t\t\t\tcopy = opts.inputCopy(file.name, file.size);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(copy) {\n\t\t\t\t\t\tif(!copy.writable) throw new Error('Supplied copy stream is not writable');\n\t\t\t\t\t\treader = new StreamTee(reader, [new StreamWriter(copy, opts.copyQueueBuffer, file.stream ? null : copyBufPool)]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tup.addFile(file, fileColCount[file.collection], file.headers || opts.postHeaders, reader, function(err, info) {\n\t\t\t\t\tif(err) return cb(err);\n\t\t\t\t\treader.close();\n\t\t\t\t\tcb(err);\n\t\t\t\t});\n\t\t\t}\n\t\t}, function(err) {\n\t\t\tif(copyBufPool) copyBufPool.drain();\n\t\t\tif(err) {\n\t\t\t\t// TODO: close input file streams\n\t\t\t\tup.cancel(err);\n\t\t\t} else {\n\t\t\t\tup.finished();\n\t\t\t\tee.emit('read_complete');\n\t\t\t}\n\t\t});\n\t\t\n\t}));\n\treturn ee;\n};\n"]}