213 lines
18 KiB
Plaintext
213 lines
18 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/projects/add-dialog/Metadata.vue");import { FormTextInput as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { FormTextArea as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { default as __nuxt_component_2 } from "/_nuxt/components/project/VisibilitySelect.vue";
|
|
import { FormButton as __nuxt_component_3 } 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 { useForm } from "/_nuxt/node_modules/.cache/vite/client/deps/vee-validate.js?v=e4f18c29";
|
|
import { SupportedProjectVisibility } from "/_nuxt/lib/projects/helpers/visibility.ts";
|
|
import { isRequired, isStringOfLength } from "/_nuxt/lib/common/helpers/validation.ts";
|
|
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
|
|
import { useCreateProject } from "/_nuxt/lib/projects/composables/projectManagement.ts";
|
|
|
|
import { useLogger } from "/_nuxt/composables/logging.ts";
|
|
import { ref, computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "ProjectsAddDialogMetadata",
|
|
props: {
|
|
supportGoBack: { type: Boolean, required: false },
|
|
workspaceId: { type: null, required: false }
|
|
},
|
|
emits: ["created", "canceled", "back"],
|
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
__expose();
|
|
const props = __props;
|
|
const emit = __emit;
|
|
const createProject = useCreateProject();
|
|
const logger = useLogger();
|
|
const { handleSubmit, isSubmitting } = useForm();
|
|
const visibility = ref(
|
|
props.workspaceId ? SupportedProjectVisibility.Workspace : SupportedProjectVisibility.Private
|
|
);
|
|
const isLoading = ref(false);
|
|
const mp = useMixpanel();
|
|
const isDisabled = computed(() => isSubmitting.value || isLoading.value);
|
|
const onSubmit = handleSubmit(async (values) => {
|
|
if (isLoading.value) return;
|
|
try {
|
|
isLoading.value = true;
|
|
const newProject = await createProject({
|
|
name: values.name,
|
|
description: values.description,
|
|
visibility: visibility.value,
|
|
...props.workspaceId ? { workspaceId: props.workspaceId } : {}
|
|
});
|
|
if (newProject?.id) {
|
|
emit("created", { id: newProject.id });
|
|
mp.track("Stream Action", {
|
|
type: "action",
|
|
name: "create",
|
|
// eslint-disable-next-line camelcase
|
|
workspace_id: props.workspaceId
|
|
});
|
|
}
|
|
} catch (error) {
|
|
logger.error("Failed to create project:", error);
|
|
} finally {
|
|
isLoading.value = false;
|
|
}
|
|
});
|
|
watch(
|
|
() => props.workspaceId,
|
|
(newVal, oldVal) => {
|
|
if (newVal !== oldVal) {
|
|
visibility.value = props.workspaceId ? SupportedProjectVisibility.Workspace : SupportedProjectVisibility.Private;
|
|
}
|
|
}
|
|
);
|
|
const __returned__ = { props, emit, createProject, logger, handleSubmit, isSubmitting, visibility, isLoading, mp, isDisabled, onSubmit, get isRequired() {
|
|
return isRequired;
|
|
}, get isStringOfLength() {
|
|
return isStringOfLength;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = {
|
|
class: "flex flex-col gap-y-4 mb-2",
|
|
"data-v-inspector": "components/projects/add-dialog/Metadata.vue:3:5"
|
|
};
|
|
const _hoisted_2 = { "data-v-inspector": "components/projects/add-dialog/Metadata.vue:24:7" };
|
|
const _hoisted_3 = {
|
|
class: "flex justify-end gap-2 my-2",
|
|
"data-v-inspector": "components/projects/add-dialog/Metadata.vue:33:5"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_FormTextInput = __nuxt_component_0;
|
|
const _component_FormTextArea = __nuxt_component_1;
|
|
const _component_ProjectVisibilitySelect = __nuxt_component_2;
|
|
const _component_FormButton = __nuxt_component_3;
|
|
return _openBlock(), _createElementBlock(
|
|
"form",
|
|
{
|
|
class: "flex flex-col text-foreground",
|
|
onSubmit: _cache[2] || (_cache[2] = (...args) => $setup.onSubmit && $setup.onSubmit(...args)),
|
|
"data-v-inspector": "components/projects/add-dialog/Metadata.vue:2:3"
|
|
},
|
|
[
|
|
_createElementVNode("div", _hoisted_1, [
|
|
_createVNode(_component_FormTextInput, {
|
|
name: "name",
|
|
label: "Project name",
|
|
placeholder: "Name",
|
|
color: "foundation",
|
|
rules: [$setup.isRequired, $setup.isStringOfLength({ maxLength: 512 })],
|
|
"auto-focus": "",
|
|
autocomplete: "off",
|
|
"show-label": "",
|
|
"data-v-inspector": "components/projects/add-dialog/Metadata.vue:4:7"
|
|
}, null, 8, ["rules"]),
|
|
_createVNode(_component_FormTextArea, {
|
|
name: "description",
|
|
label: "Project description",
|
|
placeholder: "Description",
|
|
color: "foundation",
|
|
size: "lg",
|
|
"show-label": "",
|
|
"show-optional": "",
|
|
rules: [$setup.isStringOfLength({ maxLength: 65536 })],
|
|
"data-v-inspector": "components/projects/add-dialog/Metadata.vue:14:7"
|
|
}, null, 8, ["rules"]),
|
|
_createElementVNode("div", _hoisted_2, [
|
|
_cache[3] || (_cache[3] = _createElementVNode(
|
|
"h3",
|
|
{
|
|
class: "label mb-2",
|
|
"data-v-inspector": "components/projects/add-dialog/Metadata.vue:25:9"
|
|
},
|
|
"Access permissions",
|
|
-1
|
|
/* CACHED */
|
|
)),
|
|
_createVNode(_component_ProjectVisibilitySelect, {
|
|
modelValue: $setup.visibility,
|
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.visibility = $event),
|
|
"mount-menu-on-body": "",
|
|
"workspace-id": $props.workspaceId,
|
|
"data-v-inspector": "components/projects/add-dialog/Metadata.vue:26:9"
|
|
}, null, 8, ["modelValue", "workspace-id"])
|
|
])
|
|
]),
|
|
_createElementVNode("div", _hoisted_3, [
|
|
_createVNode(_component_FormButton, {
|
|
type: "button",
|
|
color: "outline",
|
|
disabled: $setup.isDisabled,
|
|
onClick: _cache[1] || (_cache[1] = () => $props.supportGoBack ? _ctx.$emit("back") : _ctx.$emit("canceled")),
|
|
"data-v-inspector": "components/projects/add-dialog/Metadata.vue:34:7"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createTextVNode(
|
|
_toDisplayString($props.supportGoBack ? "Back" : "Cancel"),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["disabled"]),
|
|
_createVNode(_component_FormButton, {
|
|
type: "submit",
|
|
color: "primary",
|
|
loading: $setup.isDisabled,
|
|
"data-v-inspector": "components/projects/add-dialog/Metadata.vue:42:7"
|
|
}, {
|
|
default: _withCtx(() => [..._cache[4] || (_cache[4] = [
|
|
_createTextVNode(
|
|
" Create ",
|
|
-1
|
|
/* CACHED */
|
|
)
|
|
])]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["loading"])
|
|
])
|
|
],
|
|
32
|
|
/* NEED_HYDRATION */
|
|
);
|
|
}
|
|
_sfc_main.__hmrId = "6e43eb74";
|
|
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/projects/add-dialog/Metadata.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlEQSxTQUFTLGVBQWU7QUFDeEIsU0FBUyxrQ0FBa0M7QUFDM0MsU0FBUyxZQUFZLHdCQUF3QjtBQUM3QyxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLHdCQUF3Qjs7Ozs7Ozs7Ozs7OztBQU9qQyxVQUFNLFFBQVE7QUFLZCxVQUFNLE9BQU87QUFNYixVQUFNLGdCQUFnQixpQkFBaUI7QUFDdkMsVUFBTSxTQUFTLFVBQVU7QUFDekIsVUFBTSxFQUFFLGNBQWMsYUFBYSxJQUFJLFFBQW9CO0FBRTNELFVBQU0sYUFBYTtBQUFBLE1BQ2pCLE1BQU0sY0FDRiwyQkFBMkIsWUFDM0IsMkJBQTJCO0FBQUEsSUFDakM7QUFDQSxVQUFNLFlBQVksSUFBSSxLQUFLO0FBRTNCLFVBQU0sS0FBSyxZQUFZO0FBRXZCLFVBQU0sYUFBYSxTQUFTLE1BQU0sYUFBYSxTQUFTLFVBQVUsS0FBSztBQUV2RSxVQUFNLFdBQVcsYUFBYSxPQUFPLFdBQVc7QUFDOUMsVUFBSSxVQUFVLE1BQU87QUFFckIsVUFBSTtBQUNGLGtCQUFVLFFBQVE7QUFFbEIsY0FBTSxhQUFhLE1BQU0sY0FBYztBQUFBLFVBQ3JDLE1BQU0sT0FBTztBQUFBLFVBQ2IsYUFBYSxPQUFPO0FBQUEsVUFDcEIsWUFBWSxXQUFXO0FBQUEsVUFDdkIsR0FBSSxNQUFNLGNBQWMsRUFBRSxhQUFhLE1BQU0sWUFBWSxJQUFJLENBQUM7QUFBQSxRQUNoRSxDQUFDO0FBRUQsWUFBSSxZQUFZLElBQUk7QUFDbEIsZUFBSyxXQUFXLEVBQUUsSUFBSSxXQUFXLEdBQUcsQ0FBQztBQUNyQyxhQUFHLE1BQU0saUJBQWlCO0FBQUEsWUFDeEIsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBO0FBQUEsWUFFTixjQUFjLE1BQU07QUFBQSxVQUN0QixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0YsU0FBUyxPQUFPO0FBQ2QsZUFBTyxNQUFNLDZCQUE2QixLQUFLO0FBQUEsTUFDakQsVUFBRTtBQUNBLGtCQUFVLFFBQVE7QUFBQSxNQUNwQjtBQUFBLElBQ0YsQ0FBQztBQUVEO0FBQUEsTUFDRSxNQUFNLE1BQU07QUFBQSxNQUNaLENBQUMsUUFBUSxXQUFXO0FBQ2xCLFlBQUksV0FBVyxRQUFRO0FBQ3JCLHFCQUFXLFFBQVEsTUFBTSxjQUNyQiwyQkFBMkIsWUFDM0IsMkJBQTJCO0FBQUEsUUFDakM7QUFBQSxNQUNGO0FBQUEsSUFDRjs7Ozs7Ozs7Ozs7O0VBMUhTLE9BQU07QUFBQSxFQUE2QixvQkFBaUI7O3FCQXFCbEQsb0JBQWlCLG1EQUFrRDs7RUFTckUsT0FBTTtBQUFBLEVBQThCLG9CQUFpQjs7Ozs7Ozt1QkEvQjVEO0FBQUEsSUE0Q087QUFBQTtBQUFBLE1BNUNELE9BQU07QUFBQSxNQUFpQyxVQUFNLHVDQUFFO0FBQUEsTUFBVSxvQkFBaUI7QUFBQTs7TUFDOUUsb0JBNkJNLE9BN0JOLFlBNkJNO0FBQUEsUUE1QkosYUFTRTtBQUFBLFVBUkEsTUFBSztBQUFBLFVBQ0wsT0FBTTtBQUFBLFVBQ04sYUFBWTtBQUFBLFVBQ1osT0FBTTtBQUFBLFVBQ0wsT0FBSyxDQUFHLG1CQUFZLHdCQUFnQjtBQUFBLFVBQ3JDO0FBQUEsVUFDQSxjQUFhO0FBQUEsVUFDYjtBQUFBLFVBQVcsb0JBQWlCO0FBQUE7UUFFOUIsYUFTRTtBQUFBLFVBUkEsTUFBSztBQUFBLFVBQ0wsT0FBTTtBQUFBLFVBQ04sYUFBWTtBQUFBLFVBQ1osT0FBTTtBQUFBLFVBQ04sTUFBSztBQUFBLFVBQ0w7QUFBQSxVQUNBO0FBQUEsVUFDQyxPQUFLLENBQUcsd0JBQWdCO0FBQUEsVUFBeUIsb0JBQWlCO0FBQUE7UUFFckUsb0JBT00sT0FQTixZQU9NO0FBQUEsb0NBTko7QUFBQSxZQUFrSDtBQUFBO0FBQUEsY0FBOUcsT0FBTTtBQUFBLGNBQWEsb0JBQWlCO0FBQUE7WUFBbUQ7QUFBQSxZQUFrQjtBQUFBO0FBQUE7QUFBQSxVQUM3RyxhQUlFO0FBQUEsd0JBSFM7QUFBQSw2RkFBVTtBQUFBLFlBQ25CO0FBQUEsWUFDQyxnQkFBYztBQUFBLFlBQWEsb0JBQWlCO0FBQUE7OztNQUluRCxvQkFZTSxPQVpOLFlBWU07QUFBQSxRQVhKLGFBT2E7QUFBQSxVQU5YLE1BQUs7QUFBQSxVQUNMLE9BQU07QUFBQSxVQUNMLFVBQVU7QUFBQSxVQUNWLFNBQUssZ0NBQVMsdUJBQWdCLFdBQUssVUFBVyxXQUFLO0FBQUEsVUFBZSxvQkFBaUI7QUFBQTs0QkFFcEYsTUFBdUM7QUFBQTsrQkFBcEMsdUJBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztRQUVsQixhQUVhO0FBQUEsVUFGRCxNQUFLO0FBQUEsVUFBUyxPQUFNO0FBQUEsVUFBVyxTQUFTO0FBQUEsVUFBWSxvQkFBaUI7QUFBQTs0QkFBbUQsTUFFcEk7QUFBQTtjQUZvSTtBQUFBLGNBRXBJO0FBQUE7QUFBQTtBQUFBIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJNZXRhZGF0YS52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxmb3JtIGNsYXNzPVwiZmxleCBmbGV4LWNvbCB0ZXh0LWZvcmVncm91bmRcIiBAc3VibWl0PVwib25TdWJtaXRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0cy9hZGQtZGlhbG9nL01ldGFkYXRhLnZ1ZToyOjNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC15LTQgbWItMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3RzL2FkZC1kaWFsb2cvTWV0YWRhdGEudnVlOjM6NVwiPlxyXG4gICAgICA8Rm9ybVRleHRJbnB1dFxyXG4gICAgICAgIG5hbWU9XCJuYW1lXCJcclxuICAgICAgICBsYWJlbD1cIlByb2plY3QgbmFtZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJOYW1lXCJcclxuICAgICAgICBjb2xvcj1cImZvdW5kYXRpb25cIlxyXG4gICAgICAgIDpydWxlcz1cIltpc1JlcXVpcmVkLCBpc1N0cmluZ09mTGVuZ3RoKHsgbWF4TGVuZ3RoOiA1MTIgfSldXCJcclxuICAgICAgICBhdXRvLWZvY3VzXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICBzaG93LWxhYmVsIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3RzL2FkZC1kaWFsb2cvTWV0YWRhdGEudnVlOjQ6N1wiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxGb3JtVGV4dEFyZWFcclxuICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgIGxhYmVsPVwiUHJvamVjdCBkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJEZXNjcmlwdGlvblwiXHJcbiAgICAgICAgY29sb3I9XCJmb3VuZGF0aW9uXCJcclxuICAgICAgICBzaXplPVwibGdcIlxyXG4gICAgICAgIHNob3ctbGFiZWxcclxuICAgICAgICBzaG93LW9wdGlvbmFsXHJcbiAgICAgICAgOnJ1bGVzPVwiW2lzU3RyaW5nT2ZMZW5ndGgoeyBtYXhMZW5ndGg6IDY1NTM2IH0pXVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3RzL2FkZC1kaWFsb2cvTWV0YWRhdGEudnVlOjE0OjdcIlxyXG4gICAgICAvPlxyXG4gICAgICA8ZGl2IGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3RzL2FkZC1kaWFsb2cvTWV0YWRhdGEudnVlOjI0OjdcIj5cclxuICAgICAgICA8aDMgY2xhc3M9XCJsYWJlbCBtYi0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdHMvYWRkLWRpYWxvZy9NZXRhZGF0YS52dWU6MjU6OVwiPkFjY2VzcyBwZXJtaXNzaW9uczwvaDM+XHJcbiAgICAgICAgPFByb2plY3RWaXNpYmlsaXR5U2VsZWN0XHJcbiAgICAgICAgICB2LW1vZGVsPVwidmlzaWJpbGl0eVwiXHJcbiAgICAgICAgICBtb3VudC1tZW51LW9uLWJvZHlcclxuICAgICAgICAgIDp3b3Jrc3BhY2UtaWQ9XCJ3b3Jrc3BhY2VJZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3RzL2FkZC1kaWFsb2cvTWV0YWRhdGEudnVlOjI2OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAtMiBteS0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdHMvYWRkLWRpYWxvZy9NZXRhZGF0YS52dWU6MzM6NVwiPlxyXG4gICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGNvbG9yPVwib3V0bGluZVwiXHJcbiAgICAgICAgOmRpc2FibGVkPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgQGNsaWNrPVwiKCkgPT4gKHN1cHBvcnRHb0JhY2sgPyAkZW1pdCgnYmFjaycpIDogJGVtaXQoJ2NhbmNlbGVkJykpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdHMvYWRkLWRpYWxvZy9NZXRhZGF0YS52dWU6MzQ6N1wiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBzdXBwb3J0R29CYWNrID8gJ0JhY2snIDogJ0NhbmNlbCcgfX1cclxuICAgICAgPC9Gb3JtQnV0dG9uPlxyXG4gICAgICA8Rm9ybUJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY29sb3I9XCJwcmltYXJ5XCIgOmxvYWRpbmc9XCJpc0Rpc2FibGVkXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdHMvYWRkLWRpYWxvZy9NZXRhZGF0YS52dWU6NDI6N1wiPlxyXG4gICAgICAgIENyZWF0ZVxyXG4gICAgICA8L0Zvcm1CdXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Zvcm0+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHsgTWF5YmVOdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAc3BlY2tsZS9zaGFyZWQnXHJcbmltcG9ydCB7IHVzZUZvcm0gfSBmcm9tICd2ZWUtdmFsaWRhdGUnXHJcbmltcG9ydCB7IFN1cHBvcnRlZFByb2plY3RWaXNpYmlsaXR5IH0gZnJvbSAnfi9saWIvcHJvamVjdHMvaGVscGVycy92aXNpYmlsaXR5J1xyXG5pbXBvcnQgeyBpc1JlcXVpcmVkLCBpc1N0cmluZ09mTGVuZ3RoIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL3ZhbGlkYXRpb24nXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfn4vbGliL2NvcmUvY29tcG9zYWJsZXMvbXAnXHJcbmltcG9ydCB7IHVzZUNyZWF0ZVByb2plY3QgfSBmcm9tICd+fi9saWIvcHJvamVjdHMvY29tcG9zYWJsZXMvcHJvamVjdE1hbmFnZW1lbnQnXHJcblxyXG50eXBlIEZvcm1WYWx1ZXMgPSB7XHJcbiAgbmFtZTogc3RyaW5nXHJcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmdcclxufVxyXG5cclxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczx7XHJcbiAgc3VwcG9ydEdvQmFjaz86IGJvb2xlYW5cclxuICB3b3Jrc3BhY2VJZD86IE1heWJlTnVsbE9yVW5kZWZpbmVkPHN0cmluZz5cclxufT4oKVxyXG5cclxuY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzPHtcclxuICAoZTogJ2NyZWF0ZWQnLCBwcm9qZWN0OiB7IGlkOiBzdHJpbmcgfSk6IHZvaWRcclxuICAoZTogJ2NhbmNlbGVkJyk6IHZvaWRcclxuICAoZTogJ2JhY2snKTogdm9pZFxyXG59PigpXHJcblxyXG5jb25zdCBjcmVhdGVQcm9qZWN0ID0gdXNlQ3JlYXRlUHJvamVjdCgpXHJcbmNvbnN0IGxvZ2dlciA9IHVzZUxvZ2dlcigpXHJcbmNvbnN0IHsgaGFuZGxlU3VibWl0LCBpc1N1Ym1pdHRpbmcgfSA9IHVzZUZvcm08Rm9ybVZhbHVlcz4oKVxyXG5cclxuY29uc3QgdmlzaWJpbGl0eSA9IHJlZihcclxuICBwcm9wcy53b3Jrc3BhY2VJZFxyXG4gICAgPyBTdXBwb3J0ZWRQcm9qZWN0VmlzaWJpbGl0eS5Xb3Jrc3BhY2VcclxuICAgIDogU3VwcG9ydGVkUHJvamVjdFZpc2liaWxpdHkuUHJpdmF0ZVxyXG4pXHJcbmNvbnN0IGlzTG9hZGluZyA9IHJlZihmYWxzZSlcclxuXHJcbmNvbnN0IG1wID0gdXNlTWl4cGFuZWwoKVxyXG5cclxuY29uc3QgaXNEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IGlzU3VibWl0dGluZy52YWx1ZSB8fCBpc0xvYWRpbmcudmFsdWUpXHJcblxyXG5jb25zdCBvblN1Ym1pdCA9IGhhbmRsZVN1Ym1pdChhc3luYyAodmFsdWVzKSA9PiB7XHJcbiAgaWYgKGlzTG9hZGluZy52YWx1ZSkgcmV0dXJuIC8vIFByZXZlbnQgc3VibWlzc2lvbiB3aGlsZSBjbG9zaW5nXHJcblxyXG4gIHRyeSB7XHJcbiAgICBpc0xvYWRpbmcudmFsdWUgPSB0cnVlXHJcblxyXG4gICAgY29uc3QgbmV3UHJvamVjdCA9IGF3YWl0IGNyZWF0ZVByb2plY3Qoe1xyXG4gICAgICBuYW1lOiB2YWx1ZXMubmFtZSxcclxuICAgICAgZGVzY3JpcHRpb246IHZhbHVlcy5kZXNjcmlwdGlvbixcclxuICAgICAgdmlzaWJpbGl0eTogdmlzaWJpbGl0eS52YWx1ZSxcclxuICAgICAgLi4uKHByb3BzLndvcmtzcGFjZUlkID8geyB3b3Jrc3BhY2VJZDogcHJvcHMud29ya3NwYWNlSWQgfSA6IHt9KVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAobmV3UHJvamVjdD8uaWQpIHtcclxuICAgICAgZW1pdCgnY3JlYXRlZCcsIHsgaWQ6IG5ld1Byb2plY3QuaWQgfSlcclxuICAgICAgbXAudHJhY2soJ1N0cmVhbSBBY3Rpb24nLCB7XHJcbiAgICAgICAgdHlwZTogJ2FjdGlvbicsXHJcbiAgICAgICAgbmFtZTogJ2NyZWF0ZScsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxyXG4gICAgICAgIHdvcmtzcGFjZV9pZDogcHJvcHMud29ya3NwYWNlSWRcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIHByb2plY3Q6JywgZXJyb3IpXHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGlzTG9hZGluZy52YWx1ZSA9IGZhbHNlXHJcbiAgfVxyXG59KVxyXG5cclxud2F0Y2goXHJcbiAgKCkgPT4gcHJvcHMud29ya3NwYWNlSWQsXHJcbiAgKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XHJcbiAgICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHtcclxuICAgICAgdmlzaWJpbGl0eS52YWx1ZSA9IHByb3BzLndvcmtzcGFjZUlkXHJcbiAgICAgICAgPyBTdXBwb3J0ZWRQcm9qZWN0VmlzaWJpbGl0eS5Xb3Jrc3BhY2VcclxuICAgICAgICA6IFN1cHBvcnRlZFByb2plY3RWaXNpYmlsaXR5LlByaXZhdGVcclxuICAgIH1cclxuICB9XHJcbilcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL3Byb2plY3RzL2FkZC1kaWFsb2cvTWV0YWRhdGEudnVlIn0= |