186 lines
18 KiB
Plaintext
186 lines
18 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/anchored-point/thread/NewReply.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/viewer/comments/Editor.vue";
|
|
import { FormButton as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { FormFileUploadZone as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createVNode as __createVNode,createElementVNode as __createElementVNode,createElementBlock as __createElementBlock } 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 _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
|
|
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
|
|
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...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 { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts";
|
|
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
|
|
import { useIsTypingUpdateEmitter } from "/_nuxt/lib/viewer/composables/commentBubbles.ts";
|
|
import { useSubmitReply } from "/_nuxt/lib/viewer/composables/commentManagement.ts";
|
|
import {
|
|
convertCommentEditorValueToInput,
|
|
isValidCommentContentInput
|
|
} from "/_nuxt/lib/viewer/helpers/comments.ts";
|
|
import { useServerFileUploadLimit } from "/_nuxt/lib/common/composables/serverInfo.ts";
|
|
import { UniqueFileTypeSpecifier } from "/_nuxt/lib/core/helpers/file.ts";
|
|
import { acceptedFileExtensions } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/blobs/index.js";
|
|
import { Paperclip, SendHorizonal } from "/_nuxt/node_modules/.cache/vite/client/deps/lucide-vue-next.js?v=e4f18c29";
|
|
|
|
import { ref, computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "ViewerAnchoredPointThreadNewReply",
|
|
props: {
|
|
modelValue: { type: Object, required: true }
|
|
},
|
|
emits: ["submit"],
|
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
__expose();
|
|
const props = __props;
|
|
const emit = __emit;
|
|
const createReply = useSubmitReply();
|
|
const { onKeyDownHandler, updateIsTyping } = useIsTypingUpdateEmitter();
|
|
const { projectId } = useInjectedViewerState();
|
|
const { maxSizeInBytes } = useServerFileUploadLimit();
|
|
const loading = ref(false);
|
|
const editor = ref(
|
|
null
|
|
);
|
|
const uploadZone = ref(null);
|
|
const commentValue = ref({ doc: void 0, attachments: void 0 });
|
|
const threadId = computed(() => props.modelValue.id);
|
|
const acceptValue = [
|
|
UniqueFileTypeSpecifier.AnyImage,
|
|
UniqueFileTypeSpecifier.AnyVideo,
|
|
...acceptedFileExtensions.map((fileExtension) => `.${fileExtension}`)
|
|
].join(",");
|
|
const onFilesSelected = (payload) => {
|
|
editor.value?.onFilesSelected(payload);
|
|
};
|
|
const mp = useMixpanel();
|
|
const trackAttachAndOpenFilePicker = () => {
|
|
uploadZone.value?.triggerPicker();
|
|
mp.track("Comment Action", { type: "action", name: "attach" });
|
|
};
|
|
const onSubmit = async () => {
|
|
if (!commentValue.value || loading.value) return;
|
|
const content = convertCommentEditorValueToInput(commentValue.value);
|
|
if (!isValidCommentContentInput(content)) return;
|
|
loading.value = true;
|
|
try {
|
|
await createReply({
|
|
content,
|
|
threadId: threadId.value,
|
|
projectId: projectId.value
|
|
});
|
|
updateIsTyping(false);
|
|
commentValue.value.attachments?.forEach((a) => {
|
|
a.inUse = true;
|
|
});
|
|
commentValue.value = {
|
|
doc: void 0,
|
|
attachments: void 0
|
|
};
|
|
emit("submit");
|
|
} finally {
|
|
loading.value = false;
|
|
}
|
|
};
|
|
const __returned__ = { props, emit, createReply, onKeyDownHandler, updateIsTyping, projectId, maxSizeInBytes, loading, editor, uploadZone, commentValue, threadId, acceptValue, onFilesSelected, mp, trackAttachAndOpenFilePicker, onSubmit, get Paperclip() {
|
|
return Paperclip;
|
|
}, get SendHorizonal() {
|
|
return SendHorizonal;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, openBlock as _openBlock, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = {
|
|
class: "w-full relative flex flex-col p-2 pt-1",
|
|
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:3:3"
|
|
};
|
|
const _hoisted_2 = {
|
|
class: "flex justify-between items-center p-1",
|
|
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:26:9"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_ViewerCommentsEditor = __nuxt_component_0;
|
|
const _component_FormButton = __nuxt_component_1;
|
|
const _component_FormFileUploadZone = __nuxt_component_2;
|
|
return _openBlock(), _createElementBlock("div", _hoisted_1, [
|
|
_createVNode(_component_FormFileUploadZone, {
|
|
ref: "uploadZone",
|
|
"size-limit": $setup.maxSizeInBytes,
|
|
accept: $setup.acceptValue,
|
|
disabled: $setup.loading,
|
|
multiple: "",
|
|
onFilesSelected: $setup.onFilesSelected,
|
|
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:4:5"
|
|
}, {
|
|
default: _withCtx(({ isDraggingFiles }) => [
|
|
_createElementVNode(
|
|
"div",
|
|
{
|
|
class: _normalizeClass(["border border-outline-2 rounded-lg dark:bg-foundation-2", [isDraggingFiles && "border-dashed border-primary"]]),
|
|
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:13:7"
|
|
},
|
|
[
|
|
_createVNode(_component_ViewerCommentsEditor, {
|
|
ref: "editor",
|
|
modelValue: $setup.commentValue,
|
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.commentValue = $event),
|
|
prompt: "Add reply",
|
|
autofocus: "",
|
|
"disable-drop-zone": "",
|
|
onKeydown: $setup.onKeyDownHandler,
|
|
onSubmit: $setup.onSubmit,
|
|
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:17:9"
|
|
}, null, 8, ["modelValue", "onKeydown"]),
|
|
_createElementVNode("div", _hoisted_2, [
|
|
_createVNode(_component_FormButton, {
|
|
"icon-left": $setup.Paperclip,
|
|
disabled: $setup.loading,
|
|
color: "subtle",
|
|
"hide-text": "",
|
|
onClick: _cache[1] || (_cache[1] = ($event) => $setup.trackAttachAndOpenFilePicker()),
|
|
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:27:11"
|
|
}, null, 8, ["icon-left", "disabled"]),
|
|
_createVNode(_component_FormButton, {
|
|
"icon-left": $setup.SendHorizonal,
|
|
"hide-text": "",
|
|
disabled: $setup.loading,
|
|
onClick: $setup.onSubmit,
|
|
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:34:11"
|
|
}, null, 8, ["icon-left", "disabled"])
|
|
])
|
|
],
|
|
2
|
|
/* CLASS */
|
|
)
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["size-limit", "accept", "disabled"])
|
|
]);
|
|
}
|
|
_sfc_main.__hmrId = "2d79023b";
|
|
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/viewer/anchored-point/thread/NewReply.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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QUNULFVBQVE7QUFBQSxjQUFVLG9CQUFpQjtBQUFBO1lBRXRDLG9CQWNNLE9BZE4sWUFjTTtBQUFBLGNBYkosYUFNRTtBQUFBLGdCQUxDLGFBQVc7QUFBQSxnQkFDWCxVQUFVO0FBQUEsZ0JBQ1gsT0FBTTtBQUFBLGdCQUNOO0FBQUEsZ0JBQ0MsU0FBSyxzQ0FBRSxvQ0FBNEI7QUFBQSxnQkFBSSxvQkFBaUI7QUFBQTtjQUUzRCxhQUtFO0FBQUEsZ0JBSkMsYUFBVztBQUFBLGdCQUNaO0FBQUEsZ0JBQ0MsVUFBVTtBQUFBLGdCQUNWLFNBQU87QUFBQSxnQkFBVSxvQkFBaUI7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiTmV3UmVwbHkudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlanMtYWNjZXNzaWJpbGl0eS9uby1hdXRvZm9jdXMgLS0+XHJcbjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlIGZsZXggZmxleC1jb2wgcC0yIHB0LTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvYW5jaG9yZWQtcG9pbnQvdGhyZWFkL05ld1JlcGx5LnZ1ZTozOjNcIj5cclxuICAgIDxGb3JtRmlsZVVwbG9hZFpvbmVcclxuICAgICAgcmVmPVwidXBsb2FkWm9uZVwiXHJcbiAgICAgIHYtc2xvdD1cInsgaXNEcmFnZ2luZ0ZpbGVzIH1cIlxyXG4gICAgICA6c2l6ZS1saW1pdD1cIm1heFNpemVJbkJ5dGVzXCJcclxuICAgICAgOmFjY2VwdD1cImFjY2VwdFZhbHVlXCJcclxuICAgICAgOmRpc2FibGVkPVwibG9hZGluZ1wiXHJcbiAgICAgIG11bHRpcGxlXHJcbiAgICAgIEBmaWxlcy1zZWxlY3RlZD1cIm9uRmlsZXNTZWxlY3RlZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9hbmNob3JlZC1wb2ludC90aHJlYWQvTmV3UmVwbHkudnVlOjQ6NVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImJvcmRlciBib3JkZXItb3V0bGluZS0yIHJvdW5kZWQtbGcgZGFyazpiZy1mb3VuZGF0aW9uLTJcIlxyXG4gICAgICAgIDpjbGFzcz1cIltpc0RyYWdnaW5nRmlsZXMgJiYgJ2JvcmRlci1kYXNoZWQgYm9yZGVyLXByaW1hcnknXVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9hbmNob3JlZC1wb2ludC90aHJlYWQvTmV3UmVwbHkudnVlOjEzOjdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPFZpZXdlckNvbW1lbnRzRWRpdG9yXHJcbiAgICAgICAgICByZWY9XCJlZGl0b3JcIlxyXG4gICAgICAgICAgdi1tb2RlbD1cImNvbW1lbnRWYWx1ZVwiXHJcbiAgICAgICAgICBwcm9tcHQ9XCJBZGQgcmVwbHlcIlxyXG4gICAgICAgICAgYXV0b2ZvY3VzXHJcbiAgICAgICAgICBkaXNhYmxlLWRyb3Atem9uZVxyXG4gICAgICAgICAgQGtleWRvd249XCJvbktleURvd25IYW5kbGVyXCJcclxuICAgICAgICAgIEBzdWJtaXQ9XCJvblN1Ym1pdFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9hbmNob3JlZC1wb2ludC90aHJlYWQvTmV3UmVwbHkudnVlOjE3OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBwLTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvYW5jaG9yZWQtcG9pbnQvdGhyZWFkL05ld1JlcGx5LnZ1ZToyNjo5XCI+XHJcbiAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICA6aWNvbi1sZWZ0PVwiUGFwZXJjbGlwXCJcclxuICAgICAgICAgICAgOmRpc2FibGVkPVwibG9hZGluZ1wiXHJcbiAgICAgICAgICAgIGNvbG9yPVwic3VidGxlXCJcclxuICAgICAgICAgICAgaGlkZS10ZXh0XHJcbiAgICAgICAgICAgIEBjbGljaz1cInRyYWNrQXR0YWNoQW5kT3BlbkZpbGVQaWNrZXIoKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9hbmNob3JlZC1wb2ludC90aHJlYWQvTmV3UmVwbHkudnVlOjI3OjExXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICA6aWNvbi1sZWZ0PVwiU2VuZEhvcml6b25hbFwiXHJcbiAgICAgICAgICAgIGhpZGUtdGV4dFxyXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgQGNsaWNrPVwib25TdWJtaXRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvYW5jaG9yZWQtcG9pbnQvdGhyZWFkL05ld1JlcGx5LnZ1ZTozNDoxMVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvRm9ybUZpbGVVcGxvYWRab25lPlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgdHlwZSB7IE51bGxhYmxlIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgeyB1c2VJbmplY3RlZFZpZXdlclN0YXRlIH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NldHVwJ1xyXG5pbXBvcnQgeyB1c2VNaXhwYW5lbCB9IGZyb20gJ35+L2xpYi9jb3JlL2NvbXBvc2FibGVzL21wJ1xyXG5pbXBvcnQgeyB1c2VJc1R5cGluZ1VwZGF0ZUVtaXR0ZXIgfSBmcm9tICd+fi9saWIvdmlld2VyL2NvbXBvc2FibGVzL2NvbW1lbnRCdWJibGVzJ1xyXG5pbXBvcnQgdHlwZSB7IENvbW1lbnRCdWJibGVNb2RlbCB9IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvY29tbWVudEJ1YmJsZXMnXHJcbmltcG9ydCB7IHVzZVN1Ym1pdFJlcGx5IH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9jb21tZW50TWFuYWdlbWVudCdcclxuaW1wb3J0IHR5cGUgeyBDb21tZW50RWRpdG9yVmFsdWUgfSBmcm9tICd+fi9saWIvdmlld2VyL2NvbXBvc2FibGVzL2NvbW1lbnRNYW5hZ2VtZW50J1xyXG5pbXBvcnQge1xyXG4gIGNvbnZlcnRDb21tZW50RWRpdG9yVmFsdWVUb0lucHV0LFxyXG4gIGlzVmFsaWRDb21tZW50Q29udGVudElucHV0XHJcbn0gZnJvbSAnfn4vbGliL3ZpZXdlci9oZWxwZXJzL2NvbW1lbnRzJ1xyXG5pbXBvcnQgeyB1c2VTZXJ2ZXJGaWxlVXBsb2FkTGltaXQgfSBmcm9tICd+fi9saWIvY29tbW9uL2NvbXBvc2FibGVzL3NlcnZlckluZm8nXHJcbmltcG9ydCB7IFVuaXF1ZUZpbGVUeXBlU3BlY2lmaWVyIH0gZnJvbSAnfn4vbGliL2NvcmUvaGVscGVycy9maWxlJ1xyXG5pbXBvcnQgeyBhY2NlcHRlZEZpbGVFeHRlbnNpb25zIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkL2Jsb2JzJ1xyXG5pbXBvcnQgdHlwZSB7IFVwbG9hZGFibGVGaWxlSXRlbSB9IGZyb20gJ0BzcGVja2xlL3VpLWNvbXBvbmVudHMnXHJcbmltcG9ydCB7IFBhcGVyY2xpcCwgU2VuZEhvcml6b25hbCB9IGZyb20gJ2x1Y2lkZS12dWUtbmV4dCdcclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIG1vZGVsVmFsdWU6IENvbW1lbnRCdWJibGVNb2RlbFxyXG59PigpXHJcblxyXG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHM8e1xyXG4gIChlOiAnc3VibWl0Jyk6IHZvaWRcclxufT4oKVxyXG5cclxuY29uc3QgY3JlYXRlUmVwbHkgPSB1c2VTdWJtaXRSZXBseSgpXHJcbmNvbnN0IHsgb25LZXlEb3duSGFuZGxlciwgdXBkYXRlSXNUeXBpbmcgfSA9IHVzZUlzVHlwaW5nVXBkYXRlRW1pdHRlcigpXHJcbmNvbnN0IHsgcHJvamVjdElkIH0gPSB1c2VJbmplY3RlZFZpZXdlclN0YXRlKClcclxuY29uc3QgeyBtYXhTaXplSW5CeXRlcyB9ID0gdXNlU2VydmVyRmlsZVVwbG9hZExpbWl0KClcclxuXHJcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGVkaXRvciA9IHJlZihcclxuICBudWxsIGFzIE51bGxhYmxlPHtcclxuICAgIG9wZW5GaWxlUGlja2VyOiAoKSA9PiB2b2lkXHJcbiAgICBvbkZpbGVzU2VsZWN0ZWQ6IChwYXlsb2FkOiB7IGZpbGVzOiBVcGxvYWRhYmxlRmlsZUl0ZW1bXSB9KSA9PiB2b2lkXHJcbiAgfT5cclxuKVxyXG5jb25zdCB1cGxvYWRab25lID0gcmVmKG51bGwgYXMgTnVsbGFibGU8eyB0cmlnZ2VyUGlja2VyOiAoKSA9PiB2b2lkIH0+KVxyXG5jb25zdCBjb21tZW50VmFsdWUgPSByZWY8Q29tbWVudEVkaXRvclZhbHVlPih7IGRvYzogdW5kZWZpbmVkLCBhdHRhY2htZW50czogdW5kZWZpbmVkIH0pXHJcbmNvbnN0IHRocmVhZElkID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMubW9kZWxWYWx1ZS5pZClcclxuXHJcbmNvbnN0IGFjY2VwdFZhbHVlID0gW1xyXG4gIFVuaXF1ZUZpbGVUeXBlU3BlY2lmaWVyLkFueUltYWdlLFxyXG4gIFVuaXF1ZUZpbGVUeXBlU3BlY2lmaWVyLkFueVZpZGVvLFxyXG4gIC4uLmFjY2VwdGVkRmlsZUV4dGVuc2lvbnMubWFwKChmaWxlRXh0ZW5zaW9uKSA9PiBgLiR7ZmlsZUV4dGVuc2lvbn1gKVxyXG5dLmpvaW4oJywnKVxyXG5cclxuY29uc3Qgb25GaWxlc1NlbGVjdGVkID0gKHBheWxvYWQ6IHsgZmlsZXM6IFVwbG9hZGFibGVGaWxlSXRlbVtdIH0pID0+IHtcclxuICBlZGl0b3IudmFsdWU/Lm9uRmlsZXNTZWxlY3RlZChwYXlsb2FkKVxyXG59XHJcblxyXG5jb25zdCBtcCA9IHVzZU1peHBhbmVsKClcclxuY29uc3QgdHJhY2tBdHRhY2hBbmRPcGVuRmlsZVBpY2tlciA9ICgpID0+IHtcclxuICB1cGxvYWRab25lLnZhbHVlPy50cmlnZ2VyUGlja2VyKClcclxuICBtcC50cmFjaygnQ29tbWVudCBBY3Rpb24nLCB7IHR5cGU6ICdhY3Rpb24nLCBuYW1lOiAnYXR0YWNoJyB9KVxyXG59XHJcblxyXG5jb25zdCBvblN1Ym1pdCA9IGFzeW5jICgpID0+IHtcclxuICBpZiAoIWNvbW1lbnRWYWx1ZS52YWx1ZSB8fCBsb2FkaW5nLnZhbHVlKSByZXR1cm5cclxuXHJcbiAgY29uc3QgY29udGVudCA9IGNvbnZlcnRDb21tZW50RWRpdG9yVmFsdWVUb0lucHV0KGNvbW1lbnRWYWx1ZS52YWx1ZSlcclxuICBpZiAoIWlzVmFsaWRDb21tZW50Q29udGVudElucHV0KGNvbnRlbnQpKSByZXR1cm5cclxuXHJcbiAgbG9hZGluZy52YWx1ZSA9IHRydWVcclxuICB0cnkge1xyXG4gICAgYXdhaXQgY3JlYXRlUmVwbHkoe1xyXG4gICAgICBjb250ZW50LFxyXG4gICAgICB0aHJlYWRJZDogdGhyZWFkSWQudmFsdWUsXHJcbiAgICAgIHByb2plY3RJZDogcHJvamVjdElkLnZhbHVlXHJcbiAgICB9KVxyXG4gICAgdXBkYXRlSXNUeXBpbmcoZmFsc2UpXHJcblxyXG4gICAgLy8gTWFyayBhbGwgYXR0YWNobWVudHMgYXMgaW4gdXNlIHRvIHByZXZlbnQgY2xlYW51cFxyXG4gICAgY29tbWVudFZhbHVlLnZhbHVlLmF0dGFjaG1lbnRzPy5mb3JFYWNoKChhKSA9PiB7XHJcbiAgICAgIGEuaW5Vc2UgPSB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbW1lbnRWYWx1ZS52YWx1ZSA9IHtcclxuICAgICAgZG9jOiB1bmRlZmluZWQsXHJcbiAgICAgIGF0dGFjaG1lbnRzOiB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIGVtaXQoJ3N1Ym1pdCcpXHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxyXG4gIH1cclxufVxyXG48L3NjcmlwdD5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvdmlld2VyL2FuY2hvcmVkLXBvaW50L3RocmVhZC9OZXdSZXBseS52dWUifQ== |