216 lines
19 KiB
Plaintext
216 lines
19 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/singleton/FileUploadErrorDialog.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/error/Reference.vue";
|
|
import { FormButton as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { LayoutTable as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { LayoutDialog as __nuxt_component_3 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createElementVNode as __createElementVNode,createElementBlock as __createElementBlock,createBlock as __createBlock,createVNode as __createVNode } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"
|
|
function _interopVNode(vnode) {
|
|
if (vnode && vnode.props && 'data-v-inspector' in vnode.props) {
|
|
const data = vnode.props['data-v-inspector']
|
|
delete vnode.props['data-v-inspector']
|
|
Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false })
|
|
}
|
|
return vnode
|
|
}
|
|
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
|
|
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
|
|
function _createBlock(...args) { return _interopVNode(__createBlock(...args)) }
|
|
function _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
|
|
/* Injection by vite-plugin-vue-inspector End */
|
|
import { defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
import { ArrowRightIcon } from "/_nuxt/node_modules/.cache/vite/client/deps/@heroicons_vue_24_outline.js?v=e4f18c29";
|
|
import { omit } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29";
|
|
import { useNavigateToProject } from "/_nuxt/lib/common/helpers/route.ts";
|
|
import { useGenerateErrorReference } from "/_nuxt/lib/core/composables/error.ts";
|
|
import {
|
|
useGlobalFileImportManager,
|
|
FailedFileImportJobError,
|
|
useFailedFileImportJobUtils
|
|
} from "/_nuxt/lib/core/composables/fileImport.ts";
|
|
|
|
import { useDateFormatters } from "/_nuxt/composables/dates.ts";
|
|
import { computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "SingletonFileUploadErrorDialog",
|
|
setup(__props, { expose: __expose }) {
|
|
__expose();
|
|
const { clearFailedJobs, failedJobs } = useGlobalFileImportManager();
|
|
const { getErrorMessage } = useFailedFileImportJobUtils();
|
|
const { copyReference } = useGenerateErrorReference();
|
|
const navigateToProject = useNavigateToProject();
|
|
const { formattedRelativeDate, formattedFullDate } = useDateFormatters();
|
|
const open = computed({
|
|
get: () => failedJobs.value.length > 0,
|
|
set: (value) => {
|
|
if (!value) {
|
|
clearFailedJobs();
|
|
}
|
|
}
|
|
});
|
|
const title = computed(
|
|
() => `File upload${failedJobs.value.length > 1 ? "s" : ""} failed`
|
|
);
|
|
const buttons = computed(() => [
|
|
{
|
|
text: "Dismiss",
|
|
onClick: () => {
|
|
open.value = false;
|
|
}
|
|
}
|
|
]);
|
|
const shouldShowErrorReference = (job) => {
|
|
return job.error.type === FailedFileImportJobError.UploadFailed || job.error.type === FailedFileImportJobError.ImportFailed;
|
|
};
|
|
const copyErrorReference = async (job) => {
|
|
await copyReference({ date: job.date, extraPayload: omit(job, ["file"]) });
|
|
};
|
|
const goToProject = async (job) => {
|
|
void navigateToProject({ id: job.projectId });
|
|
open.value = false;
|
|
};
|
|
watch(failedJobs, (newJobs) => {
|
|
if (newJobs.length > 0) {
|
|
open.value = true;
|
|
}
|
|
});
|
|
const __returned__ = { clearFailedJobs, failedJobs, getErrorMessage, copyReference, navigateToProject, formattedRelativeDate, formattedFullDate, open, title, buttons, shouldShowErrorReference, copyErrorReference, goToProject, get ArrowRightIcon() {
|
|
return ArrowRightIcon;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveDirective as _resolveDirective, openBlock as _openBlock, withDirectives as _withDirectives, resolveComponent as _resolveComponent, createCommentVNode as _createCommentVNode, withCtx as _withCtx } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = {
|
|
class: "text-foreground-2 my-2",
|
|
"data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:3:5"
|
|
};
|
|
const _hoisted_2 = {
|
|
class: "truncate text-foreground",
|
|
"data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:25:9"
|
|
};
|
|
const _hoisted_3 = {
|
|
class: "text-foreground",
|
|
"data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:37:9"
|
|
};
|
|
const _hoisted_4 = {
|
|
class: "text-foreground-2",
|
|
"data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:46:9"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_ErrorReference = __nuxt_component_0;
|
|
const _component_FormButton = __nuxt_component_1;
|
|
const _component_LayoutTable = __nuxt_component_2;
|
|
const _component_LayoutDialog = __nuxt_component_3;
|
|
const _directive_tippy = _resolveDirective("tippy");
|
|
return _openBlock(), _createBlock(_component_LayoutDialog, {
|
|
open: $setup.open,
|
|
"onUpdate:open": _cache[0] || (_cache[0] = ($event) => $setup.open = $event),
|
|
title: $setup.title,
|
|
buttons: $setup.buttons,
|
|
"data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:2:3"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createElementVNode(
|
|
"p",
|
|
_hoisted_1,
|
|
" The following file upload" + _toDisplayString($setup.failedJobs.length > 1 ? "s" : "") + " failed. You can retry " + _toDisplayString($setup.failedJobs.length > 1 ? "them" : "it") + " by re-uploading the file" + _toDisplayString($setup.failedJobs.length > 1 ? "s" : "") + ". ",
|
|
1
|
|
/* TEXT */
|
|
),
|
|
_createVNode(_component_LayoutTable, {
|
|
items: $setup.failedJobs,
|
|
columns: [
|
|
{ id: "file", header: "File", classes: "col-span-4" },
|
|
{ id: "error", header: "Error", classes: "col-span-5" },
|
|
{ id: "date", header: "Date", classes: "col-span-2" },
|
|
{
|
|
id: "actions",
|
|
header: "",
|
|
classes: "col-span-1 flex items-center justify-end"
|
|
}
|
|
],
|
|
class: "text-foreground",
|
|
style: { "max-height": "300px" },
|
|
"data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:9:5"
|
|
}, {
|
|
file: _withCtx(({ item }) => [
|
|
_withDirectives((_openBlock(), _createElementBlock("div", _hoisted_2, [
|
|
_createTextVNode(
|
|
_toDisplayString(item.fileName),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
])), [
|
|
[_directive_tippy, {
|
|
content: item.fileName.length > 35 ? item.fileName : void 0,
|
|
placement: "top-start",
|
|
delay: 300
|
|
}]
|
|
])
|
|
]),
|
|
error: _withCtx(({ item }) => [
|
|
_createElementVNode(
|
|
"span",
|
|
_hoisted_3,
|
|
_toDisplayString($setup.getErrorMessage(item) + " "),
|
|
1
|
|
/* TEXT */
|
|
),
|
|
$setup.shouldShowErrorReference(item) ? (_openBlock(), _createBlock(_component_ErrorReference, {
|
|
key: 0,
|
|
class: "text-left inline",
|
|
size: "text-body-xs",
|
|
onClick: ($event) => $setup.copyErrorReference(item),
|
|
"data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:38:9"
|
|
}, null, 8, ["onClick"])) : _createCommentVNode("v-if", true)
|
|
]),
|
|
date: _withCtx(({ item }) => [
|
|
_withDirectives((_openBlock(), _createElementBlock("span", _hoisted_4, [
|
|
_createTextVNode(
|
|
_toDisplayString($setup.formattedRelativeDate(item.date)),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
])), [
|
|
[_directive_tippy, $setup.formattedFullDate(item.date)]
|
|
])
|
|
]),
|
|
actions: _withCtx(({ item }) => [
|
|
_withDirectives(_createVNode(_component_FormButton, {
|
|
"icon-left": $setup.ArrowRightIcon,
|
|
"hide-text": "",
|
|
size: "sm",
|
|
color: "outline",
|
|
onClick: ($event) => $setup.goToProject(item),
|
|
"data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:51:9"
|
|
}, null, 8, ["icon-left", "onClick"]), [
|
|
[_directive_tippy, "Go to project"]
|
|
])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["items"])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["open", "title", "buttons"]);
|
|
}
|
|
_sfc_main.__hmrId = "d656fa62";
|
|
typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main);
|
|
import.meta.hot.on("file-changed", ({ file }) => {
|
|
__VUE_HMR_RUNTIME__.CHANGED_FILE = file;
|
|
});
|
|
import.meta.hot.accept((mod) => {
|
|
if (!mod) return;
|
|
const { default: updated, _rerender_only } = mod;
|
|
if (_rerender_only) {
|
|
__VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render);
|
|
} else {
|
|
__VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated);
|
|
}
|
|
});
|
|
import _export_sfc from "/_nuxt/@id/__x00__plugin-vue:export-helper";
|
|
export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "D:/speckle-server/packages/frontend-2/components/singleton/FileUploadErrorDialog.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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QSxZQUE3STtBQUFBLFlBQTZJLGlCQUFyQyx1QkFBZ0IsSUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBRXBILGdDQUF5QixJQUFJLG1CQURyQyxhQUtFO0FBQUE7WUFIQSxPQUFNO0FBQUEsWUFDTixNQUFLO0FBQUEsWUFDSixTQUFLLFlBQUUsMEJBQW1CLElBQUk7QUFBQSxZQUFHLG9CQUFpQjtBQUFBOztRQUc1QyxNQUFJLFNBQ2IsQ0FFTyxFQUhVLEtBQUk7QUFBQSx5Q0FDckIsb0JBRU8sUUFGUCxZQUVPO0FBQUE7K0JBREYsNkJBQXNCLEtBQUssSUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBOytCQURyQix5QkFBa0IsS0FBSyxJQUFJO0FBQUE7O1FBSWpDLFNBQU8sU0FDaEIsQ0FPRSxFQVJrQixLQUFJO0FBQUEsMEJBQ3hCLGFBT0U7QUFBQSxZQUxDLGFBQVc7QUFBQSxZQUNaO0FBQUEsWUFDQSxNQUFLO0FBQUEsWUFDTCxPQUFNO0FBQUEsWUFDTCxTQUFLLFlBQUUsbUJBQVksSUFBSTtBQUFBLFlBQUcsb0JBQWlCO0FBQUE7K0JBTG5DLGVBQWU7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiRmlsZVVwbG9hZEVycm9yRGlhbG9nLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XHJcbiAgPExheW91dERpYWxvZyB2LW1vZGVsOm9wZW49XCJvcGVuXCIgOnRpdGxlPVwidGl0bGVcIiA6YnV0dG9ucz1cImJ1dHRvbnNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9zaW5nbGV0b24vRmlsZVVwbG9hZEVycm9yRGlhbG9nLnZ1ZToyOjNcIj5cclxuICAgIDxwIGNsYXNzPVwidGV4dC1mb3JlZ3JvdW5kLTIgbXktMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3NpbmdsZXRvbi9GaWxlVXBsb2FkRXJyb3JEaWFsb2cudnVlOjM6NVwiPlxyXG4gICAgICBUaGUgZm9sbG93aW5nIGZpbGUgdXBsb2Fke3sgZmFpbGVkSm9icy5sZW5ndGggPiAxID8gJ3MnIDogJycgfX0gZmFpbGVkLiBZb3UgY2FuXHJcbiAgICAgIHJldHJ5IHt7IGZhaWxlZEpvYnMubGVuZ3RoID4gMSA/ICd0aGVtJyA6ICdpdCcgfX0gYnkgcmUtdXBsb2FkaW5nIHRoZSBmaWxle3tcclxuICAgICAgICBmYWlsZWRKb2JzLmxlbmd0aCA+IDEgPyAncycgOiAnJ1xyXG4gICAgICB9fS5cclxuICAgIDwvcD5cclxuICAgIDxMYXlvdXRUYWJsZVxyXG4gICAgICA6aXRlbXM9XCJmYWlsZWRKb2JzXCJcclxuICAgICAgOmNvbHVtbnM9XCJbXHJcbiAgICAgICAgeyBpZDogJ2ZpbGUnLCBoZWFkZXI6ICdGaWxlJywgY2xhc3NlczogJ2NvbC1zcGFuLTQnIH0sXHJcbiAgICAgICAgeyBpZDogJ2Vycm9yJywgaGVhZGVyOiAnRXJyb3InLCBjbGFzc2VzOiAnY29sLXNwYW4tNScgfSxcclxuICAgICAgICB7IGlkOiAnZGF0ZScsIGhlYWRlcjogJ0RhdGUnLCBjbGFzc2VzOiAnY29sLXNwYW4tMicgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogJ2FjdGlvbnMnLFxyXG4gICAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICAgIGNsYXNzZXM6ICdjb2wtc3Bhbi0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kJ1xyXG4gICAgICAgIH1cclxuICAgICAgXVwiXHJcbiAgICAgIGNsYXNzPVwidGV4dC1mb3JlZ3JvdW5kXCJcclxuICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMDBweFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3NpbmdsZXRvbi9GaWxlVXBsb2FkRXJyb3JEaWFsb2cudnVlOjk6NVwiXHJcbiAgICA+XHJcbiAgICAgIDx0ZW1wbGF0ZSAjZmlsZT1cInsgaXRlbSB9XCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgdi10aXBweT1cIntcclxuICAgICAgICAgICAgY29udGVudDogaXRlbS5maWxlTmFtZS5sZW5ndGggPiAzNSA/IGl0ZW0uZmlsZU5hbWUgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHBsYWNlbWVudDogJ3RvcC1zdGFydCcsXHJcbiAgICAgICAgICAgIGRlbGF5OiAzMDBcclxuICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgY2xhc3M9XCJ0cnVuY2F0ZSB0ZXh0LWZvcmVncm91bmRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9zaW5nbGV0b24vRmlsZVVwbG9hZEVycm9yRGlhbG9nLnZ1ZToyNTo5XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBpdGVtLmZpbGVOYW1lIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgIDx0ZW1wbGF0ZSAjZXJyb3I9XCJ7IGl0ZW0gfVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1mb3JlZ3JvdW5kXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvc2luZ2xldG9uL0ZpbGVVcGxvYWRFcnJvckRpYWxvZy52dWU6Mzc6OVwiPnt7IGdldEVycm9yTWVzc2FnZShpdGVtKSArICcgJyB9fTwvc3Bhbj5cclxuICAgICAgICA8RXJyb3JSZWZlcmVuY2VcclxuICAgICAgICAgIHYtaWY9XCJzaG91bGRTaG93RXJyb3JSZWZlcmVuY2UoaXRlbSlcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWxlZnQgaW5saW5lXCJcclxuICAgICAgICAgIHNpemU9XCJ0ZXh0LWJvZHkteHNcIlxyXG4gICAgICAgICAgQGNsaWNrPVwiY29weUVycm9yUmVmZXJlbmNlKGl0ZW0pXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvc2luZ2xldG9uL0ZpbGVVcGxvYWRFcnJvckRpYWxvZy52dWU6Mzg6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPHRlbXBsYXRlICNkYXRlPVwieyBpdGVtIH1cIj5cclxuICAgICAgICA8c3BhbiB2LXRpcHB5PVwiZm9ybWF0dGVkRnVsbERhdGUoaXRlbS5kYXRlKVwiIGNsYXNzPVwidGV4dC1mb3JlZ3JvdW5kLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9zaW5nbGV0b24vRmlsZVVwbG9hZEVycm9yRGlhbG9nLnZ1ZTo0Njo5XCI+XHJcbiAgICAgICAgICB7eyBmb3JtYXR0ZWRSZWxhdGl2ZURhdGUoaXRlbS5kYXRlKSB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPHRlbXBsYXRlICNhY3Rpb25zPVwieyBpdGVtIH1cIj5cclxuICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgdi10aXBweT1cIidHbyB0byBwcm9qZWN0J1wiXHJcbiAgICAgICAgICA6aWNvbi1sZWZ0PVwiQXJyb3dSaWdodEljb25cIlxyXG4gICAgICAgICAgaGlkZS10ZXh0XHJcbiAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgY29sb3I9XCJvdXRsaW5lXCJcclxuICAgICAgICAgIEBjbGljaz1cImdvVG9Qcm9qZWN0KGl0ZW0pXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvc2luZ2xldG9uL0ZpbGVVcGxvYWRFcnJvckRpYWxvZy52dWU6NTE6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC90ZW1wbGF0ZT5cclxuICAgIDwvTGF5b3V0VGFibGU+XHJcbiAgPC9MYXlvdXREaWFsb2c+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IEFycm93UmlnaHRJY29uIH0gZnJvbSAnQGhlcm9pY29ucy92dWUvMjQvb3V0bGluZSdcclxuaW1wb3J0IHR5cGUgeyBMYXlvdXREaWFsb2dCdXR0b24gfSBmcm9tICdAc3BlY2tsZS91aS1jb21wb25lbnRzJ1xyXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSAnbG9kYXNoLWVzJ1xyXG5pbXBvcnQgeyB1c2VOYXZpZ2F0ZVRvUHJvamVjdCB9IGZyb20gJ34vbGliL2NvbW1vbi9oZWxwZXJzL3JvdXRlJ1xyXG5pbXBvcnQgeyB1c2VHZW5lcmF0ZUVycm9yUmVmZXJlbmNlIH0gZnJvbSAnfi9saWIvY29yZS9jb21wb3NhYmxlcy9lcnJvcidcclxuaW1wb3J0IHtcclxuICB1c2VHbG9iYWxGaWxlSW1wb3J0TWFuYWdlcixcclxuICB0eXBlIEZhaWxlZEZpbGVJbXBvcnRKb2IsXHJcbiAgRmFpbGVkRmlsZUltcG9ydEpvYkVycm9yLFxyXG4gIHVzZUZhaWxlZEZpbGVJbXBvcnRKb2JVdGlsc1xyXG59IGZyb20gJ34vbGliL2NvcmUvY29tcG9zYWJsZXMvZmlsZUltcG9ydCdcclxuXHJcbmNvbnN0IHsgY2xlYXJGYWlsZWRKb2JzLCBmYWlsZWRKb2JzIH0gPSB1c2VHbG9iYWxGaWxlSW1wb3J0TWFuYWdlcigpXHJcbmNvbnN0IHsgZ2V0RXJyb3JNZXNzYWdlIH0gPSB1c2VGYWlsZWRGaWxlSW1wb3J0Sm9iVXRpbHMoKVxyXG5cclxuY29uc3QgeyBjb3B5UmVmZXJlbmNlIH0gPSB1c2VHZW5lcmF0ZUVycm9yUmVmZXJlbmNlKClcclxuY29uc3QgbmF2aWdhdGVUb1Byb2plY3QgPSB1c2VOYXZpZ2F0ZVRvUHJvamVjdCgpXHJcbmNvbnN0IHsgZm9ybWF0dGVkUmVsYXRpdmVEYXRlLCBmb3JtYXR0ZWRGdWxsRGF0ZSB9ID0gdXNlRGF0ZUZvcm1hdHRlcnMoKVxyXG5cclxuY29uc3Qgb3BlbiA9IGNvbXB1dGVkKHtcclxuICBnZXQ6ICgpID0+IGZhaWxlZEpvYnMudmFsdWUubGVuZ3RoID4gMCxcclxuICBzZXQ6ICh2YWx1ZSkgPT4ge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICBjbGVhckZhaWxlZEpvYnMoKVxyXG4gICAgfVxyXG4gIH1cclxufSlcclxuY29uc3QgdGl0bGUgPSBjb21wdXRlZChcclxuICAoKSA9PiBgRmlsZSB1cGxvYWQke2ZhaWxlZEpvYnMudmFsdWUubGVuZ3RoID4gMSA/ICdzJyA6ICcnfSBmYWlsZWRgXHJcbilcclxuXHJcbmNvbnN0IGJ1dHRvbnMgPSBjb21wdXRlZCgoKTogTGF5b3V0RGlhbG9nQnV0dG9uW10gPT4gW1xyXG4gIHtcclxuICAgIHRleHQ6ICdEaXNtaXNzJyxcclxuICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgb3Blbi52YWx1ZSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5dKVxyXG5cclxuY29uc3Qgc2hvdWxkU2hvd0Vycm9yUmVmZXJlbmNlID0gKGpvYjogRmFpbGVkRmlsZUltcG9ydEpvYikgPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBqb2IuZXJyb3IudHlwZSA9PT0gRmFpbGVkRmlsZUltcG9ydEpvYkVycm9yLlVwbG9hZEZhaWxlZCB8fFxyXG4gICAgam9iLmVycm9yLnR5cGUgPT09IEZhaWxlZEZpbGVJbXBvcnRKb2JFcnJvci5JbXBvcnRGYWlsZWRcclxuICApXHJcbn1cclxuXHJcbmNvbnN0IGNvcHlFcnJvclJlZmVyZW5jZSA9IGFzeW5jIChqb2I6IEZhaWxlZEZpbGVJbXBvcnRKb2IpID0+IHtcclxuICBhd2FpdCBjb3B5UmVmZXJlbmNlKHsgZGF0ZTogam9iLmRhdGUsIGV4dHJhUGF5bG9hZDogb21pdChqb2IsIFsnZmlsZSddKSB9KVxyXG59XHJcblxyXG5jb25zdCBnb1RvUHJvamVjdCA9IGFzeW5jIChqb2I6IEZhaWxlZEZpbGVJbXBvcnRKb2IpID0+IHtcclxuICB2b2lkIG5hdmlnYXRlVG9Qcm9qZWN0KHsgaWQ6IGpvYi5wcm9qZWN0SWQgfSlcclxuICBvcGVuLnZhbHVlID0gZmFsc2VcclxufVxyXG5cclxud2F0Y2goZmFpbGVkSm9icywgKG5ld0pvYnMpID0+IHtcclxuICBpZiAobmV3Sm9icy5sZW5ndGggPiAwKSB7XHJcbiAgICBvcGVuLnZhbHVlID0gdHJ1ZVxyXG4gIH1cclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL3NpbmdsZXRvbi9GaWxlVXBsb2FkRXJyb3JEaWFsb2cudnVlIn0= |