mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-12-10 05:49:37 +00:00
Remove archiver-utils dependency
This commit is contained in:
parent
bca2cfda13
commit
3c5bf376b5
86 changed files with 17236 additions and 210 deletions
162
server/libs/archiver/archiverUtils/index.js
Normal file
162
server/libs/archiver/archiverUtils/index.js
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
/**
|
||||
* archiver-utils
|
||||
*
|
||||
* Copyright (c) 2015 Chris Talkington.
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/archiverjs/archiver-utils/blob/master/LICENSE
|
||||
*/
|
||||
var fs = require('graceful-fs');
|
||||
var path = require('path');
|
||||
// var lazystream = require('./lazystream');
|
||||
var lazystream = require('./lazystream')
|
||||
var normalizePath = require('../normalize-path');
|
||||
|
||||
var Stream = require('stream').Stream;
|
||||
var PassThrough = require('./readableStream').PassThrough;
|
||||
|
||||
var utils = module.exports = {};
|
||||
utils.file = require('./file.js');
|
||||
|
||||
utils.collectStream = function (source, callback) {
|
||||
var collection = [];
|
||||
var size = 0;
|
||||
|
||||
source.on('error', callback);
|
||||
|
||||
source.on('data', function (chunk) {
|
||||
collection.push(chunk);
|
||||
size += chunk.length;
|
||||
});
|
||||
|
||||
source.on('end', function () {
|
||||
var buf = Buffer.alloc(size);
|
||||
var offset = 0;
|
||||
|
||||
collection.forEach(function (data) {
|
||||
data.copy(buf, offset);
|
||||
offset += data.length;
|
||||
});
|
||||
|
||||
callback(null, buf);
|
||||
});
|
||||
};
|
||||
|
||||
utils.dateify = function (dateish) {
|
||||
dateish = dateish || new Date();
|
||||
|
||||
if (dateish instanceof Date) {
|
||||
dateish = dateish;
|
||||
} else if (typeof dateish === 'string') {
|
||||
dateish = new Date(dateish);
|
||||
} else {
|
||||
dateish = new Date();
|
||||
}
|
||||
|
||||
return dateish;
|
||||
};
|
||||
|
||||
// this is slightly different from lodash version
|
||||
utils.defaults = function (object, source) {
|
||||
object = Object(object)
|
||||
const sources = [source]
|
||||
const objectProto = Object.prototype
|
||||
const hasOwnProperty = objectProto.hasOwnProperty
|
||||
sources.forEach((source) => {
|
||||
if (source != null) {
|
||||
source = Object(source)
|
||||
for (const key in source) {
|
||||
const value = object[key]
|
||||
if (value === undefined ||
|
||||
(value == objectProto[key] && !hasOwnProperty.call(object, key))) {
|
||||
object[key] = source[key]
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
return object
|
||||
};
|
||||
|
||||
utils.isStream = function (source) {
|
||||
return source instanceof Stream;
|
||||
};
|
||||
|
||||
utils.lazyReadStream = function (filepath) {
|
||||
return new lazystream.Readable(function () {
|
||||
return fs.createReadStream(filepath);
|
||||
});
|
||||
};
|
||||
|
||||
utils.normalizeInputSource = function (source) {
|
||||
if (source === null) {
|
||||
return Buffer.alloc(0);
|
||||
} else if (typeof source === 'string') {
|
||||
return Buffer.from(source);
|
||||
} else if (utils.isStream(source)) {
|
||||
// Always pipe through a PassThrough stream to guarantee pausing the stream if it's already flowing,
|
||||
// since it will only be processed in a (distant) future iteration of the event loop, and will lose
|
||||
// data if already flowing now.
|
||||
return source.pipe(new PassThrough());
|
||||
}
|
||||
|
||||
return source;
|
||||
};
|
||||
|
||||
utils.sanitizePath = function (filepath) {
|
||||
return normalizePath(filepath, false).replace(/^\w+:/, '').replace(/^(\.\.\/|\/)+/, '');
|
||||
};
|
||||
|
||||
utils.trailingSlashIt = function (str) {
|
||||
return str.slice(-1) !== '/' ? str + '/' : str;
|
||||
};
|
||||
|
||||
utils.unixifyPath = function (filepath) {
|
||||
return normalizePath(filepath, false).replace(/^\w+:/, '');
|
||||
};
|
||||
|
||||
utils.walkdir = function (dirpath, base, callback) {
|
||||
var results = [];
|
||||
|
||||
if (typeof base === 'function') {
|
||||
callback = base;
|
||||
base = dirpath;
|
||||
}
|
||||
|
||||
fs.readdir(dirpath, function (err, list) {
|
||||
var i = 0;
|
||||
var file;
|
||||
var filepath;
|
||||
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
(function next() {
|
||||
file = list[i++];
|
||||
|
||||
if (!file) {
|
||||
return callback(null, results);
|
||||
}
|
||||
|
||||
filepath = path.join(dirpath, file);
|
||||
|
||||
fs.stat(filepath, function (err, stats) {
|
||||
results.push({
|
||||
path: filepath,
|
||||
relative: path.relative(base, filepath).replace(/\\/g, '/'),
|
||||
stats: stats
|
||||
});
|
||||
|
||||
if (stats && stats.isDirectory()) {
|
||||
utils.walkdir(filepath, base, function (err, res) {
|
||||
res.forEach(function (dirEntry) {
|
||||
results.push(dirEntry);
|
||||
});
|
||||
next();
|
||||
});
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
});
|
||||
})();
|
||||
});
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue