191 lines
27 KiB
Plaintext
191 lines
27 KiB
Plaintext
import { __assign, __awaiter, __generator } from "/_nuxt/node_modules/tslib/tslib.es6.js?v=e4f18c29";
|
|
import { responseIterator } from "/_nuxt/node_modules/@apollo/client/link/http/responseIterator.js?v=e4f18c29";
|
|
import { throwServerError } from "/_nuxt/node_modules/@apollo/client/link/utils/index.js?v=e4f18c29";
|
|
import { PROTOCOL_ERRORS_SYMBOL } from "/_nuxt/node_modules/@apollo/client/errors/index.js?v=e4f18c29";
|
|
import { isApolloPayloadResult } from "/_nuxt/node_modules/@apollo/client/utilities/common/incrementalResult.js?v=e4f18c29";
|
|
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
export function readMultipartBody(response, nextValue) {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var decoder, contentType, delimiter, boundaryVal, boundary, buffer, iterator, running, _a, value, done, chunk, searchFrom, bi, message, i, headers, contentType_1, body, result, next;
|
|
var _b, _c;
|
|
var _d;
|
|
return __generator(this, function (_e) {
|
|
switch (_e.label) {
|
|
case 0:
|
|
if (TextDecoder === undefined) {
|
|
throw new Error("TextDecoder must be defined in the environment: please import a polyfill.");
|
|
}
|
|
decoder = new TextDecoder("utf-8");
|
|
contentType = (_d = response.headers) === null || _d === void 0 ? void 0 : _d.get("content-type");
|
|
delimiter = "boundary=";
|
|
boundaryVal = (contentType === null || contentType === void 0 ? void 0 : contentType.includes(delimiter)) ?
|
|
contentType === null || contentType === void 0 ? void 0 : contentType.substring((contentType === null || contentType === void 0 ? void 0 : contentType.indexOf(delimiter)) + delimiter.length).replace(/['"]/g, "").replace(/\;(.*)/gm, "").trim()
|
|
: "-";
|
|
boundary = "\r\n--".concat(boundaryVal);
|
|
buffer = "";
|
|
iterator = responseIterator(response);
|
|
running = true;
|
|
_e.label = 1;
|
|
case 1:
|
|
if (!running) return [3 /*break*/, 3];
|
|
return [4 /*yield*/, iterator.next()];
|
|
case 2:
|
|
_a = _e.sent(), value = _a.value, done = _a.done;
|
|
chunk = typeof value === "string" ? value : decoder.decode(value);
|
|
searchFrom = buffer.length - boundary.length + 1;
|
|
running = !done;
|
|
buffer += chunk;
|
|
bi = buffer.indexOf(boundary, searchFrom);
|
|
while (bi > -1) {
|
|
message = void 0;
|
|
_b = [
|
|
buffer.slice(0, bi),
|
|
buffer.slice(bi + boundary.length),
|
|
], message = _b[0], buffer = _b[1];
|
|
i = message.indexOf("\r\n\r\n");
|
|
headers = parseHeaders(message.slice(0, i));
|
|
contentType_1 = headers["content-type"];
|
|
if (contentType_1 &&
|
|
contentType_1.toLowerCase().indexOf("application/json") === -1) {
|
|
throw new Error("Unsupported patch content type: application/json is required.");
|
|
}
|
|
body = message.slice(i);
|
|
if (body) {
|
|
result = parseJsonBody(response, body);
|
|
if (Object.keys(result).length > 1 ||
|
|
"data" in result ||
|
|
"incremental" in result ||
|
|
"errors" in result ||
|
|
"payload" in result) {
|
|
if (isApolloPayloadResult(result)) {
|
|
next = {};
|
|
if ("payload" in result) {
|
|
if (Object.keys(result).length === 1 && result.payload === null) {
|
|
return [2 /*return*/];
|
|
}
|
|
next = __assign({}, result.payload);
|
|
}
|
|
if ("errors" in result) {
|
|
next = __assign(__assign({}, next), { extensions: __assign(__assign({}, ("extensions" in next ? next.extensions : null)), (_c = {}, _c[PROTOCOL_ERRORS_SYMBOL] = result.errors, _c)) });
|
|
}
|
|
nextValue(next);
|
|
}
|
|
else {
|
|
// for the last chunk with only `hasNext: false`
|
|
// we don't need to call observer.next as there is no data/errors
|
|
nextValue(result);
|
|
}
|
|
}
|
|
else if (
|
|
// If the chunk contains only a "hasNext: false", we can call
|
|
// observer.complete() immediately.
|
|
Object.keys(result).length === 1 &&
|
|
"hasNext" in result &&
|
|
!result.hasNext) {
|
|
return [2 /*return*/];
|
|
}
|
|
}
|
|
bi = buffer.indexOf(boundary);
|
|
}
|
|
return [3 /*break*/, 1];
|
|
case 3: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
export function parseHeaders(headerText) {
|
|
var headersInit = {};
|
|
headerText.split("\n").forEach(function (line) {
|
|
var i = line.indexOf(":");
|
|
if (i > -1) {
|
|
// normalize headers to lowercase
|
|
var name_1 = line.slice(0, i).trim().toLowerCase();
|
|
var value = line.slice(i + 1).trim();
|
|
headersInit[name_1] = value;
|
|
}
|
|
});
|
|
return headersInit;
|
|
}
|
|
export function parseJsonBody(response, bodyText) {
|
|
if (response.status >= 300) {
|
|
// Network error
|
|
var getResult = function () {
|
|
try {
|
|
return JSON.parse(bodyText);
|
|
}
|
|
catch (err) {
|
|
return bodyText;
|
|
}
|
|
};
|
|
throwServerError(response, getResult(), "Response not successful: Received status code ".concat(response.status));
|
|
}
|
|
try {
|
|
return JSON.parse(bodyText);
|
|
}
|
|
catch (err) {
|
|
var parseError = err;
|
|
parseError.name = "ServerParseError";
|
|
parseError.response = response;
|
|
parseError.statusCode = response.status;
|
|
parseError.bodyText = bodyText;
|
|
throw parseError;
|
|
}
|
|
}
|
|
export function handleError(err, observer) {
|
|
// if it is a network error, BUT there is graphql result info fire
|
|
// the next observer before calling error this gives apollo-client
|
|
// (and react-apollo) the `graphqlErrors` and `networkErrors` to
|
|
// pass to UI this should only happen if we *also* have data as
|
|
// part of the response key per the spec
|
|
if (err.result && err.result.errors && err.result.data) {
|
|
// if we don't call next, the UI can only show networkError
|
|
// because AC didn't get any graphqlErrors this is graphql
|
|
// execution result info (i.e errors and possibly data) this is
|
|
// because there is no formal spec how errors should translate to
|
|
// http status codes. So an auth error (401) could have both data
|
|
// from a public field, errors from a private field, and a status
|
|
// of 401
|
|
// {
|
|
// user { // this will have errors
|
|
// firstName
|
|
// }
|
|
// products { // this is public so will have data
|
|
// cost
|
|
// }
|
|
// }
|
|
//
|
|
// the result of above *could* look like this:
|
|
// {
|
|
// data: { products: [{ cost: "$10" }] },
|
|
// errors: [{
|
|
// message: 'your session has timed out',
|
|
// path: []
|
|
// }]
|
|
// }
|
|
// status code of above would be a 401
|
|
// in the UI you want to show data where you can, errors as data where you can
|
|
// and use correct http status codes
|
|
observer.next(err.result);
|
|
}
|
|
observer.error(err);
|
|
}
|
|
export function parseAndCheckHttpResponse(operations) {
|
|
return function (response) {
|
|
return response
|
|
.text()
|
|
.then(function (bodyText) { return parseJsonBody(response, bodyText); })
|
|
.then(function (result) {
|
|
if (!Array.isArray(result) &&
|
|
!hasOwnProperty.call(result, "data") &&
|
|
!hasOwnProperty.call(result, "errors")) {
|
|
// Data error
|
|
throwServerError(response, result, "Server response was missing for query '".concat(Array.isArray(operations) ?
|
|
operations.map(function (op) { return op.operationName; })
|
|
: operations.operationName, "'."));
|
|
}
|
|
return result;
|
|
});
|
|
};
|
|
}
|
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VBbmRDaGVja0h0dHBSZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saW5rL2h0dHAvcGFyc2VBbmRDaGVja0h0dHBSZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFHNUUsSUFBQSxjQUFjLEdBQUssTUFBTSxDQUFDLFNBQVMsZUFBckIsQ0FBc0I7QUFRNUMsTUFBTSxVQUFnQixpQkFBaUIsQ0FFckMsUUFBa0IsRUFBRSxTQUE2Qjs7Ozs7Ozs7b0JBQ2pELElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUM5QixNQUFNLElBQUksS0FBSyxDQUNiLDJFQUEyRSxDQUM1RSxDQUFDO29CQUNKLENBQUM7b0JBQ0ssT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNuQyxXQUFXLEdBQUcsTUFBQSxRQUFRLENBQUMsT0FBTywwQ0FBRSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ3BELFNBQVMsR0FBRyxXQUFXLENBQUM7b0JBTXhCLFdBQVcsR0FDZixDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUMsQ0FBQzt3QkFDaEMsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUNQLFNBQVMsQ0FBQyxDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUcsU0FBUyxDQUFDLE1BQU0sRUFDN0QsT0FBTyxDQUFDLE9BQU8s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QUFDO2dCQUNELGFBQWE7Z0JBQ2IsZ0JBQWdCLENBQ2QsUUFBUSxFQUNSLE1BQU0sRUFDTixpREFDRSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBQyxFQUFFLElBQUssT0FBQSxFQUFFLENBQUMsYUFBYSxFQUFoQixDQUFnQixDQUFDO29CQUMxQyxDQUFDLENBQUMsVUFBVSxDQUFDLGFBQWEsT0FDeEIsQ0FDTCxDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztJQXJCSixDQXFCSSxDQUFDO0FBQ1QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc3BvbnNlSXRlcmF0b3IgfSBmcm9tIFwiLi9yZXNwb25zZUl0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgdHlwZSB7IE9wZXJhdGlvbiB9IGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyB0aHJvd1NlcnZlckVycm9yIH0gZnJvbSBcIi4uL3V0aWxzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBQUk9UT0NPTF9FUlJPUlNfU1lNQk9MIH0gZnJvbSBcIi4uLy4uL2Vycm9ycy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgaXNBcG9sbG9QYXlsb2FkUmVzdWx0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb21tb24vaW5jcmVtZW50YWxSZXN1bHQuanNcIjtcbmltcG9ydCB0eXBlIHsgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgfSBmcm9tIFwiemVuLW9ic2VydmFibGUtdHNcIjtcblxuY29uc3QgeyBoYXNPd25Qcm9wZXJ0eSB9ID0gT2JqZWN0LnByb3RvdHlwZTtcblxuZXhwb3J0IHR5cGUgU2VydmVyUGFyc2VFcnJvciA9IEVycm9yICYge1xuICByZXNwb25zZTogUmVzcG9uc2U7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgYm9keVRleHQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkTXVsdGlwYXJ0Qm9keTxcbiAgVCBleHRlbmRzIG9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPihyZXNwb25zZTogUmVzcG9uc2UsIG5leHRWYWx1ZTogKHZhbHVlOiBUKSA9PiB2b2lkKSB7XG4gIGlmIChUZXh0RGVjb2RlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJUZXh0RGVjb2RlciBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGVudmlyb25tZW50OiBwbGVhc2UgaW1wb3J0IGEgcG9seWZpbGwuXCJcbiAgICApO1xuICB9XG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKTtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzPy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gIGNvbnN0IGRlbGltaXRlciA9IFwiYm91bmRhcnk9XCI7XG5cbiAgLy8gcGFyc2UgYm91bmRhcnkgdmFsdWUgYW5kIGlnbm9yZSBhbnkgc3Vic2VxdWVudCBuYW1lL3ZhbHVlIHBhaXJzIGFmdGVyIDtcbiAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTAuaHRtbCNuYW1lLXBhcmFtZXRlcnNcbiAgLy8gZS5nLiBtdWx0aXBhcnQvbWl4ZWQ7Ym91bmRhcnk9XCJncmFwaHFsXCI7ZGVmZXJTcGVjPTIwMjIwODI0XG4gIC8vIGlmIG5vIGJvdW5kYXJ5IGlzIHNwZWNpZmllZCwgZGVmYXVsdCB0byAtXG4gIGNvbnN0IGJvdW5kYXJ5VmFsID1cbiAgICBjb250ZW50VHlwZT8uaW5jbHVkZXMoZGVsaW1pdGVyKSA/XG4gICAgICBjb250ZW50VHlwZVxuICAgICAgICA/LnN1YnN0cmluZyhjb250ZW50VHlwZT8uaW5kZXhPZihkZWxpbWl0ZXIpICsgZGVsaW1pdGVyLmxlbmd0aClcbiAgICAgICAgLnJlcGxhY2UoL1snXCJdL2csIFwiXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXDsoLiopL2dtLCBcIlwiKVxuICAgICAgICAudHJpbSgpXG4gICAgOiBcIi1cIjtcblxuICBjb25zdCBib3VuZGFyeSA9IGBcXHJcXG4tLSR7Ym91bmRhcnlWYWx9YDtcbiAgbGV0IGJ1ZmZlciA9IFwiXCI7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVzcG9uc2VJdGVyYXRvcihyZXNwb25zZSk7XG4gIGxldCBydW5uaW5nID0gdHJ1ZTtcblxuICB3aGlsZSAocnVubmluZykge1xuICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcbiAgICBjb25zdCBjaHVuayA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogZGVjb2Rlci5kZWNvZGUodmFsdWUpO1xuICAgIGNvbnN0IHNlYXJjaEZyb20gPSBidWZmZXIubGVuZ3RoIC0gYm91bmRhcnkubGVuZ3RoICsgMTtcbiAgICBydW5uaW5nID0gIWRvbmU7XG4gICAgYnVmZmVyICs9IGNodW5rO1xuICAgIGxldCBiaSA9IGJ1ZmZlci5pbmRleE9mKGJvdW5kYXJ5LCBzZWFyY2hGcm9tKTtcblxuICAgIHdoaWxlIChiaSA+IC0xKSB7XG4gICAgICBsZXQgbWVzc2FnZTogc3RyaW5nO1xuICAgICAgW21lc3NhZ2UsIGJ1ZmZlcl0gPSBbXG4gICAgICAgIGJ1ZmZlci5zbGljZSgwLCBiaSksXG4gICAgICAgIGJ1ZmZlci5zbGljZShiaSArIGJvdW5kYXJ5Lmxlbmd0aCksXG4gICAgICBdO1xuICAgICAgY29uc3QgaSA9IG1lc3NhZ2UuaW5kZXhPZihcIlxcclxcblxcclxcblwiKTtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBwYXJzZUhlYWRlcnMobWVzc2FnZS5zbGljZSgwLCBpKSk7XG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl07XG4gICAgICBpZiAoXG4gICAgICAgIGNvbnRlbnRUeXBlICYmXG4gICAgICAgIGNvbnRlbnRUeXBlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImFwcGxpY2F0aW9uL2pzb25cIikgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVW5zdXBwb3J0ZWQgcGF0Y2ggY29udGVudCB0eXBlOiBhcHBsaWNhdGlvbi9qc29uIGlzIHJlcXVpcmVkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBuYjogVGVjaG5pY2FsbHkgeW91J2Qgd2FudCB0byBzbGljZSBvZmYgdGhlIGJlZ2lubmluZyBcIlxcclxcblwiIGJ1dCBzaW5jZVxuICAgICAgLy8gdGhpcyBpcyBnb2luZyB0byBiZSBgSlNPTi5wYXJzZWBkIHRoZXJlIGlzIG5vIG5lZWQuXG4gICAgICBjb25zdCBib2R5ID0gbWVzc2FnZS5zbGljZShpKTtcblxuICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VKc29uQm9keTxUPihyZXNwb25zZSwgYm9keSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmxlbmd0aCA+IDEgfHxcbiAgICAgICAgICBcImRhdGFcIiBpbiByZXN1bHQgfHxcbiAgICAgICAgICBcImluY3JlbWVudGFsXCIgaW4gcmVzdWx0IHx8XG4gICAgICAgICAgXCJlcnJvcnNcIiBpbiByZXN1bHQgfHxcbiAgICAgICAgICBcInBheWxvYWRcIiBpbiByZXN1bHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGlzQXBvbGxvUGF5bG9hZFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICAgICAgICBsZXQgbmV4dCA9IHt9O1xuICAgICAgICAgICAgaWYgKFwicGF5bG9hZFwiIGluIHJlc3VsdCkge1xuICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGggPT09IDEgJiYgcmVzdWx0LnBheWxvYWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbmV4dCA9IHsgLi4ucmVzdWx0LnBheWxvYWQgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcImVycm9yc1wiIGluIHJlc3VsdCkge1xuICAgICAgICAgICAgICBuZXh0ID0ge1xuICAgICAgICAgICAgICAgIC4uLm5leHQsXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uczoge1xuICAgICAgICAgICAgICAgICAgLi4uKFwiZXh0ZW5zaW9uc1wiIGluIG5leHQgPyBuZXh0LmV4dGVuc2lvbnMgOiAobnVsbCBhcyBhbnkpKSxcbiAgICAgICAgICAgICAgICAgIFtQUk9UT0NPTF9FUlJPUlNfU1lNQk9MXTogcmVzdWx0LmVycm9ycyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dFZhbHVlKG5leHQgYXMgVCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGZvciB0aGUgbGFzdCBjaHVuayB3aXRoIG9ubHkgYGhhc05leHQ6IGZhbHNlYFxuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBjYWxsIG9ic2VydmVyLm5leHQgYXMgdGhlcmUgaXMgbm8gZGF0YS9lcnJvcnNcbiAgICAgICAgICAgIG5leHRWYWx1ZShyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAvLyBJZiB0aGUgY2h1bmsgY29udGFpbnMgb25seSBhIFwiaGFzTmV4dDogZmFsc2VcIiwgd2UgY2FuIGNhbGxcbiAgICAgICAgICAvLyBvYnNlcnZlci5jb21wbGV0ZSgpIGltbWVkaWF0ZWx5LlxuICAgICAgICAgIE9iamVjdC5rZXlzKHJlc3VsdCkubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgXCJoYXNOZXh0XCIgaW4gcmVzdWx0ICYmXG4gICAgICAgICAgIXJlc3VsdC5oYXNOZXh0XG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYmkgPSBidWZmZXIuaW5kZXhPZihib3VuZGFyeSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVyVGV4dDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGhlYWRlcnNJbml0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGhlYWRlclRleHQuc3BsaXQoXCJcXG5cIikuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgIGNvbnN0IGkgPSBsaW5lLmluZGV4T2YoXCI6XCIpO1xuICAgIGlmIChpID4gLTEpIHtcbiAgICAgIC8vIG5vcm1hbGl6ZSBoZWFkZXJzIHRvIGxvd2VyY2FzZVxuICAgICAgY29uc3QgbmFtZSA9IGxpbmUuc2xpY2UoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGxpbmUuc2xpY2UoaSArIDEpLnRyaW0oKTtcbiAgICAgIGhlYWRlcnNJbml0W25hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGhlYWRlcnNJbml0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VKc29uQm9keTxUPihyZXNwb25zZTogUmVzcG9uc2UsIGJvZHlUZXh0OiBzdHJpbmcpOiBUIHtcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSAzMDApIHtcbiAgICAvLyBOZXR3b3JrIGVycm9yXG4gICAgY29uc3QgZ2V0UmVzdWx0ID0gKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgc3RyaW5nID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGJvZHlUZXh0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gYm9keVRleHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aHJvd1NlcnZlckVycm9yKFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBnZXRSZXN1bHQoKSxcbiAgICAgIGBSZXNwb25zZSBub3Qgc3VjY2Vzc2Z1bDogUmVjZWl2ZWQgc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXN9YFxuICAgICk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGJvZHlUZXh0KSBhcyBUO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBwYXJzZUVycm9yID0gZXJyIGFzIFNlcnZlclBhcnNlRXJyb3I7XG4gICAgcGFyc2VFcnJvci5uYW1lID0gXCJTZXJ2ZXJQYXJzZUVycm9yXCI7XG4gICAgcGFyc2VFcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHBhcnNlRXJyb3Iuc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICBwYXJzZUVycm9yLmJvZHlUZXh0ID0gYm9keVRleHQ7XG4gICAgdGhyb3cgcGFyc2VFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyOiBhbnksIG9ic2VydmVyOiBTdWJzY3JpcHRpb25PYnNlcnZlcjxhbnk+KSB7XG4gIC8vIGlmIGl0IGlzIGEgbmV0d29yayBlcnJvciwgQlVUIHRoZXJlIGlzIGdyYXBocWwgcmVzdWx0IGluZm8gZmlyZVxuICAvLyB0aGUgbmV4dCBvYnNlcnZlciBiZWZvcmUgY2FsbGluZyBlcnJvciB0aGlzIGdpdmVzIGFwb2xsby1jbGllbnRcbiAgLy8gKGFuZCByZWFjdC1hcG9sbG8pIHRoZSBgZ3JhcGhxbEVycm9yc2AgYW5kIGBuZXR3b3JrRXJyb3JzYCB0b1xuICAvLyBwYXNzIHRvIFVJIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHdlICphbHNvKiBoYXZlIGRhdGEgYXNcbiAgLy8gcGFydCBvZiB0aGUgcmVzcG9uc2Uga2V5IHBlciB0aGUgc3BlY1xuICBpZiAoZXJyLnJlc3VsdCAmJiBlcnIucmVzdWx0LmVycm9ycyAmJiBlcnIucmVzdWx0LmRhdGEpIHtcbiAgICAvLyBpZiB3ZSBkb24ndCBjYWxsIG5leHQsIHRoZSBVSSBjYW4gb25seSBzaG93IG5ldHdvcmtFcnJvclxuICAgIC8vIGJlY2F1c2UgQUMgZGlkbid0IGdldCBhbnkgZ3JhcGhxbEVycm9ycyB0aGlzIGlzIGdyYXBocWxcbiAgICAvLyBleGVjdXRpb24gcmVzdWx0IGluZm8gKGkuZSBlcnJvcnMgYW5kIHBvc3NpYmx5IGRhdGEpIHRoaXMgaXNcbiAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIGZvcm1hbCBzcGVjIGhvdyBlcnJvcnMgc2hvdWxkIHRyYW5zbGF0ZSB0b1xuICAgIC8vIGh0dHAgc3RhdHVzIGNvZGVzLiBTbyBhbiBhdXRoIGVycm9yICg0MDEpIGNvdWxkIGhhdmUgYm90aCBkYXRhXG4gICAgLy8gZnJvbSBhIHB1YmxpYyBmaWVsZCwgZXJyb3JzIGZyb20gYSBwcml2YXRlIGZpZWxkLCBhbmQgYSBzdGF0dXNcbiAgICAvLyBvZiA0MDFcbiAgICAvLyB7XG4gICAgLy8gIHVzZXIgeyAvLyB0aGlzIHdpbGwgaGF2ZSBlcnJvcnNcbiAgICAvLyAgICBmaXJzdE5hbWVcbiAgICAvLyAgfVxuICAgIC8vICBwcm9kdWN0cyB7IC8vIHRoaXMgaXMgcHVibGljIHNvIHdpbGwgaGF2ZSBkYXRhXG4gICAgLy8gICAgY29zdFxuICAgIC8vICB9XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gdGhlIHJlc3VsdCBvZiBhYm92ZSAqY291bGQqIGxvb2sgbGlrZSB0aGlzOlxuICAgIC8vIHtcbiAgICAvLyAgIGRhdGE6IHsgcHJvZHVjdHM6IFt7IGNvc3Q6IFwiJDEwXCIgfV0gfSxcbiAgICAvLyAgIGVycm9yczogW3tcbiAgICAvLyAgICAgIG1lc3NhZ2U6ICd5b3VyIHNlc3Npb24gaGFzIHRpbWVkIG91dCcsXG4gICAgLy8gICAgICBwYXRoOiBbXVxuICAgIC8vICAgfV1cbiAgICAvLyB9XG4gICAgLy8gc3RhdHVzIGNvZGUgb2YgYWJvdmUgd291bGQgYmUgYSA0MDFcbiAgICAvLyBpbiB0aGUgVUkgeW91IHdhbnQgdG8gc2hvdyBkYXRhIHdoZXJlIHlvdSBjYW4sIGVycm9ycyBhcyBkYXRhIHdoZXJlIHlvdSBjYW5cbiAgICAvLyBhbmQgdXNlIGNvcnJlY3QgaHR0cCBzdGF0dXMgY29kZXNcbiAgICBvYnNlcnZlci5uZXh0KGVyci5yZXN1bHQpO1xuICB9XG5cbiAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQW5kQ2hlY2tIdHRwUmVzcG9uc2Uob3BlcmF0aW9uczogT3BlcmF0aW9uIHwgT3BlcmF0aW9uW10pIHtcbiAgcmV0dXJuIChyZXNwb25zZTogUmVzcG9uc2UpID0+XG4gICAgcmVzcG9uc2VcbiAgICAgIC50ZXh0KClcbiAgICAgIC50aGVuKChib2R5VGV4dCkgPT4gcGFyc2VKc29uQm9keShyZXNwb25zZSwgYm9keVRleHQpKVxuICAgICAgLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheShyZXN1bHQpICYmXG4gICAgICAgICAgIWhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBcImRhdGFcIikgJiZcbiAgICAgICAgICAhaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIFwiZXJyb3JzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIERhdGEgZXJyb3JcbiAgICAgICAgICB0aHJvd1NlcnZlckVycm9yKFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICBgU2VydmVyIHJlc3BvbnNlIHdhcyBtaXNzaW5nIGZvciBxdWVyeSAnJHtcbiAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShvcGVyYXRpb25zKSA/XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5tYXAoKG9wKSA9PiBvcC5vcGVyYXRpb25OYW1lKVxuICAgICAgICAgICAgICA6IG9wZXJhdGlvbnMub3BlcmF0aW9uTmFtZVxuICAgICAgICAgICAgfScuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xufVxuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXX0= |