Socket
Socket
Sign inDemoInstall

lipo

Package Overview
Dependencies
Maintainers
2
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lipo - npm Package Compare versions

Comparing version 0.0.10 to 1.0.0

262

lib/index.js
"use strict";
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
const fs = require('fs');
const deasync = require('deasync');
const FormData = require('form-data');
const _ = require('lodash');
const Frisbee = require('frisbee');
const FormData = require('form-data');
const _ = require('lodash');
const safeStringify = require('fast-safe-stringify');
const boolean = require('boolean'); // Object.keys(require('sharp').prototype).filter(key => !key.startsWith('_'))
const universalify = require('universalify');
const {
boolean
} = require('boolean'); // Object.keys(require('sharp').prototype).filter(key => !key.startsWith('_'))
const keys = ['metadata', 'limitInputPixels', 'sequentialRead', 'resize', 'crop', 'embed', 'max', 'min', 'ignoreAspectRatio', 'withoutEnlargement', 'overlayWith', 'rotate', 'extract', 'flip', 'flop', 'sharpen', 'blur', 'extend', 'flatten', 'trim', 'gamma', 'negate', 'normalise', 'normalize', 'convolve', 'threshold', 'boolean', 'background', 'greyscale', 'grayscale', 'toColourspace', 'toColorspace', 'extractChannel', 'joinChannel', 'bandbool', 'toFile', 'toBuffer', 'withMetadata', 'jpeg', 'png', 'webp', 'tiff', 'raw', 'toFormat', 'tile'];

@@ -26,6 +24,7 @@

constructor(config = {}) {
this.__config = Object.assign({
this.__config = {
key: process.env.LIPO_KEY || '',
baseURI: process.env.LIPO === 'true' ? 'http://localhost:3000' : 'https://api.lipo.io'
}, config);
baseURI: process.env.LIPO === 'true' ? 'http://localhost:3000' : 'https://api.lipo.io',
...config
};
this.__api = new Frisbee({

@@ -39,2 +38,5 @@ baseURI: this.__config.baseURI,

this.__queue = [];
this.__metadata = universalify.fromPromise(this.__metadata);
this.__toFile = universalify.fromPromise(this.__toFile);
this.__toBuffer = universalify.fromPromise(this.__toBuffer);
return input => {

@@ -70,185 +72,79 @@ this.__input = input;

__metadata(fn) {
var _this = this;
const promise = new Promise(
/*#__PURE__*/
function () {
var _ref = _asyncToGenerator(function* (resolve, reject) {
try {
const body = new FormData();
if (_.isString(_this.__input)) body.append('input', fs.createReadStream(_this.__input));else if (_.isBuffer(_this.__input)) body.append('input', _this.__input);else if (_.isObject(_this.__input)) body.append('options', safeStringify(_this.__input));
body.append('queue', safeStringify(_this.__queue));
_this.__queue = [];
const res = yield _this.__api.post('/', {
body
});
if (res.err) throw res.err;
resolve(res.body);
} catch (err) {
reject(err);
}
});
return function (_x, _x2) {
return _ref.apply(this, arguments);
};
}());
if (_.isFunction(fn)) promise.then(data => {
fn(null, data);
}).catch(fn);else return promise;
async __metadata() {
const body = new FormData();
if (_.isString(this.__input)) body.append('input', fs.createReadStream(this.__input));else if (_.isBuffer(this.__input)) body.append('input', this.__input);else if (_.isObject(this.__input)) body.append('options', safeStringify(this.__input));
body.append('queue', safeStringify(this.__queue));
this.__queue = [];
const res = await this.__api.post('/', {
body
});
if (res.err) throw res.err;
return res.body;
}
__toFile(fileOut, fn) {
var _this2 = this;
async __toFile(fileOut) {
if (!_.isString(fileOut)) throw new Error('File output path required');
const promise = new Promise(
/*#__PURE__*/
function () {
var _ref2 = _asyncToGenerator(function* (resolve, reject) {
try {
const body = new FormData();
if (_.isString(_this2.__input)) body.append('input', fs.createReadStream(_this2.__input));else if (_.isBuffer(_this2.__input)) body.append('input', _this2.__input);else if (_.isObject(_this2.__input)) body.append('options', safeStringify(_this2.__input));
body.append('queue', safeStringify(_this2.__queue));
_this2.__queue = [];
const res = yield _this2.__api.post('/', {
body,
raw: true
});
if (res.err) throw res.err;
_this2.__info = {
format: res.headers.get('x-sharp-format'),
size: Number(res.headers.get('x-sharp-size')),
width: Number(res.headers.get('x-sharp-width')),
height: Number(res.headers.get('x-sharp-height')),
channels: Number(res.headers.get('x-sharp-channels')),
premultiplied: boolean(res.headers.get('x-sharp-multiplied'))
};
const stream = fs.createWriteStream(fileOut); // let timer;
// stream.on('open', () => {
// timer = setTimeout(() => {
// stream.close();
// reject(new Error('Timed out while writing file'));
// }, 10000);
// });
const body = new FormData();
if (_.isString(this.__input)) body.append('input', fs.createReadStream(this.__input));else if (_.isBuffer(this.__input)) body.append('input', this.__input);else if (_.isObject(this.__input)) body.append('options', safeStringify(this.__input));
body.append('queue', safeStringify(this.__queue));
this.__queue = [];
const res = await this.__api.post('/', {
body,
raw: true
});
if (res.err) throw res.err;
this.__info = {
format: res.headers.get('x-sharp-format'),
size: Number(res.headers.get('x-sharp-size')),
width: Number(res.headers.get('x-sharp-width')),
height: Number(res.headers.get('x-sharp-height')),
channels: Number(res.headers.get('x-sharp-channels')),
premultiplied: boolean(res.headers.get('x-sharp-multiplied'))
};
const stream = fs.createWriteStream(fileOut); // let timer;
// stream.on('open', () => {
// timer = setTimeout(() => {
// stream.close();
// reject(new Error('Timed out while writing file'));
// }, 10000);
// });
stream.on('error', reject).on('finish', () => {
resolve(_this2.__info);
});
res.body.on('error', reject).pipe(stream);
} catch (err) {
reject(err);
}
const promise = new Promise((resolve, reject) => {
stream.on('error', reject).on('finish', () => {
resolve(this.__info);
});
return function (_x3, _x4) {
return _ref2.apply(this, arguments);
};
}());
if (_.isFunction(fn)) promise.then(data => {
fn(null, data);
}).catch(fn);else return promise;
}
__toBuffer(options = {}, fn) {
var _this3 = this;
if (_.isFunction(options)) fn = options;
const promise = new Promise(
/*#__PURE__*/
function () {
var _ref3 = _asyncToGenerator(function* (resolve, reject) {
try {
const body = new FormData();
if (_.isString(_this3.__input)) body.append('input', fs.createReadStream(_this3.__input));else if (_.isBuffer(_this3.__input)) body.append('input', _this3.__input);else if (_.isObject(_this3.__input)) body.append('options', safeStringify(_this3.__input));
body.append('queue', safeStringify(_this3.__queue));
_this3.__queue = [];
const res = yield _this3.__api.post('/', {
body,
raw: true
});
if (res.err) throw res.err;
_this3.__info = {
format: res.headers.get('x-sharp-format'),
size: Number(res.headers.get('x-sharp-size')),
width: Number(res.headers.get('x-sharp-width')),
height: Number(res.headers.get('x-sharp-height')),
channels: Number(res.headers.get('x-sharp-channels')),
premultiplied: boolean(res.headers.get('x-sharp-multiplied'))
};
const data = yield res.buffer();
if (_.isObject(options) && boolean(options.resolveWithObject)) return resolve({
data,
info: _this3.__info
});
resolve(data);
} catch (err) {
reject(err);
}
});
return function (_x5, _x6) {
return _ref3.apply(this, arguments);
};
}());
if (_.isFunction(fn)) promise.then(data => {
fn(null, data, this.__info);
}).catch(fn);else return promise;
} // <https://github.com/lovell/sharp/issues/360#issuecomment-185162998>
toFileSync(fileOut) {
let done = false;
let data;
this.toFile(fileOut, (err, _data_) => {
if (err) {
throw err;
}
data = _data_;
done = true;
res.body.on('error', reject).pipe(stream);
});
deasync.loopWhile(() => {
return !done;
});
return data;
return promise;
}
toBufferSync() {
let done = false;
let data;
this.toBuffer((err, _data_) => {
if (err) {
throw err;
}
data = _data_;
done = true;
async __toBuffer(options = {}) {
const body = new FormData();
if (_.isString(this.__input)) body.append('input', fs.createReadStream(this.__input));else if (_.isBuffer(this.__input)) body.append('input', this.__input);else if (_.isObject(this.__input)) body.append('options', safeStringify(this.__input));
body.append('queue', safeStringify(this.__queue));
this.__queue = [];
const res = await this.__api.post('/', {
body,
raw: true
});
deasync.loopWhile(() => {
return !done;
});
if (res.err) throw res.err;
this.__info = {
format: res.headers.get('x-sharp-format'),
size: Number(res.headers.get('x-sharp-size')),
width: Number(res.headers.get('x-sharp-width')),
height: Number(res.headers.get('x-sharp-height')),
channels: Number(res.headers.get('x-sharp-channels')),
premultiplied: boolean(res.headers.get('x-sharp-multiplied'))
};
const data = await res.buffer();
if (_.isObject(options) && boolean(options.resolveWithObject)) return {
data,
info: this.__info
};
return data;
}
metadataSync() {
let done = false;
let data;
this.metadata((err, _data_) => {
if (err) {
throw err;
}
data = _data_;
done = true;
});
deasync.loopWhile(() => {
return !done;
});
return data;
}
clone() {
return new Lipo(Object.assign({}, this.__config))(this.__input);
return new Lipo({ ...this.__config
})(this.__input);
}

@@ -323,2 +219,2 @@

module.exports = Lipo;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcyIsInJlcXVpcmUiLCJkZWFzeW5jIiwiXyIsIkZyaXNiZWUiLCJGb3JtRGF0YSIsInNhZmVTdHJpbmdpZnkiLCJib29sZWFuIiwia2V5cyIsIkxpcG8iLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsIl9fY29uZmlnIiwiT2JqZWN0IiwiYXNzaWduIiwia2V5IiwicHJvY2VzcyIsImVudiIsIkxJUE9fS0VZIiwiYmFzZVVSSSIsIkxJUE8iLCJfX2FwaSIsImhlYWRlcnMiLCJBY2NlcHQiLCJhdXRoIiwiX19xdWV1ZSIsImlucHV0IiwiX19pbnB1dCIsIl9fbWV0YWRhdGEiLCJmbiIsInByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImJvZHkiLCJpc1N0cmluZyIsImFwcGVuZCIsImNyZWF0ZVJlYWRTdHJlYW0iLCJpc0J1ZmZlciIsImlzT2JqZWN0IiwicmVzIiwicG9zdCIsImVyciIsImlzRnVuY3Rpb24iLCJ0aGVuIiwiZGF0YSIsImNhdGNoIiwiX190b0ZpbGUiLCJmaWxlT3V0IiwiRXJyb3IiLCJyYXciLCJfX2luZm8iLCJmb3JtYXQiLCJnZXQiLCJzaXplIiwiTnVtYmVyIiwid2lkdGgiLCJoZWlnaHQiLCJjaGFubmVscyIsInByZW11bHRpcGxpZWQiLCJzdHJlYW0iLCJjcmVhdGVXcml0ZVN0cmVhbSIsIm9uIiwicGlwZSIsIl9fdG9CdWZmZXIiLCJvcHRpb25zIiwiYnVmZmVyIiwicmVzb2x2ZVdpdGhPYmplY3QiLCJpbmZvIiwidG9GaWxlU3luYyIsImRvbmUiLCJ0b0ZpbGUiLCJfZGF0YV8iLCJsb29wV2hpbGUiLCJ0b0J1ZmZlclN5bmMiLCJ0b0J1ZmZlciIsIm1ldGFkYXRhU3luYyIsIm1ldGFkYXRhIiwiY2xvbmUiLCJmb3JFYWNoIiwicHJvdG90eXBlIiwiYXJncyIsImluY2x1ZGVzIiwicHVzaCIsImNvbmNhdCIsImdyYXZpdHkiLCJjZW50ZXIiLCJjZW50cmUiLCJub3J0aCIsImVhc3QiLCJzb3V0aCIsIndlc3QiLCJub3J0aGVhc3QiLCJzb3V0aGVhc3QiLCJzb3V0aHdlc3QiLCJub3J0aHdlc3QiLCJwb3NpdGlvbiIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInN0cmF0ZWd5IiwiZW50cm9weSIsImF0dGVudGlvbiIsImtlcm5lbCIsIm5lYXJlc3QiLCJjdWJpYyIsImxhbmN6b3MyIiwibGFuY3pvczMiLCJmaXQiLCJjb250YWluIiwiY292ZXIiLCJmaWxsIiwiaW5zaWRlIiwib3V0c2lkZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU1BLEVBQUUsR0FBR0MsT0FBTyxDQUFDLElBQUQsQ0FBbEI7O0FBQ0EsTUFBTUMsT0FBTyxHQUFHRCxPQUFPLENBQUMsU0FBRCxDQUF2Qjs7QUFDQSxNQUFNRSxDQUFDLEdBQUdGLE9BQU8sQ0FBQyxRQUFELENBQWpCOztBQUNBLE1BQU1HLE9BQU8sR0FBR0gsT0FBTyxDQUFDLFNBQUQsQ0FBdkI7O0FBQ0EsTUFBTUksUUFBUSxHQUFHSixPQUFPLENBQUMsV0FBRCxDQUF4Qjs7QUFDQSxNQUFNSyxhQUFhLEdBQUdMLE9BQU8sQ0FBQyxxQkFBRCxDQUE3Qjs7QUFDQSxNQUFNTSxPQUFPLEdBQUdOLE9BQU8sQ0FBQyxTQUFELENBQXZCLEMsQ0FFQTs7O0FBQ0EsTUFBTU8sSUFBSSxHQUFHLENBQ1gsVUFEVyxFQUVYLGtCQUZXLEVBR1gsZ0JBSFcsRUFJWCxRQUpXLEVBS1gsTUFMVyxFQU1YLE9BTlcsRUFPWCxLQVBXLEVBUVgsS0FSVyxFQVNYLG1CQVRXLEVBVVgsb0JBVlcsRUFXWCxhQVhXLEVBWVgsUUFaVyxFQWFYLFNBYlcsRUFjWCxNQWRXLEVBZVgsTUFmVyxFQWdCWCxTQWhCVyxFQWlCWCxNQWpCVyxFQWtCWCxRQWxCVyxFQW1CWCxTQW5CVyxFQW9CWCxNQXBCVyxFQXFCWCxPQXJCVyxFQXNCWCxRQXRCVyxFQXVCWCxXQXZCVyxFQXdCWCxXQXhCVyxFQXlCWCxVQXpCVyxF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Y2VzQ29udGVudCI6WyJjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCBkZWFzeW5jID0gcmVxdWlyZSgnZGVhc3luYycpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuY29uc3QgRnJpc2JlZSA9IHJlcXVpcmUoJ2ZyaXNiZWUnKTtcbmNvbnN0IEZvcm1EYXRhID0gcmVxdWlyZSgnZm9ybS1kYXRhJyk7XG5jb25zdCBzYWZlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1zYWZlLXN0cmluZ2lmeScpO1xuY29uc3QgYm9vbGVhbiA9IHJlcXVpcmUoJ2Jvb2xlYW4nKTtcblxuLy8gT2JqZWN0LmtleXMocmVxdWlyZSgnc2hhcnAnKS5wcm90b3R5cGUpLmZpbHRlcihrZXkgPT4gIWtleS5zdGFydHNXaXRoKCdfJykpXG5jb25zdCBrZXlzID0gW1xuICAnbWV0YWRhdGEnLFxuICAnbGltaXRJbnB1dFBpeGVscycsXG4gICdzZXF1ZW50aWFsUmVhZCcsXG4gICdyZXNpemUnLFxuICAnY3JvcCcsXG4gICdlbWJlZCcsXG4gICdtYXgnLFxuICAnbWluJyxcbiAgJ2lnbm9yZUFzcGVjdFJhdGlvJyxcbiAgJ3dpdGhvdXRFbmxhcmdlbWVudCcsXG4gICdvdmVybGF5V2l0aCcsXG4gICdyb3RhdGUnLFxuICAnZXh0cmFjdCcsXG4gICdmbGlwJyxcbiAgJ2Zsb3AnLFxuICAnc2hhcnBlbicsXG4gICdibHVyJyxcbiAgJ2V4dGVuZCcsXG4gICdmbGF0dGVuJyxcbiAgJ3RyaW0nLFxuICAnZ2FtbWEnLFxuICAnbmVnYXRlJyxcbiAgJ25vcm1hbGlzZScsXG4gICdub3JtYWxpemUnLFxuICAnY29udm9sdmUnLFxuICAndGhyZXNob2xkJyxcbiAgJ2Jvb2xlYW4nLFxuICAnYmFja2dyb3VuZCcsXG4gICdncmV5c2NhbGUnLFxuICAnZ3JheXNjYWxlJyxcbiAgJ3RvQ29sb3Vyc3BhY2UnLFxuICAndG9Db2xvcnNwYWNlJyxcbiAgJ2V4dHJhY3RDaGFubmVsJyxcbiAgJ2pvaW5DaGFubmVsJyxcbiAgJ2JhbmRib29sJyxcbiAgJ3RvRmlsZScsXG4gICd0b0J1ZmZlcicsXG4gICd3aXRoTWV0YWRhdGEnLFxuICAnanBlZycsXG4gICdwbmcnLFxuICAnd2VicCcsXG4gICd0aWZmJyxcbiAgJ3JhdycsXG4gICd0b0Zvcm1hdCcsXG4gICd0aWxlJ1xuXTtcblxuY2xhc3MgTGlwbyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgdGhpcy5fX2NvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIGtleTogcHJvY2Vzcy5lbnYuTElQT19LRVkgfHwgJycsXG4gICAgICAgIGJhc2VVUkk6XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTElQTyA9PT0gJ3RydWUnXG4gICAgICAgICAgICA/ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgICAgICAgICA6ICdodHRwczovL2FwaS5saXBvLmlvJ1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ1xuICAgICk7XG5cbiAgICB0aGlzLl9fYXBpID0gbmV3IEZyaXNiZWUoe1xuICAgICAgYmFzZVVSSTogdGhpcy5fX2NvbmZpZy5iYXNlVVJJLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX19jb25maWcua2V5KSB0aGlzLl9fYXBpLmF1dGgodGhpcy5fX2NvbmZpZy5rZXkpO1xuXG4gICAgdGhpcy5fX3F1ZXVlID0gW107XG5cbiAgICByZXR1cm4gaW5wdXQgPT4ge1xuICAgICAgdGhpcy5fX2lucHV0ID0gaW5wdXQ7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLypcbiAgICAvLyA8aHR0cHM6Ly9naXRodWIuY29tL2xvdmVsbC9zaGFycC9pc3N1ZXMvMTA0NT5cbiAgICByZXR1cm4gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgIHRoaXMuX19pbnB1dCA9IG51bGw7XG4gICAgICB0aGlzLl9fb3B0aW9ucyA9IHt9O1xuICAgICAgLy8gaW5wdXQgPSBCdWZmZXIgfCBTdHJpbmdcbiAgICAgIC8vIG9wdGlvbnMgPSBPYmplY3RcbiAgICAgIC8vIC0gZGVuc2l0eSAoTnVtYmVyKVxuICAgICAgLy8gLSByYXcgKE9iamVjdClcbiAgICAgIC8vICAgLSB3aWR0aCAoTnVtYmVyKVxuICAgICAgLy8gICAtIGhlaWdodCAoTnVtYmVyKVxuICAgICAgLy8gICAtIGNoYW5uZWxzIChOdW1iZXI7IDEtNClcbiAgICAgIC8vIC0gY3JlYXRlIChPYmplY3QpXG4gICAgICAvLyAgIC0gd2lkdGggKE51bWJlcilcbiAgICAgIC8vICAgLSBoZWlnaHQgKE51bWJlcilcbiAgICAgIC8vICAgLSBjaGFubmVscyAoTnVtYmVyOyAzLTQpXG4gICAgICAvLyAgIC0gYmFja2dyb3VuZCAoU3RyaW5nIHwgT2JqZWN0KVxuICAgICAgaWYgKF8uaXNTdHJpbmcoaW5wdXQpIHx8IF8uaXNCdWZmZXIoaW5wdXQpKSB0aGlzLl9faW5wdXQgPSBpbnB1dDtcbiAgICAgIGVsc2UgaWYgKF8uaXNPYmplY3QodGhpcy5fX2lucHV0KSkgdGhpcy5fX29wdGlvbnMgPSBpbnB1dDtcbiAgICAgIGlmICghXy5pc09iamVjdCh0aGlzLl9faW5wdXQpICYmIF8uaXNPYmplY3Qob3B0aW9ucykpXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAqL1xuICB9XG5cbiAgX19tZXRhZGF0YShmbikge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBib2R5ID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGlmIChfLmlzU3RyaW5nKHRoaXMuX19pbnB1dCkpXG4gICAgICAgICAgYm9keS5hcHBlbmQoJ2lucHV0JywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0aGlzLl9faW5wdXQpKTtcbiAgICAgICAgZWxzZSBpZiAoXy5pc0J1ZmZlcih0aGlzLl9faW5wdXQpKSBib2R5LmFwcGVuZCgnaW5wdXQnLCB0aGlzLl9faW5wdXQpO1xuICAgICAgICBlbHNlIGlmIChfLmlzT2JqZWN0KHRoaXMuX19pbnB1dCkpXG4gICAgICAgICAgYm9keS5hcHBlbmQoJ29wdGlvbnMnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19pbnB1dCkpO1xuICAgICAgICBib2R5LmFwcGVuZCgncXVldWUnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19xdWV1ZSkpO1xuICAgICAgICB0aGlzLl9fcXVldWUgPSBbXTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fX2FwaS5wb3N0KCcvJywgeyBib2R5IH0pO1xuICAgICAgICBpZiAocmVzLmVycikgdGhyb3cgcmVzLmVycjtcbiAgICAgICAgcmVzb2x2ZShyZXMuYm9keSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihmbikpXG4gICAgICBwcm9taXNlXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIGZuKG51bGwsIGRhdGEpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZm4pO1xuICAgIGVsc2UgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBfX3RvRmlsZShmaWxlT3V0LCBmbikge1xuICAgIGlmICghXy5pc1N0cmluZyhmaWxlT3V0KSkgdGhyb3cgbmV3IEVycm9yKCdGaWxlIG91dHB1dCBwYXRoIHJlcXVpcmVkJyk7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgaWYgKF8uaXNTdHJpbmcodGhpcy5fX2lucHV0KSlcbiAgICAgICAgICBib2R5LmFwcGVuZCgnaW5wdXQnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKHRoaXMuX19pbnB1dCkpO1xuICAgICAgICBlbHNlIGlmIChfLmlzQnVmZmVyKHRoaXMuX19pbnB1dCkpIGJvZHkuYXBwZW5kKCdpbnB1dCcsIHRoaXMuX19pbnB1dCk7XG4gICAgICAgIGVsc2UgaWYgKF8uaXNPYmplY3QodGhpcy5fX2lucHV0KSlcbiAgICAgICAgICBib2R5LmFwcGVuZCgnb3B0aW9ucycsIHNhZmVTdHJpbmdpZnkodGhpcy5fX2lucHV0KSk7XG4gICAgICAgIGJvZHkuYXBwZW5kKCdxdWV1ZScsIHNhZmVTdHJpbmdpZnkodGhpcy5fX3F1ZXVlKSk7XG4gICAgICAgIHRoaXMuX19xdWV1ZSA9IFtdO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9fYXBpLnBvc3QoJy8nLCB7IGJvZHksIHJhdzogdHJ1ZSB9KTtcbiAgICAgICAgaWYgKHJlcy5lcnIpIHRocm93IHJlcy5lcnI7XG4gICAgICAgIHRoaXMuX19pbmZvID0ge1xuICAgICAgICAgIGZvcm1hdDogcmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWZvcm1hdCcpLFxuICAgICAgICAgIHNpemU6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtc2l6ZScpKSxcbiAgICAgICAgICB3aWR0aDogTnVtYmVyKHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC13aWR0aCcpKSxcbiAgICAgICAgICBoZWlnaHQ6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtaGVpZ2h0JykpLFxuICAgICAgICAgIGNoYW5uZWxzOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWNoYW5uZWxzJykpLFxuICAgICAgICAgIHByZW11bHRpcGxpZWQ6IGJvb2xlYW4ocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLW11bHRpcGxpZWQnKSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZU91dCk7XG4gICAgICAgIC8vIGxldCB0aW1lcjtcbiAgICAgICAgLy8gc3RyZWFtLm9uKCdvcGVuJywgKCkgPT4ge1xuICAgICAgICAvLyAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICBzdHJlYW0uY2xvc2UoKTtcbiAgICAgICAgLy8gICAgIHJlamVjdChuZXcgRXJyb3IoJ1RpbWVkIG91dCB3aGlsZSB3cml0aW5nIGZpbGUnKSk7XG4gICAgICAgIC8vICAgfSwgMTAwMDApO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIHJlamVjdCkub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX19pbmZvKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5ib2R5Lm9uKCdlcnJvcicsIHJlamVjdCkucGlwZShzdHJlYW0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChfLmlzRnVuY3Rpb24oZm4pKVxuICAgICAgcHJvbWlzZVxuICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICBmbihudWxsLCBkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZuKTtcbiAgICBlbHNlIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgX190b0J1ZmZlcihvcHRpb25zID0ge30sIGZuKSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihvcHRpb25zKSkgZm4gPSBvcHRpb25zO1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBib2R5ID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGlmIChfLmlzU3RyaW5nKHRoaXMuX19pbnB1dCkpXG4gICAgICAgICAgYm9keS5hcHBlbmQoJ2lucHV0JywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0aGlzLl9faW5wdXQpKTtcbiAgICAgICAgZWxzZSBpZiAoXy5pc0J1ZmZlcih0aGlzLl9faW5wdXQpKSBib2R5LmFwcGVuZCgnaW5wdXQnLCB0aGlzLl9faW5wdXQpO1xuICAgICAgICBlbHNlIGlmIChfLmlzT2JqZWN0KHRoaXMuX19pbnB1dCkpXG4gICAgICAgICAgYm9keS5hcHBlbmQoJ29wdGlvbnMnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19pbnB1dCkpO1xuICAgICAgICBib2R5LmFwcGVuZCgncXVldWUnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19xdWV1ZSkpO1xuICAgICAgICB0aGlzLl9fcXVldWUgPSBbXTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fX2FwaS5wb3N0KCcvJywgeyBib2R5LCByYXc6IHRydWUgfSk7XG4gICAgICAgIGlmIChyZXMuZXJyKSB0aHJvdyByZXMuZXJyO1xuICAgICAgICB0aGlzLl9faW5mbyA9IHtcbiAgICAgICAgICBmb3JtYXQ6IHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC1mb3JtYXQnKSxcbiAgICAgICAgICBzaXplOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLXNpemUnKSksXG4gICAgICAgICAgd2lkdGg6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtd2lkdGgnKSksXG4gICAgICAgICAgaGVpZ2h0OiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWhlaWdodCcpKSxcbiAgICAgICAgICBjaGFubmVsczogTnVtYmVyKHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC1jaGFubmVscycpKSxcbiAgICAgICAgICBwcmVtdWx0aXBsaWVkOiBib29sZWFuKHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC1tdWx0aXBsaWVkJykpXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuYnVmZmVyKCk7XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KG9wdGlvbnMpICYmIGJvb2xlYW4ob3B0aW9ucy5yZXNvbHZlV2l0aE9iamVjdCkpXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoeyBkYXRhLCBpbmZvOiB0aGlzLl9faW5mbyB9KTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChfLmlzRnVuY3Rpb24oZm4pKVxuICAgICAgcHJvbWlzZVxuICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICBmbihudWxsLCBkYXRhLCB0aGlzLl9faW5mbyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmbik7XG4gICAgZWxzZSByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIC8vIDxodHRwczovL2dpdGh1Yi5jb20vbG92ZWxsL3NoYXJwL2lzc3Vlcy8zNjAjaXNzdWVjb21tZW50LTE4NTE2Mjk5OD5cbiAgdG9GaWxlU3luYyhmaWxlT3V0KSB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICBsZXQgZGF0YTtcbiAgICB0aGlzLnRvRmlsZShmaWxlT3V0LCAoZXJyLCBfZGF0YV8pID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgZGF0YSA9IF9kYXRhXztcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgIH0pO1xuICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+IHtcbiAgICAgIHJldHVybiAhZG9uZTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHRvQnVmZmVyU3luYygpIHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIGxldCBkYXRhO1xuICAgIHRoaXMudG9CdWZmZXIoKGVyciwgX2RhdGFfKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIGRhdGEgPSBfZGF0YV87XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiB7XG4gICAgICByZXR1cm4gIWRvbmU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBtZXRhZGF0YVN5bmMoKSB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICBsZXQgZGF0YTtcbiAgICB0aGlzLm1ldGFkYXRhKChlcnIsIF9kYXRhXykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICBkYXRhID0gX2RhdGFfO1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgfSk7XG4gICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4ge1xuICAgICAgcmV0dXJuICFkb25lO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBMaXBvKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX19jb25maWcpKSh0aGlzLl9faW5wdXQpO1xuICB9XG59XG5cbmtleXMuZm9yRWFjaChrZXkgPT4ge1xuICBMaXBvLnByb3RvdHlwZVtrZXldID0gZnVuY3Rpb24oLi4uYXJncykge1xuICAgIGlmICghWyd0b0ZpbGUnLCAndG9CdWZmZXInLCAnbWV0YWRhdGEnXS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICB0aGlzLl9fcXVldWUucHVzaChba2V5XS5jb25jYXQoYXJncykpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmIChrZXkgPT09ICdtZXRhZGF0YScpIHtcbiAgICAgIHRoaXMuX19xdWV1ZS5wdXNoKFsnbWV0YWRhdGEnXSk7XG4gICAgICByZXR1cm4gdGhpcy5fX21ldGFkYXRhKC4uLmFyZ3MpO1xuICAgIH1cbiAgICBpZiAoa2V5ID09PSAndG9GaWxlJykgcmV0dXJuIHRoaXMuX190b0ZpbGUoLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXMuX190b0J1ZmZlciguLi5hcmdzKTtcbiAgfTtcbn0pO1xuXG4vLyBTb3VyY2VkIGZyb20gYGxpYi9yZXNpemUuanNgOlxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9sb3ZlbGwvc2hhcnAvYmxvYi9tYXN0ZXIvbGliL3Jlc2l6ZS5qcz5cblxuLy8gV2VpZ2h0aW5nIHRvIGFwcGx5IHdoZW4gdXNpbmcgY29udGFpbi9jb3ZlciBmaXQuXG5MaXBvLmdyYXZpdHkgPSB7XG4gIGNlbnRlcjogMCxcbiAgY2VudHJlOiAwLFxuICBub3J0aDogMSxcbiAgZWFzdDogMixcbiAgc291dGg6IDMsXG4gIHdlc3Q6IDQsXG4gIG5vcnRoZWFzdDogNSxcbiAgc291dGhlYXN0OiA2LFxuICBzb3V0aHdlc3Q6IDcsXG4gIG5vcnRod2VzdDogOFxufTtcblxuLy8gUG9zaXRpb24gdG8gYXBwbHkgd2hlbiB1c2luZyBjb250YWluL2NvdmVyIGZpdC5cbkxpcG8ucG9zaXRpb24gPSB7XG4gIHRvcDogMSxcbiAgcmlnaHQ6IDIsXG4gIGJvdHRvbTogMyxcbiAgbGVmdDogNCxcbiAgJ3JpZ2h0IHRvcCc6IDUsXG4gICdyaWdodCBib3R0b20nOiA2LFxuICAnbGVmdCBib3R0b20nOiA3LFxuICAnbGVmdCB0b3AnOiA4XG59O1xuXG4vLyBTdHJhdGVnaWVzIGZvciBhdXRvbWFnaWMgY292ZXIgYmVoYXZpb3VyLlxuTGlwby5zdHJhdGVneSA9IHtcbiAgZW50cm9weTogMTYsXG4gIGF0dGVudGlvbjogMTdcbn07XG5cbi8vIFJlZHVjdGlvbiBrZXJuZWxzLlxuTGlwby5rZXJuZWwgPSB7XG4gIG5lYXJlc3Q6ICduZWFyZXN0JyxcbiAgY3ViaWM6ICdjdWJpYycsXG4gIGxhbmN6b3MyOiAnbGFuY3pvczInLFxuICBsYW5jem9zMzogJ2xhbmN6b3MzJ1xufTtcblxuLy8gTWV0aG9kcyBieSB3aGljaCBhbiBpbWFnZSBjYW4gYmUgcmVzaXplZCB0byBmaXQgdGhlIHByb3ZpZGVkIGRpbWVuc2lvbnMuXG5MaXBvLmZpdCA9IHtcbiAgY29udGFpbjogJ2NvbnRhaW4nLFxuICBjb3ZlcjogJ2NvdmVyJyxcbiAgZmlsbDogJ2ZpbGwnLFxuICBpbnNpZGU6ICdpbnNpZGUnLFxuICBvdXRzaWRlOiAnb3V0c2lkZSdcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTGlwbztcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcyIsInJlcXVpcmUiLCJGb3JtRGF0YSIsIkZyaXNiZWUiLCJfIiwic2FmZVN0cmluZ2lmeSIsInVuaXZlcnNhbGlmeSIsImJvb2xlYW4iLCJrZXlzIiwiTGlwbyIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwiX19jb25maWciLCJrZXkiLCJwcm9jZXNzIiwiZW52IiwiTElQT19LRVkiLCJiYXNlVVJJIiwiTElQTyIsIl9fYXBpIiwiaGVhZGVycyIsIkFjY2VwdCIsImF1dGgiLCJfX3F1ZXVlIiwiX19tZXRhZGF0YSIsImZyb21Qcm9taXNlIiwiX190b0ZpbGUiLCJfX3RvQnVmZmVyIiwiaW5wdXQiLCJfX2lucHV0IiwiYm9keSIsImlzU3RyaW5nIiwiYXBwZW5kIiwiY3JlYXRlUmVhZFN0cmVhbSIsImlzQnVmZmVyIiwiaXNPYmplY3QiLCJyZXMiLCJwb3N0IiwiZXJyIiwiZmlsZU91dCIsIkVycm9yIiwicmF3IiwiX19pbmZvIiwiZm9ybWF0IiwiZ2V0Iiwic2l6ZSIsIk51bWJlciIsIndpZHRoIiwiaGVpZ2h0IiwiY2hhbm5lbHMiLCJwcmVtdWx0aXBsaWVkIiwic3RyZWFtIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbiIsInBpcGUiLCJvcHRpb25zIiwiZGF0YSIsImJ1ZmZlciIsInJlc29sdmVXaXRoT2JqZWN0IiwiaW5mbyIsImNsb25lIiwiZm9yRWFjaCIsInByb3RvdHlwZSIsImFyZ3MiLCJpbmNsdWRlcyIsInB1c2giLCJjb25jYXQiLCJncmF2aXR5IiwiY2VudGVyIiwiY2VudHJlIiwibm9ydGgiLCJlYXN0Iiwic291dGgiLCJ3ZXN0Iiwibm9ydGhlYXN0Iiwic291dGhlYXN0Iiwic291dGh3ZXN0Iiwibm9ydGh3ZXN0IiwicG9zaXRpb24iLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJzdHJhdGVneSIsImVudHJvcHkiLCJhdHRlbnRpb24iLCJrZXJuZWwiLCJuZWFyZXN0IiwiY3ViaWMiLCJsYW5jem9zMiIsImxhbmN6b3MzIiwiZml0IiwiY29udGFpbiIsImNvdmVyIiwiZmlsbCIsImluc2lkZSIsIm91dHNpZGUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLEVBQUUsR0FBR0MsT0FBTyxDQUFDLElBQUQsQ0FBbEI7O0FBRUEsTUFBTUMsUUFBUSxHQUFHRCxPQUFPLENBQUMsV0FBRCxDQUF4Qjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxTQUFELENBQXZCOztBQUNBLE1BQU1HLENBQUMsR0FBR0gsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUksYUFBYSxHQUFHSixPQUFPLENBQUMscUJBQUQsQ0FBN0I7O0FBQ0EsTUFBTUssWUFBWSxHQUFHTCxPQUFPLENBQUMsY0FBRCxDQUE1Qjs7QUFDQSxNQUFNO0FBQUVNLEVBQUFBO0FBQUYsSUFBY04sT0FBTyxDQUFDLFNBQUQsQ0FBM0IsQyxDQUVBOzs7QUFDQSxNQUFNTyxJQUFJLEdBQUcsQ0FDWCxVQURXLEVBRVgsa0JBRlcsRUFHWCxnQkFIVyxFQUlYLFFBSlcsRUFLWCxNQUxXLEVBTVgsT0FOVyxFQU9YLEtBUFcsRUFRWCxLQVJXLEVBU1gsbUJBVFcsRUFVWCxvQkFWVyxFQVdYLGFBWFcsRUFZWCxRQVpXLEVBYVgsU0FiVyxFQWNYLE1BZFcsRUFlWCxNQWZXLEVBZ0JYLFNBaEJXLEVBaUJYLE1BakJXLEVBa0JYLFFBbEJXLEVBbUJYLFNBbkJXLEVBb0JYLE1BcEJXLEVBcUJYLE9BckJXLEVBc0JYLFFBdEJXLEVBdUJYLFdBdkJXLEVBd0JYLFdBeEJXLEVBeUJYLFVBekJXLEVBMEJYLFdBMUJXLEVBMkJYLFNBM0JXLEVBNEJYLFlBNUJXLEVBNkJYLFdBN0JXLEVBOEJYLFdBOUJXLEVBK0JYLGVBL0JXLEVBZ0NYLGNBaENXLEVBaUNYLGdCQWpDVyxFQWtDWCxhQWxDVyxFQW1DWCxVQW5DVyxFQW9DWCxR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LE9BRks7QUFHWkMsRUFBQUEsUUFBUSxFQUFFLFVBSEU7QUFJWkMsRUFBQUEsUUFBUSxFQUFFO0FBSkUsQ0FBZCxDLENBT0E7O0FBQ0FyRixJQUFJLENBQUNzRixHQUFMLEdBQVc7QUFDVEMsRUFBQUEsT0FBTyxFQUFFLFNBREE7QUFFVEMsRUFBQUEsS0FBSyxFQUFFLE9BRkU7QUFHVEMsRUFBQUEsSUFBSSxFQUFFLE1BSEc7QUFJVEMsRUFBQUEsTUFBTSxFQUFFLFFBSkM7QUFLVEMsRUFBQUEsT0FBTyxFQUFFO0FBTEEsQ0FBWDtBQVFBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUI3RixJQUFqQiIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcblxuY29uc3QgRm9ybURhdGEgPSByZXF1aXJlKCdmb3JtLWRhdGEnKTtcbmNvbnN0IEZyaXNiZWUgPSByZXF1aXJlKCdmcmlzYmVlJyk7XG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBzYWZlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1zYWZlLXN0cmluZ2lmeScpO1xuY29uc3QgdW5pdmVyc2FsaWZ5ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5Jyk7XG5jb25zdCB7IGJvb2xlYW4gfSA9IHJlcXVpcmUoJ2Jvb2xlYW4nKTtcblxuLy8gT2JqZWN0LmtleXMocmVxdWlyZSgnc2hhcnAnKS5wcm90b3R5cGUpLmZpbHRlcihrZXkgPT4gIWtleS5zdGFydHNXaXRoKCdfJykpXG5jb25zdCBrZXlzID0gW1xuICAnbWV0YWRhdGEnLFxuICAnbGltaXRJbnB1dFBpeGVscycsXG4gICdzZXF1ZW50aWFsUmVhZCcsXG4gICdyZXNpemUnLFxuICAnY3JvcCcsXG4gICdlbWJlZCcsXG4gICdtYXgnLFxuICAnbWluJyxcbiAgJ2lnbm9yZUFzcGVjdFJhdGlvJyxcbiAgJ3dpdGhvdXRFbmxhcmdlbWVudCcsXG4gICdvdmVybGF5V2l0aCcsXG4gICdyb3RhdGUnLFxuICAnZXh0cmFjdCcsXG4gICdmbGlwJyxcbiAgJ2Zsb3AnLFxuICAnc2hhcnBlbicsXG4gICdibHVyJyxcbiAgJ2V4dGVuZCcsXG4gICdmbGF0dGVuJyxcbiAgJ3RyaW0nLFxuICAnZ2FtbWEnLFxuICAnbmVnYXRlJyxcbiAgJ25vcm1hbGlzZScsXG4gICdub3JtYWxpemUnLFxuICAnY29udm9sdmUnLFxuICAndGhyZXNob2xkJyxcbiAgJ2Jvb2xlYW4nLFxuICAnYmFja2dyb3VuZCcsXG4gICdncmV5c2NhbGUnLFxuICAnZ3JheXNjYWxlJyxcbiAgJ3RvQ29sb3Vyc3BhY2UnLFxuICAndG9Db2xvcnNwYWNlJyxcbiAgJ2V4dHJhY3RDaGFubmVsJyxcbiAgJ2pvaW5DaGFubmVsJyxcbiAgJ2JhbmRib29sJyxcbiAgJ3RvRmlsZScsXG4gICd0b0J1ZmZlcicsXG4gICd3aXRoTWV0YWRhdGEnLFxuICAnanBlZycsXG4gICdwbmcnLFxuICAnd2VicCcsXG4gICd0aWZmJyxcbiAgJ3JhdycsXG4gICd0b0Zvcm1hdCcsXG4gICd0aWxlJ1xuXTtcblxuY2xhc3MgTGlwbyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgdGhpcy5fX2NvbmZpZyA9IHtcbiAgICAgIGtleTogcHJvY2Vzcy5lbnYuTElQT19LRVkgfHwgJycsXG4gICAgICBiYXNlVVJJOlxuICAgICAgICBwcm9jZXNzLmVudi5MSVBPID09PSAndHJ1ZSdcbiAgICAgICAgICA/ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgICAgICAgOiAnaHR0cHM6Ly9hcGkubGlwby5pbycsXG4gICAgICAuLi5jb25maWdcbiAgICB9O1xuXG4gICAgdGhpcy5fX2FwaSA9IG5ldyBGcmlzYmVlKHtcbiAgICAgIGJhc2VVUkk6IHRoaXMuX19jb25maWcuYmFzZVVSSSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl9fY29uZmlnLmtleSkgdGhpcy5fX2FwaS5hdXRoKHRoaXMuX19jb25maWcua2V5KTtcblxuICAgIHRoaXMuX19xdWV1ZSA9IFtdO1xuXG4gICAgdGhpcy5fX21ldGFkYXRhID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKHRoaXMuX19tZXRhZGF0YSk7XG4gICAgdGhpcy5fX3RvRmlsZSA9IHVuaXZlcnNhbGlmeS5mcm9tUHJvbWlzZSh0aGlzLl9fdG9GaWxlKTtcbiAgICB0aGlzLl9fdG9CdWZmZXIgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UodGhpcy5fX3RvQnVmZmVyKTtcblxuICAgIHJldHVybiBpbnB1dCA9PiB7XG4gICAgICB0aGlzLl9faW5wdXQgPSBpbnB1dDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICAvKlxuICAgIC8vIDxodHRwczovL2dpdGh1Yi5jb20vbG92ZWxsL3NoYXJwL2lzc3Vlcy8xMDQ1PlxuICAgIHJldHVybiAoaW5wdXQsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgdGhpcy5fX2lucHV0ID0gbnVsbDtcbiAgICAgIHRoaXMuX19vcHRpb25zID0ge307XG4gICAgICAvLyBpbnB1dCA9IEJ1ZmZlciB8IFN0cmluZ1xuICAgICAgLy8gb3B0aW9ucyA9IE9iamVjdFxuICAgICAgLy8gLSBkZW5zaXR5IChOdW1iZXIpXG4gICAgICAvLyAtIHJhdyAoT2JqZWN0KVxuICAgICAgLy8gICAtIHdpZHRoIChOdW1iZXIpXG4gICAgICAvLyAgIC0gaGVpZ2h0IChOdW1iZXIpXG4gICAgICAvLyAgIC0gY2hhbm5lbHMgKE51bWJlcjsgMS00KVxuICAgICAgLy8gLSBjcmVhdGUgKE9iamVjdClcbiAgICAgIC8vICAgLSB3aWR0aCAoTnVtYmVyKVxuICAgICAgLy8gICAtIGhlaWdodCAoTnVtYmVyKVxuICAgICAgLy8gICAtIGNoYW5uZWxzIChOdW1iZXI7IDMtNClcbiAgICAgIC8vICAgLSBiYWNrZ3JvdW5kIChTdHJpbmcgfCBPYmplY3QpXG4gICAgICBpZiAoXy5pc1N0cmluZyhpbnB1dCkgfHwgXy5pc0J1ZmZlcihpbnB1dCkpIHRoaXMuX19pbnB1dCA9IGlucHV0O1xuICAgICAgZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLl9faW5wdXQpKSB0aGlzLl9fb3B0aW9ucyA9IGlucHV0O1xuICAgICAgaWYgKCFfLmlzT2JqZWN0KHRoaXMuX19pbnB1dCkgJiYgXy5pc09iamVjdChvcHRpb25zKSlcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgICovXG4gIH1cblxuICBhc3luYyBfX21ldGFkYXRhKCkge1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBpZiAoXy5pc1N0cmluZyh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ2lucHV0JywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0aGlzLl9faW5wdXQpKTtcbiAgICBlbHNlIGlmIChfLmlzQnVmZmVyKHRoaXMuX19pbnB1dCkpIGJvZHkuYXBwZW5kKCdpbnB1dCcsIHRoaXMuX19pbnB1dCk7XG4gICAgZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ29wdGlvbnMnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19pbnB1dCkpO1xuICAgIGJvZHkuYXBwZW5kKCdxdWV1ZScsIHNhZmVTdHJpbmdpZnkodGhpcy5fX3F1ZXVlKSk7XG4gICAgdGhpcy5fX3F1ZXVlID0gW107XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fX2FwaS5wb3N0KCcvJywgeyBib2R5IH0pO1xuICAgIGlmIChyZXMuZXJyKSB0aHJvdyByZXMuZXJyO1xuICAgIHJldHVybiByZXMuYm9keTtcbiAgfVxuXG4gIGFzeW5jIF9fdG9GaWxlKGZpbGVPdXQpIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcoZmlsZU91dCkpIHRocm93IG5ldyBFcnJvcignRmlsZSBvdXRwdXQgcGF0aCByZXF1aXJlZCcpO1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBpZiAoXy5pc1N0cmluZyh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ2lucHV0JywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0aGlzLl9faW5wdXQpKTtcbiAgICBlbHNlIGlmIChfLmlzQnVmZmVyKHRoaXMuX19pbnB1dCkpIGJvZHkuYXBwZW5kKCdpbnB1dCcsIHRoaXMuX19pbnB1dCk7XG4gICAgZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ29wdGlvbnMnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19pbnB1dCkpO1xuICAgIGJvZHkuYXBwZW5kKCdxdWV1ZScsIHNhZmVTdHJpbmdpZnkodGhpcy5fX3F1ZXVlKSk7XG4gICAgdGhpcy5fX3F1ZXVlID0gW107XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fX2FwaS5wb3N0KCcvJywgeyBib2R5LCByYXc6IHRydWUgfSk7XG4gICAgaWYgKHJlcy5lcnIpIHRocm93IHJlcy5lcnI7XG4gICAgdGhpcy5fX2luZm8gPSB7XG4gICAgICBmb3JtYXQ6IHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC1mb3JtYXQnKSxcbiAgICAgIHNpemU6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtc2l6ZScpKSxcbiAgICAgIHdpZHRoOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLXdpZHRoJykpLFxuICAgICAgaGVpZ2h0OiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWhlaWdodCcpKSxcbiAgICAgIGNoYW5uZWxzOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWNoYW5uZWxzJykpLFxuICAgICAgcHJlbXVsdGlwbGllZDogYm9vbGVhbihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtbXVsdGlwbGllZCcpKVxuICAgIH07XG4gICAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZU91dCk7XG4gICAgLy8gbGV0IHRpbWVyO1xuICAgIC8vIHN0cmVhbS5vbignb3BlbicsICgpID0+IHtcbiAgICAvLyAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgIHN0cmVhbS5jbG9zZSgpO1xuICAgIC8vICAgICByZWplY3QobmV3IEVycm9yKCdUaW1lZCBvdXQgd2hpbGUgd3JpdGluZyBmaWxlJykpO1xuICAgIC8vICAgfSwgMTAwMDApO1xuICAgIC8vIH0pO1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgcmVqZWN0KS5vbignZmluaXNoJywgKCkgPT4ge1xuICAgICAgICByZXNvbHZlKHRoaXMuX19pbmZvKTtcbiAgICAgIH0pO1xuICAgICAgcmVzLmJvZHkub24oJ2Vycm9yJywgcmVqZWN0KS5waXBlKHN0cmVhbSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBhc3luYyBfX3RvQnVmZmVyKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBpZiAoXy5pc1N0cmluZyh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ2lucHV0JywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0aGlzLl9faW5wdXQpKTtcbiAgICBlbHNlIGlmIChfLmlzQnVmZmVyKHRoaXMuX19pbnB1dCkpIGJvZHkuYXBwZW5kKCdpbnB1dCcsIHRoaXMuX19pbnB1dCk7XG4gICAgZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ29wdGlvbnMnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19pbnB1dCkpO1xuICAgIGJvZHkuYXBwZW5kKCdxdWV1ZScsIHNhZmVTdHJpbmdpZnkodGhpcy5fX3F1ZXVlKSk7XG4gICAgdGhpcy5fX3F1ZXVlID0gW107XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fX2FwaS5wb3N0KCcvJywgeyBib2R5LCByYXc6IHRydWUgfSk7XG4gICAgaWYgKHJlcy5lcnIpIHRocm93IHJlcy5lcnI7XG4gICAgdGhpcy5fX2luZm8gPSB7XG4gICAgICBmb3JtYXQ6IHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC1mb3JtYXQnKSxcbiAgICAgIHNpemU6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtc2l6ZScpKSxcbiAgICAgIHdpZHRoOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLXdpZHRoJykpLFxuICAgICAgaGVpZ2h0OiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWhlaWdodCcpKSxcbiAgICAgIGNoYW5uZWxzOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWNoYW5uZWxzJykpLFxuICAgICAgcHJlbXVsdGlwbGllZDogYm9vbGVhbihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtbXVsdGlwbGllZCcpKVxuICAgIH07XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5idWZmZXIoKTtcbiAgICBpZiAoXy5pc09iamVjdChvcHRpb25zKSAmJiBib29sZWFuKG9wdGlvbnMucmVzb2x2ZVdpdGhPYmplY3QpKVxuICAgICAgcmV0dXJuIHsgZGF0YSwgaW5mbzogdGhpcy5fX2luZm8gfTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgTGlwbyh7IC4uLnRoaXMuX19jb25maWcgfSkodGhpcy5fX2lucHV0KTtcbiAgfVxufVxuXG5rZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgTGlwby5wcm90b3R5cGVba2V5XSA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICBpZiAoIVsndG9GaWxlJywgJ3RvQnVmZmVyJywgJ21ldGFkYXRhJ10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgdGhpcy5fX3F1ZXVlLnB1c2goW2tleV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdtZXRhZGF0YScpIHtcbiAgICAgIHRoaXMuX19xdWV1ZS5wdXNoKFsnbWV0YWRhdGEnXSk7XG4gICAgICByZXR1cm4gdGhpcy5fX21ldGFkYXRhKC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICd0b0ZpbGUnKSByZXR1cm4gdGhpcy5fX3RvRmlsZSguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy5fX3RvQnVmZmVyKC4uLmFyZ3MpO1xuICB9O1xufSk7XG5cbi8vIFNvdXJjZWQgZnJvbSBgbGliL3Jlc2l6ZS5qc2A6XG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL2xvdmVsbC9zaGFycC9ibG9iL21hc3Rlci9saWIvcmVzaXplLmpzPlxuXG4vLyBXZWlnaHRpbmcgdG8gYXBwbHkgd2hlbiB1c2luZyBjb250YWluL2NvdmVyIGZpdC5cbkxpcG8uZ3Jhdml0eSA9IHtcbiAgY2VudGVyOiAwLFxuICBjZW50cmU6IDAsXG4gIG5vcnRoOiAxLFxuICBlYXN0OiAyLFxuICBzb3V0aDogMyxcbiAgd2VzdDogNCxcbiAgbm9ydGhlYXN0OiA1LFxuICBzb3V0aGVhc3Q6IDYsXG4gIHNvdXRod2VzdDogNyxcbiAgbm9ydGh3ZXN0OiA4XG59O1xuXG4vLyBQb3NpdGlvbiB0byBhcHBseSB3aGVuIHVzaW5nIGNvbnRhaW4vY292ZXIgZml0LlxuTGlwby5wb3NpdGlvbiA9IHtcbiAgdG9wOiAxLFxuICByaWdodDogMixcbiAgYm90dG9tOiAzLFxuICBsZWZ0OiA0LFxuICAncmlnaHQgdG9wJzogNSxcbiAgJ3JpZ2h0IGJvdHRvbSc6IDYsXG4gICdsZWZ0IGJvdHRvbSc6IDcsXG4gICdsZWZ0IHRvcCc6IDhcbn07XG5cbi8vIFN0cmF0ZWdpZXMgZm9yIGF1dG9tYWdpYyBjb3ZlciBiZWhhdmlvdXIuXG5MaXBvLnN0cmF0ZWd5ID0ge1xuICBlbnRyb3B5OiAxNixcbiAgYXR0ZW50aW9uOiAxN1xufTtcblxuLy8gUmVkdWN0aW9uIGtlcm5lbHMuXG5MaXBvLmtlcm5lbCA9IHtcbiAgbmVhcmVzdDogJ25lYXJlc3QnLFxuICBjdWJpYzogJ2N1YmljJyxcbiAgbGFuY3pvczI6ICdsYW5jem9zMicsXG4gIGxhbmN6b3MzOiAnbGFuY3pvczMnXG59O1xuXG4vLyBNZXRob2RzIGJ5IHdoaWNoIGFuIGltYWdlIGNhbiBiZSByZXNpemVkIHRvIGZpdCB0aGUgcHJvdmlkZWQgZGltZW5zaW9ucy5cbkxpcG8uZml0ID0ge1xuICBjb250YWluOiAnY29udGFpbicsXG4gIGNvdmVyOiAnY292ZXInLFxuICBmaWxsOiAnZmlsbCcsXG4gIGluc2lkZTogJ2luc2lkZScsXG4gIG91dHNpZGU6ICdvdXRzaWRlJ1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXBvO1xuIl19
{
"name": "lipo",
"description": "Free image manipulation API service built on top of Sharp (an alternative to Jimp, Graphics Magic, Image Magick, and PhantomJS)",
"version": "0.0.10",
"version": "1.0.0",
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com/)",
"ava": {
"failFast": true,
"verbose": true,
"serial": true
},
"bugs": {

@@ -10,2 +15,7 @@ "url": "https://github.com/lipojs/lipo/issues",

},
"commitlint": {
"extends": [
"@commitlint/config-conventional"
]
},
"contributors": [

@@ -15,46 +25,42 @@ "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com/)"

"dependencies": {
"@babel/runtime": "^7.0.0-beta.47",
"boolean": "^0.1.3",
"deasync": "^0.1.13",
"fast-safe-stringify": "^2.0.4",
"form-data": "^2.3.2",
"frisbee": "^2.0.4",
"lodash": "^4.17.10"
"boolean": "^3.0.0",
"fast-safe-stringify": "^2.0.7",
"form-data": "3.0.0",
"frisbee": "^3.1.2",
"lodash": "^4.17.15",
"universalify": "^0.1.2"
},
"ava": {
"failFast": true,
"verbose": true
},
"devDependencies": {
"@babel/cli": "^7.0.0-beta.47",
"@babel/core": "^7.0.0-beta.47",
"@babel/plugin-proposal-object-rest-spread": "^7.0.0-beta.47",
"@babel/plugin-transform-runtime": "^7.0.0-beta.47",
"@babel/preset-env": "^7.0.0-beta.47",
"ava": "^1.0.0-beta.4",
"bytes": "^3.0.0",
"codecov": "^3.0.2",
"cross-env": "^5.1.5",
"eslint": "^4.19.1",
"eslint-config-prettier": "^2.9.0",
"eslint-plugin-prettier": "^2.6.0",
"express": "^4.16.3",
"husky": "^0.14.3",
"koa": "^2.5.1",
"koa-better-error-handler": "^1.3.5",
"koa-bodyparser": "^4.2.0",
"koa-multer": "https://github.com/niftylettuce/multer",
"lint-staged": "^7.1.2",
"lipo-express": "^0.0.2",
"lipo-koa": "^0.0.3",
"multer": "2.0.0-alpha.6",
"nyc": "^11.8.0",
"prettier": "^1.12.1",
"remark-cli": "^5.0.0",
"remark-preset-github": "^0.0.8",
"uuid": "^3.2.1",
"xo": "^0.21.1"
"@babel/cli": "^7.7.4",
"@babel/core": "^7.7.4",
"@babel/preset-env": "^7.7.4",
"@commitlint/cli": "^8.2.0",
"@commitlint/config-conventional": "^8.2.0",
"@koa/multer": "^2.0.1",
"ava": "^2.4.0",
"bytes": "^3.1.0",
"codecov": "^3.6.1",
"cross-env": "^6.0.3",
"errorhandler": "^1.5.1",
"eslint": "^6.7.1",
"eslint-config-xo-lass": "^1.0.3",
"eslint-plugin-compat": "^3.3.0",
"eslint-plugin-node": "^10.0.0",
"express": "^4.17.1",
"husky": "^3.1.0",
"koa": "^2.11.0",
"koa-better-error-handler": "^3.0.3",
"koa-bodyparser": "^4.2.1",
"lint-staged": "^9.5.0",
"lipo-express": "^0.0.4",
"lipo-koa": "^0.1.3",
"multer": "^2.0.0-beta.1",
"nyc": "^14.1.1",
"remark-cli": "^7.0.1",
"remark-preset-github": "^0.0.16",
"uuid": "^3.3.3",
"xo": "^0.25.3"
},
"engines": {
"node": ">=6.12.3 <7 || >=8.9.4"
"node": ">= 8.9.4"
},

@@ -65,32 +71,38 @@ "files": [

"homepage": "https://github.com/lipojs/lipo",
"husky": {
"hooks": {
"pre-commit": "lint-staged && npm test",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"keywords": [
"sharp",
"image",
"manipulation",
"resize",
"auto",
"chrome",
"chromium",
"crop",
"scale",
"trim",
"auto",
"enhance",
"sharpen",
"manipulate",
"jimp",
"gif",
"gm",
"graphics",
"gm",
"magick",
"image",
"image",
"img",
"jimp",
"jpeg",
"jpg",
"lipo",
"magick",
"manipulate",
"manipulation",
"phantom",
"phantomjs",
"png",
"puppeteer",
"chrome",
"chromium",
"jpeg",
"jpg",
"png",
"resize",
"scale",
"sharp",
"sharpen",
"svg",
"tiff",
"gif",
"svg",
"trim",
"webp"

@@ -100,8 +112,21 @@ ],

"lint-staged": {
"*.js": [
"xo --fix",
"git add"
],
"*.md": [
"remark . -qfo",
"git add"
],
"package.json": [
"fixpack",
"git add"
]
},
"main": "lib/index.js",
"prettier": {
"singleQuote": true,
"bracketSpacing": true,
"trailingComma": "none"
},
"remarkConfig": {

@@ -117,39 +142,19 @@ "plugins": [

"scripts": {
"ava": "cross-env NODE_ENV=test LIPO=true ava",
"build": "node_modules/.bin/babel src --out-dir lib",
"coverage": "nyc report --reporter=text-lcov > coverage.lcov && codecov",
"lint": "xo && remark . -qfo",
"nyc": "cross-env NODE_ENV=test LIPO=true nyc ava",
"precommit": "lint-staged && npm test",
"test": "npm run build && npm run lint && npm run ava",
"test-coverage": "npm run build && npm run lint && npm run nyc",
"ava": "cross-env NODE_ENV=test LIPO=true ava",
"nyc": "cross-env NODE_ENV=test LIPO=true nyc ava",
"build": "node_modules/.bin/babel src --out-dir lib",
"watch": "node_modules/.bin/babel src --watch --out-dir lib"
},
"prettier": {
"singleQuote": true,
"jsxBracketSameLine": true
},
"xo": {
"extends": "prettier",
"plugins": [
"prettier"
"prettier": true,
"space": true,
"extends": [
"xo-lass"
],
"parserOptions": {
"sourceType": "script"
},
"rules": {
"prettier/prettier": "error",
"max-len": [
"error",
{
"code": 80,
"ignoreUrls": true
}
],
"capitalized-comments": "off",
"camelcase": "off",
"no-warning-comments": "off"
},
"space": true,
"ignores": [
"ignore": [
"config.js"

@@ -156,0 +161,0 @@ ]

@@ -5,3 +5,3 @@ <h1 align="center">

<div align="center">
<a href="http://slack.crocodilejs.com"><img src="http://slack.crocodilejs.com/badge.svg" alt="chat" /></a>
<a href="https://slack.crocodilejs.com"><img src="https://slack.crocodilejs.com/badge.svg" alt="chat" /></a>
<a href="https://travis-ci.org/lipojs/lipo"><img src="https://img.shields.io/travis/lipojs/lipo.svg" alt="build status" /></a>

@@ -16,3 +16,3 @@ <a href="https://codecov.io/github/lipojs/lipo"><img src="https://img.shields.io/codecov/c/github/lipojs/lipo/master.svg" alt="code coverage" /></a>

<div align="center">
Lipo is a free image manipulation API service built on top of <a href="http://sharp.dimens.io/">Sharp</a>
Lipo is a free image manipulation API service built on top of <a href="https://github.com/lovell/sharp">Sharp</a>
</div>

@@ -92,4 +92,2 @@ <div align="center">

> **Synchronous Methods**: We have also exposed three helper functions `toBufferSync`, `toFileSync`, and `metadataSync`. These are not included in [Sharp's][sharp] API, however we included them since they were needed for our project [custom-fonts-in-emails][]. You can use these if you need to run purely synchronous operations. They use the [deasync][] package under the hood!
You can even use Lipo from the command line:

@@ -179,6 +177,2 @@

[deasync]: https://github.com/abbr/deasync
[custom-fonts-in-emails]: https://github.com/ladjs/custom-fonts-in-emails
[koa]: http://koajs.com

@@ -185,0 +179,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc