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.9 to 0.0.10

54

lib/index.js
"use strict";
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function step(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 _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; }
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');

@@ -270,4 +272,50 @@

};
});
}); // Sourced from `lib/resize.js`:
// <https://github.com/lovell/sharp/blob/master/lib/resize.js>
// Weighting to apply when using contain/cover fit.
Lipo.gravity = {
center: 0,
centre: 0,
north: 1,
east: 2,
south: 3,
west: 4,
northeast: 5,
southeast: 6,
southwest: 7,
northwest: 8
}; // Position to apply when using contain/cover fit.
Lipo.position = {
top: 1,
right: 2,
bottom: 3,
left: 4,
'right top': 5,
'right bottom': 6,
'left bottom': 7,
'left top': 8
}; // Strategies for automagic cover behaviour.
Lipo.strategy = {
entropy: 16,
attention: 17
}; // Reduction kernels.
Lipo.kernel = {
nearest: 'nearest',
cubic: 'cubic',
lanczos2: 'lanczos2',
lanczos3: 'lanczos3'
}; // Methods by which an image can be resized to fit the provided dimensions.
Lipo.fit = {
contain: 'contain',
cover: 'cover',
fill: 'fill',
inside: 'inside',
outside: 'outside'
};
module.exports = Lipo;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcyIsInJlcXVpcmUiLCJkZWFzeW5jIiwiXyIsIkZyaXNiZWUiLCJGb3JtRGF0YSIsInNhZmVTdHJpbmdpZnkiLCJib29sZWFuIiwia2V5cyIsIkxpcG8iLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsIl9fY29uZmlnIiwiT2JqZWN0IiwiYXNzaWduIiwia2V5IiwicHJvY2VzcyIsImVudiIsIkxJUE9fS0VZIiwiYmFzZVVSSSIsIkxJUE8iLCJfX2FwaSIsImhlYWRlcnMiLCJBY2NlcHQiLCJhdXRoIiwiX19xdWV1ZSIsImlucHV0IiwiX19pbnB1dCIsIl9fbWV0YWRhdGEiLCJmbiIsInByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImJvZHkiLCJpc1N0cmluZyIsImFwcGVuZCIsImNyZWF0ZVJlYWRTdHJlYW0iLCJpc0J1ZmZlciIsImlzT2JqZWN0IiwicmVzIiwicG9zdCIsImVyciIsImlzRnVuY3Rpb24iLCJ0aGVuIiwiZGF0YSIsImNhdGNoIiwiX190b0ZpbGUiLCJmaWxlT3V0IiwiRXJyb3IiLCJyYXciLCJfX2luZm8iLCJmb3JtYXQiLCJnZXQiLCJzaXplIiwiTnVtYmVyIiwid2lkdGgiLCJoZWlnaHQiLCJjaGFubmVscyIsInByZW11bHRpcGxpZWQiLCJzdHJlYW0iLCJjcmVhdGVXcml0ZVN0cmVhbSIsIm9uIiwicGlwZSIsIl9fdG9CdWZmZXIiLCJvcHRpb25zIiwiYnVmZmVyIiwicmVzb2x2ZVdpdGhPYmplY3QiLCJpbmZvIiwidG9GaWxlU3luYyIsImRvbmUiLCJ0b0ZpbGUiLCJfZGF0YV8iLCJsb29wV2hpbGUiLCJ0b0J1ZmZlclN5bmMiLCJ0b0J1ZmZlciIsIm1ldGFkYXRhU3luYyIsIm1ldGFkYXRhIiwiY2xvbmUiLCJmb3JFYWNoIiwicHJvdG90eXBlIiwiYXJncyIsImluY2x1ZGVzIiwicHVzaCIsImNvbmNhdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3Mi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LENBQVA7QUFDdEIsV0FBTyxLQUFLakIsVUFBTCxDQUFnQixHQUFHaUIsSUFBbkIsQ0FBUDtBQUNELEdBWEQ7QUFZRCxDQWJEO0FBZUFJLE9BQU9DLE9BQVAsR0FBaUI3RSxJQUFqQiIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbmNvbnN0IGRlYXN5bmMgPSByZXF1aXJlKCdkZWFzeW5jJyk7XG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBGcmlzYmVlID0gcmVxdWlyZSgnZnJpc2JlZScpO1xuY29uc3QgRm9ybURhdGEgPSByZXF1aXJlKCdmb3JtLWRhdGEnKTtcbmNvbnN0IHNhZmVTdHJpbmdpZnkgPSByZXF1aXJlKCdmYXN0LXNhZmUtc3RyaW5naWZ5Jyk7XG5jb25zdCBib29sZWFuID0gcmVxdWlyZSgnYm9vbGVhbicpO1xuXG4vLyBPYmplY3Qua2V5cyhyZXF1aXJlKCdzaGFycCcpLnByb3RvdHlwZSkuZmlsdGVyKGtleSA9PiAha2V5LnN0YXJ0c1dpdGgoJ18nKSlcbmNvbnN0IGtleXMgPSBbXG4gICdtZXRhZGF0YScsXG4gICdsaW1pdElucHV0UGl4ZWxzJyxcbiAgJ3NlcXVlbnRpYWxSZWFkJyxcbiAgJ3Jlc2l6ZScsXG4gICdjcm9wJyxcbiAgJ2VtYmVkJyxcbiAgJ21heCcsXG4gICdtaW4nLFxuICAnaWdub3JlQXNwZWN0UmF0aW8nLFxuICAnd2l0aG91dEVubGFyZ2VtZW50JyxcbiAgJ292ZXJsYXlXaXRoJyxcbiAgJ3JvdGF0ZScsXG4gICdleHRyYWN0JyxcbiAgJ2ZsaXAnLFxuICAnZmxvcCcsXG4gICdzaGFycGVuJyxcbiAgJ2JsdXInLFxuICAnZXh0ZW5kJyxcbiAgJ2ZsYXR0ZW4nLFxuICAndHJpbScsXG4gICdnYW1tYScsXG4gICduZWdhdGUnLFxuICAnbm9ybWFsaXNlJyxcbiAgJ25vcm1hbGl6ZScsXG4gICdjb252b2x2ZScsXG4gICd0aHJlc2hvbGQnLFxuICAnYm9vbGVhbicsXG4gICdiYWNrZ3JvdW5kJyxcbiAgJ2dyZXlzY2FsZScsXG4gICdncmF5c2NhbGUnLFxuICAndG9Db2xvdXJzcGFjZScsXG4gICd0b0NvbG9yc3BhY2UnLFxuICAnZXh0cmFjdENoYW5uZWwnLFxuICAnam9pbkNoYW5uZWwnLFxuICAnYmFuZGJvb2wnLFxuICAndG9GaWxlJyxcbiAgJ3RvQnVmZmVyJyxcbiAgJ3dpdGhNZXRhZGF0YScsXG4gICdqcGVnJyxcbiAgJ3BuZycsXG4gICd3ZWJwJyxcbiAgJ3RpZmYnLFxuICAncmF3JyxcbiAgJ3RvRm9ybWF0JyxcbiAgJ3RpbGUnXG5dO1xuXG5jbGFzcyBMaXBvIHtcbiAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICB0aGlzLl9fY29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAga2V5OiBwcm9jZXNzLmVudi5MSVBPX0tFWSB8fCAnJyxcbiAgICAgICAgYmFzZVVSSTpcbiAgICAgICAgICBwcm9jZXNzLmVudi5MSVBPID09PSAndHJ1ZSdcbiAgICAgICAgICAgID8gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcbiAgICAgICAgICAgIDogJ2h0dHBzOi8vYXBpLmxpcG8uaW8nXG4gICAgICB9LFxuICAgICAgY29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMuX19hcGkgPSBuZXcgRnJpc2JlZSh7XG4gICAgICBiYXNlVVJJOiB0aGlzLl9fY29uZmlnLmJhc2VVUkksXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5fX2NvbmZpZy5rZXkpIHRoaXMuX19hcGkuYXV0aCh0aGlzLl9fY29uZmlnLmtleSk7XG5cbiAgICB0aGlzLl9fcXVldWUgPSBbXTtcblxuICAgIHJldHVybiBpbnB1dCA9PiB7XG4gICAgICB0aGlzLl9faW5wdXQgPSBpbnB1dDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICAvKlxuICAgIC8vIDxodHRwczovL2dpdGh1Yi5jb20vbG92ZWxsL3NoYXJwL2lzc3Vlcy8xMDQ1PlxuICAgIHJldHVybiAoaW5wdXQsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgdGhpcy5fX2lucHV0ID0gbnVsbDtcbiAgICAgIHRoaXMuX19vcHRpb25zID0ge307XG4gICAgICAvLyBpbnB1dCA9IEJ1ZmZlciB8IFN0cmluZ1xuICAgICAgLy8gb3B0aW9ucyA9IE9iamVjdFxuICAgICAgLy8gLSBkZW5zaXR5IChOdW1iZXIpXG4gICAgICAvLyAtIHJhdyAoT2JqZWN0KVxuICAgICAgLy8gICAtIHdpZHRoIChOdW1iZXIpXG4gICAgICAvLyAgIC0gaGVpZ2h0IChOdW1iZXIpXG4gICAgICAvLyAgIC0gY2hhbm5lbHMgKE51bWJlcjsgMS00KVxuICAgICAgLy8gLSBjcmVhdGUgKE9iamVjdClcbiAgICAgIC8vICAgLSB3aWR0aCAoTnVtYmVyKVxuICAgICAgLy8gICAtIGhlaWdodCAoTnVtYmVyKVxuICAgICAgLy8gICAtIGNoYW5uZWxzIChOdW1iZXI7IDMtNClcbiAgICAgIC8vICAgLSBiYWNrZ3JvdW5kIChTdHJpbmcgfCBPYmplY3QpXG4gICAgICBpZiAoXy5pc1N0cmluZyhpbnB1dCkgfHwgXy5pc0J1ZmZlcihpbnB1dCkpIHRoaXMuX19pbnB1dCA9IGlucHV0O1xuICAgICAgZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLl9faW5wdXQpKSB0aGlzLl9fb3B0aW9ucyA9IGlucHV0O1xuICAgICAgaWYgKCFfLmlzT2JqZWN0KHRoaXMuX19pbnB1dCkgJiYgXy5pc09iamVjdChvcHRpb25zKSlcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgICovXG4gIH1cblxuICBfX21ldGFkYXRhKGZuKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgaWYgKF8uaXNTdHJpbmcodGhpcy5fX2lucHV0KSlcbiAgICAgICAgICBib2R5LmFwcGVuZCgnaW5wdXQnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKHRoaXMuX19pbnB1dCkpO1xuICAgICAgICBlbHNlIGlmIChfLmlzQnVmZmVyKHRoaXMuX19pbnB1dCkpIGJvZHkuYXBwZW5kKCdpbnB1dCcsIHRoaXMuX19pbnB1dCk7XG4gICAgICAgIGVsc2UgaWYgKF8uaXNPYmplY3QodGhpcy5fX2lucHV0KSlcbiAgICAgICAgICBib2R5LmFwcGVuZCgnb3B0aW9ucycsIHNhZmVTdHJpbmdpZnkodGhpcy5fX2lucHV0KSk7XG4gICAgICAgIGJvZHkuYXBwZW5kKCdxdWV1ZScsIHNhZmVTdHJpbmdpZnkodGhpcy5fX3F1ZXVlKSk7XG4gICAgICAgIHRoaXMuX19xdWV1ZSA9IFtdO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9fYXBpLnBvc3QoJy8nLCB7IGJvZHkgfSk7XG4gICAgICAgIGlmIChyZXMuZXJyKSB0aHJvdyByZXMuZXJyO1xuICAgICAgICByZXNvbHZlKHJlcy5ib2R5KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGZuKSlcbiAgICAgIHByb21pc2VcbiAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgZm4obnVsbCwgZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmbik7XG4gICAgZWxzZSByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIF9fdG9GaWxlKGZpbGVPdXQsIGZuKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKGZpbGVPdXQpKSB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgb3V0cHV0IHBhdGggcmVxdWlyZWQnKTtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYm9keSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBpZiAoXy5pc1N0cmluZyh0aGlzLl9faW5wdXQpKVxuICAgICAgICAgIGJvZHkuYXBwZW5kKCdpbnB1dCcsIGZzLmNyZWF0ZVJlYWRTdHJlYW0odGhpcy5fX2lucHV0KSk7XG4gICAgICAgIGVsc2UgaWYgKF8uaXNCdWZmZXIodGhpcy5fX2lucHV0KSkgYm9keS5hcHBlbmQoJ2lucHV0JywgdGhpcy5fX2lucHV0KTtcbiAgICAgICAgZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLl9faW5wdXQpKVxuICAgICAgICAgIGJvZHkuYXBwZW5kKCdvcHRpb25zJywgc2FmZVN0cmluZ2lmeSh0aGlzLl9faW5wdXQpKTtcbiAgICAgICAgYm9keS5hcHBlbmQoJ3F1ZXVlJywgc2FmZVN0cmluZ2lmeSh0aGlzLl9fcXVldWUpKTtcbiAgICAgICAgdGhpcy5fX3F1ZXVlID0gW107XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX19hcGkucG9zdCgnLycsIHsgYm9keSwgcmF3OiB0cnVlIH0pO1xuICAgICAgICBpZiAocmVzLmVycikgdGhyb3cgcmVzLmVycjtcbiAgICAgICAgdGhpcy5fX2luZm8gPSB7XG4gICAgICAgICAgZm9ybWF0OiByZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtZm9ybWF0JyksXG4gICAgICAgICAgc2l6ZTogTnVtYmVyKHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC1zaXplJykpLFxuICAgICAgICAgIHdpZHRoOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLXdpZHRoJykpLFxuICAgICAgICAgIGhlaWdodDogTnVtYmVyKHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC1oZWlnaHQnKSksXG4gICAgICAgICAgY2hhbm5lbHM6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtY2hhbm5lbHMnKSksXG4gICAgICAgICAgcHJlbXVsdGlwbGllZDogYm9vbGVhbihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtbXVsdGlwbGllZCcpKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShmaWxlT3V0KTtcbiAgICAgICAgLy8gbGV0IHRpbWVyO1xuICAgICAgICAvLyBzdHJlYW0ub24oJ29wZW4nLCAoKSA9PiB7XG4gICAgICAgIC8vICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgIHN0cmVhbS5jbG9zZSgpO1xuICAgICAgICAvLyAgICAgcmVqZWN0KG5ldyBFcnJvcignVGltZWQgb3V0IHdoaWxlIHdyaXRpbmcgZmlsZScpKTtcbiAgICAgICAgLy8gICB9LCAxMDAwMCk7XG4gICAgICAgIC8vIH0pO1xuICAgICAgICBzdHJlYW0ub24oJ2Vycm9yJywgcmVqZWN0KS5vbignZmluaXNoJywgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fX2luZm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzLmJvZHkub24oJ2Vycm9yJywgcmVqZWN0KS5waXBlKHN0cmVhbSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihmbikpXG4gICAgICBwcm9taXNlXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIGZuKG51bGwsIGRhdGEpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZm4pO1xuICAgIGVsc2UgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBfX3RvQnVmZmVyKG9wdGlvbnMgPSB7fSwgZm4pIHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSBmbiA9IG9wdGlvbnM7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgaWYgKF8uaXNTdHJpbmcodGhpcy5fX2lucHV0KSlcbiAgICAgICAgICBib2R5LmFwcGVuZCgnaW5wdXQnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKHRoaXMuX19pbnB1dCkpO1xuICAgICAgICBlbHNlIGlmIChfLmlzQnVmZmVyKHRoaXMuX19pbnB1dCkpIGJvZHkuYXBwZW5kKCdpbnB1dCcsIHRoaXMuX19pbnB1dCk7XG4gICAgICAgIGVsc2UgaWYgKF8uaXNPYmplY3QodGhpcy5fX2lucHV0KSlcbiAgICAgICAgICBib2R5LmFwcGVuZCgnb3B0aW9ucycsIHNhZmVTdHJpbmdpZnkodGhpcy5fX2lucHV0KSk7XG4gICAgICAgIGJvZHkuYXBwZW5kKCdxdWV1ZScsIHNhZmVTdHJpbmdpZnkodGhpcy5fX3F1ZXVlKSk7XG4gICAgICAgIHRoaXMuX19xdWV1ZSA9IFtdO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9fYXBpLnBvc3QoJy8nLCB7IGJvZHksIHJhdzogdHJ1ZSB9KTtcbiAgICAgICAgaWYgKHJlcy5lcnIpIHRocm93IHJlcy5lcnI7XG4gICAgICAgIHRoaXMuX19pbmZvID0ge1xuICAgICAgICAgIGZvcm1hdDogcmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWZvcm1hdCcpLFxuICAgICAgICAgIHNpemU6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtc2l6ZScpKSxcbiAgICAgICAgICB3aWR0aDogTnVtYmVyKHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC13aWR0aCcpKSxcbiAgICAgICAgICBoZWlnaHQ6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtaGVpZ2h0JykpLFxuICAgICAgICAgIGNoYW5uZWxzOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWNoYW5uZWxzJykpLFxuICAgICAgICAgIHByZW11bHRpcGxpZWQ6IGJvb2xlYW4ocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLW11bHRpcGxpZWQnKSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5idWZmZXIoKTtcbiAgICAgICAgaWYgKF8uaXNPYmplY3Qob3B0aW9ucykgJiYgYm9vbGVhbihvcHRpb25zLnJlc29sdmVXaXRoT2JqZWN0KSlcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7IGRhdGEsIGluZm86IHRoaXMuX19pbmZvIH0pO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKF8uaXNGdW5jdGlvbihmbikpXG4gICAgICBwcm9taXNlXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIGZuKG51bGwsIGRhdGEsIHRoaXMuX19pbmZvKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZuKTtcbiAgICBlbHNlIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9sb3ZlbGwvc2hhcnAvaXNzdWVzLzM2MCNpc3N1ZWNvbW1lbnQtMTg1MTYyOTk4PlxuICB0b0ZpbGVTeW5jKGZpbGVPdXQpIHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIGxldCBkYXRhO1xuICAgIHRoaXMudG9GaWxlKGZpbGVPdXQsIChlcnIsIF9kYXRhXykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICBkYXRhID0gX2RhdGFfO1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgfSk7XG4gICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4ge1xuICAgICAgcmV0dXJuICFkb25lO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdG9CdWZmZXJTeW5jKCkge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgbGV0IGRhdGE7XG4gICAgdGhpcy50b0J1ZmZlcigoZXJyLCBfZGF0YV8pID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgZGF0YSA9IF9kYXRhXztcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgIH0pO1xuICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+IHtcbiAgICAgIHJldHVybiAhZG9uZTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIG1ldGFkYXRhU3luYygpIHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIGxldCBkYXRhO1xuICAgIHRoaXMubWV0YWRhdGEoKGVyciwgX2RhdGFfKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIGRhdGEgPSBfZGF0YV87XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiB7XG4gICAgICByZXR1cm4gIWRvbmU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IExpcG8oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fX2NvbmZpZykpKHRoaXMuX19pbnB1dCk7XG4gIH1cbn1cblxua2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gIExpcG8ucHJvdG90eXBlW2tleV0gPSBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgaWYgKCFbJ3RvRmlsZScsICd0b0J1ZmZlcicsICdtZXRhZGF0YSddLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHRoaXMuX19xdWV1ZS5wdXNoKFtrZXldLmNvbmNhdChhcmdzKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKGtleSA9PT0gJ21ldGFkYXRhJykge1xuICAgICAgdGhpcy5fX3F1ZXVlLnB1c2goWydtZXRhZGF0YSddKTtcbiAgICAgIHJldHVybiB0aGlzLl9fbWV0YWRhdGEoLi4uYXJncyk7XG4gICAgfVxuICAgIGlmIChrZXkgPT09ICd0b0ZpbGUnKSByZXR1cm4gdGhpcy5fX3RvRmlsZSguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy5fX3RvQnVmZmVyKC4uLmFyZ3MpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlwbztcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcyIsInJlcXVpcmUiLCJkZWFzeW5jIiwiXyIsIkZyaXNiZWUiLCJGb3JtRGF0YSIsInNhZmVTdHJpbmdpZnkiLCJib29sZWFuIiwia2V5cyIsIkxpcG8iLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsIl9fY29uZmlnIiwiT2JqZWN0IiwiYXNzaWduIiwia2V5IiwicHJvY2VzcyIsImVudiIsIkxJUE9fS0VZIiwiYmFzZVVSSSIsIkxJUE8iLCJfX2FwaSIsImhlYWRlcnMiLCJBY2NlcHQiLCJhdXRoIiwiX19xdWV1ZSIsImlucHV0IiwiX19pbnB1dCIsIl9fbWV0YWRhdGEiLCJmbiIsInByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImJvZHkiLCJpc1N0cmluZyIsImFwcGVuZCIsImNyZWF0ZVJlYWRTdHJlYW0iLCJpc0J1ZmZlciIsImlzT2JqZWN0IiwicmVzIiwicG9zdCIsImVyciIsImlzRnVuY3Rpb24iLCJ0aGVuIiwiZGF0YSIsImNhdGNoIiwiX190b0ZpbGUiLCJmaWxlT3V0IiwiRXJyb3IiLCJyYXciLCJfX2luZm8iLCJmb3JtYXQiLCJnZXQiLCJzaXplIiwiTnVtYmVyIiwid2lkdGgiLCJoZWlnaHQiLCJjaGFubmVscyIsInByZW11bHRpcGxpZWQiLCJzdHJlYW0iLCJjcmVhdGVXcml0ZVN0cmVhbSIsIm9uIiwicGlwZSIsIl9fdG9CdWZmZXIiLCJvcHRpb25zIiwiYnVmZmVyIiwicmVzb2x2ZVdpdGhPYmplY3QiLCJpbmZvIiwidG9GaWxlU3luYyIsImRvbmUiLCJ0b0ZpbGUiLCJfZGF0YV8iLCJsb29wV2hpbGUiLCJ0b0J1ZmZlclN5bmMiLCJ0b0J1ZmZlciIsIm1ldGFkYXRhU3luYyIsIm1ldGFkYXRhIiwiY2xvbmUiLCJmb3JFYWNoIiwicHJvdG90eXBlIiwiYXJncyIsImluY2x1ZGVzIiwicHVzaCIsImNvbmNhdCIsImdyYXZpdHkiLCJjZW50ZXIiLCJjZW50cmUiLCJub3J0aCIsImVhc3QiLCJzb3V0aCIsIndlc3QiLCJub3J0aGVhc3QiLCJzb3V0aGVhc3QiLCJzb3V0aHdlc3QiLCJub3J0aHdlc3QiLCJwb3NpdGlvbiIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInN0cmF0ZWd5IiwiZW50cm9weSIsImF0dGVudGlvbiIsImtlcm5lbCIsIm5lYXJlc3QiLCJjdWJpYyIsImxhbmN6b3MyIiwibGFuY3pvczMiLCJmaXQiLCJjb250YWluIiwiY292ZXIiLCJmaWxsIiwiaW5zaWRlIiwib3V0c2lkZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU1BLEVBQUUsR0FBR0MsT0FBTyxDQUFDLElBQUQsQ0FBbEI7O0FBQ0EsTUFBTUMsT0FBTyxHQUFHRCxPQUFPLENBQUMsU0FBRCxDQUF2Qjs7QUFDQSxNQUFNRSxDQUFDLEdBQUdGLE9BQU8sQ0FBQyxRQUFELENBQWpCOztBQUNBLE1BQU1HLE9BQU8sR0FBR0gsT0FBTyxDQUFDLFNBQUQsQ0FBdkI7O0FBQ0EsTUFBTUksUUFBUSxHQUFHSixPQUFPLENBQUMsV0FBRCxDQUF4Qjs7QUFDQSxNQUFNSyxhQUFhLEdBQUdMLE9BQU8sQ0FBQyxxQkFBRCxDQUE3Qjs7QUFDQSxNQUFNTSxPQUFPLEdBQUdOLE9BQU8sQ0FBQyxTQUFELENBQXZCLEMsQ0FFQTs7O0FBQ0EsTUFBTU8sSUFBSSxHQUFHLENBQ1gsVUFEVyxFQUVYLGtCQUZXLEVBR1gsZ0JBSFcsRUFJWCxRQUpXLEVBS1gsTUFMVyxFQU1YLE9BTlcsRUFPWCxLQVBXLEVBUVgsS0FSVyxFQVNYLG1CQVRXLEVBVVgsb0JBVlcsRUFXWCxhQVhXLEVBWVgsUUFaVyxFQWFYLFNBYlcsRUFjWCxNQWRXLEVBZVgsTUFmVyxFQWdCWCxTQWhCVyxFQWlCWCxNQWpCVyxFQWtCWCxRQWxCVyxFQW1CWCxTQW5CVyxFQW9CWCxNQXBCVyxFQXFCWCxPQXJCVyxFQXNCWCxRQXRCVyxFQXVCWCxXQXZCVyxFQXdCWCxXQXhCVyxFQXlCWCxVQXpCVyxF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Y2VzQ29udGVudCI6WyJjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCBkZWFzeW5jID0gcmVxdWlyZSgnZGVhc3luYycpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuY29uc3QgRnJpc2JlZSA9IHJlcXVpcmUoJ2ZyaXNiZWUnKTtcbmNvbnN0IEZvcm1EYXRhID0gcmVxdWlyZSgnZm9ybS1kYXRhJyk7XG5jb25zdCBzYWZlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1zYWZlLXN0cmluZ2lmeScpO1xuY29uc3QgYm9vbGVhbiA9IHJlcXVpcmUoJ2Jvb2xlYW4nKTtcblxuLy8gT2JqZWN0LmtleXMocmVxdWlyZSgnc2hhcnAnKS5wcm90b3R5cGUpLmZpbHRlcihrZXkgPT4gIWtleS5zdGFydHNXaXRoKCdfJykpXG5jb25zdCBrZXlzID0gW1xuICAnbWV0YWRhdGEnLFxuICAnbGltaXRJbnB1dFBpeGVscycsXG4gICdzZXF1ZW50aWFsUmVhZCcsXG4gICdyZXNpemUnLFxuICAnY3JvcCcsXG4gICdlbWJlZCcsXG4gICdtYXgnLFxuICAnbWluJyxcbiAgJ2lnbm9yZUFzcGVjdFJhdGlvJyxcbiAgJ3dpdGhvdXRFbmxhcmdlbWVudCcsXG4gICdvdmVybGF5V2l0aCcsXG4gICdyb3RhdGUnLFxuICAnZXh0cmFjdCcsXG4gICdmbGlwJyxcbiAgJ2Zsb3AnLFxuICAnc2hhcnBlbicsXG4gICdibHVyJyxcbiAgJ2V4dGVuZCcsXG4gICdmbGF0dGVuJyxcbiAgJ3RyaW0nLFxuICAnZ2FtbWEnLFxuICAnbmVnYXRlJyxcbiAgJ25vcm1hbGlzZScsXG4gICdub3JtYWxpemUnLFxuICAnY29udm9sdmUnLFxuICAndGhyZXNob2xkJyxcbiAgJ2Jvb2xlYW4nLFxuICAnYmFja2dyb3VuZCcsXG4gICdncmV5c2NhbGUnLFxuICAnZ3JheXNjYWxlJyxcbiAgJ3RvQ29sb3Vyc3BhY2UnLFxuICAndG9Db2xvcnNwYWNlJyxcbiAgJ2V4dHJhY3RDaGFubmVsJyxcbiAgJ2pvaW5DaGFubmVsJyxcbiAgJ2JhbmRib29sJyxcbiAgJ3RvRmlsZScsXG4gICd0b0J1ZmZlcicsXG4gICd3aXRoTWV0YWRhdGEnLFxuICAnanBlZycsXG4gICdwbmcnLFxuICAnd2VicCcsXG4gICd0aWZmJyxcbiAgJ3JhdycsXG4gICd0b0Zvcm1hdCcsXG4gICd0aWxlJ1xuXTtcblxuY2xhc3MgTGlwbyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgdGhpcy5fX2NvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIGtleTogcHJvY2Vzcy5lbnYuTElQT19LRVkgfHwgJycsXG4gICAgICAgIGJhc2VVUkk6XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTElQTyA9PT0gJ3RydWUnXG4gICAgICAgICAgICA/ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgICAgICAgICA6ICdodHRwczovL2FwaS5saXBvLmlvJ1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ1xuICAgICk7XG5cbiAgICB0aGlzLl9fYXBpID0gbmV3IEZyaXNiZWUoe1xuICAgICAgYmFzZVVSSTogdGhpcy5fX2NvbmZpZy5iYXNlVVJJLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX19jb25maWcua2V5KSB0aGlzLl9fYXBpLmF1dGgodGhpcy5fX2NvbmZpZy5rZXkpO1xuXG4gICAgdGhpcy5fX3F1ZXVlID0gW107XG5cbiAgICByZXR1cm4gaW5wdXQgPT4ge1xuICAgICAgdGhpcy5fX2lucHV0ID0gaW5wdXQ7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLypcbiAgICAvLyA8aHR0cHM6Ly9naXRodWIuY29tL2xvdmVsbC9zaGFycC9pc3N1ZXMvMTA0NT5cbiAgICByZXR1cm4gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgIHRoaXMuX19pbnB1dCA9IG51bGw7XG4gICAgICB0aGlzLl9fb3B0aW9ucyA9IHt9O1xuICAgICAgLy8gaW5wdXQgPSBCdWZmZXIgfCBTdHJpbmdcbiAgICAgIC8vIG9wdGlvbnMgPSBPYmplY3RcbiAgICAgIC8vIC0gZGVuc2l0eSAoTnVtYmVyKVxuICAgICAgLy8gLSByYXcgKE9iamVjdClcbiAgICAgIC8vICAgLSB3aWR0aCAoTnVtYmVyKVxuICAgICAgLy8gICAtIGhlaWdodCAoTnVtYmVyKVxuICAgICAgLy8gICAtIGNoYW5uZWxzIChOdW1iZXI7IDEtNClcbiAgICAgIC8vIC0gY3JlYXRlIChPYmplY3QpXG4gICAgICAvLyAgIC0gd2lkdGggKE51bWJlcilcbiAgICAgIC8vICAgLSBoZWlnaHQgKE51bWJlcilcbiAgICAgIC8vICAgLSBjaGFubmVscyAoTnVtYmVyOyAzLTQpXG4gICAgICAvLyAgIC0gYmFja2dyb3VuZCAoU3RyaW5nIHwgT2JqZWN0KVxuICAgICAgaWYgKF8uaXNTdHJpbmcoaW5wdXQpIHx8IF8uaXNCdWZmZXIoaW5wdXQpKSB0aGlzLl9faW5wdXQgPSBpbnB1dDtcbiAgICAgIGVsc2UgaWYgKF8uaXNPYmplY3QodGhpcy5fX2lucHV0KSkgdGhpcy5fX29wdGlvbnMgPSBpbnB1dDtcbiAgICAgIGlmICghXy5pc09iamVjdCh0aGlzLl9faW5wdXQpICYmIF8uaXNPYmplY3Qob3B0aW9ucykpXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAqL1xuICB9XG5cbiAgX19tZXRhZGF0YShmbikge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBib2R5ID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGlmIChfLmlzU3RyaW5nKHRoaXMuX19pbnB1dCkpXG4gICAgICAgICAgYm9keS5hcHBlbmQoJ2lucHV0JywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0aGlzLl9faW5wdXQpKTtcbiAgICAgICAgZWxzZSBpZiAoXy5pc0J1ZmZlcih0aGlzLl9faW5wdXQpKSBib2R5LmFwcGVuZCgnaW5wdXQnLCB0aGlzLl9faW5wdXQpO1xuICAgICAgICBlbHNlIGlmIChfLmlzT2JqZWN0KHRoaXMuX19pbnB1dCkpXG4gICAgICAgICAgYm9keS5hcHBlbmQoJ29wdGlvbnMnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19pbnB1dCkpO1xuICAgICAgICBib2R5LmFwcGVuZCgncXVldWUnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19xdWV1ZSkpO1xuICAgICAgICB0aGlzLl9fcXVldWUgPSBbXTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fX2FwaS5wb3N0KCcvJywgeyBib2R5IH0pO1xuICAgICAgICBpZiAocmVzLmVycikgdGhyb3cgcmVzLmVycjtcbiAgICAgICAgcmVzb2x2ZShyZXMuYm9keSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihmbikpXG4gICAgICBwcm9taXNlXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIGZuKG51bGwsIGRhdGEpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZm4pO1xuICAgIGVsc2UgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBfX3RvRmlsZShmaWxlT3V0LCBmbikge1xuICAgIGlmICghXy5pc1N0cmluZyhmaWxlT3V0KSkgdGhyb3cgbmV3IEVycm9yKCdGaWxlIG91dHB1dCBwYXRoIHJlcXVpcmVkJyk7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgaWYgKF8uaXNTdHJpbmcodGhpcy5fX2lucHV0KSlcbiAgICAgICAgICBib2R5LmFwcGVuZCgnaW5wdXQnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKHRoaXMuX19pbnB1dCkpO1xuICAgICAgICBlbHNlIGlmIChfLmlzQnVmZmVyKHRoaXMuX19pbnB1dCkpIGJvZHkuYXBwZW5kKCdpbnB1dCcsIHRoaXMuX19pbnB1dCk7XG4gICAgICAgIGVsc2UgaWYgKF8uaXNPYmplY3QodGhpcy5fX2lucHV0KSlcbiAgICAgICAgICBib2R5LmFwcGVuZCgnb3B0aW9ucycsIHNhZmVTdHJpbmdpZnkodGhpcy5fX2lucHV0KSk7XG4gICAgICAgIGJvZHkuYXBwZW5kKCdxdWV1ZScsIHNhZmVTdHJpbmdpZnkodGhpcy5fX3F1ZXVlKSk7XG4gICAgICAgIHRoaXMuX19xdWV1ZSA9IFtdO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9fYXBpLnBvc3QoJy8nLCB7IGJvZHksIHJhdzogdHJ1ZSB9KTtcbiAgICAgICAgaWYgKHJlcy5lcnIpIHRocm93IHJlcy5lcnI7XG4gICAgICAgIHRoaXMuX19pbmZvID0ge1xuICAgICAgICAgIGZvcm1hdDogcmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWZvcm1hdCcpLFxuICAgICAgICAgIHNpemU6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtc2l6ZScpKSxcbiAgICAgICAgICB3aWR0aDogTnVtYmVyKHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC13aWR0aCcpKSxcbiAgICAgICAgICBoZWlnaHQ6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtaGVpZ2h0JykpLFxuICAgICAgICAgIGNoYW5uZWxzOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWNoYW5uZWxzJykpLFxuICAgICAgICAgIHByZW11bHRpcGxpZWQ6IGJvb2xlYW4ocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLW11bHRpcGxpZWQnKSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZU91dCk7XG4gICAgICAgIC8vIGxldCB0aW1lcjtcbiAgICAgICAgLy8gc3RyZWFtLm9uKCdvcGVuJywgKCkgPT4ge1xuICAgICAgICAvLyAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICBzdHJlYW0uY2xvc2UoKTtcbiAgICAgICAgLy8gICAgIHJlamVjdChuZXcgRXJyb3IoJ1RpbWVkIG91dCB3aGlsZSB3cml0aW5nIGZpbGUnKSk7XG4gICAgICAgIC8vICAgfSwgMTAwMDApO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIHJlamVjdCkub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX19pbmZvKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5ib2R5Lm9uKCdlcnJvcicsIHJlamVjdCkucGlwZShzdHJlYW0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChfLmlzRnVuY3Rpb24oZm4pKVxuICAgICAgcHJvbWlzZVxuICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICBmbihudWxsLCBkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZuKTtcbiAgICBlbHNlIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgX190b0J1ZmZlcihvcHRpb25zID0ge30sIGZuKSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihvcHRpb25zKSkgZm4gPSBvcHRpb25zO1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBib2R5ID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGlmIChfLmlzU3RyaW5nKHRoaXMuX19pbnB1dCkpXG4gICAgICAgICAgYm9keS5hcHBlbmQoJ2lucHV0JywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0aGlzLl9faW5wdXQpKTtcbiAgICAgICAgZWxzZSBpZiAoXy5pc0J1ZmZlcih0aGlzLl9faW5wdXQpKSBib2R5LmFwcGVuZCgnaW5wdXQnLCB0aGlzLl9faW5wdXQpO1xuICAgICAgICBlbHNlIGlmIChfLmlzT2JqZWN0KHRoaXMuX19pbnB1dCkpXG4gICAgICAgICAgYm9keS5hcHBlbmQoJ29wdGlvbnMnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19pbnB1dCkpO1xuICAgICAgICBib2R5LmFwcGVuZCgncXVldWUnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19xdWV1ZSkpO1xuICAgICAgICB0aGlzLl9fcXVldWUgPSBbXTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fX2FwaS5wb3N0KCcvJywgeyBib2R5LCByYXc6IHRydWUgfSk7XG4gICAgICAgIGlmIChyZXMuZXJyKSB0aHJvdyByZXMuZXJyO1xuICAgICAgICB0aGlzLl9faW5mbyA9IHtcbiAgICAgICAgICBmb3JtYXQ6IHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC1mb3JtYXQnKSxcbiAgICAgICAgICBzaXplOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLXNpemUnKSksXG4gICAgICAgICAgd2lkdGg6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtd2lkdGgnKSksXG4gICAgICAgICAgaGVpZ2h0OiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWhlaWdodCcpKSxcbiAgICAgICAgICBjaGFubmVsczogTnVtYmVyKHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC1jaGFubmVscycpKSxcbiAgICAgICAgICBwcmVtdWx0aXBsaWVkOiBib29sZWFuKHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC1tdWx0aXBsaWVkJykpXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuYnVmZmVyKCk7XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KG9wdGlvbnMpICYmIGJvb2xlYW4ob3B0aW9ucy5yZXNvbHZlV2l0aE9iamVjdCkpXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoeyBkYXRhLCBpbmZvOiB0aGlzLl9faW5mbyB9KTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChfLmlzRnVuY3Rpb24oZm4pKVxuICAgICAgcHJvbWlzZVxuICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICBmbihudWxsLCBkYXRhLCB0aGlzLl9faW5mbyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmbik7XG4gICAgZWxzZSByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIC8vIDxodHRwczovL2dpdGh1Yi5jb20vbG92ZWxsL3NoYXJwL2lzc3Vlcy8zNjAjaXNzdWVjb21tZW50LTE4NTE2Mjk5OD5cbiAgdG9GaWxlU3luYyhmaWxlT3V0KSB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICBsZXQgZGF0YTtcbiAgICB0aGlzLnRvRmlsZShmaWxlT3V0LCAoZXJyLCBfZGF0YV8pID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgZGF0YSA9IF9kYXRhXztcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgIH0pO1xuICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+IHtcbiAgICAgIHJldHVybiAhZG9uZTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHRvQnVmZmVyU3luYygpIHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIGxldCBkYXRhO1xuICAgIHRoaXMudG9CdWZmZXIoKGVyciwgX2RhdGFfKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIGRhdGEgPSBfZGF0YV87XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiB7XG4gICAgICByZXR1cm4gIWRvbmU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBtZXRhZGF0YVN5bmMoKSB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICBsZXQgZGF0YTtcbiAgICB0aGlzLm1ldGFkYXRhKChlcnIsIF9kYXRhXykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICBkYXRhID0gX2RhdGFfO1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgfSk7XG4gICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4ge1xuICAgICAgcmV0dXJuICFkb25lO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBMaXBvKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX19jb25maWcpKSh0aGlzLl9faW5wdXQpO1xuICB9XG59XG5cbmtleXMuZm9yRWFjaChrZXkgPT4ge1xuICBMaXBvLnByb3RvdHlwZVtrZXldID0gZnVuY3Rpb24oLi4uYXJncykge1xuICAgIGlmICghWyd0b0ZpbGUnLCAndG9CdWZmZXInLCAnbWV0YWRhdGEnXS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICB0aGlzLl9fcXVldWUucHVzaChba2V5XS5jb25jYXQoYXJncykpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmIChrZXkgPT09ICdtZXRhZGF0YScpIHtcbiAgICAgIHRoaXMuX19xdWV1ZS5wdXNoKFsnbWV0YWRhdGEnXSk7XG4gICAgICByZXR1cm4gdGhpcy5fX21ldGFkYXRhKC4uLmFyZ3MpO1xuICAgIH1cbiAgICBpZiAoa2V5ID09PSAndG9GaWxlJykgcmV0dXJuIHRoaXMuX190b0ZpbGUoLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXMuX190b0J1ZmZlciguLi5hcmdzKTtcbiAgfTtcbn0pO1xuXG4vLyBTb3VyY2VkIGZyb20gYGxpYi9yZXNpemUuanNgOlxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9sb3ZlbGwvc2hhcnAvYmxvYi9tYXN0ZXIvbGliL3Jlc2l6ZS5qcz5cblxuLy8gV2VpZ2h0aW5nIHRvIGFwcGx5IHdoZW4gdXNpbmcgY29udGFpbi9jb3ZlciBmaXQuXG5MaXBvLmdyYXZpdHkgPSB7XG4gIGNlbnRlcjogMCxcbiAgY2VudHJlOiAwLFxuICBub3J0aDogMSxcbiAgZWFzdDogMixcbiAgc291dGg6IDMsXG4gIHdlc3Q6IDQsXG4gIG5vcnRoZWFzdDogNSxcbiAgc291dGhlYXN0OiA2LFxuICBzb3V0aHdlc3Q6IDcsXG4gIG5vcnRod2VzdDogOFxufTtcblxuLy8gUG9zaXRpb24gdG8gYXBwbHkgd2hlbiB1c2luZyBjb250YWluL2NvdmVyIGZpdC5cbkxpcG8ucG9zaXRpb24gPSB7XG4gIHRvcDogMSxcbiAgcmlnaHQ6IDIsXG4gIGJvdHRvbTogMyxcbiAgbGVmdDogNCxcbiAgJ3JpZ2h0IHRvcCc6IDUsXG4gICdyaWdodCBib3R0b20nOiA2LFxuICAnbGVmdCBib3R0b20nOiA3LFxuICAnbGVmdCB0b3AnOiA4XG59O1xuXG4vLyBTdHJhdGVnaWVzIGZvciBhdXRvbWFnaWMgY292ZXIgYmVoYXZpb3VyLlxuTGlwby5zdHJhdGVneSA9IHtcbiAgZW50cm9weTogMTYsXG4gIGF0dGVudGlvbjogMTdcbn07XG5cbi8vIFJlZHVjdGlvbiBrZXJuZWxzLlxuTGlwby5rZXJuZWwgPSB7XG4gIG5lYXJlc3Q6ICduZWFyZXN0JyxcbiAgY3ViaWM6ICdjdWJpYycsXG4gIGxhbmN6b3MyOiAnbGFuY3pvczInLFxuICBsYW5jem9zMzogJ2xhbmN6b3MzJ1xufTtcblxuLy8gTWV0aG9kcyBieSB3aGljaCBhbiBpbWFnZSBjYW4gYmUgcmVzaXplZCB0byBmaXQgdGhlIHByb3ZpZGVkIGRpbWVuc2lvbnMuXG5MaXBvLmZpdCA9IHtcbiAgY29udGFpbjogJ2NvbnRhaW4nLFxuICBjb3ZlcjogJ2NvdmVyJyxcbiAgZmlsbDogJ2ZpbGwnLFxuICBpbnNpZGU6ICdpbnNpZGUnLFxuICBvdXRzaWRlOiAnb3V0c2lkZSdcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTGlwbztcbiJdfQ==

7

package.json
{
"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.9",
"version": "0.0.10",
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com/)",

@@ -148,4 +148,7 @@ "bugs": {

},
"space": true
"space": true,
"ignores": [
"config.js"
]
}
}
<h1 align="center">
<a href="https://lipo.io"><img src="media/logo-100x61@2x.png" width="100" height="61" alt="lipo" /></a>
<a href="https://lipo.io"><img src="media/logo.png" alt="lipo" /></a>
</h1>
<div align="center">
<a href="http://slack.crocodilejs.com"><img src="http://slack.crocodilejs.com/badge.svg" alt="chat" /></a>
<a href="https://semaphoreci.com/niftylettuce/lipo"><img src="https://semaphoreci.com/api/v1/niftylettuce/lipo/branches/master/shields_badge.svg" alt="build status"></a>
<a href="https://travis-ci.org/lipojs/lipo"><img src="https://img.shields.io/travis/lipojs/lipo.svg" alt="build status" /></a>
<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>

@@ -92,3 +92,14 @@ <a href="https://github.com/sindresorhus/xo"><img src="https://img.shields.io/badge/code_style-XO-5ed9c7.svg" alt="code style" /></a>

You can even use Lipo from the command line:
```sh
curl -F "input=@/Users/me/Desktop/input.jpg" \
-F 'queue=[ [ "resize", 300, 300 ] ]' \
-o /Users/me/Desktop/output.jpg \
https://api.lipo.io
```
> **Resize Method Options**: If you need to use constant values such as `sharp.kernel.nearest`, `sharp.gravity.centre`, or any other option from [resize](https://github.com/lovell/sharp/blob/master/docs/api-resize.md#resize), please use the alternate form of `Lipo.kernel.nearest` and `Lipo.gravity.centre`, respectively (just as an example)
## Rate Limiting

@@ -156,2 +167,4 @@

<a href="#"><img src="media/footer.png" alt="#" /></a>
[npm]: https://www.npmjs.com/

@@ -158,0 +171,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