schnee effeckt und fehler Korektur

This commit is contained in:
2023-08-14 17:52:24 +02:00
parent 4a843d4936
commit 79af4e9907
6813 changed files with 343821 additions and 356128 deletions

402
node_modules/bin-wrapper/index.js generated vendored
View File

@@ -1,218 +1,208 @@
'use strict';
const fs = require('fs');
const path = require('path');
const url = require('url');
const pify = require('pify');
const importLazy = require('import-lazy')(require);
var fs = require('fs');
var path = require('path');
var lazyReq = require('lazy-req')(require);
var binCheck = lazyReq('bin-check');
var binVersionCheck = lazyReq('bin-version-check');
var Download = lazyReq('download');
var osFilterObj = lazyReq('os-filter-obj');
const binCheck = importLazy('bin-check');
const binVersionCheck = importLazy('bin-version-check');
const download = importLazy('download');
const osFilterObj = importLazy('os-filter-obj');
const statAsync = pify(fs.stat);
const chmodAsync = pify(fs.chmod);
/**
* Initialize a new `BinWrapper`
*
* @param {Object} opts
* @param {Object} options
* @api public
*/
module.exports = class BinWrapper {
constructor(options = {}) {
this.options = options;
function BinWrapper(opts) {
if (!(this instanceof BinWrapper)) {
return new BinWrapper(opts);
if (this.options.strip <= 0) {
this.options.strip = 0;
} else if (!this.options.strip) {
this.options.strip = 1;
}
}
this.opts = opts || {};
this.opts.strip = this.opts.strip <= 0 ? 0 : !this.opts.strip ? 1 : this.opts.strip;
/**
* Get or set files to download
*
* @param {String} src
* @param {String} os
* @param {String} arch
* @api public
*/
src(src, os, arch) {
if (arguments.length === 0) {
return this._src;
}
this._src = this._src || [];
this._src.push({
url: src,
os,
arch
});
return this;
}
/**
* Get or set the destination
*
* @param {String} dest
* @api public
*/
dest(dest) {
if (arguments.length === 0) {
return this._dest;
}
this._dest = dest;
return this;
}
/**
* Get or set the binary
*
* @param {String} bin
* @api public
*/
use(bin) {
if (arguments.length === 0) {
return this._use;
}
this._use = bin;
return this;
}
/**
* Get or set a semver range to test the binary against
*
* @param {String} range
* @api public
*/
version(range) {
if (arguments.length === 0) {
return this._version;
}
this._version = range;
return this;
}
/**
* Get path to the binary
*
* @api public
*/
path() {
return path.join(this.dest(), this.use());
}
/**
* Run
*
* @param {Array} cmd
* @api public
*/
run(cmd = ['--version']) {
return this.findExisting().then(() => {
if (this.options.skipCheck) {
return;
}
return this.runCheck(cmd);
});
}
/**
* Run binary check
*
* @param {Array} cmd
* @api private
*/
runCheck(cmd) {
return binCheck(this.path(), cmd).then(works => {
if (!works) {
throw new Error(`The \`${this.path()}\` binary doesn't seem to work correctly`);
}
if (this.version()) {
return binVersionCheck(this.path(), this.version());
}
return Promise.resolve();
});
}
/**
* Find existing files
*
* @api private
*/
findExisting() {
return statAsync(this.path()).catch(error => {
if (error && error.code === 'ENOENT') {
return this.download();
}
return Promise.reject(error);
});
}
/**
* Download files
*
* @api private
*/
download() {
const files = osFilterObj(this.src() || []);
const urls = [];
if (files.length === 0) {
return Promise.reject(new Error('No binary found matching your system. It\'s probably not supported.'));
}
files.forEach(file => urls.push(file.url));
return Promise.all(urls.map(url => download(url, this.dest(), {
extract: true,
strip: this.options.strip
}))).then(result => {
const resultingFiles = flatten(result.map((item, index) => {
if (Array.isArray(item)) {
return item.map(file => file.path);
}
const parsedUrl = url.parse(files[index].url);
const parsedPath = path.parse(parsedUrl.pathname);
return parsedPath.base;
}));
return Promise.all(resultingFiles.map(fileName => {
return chmodAsync(path.join(this.dest(), fileName), 0o755);
}));
});
}
};
function flatten(arr) {
return arr.reduce((acc, elem) => {
if (Array.isArray(elem)) {
acc.push(...elem);
} else {
acc.push(elem);
}
return acc;
}, []);
}
module.exports = BinWrapper;
/**
* Get or set files to download
*
* @param {String} src
* @param {String} os
* @param {String} arch
* @api public
*/
BinWrapper.prototype.src = function (src, os, arch) {
if (!arguments.length) {
return this._src;
}
this._src = this._src || [];
this._src.push({
url: src,
os: os,
arch: arch
});
return this;
};
/**
* Get or set the destination
*
* @param {String} dest
* @api public
*/
BinWrapper.prototype.dest = function (dest) {
if (!arguments.length) {
return this._dest;
}
this._dest = dest;
return this;
};
/**
* Get or set the binary
*
* @param {String} bin
* @api public
*/
BinWrapper.prototype.use = function (bin) {
if (!arguments.length) {
return this._use;
}
this._use = bin;
return this;
};
/**
* Get or set a semver range to test the binary against
*
* @param {String} range
* @api public
*/
BinWrapper.prototype.version = function (range) {
if (!arguments.length) {
return this._version;
}
this._version = range;
return this;
};
/**
* Get path to the binary
*
* @api public
*/
BinWrapper.prototype.path = function () {
return path.join(this.dest(), this.use());
};
/**
* Run
*
* @param {Array} cmd
* @param {Function} cb
* @api public
*/
BinWrapper.prototype.run = function (cmd, cb) {
if (typeof cmd === 'function' && !cb) {
cb = cmd;
cmd = ['--version'];
}
this.findExisting(function (err) {
if (err) {
cb(err);
return;
}
if (this.opts.skipCheck) {
cb();
return;
}
this.runCheck(cmd, cb);
}.bind(this));
};
/**
* Run binary check
*
* @param {Array} cmd
* @param {Function} cb
* @api private
*/
BinWrapper.prototype.runCheck = function (cmd, cb) {
binCheck()(this.path(), cmd, function (err, works) {
if (err) {
cb(err);
return;
}
if (!works) {
cb(new Error('The `' + this.path() + '` binary doesn\'t seem to work correctly'));
return;
}
if (this.version()) {
return binVersionCheck()(this.path(), this.version(), cb);
}
cb();
}.bind(this));
};
/**
* Find existing files
*
* @param {Function} cb
* @api private
*/
BinWrapper.prototype.findExisting = function (cb) {
fs.stat(this.path(), function (err) {
if (err && err.code === 'ENOENT') {
this.download(cb);
return;
}
if (err) {
cb(err);
return;
}
cb();
}.bind(this));
};
/**
* Download files
*
* @param {Function} cb
* @api private
*/
BinWrapper.prototype.download = function (cb) {
var files = osFilterObj()(this.src());
var download = new Download()({
extract: true,
mode: '755',
strip: this.opts.strip
});
if (!files.length) {
cb(new Error('No binary found matching your system. It\'s probably not supported.'));
return;
}
files.forEach(function (file) {
download.get(file.url);
});
download
.dest(this.dest())
.run(cb);
};