@cloudbase/utilities
Version:
cloudbase javascript sdk utilities
189 lines • 23.3 kB
JavaScript
import { getSdkName } from '../constants';
export function isArray(val) {
return Object.prototype.toString.call(val) === '[object Array]';
}
export function isString(val) {
return typeof val === 'string';
}
export function isUndefined(val) {
return typeof val === 'undefined';
}
export function isPalinObject(val) {
return Object.prototype.toString.call(val) === '[object Object]';
}
export function isNull(val) {
return Object.prototype.toString.call(val) === '[object Null]';
}
export function isInstanceOf(instance, construct) {
return instance instanceof construct;
}
export function isFormData(val) {
return Object.prototype.toString.call(val) === '[object FormData]';
}
export function genSeqId() {
return Math.random().toString(16)
.slice(2);
}
export function generateRequestId() {
var d = new Date().getTime();
var d2 = ((performance === null || performance === void 0 ? void 0 : performance.now) && (performance.now() * 1000)) || 0;
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16;
if (d > 0) {
r = (d + r) % 16 | 0;
d = Math.floor(d / 16);
}
else {
r = (d2 + r) % 16 | 0;
d2 = Math.floor(d2 / 16);
}
return (c === 'x' ? r : ((r & 0x7) | 0x8)).toString(16);
});
}
export function formatUrl(PROTOCOL, url, query) {
if (query === void 0) { query = {}; }
var urlHasQuery = /\?/.test(url);
var queryString = '';
Object.keys(query).forEach(function (key) {
if (queryString === '') {
!urlHasQuery && (url += '?');
}
else {
queryString += '&';
}
queryString += "".concat(key, "=").concat(encodeURIComponent(query[key]));
});
url += queryString;
if (/^http(s)?:\/\//.test(url)) {
return url;
}
return "".concat(PROTOCOL).concat(url);
}
export function toQueryString(query) {
if (query === void 0) { query = {}; }
var queryString = [];
Object.keys(query).forEach(function (key) {
queryString.push("".concat(key, "=").concat(encodeURIComponent(query[key])));
});
return queryString.join('&');
}
export function getQuery(name, url) {
if (typeof window === 'undefined') {
return false;
}
var u = url || window.location.search;
var reg = new RegExp("(^|&)".concat(name, "=([^&]*)(&|$)"));
var r = u.substr(u.indexOf('?') + 1).match(reg);
return (r !== null && r !== undefined) ? r[2] : '';
}
export var getHash = function (name) {
if (typeof window === 'undefined') {
return '';
}
var matches = window.location.hash.match(new RegExp("[#?&/]".concat(name, "=([^&#]*)")));
return matches ? matches[1] : '';
};
export function removeParam(key, sourceURL) {
var rtn = sourceURL.split('?')[0];
var param;
var params = [];
var queryString = sourceURL.indexOf('?') !== -1 ? sourceURL.split('?')[1] : '';
if (queryString !== '') {
params = queryString.split('&');
for (var i = params.length - 1; i >= 0; i -= 1) {
param = params[i].split('=')[0];
if (param === key) {
params.splice(i, 1);
}
}
rtn = "".concat(rtn, "?").concat(params.join('&'));
}
return rtn;
}
export function createPromiseCallback() {
var cb;
if (!Promise) {
cb = function () { };
cb.promise = {};
var throwPromiseNotDefined = function () {
throw new Error('Your Node runtime does support ES6 Promises. '
+ 'Set "global.Promise" to your preferred implementation of promises.');
};
Object.defineProperty(cb.promise, 'then', { get: throwPromiseNotDefined });
Object.defineProperty(cb.promise, 'catch', { get: throwPromiseNotDefined });
return cb;
}
var promise = new Promise(function (resolve, reject) {
cb = function (err, data) {
if (err)
return reject(err);
return resolve(data);
};
});
cb.promise = promise;
return cb;
}
export function execCallback(fn, err, data) {
if (data === void 0) { data = null; }
if (fn && typeof fn === 'function') {
return fn(err, data);
}
if (err) {
throw err;
}
return data;
}
export function printWarn(error, msg) {
console.warn("[".concat(getSdkName(), "][").concat(error, "]:").concat(msg));
}
export function printError(error, msg) {
console.error({
code: error,
msg: "[".concat(getSdkName(), "][").concat(error, "]:").concat(msg),
});
}
export function printInfo(error, msg) {
console.log("[".concat(getSdkName(), "][").concat(error, "]:").concat(msg));
}
export function throwError(error, msg) {
throw new Error(JSON.stringify({
code: error,
msg: "[".concat(getSdkName(), "][").concat(error, "]:").concat(msg),
}));
}
export function printGroupLog(options) {
var title = options.title, _a = options.subtitle, subtitle = _a === void 0 ? '' : _a, _b = options.content, content = _b === void 0 ? [] : _b, _c = options.printTrace, printTrace = _c === void 0 ? false : _c, _d = options.collapsed, collapsed = _d === void 0 ? false : _d;
if (collapsed) {
console.groupCollapsed(title, subtitle);
}
else {
console.group(title, subtitle);
}
for (var _i = 0, content_1 = content; _i < content_1.length; _i++) {
var tip = content_1[_i];
var type = tip.type, body = tip.body;
switch (type) {
case 'info':
console.log(body);
break;
case 'warn':
console.warn(body);
break;
case 'error':
console.error(body);
break;
}
}
if (printTrace) {
console.trace('stack trace:');
}
console.groupEnd();
}
export var sleep = function (ms) {
if (ms === void 0) { ms = 0; }
return new Promise(function (r) { return setTimeout(r, ms); });
};
export function transformPhone(phoneNumber) {
return "+86".concat(phoneNumber);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWJzL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV6QyxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQVE7SUFDOUIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssZ0JBQWdCLENBQUE7QUFDakUsQ0FBQztBQUNELE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBUTtJQUMvQixPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQTtBQUNoQyxDQUFDO0FBQ0QsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFRO0lBQ2xDLE9BQU8sT0FBTyxHQUFHLEtBQUssV0FBVyxDQUFBO0FBQ25DLENBQUM7QUFDRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQVE7SUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssaUJBQWlCLENBQUE7QUFDbEUsQ0FBQztBQUNELE1BQU0sVUFBVSxNQUFNLENBQUMsR0FBUTtJQUM3QixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxlQUFlLENBQUE7QUFDaEUsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUMsUUFBYSxFQUFFLFNBQWM7SUFDeEQsT0FBTyxRQUFRLFlBQVksU0FBUyxDQUFBO0FBQ3RDLENBQUM7QUFDRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQVE7SUFDakMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssbUJBQW1CLENBQUE7QUFDcEUsQ0FBQztBQUNELE1BQU0sVUFBVSxRQUFRO0lBQ3RCLE9BQU8sSUFBSSxDQUFD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S0FBZCxFQUFFLElBQUksR0FBSyxHQUFHLEtBQVIsQ0FBUTtRQUMxQixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssTUFBTTtnQkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNqQixNQUFLO1lBQ1AsS0FBSyxNQUFNO2dCQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ2xCLE1BQUs7WUFDUCxLQUFLLE9BQU87Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDbkIsTUFBSztTQUNSO0tBQ0Y7SUFDRCxJQUFJLFVBQVUsRUFBRTtRQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7S0FDOUI7SUFDRCxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUE7QUFDcEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxJQUFNLEtBQUssR0FBRyxVQUFDLEVBQU07SUFBTixtQkFBQSxFQUFBLE1BQU07SUFBSyxPQUFBLElBQUksT0FBTyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBakIsQ0FBaUIsQ0FBQztBQUFuQyxDQUFtQyxDQUFBO0FBRXBFLE1BQU0sVUFBVSxjQUFjLENBQUMsV0FBbUI7SUFDaEQsT0FBTyxhQUFNLFdBQVcsQ0FBRSxDQUFBO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLViB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnXG5pbXBvcnQgeyBnZXRTZGtOYW1lIH0gZnJvbSAnLi4vY29uc3RhbnRzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheSh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5XSdcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZydcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCdcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1BhbGluT2JqZWN0KHZhbDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bGwodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBOdWxsXSdcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0luc3RhbmNlT2YoaW5zdGFuY2U6IGFueSwgY29uc3RydWN0OiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGluc3RhbmNlIGluc3RhbmNlb2YgY29uc3RydWN0XG59XG5leHBvcnQgZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXSdcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5TZXFJZCgpOiBzdHJpbmcge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNilcbiAgICAuc2xpY2UoMilcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJlcXVlc3RJZCgpIHtcbiAgbGV0IGQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICBsZXQgZDIgPSAocGVyZm9ybWFuY2U/Lm5vdyAmJiAocGVyZm9ybWFuY2Uubm93KCkgKiAxMDAwKSkgfHwgMFxuICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCAoYykgPT4ge1xuICAgIGxldCByID0gTWF0aC5yYW5kb20oKSAqIDE2XG4gICAgaWYgKGQgPiAwKSB7XG4gICAgICByID0gKGQgKyByKSAlIDE2IHwgMFxuICAgICAgZCA9IE1hdGguZmxvb3IoZCAvIDE2KVxuICAgIH0gZWxzZSB7XG4gICAgICByID0gKGQyICsgcikgJSAxNiB8IDBcbiAgICAgIGQyID0gTWF0aC5mbG9vcihkMiAvIDE2KVxuICAgIH1cbiAgICByZXR1cm4gKGMgPT09ICd4JyA/IHIgOiAoKHIgJiAweDcpIHwgMHg4KSkudG9TdHJpbmcoMTYpXG4gIH0pXG59XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VXJsKFBST1RPQ09MOiBzdHJpbmcsIHVybDogc3RyaW5nLCBxdWVyeTogS1Y8YW55PiA9IHt9KTogc3RyaW5nIHtcbiAgY29uc3QgdXJsSGFzUXVlcnkgPSAvXFw/Ly50ZXN0KHVybClcbiAgbGV0IHF1ZXJ5U3RyaW5nID0gJydcbiAgT2JqZWN0LmtleXMocXVlcnkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChxdWVyeVN0cmluZyA9PT0gJycpIHtcbiAgICAgICF1cmxIYXNRdWVyeSAmJiAodXJsICs9ICc/JylcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnXG4gICAgfVxuICAgIHF1ZXJ5U3RyaW5nICs9IGAke2tleX09JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnlba2V5XSl9YFxuICB9KVxuICB1cmwgKz0gcXVlcnlTdHJpbmdcbiAgaWYgKC9eaHR0cChzKT86XFwvXFwvLy50ZXN0KHVybCkpIHtcbiAgICByZXR1cm4gdXJsXG4gIH1cbiAgcmV0dXJuIGAke1BST1RPQ09MfSR7dXJsfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUXVlcnlTdHJpbmcocXVlcnk6IEtWPGFueT4gPSB7fSkge1xuICBjb25zdCBxdWVyeVN0cmluZyA9IFtdXG4gIE9iamVjdC5rZXlzKHF1ZXJ5KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBxdWVyeVN0cmluZy5wdXNoKGAke2tleX09JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnlba2V5XSl9YClcbiAgfSlcbiAgcmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVlcnkobmFtZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgLy8g5Y+C5pWw77ya5Y+Y6YeP5ZCN77yMdXJs5Li656m65YiZ6KGo5LuO5b2T5YmN6aG16Z2i55qEdXJs5Lit5Y+WXG4gIGNvbnN0IHUgPSB1cmwgfHwgd2luZG93LmxvY2F0aW9uLnNlYXJjaFxuICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKGAoXnwmKSR7bmFtZX09KFteJl0qKSgmfCQpYClcbiAgY29uc3QgciA9IHUuc3Vic3RyKHUuaW5kZXhPZignPycpICsgMSkubWF0Y2gocmVnKVxuICByZXR1cm4gKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkKSA/IHJbMl0gOiAnJ1xufVxuXG5leHBvcnQgY29uc3QgZ2V0SGFzaCA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLm1hdGNoKG5ldyBSZWdFeHAoYFsjPyYvXSR7bmFtZX09KFteJiNdKilgKSlcbiAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzWzFdIDogJydcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVBhcmFtKGtleTogc3RyaW5nLCBzb3VyY2VVUkw6IHN0cmluZykge1xuICBsZXQgcnRuID0gc291cmNlVVJMLnNwbGl0KCc/JylbMF1cbiAgbGV0IHBhcmFtXG4gIGxldCBwYXJhbXMgPSBbXVxuICBjb25zdCBxdWVyeVN0cmluZyA9IHNvdXJjZVVSTC5pbmRleE9mKCc/JykgIT09IC0xID8gc291cmNlVVJMLnNwbGl0KCc/JylbMV0gOiAnJ1xuICBpZiAocXVlcnlTdHJpbmcgIT09ICcnKSB7XG4gICAgcGFyYW1zID0gcXVlcnlTdHJpbmcuc3BsaXQoJyYnKVxuICAgIGZvciAobGV0IGkgPSBwYXJhbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAqL1xuICAgICAgcGFyYW0gPSBwYXJhbXNbaV0uc3BsaXQoJz0nKVswXVxuICAgICAgaWYgKHBhcmFtID09PSBrZXkpIHtcbiAgICAgICAgcGFyYW1zLnNwbGljZShpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgICBydG4gPSBgJHtydG59PyR7cGFyYW1zLmpvaW4oJyYnKX1gXG4gIH1cbiAgcmV0dXJuIHJ0blxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvbWlzZUNhbGxiYWNrKCkge1xuICBsZXQgY2I6IGFueVxuICBpZiAoIVByb21pc2UpIHtcbiAgICBjYiA9ICgpID0+IHsgfVxuICAgIGNiLnByb21pc2UgPSB7fVxuXG4gICAgY29uc3QgdGhyb3dQcm9taXNlTm90RGVmaW5lZCA9ICgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91ciBOb2RlIHJ1bnRpbWUgZG9lcyBzdXBwb3J0IEVTNiBQcm9taXNlcy4gJ1xuICAgICAgICArICdTZXQgXCJnbG9iYWwuUHJvbWlzZVwiIHRvIHlvdXIgcHJlZmVycmVkIGltcGxlbWVudGF0aW9uIG9mIHByb21pc2VzLicpXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNiLnByb21pc2UsICd0aGVuJywgeyBnZXQ6IHRocm93UHJvbWlzZU5vdERlZmluZWQgfSlcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2IucHJvbWlzZSwgJ2NhdGNoJywgeyBnZXQ6IHRocm93UHJvbWlzZU5vdERlZmluZWQgfSlcbiAgICByZXR1cm4gY2JcbiAgfVxuXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY2IgPSAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJldHVybiByZXNvbHZlKGRhdGEpXG4gICAgfVxuICB9KVxuICBjYi5wcm9taXNlID0gcHJvbWlzZVxuICByZXR1cm4gY2Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNDYWxsYmFjayhmbjogRnVuY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkLCBlcnI6IGFueSwgZGF0YSA9IG51bGwpIHtcbiAgaWYgKGZuICYmIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmbihlcnIsIGRhdGEpXG4gIH1cbiAgaWYgKGVycikge1xuICAgIHRocm93IGVyclxuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludFdhcm4oZXJyb3I6IHN0cmluZywgbXNnOiBzdHJpbmcpIHtcbiAgY29uc29sZS53YXJuKGBbJHtnZXRTZGtOYW1lKCl9XVske2Vycm9yfV06JHttc2d9YClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50RXJyb3IoZXJyb3I6IHN0cmluZywgbXNnOiBzdHJpbmcpIHtcbiAgY29uc29sZS5lcnJvcih7XG4gICAgY29kZTogZXJyb3IsXG4gICAgbXNnOiBgWyR7Z2V0U2RrTmFtZSgpfV1bJHtlcnJvcn1dOiR7bXNnfWAsXG4gIH0pXG59XG5leHBvcnQgZnVuY3Rpb24gcHJpbnRJbmZvKGVycm9yOiBzdHJpbmcsIG1zZzogc3RyaW5nKSB7XG4gIGNvbnNvbGUubG9nKGBbJHtnZXRTZGtOYW1lKCl9XVske2Vycm9yfV06JHttc2d9YClcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yOiBzdHJpbmcsIG1zZzogc3RyaW5nKSB7XG4gIHRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh7XG4gICAgY29kZTogZXJyb3IsXG4gICAgbXNnOiBgWyR7Z2V0U2RrTmFtZSgpfV1bJHtlcnJvcn1dOiR7bXNnfWAsXG4gIH0pKVxufVxuXG5pbnRlcmZhY2UgSVByaW50R3JvdXBMb2dPcHRpb25zIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgc3VidGl0bGU6IHN0cmluZyB8IG9iamVjdDtcbiAgY29udGVudDoge1xuICAgIHR5cGU6ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicsXG4gICAgYm9keTogc3RyaW5nIHwgRXJyb3I7XG4gIH1bXTtcbiAgcHJpbnRUcmFjZT86IGJvb2xlYW47XG4gIGNvbGxhcHNlZD86IGJvb2xlYW47XG59XG5leHBvcnQgZnVuY3Rpb24gcHJpbnRHcm91cExvZyhvcHRpb25zOiBJUHJpbnRHcm91cExvZ09wdGlvbnMpIHtcbiAgY29uc3QgeyB0aXRsZSwgc3VidGl0bGUgPSAnJywgY29udGVudCA9IFtdLCBwcmludFRyYWNlID0gZmFsc2UsIGNvbGxhcHNlZCA9IGZhbHNlIH0gPSBvcHRpb25zXG4gIGlmIChjb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKHRpdGxlLCBzdWJ0aXRsZSlcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmdyb3VwKHRpdGxlLCBzdWJ0aXRsZSlcbiAgfVxuICBmb3IgKGNvbnN0IHRpcCBvZiBjb250ZW50KSB7XG4gICAgY29uc3QgeyB0eXBlLCBib2R5IH0gPSB0aXBcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2luZm8nOlxuICAgICAgICBjb25zb2xlLmxvZyhib2R5KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnd2Fybic6XG4gICAgICAgIGNvbnNvbGUud2Fybihib2R5KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICBjb25zb2xlLmVycm9yKGJvZHkpXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIGlmIChwcmludFRyYWNlKSB7XG4gICAgY29uc29sZS50cmFjZSgnc3RhY2sgdHJhY2U6JylcbiAgfVxuICBjb25zb2xlLmdyb3VwRW5kKClcbn1cblxuZXhwb3J0IGNvbnN0IHNsZWVwID0gKG1zID0gMCkgPT4gbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIG1zKSlcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVBob25lKHBob25lTnVtYmVyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGArODYke3Bob25lTnVtYmVyfWBcbn1cblxuIl19