obsidian-dev-utils 87.1.1 → 87.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/demo-vault-helper/main.js +468 -2
- package/dist/dev/main.js +135 -60
- package/dist/lib/cjs/__merged.cjs +3 -1
- package/dist/lib/cjs/__merged.d.cts +1 -1
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/community-plugins.cjs +15 -1
- package/dist/lib/cjs/obsidian/community-plugins.d.cts +18 -0
- package/dist/lib/cjs/obsidian/demo-vault-helper.cjs +9 -1
- package/dist/lib/cjs/obsidian/demo-vault-helper.d.cts +4 -0
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +155 -57
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.d.cts +18 -9
- package/dist/lib/esm/__merged.d.mts +1 -1
- package/dist/lib/esm/__merged.mjs +3 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/community-plugins.d.mts +18 -0
- package/dist/lib/esm/obsidian/community-plugins.mjs +14 -1
- package/dist/lib/esm/obsidian/demo-vault-helper.d.mts +4 -0
- package/dist/lib/esm/obsidian/demo-vault-helper.mjs +9 -1
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.d.mts +18 -9
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +166 -59
- package/package.json +8 -8
|
@@ -21,7 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
21
21
|
globalThis.process = browserProcess;
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
|
-
const LIBRARY_VERSION = "87.
|
|
24
|
+
const LIBRARY_VERSION = "87.2.0";
|
|
25
25
|
const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils-lock-indicator {\n display: inline-flex;\n align-items: center;\n color: var(--text-muted);\n}\n.obsidian-dev-utils-lock-indicator .svg-icon {\n width: var(--icon-s);\n height: var(--icon-s);\n}\n\n@keyframes obsidian-dev-utils-lock-indicator-flash {\n 40% {\n color: var(--text-error);\n transform: scale(1.4);\n }\n}\n.obsidian-dev-utils-lock-indicator-flash {\n animation: obsidian-dev-utils-lock-indicator-flash 0.35s ease-in-out;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utilsprogress.loop {\n min-width: 200px;\n}\n\n@keyframes obsidian-dev-utils-minimized-modal-bar-pulse {\n 0%, 100% {\n box-shadow: var(--shadow-s);\n }\n 50% {\n box-shadow: 0 0 0 2px var(--interactive-accent);\n }\n}\n@keyframes obsidian-dev-utils-minimized-modal-bar-attention {\n 0% {\n box-shadow: 0 0 0 0 var(--interactive-accent);\n }\n 40% {\n box-shadow: 0 0 0 4px var(--interactive-accent);\n }\n 100% {\n box-shadow: var(--shadow-s);\n }\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button {\n position: absolute;\n top: var(--size-4-2);\n right: calc(var(--size-4-2) + var(--size-4-9));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n.obsidian-dev-utils.minimized-modal-bar {\n position: fixed;\n right: var(--size-4-4);\n bottom: calc(var(--size-4-4) + var(--size-4-8));\n z-index: var(--layer-modal);\n display: flex;\n align-items: center;\n gap: var(--size-4-2);\n padding: var(--size-4-2) var(--size-4-3);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-m);\n background: var(--background-secondary);\n box-shadow: var(--shadow-s);\n cursor: pointer;\n animation: obsidian-dev-utils-minimized-modal-bar-pulse 2s ease-in-out infinite;\n}\n.obsidian-dev-utils.minimized-modal-bar:hover {\n background-image: linear-gradient(var(--background-modifier-hover), var(--background-modifier-hover));\n}\n.obsidian-dev-utils.minimized-modal-bar.minimized-modal-bar-attention {\n animation: obsidian-dev-utils-minimized-modal-bar-attention 0.35s ease-out;\n}\n.obsidian-dev-utils.minimized-modal-bar .minimized-modal-bar-title {\n font-weight: var(--font-medium);\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button:hover,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.plugin-notice-name {\n color: var(--text-accent);\n display: inline-block;\n font-weight: var(--font-bold);\n margin-bottom: var(--size-4-2);\n}\n.obsidian-dev-utils.plugin-notice-content {\n padding-right: var(--size-4-5);\n position: relative;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.plugin-notice-close-button {\n position: absolute;\n right: var(--size-4-3);\n top: var(--size-4-3);\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice {\n padding: 0;\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice .obsidian-dev-utils.plugin-notice-content {\n padding: var(--size-4-3) var(--size-4-4);\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\nbody button:not(.clickable-icon) {\n color: var(--text-color);\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;ACvBA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;;;ACFJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACxGJ;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;AChCF;EACE;;;ACDF;EACE;;;ACON;EACE;;;ACTE;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-dev-utils%60.%5Cn.obsidian-dev-utils-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-dev-utils-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-dev-utils-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-dev-utils-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20with%20a%5Cn//%20%60body%60-prefixed%20selector%20(specificity%200,1,2)%20so%20it%20wins%20over%20tldraw's%20(0,1,1)%20while%5Cn//%20Staying%20correct%20for%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cnbody%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
|
|
26
26
|
export {
|
|
27
27
|
LIBRARY_STYLES,
|
|
@@ -51,6 +51,11 @@ export type EnableCommunityPluginParams = CommunityPluginOperationContext & Comm
|
|
|
51
51
|
* `pluginName`.
|
|
52
52
|
*/
|
|
53
53
|
export type InstallCommunityPluginParams = CommunityPluginOperationContext & CommunityPluginRef;
|
|
54
|
+
/**
|
|
55
|
+
* Parameters for {@link installConfigureEnableCommunityPlugin}. Selects the plugin by either `pluginId`
|
|
56
|
+
* or `pluginName`; `settings` is optional (omit for a plugin that needs no configuration).
|
|
57
|
+
*/
|
|
58
|
+
export type InstallConfigureEnableCommunityPluginParams = CommunityPluginOperationContext & CommunityPluginRef & Partial<CommunityPluginSettings>;
|
|
54
59
|
/**
|
|
55
60
|
* Parameters for {@link toggleEnableCommunityPlugin}. Selects the plugin by either `pluginId` or
|
|
56
61
|
* `pluginName`.
|
|
@@ -183,6 +188,19 @@ export declare function getLatestReleaseVersion(repo: string): Promise<string>;
|
|
|
183
188
|
* @throws If the plugin is not listed in Obsidian's community plugins registry.
|
|
184
189
|
*/
|
|
185
190
|
export declare function installCommunityPlugin(params: InstallCommunityPluginParams): Promise<void>;
|
|
191
|
+
/**
|
|
192
|
+
* Installs a community plugin, writes its settings, THEN enables it — in that order — so the plugin
|
|
193
|
+
* loads already configured (a plugin enabled before it is configured runs its `onload` with default
|
|
194
|
+
* settings and does nothing useful). If the plugin is already enabled and the settings changed, it is
|
|
195
|
+
* disabled and re-enabled so the new settings take effect. `settings` is optional: omit it for a plugin
|
|
196
|
+
* that needs no configuration. Composes {@link installCommunityPlugin}, {@link configureCommunityPlugin},
|
|
197
|
+
* {@link enableCommunityPlugin} and {@link disableCommunityPlugin}.
|
|
198
|
+
*
|
|
199
|
+
* @param params - The {@link InstallConfigureEnableCommunityPluginParams}.
|
|
200
|
+
* @returns A {@link Promise} that resolves once the plugin is installed, configured and enabled.
|
|
201
|
+
* @throws If selected by `pluginName` and the name is not listed in Obsidian's community plugins registry.
|
|
202
|
+
*/
|
|
203
|
+
export declare function installConfigureEnableCommunityPlugin(params: InstallConfigureEnableCommunityPluginParams): Promise<void>;
|
|
186
204
|
/**
|
|
187
205
|
* Searches Obsidian's public community plugins registry, returning the id and display name of every
|
|
188
206
|
* plugin whose id, name, author or description contains the query (case-insensitive). An empty query
|
|
@@ -87,6 +87,18 @@ async function installCommunityPlugin(params) {
|
|
|
87
87
|
const manifest = await getPluginManifest(repo, version);
|
|
88
88
|
await app.plugins.installPlugin(repo, version, manifest);
|
|
89
89
|
}
|
|
90
|
+
async function installConfigureEnableCommunityPlugin(params) {
|
|
91
|
+
const { app, settings } = params;
|
|
92
|
+
await installCommunityPlugin(params);
|
|
93
|
+
const didSettingsChange = settings ? await configureCommunityPlugin({ ...params, settings }) : false;
|
|
94
|
+
const pluginId = await resolveCommunityPluginId(params);
|
|
95
|
+
if (!app.plugins.enabledPlugins.has(pluginId)) {
|
|
96
|
+
await enableCommunityPlugin(params);
|
|
97
|
+
} else if (didSettingsChange) {
|
|
98
|
+
await disableCommunityPlugin(params);
|
|
99
|
+
await enableCommunityPlugin(params);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
90
102
|
async function searchCommunityPlugins(query) {
|
|
91
103
|
const entries = await getCommunityPluginEntries();
|
|
92
104
|
const normalizedQuery = query.toLowerCase();
|
|
@@ -155,9 +167,10 @@ export {
|
|
|
155
167
|
getCommunityPluginRepo,
|
|
156
168
|
getLatestReleaseVersion,
|
|
157
169
|
installCommunityPlugin,
|
|
170
|
+
installConfigureEnableCommunityPlugin,
|
|
158
171
|
searchCommunityPlugins,
|
|
159
172
|
toggleEnableCommunityPlugin,
|
|
160
173
|
toggleInstallCommunityPlugin,
|
|
161
174
|
uninstallCommunityPlugin
|
|
162
175
|
};
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW11bml0eS1wbHVnaW5zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMsIHNlYXJjaGVzIGFuZCBtYW5hZ2VzIGNvbW11bml0eSBwbHVnaW5zIHRocm91Z2ggT2JzaWRpYW4ncyBwdWJsaWMgcGx1Z2luIHJlZ2lzdHJ5IGFuZFxuICogc3RvcmUtaW5zdGFsbCBwYXRoLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSB0aGF0IG1hcHMgYSBwbHVnaW4gYGlkYCB0byBpdHNcbiAqIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSBcdTIwMTQgdGhlIHBsdWdpbiBtYW5pZmVzdCBpdHNlbGYgY2FycmllcyBubyByZXBvc2l0b3J5LiBUaGlzIG1vZHVsZSB1c2VzXG4gKiBpdCB0byBzZWFyY2ggdGhlIHJlZ2lzdHJ5LCB0byBsb2NhdGUgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZXMgKGUuZy4gdG8gZG93bmxvYWQgaXRzIHNoaXBwZWRcbiAqIGRlbW8tdmF1bHQgYXJjaGl2ZSksIGFuZCB0byBpbnN0YWxsL3VuaW5zdGFsbC9lbmFibGUvZGlzYWJsZSBhbiBhcmJpdHJhcnkgY29tbXVuaXR5IHBsdWdpbiBcdTIwMTQgc2VsZWN0ZWRcbiAqIGJ5IGVpdGhlciBpdHMgYGlkYCBvciBpdHMgZGlzcGxheSBgbmFtZWAgXHUyMDE0IHZpYSBPYnNpZGlhbidzIG93biBzdG9yZSBwYXRoIChgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbmBcbiAqICsgYGVuYWJsZVBsdWdpbkFuZFNhdmVgKSwgc28gYW55IGRldi9kZXBsb3kgb3IgdG9vbGluZyBmbG93IGNhbiByZXVzZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luTWFuaWZlc3Rcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGVpdGhlciBieSBpdHMgaWQgKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeUlkUmVmfSkgb3IgYnkgaXRzIGRpc3BsYXkgbmFtZVxuICogKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeU5hbWVSZWZ9KS5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbXVuaXR5UGx1Z2luUmVmID0gQ29tbXVuaXR5UGx1Z2luQnlJZFJlZiB8IENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZjtcblxuLyoqXG4gKiBBIHNpbmdsZSByZXN1bHQgb2Yge0BsaW5rIHNlYXJjaENvbW11bml0eVBsdWdpbnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luU2V0dGluZ3M7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZiAmIENvbW11bml0eVBsdWdpblRvZ2dsZUVuYWJsZVN0YXRlO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0b2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlSW5zdGFsbFN0YXRlO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB1bmluc3RhbGxDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgVW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZjtcblxuLyoqXG4gKiBTZWxlY3RzIGEgY29tbXVuaXR5IHBsdWdpbiBieSBpdHMgaWQuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5CeUlkUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGJ5IGl0cyBkaXNwbGF5IG5hbWUgKGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSByZWdpc3RyeSkuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5CeU5hbWVSZWYge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZW50cnkgaW4gT2JzaWRpYW4ncyBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAgcmVnaXN0cnkuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5FbnRyeSB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGF1dGhvci5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGlzcGxheSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgYG93bmVyL25hbWVgIEdpdEh1YiByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UgYSBjb21tdW5pdHktcGx1Z2luIG9wZXJhdGlvbiBydW5zIGFnYWluc3QuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbn1cblxuLyoqXG4gKiBUaGUgc2V0dGluZ3MgdG8gbWVyZ2UgaW50byBhIGNvbW11bml0eSBwbHVnaW4ncyBgZGF0YS5qc29uYC5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBvYmplY3Qgc2hhbGxvdy1tZXJnZWQgb3ZlciB0aGUgcGx1Z2luJ3MgZXhpc3RpbmcgYGRhdGEuanNvbmAgKHRoZSBmaWxlIGlzIGNyZWF0ZWQgaWZcbiAgICogYWJzZW50KS5cbiAgICovXG4gIHJlYWRvbmx5IHNldHRpbmdzOiBvYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIGRlc2lyZWQgZW5hYmxlZCBzdGF0ZSBmb3Ige0BsaW5rIHRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpbn0uXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5Ub2dnbGVFbmFibGVTdGF0ZSB7XG4gIC8qKlxuICAgKiBUaGUgZGVzaXJlZCBlbmFibGVkIHN0YXRlOiBgdHJ1ZWAgZW5hYmxlcyB0aGUgcGx1Z2luLCBgZmFsc2VgIGRpc2FibGVzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFbmFibGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBkZXNpcmVkIGluc3RhbGxlZCBzdGF0ZSBmb3Ige0BsaW5rIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW59LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlSW5zdGFsbFN0YXRlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGluc3RhbGxlZCBzdGF0ZTogYHRydWVgIGluc3RhbGxzIHRoZSBwbHVnaW4sIGBmYWxzZWAgdW5pbnN0YWxscyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGlzSW5zdGFsbGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSB3ZSByZWFkLlxuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVsZWFzZSB0YWcsIGEgYmFyZSB2ZXJzaW9uIHN1Y2ggYXMgYDEuMi4zYC5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ19uYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IENPTU1VTklUWV9QTFVHSU5TX1NUQVRFX0tFWSA9ICdjb21tdW5pdHlQbHVnaW5FbnRyaWVzUHJvbWlzZSc7XG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19VUkwgPSAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvSEVBRC9jb21tdW5pdHktcGx1Z2lucy5qc29uJztcbmNvbnN0IERBVEFfSlNPTl9JTkRFTlQgPSAyO1xuXG4vKipcbiAqIFdyaXRlcyBzZXR0aW5ncyBpbnRvIGEgY29tbXVuaXR5IHBsdWdpbidzIGBkYXRhLmpzb25gLCBzaGFsbG93LW1lcmdpbmcgdGhlbSBvdmVyIGFueSBleGlzdGluZyBzZXR0aW5nc1xuICogKGNyZWF0aW5nIHRoZSBmaWxlIGlmIGFic2VudCkuIFdyaXRpbmcgc2V0dGluZ3MgQkVGT1JFIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBtYWtlcyBpdCBsb2FkIGFscmVhZHlcbiAqIGNvbmZpZ3VyZWQsIHdpdGggbm8gcmVsb2FkLiBBIG5vLW9wIHdyaXRlIGlzIHNraXBwZWQ6IHdoZW4gdGhlIG1lcmdlIGNoYW5nZXMgbm90aGluZywgdGhlIGZpbGUgaXMgbGVmdFxuICogdW50b3VjaGVkIGFuZCBgZmFsc2VgIGlzIHJldHVybmVkLCBzbyBhIGNhbGxlciBjYW4gYXZvaWQgcmVsb2FkaW5nIGFuIGFscmVhZHktY29ycmVjdGx5LWNvbmZpZ3VyZWRcbiAqIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBgdHJ1ZWAgaWYgdGhlIGBkYXRhLmpzb25gIGNvbnRlbnQgY2hhbmdlZCAoYW5kIHdhc1xuICogd3JpdHRlbiksIG9yIGBmYWxzZWAgaWYgdGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBwcmVzZW50IChub3RoaW5nIHdyaXR0ZW4pLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IGFwcCwgc2V0dGluZ3MgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgY29uc3QgZGF0YVBhdGggPSBgJHthcHAudmF1bHQuY29uZmlnRGlyfS9wbHVnaW5zLyR7cGx1Z2luSWR9L2RhdGEuanNvbmA7XG5cbiAgbGV0IGRhdGE6IG9iamVjdCA9IHt9O1xuICBpZiAoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGRhdGFQYXRoKSkge1xuICAgIGNvbnN0IHBhcnNlZDogdW5rbm93biA9IEpTT04ucGFyc2UoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChkYXRhUGF0aCkpO1xuICAgIGlmIChwYXJzZWQgIT09IG51bGwgJiYgdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGRhdGEgPSBwYXJzZWQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZEJlZm9yZSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICBPYmplY3QuYXNzaWduKGRhdGEsIHNldHRpbmdzKTtcbiAgaWYgKEpTT04uc3RyaW5naWZ5KGRhdGEpID09PSBzZXJpYWxpemVkQmVmb3JlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IFN0cmluZyhKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCBEQVRBX0pTT05fSU5ERU5UKSk7XG4gIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLndyaXRlKGRhdGFQYXRoLCBgJHtzZXJpYWxpemVkfVxcbmApO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBEaXNhYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gKHBlcnNpc3RpbmcgdGhlIGNoYW5nZSkgaWYgaXQgaXMgY3VycmVudGx5IGVuYWJsZWQuIElkZW1wb3RlbnQgXHUyMDE0IGEgbm8tb3BcbiAqIHdoZW4gdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGRpc2FibGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIERpc2FibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgZGlzYWJsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IERpc2FibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKCFhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmRpc2FibGVQbHVnaW5BbmRTYXZlKHBsdWdpbklkKTtcbn1cblxuLyoqXG4gKiBFbmFibGVzIGEgY29tbXVuaXR5IHBsdWdpbiAocGVyc2lzdGluZyB0aGUgY2hhbmdlKSBpZiBpdCBpcyBub3QgYWxyZWFkeSBlbmFibGVkLiBJZGVtcG90ZW50IFx1MjAxNCBhIG5vLW9wXG4gKiB3aGVuIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBlbmFibGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IEVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy5lbmFibGVQbHVnaW5BbmRTYXZlKHBsdWdpbklkKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgYG93bmVyL25hbWVgIEdpdEh1YiByZXBvc2l0b3J5IG9mIGEgY29tbXVuaXR5IHBsdWdpbiBmcm9tIE9ic2lkaWFuJ3MgcHVibGljXG4gKiBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAgcmVnaXN0cnkuXG4gKlxuICogVGhlIHJlZ2lzdHJ5IGlzIGZldGNoZWQgb25jZSBhbmQgY2FjaGVkIG9uIHRoZSBzaGFyZWQgcGx1Z2luIHN0YXRlIGZvciBzdWJzZXF1ZW50IGNhbGxzOyBhIGZhaWxlZFxuICogZmV0Y2ggaXMgbm90IGNhY2hlZCwgc28gYSBsYXRlciBjYWxsIHJldHJpZXMuXG4gKlxuICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIHBsdWdpbiBpZCB0byBsb29rIHVwLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBwbHVnaW4ncyBgb3duZXIvbmFtZWAgcmVwb3NpdG9yeSwgb3IgYG51bGxgIGlmIHRoZVxuICogcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29tbXVuaXR5UGx1Z2luUmVwbyhwbHVnaW5JZDogc3RyaW5nKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk7XG4gIGNvbnN0IGVudHJ5ID0gZW50cmllcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gcGx1Z2luSWQpO1xuICByZXR1cm4gZW50cnk/LnJlcG8gPz8gbnVsbDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbiAodGhlIHJlbGVhc2UgYHRhZ19uYW1lYCwgYSBiYXJlIHZlcnNpb24gc3VjaCBhcyBgMS4yLjNgKSBvZiBhXG4gKiBHaXRIdWIgcmVwb3NpdG9yeS5cbiAqXG4gKiBAcGFyYW0gcmVwbyAtIFRoZSBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIGxhdGVzdCByZWxlYXNlIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RSZWxlYXNlVmVyc2lvbihyZXBvOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtyZXBvfS9yZWxlYXNlcy9sYXRlc3RgKTtcbiAgY29uc3QgcmVsZWFzZSA9IHJlc3BvbnNlLmpzb24gYXMgR2l0SHViUmVsZWFzZTtcbiAgcmV0dXJuIHJlbGVhc2UudGFnX25hbWU7XG59XG5cbi8qKlxuICogSW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luIGZyb20gdGhlIG9mZmljaWFsIHN0b3JlIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZC4gSWRlbXBvdGVudCBcdTIwMTQgYVxuICogbm8tb3Agd2hlbiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgaW5zdGFsbGVkLiBSZXNvbHZlcyB0aGUgcGx1Z2luJ3MgcmVwb3NpdG9yeSBmcm9tIE9ic2lkaWFuJ3NcbiAqIGNvbW11bml0eSByZWdpc3RyeSwgcmVhZHMgdGhlIGxhdGVzdCByZWxlYXNlIHZlcnNpb24gYW5kIGl0cyBtYW5pZmVzdCwgYW5kIGluc3RhbGxzIGl0IHRocm91Z2hcbiAqIE9ic2lkaWFuJ3Mgb3duIGBpbnN0YWxsUGx1Z2luYCBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkLlxuICogQHRocm93cyBJZiB0aGUgcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmIChhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVwbyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpblJlcG8ocGx1Z2luSWQpO1xuICBpZiAoIXJlcG8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtwbHVnaW5JZH0nIHdhcyBub3QgZm91bmQgaW4gdGhlIE9ic2lkaWFuIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG8pO1xuICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGdldFBsdWdpbk1hbmlmZXN0KHJlcG8sIHZlcnNpb24pO1xuICBhd2FpdCBhcHAucGx1Z2lucy5pbnN0YWxsUGx1Z2luKHJlcG8sIHZlcnNpb24sIG1hbmlmZXN0KTtcbn1cblxuLyoqXG4gKiBTZWFyY2hlcyBPYnNpZGlhbidzIHB1YmxpYyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeSwgcmV0dXJuaW5nIHRoZSBpZCBhbmQgZGlzcGxheSBuYW1lIG9mIGV2ZXJ5XG4gKiBwbHVnaW4gd2hvc2UgaWQsIG5hbWUsIGF1dGhvciBvciBkZXNjcmlwdGlvbiBjb250YWlucyB0aGUgcXVlcnkgKGNhc2UtaW5zZW5zaXRpdmUpLiBBbiBlbXB0eSBxdWVyeVxuICogbWF0Y2hlcyBldmVyeSBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHF1ZXJ5IC0gVGhlIHNlYXJjaCBxdWVyeS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgbWF0Y2hpbmcgcGx1Z2lucycge0BsaW5rIENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdH1zLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VhcmNoQ29tbXVuaXR5UGx1Z2lucyhxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5TZWFyY2hSZXN1bHRbXT4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuICBjb25zdCBub3JtYWxpemVkUXVlcnkgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gZW50cmllc1xuICAgIC5maWx0ZXIoKGVudHJ5KSA9PlxuICAgICAgZW50cnkuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICB8fCBlbnRyeS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgfHwgZW50cnkuYXV0aG9yLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgfHwgZW50cnkuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgKVxuICAgIC5tYXAoKGVudHJ5KSA9PiAoe1xuICAgICAgaWQ6IGVudHJ5LmlkLFxuICAgICAgbmFtZTogZW50cnkubmFtZVxuICAgIH0pKTtcbn1cblxuLyoqXG4gKiBFbmFibGVzIG9yIGRpc2FibGVzIGEgY29tbXVuaXR5IHBsdWdpbiB0byBtYXRjaCB0aGUgZGVzaXJlZCBzdGF0ZS4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lufSAvIHtAbGluayBkaXNhYmxlQ29tbXVuaXR5UGx1Z2lufSwgc28gaXQgaXMgaWRlbXBvdGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gbWF0Y2hlcyB0aGUgZGVzaXJlZCBlbmFibGVkIHN0YXRlLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IFRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAocGFyYW1zLmlzRW5hYmxlZCkge1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGRpc2FibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfVxufVxuXG4vKipcbiAqIEluc3RhbGxzIG9yIHVuaW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luIHRvIG1hdGNoIHRoZSBkZXNpcmVkIHN0YXRlLiBEZWxlZ2F0ZXMgdG9cbiAqIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSAvIHtAbGluayB1bmluc3RhbGxDb21tdW5pdHlQbHVnaW59LCBzbyBpdCBpcyBpZGVtcG90ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gbWF0Y2hlcyB0aGUgZGVzaXJlZCBpbnN0YWxsZWQgc3RhdGUuXG4gKiBAdGhyb3dzIElmIGluc3RhbGxpbmcgYW5kIHRoZSBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXM6IFRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHBhcmFtcy5pc0luc3RhbGxlZCkge1xuICAgIGF3YWl0IGluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCB1bmluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfVxufVxuXG4vKipcbiAqIFVuaW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luIGlmIGl0IGlzIGN1cnJlbnRseSBpbnN0YWxsZWQuIElkZW1wb3RlbnQgXHUyMDE0IGEgbm8tb3Agd2hlbiB0aGUgcGx1Z2luIGlzXG4gKiBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFVuaW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyB1bmluc3RhbGxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKCFhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGFwcC5wbHVnaW5zLnVuaW5zdGFsbFBsdWdpbihwbHVnaW5JZCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpOiBQcm9taXNlPENvbW11bml0eVBsdWdpbkVudHJ5W10+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKENPTU1VTklUWV9QTFVHSU5TX1VSTCk7XG4gIHJldHVybiByZXNwb25zZS5qc29uIGFzIENvbW11bml0eVBsdWdpbkVudHJ5W107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTogUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlPG51bGwgfCBQcm9taXNlPENvbW11bml0eVBsdWdpbkVudHJ5W10+PihDT01NVU5JVFlfUExVR0lOU19TVEFURV9LRVksIG51bGwpO1xuICBjYWNoZS52YWx1ZSA/Pz0gZmV0Y2hDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgY2FjaGUudmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FjaGUudmFsdWUgPSBudWxsO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBsdWdpbk1hbmlmZXN0KHJlcG86IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxQbHVnaW5NYW5pZmVzdD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3JlcG99L3JlbGVhc2VzL2Rvd25sb2FkLyR7dmVyc2lvbn0vbWFuaWZlc3QuanNvbmApO1xuICByZXR1cm4gcmVzcG9uc2UuanNvbiBhcyBQbHVnaW5NYW5pZmVzdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHJlZjogQ29tbXVuaXR5UGx1Z2luUmVmKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCdwbHVnaW5JZCcgaW4gcmVmKSB7XG4gICAgcmV0dXJuIHJlZi5wbHVnaW5JZDtcbiAgfVxuXG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk7XG4gIGNvbnN0IGVudHJ5ID0gZW50cmllcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09PSByZWYucGx1Z2luTmFtZSk7XG4gIGlmICghZW50cnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiBuYW1lZCAnJHtyZWYucGx1Z2luTmFtZX0nIHdhcyBub3QgZm91bmQgaW4gdGhlIE9ic2lkaWFuIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICB9XG4gIHJldHVybiBlbnRyeS5pZDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBLFNBQVMsa0JBQWtCO0FBRTNCLFNBQVMsZ0NBQWdDO0FBc0t6QyxNQUFNLDhCQUE4QjtBQUNwQyxNQUFNLHdCQUF3QjtBQUM5QixNQUFNLG1CQUFtQjtBQWN6QixlQUFzQix5QkFBeUIsUUFBMEQ7QUFDdkcsUUFBTSxFQUFFLEtBQUssU0FBUyxJQUFJO0FBQzFCLFFBQU0sV0FBVyxNQUFNLHlCQUF5QixNQUFNO0FBQ3RELFFBQU0sV0FBVyxHQUFHLElBQUksTUFBTSxTQUFTLFlBQVksUUFBUTtBQUUzRCxNQUFJLE9BQWUsQ0FBQztBQUNwQixNQUFJLE1BQU0sSUFBSSxNQUFNLFFBQVEsT0FBTyxRQUFRLEdBQUc7QUFDNUMsVUFBTSxTQUFrQixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sUUFBUSxLQUFLLFFBQVEsQ0FBQztBQUN6RSxRQUFJLFdBQVcsUUFBUSxPQUFPLFdBQVcsVUFBVTtBQUNqRCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxRQUFNLG1CQUFtQixLQUFLLFVBQVUsSUFBSTtBQUM1QyxTQUFPLE9BQU8sTUFBTSxRQUFRO0FBQzVCLE1BQUksS0FBSyxVQUFVLElBQUksTUFBTSxrQkFBa0I7QUFDN0MsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGFBQWEsT0FBTyxLQUFLLFVBQVUsTUFBTSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLFFBQU0sSUFBSSxNQUFNLFFBQVEsTUFBTSxVQUFVLEdBQUcsVUFBVTtBQUFBLENBQUk7QUFDekQsU0FBTztBQUNUO0FBVUEsZUFBc0IsdUJBQXVCLFFBQXFEO0FBQ2hHLFFBQU0sRUFBRSxJQUFJLElBQUk7QUFDaEIsUUFBTSxXQUFXLE1BQU0seUJBQXlCLE1BQU07QUFDdEQsTUFBSSxDQUFDLElBQUksUUFBUSxlQUFlLElBQUksUUFBUSxHQUFHO0FBQzdDO0FBQUEsRUFDRjtBQUNBLFFBQU0sSUFBSSxRQUFRLHFCQUFxQixRQUFRO0FBQ2pEO0FBVUEsZUFBc0Isc0JBQXNCLFFBQW9EO0FBQzlGLFFBQU0sRUFBRSxJQUFJLElBQUk7QUFDaEIsUUFBTSxXQUFXLE1BQU0seUJBQXlCLE1BQU07QUFDdEQsTUFBSSxJQUFJLFFBQVEsZUFBZSxJQUFJLFFBQVEsR0FBRztBQUM1QztBQUFBLEVBQ0Y7QUFDQSxRQUFNLElBQUksUUFBUSxvQkFBb0IsUUFBUTtBQUNoRDtBQWFBLGVBQXNCLHVCQUF1QixVQUEwQztBQUNyRixRQUFNLFVBQVUsTUFBTSwwQkFBMEI7QUFDaEQsUUFBTSxRQUFRLFFBQVEsS0FBSyxDQUFDLGNBQWMsVUFBVSxPQUFPLFFBQVE7QUFDbkUsU0FBTyxPQUFPLFFBQVE7QUFDeEI7QUFTQSxlQUFzQix3QkFBd0IsTUFBK0I7QUFDM0UsUUFBTSxXQUFXLE1BQU0sV0FBVyxnQ0FBZ0MsSUFBSSxrQkFBa0I7QUFDeEYsUUFBTSxVQUFVLFNBQVM7QUFDekIsU0FBTyxRQUFRO0FBQ2pCO0FBWUEsZUFBc0IsdUJBQXVCLFFBQXFEO0FBQ2hHLFFBQU0sRUFBRSxJQUFJLElBQUk7QUFDaEIsUUFBTSxXQUFXLE1BQU0seUJBQXlCLE1BQU07QUFDdEQsTUFBSSxJQUFJLFFBQVEsVUFBVSxRQUFRLEdBQUc7QUFDbkM7QUFBQSxFQUNGO0FBRUEsUUFBTSxPQUFPLE1BQU0sdUJBQXVCLFFBQVE7QUFDbEQsTUFBSSxDQUFDLE1BQU07QUFDVCxVQUFNLElBQUksTUFBTSxXQUFXLFFBQVEsNkRBQTZEO0FBQUEsRUFDbEc7QUFFQSxRQUFNLFVBQVUsTUFBTSx3QkFBd0IsSUFBSTtBQUNsRCxRQUFNLFdBQVcsTUFBTSxrQkFBa0IsTUFBTSxPQUFPO0FBQ3RELFFBQU0sSUFBSSxRQUFRLGNBQWMsTUFBTSxTQUFTLFFBQVE7QUFDekQ7QUFVQSxlQUFzQix1QkFBdUIsT0FBdUQ7QUFDbEcsUUFBTSxVQUFVLE1BQU0sMEJBQTBCO0FBQ2hELFFBQU0sa0JBQWtCLE1BQU0sWUFBWTtBQUMxQyxTQUFPLFFBQ0o7QUFBQSxJQUFPLENBQUMsVUFDUCxNQUFNLEdBQUcsWUFBWSxFQUFFLFNBQVMsZUFBZSxLQUM1QyxNQUFNLEtBQUssWUFBWSxFQUFFLFNBQVMsZUFBZSxLQUNqRCxNQUFNLE9BQU8sWUFBWSxFQUFFLFNBQVMsZUFBZSxLQUNuRCxNQUFNLFlBQVksWUFBWSxFQUFFLFNBQVMsZUFBZTtBQUFBLEVBQzdELEVBQ0MsSUFBSSxDQUFDLFdBQVc7QUFBQSxJQUNmLElBQUksTUFBTTtBQUFBLElBQ1YsTUFBTSxNQUFNO0FBQUEsRUFDZCxFQUFFO0FBQ047QUFVQSxlQUFzQiw0QkFBNEIsUUFBMEQ7QUFDMUcsTUFBSSxPQUFPLFdBQVc7QUFDcEIsVUFBTSxzQkFBc0IsTUFBTTtBQUFBLEVBQ3BDLE9BQU87QUFDTCxVQUFNLHVCQUF1QixNQUFNO0FBQUEsRUFDckM7QUFDRjtBQVVBLGVBQXNCLDZCQUE2QixRQUEyRDtBQUM1RyxNQUFJLE9BQU8sYUFBYTtBQUN0QixVQUFNLHVCQUF1QixNQUFNO0FBQUEsRUFDckMsT0FBTztBQUNMLFVBQU0seUJBQXlCLE1BQU07QUFBQSxFQUN2QztBQUNGO0FBVUEsZUFBc0IseUJBQXlCLFFBQXVEO0FBQ3BHLFFBQU0sRUFBRSxJQUFJLElBQUk7QUFDaEIsUUFBTSxXQUFXLE1BQU0seUJBQXlCLE1BQU07QUFDdEQsTUFBSSxDQUFDLElBQUksUUFBUSxVQUFVLFFBQVEsR0FBRztBQUNwQztBQUFBLEVBQ0Y7QUFDQSxRQUFNLElBQUksUUFBUSxnQkFBZ0IsUUFBUTtBQUM1QztBQUVBLGVBQWUsOEJBQStEO0FBQzVFLFFBQU0sV0FBVyxNQUFNLFdBQVcscUJBQXFCO0FBQ3ZELFNBQU8sU0FBUztBQUNsQjtBQUVBLGVBQWUsNEJBQTZEO0FBQzFFLFFBQU0sUUFBUSx5QkFBaUUsNkJBQTZCLElBQUk7QUFDaEgsUUFBTSxVQUFVLDRCQUE0QjtBQUU1QyxNQUFJO0FBQ0YsV0FBTyxNQUFNLE1BQU07QUFBQSxFQUNyQixTQUFTLE9BQU87QUFDZCxVQUFNLFFBQVE7QUFDZCxVQUFNO0FBQUEsRUFDUjtBQUNGO0FBRUEsZUFBZSxrQkFBa0IsTUFBYyxTQUEwQztBQUN2RixRQUFNLFdBQVcsTUFBTSxXQUFXLHNCQUFzQixJQUFJLHNCQUFzQixPQUFPLGdCQUFnQjtBQUN6RyxTQUFPLFNBQVM7QUFDbEI7QUFFQSxlQUFlLHlCQUF5QixLQUEwQztBQUNoRixNQUFJLGNBQWMsS0FBSztBQUNyQixXQUFPLElBQUk7QUFBQSxFQUNiO0FBRUEsUUFBTSxVQUFVLE1BQU0sMEJBQTBCO0FBQ2hELFFBQU0sUUFBUSxRQUFRLEtBQUssQ0FBQyxjQUFjLFVBQVUsU0FBUyxJQUFJLFVBQVU7QUFDM0UsTUFBSSxDQUFDLE9BQU87QUFDVixVQUFNLElBQUksTUFBTSxpQkFBaUIsSUFBSSxVQUFVLDZEQUE2RDtBQUFBLEVBQzlHO0FBQ0EsU0FBTyxNQUFNO0FBQ2Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW11bml0eS1wbHVnaW5zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMsIHNlYXJjaGVzIGFuZCBtYW5hZ2VzIGNvbW11bml0eSBwbHVnaW5zIHRocm91Z2ggT2JzaWRpYW4ncyBwdWJsaWMgcGx1Z2luIHJlZ2lzdHJ5IGFuZFxuICogc3RvcmUtaW5zdGFsbCBwYXRoLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSB0aGF0IG1hcHMgYSBwbHVnaW4gYGlkYCB0byBpdHNcbiAqIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSBcdTIwMTQgdGhlIHBsdWdpbiBtYW5pZmVzdCBpdHNlbGYgY2FycmllcyBubyByZXBvc2l0b3J5LiBUaGlzIG1vZHVsZSB1c2VzXG4gKiBpdCB0byBzZWFyY2ggdGhlIHJlZ2lzdHJ5LCB0byBsb2NhdGUgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZXMgKGUuZy4gdG8gZG93bmxvYWQgaXRzIHNoaXBwZWRcbiAqIGRlbW8tdmF1bHQgYXJjaGl2ZSksIGFuZCB0byBpbnN0YWxsL3VuaW5zdGFsbC9lbmFibGUvZGlzYWJsZSBhbiBhcmJpdHJhcnkgY29tbXVuaXR5IHBsdWdpbiBcdTIwMTQgc2VsZWN0ZWRcbiAqIGJ5IGVpdGhlciBpdHMgYGlkYCBvciBpdHMgZGlzcGxheSBgbmFtZWAgXHUyMDE0IHZpYSBPYnNpZGlhbidzIG93biBzdG9yZSBwYXRoIChgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbmBcbiAqICsgYGVuYWJsZVBsdWdpbkFuZFNhdmVgKSwgc28gYW55IGRldi9kZXBsb3kgb3IgdG9vbGluZyBmbG93IGNhbiByZXVzZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luTWFuaWZlc3Rcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGVpdGhlciBieSBpdHMgaWQgKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeUlkUmVmfSkgb3IgYnkgaXRzIGRpc3BsYXkgbmFtZVxuICogKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeU5hbWVSZWZ9KS5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbXVuaXR5UGx1Z2luUmVmID0gQ29tbXVuaXR5UGx1Z2luQnlJZFJlZiB8IENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZjtcblxuLyoqXG4gKiBBIHNpbmdsZSByZXN1bHQgb2Yge0BsaW5rIHNlYXJjaENvbW11bml0eVBsdWdpbnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luU2V0dGluZ3M7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgXG4gKiBvciBgcGx1Z2luTmFtZWA7IGBzZXR0aW5nc2AgaXMgb3B0aW9uYWwgKG9taXQgZm9yIGEgcGx1Z2luIHRoYXQgbmVlZHMgbm8gY29uZmlndXJhdGlvbikuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgUGFydGlhbDxDb21tdW5pdHlQbHVnaW5TZXR0aW5ncz47XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlRW5hYmxlU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5Ub2dnbGVJbnN0YWxsU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHVuaW5zdGFsbENvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGJ5IGl0cyBpZC5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkJ5SWRSZWYge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gYnkgaXRzIGRpc3BsYXkgbmFtZSAoYXMgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHJlZ2lzdHJ5KS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZiB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBlbnRyeSBpbiBPYnNpZGlhbidzIGBjb21tdW5pdHktcGx1Z2lucy5qc29uYCByZWdpc3RyeS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gYXV0aG9yLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGVzY3JpcHRpb24uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZSBhIGNvbW11bml0eS1wbHVnaW4gb3BlcmF0aW9uIHJ1bnMgYWdhaW5zdC5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xufVxuXG4vKipcbiAqIFRoZSBzZXR0aW5ncyB0byBtZXJnZSBpbnRvIGEgY29tbXVuaXR5IHBsdWdpbidzIGBkYXRhLmpzb25gLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIHNldHRpbmdzIG9iamVjdCBzaGFsbG93LW1lcmdlZCBvdmVyIHRoZSBwbHVnaW4ncyBleGlzdGluZyBgZGF0YS5qc29uYCAodGhlIGZpbGUgaXMgY3JlYXRlZCBpZlxuICAgKiBhYnNlbnQpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3M6IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgZGVzaXJlZCBlbmFibGVkIHN0YXRlIGZvciB7QGxpbmsgdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblRvZ2dsZUVuYWJsZVN0YXRlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGU6IGB0cnVlYCBlbmFibGVzIHRoZSBwbHVnaW4sIGBmYWxzZWAgZGlzYWJsZXMgaXQuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlIGZvciB7QGxpbmsgdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbn0uXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5Ub2dnbGVJbnN0YWxsU3RhdGUge1xuICAvKipcbiAgICogVGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlOiBgdHJ1ZWAgaW5zdGFsbHMgdGhlIHBsdWdpbiwgYGZhbHNlYCB1bmluc3RhbGxzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNJbnN0YWxsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHN1YnNldCBvZiBhIEdpdEh1YiByZWxlYXNlIHdlIHJlYWQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJSZWxlYXNlIHtcbiAgLyoqXG4gICAqIFRoZSByZWxlYXNlIHRhZywgYSBiYXJlIHZlcnNpb24gc3VjaCBhcyBgMS4yLjNgLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFnX25hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfU1RBVEVfS0VZID0gJ2NvbW11bml0eVBsdWdpbkVudHJpZXNQcm9taXNlJztcbmNvbnN0IENPTU1VTklUWV9QTFVHSU5TX1VSTCA9ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9IRUFEL2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuY29uc3QgREFUQV9KU09OX0lOREVOVCA9IDI7XG5cbi8qKlxuICogV3JpdGVzIHNldHRpbmdzIGludG8gYSBjb21tdW5pdHkgcGx1Z2luJ3MgYGRhdGEuanNvbmAsIHNoYWxsb3ctbWVyZ2luZyB0aGVtIG92ZXIgYW55IGV4aXN0aW5nIHNldHRpbmdzXG4gKiAoY3JlYXRpbmcgdGhlIGZpbGUgaWYgYWJzZW50KS4gV3JpdGluZyBzZXR0aW5ncyBCRUZPUkUgdGhlIHBsdWdpbiBpcyBlbmFibGVkIG1ha2VzIGl0IGxvYWQgYWxyZWFkeVxuICogY29uZmlndXJlZCwgd2l0aCBubyByZWxvYWQuIEEgbm8tb3Agd3JpdGUgaXMgc2tpcHBlZDogd2hlbiB0aGUgbWVyZ2UgY2hhbmdlcyBub3RoaW5nLCB0aGUgZmlsZSBpcyBsZWZ0XG4gKiB1bnRvdWNoZWQgYW5kIGBmYWxzZWAgaXMgcmV0dXJuZWQsIHNvIGEgY2FsbGVyIGNhbiBhdm9pZCByZWxvYWRpbmcgYW4gYWxyZWFkeS1jb3JyZWN0bHktY29uZmlndXJlZFxuICogcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGB0cnVlYCBpZiB0aGUgYGRhdGEuanNvbmAgY29udGVudCBjaGFuZ2VkIChhbmQgd2FzXG4gKiB3cml0dGVuKSwgb3IgYGZhbHNlYCBpZiB0aGUgc2V0dGluZ3Mgd2VyZSBhbHJlYWR5IHByZXNlbnQgKG5vdGhpbmcgd3JpdHRlbikuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uZmlndXJlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgYXBwLCBzZXR0aW5ncyB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBjb25zdCBkYXRhUGF0aCA9IGAke2FwcC52YXVsdC5jb25maWdEaXJ9L3BsdWdpbnMvJHtwbHVnaW5JZH0vZGF0YS5qc29uYDtcblxuICBsZXQgZGF0YTogb2JqZWN0ID0ge307XG4gIGlmIChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMoZGF0YVBhdGgpKSB7XG4gICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZShhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5yZWFkKGRhdGFQYXRoKSk7XG4gICAgaWYgKHBhcnNlZCAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0Jykge1xuICAgICAgZGF0YSA9IHBhcnNlZDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZXJpYWxpemVkQmVmb3JlID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gIE9iamVjdC5hc3NpZ24oZGF0YSwgc2V0dGluZ3MpO1xuICBpZiAoSlNPTi5zdHJpbmdpZnkoZGF0YSkgPT09IHNlcmlhbGl6ZWRCZWZvcmUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzZXJpYWxpemVkID0gU3RyaW5nKEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIERBVEFfSlNPTl9JTkRFTlQpKTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUoZGF0YVBhdGgsIGAke3NlcmlhbGl6ZWR9XFxuYCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIERpc2FibGVzIGEgY29tbXVuaXR5IHBsdWdpbiAocGVyc2lzdGluZyB0aGUgY2hhbmdlKSBpZiBpdCBpcyBjdXJyZW50bHkgZW5hYmxlZC4gSWRlbXBvdGVudCBcdTIwMTQgYSBuby1vcFxuICogd2hlbiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgZGlzYWJsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBkaXNhYmxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoIWFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgYXBwLnBsdWdpbnMuZGlzYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIChwZXJzaXN0aW5nIHRoZSBjaGFuZ2UpIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGVuYWJsZWQuIElkZW1wb3RlbnQgXHUyMDE0IGEgbm8tb3BcbiAqIHdoZW4gdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGVuYWJsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmIChhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkgb2YgYSBjb21tdW5pdHkgcGx1Z2luIGZyb20gT2JzaWRpYW4ncyBwdWJsaWNcbiAqIGBjb21tdW5pdHktcGx1Z2lucy5qc29uYCByZWdpc3RyeS5cbiAqXG4gKiBUaGUgcmVnaXN0cnkgaXMgZmV0Y2hlZCBvbmNlIGFuZCBjYWNoZWQgb24gdGhlIHNoYXJlZCBwbHVnaW4gc3RhdGUgZm9yIHN1YnNlcXVlbnQgY2FsbHM7IGEgZmFpbGVkXG4gKiBmZXRjaCBpcyBub3QgY2FjaGVkLCBzbyBhIGxhdGVyIGNhbGwgcmV0cmllcy5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgcGx1Z2luIGlkIHRvIGxvb2sgdXAuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIHBsdWdpbidzIGBvd25lci9uYW1lYCByZXBvc2l0b3J5LCBvciBgbnVsbGAgaWYgdGhlXG4gKiBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiB0aGUgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDb21tdW5pdHlQbHVnaW5SZXBvKHBsdWdpbklkOiBzdHJpbmcpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09PSBwbHVnaW5JZCk7XG4gIHJldHVybiBlbnRyeT8ucmVwbyA/PyBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uICh0aGUgcmVsZWFzZSBgdGFnX25hbWVgLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2ApIG9mIGFcbiAqIEdpdEh1YiByZXBvc2l0b3J5LlxuICpcbiAqIEBwYXJhbSByZXBvIC0gVGhlIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L3JlbGVhc2VzL2xhdGVzdGApO1xuICBjb25zdCByZWxlYXNlID0gcmVzcG9uc2UuanNvbiBhcyBHaXRIdWJSZWxlYXNlO1xuICByZXR1cm4gcmVsZWFzZS50YWdfbmFtZTtcbn1cblxuLyoqXG4gKiBJbnN0YWxscyBhIGNvbW11bml0eSBwbHVnaW4gZnJvbSB0aGUgb2ZmaWNpYWwgc3RvcmUgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLiBJZGVtcG90ZW50IFx1MjAxNCBhXG4gKiBuby1vcCB3aGVuIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBpbnN0YWxsZWQuIFJlc29sdmVzIHRoZSBwbHVnaW4ncyByZXBvc2l0b3J5IGZyb20gT2JzaWRpYW4nc1xuICogY29tbXVuaXR5IHJlZ2lzdHJ5LCByZWFkcyB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbiBhbmQgaXRzIG1hbmlmZXN0LCBhbmQgaW5zdGFsbHMgaXQgdGhyb3VnaFxuICogT2JzaWRpYW4ncyBvd24gYGluc3RhbGxQbHVnaW5gIHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQuXG4gKiBAdGhyb3dzIElmIHRoZSBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXM6IEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXBvID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luUmVwbyhwbHVnaW5JZCk7XG4gIGlmICghcmVwbykge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luICcke3BsdWdpbklkfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0TGF0ZXN0UmVsZWFzZVZlcnNpb24ocmVwbyk7XG4gIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgZ2V0UGx1Z2luTWFuaWZlc3QocmVwbywgdmVyc2lvbik7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmluc3RhbGxQbHVnaW4ocmVwbywgdmVyc2lvbiwgbWFuaWZlc3QpO1xufVxuXG4vKipcbiAqIEluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiwgd3JpdGVzIGl0cyBzZXR0aW5ncywgVEhFTiBlbmFibGVzIGl0IFx1MjAxNCBpbiB0aGF0IG9yZGVyIFx1MjAxNCBzbyB0aGUgcGx1Z2luXG4gKiBsb2FkcyBhbHJlYWR5IGNvbmZpZ3VyZWQgKGEgcGx1Z2luIGVuYWJsZWQgYmVmb3JlIGl0IGlzIGNvbmZpZ3VyZWQgcnVucyBpdHMgYG9ubG9hZGAgd2l0aCBkZWZhdWx0XG4gKiBzZXR0aW5ncyBhbmQgZG9lcyBub3RoaW5nIHVzZWZ1bCkuIElmIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBlbmFibGVkIGFuZCB0aGUgc2V0dGluZ3MgY2hhbmdlZCwgaXQgaXNcbiAqIGRpc2FibGVkIGFuZCByZS1lbmFibGVkIHNvIHRoZSBuZXcgc2V0dGluZ3MgdGFrZSBlZmZlY3QuIGBzZXR0aW5nc2AgaXMgb3B0aW9uYWw6IG9taXQgaXQgZm9yIGEgcGx1Z2luXG4gKiB0aGF0IG5lZWRzIG5vIGNvbmZpZ3VyYXRpb24uIENvbXBvc2VzIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSwge0BsaW5rIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbn0sXG4gKiB7QGxpbmsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lufSBhbmQge0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkLCBjb25maWd1cmVkIGFuZCBlbmFibGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBJbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwLCBzZXR0aW5ncyB9ID0gcGFyYW1zO1xuICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIGNvbnN0IGRpZFNldHRpbmdzQ2hhbmdlID0gc2V0dGluZ3MgPyBhd2FpdCBjb25maWd1cmVDb21tdW5pdHlQbHVnaW4oeyAuLi5wYXJhbXMsIHNldHRpbmdzIH0pIDogZmFsc2U7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKGRpZFNldHRpbmdzQ2hhbmdlKSB7XG4gICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9XG59XG5cbi8qKlxuICogU2VhcmNoZXMgT2JzaWRpYW4ncyBwdWJsaWMgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnksIHJldHVybmluZyB0aGUgaWQgYW5kIGRpc3BsYXkgbmFtZSBvZiBldmVyeVxuICogcGx1Z2luIHdob3NlIGlkLCBuYW1lLCBhdXRob3Igb3IgZGVzY3JpcHRpb24gY29udGFpbnMgdGhlIHF1ZXJ5IChjYXNlLWluc2Vuc2l0aXZlKS4gQW4gZW1wdHkgcXVlcnlcbiAqIG1hdGNoZXMgZXZlcnkgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBxdWVyeSAtIFRoZSBzZWFyY2ggcXVlcnkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIG1hdGNoaW5nIHBsdWdpbnMnIHtAbGluayBDb21tdW5pdHlQbHVnaW5TZWFyY2hSZXN1bHR9cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlYXJjaENvbW11bml0eVBsdWdpbnMocXVlcnk6IHN0cmluZyk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0W10+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGVudHJpZXNcbiAgICAuZmlsdGVyKChlbnRyeSkgPT5cbiAgICAgIGVudHJ5LmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgfHwgZW50cnkubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5LmF1dGhvci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5LmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgIClcbiAgICAubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIGlkOiBlbnRyeS5pZCxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWVcbiAgICB9KSk7XG59XG5cbi8qKlxuICogRW5hYmxlcyBvciBkaXNhYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gdG8gbWF0Y2ggdGhlIGRlc2lyZWQgc3RhdGUuIERlbGVnYXRlcyB0b1xuICoge0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0gLyB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0sIHNvIGl0IGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIG1hdGNoZXMgdGhlIGRlc2lyZWQgZW5hYmxlZCBzdGF0ZS5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHBhcmFtcy5pc0VuYWJsZWQpIHtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnN0YWxscyBvciB1bmluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiB0byBtYXRjaCB0aGUgZGVzaXJlZCBzdGF0ZS4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgaW5zdGFsbENvbW11bml0eVBsdWdpbn0gLyB7QGxpbmsgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSwgc28gaXQgaXMgaWRlbXBvdGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIG1hdGNoZXMgdGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlLlxuICogQHRocm93cyBJZiBpbnN0YWxsaW5nIGFuZCB0aGUgcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwYXJhbXMuaXNJbnN0YWxsZWQpIHtcbiAgICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVbmluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiBpZiBpdCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkLiBJZGVtcG90ZW50IFx1MjAxNCBhIG5vLW9wIHdoZW4gdGhlIHBsdWdpbiBpc1xuICogbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgdW5pbnN0YWxsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogVW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghYXBwLnBsdWdpbnMubWFuaWZlc3RzW3BsdWdpbklkXSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy51bmluc3RhbGxQbHVnaW4ocGx1Z2luSWQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaENvbW11bml0eVBsdWdpbkVudHJpZXMoKTogUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChDT01NVU5JVFlfUExVR0lOU19VUkwpO1xuICByZXR1cm4gcmVzcG9uc2UuanNvbiBhcyBDb21tdW5pdHlQbHVnaW5FbnRyeVtdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luRW50cnlbXT4ge1xuICBjb25zdCBjYWNoZSA9IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZTxudWxsIHwgUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPj4oQ09NTVVOSVRZX1BMVUdJTlNfU1RBVEVfS0VZLCBudWxsKTtcbiAgY2FjaGUudmFsdWUgPz89IGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGNhY2hlLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhY2hlLnZhbHVlID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQbHVnaW5NYW5pZmVzdChyZXBvOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8UGx1Z2luTWFuaWZlc3Q+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvfS9yZWxlYXNlcy9kb3dubG9hZC8ke3ZlcnNpb259L21hbmlmZXN0Lmpzb25gKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24gYXMgUGx1Z2luTWFuaWZlc3Q7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChyZWY6IENvbW11bml0eVBsdWdpblJlZik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICgncGx1Z2luSWQnIGluIHJlZikge1xuICAgIHJldHVybiByZWYucGx1Z2luSWQ7XG4gIH1cblxuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuICBjb25zdCBlbnRyeSA9IGVudHJpZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PT0gcmVmLnBsdWdpbk5hbWUpO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gbmFtZWQgJyR7cmVmLnBsdWdpbk5hbWV9JyB3YXMgbm90IGZvdW5kIGluIHRoZSBPYnNpZGlhbiBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5gKTtcbiAgfVxuICByZXR1cm4gZW50cnkuaWQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxTQUFTLGtCQUFrQjtBQUUzQixTQUFTLGdDQUFnQztBQTRLekMsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSxtQkFBbUI7QUFjekIsZUFBc0IseUJBQXlCLFFBQTBEO0FBQ3ZHLFFBQU0sRUFBRSxLQUFLLFNBQVMsSUFBSTtBQUMxQixRQUFNLFdBQVcsTUFBTSx5QkFBeUIsTUFBTTtBQUN0RCxRQUFNLFdBQVcsR0FBRyxJQUFJLE1BQU0sU0FBUyxZQUFZLFFBQVE7QUFFM0QsTUFBSSxPQUFlLENBQUM7QUFDcEIsTUFBSSxNQUFNLElBQUksTUFBTSxRQUFRLE9BQU8sUUFBUSxHQUFHO0FBQzVDLFVBQU0sU0FBa0IsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLFFBQVEsS0FBSyxRQUFRLENBQUM7QUFDekUsUUFBSSxXQUFXLFFBQVEsT0FBTyxXQUFXLFVBQVU7QUFDakQsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsUUFBTSxtQkFBbUIsS0FBSyxVQUFVLElBQUk7QUFDNUMsU0FBTyxPQUFPLE1BQU0sUUFBUTtBQUM1QixNQUFJLEtBQUssVUFBVSxJQUFJLE1BQU0sa0JBQWtCO0FBQzdDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxhQUFhLE9BQU8sS0FBSyxVQUFVLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxRQUFNLElBQUksTUFBTSxRQUFRLE1BQU0sVUFBVSxHQUFHLFVBQVU7QUFBQSxDQUFJO0FBQ3pELFNBQU87QUFDVDtBQVVBLGVBQXNCLHVCQUF1QixRQUFxRDtB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
|
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
* It writes CodeScript Toolkit's settings BEFORE enabling it, so the plugin loads already configured —
|
|
15
15
|
* no reload. CodeScript Toolkit then runs the vault's `startup.ts` (via its `startupScriptPath`
|
|
16
16
|
* setting), which is where each vault opens its start note and does any plugin-specific setup.
|
|
17
|
+
*
|
|
18
|
+
* It also creates CodeScript Toolkit's invocable-scripts folder if it is missing, so every demo vault
|
|
19
|
+
* has the same layout even when the vault ships no invocable scripts — the vaults themselves commit no
|
|
20
|
+
* empty folder for it.
|
|
17
21
|
*/
|
|
18
22
|
import type { App } from 'obsidian';
|
|
19
23
|
/**
|
|
@@ -21,6 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
21
21
|
globalThis.process = browserProcess;
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
|
+
import { join } from "../path.mjs";
|
|
24
25
|
import {
|
|
25
26
|
configureCommunityPlugin,
|
|
26
27
|
disableCommunityPlugin,
|
|
@@ -43,6 +44,7 @@ async function bootstrapDemoVault(params) {
|
|
|
43
44
|
pluginId: CODE_SCRIPT_TOOLKIT_PLUGIN_ID,
|
|
44
45
|
settings: CODE_SCRIPT_TOOLKIT_SETTINGS
|
|
45
46
|
});
|
|
47
|
+
await ensureInvocableScriptsFolder(app);
|
|
46
48
|
if (!app.plugins.enabledPlugins.has(CODE_SCRIPT_TOOLKIT_PLUGIN_ID)) {
|
|
47
49
|
await enableCommunityPlugin({ app, pluginId: CODE_SCRIPT_TOOLKIT_PLUGIN_ID });
|
|
48
50
|
} else if (didSettingsChange) {
|
|
@@ -50,7 +52,13 @@ async function bootstrapDemoVault(params) {
|
|
|
50
52
|
await enableCommunityPlugin({ app, pluginId: CODE_SCRIPT_TOOLKIT_PLUGIN_ID });
|
|
51
53
|
}
|
|
52
54
|
}
|
|
55
|
+
async function ensureInvocableScriptsFolder(app) {
|
|
56
|
+
const invocableScriptsFolderPath = join(CODE_SCRIPT_TOOLKIT_MODULES_ROOT, CODE_SCRIPT_TOOLKIT_SETTINGS.invocableScriptsFolder);
|
|
57
|
+
if (!await app.vault.adapter.exists(invocableScriptsFolderPath)) {
|
|
58
|
+
await app.vault.adapter.mkdir(invocableScriptsFolderPath);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
53
61
|
export {
|
|
54
62
|
bootstrapDemoVault
|
|
55
63
|
};
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2RlbW8tdmF1bHQtaGVscGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQm9vdHN0cmFwcyBhIGRlbW8gdmF1bHQgYnkgaW5zdGFsbGluZywgY29uZmlndXJpbmcsIGFuZCBlbmFibGluZyBDb2RlU2NyaXB0IFRvb2xraXQuXG4gKlxuICogQSBwbHVnaW4ncyBkZW1vIHZhdWx0IHNob3djYXNlcyB0aGUgcGx1Z2luIHRocm91Z2ggbm90ZXMgd2hvc2UgYGNvZGUtYnV0dG9uYHMgcnVuIFR5cGVTY3JpcHQgdmlhXG4gKiBDb2RlU2NyaXB0IFRvb2xraXQuIEEgZGVtbyB2YXVsdCB0aGF0IGRvZXMgbm90IGl0c2VsZiBzaGlwIENvZGVTY3JpcHQgVG9vbGtpdCB0aGVyZWZvcmUgbmVlZHMgaXRcbiAqIGluc3RhbGxlZCwgY29uZmlndXJlZCwgYW5kIGVuYWJsZWQgYmVmb3JlIHRob3NlIGJ1dHRvbnMgd29yay4ge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdH0gZG9lcyBleGFjdGx5XG4gKiB0aGF0IHdpdGggbm8gY29tbWl0dGVkIENvZGVTY3JpcHQgVG9vbGtpdCBjb25maWcgYW5kIG5vIG1hbnVhbCBzZXR1cCwgc28gaXQgY2FuIGJlIGRyaXZlbiBmcm9tIGEgdGlueVxuICogY29tbWl0dGVkIGJvb3RzdHJhcCBwbHVnaW4gKGBkZW1vLXZhdWx0LWhlbHBlcmApIHRoYXQgaXMgaW5qZWN0ZWQgaW50byBldmVyeSBkZW1vIHZhdWx0IGF0IHJlbGVhc2VcbiAqIHRpbWUuXG4gKlxuICogSXQgd3JpdGVzIENvZGVTY3JpcHQgVG9vbGtpdCdzIHNldHRpbmdzIEJFRk9SRSBlbmFibGluZyBpdCwgc28gdGhlIHBsdWdpbiBsb2FkcyBhbHJlYWR5IGNvbmZpZ3VyZWQgXHUyMDE0XG4gKiBubyByZWxvYWQuIENvZGVTY3JpcHQgVG9vbGtpdCB0aGVuIHJ1bnMgdGhlIHZhdWx0J3MgYHN0YXJ0dXAudHNgICh2aWEgaXRzIGBzdGFydHVwU2NyaXB0UGF0aGBcbiAqIHNldHRpbmcpLCB3aGljaCBpcyB3aGVyZSBlYWNoIHZhdWx0IG9wZW5zIGl0cyBzdGFydCBub3RlIGFuZCBkb2VzIGFueSBwbHVnaW4tc3BlY2lmaWMgc2V0dXAuXG4gKlxuICogSXQgYWxzbyBjcmVhdGVzIENvZGVTY3JpcHQgVG9vbGtpdCdzIGludm9jYWJsZS1zY3JpcHRzIGZvbGRlciBpZiBpdCBpcyBtaXNzaW5nLCBzbyBldmVyeSBkZW1vIHZhdWx0XG4gKiBoYXMgdGhlIHNhbWUgbGF5b3V0IGV2ZW4gd2hlbiB0aGUgdmF1bHQgc2hpcHMgbm8gaW52b2NhYmxlIHNjcmlwdHMgXHUyMDE0IHRoZSB2YXVsdHMgdGhlbXNlbHZlcyBjb21taXQgbm9cbiAqIGVtcHR5IGZvbGRlciBmb3IgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7XG4gIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbixcbiAgZGlzYWJsZUNvbW11bml0eVBsdWdpbixcbiAgZW5hYmxlQ29tbXVuaXR5UGx1Z2luLFxuICBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luXG59IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbnMudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBib290c3RyYXBEZW1vVmF1bHR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcERlbW9WYXVsdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG59XG5cbi8qKlxuICogQ29kZVNjcmlwdCBUb29sa2l0J3Mgc2V0dGluZ3MsIHdyaXR0ZW4gaW50byBpdHMgYGRhdGEuanNvbmAgYmVmb3JlIGl0IGlzIGVuYWJsZWQuXG4gKi9cbmludGVyZmFjZSBDb2RlU2NyaXB0VG9vbGtpdFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgKHVuZGVyIHtAbGluayBDb2RlU2NyaXB0VG9vbGtpdFNldHRpbmdzLm1vZHVsZXNSb290fSkgaG9sZGluZyBpbnZvY2FibGUgc2NyaXB0cy5cbiAgICovXG4gIHJlYWRvbmx5IGludm9jYWJsZVNjcmlwdHNGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIGZvbGRlciB0aGF0IGByZXF1aXJlKCcvXHUyMDI2JylgIHJlc29sdmVzIG1vZHVsZSBwYXRocyBhZ2FpbnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlc1Jvb3Q6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBDb2RlU2NyaXB0IFRvb2xraXQgaGFuZGxlcyBgb2JzaWRpYW46Ly9gIHByb3RvY29sIFVSTHMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIYW5kbGVQcm90b2NvbFVybHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoICh1bmRlciB7QGxpbmsgQ29kZVNjcmlwdFRvb2xraXRTZXR0aW5ncy5tb2R1bGVzUm9vdH0pIG9mIHRoZSBzY3JpcHQgcnVuIG9uIGxvYWQuXG4gICAqL1xuICByZWFkb25seSBzdGFydHVwU2NyaXB0UGF0aDogc3RyaW5nO1xufVxuXG5jb25zdCBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCA9ICdmaXgtcmVxdWlyZS1tb2R1bGVzJztcbmNvbnN0IENPREVfU0NSSVBUX1RPT0xLSVRfTU9EVUxFU19ST09UID0gJ19hc3NldHMvQ29kZVNjcmlwdFRvb2xraXQnO1xuY29uc3QgQ09ERV9TQ1JJUFRfVE9PTEtJVF9TRVRUSU5HUzogQ29kZVNjcmlwdFRvb2xraXRTZXR0aW5ncyA9IHtcbiAgaW52b2NhYmxlU2NyaXB0c0ZvbGRlcjogJ0ludm9jYWJsZXMnLFxuICBtb2R1bGVzUm9vdDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9NT0RVTEVTX1JPT1QsXG4gIHNob3VsZEhhbmRsZVByb3RvY29sVXJsczogdHJ1ZSxcbiAgc3RhcnR1cFNjcmlwdFBhdGg6ICdzdGFydHVwLnRzJ1xufTtcblxuLyoqXG4gKiBCb290c3RyYXBzIGEgZGVtbyB2YXVsdCBzbyBpdHMgbm90ZXMnIGBjb2RlLWJ1dHRvbmBzIHdvcmsgd2l0aCBubyBtYW51YWwgc2V0dXA6IGluc3RhbGxzIENvZGVTY3JpcHRcbiAqIFRvb2xraXQgZnJvbSB0aGUgY29tbXVuaXR5IHN0b3JlIChpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQpLCB3cml0ZXMgaXRzIHNldHRpbmdzLCB0aGVuIGVuYWJsZXNcbiAqIGl0IFx1MjAxNCB3cml0aW5nIHRoZSBzZXR0aW5ncyBCRUZPUkUgZW5hYmxpbmcgc28gYSBmcmVzaCBlbmFibGUgbG9hZHMgaXQgYWxyZWFkeSBjb25maWd1cmVkLCB3aXRoIG5vXG4gKiByZWxvYWQuIElmIENvZGVTY3JpcHQgVG9vbGtpdCBpcyBhbHJlYWR5IGVuYWJsZWQgYnV0IHRoZSBzZXR0aW5ncyBqdXN0IGNoYW5nZWQsIGl0IGlzIHJlbG9hZGVkXG4gKiAoZGlzYWJsZWQgdGhlbiBlbmFibGVkKSBzbyBpdCByZS1yZWFkcyBgZGF0YS5qc29uYDsgd2hlbiB0aGUgc2V0dGluZ3Mgd2VyZSBhbHJlYWR5IGluIHBsYWNlLCBub3RoaW5nIGlzXG4gKiByZWxvYWRlZCAoc28gYSByb3V0aW5lIHZhdWx0IHJlLW9wZW4gZG9lcyBub3QgcmUtcnVuIENvZGVTY3JpcHQgVG9vbGtpdCdzIHN0YXJ0dXApLiBDb2RlU2NyaXB0IFRvb2xraXRcbiAqIHRoZW4gcnVucyB0aGUgdmF1bHQncyBgc3RhcnR1cC50c2AuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQm9vdHN0cmFwRGVtb1ZhdWx0UGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSBDb2RlU2NyaXB0IFRvb2xraXQgaXMgaW5zdGFsbGVkLCBjb25maWd1cmVkLCBhbmQgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcERlbW9WYXVsdChwYXJhbXM6IEJvb3RzdHJhcERlbW9WYXVsdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHsgYXBwLCBwbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQgfSk7XG4gIGNvbnN0IGRpZFNldHRpbmdzQ2hhbmdlID0gYXdhaXQgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2luKHtcbiAgICBhcHAsXG4gICAgcGx1Z2luSWQ6IENPREVfU0NSSVBUX1RPT0xLSVRfUExVR0lOX0lELFxuICAgIHNldHRpbmdzOiBDT0RFX1NDUklQVF9UT09MS0lUX1NFVFRJTkdTXG4gIH0pO1xuICBhd2FpdCBlbnN1cmVJbnZvY2FibGVTY3JpcHRzRm9sZGVyKGFwcCk7XG5cbiAgaWYgKCFhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMoQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQpKSB7XG4gICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHsgYXBwLCBwbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQgfSk7XG4gIH0gZWxzZSBpZiAoZGlkU2V0dGluZ3NDaGFuZ2UpIHtcbiAgICAvLyBBbHJlYWR5IGVuYWJsZWQgd2l0aCBzdGFsZSBzZXR0aW5ncyBcdTIwMTQgcmVsb2FkIHNvIENvZGVTY3JpcHQgVG9vbGtpdCByZS1yZWFkcyB0aGUgZnJlc2hseSB3cml0dGVuIGRhdGEuanNvbi5cbiAgICBhd2FpdCBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHsgYXBwLCBwbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQgfSk7XG4gICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHsgYXBwLCBwbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQgfSk7XG4gIH1cbn1cblxuLy8gQ3JlYXRlcyBDb2RlU2NyaXB0IFRvb2xraXQncyBpbnZvY2FibGUtc2NyaXB0cyBmb2xkZXIgKHVuZGVyIGBtb2R1bGVzUm9vdGApIGlmIGl0IGlzIG1pc3NpbmcuXG4vLyBFdmVyeSBkZW1vIHZhdWx0IHRoZW4gaGFzIHRoZSBzYW1lIENvZGVTY3JpcHQgVG9vbGtpdCBsYXlvdXQgZXZlbiB3aGVuIGl0IHNoaXBzIG5vIGludm9jYWJsZSBzY3JpcHRzLlxuLy8gVGhlIGNvbW1pdHRlZCB2YXVsdCB0aGVyZWZvcmUgY2FycmllcyBubyBvdGhlcndpc2UtZW1wdHkgcGxhY2Vob2xkZXIgZm9sZGVyLlxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlSW52b2NhYmxlU2NyaXB0c0ZvbGRlcihhcHA6IEFwcCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBpbnZvY2FibGVTY3JpcHRzRm9sZGVyUGF0aCA9IGpvaW4oQ09ERV9TQ1JJUFRfVE9PTEtJVF9NT0RVTEVTX1JPT1QsIENPREVfU0NSSVBUX1RPT0xLSVRfU0VUVElOR1MuaW52b2NhYmxlU2NyaXB0c0ZvbGRlcik7XG4gIGlmICghYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGludm9jYWJsZVNjcmlwdHNGb2xkZXJQYXRoKSkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLm1rZGlyKGludm9jYWJsZVNjcmlwdHNGb2xkZXJQYXRoKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkEsU0FBUyxZQUFZO0FBQ3JCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFxQ1AsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxtQ0FBbUM7QUFDekMsTUFBTSwrQkFBMEQ7QUFBQSxFQUM5RCx3QkFBd0I7QUFBQSxFQUN4QixhQUFhO0FBQUEsRUFDYiwwQkFBMEI7QUFBQSxFQUMxQixtQkFBbUI7QUFDckI7QUFjQSxlQUFzQixtQkFBbUIsUUFBaUQ7QUFDeEYsUUFBTSxFQUFFLElBQUksSUFBSTtBQUNoQixRQUFNLHVCQUF1QixFQUFFLEtBQUssVUFBVSw4QkFBOEIsQ0FBQztBQUM3RSxRQUFNLG9CQUFvQixNQUFNLHlCQUF5QjtBQUFBLElBQ3ZEO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsRUFDWixDQUFDO0FBQ0QsUUFBTSw2QkFBNkIsR0FBRztBQUV0QyxNQUFJLENBQUMsSUFBSSxRQUFRLGVBQWUsSUFBSSw2QkFBNkIsR0FBRztBQUNsRSxVQUFNLHNCQUFzQixFQUFFLEtBQUssVUFBVSw4QkFBOEIsQ0FBQztBQUFBLEVBQzlFLFdBQVcsbUJBQW1CO0FBRTVCLFVBQU0sdUJBQXVCLEVBQUUsS0FBSyxVQUFVLDhCQUE4QixDQUFDO0FBQzdFLFVBQU0sc0JBQXNCLEVBQUUsS0FBSyxVQUFVLDhCQUE4QixDQUFDO0FBQUEsRUFDOUU7QUFDRjtBQUtBLGVBQWUsNkJBQTZCLEtBQXlCO0FBQ25FLFFBQU0sNkJBQTZCLEtBQUssa0NBQWtDLDZCQUE2QixzQkFBc0I7QUFDN0gsTUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLFFBQVEsT0FBTywwQkFBMEIsR0FBRztBQUMvRCxVQUFNLElBQUksTUFBTSxRQUFRLE1BQU0sMEJBQTBCO0FBQUEsRUFDMUQ7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -6,10 +6,16 @@
|
|
|
6
6
|
*
|
|
7
7
|
* A plugin can attach a `<plugin-id>.demo-vault.zip` archive to each GitHub release (see
|
|
8
8
|
* `archivePluginDemoVault` in `script-utils/demo-vault.ts`). This resolves the plugin's repository
|
|
9
|
-
* from Obsidian's community registry, downloads the archive for the chosen version,
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* from Obsidian's community registry, downloads the archive for the chosen version, and opens it as a
|
|
10
|
+
* vault in a new window. When the installed plugin version is behind the latest release, the user is
|
|
11
|
+
* offered a choice between the two versions.
|
|
12
|
+
*
|
|
13
|
+
* A progress notice is shown immediately (download + extraction can take a while, so the user must see
|
|
14
|
+
* something is happening right away). Only the downloaded ARCHIVE is cached (under the OS temp
|
|
15
|
+
* directory); every invocation extracts a FRESH copy into its own temporary folder and opens that, so a
|
|
16
|
+
* previous session's edits never leak into a new one. The extracted vault folder is named
|
|
17
|
+
* `<plugin-id>-<version>.demo-vault` so it reads nicely in Obsidian's vault switcher. Orphaned
|
|
18
|
+
* extracted folders left over from earlier sessions are cleaned up (best-effort) on each open.
|
|
13
19
|
*/
|
|
14
20
|
import type { App } from 'obsidian';
|
|
15
21
|
import type { PluginNoticeComponent } from './components/plugin-notice-component.mjs';
|
|
@@ -22,8 +28,8 @@ export interface OpenDemoVaultParams {
|
|
|
22
28
|
*/
|
|
23
29
|
readonly app: App;
|
|
24
30
|
/**
|
|
25
|
-
* The plugin id, used to locate the GitHub repository
|
|
26
|
-
*
|
|
31
|
+
* The plugin id, used to locate the GitHub repository, to name the archive asset, and to name the
|
|
32
|
+
* cached archive and the extracted vault folder.
|
|
27
33
|
*/
|
|
28
34
|
readonly pluginId: string;
|
|
29
35
|
/**
|
|
@@ -31,7 +37,8 @@ export interface OpenDemoVaultParams {
|
|
|
31
37
|
*/
|
|
32
38
|
readonly pluginName: string;
|
|
33
39
|
/**
|
|
34
|
-
* The notice component used to report problems (plugin not in the registry, missing
|
|
40
|
+
* The notice component used to report progress and problems (plugin not in the registry, missing
|
|
41
|
+
* archive).
|
|
35
42
|
*/
|
|
36
43
|
readonly pluginNoticeComponent: PluginNoticeComponent;
|
|
37
44
|
/**
|
|
@@ -43,8 +50,10 @@ export interface OpenDemoVaultParams {
|
|
|
43
50
|
* Downloads and opens the plugin's demo vault in a new Obsidian window. Desktop only.
|
|
44
51
|
*
|
|
45
52
|
* If the installed plugin version is the latest (or newer), its demo vault opens directly; otherwise
|
|
46
|
-
* the user chooses between the latest and the currently-installed version.
|
|
47
|
-
* archive is downloaded
|
|
53
|
+
* the user chooses between the latest and the currently-installed version. A progress notice is shown
|
|
54
|
+
* immediately. The chosen version's archive is downloaded once (then reused from the archive cache),
|
|
55
|
+
* but a fresh copy is extracted into its own temporary folder on every open — the vault is never reused
|
|
56
|
+
* across sessions.
|
|
48
57
|
*
|
|
49
58
|
* @param params - The {@link OpenDemoVaultParams}.
|
|
50
59
|
* @returns A {@link Promise} that resolves once the vault has been opened, or once the operation has
|